grok-cli-hurry-mode 1.0.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 (137) hide show
  1. package/.grok/settings.json +3 -0
  2. package/LICENSE +21 -0
  3. package/README.md +452 -0
  4. package/dist/agent/grok-agent.d.ts +54 -0
  5. package/dist/agent/grok-agent.js +674 -0
  6. package/dist/agent/grok-agent.js.map +1 -0
  7. package/dist/agent/index.d.ts +14 -0
  8. package/dist/agent/index.js +137 -0
  9. package/dist/agent/index.js.map +1 -0
  10. package/dist/commands/mcp.d.ts +2 -0
  11. package/dist/commands/mcp.js +245 -0
  12. package/dist/commands/mcp.js.map +1 -0
  13. package/dist/grok/client.d.ts +49 -0
  14. package/dist/grok/client.js +85 -0
  15. package/dist/grok/client.js.map +1 -0
  16. package/dist/grok/tools.d.ts +8 -0
  17. package/dist/grok/tools.js +357 -0
  18. package/dist/grok/tools.js.map +1 -0
  19. package/dist/hooks/use-enhanced-input.d.ts +37 -0
  20. package/dist/hooks/use-enhanced-input.js +217 -0
  21. package/dist/hooks/use-enhanced-input.js.map +1 -0
  22. package/dist/hooks/use-input-handler.d.ts +34 -0
  23. package/dist/hooks/use-input-handler.js +611 -0
  24. package/dist/hooks/use-input-handler.js.map +1 -0
  25. package/dist/hooks/use-input-history.d.ts +9 -0
  26. package/dist/hooks/use-input-history.js +64 -0
  27. package/dist/hooks/use-input-history.js.map +1 -0
  28. package/dist/index.d.ts +2 -0
  29. package/dist/index.js +151949 -0
  30. package/dist/index.js.map +1 -0
  31. package/dist/mcp/client.d.ts +29 -0
  32. package/dist/mcp/client.js +167 -0
  33. package/dist/mcp/client.js.map +1 -0
  34. package/dist/mcp/config.d.ts +13 -0
  35. package/dist/mcp/config.js +51 -0
  36. package/dist/mcp/config.js.map +1 -0
  37. package/dist/mcp/transports.d.ts +51 -0
  38. package/dist/mcp/transports.js +229 -0
  39. package/dist/mcp/transports.js.map +1 -0
  40. package/dist/node_modules/react/index.js +1841 -0
  41. package/dist/tools/bash.d.ts +10 -0
  42. package/dist/tools/bash.js +81 -0
  43. package/dist/tools/bash.js.map +1 -0
  44. package/dist/tools/confirmation-tool.d.ts +16 -0
  45. package/dist/tools/confirmation-tool.js +75 -0
  46. package/dist/tools/confirmation-tool.js.map +1 -0
  47. package/dist/tools/index.d.ts +6 -0
  48. package/dist/tools/index.js +16 -0
  49. package/dist/tools/index.js.map +1 -0
  50. package/dist/tools/morph-editor.d.ts +36 -0
  51. package/dist/tools/morph-editor.js +347 -0
  52. package/dist/tools/morph-editor.js.map +1 -0
  53. package/dist/tools/search.d.ts +69 -0
  54. package/dist/tools/search.js +341 -0
  55. package/dist/tools/search.js.map +1 -0
  56. package/dist/tools/text-editor.d.ts +16 -0
  57. package/dist/tools/text-editor.js +565 -0
  58. package/dist/tools/text-editor.js.map +1 -0
  59. package/dist/tools/todo-tool.d.ts +20 -0
  60. package/dist/tools/todo-tool.js +135 -0
  61. package/dist/tools/todo-tool.js.map +1 -0
  62. package/dist/types/index.d.ts +30 -0
  63. package/dist/types/index.js +3 -0
  64. package/dist/types/index.js.map +1 -0
  65. package/dist/ui/app.d.ts +7 -0
  66. package/dist/ui/app.js +160 -0
  67. package/dist/ui/app.js.map +1 -0
  68. package/dist/ui/components/api-key-input.d.ts +7 -0
  69. package/dist/ui/components/api-key-input.js +124 -0
  70. package/dist/ui/components/api-key-input.js.map +1 -0
  71. package/dist/ui/components/chat-history.d.ts +8 -0
  72. package/dist/ui/components/chat-history.js +177 -0
  73. package/dist/ui/components/chat-history.js.map +1 -0
  74. package/dist/ui/components/chat-input.d.ts +9 -0
  75. package/dist/ui/components/chat-input.js +87 -0
  76. package/dist/ui/components/chat-input.js.map +1 -0
  77. package/dist/ui/components/chat-interface.d.ts +8 -0
  78. package/dist/ui/components/chat-interface.js +344 -0
  79. package/dist/ui/components/chat-interface.js.map +1 -0
  80. package/dist/ui/components/command-suggestions.d.ts +17 -0
  81. package/dist/ui/components/command-suggestions.js +68 -0
  82. package/dist/ui/components/command-suggestions.js.map +1 -0
  83. package/dist/ui/components/confirmation-dialog.d.ts +11 -0
  84. package/dist/ui/components/confirmation-dialog.js +167 -0
  85. package/dist/ui/components/confirmation-dialog.js.map +1 -0
  86. package/dist/ui/components/diff-renderer.d.ts +13 -0
  87. package/dist/ui/components/diff-renderer.js +217 -0
  88. package/dist/ui/components/diff-renderer.js.map +1 -0
  89. package/dist/ui/components/loading-spinner.d.ts +8 -0
  90. package/dist/ui/components/loading-spinner.js +92 -0
  91. package/dist/ui/components/loading-spinner.js.map +1 -0
  92. package/dist/ui/components/mcp-status.d.ts +5 -0
  93. package/dist/ui/components/mcp-status.js +74 -0
  94. package/dist/ui/components/mcp-status.js.map +1 -0
  95. package/dist/ui/components/model-selection.d.ts +12 -0
  96. package/dist/ui/components/model-selection.js +28 -0
  97. package/dist/ui/components/model-selection.js.map +1 -0
  98. package/dist/ui/shared/max-sized-box.d.ts +8 -0
  99. package/dist/ui/shared/max-sized-box.js +15 -0
  100. package/dist/ui/shared/max-sized-box.js.map +1 -0
  101. package/dist/ui/utils/code-colorizer.d.ts +2 -0
  102. package/dist/ui/utils/code-colorizer.js +18 -0
  103. package/dist/ui/utils/code-colorizer.js.map +1 -0
  104. package/dist/ui/utils/colors.d.ts +14 -0
  105. package/dist/ui/utils/colors.js +18 -0
  106. package/dist/ui/utils/colors.js.map +1 -0
  107. package/dist/ui/utils/markdown-renderer.d.ts +4 -0
  108. package/dist/ui/utils/markdown-renderer.js +29 -0
  109. package/dist/ui/utils/markdown-renderer.js.map +1 -0
  110. package/dist/utils/confirmation-service.d.ts +33 -0
  111. package/dist/utils/confirmation-service.js +113 -0
  112. package/dist/utils/confirmation-service.js.map +1 -0
  113. package/dist/utils/custom-instructions.d.ts +1 -0
  114. package/dist/utils/custom-instructions.js +53 -0
  115. package/dist/utils/custom-instructions.js.map +1 -0
  116. package/dist/utils/model-config.d.ts +28 -0
  117. package/dist/utils/model-config.js +49 -0
  118. package/dist/utils/model-config.js.map +1 -0
  119. package/dist/utils/settings-manager.d.ts +94 -0
  120. package/dist/utils/settings-manager.js +275 -0
  121. package/dist/utils/settings-manager.js.map +1 -0
  122. package/dist/utils/settings.d.ts +1 -0
  123. package/dist/utils/settings.js +8 -0
  124. package/dist/utils/settings.js.map +1 -0
  125. package/dist/utils/text-utils.d.ts +80 -0
  126. package/dist/utils/text-utils.js +197 -0
  127. package/dist/utils/text-utils.js.map +1 -0
  128. package/dist/utils/token-counter.d.ts +33 -0
  129. package/dist/utils/token-counter.js +83 -0
  130. package/dist/utils/token-counter.js.map +1 -0
  131. package/dist/yoga.wasm +0 -0
  132. package/eslint.config.mjs +28 -0
  133. package/fix.awk +41 -0
  134. package/grok-logo-screenshot.png +0 -0
  135. package/package.json +68 -0
  136. package/sed_cmd.sh +35 -0
  137. package/temp.txt +29 -0
@@ -0,0 +1,34 @@
1
+ import { GrokAgent, ChatEntry } from "../agent/grok-agent.js";
2
+ interface UseInputHandlerProps {
3
+ agent: GrokAgent;
4
+ chatHistory: ChatEntry[];
5
+ setChatHistory: React.Dispatch<React.SetStateAction<ChatEntry[]>>;
6
+ setIsProcessing: (processing: boolean) => void;
7
+ setIsStreaming: (streaming: boolean) => void;
8
+ setTokenCount: (count: number) => void;
9
+ setProcessingTime: (time: number) => void;
10
+ processingStartTime: React.MutableRefObject<number>;
11
+ isProcessing: boolean;
12
+ isStreaming: boolean;
13
+ isConfirmationActive?: boolean;
14
+ }
15
+ interface CommandSuggestion {
16
+ command: string;
17
+ description: string;
18
+ }
19
+ interface ModelOption {
20
+ model: string;
21
+ }
22
+ export declare function useInputHandler({ agent, chatHistory, setChatHistory, setIsProcessing, setIsStreaming, setTokenCount, setProcessingTime, processingStartTime, isProcessing, isStreaming, isConfirmationActive, }: UseInputHandlerProps): {
23
+ input: string;
24
+ cursorPosition: number;
25
+ showCommandSuggestions: boolean;
26
+ selectedCommandIndex: number;
27
+ showModelSelection: boolean;
28
+ selectedModelIndex: number;
29
+ commandSuggestions: CommandSuggestion[];
30
+ availableModels: ModelOption[];
31
+ agent: GrokAgent;
32
+ autoEditEnabled: boolean;
33
+ };
34
+ export {};
@@ -0,0 +1,611 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useInputHandler = useInputHandler;
4
+ const react_1 = require("react");
5
+ const ink_1 = require("ink");
6
+ const confirmation_service_js_1 = require("../utils/confirmation-service.js");
7
+ const use_enhanced_input_js_1 = require("./use-enhanced-input.js");
8
+ const command_suggestions_js_1 = require("../ui/components/command-suggestions.js");
9
+ const model_config_js_1 = require("../utils/model-config.js");
10
+ function useInputHandler({ agent, chatHistory, setChatHistory, setIsProcessing, setIsStreaming, setTokenCount, setProcessingTime, processingStartTime, isProcessing, isStreaming, isConfirmationActive = false, }) {
11
+ const [showCommandSuggestions, setShowCommandSuggestions] = (0, react_1.useState)(false);
12
+ const [selectedCommandIndex, setSelectedCommandIndex] = (0, react_1.useState)(0);
13
+ const [showModelSelection, setShowModelSelection] = (0, react_1.useState)(false);
14
+ const [selectedModelIndex, setSelectedModelIndex] = (0, react_1.useState)(0);
15
+ const [autoEditEnabled, setAutoEditEnabled] = (0, react_1.useState)(() => {
16
+ const confirmationService = confirmation_service_js_1.ConfirmationService.getInstance();
17
+ const sessionFlags = confirmationService.getSessionFlags();
18
+ return sessionFlags.allOperations;
19
+ });
20
+ const handleSpecialKey = (key) => {
21
+ // Don't handle input if confirmation dialog is active
22
+ if (isConfirmationActive) {
23
+ return true; // Prevent default handling
24
+ }
25
+ // Handle shift+tab to toggle auto-edit mode
26
+ if (key.shift && key.tab) {
27
+ const newAutoEditState = !autoEditEnabled;
28
+ setAutoEditEnabled(newAutoEditState);
29
+ const confirmationService = confirmation_service_js_1.ConfirmationService.getInstance();
30
+ if (newAutoEditState) {
31
+ // Enable auto-edit: set all operations to be accepted
32
+ confirmationService.setSessionFlag("allOperations", true);
33
+ }
34
+ else {
35
+ // Disable auto-edit: reset session flags
36
+ confirmationService.resetSession();
37
+ }
38
+ return true; // Handled
39
+ }
40
+ // Handle escape key for closing menus
41
+ if (key.escape) {
42
+ if (showCommandSuggestions) {
43
+ setShowCommandSuggestions(false);
44
+ setSelectedCommandIndex(0);
45
+ return true;
46
+ }
47
+ if (showModelSelection) {
48
+ setShowModelSelection(false);
49
+ setSelectedModelIndex(0);
50
+ return true;
51
+ }
52
+ if (isProcessing || isStreaming) {
53
+ agent.abortCurrentOperation();
54
+ setIsProcessing(false);
55
+ setIsStreaming(false);
56
+ setTokenCount(0);
57
+ setProcessingTime(0);
58
+ processingStartTime.current = 0;
59
+ return true;
60
+ }
61
+ return false; // Let default escape handling work
62
+ }
63
+ // Handle command suggestions navigation
64
+ if (showCommandSuggestions) {
65
+ const filteredSuggestions = (0, command_suggestions_js_1.filterCommandSuggestions)(commandSuggestions, input);
66
+ if (filteredSuggestions.length === 0) {
67
+ setShowCommandSuggestions(false);
68
+ setSelectedCommandIndex(0);
69
+ return false; // Continue processing
70
+ }
71
+ else {
72
+ if (key.upArrow) {
73
+ setSelectedCommandIndex((prev) => prev === 0 ? filteredSuggestions.length - 1 : prev - 1);
74
+ return true;
75
+ }
76
+ if (key.downArrow) {
77
+ setSelectedCommandIndex((prev) => (prev + 1) % filteredSuggestions.length);
78
+ return true;
79
+ }
80
+ if (key.tab || key.return) {
81
+ const safeIndex = Math.min(selectedCommandIndex, filteredSuggestions.length - 1);
82
+ const selectedCommand = filteredSuggestions[safeIndex];
83
+ const newInput = selectedCommand.command + " ";
84
+ setInput(newInput);
85
+ setCursorPosition(newInput.length);
86
+ setShowCommandSuggestions(false);
87
+ setSelectedCommandIndex(0);
88
+ return true;
89
+ }
90
+ }
91
+ }
92
+ // Handle model selection navigation
93
+ if (showModelSelection) {
94
+ if (key.upArrow) {
95
+ setSelectedModelIndex((prev) => prev === 0 ? availableModels.length - 1 : prev - 1);
96
+ return true;
97
+ }
98
+ if (key.downArrow) {
99
+ setSelectedModelIndex((prev) => (prev + 1) % availableModels.length);
100
+ return true;
101
+ }
102
+ if (key.tab || key.return) {
103
+ const selectedModel = availableModels[selectedModelIndex];
104
+ agent.setModel(selectedModel.model);
105
+ (0, model_config_js_1.updateCurrentModel)(selectedModel.model);
106
+ const confirmEntry = {
107
+ type: "assistant",
108
+ content: `✓ Switched to model: ${selectedModel.model}`,
109
+ timestamp: new Date(),
110
+ };
111
+ setChatHistory((prev) => [...prev, confirmEntry]);
112
+ setShowModelSelection(false);
113
+ setSelectedModelIndex(0);
114
+ return true;
115
+ }
116
+ }
117
+ return false; // Let default handling proceed
118
+ };
119
+ const handleInputSubmit = async (userInput) => {
120
+ if (userInput === "exit" || userInput === "quit") {
121
+ process.exit(0);
122
+ return;
123
+ }
124
+ if (userInput.trim()) {
125
+ const directCommandResult = await handleDirectCommand(userInput);
126
+ if (!directCommandResult) {
127
+ await processUserMessage(userInput);
128
+ }
129
+ }
130
+ };
131
+ const handleInputChange = (newInput) => {
132
+ // Update command suggestions based on input
133
+ if (newInput.startsWith("/")) {
134
+ setShowCommandSuggestions(true);
135
+ setSelectedCommandIndex(0);
136
+ }
137
+ else {
138
+ setShowCommandSuggestions(false);
139
+ setSelectedCommandIndex(0);
140
+ }
141
+ };
142
+ const { input, cursorPosition, setInput, setCursorPosition, clearInput, resetHistory, handleInput, } = (0, use_enhanced_input_js_1.useEnhancedInput)({
143
+ onSubmit: handleInputSubmit,
144
+ onSpecialKey: handleSpecialKey,
145
+ disabled: isConfirmationActive,
146
+ });
147
+ // Hook up the actual input handling
148
+ (0, ink_1.useInput)((inputChar, key) => {
149
+ handleInput(inputChar, key);
150
+ });
151
+ // Update command suggestions when input changes
152
+ (0, react_1.useEffect)(() => {
153
+ handleInputChange(input);
154
+ }, [input]);
155
+ const commandSuggestions = [
156
+ { command: "/help", description: "Show help information" },
157
+ { command: "/clear", description: "Clear chat history" },
158
+ { command: "/models", description: "Switch Grok Model" },
159
+ { command: "/commit-and-push", description: "AI commit & push to remote" },
160
+ { command: "/exit", description: "Exit the application" },
161
+ ];
162
+ // Load models from configuration with fallback to defaults
163
+ const availableModels = (0, react_1.useMemo)(() => {
164
+ return (0, model_config_js_1.loadModelConfig)(); // Return directly, interface already matches
165
+ }, []);
166
+ const handleDirectCommand = async (input) => {
167
+ const trimmedInput = input.trim();
168
+ if (trimmedInput === "/clear") {
169
+ // Reset chat history
170
+ setChatHistory([]);
171
+ // Reset processing states
172
+ setIsProcessing(false);
173
+ setIsStreaming(false);
174
+ setTokenCount(0);
175
+ setProcessingTime(0);
176
+ processingStartTime.current = 0;
177
+ // Reset confirmation service session flags
178
+ const confirmationService = confirmation_service_js_1.ConfirmationService.getInstance();
179
+ confirmationService.resetSession();
180
+ clearInput();
181
+ resetHistory();
182
+ return true;
183
+ }
184
+ if (trimmedInput === "/help") {
185
+ const helpEntry = {
186
+ type: "assistant",
187
+ content: `Grok CLI Help:
188
+
189
+ Built-in Commands:
190
+ /clear - Clear chat history
191
+ /help - Show this help
192
+ /models - Switch between available models
193
+ /exit - Exit application
194
+ exit, quit - Exit application
195
+
196
+ Git Commands:
197
+ /commit-and-push - AI-generated commit + push to remote
198
+
199
+ Enhanced Input Features:
200
+ ↑/↓ Arrow - Navigate command history
201
+ Ctrl+C - Clear input (press twice to exit)
202
+ Ctrl+←/→ - Move by word
203
+ Ctrl+A/E - Move to line start/end
204
+ Ctrl+W - Delete word before cursor
205
+ Ctrl+K - Delete to end of line
206
+ Ctrl+U - Delete to start of line
207
+ Shift+Tab - Toggle auto-edit mode (bypass confirmations)
208
+
209
+ Direct Commands (executed immediately):
210
+ ls [path] - List directory contents
211
+ pwd - Show current directory
212
+ cd <path> - Change directory
213
+ cat <file> - View file contents
214
+ mkdir <dir> - Create directory
215
+ touch <file>- Create empty file
216
+
217
+ Model Configuration:
218
+ Edit ~/.grok/models.json to add custom models (Claude, GPT, Gemini, etc.)
219
+
220
+ For complex operations, just describe what you want in natural language.
221
+ Examples:
222
+ "edit package.json and add a new script"
223
+ "create a new React component called Header"
224
+ "show me all TypeScript files in this project"`,
225
+ timestamp: new Date(),
226
+ };
227
+ setChatHistory((prev) => [...prev, helpEntry]);
228
+ clearInput();
229
+ return true;
230
+ }
231
+ if (trimmedInput === "/exit") {
232
+ process.exit(0);
233
+ return true;
234
+ }
235
+ if (trimmedInput === "/models") {
236
+ setShowModelSelection(true);
237
+ setSelectedModelIndex(0);
238
+ clearInput();
239
+ return true;
240
+ }
241
+ if (trimmedInput.startsWith("/models ")) {
242
+ const modelArg = trimmedInput.split(" ")[1];
243
+ const modelNames = availableModels.map((m) => m.model);
244
+ if (modelNames.includes(modelArg)) {
245
+ agent.setModel(modelArg);
246
+ (0, model_config_js_1.updateCurrentModel)(modelArg); // Update project current model
247
+ const confirmEntry = {
248
+ type: "assistant",
249
+ content: `✓ Switched to model: ${modelArg}`,
250
+ timestamp: new Date(),
251
+ };
252
+ setChatHistory((prev) => [...prev, confirmEntry]);
253
+ }
254
+ else {
255
+ const errorEntry = {
256
+ type: "assistant",
257
+ content: `Invalid model: ${modelArg}
258
+
259
+ Available models: ${modelNames.join(", ")}`,
260
+ timestamp: new Date(),
261
+ };
262
+ setChatHistory((prev) => [...prev, errorEntry]);
263
+ }
264
+ clearInput();
265
+ return true;
266
+ }
267
+ if (trimmedInput === "/commit-and-push") {
268
+ const userEntry = {
269
+ type: "user",
270
+ content: "/commit-and-push",
271
+ timestamp: new Date(),
272
+ };
273
+ setChatHistory((prev) => [...prev, userEntry]);
274
+ setIsProcessing(true);
275
+ setIsStreaming(true);
276
+ try {
277
+ // First check if there are any changes at all
278
+ const initialStatusResult = await agent.executeBashCommand("git status --porcelain");
279
+ if (!initialStatusResult.success ||
280
+ !initialStatusResult.output?.trim()) {
281
+ const noChangesEntry = {
282
+ type: "assistant",
283
+ content: "No changes to commit. Working directory is clean.",
284
+ timestamp: new Date(),
285
+ };
286
+ setChatHistory((prev) => [...prev, noChangesEntry]);
287
+ setIsProcessing(false);
288
+ setIsStreaming(false);
289
+ setInput("");
290
+ return true;
291
+ }
292
+ // Add all changes
293
+ const addResult = await agent.executeBashCommand("git add .");
294
+ if (!addResult.success) {
295
+ const addErrorEntry = {
296
+ type: "assistant",
297
+ content: `Failed to stage changes: ${addResult.error || "Unknown error"}`,
298
+ timestamp: new Date(),
299
+ };
300
+ setChatHistory((prev) => [...prev, addErrorEntry]);
301
+ setIsProcessing(false);
302
+ setIsStreaming(false);
303
+ setInput("");
304
+ return true;
305
+ }
306
+ // Show that changes were staged
307
+ const addEntry = {
308
+ type: "tool_result",
309
+ content: "Changes staged successfully",
310
+ timestamp: new Date(),
311
+ toolCall: {
312
+ id: `git_add_${Date.now()}`,
313
+ type: "function",
314
+ function: {
315
+ name: "bash",
316
+ arguments: JSON.stringify({ command: "git add ." }),
317
+ },
318
+ },
319
+ toolResult: addResult,
320
+ };
321
+ setChatHistory((prev) => [...prev, addEntry]);
322
+ // Get staged changes for commit message generation
323
+ const diffResult = await agent.executeBashCommand("git diff --cached");
324
+ // Generate commit message using AI
325
+ const commitPrompt = `Generate a concise, professional git commit message for these changes:
326
+
327
+ Git Status:
328
+ ${initialStatusResult.output}
329
+
330
+ Git Diff (staged changes):
331
+ ${diffResult.output || "No staged changes shown"}
332
+
333
+ Follow conventional commit format (feat:, fix:, docs:, etc.) and keep it under 72 characters.
334
+ Respond with ONLY the commit message, no additional text.`;
335
+ let commitMessage = "";
336
+ let streamingEntry = null;
337
+ for await (const chunk of agent.processUserMessageStream(commitPrompt)) {
338
+ if (chunk.type === "content" && chunk.content) {
339
+ if (!streamingEntry) {
340
+ const newEntry = {
341
+ type: "assistant",
342
+ content: `Generating commit message...\n\n${chunk.content}`,
343
+ timestamp: new Date(),
344
+ isStreaming: true,
345
+ };
346
+ setChatHistory((prev) => [...prev, newEntry]);
347
+ streamingEntry = newEntry;
348
+ commitMessage = chunk.content;
349
+ }
350
+ else {
351
+ commitMessage += chunk.content;
352
+ setChatHistory((prev) => prev.map((entry, idx) => idx === prev.length - 1 && entry.isStreaming
353
+ ? {
354
+ ...entry,
355
+ content: `Generating commit message...\n\n${commitMessage}`,
356
+ }
357
+ : entry));
358
+ }
359
+ }
360
+ else if (chunk.type === "done") {
361
+ if (streamingEntry) {
362
+ setChatHistory((prev) => prev.map((entry) => entry.isStreaming
363
+ ? {
364
+ ...entry,
365
+ content: `Generated commit message: "${commitMessage.trim()}"`,
366
+ isStreaming: false,
367
+ }
368
+ : entry));
369
+ }
370
+ break;
371
+ }
372
+ }
373
+ // Execute the commit
374
+ const cleanCommitMessage = commitMessage
375
+ .trim()
376
+ .replace(/^["']|["']$/g, "");
377
+ const commitCommand = `git commit -m "${cleanCommitMessage}"`;
378
+ const commitResult = await agent.executeBashCommand(commitCommand);
379
+ const commitEntry = {
380
+ type: "tool_result",
381
+ content: commitResult.success
382
+ ? commitResult.output || "Commit successful"
383
+ : commitResult.error || "Commit failed",
384
+ timestamp: new Date(),
385
+ toolCall: {
386
+ id: `git_commit_${Date.now()}`,
387
+ type: "function",
388
+ function: {
389
+ name: "bash",
390
+ arguments: JSON.stringify({ command: commitCommand }),
391
+ },
392
+ },
393
+ toolResult: commitResult,
394
+ };
395
+ setChatHistory((prev) => [...prev, commitEntry]);
396
+ // If commit was successful, push to remote
397
+ if (commitResult.success) {
398
+ // First try regular push, if it fails try with upstream setup
399
+ let pushResult = await agent.executeBashCommand("git push");
400
+ let pushCommand = "git push";
401
+ if (!pushResult.success &&
402
+ pushResult.error?.includes("no upstream branch")) {
403
+ pushCommand = "git push -u origin HEAD";
404
+ pushResult = await agent.executeBashCommand(pushCommand);
405
+ }
406
+ const pushEntry = {
407
+ type: "tool_result",
408
+ content: pushResult.success
409
+ ? pushResult.output || "Push successful"
410
+ : pushResult.error || "Push failed",
411
+ timestamp: new Date(),
412
+ toolCall: {
413
+ id: `git_push_${Date.now()}`,
414
+ type: "function",
415
+ function: {
416
+ name: "bash",
417
+ arguments: JSON.stringify({ command: pushCommand }),
418
+ },
419
+ },
420
+ toolResult: pushResult,
421
+ };
422
+ setChatHistory((prev) => [...prev, pushEntry]);
423
+ }
424
+ }
425
+ catch (error) {
426
+ const errorEntry = {
427
+ type: "assistant",
428
+ content: `Error during commit and push: ${error.message}`,
429
+ timestamp: new Date(),
430
+ };
431
+ setChatHistory((prev) => [...prev, errorEntry]);
432
+ }
433
+ setIsProcessing(false);
434
+ setIsStreaming(false);
435
+ clearInput();
436
+ return true;
437
+ }
438
+ const directBashCommands = [
439
+ "ls",
440
+ "pwd",
441
+ "cd",
442
+ "cat",
443
+ "mkdir",
444
+ "touch",
445
+ "echo",
446
+ "grep",
447
+ "find",
448
+ "cp",
449
+ "mv",
450
+ "rm",
451
+ ];
452
+ const firstWord = trimmedInput.split(" ")[0];
453
+ if (directBashCommands.includes(firstWord)) {
454
+ const userEntry = {
455
+ type: "user",
456
+ content: trimmedInput,
457
+ timestamp: new Date(),
458
+ };
459
+ setChatHistory((prev) => [...prev, userEntry]);
460
+ try {
461
+ const result = await agent.executeBashCommand(trimmedInput);
462
+ const commandEntry = {
463
+ type: "tool_result",
464
+ content: result.success
465
+ ? result.output || "Command completed"
466
+ : result.error || "Command failed",
467
+ timestamp: new Date(),
468
+ toolCall: {
469
+ id: `bash_${Date.now()}`,
470
+ type: "function",
471
+ function: {
472
+ name: "bash",
473
+ arguments: JSON.stringify({ command: trimmedInput }),
474
+ },
475
+ },
476
+ toolResult: result,
477
+ };
478
+ setChatHistory((prev) => [...prev, commandEntry]);
479
+ }
480
+ catch (error) {
481
+ const errorEntry = {
482
+ type: "assistant",
483
+ content: `Error executing command: ${error.message}`,
484
+ timestamp: new Date(),
485
+ };
486
+ setChatHistory((prev) => [...prev, errorEntry]);
487
+ }
488
+ clearInput();
489
+ return true;
490
+ }
491
+ return false;
492
+ };
493
+ const processUserMessage = async (userInput) => {
494
+ const userEntry = {
495
+ type: "user",
496
+ content: userInput,
497
+ timestamp: new Date(),
498
+ };
499
+ setChatHistory((prev) => [...prev, userEntry]);
500
+ setIsProcessing(true);
501
+ clearInput();
502
+ try {
503
+ setIsStreaming(true);
504
+ let streamingEntry = null;
505
+ for await (const chunk of agent.processUserMessageStream(userInput)) {
506
+ switch (chunk.type) {
507
+ case "content":
508
+ if (chunk.content) {
509
+ if (!streamingEntry) {
510
+ const newStreamingEntry = {
511
+ type: "assistant",
512
+ content: chunk.content,
513
+ timestamp: new Date(),
514
+ isStreaming: true,
515
+ };
516
+ setChatHistory((prev) => [...prev, newStreamingEntry]);
517
+ streamingEntry = newStreamingEntry;
518
+ }
519
+ else {
520
+ setChatHistory((prev) => prev.map((entry, idx) => idx === prev.length - 1 && entry.isStreaming
521
+ ? { ...entry, content: entry.content + chunk.content }
522
+ : entry));
523
+ }
524
+ }
525
+ break;
526
+ case "token_count":
527
+ if (chunk.tokenCount !== undefined) {
528
+ setTokenCount(chunk.tokenCount);
529
+ }
530
+ break;
531
+ case "tool_calls":
532
+ if (chunk.toolCalls) {
533
+ // Stop streaming for the current assistant message
534
+ setChatHistory((prev) => prev.map((entry) => entry.isStreaming
535
+ ? {
536
+ ...entry,
537
+ isStreaming: false,
538
+ toolCalls: chunk.toolCalls,
539
+ }
540
+ : entry));
541
+ streamingEntry = null;
542
+ // Add individual tool call entries to show tools are being executed
543
+ chunk.toolCalls.forEach((toolCall) => {
544
+ const toolCallEntry = {
545
+ type: "tool_call",
546
+ content: "Executing...",
547
+ timestamp: new Date(),
548
+ toolCall: toolCall,
549
+ };
550
+ setChatHistory((prev) => [...prev, toolCallEntry]);
551
+ });
552
+ }
553
+ break;
554
+ case "tool_result":
555
+ if (chunk.toolCall && chunk.toolResult) {
556
+ setChatHistory((prev) => prev.map((entry) => {
557
+ if (entry.isStreaming) {
558
+ return { ...entry, isStreaming: false };
559
+ }
560
+ // Update the existing tool_call entry with the result
561
+ if (entry.type === "tool_call" &&
562
+ entry.toolCall?.id === chunk.toolCall?.id) {
563
+ return {
564
+ ...entry,
565
+ type: "tool_result",
566
+ content: chunk.toolResult.success
567
+ ? chunk.toolResult.output || "Success"
568
+ : chunk.toolResult.error || "Error occurred",
569
+ toolResult: chunk.toolResult,
570
+ };
571
+ }
572
+ return entry;
573
+ }));
574
+ streamingEntry = null;
575
+ }
576
+ break;
577
+ case "done":
578
+ if (streamingEntry) {
579
+ setChatHistory((prev) => prev.map((entry) => entry.isStreaming ? { ...entry, isStreaming: false } : entry));
580
+ }
581
+ setIsStreaming(false);
582
+ break;
583
+ }
584
+ }
585
+ }
586
+ catch (error) {
587
+ const errorEntry = {
588
+ type: "assistant",
589
+ content: `Error: ${error.message}`,
590
+ timestamp: new Date(),
591
+ };
592
+ setChatHistory((prev) => [...prev, errorEntry]);
593
+ setIsStreaming(false);
594
+ }
595
+ setIsProcessing(false);
596
+ processingStartTime.current = 0;
597
+ };
598
+ return {
599
+ input,
600
+ cursorPosition,
601
+ showCommandSuggestions,
602
+ selectedCommandIndex,
603
+ showModelSelection,
604
+ selectedModelIndex,
605
+ commandSuggestions,
606
+ availableModels,
607
+ agent,
608
+ autoEditEnabled,
609
+ };
610
+ }
611
+ //# sourceMappingURL=use-input-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-input-handler.js","sourceRoot":"","sources":["../../src/hooks/use-input-handler.ts"],"names":[],"mappings":";;AAgCA,0CA+sBC;AA/uBD,iCAAqD;AACrD,6BAA+B;AAE/B,8EAAuE;AACvE,mEAAgE;AAEhE,oFAAmF;AACnF,8DAA+E;AAyB/E,SAAgB,eAAe,CAAC,EAC9B,KAAK,EACL,WAAW,EACX,cAAc,EACd,eAAe,EACf,cAAc,EACd,aAAa,EACb,iBAAiB,EACjB,mBAAmB,EACnB,YAAY,EACZ,WAAW,EACX,oBAAoB,GAAG,KAAK,GACP;IACrB,MAAM,CAAC,sBAAsB,EAAE,yBAAyB,CAAC,GAAG,IAAA,gBAAQ,EAAC,KAAK,CAAC,CAAC;IAC5E,MAAM,CAAC,oBAAoB,EAAE,uBAAuB,CAAC,GAAG,IAAA,gBAAQ,EAAC,CAAC,CAAC,CAAC;IACpE,MAAM,CAAC,kBAAkB,EAAE,qBAAqB,CAAC,GAAG,IAAA,gBAAQ,EAAC,KAAK,CAAC,CAAC;IACpE,MAAM,CAAC,kBAAkB,EAAE,qBAAqB,CAAC,GAAG,IAAA,gBAAQ,EAAC,CAAC,CAAC,CAAC;IAChE,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,IAAA,gBAAQ,EAAC,GAAG,EAAE;QAC1D,MAAM,mBAAmB,GAAG,6CAAmB,CAAC,WAAW,EAAE,CAAC;QAC9D,MAAM,YAAY,GAAG,mBAAmB,CAAC,eAAe,EAAE,CAAC;QAC3D,OAAO,YAAY,CAAC,aAAa,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,MAAM,gBAAgB,GAAG,CAAC,GAAQ,EAAW,EAAE;QAC7C,sDAAsD;QACtD,IAAI,oBAAoB,EAAE,CAAC;YACzB,OAAO,IAAI,CAAC,CAAC,2BAA2B;QAC1C,CAAC;QAED,4CAA4C;QAC5C,IAAI,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC;YACzB,MAAM,gBAAgB,GAAG,CAAC,eAAe,CAAC;YAC1C,kBAAkB,CAAC,gBAAgB,CAAC,CAAC;YAErC,MAAM,mBAAmB,GAAG,6CAAmB,CAAC,WAAW,EAAE,CAAC;YAC9D,IAAI,gBAAgB,EAAE,CAAC;gBACrB,sDAAsD;gBACtD,mBAAmB,CAAC,cAAc,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;YAC5D,CAAC;iBAAM,CAAC;gBACN,yCAAyC;gBACzC,mBAAmB,CAAC,YAAY,EAAE,CAAC;YACrC,CAAC;YACD,OAAO,IAAI,CAAC,CAAC,UAAU;QACzB,CAAC;QAED,sCAAsC;QACtC,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YACf,IAAI,sBAAsB,EAAE,CAAC;gBAC3B,yBAAyB,CAAC,KAAK,CAAC,CAAC;gBACjC,uBAAuB,CAAC,CAAC,CAAC,CAAC;gBAC3B,OAAO,IAAI,CAAC;YACd,CAAC;YACD,IAAI,kBAAkB,EAAE,CAAC;gBACvB,qBAAqB,CAAC,KAAK,CAAC,CAAC;gBAC7B,qBAAqB,CAAC,CAAC,CAAC,CAAC;gBACzB,OAAO,IAAI,CAAC;YACd,CAAC;YACD,IAAI,YAAY,IAAI,WAAW,EAAE,CAAC;gBAChC,KAAK,CAAC,qBAAqB,EAAE,CAAC;gBAC9B,eAAe,CAAC,KAAK,CAAC,CAAC;gBACvB,cAAc,CAAC,KAAK,CAAC,CAAC;gBACtB,aAAa,CAAC,CAAC,CAAC,CAAC;gBACjB,iBAAiB,CAAC,CAAC,CAAC,CAAC;gBACrB,mBAAmB,CAAC,OAAO,GAAG,CAAC,CAAC;gBAChC,OAAO,IAAI,CAAC;YACd,CAAC;YACD,OAAO,KAAK,CAAC,CAAC,mCAAmC;QACnD,CAAC;QAED,wCAAwC;QACxC,IAAI,sBAAsB,EAAE,CAAC;YAC3B,MAAM,mBAAmB,GAAG,IAAA,iDAAwB,EAClD,kBAAkB,EAClB,KAAK,CACN,CAAC;YAEF,IAAI,mBAAmB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACrC,yBAAyB,CAAC,KAAK,CAAC,CAAC;gBACjC,uBAAuB,CAAC,CAAC,CAAC,CAAC;gBAC3B,OAAO,KAAK,CAAC,CAAC,sBAAsB;YACtC,CAAC;iBAAM,CAAC;gBACN,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;oBAChB,uBAAuB,CAAC,CAAC,IAAI,EAAE,EAAE,CAC/B,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CACvD,CAAC;oBACF,OAAO,IAAI,CAAC;gBACd,CAAC;gBACD,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;oBAClB,uBAAuB,CACrB,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,mBAAmB,CAAC,MAAM,CAClD,CAAC;oBACF,OAAO,IAAI,CAAC;gBACd,CAAC;gBACD,IAAI,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;oBAC1B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CACxB,oBAAoB,EACpB,mBAAmB,CAAC,MAAM,GAAG,CAAC,CAC/B,CAAC;oBACF,MAAM,eAAe,GAAG,mBAAmB,CAAC,SAAS,CAAC,CAAC;oBACvD,MAAM,QAAQ,GAAG,eAAe,CAAC,OAAO,GAAG,GAAG,CAAC;oBAC/C,QAAQ,CAAC,QAAQ,CAAC,CAAC;oBACnB,iBAAiB,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;oBACnC,yBAAyB,CAAC,KAAK,CAAC,CAAC;oBACjC,uBAAuB,CAAC,CAAC,CAAC,CAAC;oBAC3B,OAAO,IAAI,CAAC;gBACd,CAAC;YACH,CAAC;QACH,CAAC;QAED,oCAAoC;QACpC,IAAI,kBAAkB,EAAE,CAAC;YACvB,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;gBAChB,qBAAqB,CAAC,CAAC,IAAI,EAAE,EAAE,CAC7B,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CACnD,CAAC;gBACF,OAAO,IAAI,CAAC;YACd,CAAC;YACD,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;gBAClB,qBAAqB,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;gBACrE,OAAO,IAAI,CAAC;YACd,CAAC;YACD,IAAI,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;gBAC1B,MAAM,aAAa,GAAG,eAAe,CAAC,kBAAkB,CAAC,CAAC;gBAC1D,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;gBACpC,IAAA,oCAAkB,EAAC,aAAa,CAAC,KAAK,CAAC,CAAC;gBACxC,MAAM,YAAY,GAAc;oBAC9B,IAAI,EAAE,WAAW;oBACjB,OAAO,EAAE,wBAAwB,aAAa,CAAC,KAAK,EAAE;oBACtD,SAAS,EAAE,IAAI,IAAI,EAAE;iBACtB,CAAC;gBACF,cAAc,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC;gBAClD,qBAAqB,CAAC,KAAK,CAAC,CAAC;gBAC7B,qBAAqB,CAAC,CAAC,CAAC,CAAC;gBACzB,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAC,CAAC,+BAA+B;IAC/C,CAAC,CAAC;IAEF,MAAM,iBAAiB,GAAG,KAAK,EAAE,SAAiB,EAAE,EAAE;QACpD,IAAI,SAAS,KAAK,MAAM,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;YACjD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAChB,OAAO;QACT,CAAC;QAED,IAAI,SAAS,CAAC,IAAI,EAAE,EAAE,CAAC;YACrB,MAAM,mBAAmB,GAAG,MAAM,mBAAmB,CAAC,SAAS,CAAC,CAAC;YACjE,IAAI,CAAC,mBAAmB,EAAE,CAAC;gBACzB,MAAM,kBAAkB,CAAC,SAAS,CAAC,CAAC;YACtC,CAAC;QACH,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,iBAAiB,GAAG,CAAC,QAAgB,EAAE,EAAE;QAC7C,4CAA4C;QAC5C,IAAI,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC7B,yBAAyB,CAAC,IAAI,CAAC,CAAC;YAChC,uBAAuB,CAAC,CAAC,CAAC,CAAC;QAC7B,CAAC;aAAM,CAAC;YACN,yBAAyB,CAAC,KAAK,CAAC,CAAC;YACjC,uBAAuB,CAAC,CAAC,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,EACJ,KAAK,EACL,cAAc,EACd,QAAQ,EACR,iBAAiB,EACjB,UAAU,EACV,YAAY,EACZ,WAAW,GACZ,GAAG,IAAA,wCAAgB,EAAC;QACnB,QAAQ,EAAE,iBAAiB;QAC3B,YAAY,EAAE,gBAAgB;QAC9B,QAAQ,EAAE,oBAAoB;KAC/B,CAAC,CAAC;IAEH,oCAAoC;IACpC,IAAA,cAAQ,EAAC,CAAC,SAAiB,EAAE,GAAQ,EAAE,EAAE;QACvC,WAAW,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;IAEH,gDAAgD;IAChD,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,iBAAiB,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAEZ,MAAM,kBAAkB,GAAwB;QAC9C,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,uBAAuB,EAAE;QAC1D,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,oBAAoB,EAAE;QACxD,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,mBAAmB,EAAE;QACxD,EAAE,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,4BAA4B,EAAE;QAC1E,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,sBAAsB,EAAE;KAC1D,CAAC;IAEF,2DAA2D;IAC3D,MAAM,eAAe,GAAkB,IAAA,eAAO,EAAC,GAAG,EAAE;QAClD,OAAO,IAAA,iCAAe,GAAE,CAAC,CAAC,6CAA6C;IACzE,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,mBAAmB,GAAG,KAAK,EAAE,KAAa,EAAoB,EAAE;QACpE,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;QAElC,IAAI,YAAY,KAAK,QAAQ,EAAE,CAAC;YAC9B,qBAAqB;YACrB,cAAc,CAAC,EAAE,CAAC,CAAC;YAEnB,0BAA0B;YAC1B,eAAe,CAAC,KAAK,CAAC,CAAC;YACvB,cAAc,CAAC,KAAK,CAAC,CAAC;YACtB,aAAa,CAAC,CAAC,CAAC,CAAC;YACjB,iBAAiB,CAAC,CAAC,CAAC,CAAC;YACrB,mBAAmB,CAAC,OAAO,GAAG,CAAC,CAAC;YAEhC,2CAA2C;YAC3C,MAAM,mBAAmB,GAAG,6CAAmB,CAAC,WAAW,EAAE,CAAC;YAC9D,mBAAmB,CAAC,YAAY,EAAE,CAAC;YAEnC,UAAU,EAAE,CAAC;YACb,YAAY,EAAE,CAAC;YACf,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,YAAY,KAAK,OAAO,EAAE,CAAC;YAC7B,MAAM,SAAS,GAAc;gBAC3B,IAAI,EAAE,WAAW;gBACjB,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iDAqCgC;gBACzC,SAAS,EAAE,IAAI,IAAI,EAAE;aACtB,CAAC;YACF,cAAc,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC;YAC/C,UAAU,EAAE,CAAC;YACb,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,YAAY,KAAK,OAAO,EAAE,CAAC;YAC7B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAChB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;YAC/B,qBAAqB,CAAC,IAAI,CAAC,CAAC;YAC5B,qBAAqB,CAAC,CAAC,CAAC,CAAC;YACzB,UAAU,EAAE,CAAC;YACb,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,YAAY,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YACxC,MAAM,QAAQ,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5C,MAAM,UAAU,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;YAEvD,IAAI,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAClC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;gBACzB,IAAA,oCAAkB,EAAC,QAAQ,CAAC,CAAC,CAAC,+BAA+B;gBAC7D,MAAM,YAAY,GAAc;oBAC9B,IAAI,EAAE,WAAW;oBACjB,OAAO,EAAE,wBAAwB,QAAQ,EAAE;oBAC3C,SAAS,EAAE,IAAI,IAAI,EAAE;iBACtB,CAAC;gBACF,cAAc,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC;YACpD,CAAC;iBAAM,CAAC;gBACN,MAAM,UAAU,GAAc;oBAC5B,IAAI,EAAE,WAAW;oBACjB,OAAO,EAAE,kBAAkB,QAAQ;;oBAEzB,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;oBACjC,SAAS,EAAE,IAAI,IAAI,EAAE;iBACtB,CAAC;gBACF,cAAc,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC;YAClD,CAAC;YAED,UAAU,EAAE,CAAC;YACb,OAAO,IAAI,CAAC;QACd,CAAC;QAGD,IAAI,YAAY,KAAK,kBAAkB,EAAE,CAAC;YACxC,MAAM,SAAS,GAAc;gBAC3B,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE,kBAAkB;gBAC3B,SAAS,EAAE,IAAI,IAAI,EAAE;aACtB,CAAC;YACF,cAAc,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC;YAE/C,eAAe,CAAC,IAAI,CAAC,CAAC;YACtB,cAAc,CAAC,IAAI,CAAC,CAAC;YAErB,IAAI,CAAC;gBACH,8CAA8C;gBAC9C,MAAM,mBAAmB,GAAG,MAAM,KAAK,CAAC,kBAAkB,CACxD,wBAAwB,CACzB,CAAC;gBAEF,IACE,CAAC,mBAAmB,CAAC,OAAO;oBAC5B,CAAC,mBAAmB,CAAC,MAAM,EAAE,IAAI,EAAE,EACnC,CAAC;oBACD,MAAM,cAAc,GAAc;wBAChC,IAAI,EAAE,WAAW;wBACjB,OAAO,EAAE,mDAAmD;wBAC5D,SAAS,EAAE,IAAI,IAAI,EAAE;qBACtB,CAAC;oBACF,cAAc,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC;oBACpD,eAAe,CAAC,KAAK,CAAC,CAAC;oBACvB,cAAc,CAAC,KAAK,CAAC,CAAC;oBACtB,QAAQ,CAAC,EAAE,CAAC,CAAC;oBACb,OAAO,IAAI,CAAC;gBACd,CAAC;gBAED,kBAAkB;gBAClB,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC;gBAE9D,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;oBACvB,MAAM,aAAa,GAAc;wBAC/B,IAAI,EAAE,WAAW;wBACjB,OAAO,EAAE,4BACP,SAAS,CAAC,KAAK,IAAI,eACrB,EAAE;wBACF,SAAS,EAAE,IAAI,IAAI,EAAE;qBACtB,CAAC;oBACF,cAAc,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC;oBACnD,eAAe,CAAC,KAAK,CAAC,CAAC;oBACvB,cAAc,CAAC,KAAK,CAAC,CAAC;oBACtB,QAAQ,CAAC,EAAE,CAAC,CAAC;oBACb,OAAO,IAAI,CAAC;gBACd,CAAC;gBAED,gCAAgC;gBAChC,MAAM,QAAQ,GAAc;oBAC1B,IAAI,EAAE,aAAa;oBACnB,OAAO,EAAE,6BAA6B;oBACtC,SAAS,EAAE,IAAI,IAAI,EAAE;oBACrB,QAAQ,EAAE;wBACR,EAAE,EAAE,WAAW,IAAI,CAAC,GAAG,EAAE,EAAE;wBAC3B,IAAI,EAAE,UAAU;wBAChB,QAAQ,EAAE;4BACR,IAAI,EAAE,MAAM;4BACZ,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;yBACpD;qBACF;oBACD,UAAU,EAAE,SAAS;iBACtB,CAAC;gBACF,cAAc,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;gBAE9C,mDAAmD;gBACnD,MAAM,UAAU,GAAG,MAAM,KAAK,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,CAAC;gBAEvE,mCAAmC;gBACnC,MAAM,YAAY,GAAG;;;EAG3B,mBAAmB,CAAC,MAAM;;;EAG1B,UAAU,CAAC,MAAM,IAAI,yBAAyB;;;0DAGU,CAAC;gBAEnD,IAAI,aAAa,GAAG,EAAE,CAAC;gBACvB,IAAI,cAAc,GAAqB,IAAI,CAAC;gBAE5C,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,KAAK,CAAC,wBAAwB,CACtD,YAAY,CACb,EAAE,CAAC;oBACF,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;wBAC9C,IAAI,CAAC,cAAc,EAAE,CAAC;4BACpB,MAAM,QAAQ,GAAG;gCACf,IAAI,EAAE,WAAoB;gCAC1B,OAAO,EAAE,mCAAmC,KAAK,CAAC,OAAO,EAAE;gCAC3D,SAAS,EAAE,IAAI,IAAI,EAAE;gCACrB,WAAW,EAAE,IAAI;6BAClB,CAAC;4BACF,cAAc,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;4BAC9C,cAAc,GAAG,QAAQ,CAAC;4BAC1B,aAAa,GAAG,KAAK,CAAC,OAAO,CAAC;wBAChC,CAAC;6BAAM,CAAC;4BACN,aAAa,IAAI,KAAK,CAAC,OAAO,CAAC;4BAC/B,cAAc,CAAC,CAAC,IAAI,EAAE,EAAE,CACtB,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,CACtB,GAAG,KAAK,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,WAAW;gCAC1C,CAAC,CAAC;oCACE,GAAG,KAAK;oCACR,OAAO,EAAE,mCAAmC,aAAa,EAAE;iCAC5D;gCACH,CAAC,CAAC,KAAK,CACV,CACF,CAAC;wBACJ,CAAC;oBACH,CAAC;yBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;wBACjC,IAAI,cAAc,EAAE,CAAC;4BACnB,cAAc,CAAC,CAAC,IAAI,EAAE,EAAE,CACtB,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CACjB,KAAK,CAAC,WAAW;gCACf,CAAC,CAAC;oCACE,GAAG,KAAK;oCACR,OAAO,EAAE,8BAA8B,aAAa,CAAC,IAAI,EAAE,GAAG;oCAC9D,WAAW,EAAE,KAAK;iCACnB;gCACH,CAAC,CAAC,KAAK,CACV,CACF,CAAC;wBACJ,CAAC;wBACD,MAAM;oBACR,CAAC;gBACH,CAAC;gBAED,qBAAqB;gBACrB,MAAM,kBAAkB,GAAG,aAAa;qBACrC,IAAI,EAAE;qBACN,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;gBAC/B,MAAM,aAAa,GAAG,kBAAkB,kBAAkB,GAAG,CAAC;gBAC9D,MAAM,YAAY,GAAG,MAAM,KAAK,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC;gBAEnE,MAAM,WAAW,GAAc;oBAC7B,IAAI,EAAE,aAAa;oBACnB,OAAO,EAAE,YAAY,CAAC,OAAO;wBAC3B,CAAC,CAAC,YAAY,CAAC,MAAM,IAAI,mBAAmB;wBAC5C,CAAC,CAAC,YAAY,CAAC,KAAK,IAAI,eAAe;oBACzC,SAAS,EAAE,IAAI,IAAI,EAAE;oBACrB,QAAQ,EAAE;wBACR,EAAE,EAAE,cAAc,IAAI,CAAC,GAAG,EAAE,EAAE;wBAC9B,IAAI,EAAE,UAAU;wBAChB,QAAQ,EAAE;4BACR,IAAI,EAAE,MAAM;4BACZ,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC;yBACtD;qBACF;oBACD,UAAU,EAAE,YAAY;iBACzB,CAAC;gBACF,cAAc,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC;gBAEjD,2CAA2C;gBAC3C,IAAI,YAAY,CAAC,OAAO,EAAE,CAAC;oBACzB,8DAA8D;oBAC9D,IAAI,UAAU,GAAG,MAAM,KAAK,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC;oBAC5D,IAAI,WAAW,GAAG,UAAU,CAAC;oBAE7B,IACE,CAAC,UAAU,CAAC,OAAO;wBACnB,UAAU,CAAC,KAAK,EAAE,QAAQ,CAAC,oBAAoB,CAAC,EAChD,CAAC;wBACD,WAAW,GAAG,yBAAyB,CAAC;wBACxC,UAAU,GAAG,MAAM,KAAK,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC;oBAC3D,CAAC;oBAED,MAAM,SAAS,GAAc;wBAC3B,IAAI,EAAE,aAAa;wBACnB,OAAO,EAAE,UAAU,CAAC,OAAO;4BACzB,CAAC,CAAC,UAAU,CAAC,MAAM,IAAI,iBAAiB;4BACxC,CAAC,CAAC,UAAU,CAAC,KAAK,IAAI,aAAa;wBACrC,SAAS,EAAE,IAAI,IAAI,EAAE;wBACrB,QAAQ,EAAE;4BACR,EAAE,EAAE,YAAY,IAAI,CAAC,GAAG,EAAE,EAAE;4BAC5B,IAAI,EAAE,UAAU;4BAChB,QAAQ,EAAE;gCACR,IAAI,EAAE,MAAM;gCACZ,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;6BACpD;yBACF;wBACD,UAAU,EAAE,UAAU;qBACvB,CAAC;oBACF,cAAc,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC;gBACjD,CAAC;YACH,CAAC;YAAC,OAAO,KAAU,EAAE,CAAC;gBACpB,MAAM,UAAU,GAAc;oBAC5B,IAAI,EAAE,WAAW;oBACjB,OAAO,EAAE,iCAAiC,KAAK,CAAC,OAAO,EAAE;oBACzD,SAAS,EAAE,IAAI,IAAI,EAAE;iBACtB,CAAC;gBACF,cAAc,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC;YAClD,CAAC;YAED,eAAe,CAAC,KAAK,CAAC,CAAC;YACvB,cAAc,CAAC,KAAK,CAAC,CAAC;YACtB,UAAU,EAAE,CAAC;YACb,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,kBAAkB,GAAG;YACzB,IAAI;YACJ,KAAK;YACL,IAAI;YACJ,KAAK;YACL,OAAO;YACP,OAAO;YACP,MAAM;YACN,MAAM;YACN,MAAM;YACN,IAAI;YACJ,IAAI;YACJ,IAAI;SACL,CAAC;QACF,MAAM,SAAS,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAE7C,IAAI,kBAAkB,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YAC3C,MAAM,SAAS,GAAc;gBAC3B,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE,YAAY;gBACrB,SAAS,EAAE,IAAI,IAAI,EAAE;aACtB,CAAC;YACF,cAAc,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC;YAE/C,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC;gBAE5D,MAAM,YAAY,GAAc;oBAC9B,IAAI,EAAE,aAAa;oBACnB,OAAO,EAAE,MAAM,CAAC,OAAO;wBACrB,CAAC,CAAC,MAAM,CAAC,MAAM,IAAI,mBAAmB;wBACtC,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,gBAAgB;oBACpC,SAAS,EAAE,IAAI,IAAI,EAAE;oBACrB,QAAQ,EAAE;wBACR,EAAE,EAAE,QAAQ,IAAI,CAAC,GAAG,EAAE,EAAE;wBACxB,IAAI,EAAE,UAAU;wBAChB,QAAQ,EAAE;4BACR,IAAI,EAAE,MAAM;4BACZ,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC;yBACrD;qBACF;oBACD,UAAU,EAAE,MAAM;iBACnB,CAAC;gBACF,cAAc,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC;YACpD,CAAC;YAAC,OAAO,KAAU,EAAE,CAAC;gBACpB,MAAM,UAAU,GAAc;oBAC5B,IAAI,EAAE,WAAW;oBACjB,OAAO,EAAE,4BAA4B,KAAK,CAAC,OAAO,EAAE;oBACpD,SAAS,EAAE,IAAI,IAAI,EAAE;iBACtB,CAAC;gBACF,cAAc,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC;YAClD,CAAC;YAED,UAAU,EAAE,CAAC;YACb,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;IAEF,MAAM,kBAAkB,GAAG,KAAK,EAAE,SAAiB,EAAE,EAAE;QACrD,MAAM,SAAS,GAAc;YAC3B,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,SAAS;YAClB,SAAS,EAAE,IAAI,IAAI,EAAE;SACtB,CAAC;QACF,cAAc,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC;QAE/C,eAAe,CAAC,IAAI,CAAC,CAAC;QACtB,UAAU,EAAE,CAAC;QAEb,IAAI,CAAC;YACH,cAAc,CAAC,IAAI,CAAC,CAAC;YACrB,IAAI,cAAc,GAAqB,IAAI,CAAC;YAE5C,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,KAAK,CAAC,wBAAwB,CAAC,SAAS,CAAC,EAAE,CAAC;gBACpE,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;oBACnB,KAAK,SAAS;wBACZ,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;4BAClB,IAAI,CAAC,cAAc,EAAE,CAAC;gCACpB,MAAM,iBAAiB,GAAG;oCACxB,IAAI,EAAE,WAAoB;oCAC1B,OAAO,EAAE,KAAK,CAAC,OAAO;oCACtB,SAAS,EAAE,IAAI,IAAI,EAAE;oCACrB,WAAW,EAAE,IAAI;iCAClB,CAAC;gCACF,cAAc,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,iBAAiB,CAAC,CAAC,CAAC;gCACvD,cAAc,GAAG,iBAAiB,CAAC;4BACrC,CAAC;iCAAM,CAAC;gCACN,cAAc,CAAC,CAAC,IAAI,EAAE,EAAE,CACtB,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,CACtB,GAAG,KAAK,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,WAAW;oCAC1C,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,EAAE;oCACtD,CAAC,CAAC,KAAK,CACV,CACF,CAAC;4BACJ,CAAC;wBACH,CAAC;wBACD,MAAM;oBAER,KAAK,aAAa;wBAChB,IAAI,KAAK,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;4BACnC,aAAa,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;wBAClC,CAAC;wBACD,MAAM;oBAER,KAAK,YAAY;wBACf,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;4BACpB,mDAAmD;4BACnD,cAAc,CAAC,CAAC,IAAI,EAAE,EAAE,CACtB,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CACjB,KAAK,CAAC,WAAW;gCACf,CAAC,CAAC;oCACE,GAAG,KAAK;oCACR,WAAW,EAAE,KAAK;oCAClB,SAAS,EAAE,KAAK,CAAC,SAAS;iCAC3B;gCACH,CAAC,CAAC,KAAK,CACV,CACF,CAAC;4BACF,cAAc,GAAG,IAAI,CAAC;4BAEtB,oEAAoE;4BACpE,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;gCACnC,MAAM,aAAa,GAAc;oCAC/B,IAAI,EAAE,WAAW;oCACjB,OAAO,EAAE,cAAc;oCACvB,SAAS,EAAE,IAAI,IAAI,EAAE;oCACrB,QAAQ,EAAE,QAAQ;iCACnB,CAAC;gCACF,cAAc,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC;4BACrD,CAAC,CAAC,CAAC;wBACL,CAAC;wBACD,MAAM;oBAER,KAAK,aAAa;wBAChB,IAAI,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;4BACvC,cAAc,CAAC,CAAC,IAAI,EAAE,EAAE,CACtB,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;gCACjB,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;oCACtB,OAAO,EAAE,GAAG,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;gCAC1C,CAAC;gCACD,sDAAsD;gCACtD,IACE,KAAK,CAAC,IAAI,KAAK,WAAW;oCAC1B,KAAK,CAAC,QAAQ,EAAE,EAAE,KAAK,KAAK,CAAC,QAAQ,EAAE,EAAE,EACzC,CAAC;oCACD,OAAO;wCACL,GAAG,KAAK;wCACR,IAAI,EAAE,aAAa;wCACnB,OAAO,EAAE,KAAK,CAAC,UAAU,CAAC,OAAO;4CAC/B,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,IAAI,SAAS;4CACtC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,IAAI,gBAAgB;wCAC9C,UAAU,EAAE,KAAK,CAAC,UAAU;qCAC7B,CAAC;gCACJ,CAAC;gCACD,OAAO,KAAK,CAAC;4BACf,CAAC,CAAC,CACH,CAAC;4BACF,cAAc,GAAG,IAAI,CAAC;wBACxB,CAAC;wBACD,MAAM;oBAER,KAAK,MAAM;wBACT,IAAI,cAAc,EAAE,CAAC;4BACnB,cAAc,CAAC,CAAC,IAAI,EAAE,EAAE,CACtB,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CACjB,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAC7D,CACF,CAAC;wBACJ,CAAC;wBACD,cAAc,CAAC,KAAK,CAAC,CAAC;wBACtB,MAAM;gBACV,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,MAAM,UAAU,GAAc;gBAC5B,IAAI,EAAE,WAAW;gBACjB,OAAO,EAAE,UAAU,KAAK,CAAC,OAAO,EAAE;gBAClC,SAAS,EAAE,IAAI,IAAI,EAAE;aACtB,CAAC;YACF,cAAc,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC;YAChD,cAAc,CAAC,KAAK,CAAC,CAAC;QACxB,CAAC;QAED,eAAe,CAAC,KAAK,CAAC,CAAC;QACvB,mBAAmB,CAAC,OAAO,GAAG,CAAC,CAAC;IAClC,CAAC,CAAC;IAGF,OAAO;QACL,KAAK;QACL,cAAc;QACd,sBAAsB;QACtB,oBAAoB;QACpB,kBAAkB;QAClB,kBAAkB;QAClB,kBAAkB;QAClB,eAAe;QACf,KAAK;QACL,eAAe;KAChB,CAAC;AACJ,CAAC"}