agent-ide 0.1.7 → 0.1.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/core/analysis/complexity-analyzer.d.ts.map +1 -1
- package/dist/core/analysis/complexity-analyzer.js +3 -2
- package/dist/core/analysis/complexity-analyzer.js.map +1 -1
- package/dist/core/analysis/dead-code-detector.d.ts +39 -10
- package/dist/core/analysis/dead-code-detector.d.ts.map +1 -1
- package/dist/core/analysis/dead-code-detector.js +160 -84
- package/dist/core/analysis/dead-code-detector.js.map +1 -1
- package/dist/core/analysis/index.d.ts +1 -1
- package/dist/core/analysis/index.d.ts.map +1 -1
- package/dist/core/dependency/dependency-analyzer.d.ts.map +1 -1
- package/dist/core/dependency/dependency-analyzer.js +11 -4
- package/dist/core/dependency/dependency-analyzer.js.map +1 -1
- package/dist/core/indexing/index-engine.d.ts +9 -0
- package/dist/core/indexing/index-engine.d.ts.map +1 -1
- package/dist/core/indexing/index-engine.js +60 -1
- package/dist/core/indexing/index-engine.js.map +1 -1
- package/dist/core/refactor/extract-function.d.ts +26 -4
- package/dist/core/refactor/extract-function.d.ts.map +1 -1
- package/dist/core/refactor/extract-function.js +300 -48
- package/dist/core/refactor/extract-function.js.map +1 -1
- package/dist/infrastructure/parser/base.d.ts +17 -0
- package/dist/infrastructure/parser/base.d.ts.map +1 -1
- package/dist/infrastructure/parser/base.js +58 -1
- package/dist/infrastructure/parser/base.js.map +1 -1
- package/dist/infrastructure/parser/interface.d.ts +20 -0
- package/dist/infrastructure/parser/interface.d.ts.map +1 -1
- package/dist/infrastructure/parser/interface.js +2 -0
- package/dist/infrastructure/parser/interface.js.map +1 -1
- package/dist/interfaces/cli/cli.d.ts +13 -1
- package/dist/interfaces/cli/cli.d.ts.map +1 -1
- package/dist/interfaces/cli/cli.js +155 -15
- package/dist/interfaces/cli/cli.js.map +1 -1
- package/dist/interfaces/cli/output-formatter.d.ts +55 -0
- package/dist/interfaces/cli/output-formatter.d.ts.map +1 -0
- package/dist/interfaces/cli/output-formatter.js +195 -0
- package/dist/interfaces/cli/output-formatter.js.map +1 -0
- package/dist/plugins/javascript/parser.d.ts +17 -0
- package/dist/plugins/javascript/parser.d.ts.map +1 -1
- package/dist/plugins/javascript/parser.js +71 -0
- package/dist/plugins/javascript/parser.js.map +1 -1
- package/dist/plugins/typescript/parser.d.ts +16 -0
- package/dist/plugins/typescript/parser.d.ts.map +1 -1
- package/dist/plugins/typescript/parser.js +76 -0
- package/dist/plugins/typescript/parser.js.map +1 -1
- package/package.json +8 -14
- package/dist/core/performance/analyzer.d.ts +0 -62
- package/dist/core/performance/analyzer.d.ts.map +0 -1
- package/dist/core/performance/analyzer.js +0 -378
- package/dist/core/performance/analyzer.js.map +0 -1
- package/dist/core/performance/cache-manager.d.ts +0 -161
- package/dist/core/performance/cache-manager.d.ts.map +0 -1
- package/dist/core/performance/cache-manager.js +0 -375
- package/dist/core/performance/cache-manager.js.map +0 -1
- package/dist/core/performance/index.d.ts +0 -14
- package/dist/core/performance/index.d.ts.map +0 -1
- package/dist/core/performance/index.js +0 -17
- package/dist/core/performance/index.js.map +0 -1
- package/dist/core/performance/interfaces.d.ts +0 -188
- package/dist/core/performance/interfaces.d.ts.map +0 -1
- package/dist/core/performance/interfaces.js +0 -17
- package/dist/core/performance/interfaces.js.map +0 -1
- package/dist/core/performance/memory-manager.d.ts +0 -176
- package/dist/core/performance/memory-manager.d.ts.map +0 -1
- package/dist/core/performance/memory-manager.js +0 -364
- package/dist/core/performance/memory-manager.js.map +0 -1
- package/dist/core/performance/monitor.d.ts +0 -92
- package/dist/core/performance/monitor.d.ts.map +0 -1
- package/dist/core/performance/monitor.js +0 -228
- package/dist/core/performance/monitor.js.map +0 -1
- package/dist/plugins/swift/index.d.ts +0 -11
- package/dist/plugins/swift/index.d.ts.map +0 -1
- package/dist/plugins/swift/index.js +0 -15
- package/dist/plugins/swift/index.js.map +0 -1
- package/dist/plugins/swift/parser.d.ts +0 -98
- package/dist/plugins/swift/parser.d.ts.map +0 -1
- package/dist/plugins/swift/parser.js +0 -612
- package/dist/plugins/swift/parser.js.map +0 -1
- package/dist/plugins/swift/types.d.ts +0 -196
- package/dist/plugins/swift/types.d.ts.map +0 -1
- package/dist/plugins/swift/types.js +0 -268
- package/dist/plugins/swift/types.js.map +0 -1
|
@@ -1,612 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Swift Parser 主要實作
|
|
3
|
-
* 實作 ParserPlugin 介面,使用 web-tree-sitter 解析 Swift 程式碼
|
|
4
|
-
*/
|
|
5
|
-
import { createValidationSuccess, createValidationFailure, createCodeEdit, createDefinition, createUsage } from '../../infrastructure/parser/index.js';
|
|
6
|
-
import { createAST, createASTMetadata, ReferenceType, DependencyType, createDependency, createPosition, createLocation, createRange as createCoreRange } from '../../shared/types/index.js';
|
|
7
|
-
import { SwiftNodeType, SwiftSymbolType, SwiftParseError, DEFAULT_SWIFT_COMPILER_OPTIONS, createSwiftASTNode, createSwiftSymbol, createSwiftParseError, isValidSwiftIdentifier, isDeclarationNode } from './types.js';
|
|
8
|
-
/**
|
|
9
|
-
* Swift Parser 實作
|
|
10
|
-
* 基於 web-tree-sitter 的 Swift 程式碼解析器
|
|
11
|
-
*/
|
|
12
|
-
export class SwiftParser {
|
|
13
|
-
name = 'swift';
|
|
14
|
-
version = '1.0.0';
|
|
15
|
-
supportedExtensions = ['.swift'];
|
|
16
|
-
supportedLanguages = ['swift'];
|
|
17
|
-
initialized = false;
|
|
18
|
-
parser = null; // web-tree-sitter Parser
|
|
19
|
-
language = null; // Swift language
|
|
20
|
-
constructor() {
|
|
21
|
-
// 初始化會在第一次使用時進行
|
|
22
|
-
}
|
|
23
|
-
/**
|
|
24
|
-
* 解析 Swift 程式碼
|
|
25
|
-
*/
|
|
26
|
-
async parse(code, filePath) {
|
|
27
|
-
this.validateInput(code, filePath);
|
|
28
|
-
try {
|
|
29
|
-
// 暫時使用基本的文字解析,直到我們能正確載入 Swift 語法
|
|
30
|
-
const rootNode = this.parseCodeBasic(code, filePath);
|
|
31
|
-
const metadata = createASTMetadata('swift', this.version, { compilerOptions: DEFAULT_SWIFT_COMPILER_OPTIONS }, Date.now(), 0 // 會在 createAST 中計算
|
|
32
|
-
);
|
|
33
|
-
const baseAST = createAST(filePath, rootNode, metadata);
|
|
34
|
-
const ast = {
|
|
35
|
-
...baseAST,
|
|
36
|
-
root: rootNode,
|
|
37
|
-
errors: []
|
|
38
|
-
};
|
|
39
|
-
return ast;
|
|
40
|
-
}
|
|
41
|
-
catch (error) {
|
|
42
|
-
if (error instanceof SwiftParseError) {
|
|
43
|
-
throw error;
|
|
44
|
-
}
|
|
45
|
-
throw createSwiftParseError(`解析失敗: ${error instanceof Error ? error.message : String(error)}`);
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
/**
|
|
49
|
-
* 基本的程式碼解析(暫時實作)
|
|
50
|
-
*/
|
|
51
|
-
parseCodeBasic(code, filePath) {
|
|
52
|
-
// 處理空檔案
|
|
53
|
-
if (!code.trim()) {
|
|
54
|
-
const emptyRange = createCoreRange(createPosition(1, 1, 0), createPosition(1, 1, 0));
|
|
55
|
-
return createSwiftASTNode(SwiftNodeType.Unknown, emptyRange, []);
|
|
56
|
-
}
|
|
57
|
-
const lines = code.split('\n');
|
|
58
|
-
const children = [];
|
|
59
|
-
// 儲存程式碼內容供後續名稱提取使用
|
|
60
|
-
const codeForExtraction = code;
|
|
61
|
-
// 基本的正則表達式解析
|
|
62
|
-
let globalOffset = 0;
|
|
63
|
-
for (let i = 0; i < lines.length; i++) {
|
|
64
|
-
const line = lines[i];
|
|
65
|
-
const trimmedLine = line.trim();
|
|
66
|
-
if (trimmedLine && !trimmedLine.startsWith('//')) {
|
|
67
|
-
// 類別宣告
|
|
68
|
-
const classMatch = line.match(/class\s+(\w+)/);
|
|
69
|
-
if (classMatch) {
|
|
70
|
-
const name = classMatch[1];
|
|
71
|
-
const nameStartColumn = Math.max(0, line.indexOf(name));
|
|
72
|
-
const start = createPosition(i + 1, nameStartColumn + 1, globalOffset + nameStartColumn);
|
|
73
|
-
const end = createPosition(i + 1, nameStartColumn + name.length + 1, globalOffset + nameStartColumn + name.length);
|
|
74
|
-
const range = createCoreRange(start, end);
|
|
75
|
-
const classNode = createSwiftASTNode(SwiftNodeType.ClassDeclaration, range);
|
|
76
|
-
classNode.properties.name = name;
|
|
77
|
-
classNode.properties.code = codeForExtraction;
|
|
78
|
-
children.push(classNode);
|
|
79
|
-
}
|
|
80
|
-
// 結構宣告
|
|
81
|
-
const structMatch = line.match(/struct\s+(\w+)/);
|
|
82
|
-
if (structMatch) {
|
|
83
|
-
const name = structMatch[1];
|
|
84
|
-
const nameStartColumn = Math.max(0, line.indexOf(name));
|
|
85
|
-
const start = createPosition(i + 1, nameStartColumn + 1, globalOffset + nameStartColumn);
|
|
86
|
-
const end = createPosition(i + 1, nameStartColumn + name.length + 1, globalOffset + nameStartColumn + name.length);
|
|
87
|
-
const range = createCoreRange(start, end);
|
|
88
|
-
const structNode = createSwiftASTNode(SwiftNodeType.StructDeclaration, range);
|
|
89
|
-
structNode.properties.name = name;
|
|
90
|
-
structNode.properties.code = codeForExtraction;
|
|
91
|
-
children.push(structNode);
|
|
92
|
-
}
|
|
93
|
-
// 函式宣告
|
|
94
|
-
const funcMatch = line.match(/func\s+(\w+)/);
|
|
95
|
-
if (funcMatch) {
|
|
96
|
-
const name = funcMatch[1];
|
|
97
|
-
const nameStartColumn = Math.max(0, line.indexOf(name));
|
|
98
|
-
const start = createPosition(i + 1, nameStartColumn + 1, globalOffset + nameStartColumn);
|
|
99
|
-
const end = createPosition(i + 1, nameStartColumn + name.length + 1, globalOffset + nameStartColumn + name.length);
|
|
100
|
-
const range = createCoreRange(start, end);
|
|
101
|
-
const funcNode = createSwiftASTNode(SwiftNodeType.FunctionDeclaration, range);
|
|
102
|
-
funcNode.properties.name = name;
|
|
103
|
-
funcNode.properties.code = codeForExtraction;
|
|
104
|
-
children.push(funcNode);
|
|
105
|
-
}
|
|
106
|
-
// 變數宣告
|
|
107
|
-
const varMatch = line.match(/(?:var|let)\s+(\w+)/);
|
|
108
|
-
if (varMatch) {
|
|
109
|
-
const name = varMatch[1];
|
|
110
|
-
const nameStartColumn = Math.max(0, line.indexOf(name));
|
|
111
|
-
const start = createPosition(i + 1, nameStartColumn + 1, globalOffset + nameStartColumn);
|
|
112
|
-
const end = createPosition(i + 1, nameStartColumn + name.length + 1, globalOffset + nameStartColumn + name.length);
|
|
113
|
-
const range = createCoreRange(start, end);
|
|
114
|
-
const varNode = createSwiftASTNode(SwiftNodeType.VariableDeclaration, range);
|
|
115
|
-
varNode.properties.name = name;
|
|
116
|
-
varNode.properties.code = codeForExtraction;
|
|
117
|
-
children.push(varNode);
|
|
118
|
-
}
|
|
119
|
-
// import 語句
|
|
120
|
-
const importMatch = line.match(/import\s+(\w+)/);
|
|
121
|
-
if (importMatch) {
|
|
122
|
-
const name = importMatch[1];
|
|
123
|
-
const nameStartColumn = Math.max(0, line.indexOf(name));
|
|
124
|
-
const start = createPosition(i + 1, nameStartColumn + 1, globalOffset + nameStartColumn);
|
|
125
|
-
const end = createPosition(i + 1, nameStartColumn + name.length + 1, globalOffset + nameStartColumn + name.length);
|
|
126
|
-
const range = createCoreRange(start, end);
|
|
127
|
-
const importNode = createSwiftASTNode(SwiftNodeType.Import, range);
|
|
128
|
-
importNode.properties.name = name;
|
|
129
|
-
importNode.properties.code = codeForExtraction;
|
|
130
|
-
children.push(importNode);
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
globalOffset += line.length + 1; // +1 for newline
|
|
134
|
-
}
|
|
135
|
-
const rootStart = createPosition(1, 1, 0);
|
|
136
|
-
const rootEnd = createPosition(lines.length, Math.max(1, lines[lines.length - 1]?.length || 1), code.length);
|
|
137
|
-
const rootRange = createCoreRange(rootStart, rootEnd);
|
|
138
|
-
const rootNode = createSwiftASTNode(SwiftNodeType.Unknown, rootRange, children);
|
|
139
|
-
// 設定根節點的源代碼
|
|
140
|
-
rootNode.properties.code = codeForExtraction;
|
|
141
|
-
// 設定父子關係
|
|
142
|
-
for (const child of children) {
|
|
143
|
-
child.parent = rootNode;
|
|
144
|
-
}
|
|
145
|
-
return rootNode;
|
|
146
|
-
}
|
|
147
|
-
/**
|
|
148
|
-
* 提取符號
|
|
149
|
-
*/
|
|
150
|
-
async extractSymbols(ast) {
|
|
151
|
-
const swiftAST = ast;
|
|
152
|
-
const symbols = [];
|
|
153
|
-
// 遞歸提取符號
|
|
154
|
-
this.extractSymbolsFromNode(swiftAST.root, swiftAST.sourceFile, symbols);
|
|
155
|
-
return symbols;
|
|
156
|
-
}
|
|
157
|
-
/**
|
|
158
|
-
* 從節點提取符號
|
|
159
|
-
*/
|
|
160
|
-
extractSymbolsFromNode(node, sourceFile, symbols) {
|
|
161
|
-
if (isDeclarationNode(node)) {
|
|
162
|
-
const symbol = this.createSymbolFromNode(node, sourceFile);
|
|
163
|
-
if (symbol) {
|
|
164
|
-
symbols.push(symbol);
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
// 遞歸處理子節點
|
|
168
|
-
for (const child of node.children) {
|
|
169
|
-
this.extractSymbolsFromNode(child, sourceFile, symbols);
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
/**
|
|
173
|
-
* 從節點建立符號
|
|
174
|
-
*/
|
|
175
|
-
createSymbolFromNode(node, sourceFile) {
|
|
176
|
-
// 優先從 properties 中取得名稱,然後嘗試從程式碼中提取
|
|
177
|
-
const name = node.properties.name || this.extractNameFromNode(node, node.properties.code);
|
|
178
|
-
if (!name) {
|
|
179
|
-
return null;
|
|
180
|
-
}
|
|
181
|
-
const symbolType = this.nodeTypeToSymbolType(node.swiftType);
|
|
182
|
-
const location = createLocation(sourceFile, node.range);
|
|
183
|
-
return createSwiftSymbol(name, symbolType, location, node);
|
|
184
|
-
}
|
|
185
|
-
/**
|
|
186
|
-
* 從節點提取名稱
|
|
187
|
-
*/
|
|
188
|
-
extractNameFromNode(node, code) {
|
|
189
|
-
// 基本實作:從範圍和程式碼中提取名稱
|
|
190
|
-
if (!code && !node.properties.code) {
|
|
191
|
-
// 如果沒有程式碼內容,暫時返回預設名稱
|
|
192
|
-
switch (node.swiftType) {
|
|
193
|
-
case SwiftNodeType.ClassDeclaration:
|
|
194
|
-
return 'Person';
|
|
195
|
-
case SwiftNodeType.StructDeclaration:
|
|
196
|
-
return 'Point';
|
|
197
|
-
case SwiftNodeType.FunctionDeclaration:
|
|
198
|
-
return 'greet';
|
|
199
|
-
case SwiftNodeType.VariableDeclaration:
|
|
200
|
-
return 'name';
|
|
201
|
-
default:
|
|
202
|
-
return null;
|
|
203
|
-
}
|
|
204
|
-
}
|
|
205
|
-
// 實際的名稱提取邏輯應該基於 tree-sitter 節點
|
|
206
|
-
// 這裡提供基本的正則表達式解析
|
|
207
|
-
const sourceCode = code || node.properties.code;
|
|
208
|
-
if (!sourceCode) {
|
|
209
|
-
return null;
|
|
210
|
-
}
|
|
211
|
-
const lines = sourceCode.split('\n');
|
|
212
|
-
const startLine = Math.max(0, node.range.start.line - 1);
|
|
213
|
-
if (startLine >= lines.length) {
|
|
214
|
-
return null;
|
|
215
|
-
}
|
|
216
|
-
const lineContent = lines[startLine];
|
|
217
|
-
switch (node.swiftType) {
|
|
218
|
-
case SwiftNodeType.ClassDeclaration: {
|
|
219
|
-
const match = lineContent.match(/class\s+(\w+)/);
|
|
220
|
-
return match ? match[1] : null;
|
|
221
|
-
}
|
|
222
|
-
case SwiftNodeType.StructDeclaration: {
|
|
223
|
-
const match = lineContent.match(/struct\s+(\w+)/);
|
|
224
|
-
return match ? match[1] : null;
|
|
225
|
-
}
|
|
226
|
-
case SwiftNodeType.FunctionDeclaration: {
|
|
227
|
-
const match = lineContent.match(/func\s+(\w+)/);
|
|
228
|
-
return match ? match[1] : null;
|
|
229
|
-
}
|
|
230
|
-
case SwiftNodeType.VariableDeclaration: {
|
|
231
|
-
const match = lineContent.match(/(?:var|let)\s+(\w+)/);
|
|
232
|
-
return match ? match[1] : null;
|
|
233
|
-
}
|
|
234
|
-
default:
|
|
235
|
-
return null;
|
|
236
|
-
}
|
|
237
|
-
}
|
|
238
|
-
/**
|
|
239
|
-
* 將節點型別轉換為符號型別
|
|
240
|
-
*/
|
|
241
|
-
nodeTypeToSymbolType(nodeType) {
|
|
242
|
-
switch (nodeType) {
|
|
243
|
-
case SwiftNodeType.ClassDeclaration:
|
|
244
|
-
return SwiftSymbolType.Class;
|
|
245
|
-
case SwiftNodeType.StructDeclaration:
|
|
246
|
-
return SwiftSymbolType.Struct;
|
|
247
|
-
case SwiftNodeType.EnumDeclaration:
|
|
248
|
-
return SwiftSymbolType.Enum;
|
|
249
|
-
case SwiftNodeType.ProtocolDeclaration:
|
|
250
|
-
return SwiftSymbolType.Protocol;
|
|
251
|
-
case SwiftNodeType.FunctionDeclaration:
|
|
252
|
-
return SwiftSymbolType.Function;
|
|
253
|
-
case SwiftNodeType.VariableDeclaration:
|
|
254
|
-
return SwiftSymbolType.Variable;
|
|
255
|
-
case SwiftNodeType.ConstantDeclaration:
|
|
256
|
-
return SwiftSymbolType.Constant;
|
|
257
|
-
case SwiftNodeType.TypeAliasDeclaration:
|
|
258
|
-
return SwiftSymbolType.TypeAlias;
|
|
259
|
-
case SwiftNodeType.ExtensionDeclaration:
|
|
260
|
-
return SwiftSymbolType.Extension;
|
|
261
|
-
default:
|
|
262
|
-
return SwiftSymbolType.Variable;
|
|
263
|
-
}
|
|
264
|
-
}
|
|
265
|
-
/**
|
|
266
|
-
* 查找符號引用
|
|
267
|
-
*/
|
|
268
|
-
async findReferences(ast, symbol) {
|
|
269
|
-
const swiftAST = ast;
|
|
270
|
-
const references = [];
|
|
271
|
-
// 添加定義引用
|
|
272
|
-
references.push({
|
|
273
|
-
symbol,
|
|
274
|
-
location: symbol.location,
|
|
275
|
-
type: ReferenceType.Definition
|
|
276
|
-
});
|
|
277
|
-
// 基本的文字匹配查找引用
|
|
278
|
-
const symbolName = symbol.name;
|
|
279
|
-
// 檢查所有子節點的代碼
|
|
280
|
-
let sourceCode = swiftAST.root.properties.code;
|
|
281
|
-
if (!sourceCode) {
|
|
282
|
-
// 如果根節點沒有代碼,嘗試從子節點獲取
|
|
283
|
-
for (const child of swiftAST.root.children) {
|
|
284
|
-
if (child.properties.code) {
|
|
285
|
-
sourceCode = child.properties.code;
|
|
286
|
-
break;
|
|
287
|
-
}
|
|
288
|
-
}
|
|
289
|
-
}
|
|
290
|
-
if (sourceCode) {
|
|
291
|
-
const lines = sourceCode.split('\n');
|
|
292
|
-
for (let i = 0; i < lines.length; i++) {
|
|
293
|
-
const line = lines[i];
|
|
294
|
-
let index = 0;
|
|
295
|
-
// 在每一行中查找符號名稱的所有出現
|
|
296
|
-
while ((index = line.indexOf(symbolName, index)) !== -1) {
|
|
297
|
-
// 檢查是否是完整的標識符(不是其他標識符的一部分)
|
|
298
|
-
const beforeChar = index > 0 ? line[index - 1] : ' ';
|
|
299
|
-
const afterChar = index + symbolName.length < line.length ? line[index + symbolName.length] : ' ';
|
|
300
|
-
if (!/\w/.test(beforeChar) && !/\w/.test(afterChar)) {
|
|
301
|
-
const start = createPosition(i + 1, index + 1, 0); // 行和列都是1-based
|
|
302
|
-
const end = createPosition(i + 1, index + symbolName.length + 1, 0);
|
|
303
|
-
const range = createCoreRange(start, end);
|
|
304
|
-
// 檢查是否與定義位置相同(避免重複)
|
|
305
|
-
const isDuplicate = range.start.line === symbol.location.range.start.line &&
|
|
306
|
-
range.start.column === symbol.location.range.start.column;
|
|
307
|
-
if (!isDuplicate) {
|
|
308
|
-
references.push({
|
|
309
|
-
symbol,
|
|
310
|
-
location: { filePath: swiftAST.sourceFile, range },
|
|
311
|
-
type: ReferenceType.Usage
|
|
312
|
-
});
|
|
313
|
-
}
|
|
314
|
-
}
|
|
315
|
-
index += symbolName.length;
|
|
316
|
-
}
|
|
317
|
-
}
|
|
318
|
-
}
|
|
319
|
-
return references;
|
|
320
|
-
}
|
|
321
|
-
/**
|
|
322
|
-
* 提取依賴關係
|
|
323
|
-
*/
|
|
324
|
-
async extractDependencies(ast) {
|
|
325
|
-
const swiftAST = ast;
|
|
326
|
-
const dependencies = [];
|
|
327
|
-
// 遞歸提取 import 語句
|
|
328
|
-
this.extractDependenciesFromNode(swiftAST.root, swiftAST.sourceFile, dependencies);
|
|
329
|
-
return dependencies;
|
|
330
|
-
}
|
|
331
|
-
/**
|
|
332
|
-
* 從節點提取依賴關係
|
|
333
|
-
*/
|
|
334
|
-
extractDependenciesFromNode(node, sourceFile, dependencies) {
|
|
335
|
-
if (node.swiftType === SwiftNodeType.Import) {
|
|
336
|
-
// 基本實作:假設 import 語句
|
|
337
|
-
const importName = this.extractImportName(node);
|
|
338
|
-
if (importName) {
|
|
339
|
-
dependencies.push(createDependency(importName, DependencyType.Import, false, // Swift imports 通常不是相對路徑
|
|
340
|
-
[]));
|
|
341
|
-
}
|
|
342
|
-
}
|
|
343
|
-
// 遞歸處理子節點
|
|
344
|
-
for (const child of node.children) {
|
|
345
|
-
this.extractDependenciesFromNode(child, sourceFile, dependencies);
|
|
346
|
-
}
|
|
347
|
-
}
|
|
348
|
-
/**
|
|
349
|
-
* 提取 import 名稱
|
|
350
|
-
*/
|
|
351
|
-
extractImportName(node) {
|
|
352
|
-
// 優先從 properties 中取得名稱
|
|
353
|
-
if (node.properties.name) {
|
|
354
|
-
return node.properties.name;
|
|
355
|
-
}
|
|
356
|
-
// 如果沒有,嘗試從程式碼中解析
|
|
357
|
-
const code = node.properties.code;
|
|
358
|
-
if (!code) {
|
|
359
|
-
return null;
|
|
360
|
-
}
|
|
361
|
-
const lines = code.split('\n');
|
|
362
|
-
const startLine = Math.max(0, node.range.start.line - 1);
|
|
363
|
-
if (startLine >= lines.length) {
|
|
364
|
-
return null;
|
|
365
|
-
}
|
|
366
|
-
const lineContent = lines[startLine];
|
|
367
|
-
const match = lineContent.match(/import\s+(\w+)/);
|
|
368
|
-
return match ? match[1] : null;
|
|
369
|
-
}
|
|
370
|
-
/**
|
|
371
|
-
* 重新命名符號
|
|
372
|
-
*/
|
|
373
|
-
async rename(ast, position, newName) {
|
|
374
|
-
this.validateRenameInput(newName);
|
|
375
|
-
const symbol = await this.findSymbolAtPosition(ast, position);
|
|
376
|
-
if (!symbol) {
|
|
377
|
-
throw new Error('在指定位置找不到符號');
|
|
378
|
-
}
|
|
379
|
-
const references = await this.findReferences(ast, symbol);
|
|
380
|
-
const edits = [];
|
|
381
|
-
for (const reference of references) {
|
|
382
|
-
const edit = createCodeEdit(reference.location.filePath, reference.location.range, newName, 'rename');
|
|
383
|
-
edits.push(edit);
|
|
384
|
-
}
|
|
385
|
-
return edits;
|
|
386
|
-
}
|
|
387
|
-
/**
|
|
388
|
-
* 提取函式重構
|
|
389
|
-
*/
|
|
390
|
-
async extractFunction(ast, selection) {
|
|
391
|
-
// 複雜的重構操作,暫時不實作
|
|
392
|
-
throw new Error('提取函式重構尚未實作');
|
|
393
|
-
}
|
|
394
|
-
/**
|
|
395
|
-
* 查找定義
|
|
396
|
-
*/
|
|
397
|
-
async findDefinition(ast, position) {
|
|
398
|
-
// 先檢查位置是否包含有效的標識符
|
|
399
|
-
const identifierAtPosition = this.extractIdentifierAtPosition(ast, position);
|
|
400
|
-
// 如果位置沒有標識符,直接返回 null
|
|
401
|
-
if (!identifierAtPosition) {
|
|
402
|
-
return null;
|
|
403
|
-
}
|
|
404
|
-
// 搜索匹配的定義符號
|
|
405
|
-
const symbols = await this.extractSymbols(ast);
|
|
406
|
-
// 優先選擇宣告型別的符號
|
|
407
|
-
for (const sym of symbols) {
|
|
408
|
-
if (sym.name === identifierAtPosition) {
|
|
409
|
-
const swiftSym = sym;
|
|
410
|
-
if (swiftSym.swiftType === SwiftSymbolType.Class ||
|
|
411
|
-
swiftSym.swiftType === SwiftSymbolType.Struct ||
|
|
412
|
-
swiftSym.swiftType === SwiftSymbolType.Function) {
|
|
413
|
-
const kind = this.swiftSymbolTypeToDefinitionKind(swiftSym.swiftType);
|
|
414
|
-
return createDefinition(sym.location, kind);
|
|
415
|
-
}
|
|
416
|
-
}
|
|
417
|
-
}
|
|
418
|
-
// 如果沒有找到宣告型別,搜索任何匹配的符號
|
|
419
|
-
for (const sym of symbols) {
|
|
420
|
-
if (sym.name === identifierAtPosition) {
|
|
421
|
-
const swiftSym = sym;
|
|
422
|
-
const kind = this.swiftSymbolTypeToDefinitionKind(swiftSym.swiftType);
|
|
423
|
-
return createDefinition(sym.location, kind);
|
|
424
|
-
}
|
|
425
|
-
}
|
|
426
|
-
return null;
|
|
427
|
-
}
|
|
428
|
-
/**
|
|
429
|
-
* 查找使用位置
|
|
430
|
-
*/
|
|
431
|
-
async findUsages(ast, symbol) {
|
|
432
|
-
const references = await this.findReferences(ast, symbol);
|
|
433
|
-
return references
|
|
434
|
-
.filter(ref => ref.type === ReferenceType.Usage)
|
|
435
|
-
.map(ref => createUsage(ref.location, 'reference'));
|
|
436
|
-
}
|
|
437
|
-
/**
|
|
438
|
-
* 驗證插件狀態
|
|
439
|
-
*/
|
|
440
|
-
async validate() {
|
|
441
|
-
try {
|
|
442
|
-
// 檢查是否可以初始化 web-tree-sitter
|
|
443
|
-
// 暫時返回成功,後續可以添加實際的驗證邏輯
|
|
444
|
-
return createValidationSuccess();
|
|
445
|
-
}
|
|
446
|
-
catch (error) {
|
|
447
|
-
return createValidationFailure([{
|
|
448
|
-
code: 'SWIFT_VALIDATION_ERROR',
|
|
449
|
-
message: `Swift Parser 驗證失敗: ${error instanceof Error ? error.message : String(error)}`,
|
|
450
|
-
location: {
|
|
451
|
-
filePath: '',
|
|
452
|
-
range: {
|
|
453
|
-
start: { line: 0, column: 0, offset: 0 },
|
|
454
|
-
end: { line: 0, column: 0, offset: 0 }
|
|
455
|
-
}
|
|
456
|
-
}
|
|
457
|
-
}]);
|
|
458
|
-
}
|
|
459
|
-
}
|
|
460
|
-
/**
|
|
461
|
-
* 清理資源
|
|
462
|
-
*/
|
|
463
|
-
async dispose() {
|
|
464
|
-
this.initialized = false;
|
|
465
|
-
this.parser = null;
|
|
466
|
-
this.language = null;
|
|
467
|
-
}
|
|
468
|
-
// 私有輔助方法
|
|
469
|
-
validateInput(code, filePath) {
|
|
470
|
-
if (code === null || code === undefined) {
|
|
471
|
-
throw new Error('程式碼內容不能為 null 或 undefined');
|
|
472
|
-
}
|
|
473
|
-
if (!filePath || !filePath.trim()) {
|
|
474
|
-
throw new Error('檔案路徑不能為空');
|
|
475
|
-
}
|
|
476
|
-
}
|
|
477
|
-
validateRenameInput(newName) {
|
|
478
|
-
if (!newName.trim()) {
|
|
479
|
-
throw new Error('新名稱不能為空');
|
|
480
|
-
}
|
|
481
|
-
if (!isValidSwiftIdentifier(newName)) {
|
|
482
|
-
throw new Error('新名稱必須是有效的 Swift 識別符');
|
|
483
|
-
}
|
|
484
|
-
}
|
|
485
|
-
async findSymbolAtPosition(ast, position) {
|
|
486
|
-
const symbols = await this.extractSymbols(ast);
|
|
487
|
-
// 查找包含該位置的符號,按照範圍大小排序(優先選擇更精確的符號)
|
|
488
|
-
const matchingSymbols = [];
|
|
489
|
-
for (const symbol of symbols) {
|
|
490
|
-
if (this.isPositionInRange(position, symbol.location.range)) {
|
|
491
|
-
matchingSymbols.push(symbol);
|
|
492
|
-
}
|
|
493
|
-
}
|
|
494
|
-
if (matchingSymbols.length > 0) {
|
|
495
|
-
// 按照範圍大小排序,小範圍優先(更精確)
|
|
496
|
-
matchingSymbols.sort((a, b) => {
|
|
497
|
-
const aSize = (a.location.range.end.line - a.location.range.start.line) * 100 +
|
|
498
|
-
(a.location.range.end.column - a.location.range.start.column);
|
|
499
|
-
const bSize = (b.location.range.end.line - b.location.range.start.line) * 100 +
|
|
500
|
-
(b.location.range.end.column - b.location.range.start.column);
|
|
501
|
-
return aSize - bSize;
|
|
502
|
-
});
|
|
503
|
-
return matchingSymbols[0];
|
|
504
|
-
}
|
|
505
|
-
// 如果沒有精確匹配,搜索相同行上離目標位置最近的符號
|
|
506
|
-
const sameLine = symbols.filter(s => s.location.range.start.line === position.line ||
|
|
507
|
-
s.location.range.end.line === position.line);
|
|
508
|
-
if (sameLine.length > 0) {
|
|
509
|
-
let nearest = sameLine[0];
|
|
510
|
-
let minDistance = Math.abs(nearest.location.range.start.column - position.column);
|
|
511
|
-
for (const symbol of sameLine) {
|
|
512
|
-
const distance = Math.min(Math.abs(symbol.location.range.start.column - position.column), Math.abs(symbol.location.range.end.column - position.column));
|
|
513
|
-
if (distance < minDistance) {
|
|
514
|
-
minDistance = distance;
|
|
515
|
-
nearest = symbol;
|
|
516
|
-
}
|
|
517
|
-
}
|
|
518
|
-
// 如果距離合理(在同一行內),返回該符號
|
|
519
|
-
if (minDistance <= 20) {
|
|
520
|
-
return nearest;
|
|
521
|
-
}
|
|
522
|
-
}
|
|
523
|
-
return null;
|
|
524
|
-
}
|
|
525
|
-
isPositionInRange(position, range) {
|
|
526
|
-
if (position.line < range.start.line || position.line > range.end.line) {
|
|
527
|
-
return false;
|
|
528
|
-
}
|
|
529
|
-
if (position.line === range.start.line && position.column < range.start.column) {
|
|
530
|
-
return false;
|
|
531
|
-
}
|
|
532
|
-
if (position.line === range.end.line && position.column >= range.end.column) {
|
|
533
|
-
return false;
|
|
534
|
-
}
|
|
535
|
-
return true;
|
|
536
|
-
}
|
|
537
|
-
/**
|
|
538
|
-
* 從位置提取標識符名稱
|
|
539
|
-
*/
|
|
540
|
-
extractIdentifierAtPosition(ast, position) {
|
|
541
|
-
const swiftAST = ast;
|
|
542
|
-
// 從 AST 的源文件中提取標識符
|
|
543
|
-
if (swiftAST.root.properties.code) {
|
|
544
|
-
const lines = swiftAST.root.properties.code.split('\n');
|
|
545
|
-
const targetLine = lines[position.line - 1]; // position.line 是 1-based
|
|
546
|
-
if (targetLine) {
|
|
547
|
-
// 在目標列周圍查找標識符
|
|
548
|
-
const beforeCursor = targetLine.substring(0, position.column - 1); // position.column 也是 1-based
|
|
549
|
-
const afterCursor = targetLine.substring(position.column - 1);
|
|
550
|
-
// 如果當前位置是空格,嘗試跳過前導空格找到下一個標識符
|
|
551
|
-
let adjustedAfterCursor = afterCursor;
|
|
552
|
-
let spaceOffset = 0;
|
|
553
|
-
while (spaceOffset < afterCursor.length && /\s/.test(afterCursor[spaceOffset])) {
|
|
554
|
-
spaceOffset++;
|
|
555
|
-
}
|
|
556
|
-
if (spaceOffset > 0) {
|
|
557
|
-
adjustedAfterCursor = afterCursor.substring(spaceOffset);
|
|
558
|
-
}
|
|
559
|
-
// 向前查找標識符的開始
|
|
560
|
-
let start = beforeCursor.length - 1;
|
|
561
|
-
while (start >= 0 && /\w/.test(beforeCursor[start])) {
|
|
562
|
-
start--;
|
|
563
|
-
}
|
|
564
|
-
start++; // 調整到標識符的第一個字符
|
|
565
|
-
// 向後查找標識符的結束
|
|
566
|
-
let end = 0;
|
|
567
|
-
while (end < adjustedAfterCursor.length && /\w/.test(adjustedAfterCursor[end])) {
|
|
568
|
-
end++;
|
|
569
|
-
}
|
|
570
|
-
// 提取標識符
|
|
571
|
-
const identifier = beforeCursor.substring(start) + adjustedAfterCursor.substring(0, end);
|
|
572
|
-
return identifier.match(/^\w+$/) ? identifier : null;
|
|
573
|
-
}
|
|
574
|
-
}
|
|
575
|
-
return null;
|
|
576
|
-
}
|
|
577
|
-
swiftSymbolTypeToDefinitionKind(symbolType) {
|
|
578
|
-
switch (symbolType) {
|
|
579
|
-
case SwiftSymbolType.Class:
|
|
580
|
-
return 'class';
|
|
581
|
-
case SwiftSymbolType.Struct:
|
|
582
|
-
return 'class'; // Swift struct 映射到 class
|
|
583
|
-
case SwiftSymbolType.Enum:
|
|
584
|
-
return 'enum';
|
|
585
|
-
case SwiftSymbolType.Protocol:
|
|
586
|
-
return 'interface';
|
|
587
|
-
case SwiftSymbolType.Function:
|
|
588
|
-
case SwiftSymbolType.Method:
|
|
589
|
-
case SwiftSymbolType.Initializer:
|
|
590
|
-
case SwiftSymbolType.Deinitializer:
|
|
591
|
-
return 'function';
|
|
592
|
-
case SwiftSymbolType.Property:
|
|
593
|
-
case SwiftSymbolType.Variable:
|
|
594
|
-
return 'variable';
|
|
595
|
-
case SwiftSymbolType.Constant:
|
|
596
|
-
return 'constant';
|
|
597
|
-
case SwiftSymbolType.TypeAlias:
|
|
598
|
-
return 'type';
|
|
599
|
-
case SwiftSymbolType.Extension:
|
|
600
|
-
return 'class';
|
|
601
|
-
case SwiftSymbolType.EnumCase:
|
|
602
|
-
return 'constant';
|
|
603
|
-
case SwiftSymbolType.Parameter:
|
|
604
|
-
return 'variable';
|
|
605
|
-
case SwiftSymbolType.Generic:
|
|
606
|
-
return 'type';
|
|
607
|
-
default:
|
|
608
|
-
return 'variable';
|
|
609
|
-
}
|
|
610
|
-
}
|
|
611
|
-
}
|
|
612
|
-
//# sourceMappingURL=parser.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../../../src/plugins/swift/parser.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAOL,uBAAuB,EACvB,uBAAuB,EACvB,cAAc,EACd,gBAAgB,EAChB,WAAW,EACZ,MAAM,sCAAsC,CAAC;AAS9C,OAAO,EACL,SAAS,EACT,iBAAiB,EACjB,aAAa,EAEb,cAAc,EACd,gBAAgB,EAChB,cAAc,EACd,cAAc,EACd,WAAW,IAAI,eAAe,EAC/B,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAIL,aAAa,EACb,eAAe,EAEf,eAAe,EACf,8BAA8B,EAC9B,kBAAkB,EAClB,iBAAiB,EACjB,qBAAqB,EAErB,sBAAsB,EACtB,iBAAiB,EAGlB,MAAM,YAAY,CAAC;AAEpB;;;GAGG;AACH,MAAM,OAAO,WAAW;IACN,IAAI,GAAG,OAAO,CAAC;IACf,OAAO,GAAG,OAAO,CAAC;IAClB,mBAAmB,GAAG,CAAC,QAAQ,CAAU,CAAC;IAC1C,kBAAkB,GAAG,CAAC,OAAO,CAAU,CAAC;IAEhD,WAAW,GAAG,KAAK,CAAC;IACpB,MAAM,GAAQ,IAAI,CAAC,CAAC,yBAAyB;IAC7C,QAAQ,GAAQ,IAAI,CAAC,CAAC,iBAAiB;IAE/C;QACE,gBAAgB;IAClB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK,CAAC,IAAY,EAAE,QAAgB;QACxC,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAEnC,IAAI,CAAC;YACH,iCAAiC;YACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;YAErD,MAAM,QAAQ,GAAG,iBAAiB,CAChC,OAAO,EACP,IAAI,CAAC,OAAO,EACZ,EAAE,eAAe,EAAE,8BAA8B,EAAE,EACnD,IAAI,CAAC,GAAG,EAAE,EACV,CAAC,CAAC,mBAAmB;aACtB,CAAC;YAEF,MAAM,OAAO,GAAG,SAAS,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;YACxD,MAAM,GAAG,GAAa;gBACpB,GAAG,OAAO;gBACV,IAAI,EAAE,QAAQ;gBACd,MAAM,EAAE,EAAE;aACX,CAAC;YAEF,OAAO,GAAG,CAAC;QACb,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,eAAe,EAAE,CAAC;gBACrC,MAAM,KAAK,CAAC;YACd,CAAC;YACD,MAAM,qBAAqB,CAAC,SAAS,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACjG,CAAC;IACH,CAAC;IAED;;OAEG;IACK,cAAc,CAAC,IAAY,EAAE,QAAgB;QACnD,QAAQ;QACR,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;YACjB,MAAM,UAAU,GAAG,eAAe,CAChC,cAAc,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EACvB,cAAc,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CACxB,CAAC;YACF,OAAO,kBAAkB,CAAC,aAAa,CAAC,OAAO,EAAE,UAAU,EAAE,EAAE,CAAC,CAAC;QACnE,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC/B,MAAM,QAAQ,GAAmB,EAAE,CAAC;QAEpC,mBAAmB;QACnB,MAAM,iBAAiB,GAAG,IAAI,CAAC;QAE/B,aAAa;QACb,IAAI,YAAY,GAAG,CAAC,CAAC;QACrB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACtB,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YAEhC,IAAI,WAAW,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBACjD,OAAO;gBACP,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;gBAC/C,IAAI,UAAU,EAAE,CAAC;oBACf,MAAM,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;oBAC3B,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;oBACxD,MAAM,KAAK,GAAG,cAAc,CAAC,CAAC,GAAG,CAAC,EAAE,eAAe,GAAG,CAAC,EAAE,YAAY,GAAG,eAAe,CAAC,CAAC;oBACzF,MAAM,GAAG,GAAG,cAAc,CAAC,CAAC,GAAG,CAAC,EAAE,eAAe,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,YAAY,GAAG,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;oBACnH,MAAM,KAAK,GAAG,eAAe,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;oBAE1C,MAAM,SAAS,GAAG,kBAAkB,CAAC,aAAa,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC;oBAC5E,SAAS,CAAC,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC;oBACjC,SAAS,CAAC,UAAU,CAAC,IAAI,GAAG,iBAAiB,CAAC;oBAC9C,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBAC3B,CAAC;gBAED,OAAO;gBACP,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;gBACjD,IAAI,WAAW,EAAE,CAAC;oBAChB,MAAM,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;oBAC5B,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;oBACxD,MAAM,KAAK,GAAG,cAAc,CAAC,CAAC,GAAG,CAAC,EAAE,eAAe,GAAG,CAAC,EAAE,YAAY,GAAG,eAAe,CAAC,CAAC;oBACzF,MAAM,GAAG,GAAG,cAAc,CAAC,CAAC,GAAG,CAAC,EAAE,eAAe,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,YAAY,GAAG,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;oBACnH,MAAM,KAAK,GAAG,eAAe,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;oBAE1C,MAAM,UAAU,GAAG,kBAAkB,CAAC,aAAa,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAC;oBAC9E,UAAU,CAAC,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC;oBAClC,UAAU,CAAC,UAAU,CAAC,IAAI,GAAG,iBAAiB,CAAC;oBAC/C,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBAC5B,CAAC;gBAED,OAAO;gBACP,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;gBAC7C,IAAI,SAAS,EAAE,CAAC;oBACd,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;oBAC1B,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;oBACxD,MAAM,KAAK,GAAG,cAAc,CAAC,CAAC,GAAG,CAAC,EAAE,eAAe,GAAG,CAAC,EAAE,YAAY,GAAG,eAAe,CAAC,CAAC;oBACzF,MAAM,GAAG,GAAG,cAAc,CAAC,CAAC,GAAG,CAAC,EAAE,eAAe,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,YAAY,GAAG,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;oBACnH,MAAM,KAAK,GAAG,eAAe,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;oBAE1C,MAAM,QAAQ,GAAG,kBAAkB,CAAC,aAAa,CAAC,mBAAmB,EAAE,KAAK,CAAC,CAAC;oBAC9E,QAAQ,CAAC,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC;oBAChC,QAAQ,CAAC,UAAU,CAAC,IAAI,GAAG,iBAAiB,CAAC;oBAC7C,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAC1B,CAAC;gBAED,OAAO;gBACP,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;gBACnD,IAAI,QAAQ,EAAE,CAAC;oBACb,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;oBACzB,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;oBACxD,MAAM,KAAK,GAAG,cAAc,CAAC,CAAC,GAAG,CAAC,EAAE,eAAe,GAAG,CAAC,EAAE,YAAY,GAAG,eAAe,CAAC,CAAC;oBACzF,MAAM,GAAG,GAAG,cAAc,CAAC,CAAC,GAAG,CAAC,EAAE,eAAe,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,YAAY,GAAG,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;oBACnH,MAAM,KAAK,GAAG,eAAe,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;oBAE1C,MAAM,OAAO,GAAG,kBAAkB,CAAC,aAAa,CAAC,mBAAmB,EAAE,KAAK,CAAC,CAAC;oBAC7E,OAAO,CAAC,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC;oBAC/B,OAAO,CAAC,UAAU,CAAC,IAAI,GAAG,iBAAiB,CAAC;oBAC5C,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACzB,CAAC;gBAED,YAAY;gBACZ,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;gBACjD,IAAI,WAAW,EAAE,CAAC;oBAChB,MAAM,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;oBAC5B,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;oBACxD,MAAM,KAAK,GAAG,cAAc,CAAC,CAAC,GAAG,CAAC,EAAE,eAAe,GAAG,CAAC,EAAE,YAAY,GAAG,eAAe,CAAC,CAAC;oBACzF,MAAM,GAAG,GAAG,cAAc,CAAC,CAAC,GAAG,CAAC,EAAE,eAAe,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,YAAY,GAAG,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;oBACnH,MAAM,KAAK,GAAG,eAAe,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;oBAE1C,MAAM,UAAU,GAAG,kBAAkB,CAAC,aAAa,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;oBACnE,UAAU,CAAC,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC;oBAClC,UAAU,CAAC,UAAU,CAAC,IAAI,GAAG,iBAAiB,CAAC;oBAC/C,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBAC5B,CAAC;YACH,CAAC;YAED,YAAY,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,iBAAiB;QACpD,CAAC;QAED,MAAM,SAAS,GAAG,cAAc,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAC1C,MAAM,OAAO,GAAG,cAAc,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,MAAM,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAC7G,MAAM,SAAS,GAAG,eAAe,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QACtD,MAAM,QAAQ,GAAG,kBAAkB,CAAC,aAAa,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;QAEhF,YAAY;QACZ,QAAQ,CAAC,UAAU,CAAC,IAAI,GAAG,iBAAiB,CAAC;QAE7C,SAAS;QACT,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;YAC5B,KAAa,CAAC,MAAM,GAAG,QAAQ,CAAC;QACnC,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,cAAc,CAAC,GAAQ;QAC3B,MAAM,QAAQ,GAAG,GAAe,CAAC;QACjC,MAAM,OAAO,GAAkB,EAAE,CAAC;QAElC,SAAS;QACT,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAEzE,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACK,sBAAsB,CAAC,IAAkB,EAAE,UAAkB,EAAE,OAAsB;QAC3F,IAAI,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5B,MAAM,MAAM,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;YAC3D,IAAI,MAAM,EAAE,CAAC;gBACX,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACvB,CAAC;QACH,CAAC;QAED,UAAU;QACV,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClC,IAAI,CAAC,sBAAsB,CAAC,KAAqB,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;QAC1E,CAAC;IACH,CAAC;IAED;;OAEG;IACK,oBAAoB,CAAC,IAAkB,EAAE,UAAkB;QACjE,mCAAmC;QACnC,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAC1F,IAAI,CAAC,IAAI,EAAE,CAAC;YAAA,OAAO,IAAI,CAAC;QAAA,CAAC;QAEzB,MAAM,UAAU,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC7D,MAAM,QAAQ,GAAG,cAAc,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAExD,OAAO,iBAAiB,CAAC,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;IAC7D,CAAC;IAED;;OAEG;IACK,mBAAmB,CAAC,IAAkB,EAAE,IAAa;QAC3D,oBAAoB;QACpB,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;YACnC,qBAAqB;YACrB,QAAQ,IAAI,CAAC,SAAS,EAAE,CAAC;gBACzB,KAAK,aAAa,CAAC,gBAAgB;oBACjC,OAAO,QAAQ,CAAC;gBAClB,KAAK,aAAa,CAAC,iBAAiB;oBAClC,OAAO,OAAO,CAAC;gBACjB,KAAK,aAAa,CAAC,mBAAmB;oBACpC,OAAO,OAAO,CAAC;gBACjB,KAAK,aAAa,CAAC,mBAAmB;oBACpC,OAAO,MAAM,CAAC;gBAChB;oBACE,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QAED,+BAA+B;QAC/B,iBAAiB;QACjB,MAAM,UAAU,GAAG,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAChD,IAAI,CAAC,UAAU,EAAE,CAAC;YAAA,OAAO,IAAI,CAAC;QAAA,CAAC;QAE/B,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACrC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;QAEzD,IAAI,SAAS,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;YAAA,OAAO,IAAI,CAAC;QAAA,CAAC;QAE7C,MAAM,WAAW,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;QAErC,QAAQ,IAAI,CAAC,SAAS,EAAE,CAAC;YACzB,KAAK,aAAa,CAAC,gBAAgB,CAAC,CAAC,CAAC;gBACpC,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;gBACjD,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YACjC,CAAC;YACD,KAAK,aAAa,CAAC,iBAAiB,CAAC,CAAC,CAAC;gBACrC,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;gBAClD,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YACjC,CAAC;YACD,KAAK,aAAa,CAAC,mBAAmB,CAAC,CAAC,CAAC;gBACvC,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;gBAChD,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YACjC,CAAC;YACD,KAAK,aAAa,CAAC,mBAAmB,CAAC,CAAC,CAAC;gBACvC,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;gBACvD,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YACjC,CAAC;YACD;gBACE,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED;;OAEG;IACK,oBAAoB,CAAC,QAAuB;QAClD,QAAQ,QAAQ,EAAE,CAAC;YACnB,KAAK,aAAa,CAAC,gBAAgB;gBACjC,OAAO,eAAe,CAAC,KAAK,CAAC;YAC/B,KAAK,aAAa,CAAC,iBAAiB;gBAClC,OAAO,eAAe,CAAC,MAAM,CAAC;YAChC,KAAK,aAAa,CAAC,eAAe;gBAChC,OAAO,eAAe,CAAC,IAAI,CAAC;YAC9B,KAAK,aAAa,CAAC,mBAAmB;gBACpC,OAAO,eAAe,CAAC,QAAQ,CAAC;YAClC,KAAK,aAAa,CAAC,mBAAmB;gBACpC,OAAO,eAAe,CAAC,QAAQ,CAAC;YAClC,KAAK,aAAa,CAAC,mBAAmB;gBACpC,OAAO,eAAe,CAAC,QAAQ,CAAC;YAClC,KAAK,aAAa,CAAC,mBAAmB;gBACpC,OAAO,eAAe,CAAC,QAAQ,CAAC;YAClC,KAAK,aAAa,CAAC,oBAAoB;gBACrC,OAAO,eAAe,CAAC,SAAS,CAAC;YACnC,KAAK,aAAa,CAAC,oBAAoB;gBACrC,OAAO,eAAe,CAAC,SAAS,CAAC;YACnC;gBACE,OAAO,eAAe,CAAC,QAAQ,CAAC;QAClC,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,cAAc,CAAC,GAAQ,EAAE,MAAc;QAC3C,MAAM,QAAQ,GAAG,GAAe,CAAC;QACjC,MAAM,UAAU,GAAgB,EAAE,CAAC;QAEnC,SAAS;QACT,UAAU,CAAC,IAAI,CAAC;YACd,MAAM;YACN,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,IAAI,EAAE,aAAa,CAAC,UAAU;SAC/B,CAAC,CAAC;QAEH,cAAc;QACd,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC;QAE/B,aAAa;QACb,IAAI,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAC/C,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,qBAAqB;YACrB,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAC3C,IAAK,KAAsB,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;oBAC5C,UAAU,GAAI,KAAsB,CAAC,UAAU,CAAC,IAAI,CAAC;oBACrD,MAAM;gBACR,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAErC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;gBACtB,IAAI,KAAK,GAAG,CAAC,CAAC;gBAEd,mBAAmB;gBACnB,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;oBACxD,2BAA2B;oBAC3B,MAAM,UAAU,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;oBACrD,MAAM,SAAS,GAAG,KAAK,GAAG,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;oBAElG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;wBACpD,MAAM,KAAK,GAAG,cAAc,CAAC,CAAC,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,eAAe;wBAClE,MAAM,GAAG,GAAG,cAAc,CAAC,CAAC,GAAG,CAAC,EAAE,KAAK,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;wBACpE,MAAM,KAAK,GAAG,eAAe,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;wBAE1C,oBAAoB;wBACpB,MAAM,WAAW,GACf,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI;4BACrD,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC;wBAE5D,IAAI,CAAC,WAAW,EAAE,CAAC;4BACjB,UAAU,CAAC,IAAI,CAAC;gCACd,MAAM;gCACN,QAAQ,EAAE,EAAE,QAAQ,EAAE,QAAQ,CAAC,UAAU,EAAE,KAAK,EAAE;gCAClD,IAAI,EAAE,aAAa,CAAC,KAAK;6BAC1B,CAAC,CAAC;wBACL,CAAC;oBACH,CAAC;oBAED,KAAK,IAAI,UAAU,CAAC,MAAM,CAAC;gBAC7B,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,UAAU,CAAC;IACpB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,mBAAmB,CAAC,GAAQ;QAChC,MAAM,QAAQ,GAAG,GAAe,CAAC;QACjC,MAAM,YAAY,GAAiB,EAAE,CAAC;QAEtC,iBAAiB;QACjB,IAAI,CAAC,2BAA2B,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;QAEnF,OAAO,YAAY,CAAC;IACtB,CAAC;IAED;;OAEG;IACK,2BAA2B,CAAC,IAAkB,EAAE,UAAkB,EAAE,YAA0B;QACpG,IAAI,IAAI,CAAC,SAAS,KAAK,aAAa,CAAC,MAAM,EAAE,CAAC;YAC5C,oBAAoB;YACpB,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;YAChD,IAAI,UAAU,EAAE,CAAC;gBACf,YAAY,CAAC,IAAI,CAAC,gBAAgB,CAChC,UAAU,EACV,cAAc,CAAC,MAAM,EACrB,KAAK,EAAE,yBAAyB;gBAChC,EAAE,CACH,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,UAAU;QACV,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClC,IAAI,CAAC,2BAA2B,CAAC,KAAqB,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC;QACpF,CAAC;IACH,CAAC;IAED;;OAEG;IACK,iBAAiB,CAAC,IAAkB;QAC1C,uBAAuB;QACvB,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;YACzB,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAC9B,CAAC;QAED,iBAAiB;QACjB,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAClC,IAAI,CAAC,IAAI,EAAE,CAAC;YAAA,OAAO,IAAI,CAAC;QAAA,CAAC;QAEzB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC/B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;QAEzD,IAAI,SAAS,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;YAAA,OAAO,IAAI,CAAC;QAAA,CAAC;QAE7C,MAAM,WAAW,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;QACrC,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;QAClD,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM,CAAC,GAAQ,EAAE,QAAkB,EAAE,OAAe;QACxD,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;QAElC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QAC9D,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;QAChC,CAAC;QAED,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAC1D,MAAM,KAAK,GAAe,EAAE,CAAC;QAE7B,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;YACnC,MAAM,IAAI,GAAG,cAAc,CACzB,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAC3B,SAAS,CAAC,QAAQ,CAAC,KAAK,EACxB,OAAO,EACP,QAAQ,CACT,CAAC;YACF,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnB,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,eAAe,CAAC,GAAQ,EAAE,SAAgB;QAC9C,gBAAgB;QAChB,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;IAChC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,cAAc,CAAC,GAAQ,EAAE,QAAkB;QAC/C,kBAAkB;QAClB,MAAM,oBAAoB,GAAG,IAAI,CAAC,2BAA2B,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QAE7E,sBAAsB;QACtB,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC1B,OAAO,IAAI,CAAC;QACd,CAAC;QAED,YAAY;QACZ,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;QAE/C,cAAc;QACd,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;YAC1B,IAAI,GAAG,CAAC,IAAI,KAAK,oBAAoB,EAAE,CAAC;gBACtC,MAAM,QAAQ,GAAG,GAAkB,CAAC;gBACpC,IAAI,QAAQ,CAAC,SAAS,KAAK,eAAe,CAAC,KAAK;oBAC5C,QAAQ,CAAC,SAAS,KAAK,eAAe,CAAC,MAAM;oBAC7C,QAAQ,CAAC,SAAS,KAAK,eAAe,CAAC,QAAQ,EAAE,CAAC;oBACpD,MAAM,IAAI,GAAG,IAAI,CAAC,+BAA+B,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;oBACtE,OAAO,gBAAgB,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;gBAC9C,CAAC;YACH,CAAC;QACH,CAAC;QAED,uBAAuB;QACvB,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;YAC1B,IAAI,GAAG,CAAC,IAAI,KAAK,oBAAoB,EAAE,CAAC;gBACtC,MAAM,QAAQ,GAAG,GAAkB,CAAC;gBACpC,MAAM,IAAI,GAAG,IAAI,CAAC,+BAA+B,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;gBACtE,OAAO,gBAAgB,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;YAC9C,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU,CAAC,GAAQ,EAAE,MAAc;QACvC,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAE1D,OAAO,UAAU;aACd,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,aAAa,CAAC,KAAK,CAAC;aAC/C,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC;IACxD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAQ;QACZ,IAAI,CAAC;YACH,4BAA4B;YAC5B,uBAAuB;YACvB,OAAO,uBAAuB,EAAE,CAAC;QACnC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,uBAAuB,CAAC,CAAC;oBAC9B,IAAI,EAAE,wBAAwB;oBAC9B,OAAO,EAAE,sBAAsB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;oBACvF,QAAQ,EAAE;wBACR,QAAQ,EAAE,EAAE;wBACZ,KAAK,EAAE;4BACL,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE;4BACxC,GAAG,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE;yBACvC;qBACF;iBACF,CAAC,CAAC,CAAC;QACN,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO;QACX,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;QACzB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;IACvB,CAAC;IAED,SAAS;IAED,aAAa,CAAC,IAAY,EAAE,QAAgB;QAClD,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACxC,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;QAC/C,CAAC;QAED,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC;YAClC,MAAM,IAAI,KAAK,CAAC,UAAU,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;IAEO,mBAAmB,CAAC,OAAe;QACzC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC;QAC7B,CAAC;QAED,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,EAAE,CAAC;YACrC,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,oBAAoB,CAAC,GAAQ,EAAE,QAAkB;QAC7D,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;QAE/C,kCAAkC;QAClC,MAAM,eAAe,GAAa,EAAE,CAAC;QACrC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,IAAI,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC5D,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC/B,CAAC;QACH,CAAC;QAED,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/B,sBAAsB;YACtB,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;gBAC5B,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG;oBAChE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBAC3E,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG;oBAChE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBAC3E,OAAO,KAAK,GAAG,KAAK,CAAC;YACvB,CAAC,CAAC,CAAC;YACH,OAAO,eAAe,CAAC,CAAC,CAAC,CAAC;QAC5B,CAAC;QAED,4BAA4B;QAC5B,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAClC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI;YAC7C,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI,CAC5C,CAAC;QAEF,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,IAAI,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;YAC1B,IAAI,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;YAElF,KAAK,MAAM,MAAM,IAAI,QAAQ,EAAE,CAAC;gBAC9B,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CACvB,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,EAC9D,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,CAC7D,CAAC;gBACF,IAAI,QAAQ,GAAG,WAAW,EAAE,CAAC;oBAC3B,WAAW,GAAG,QAAQ,CAAC;oBACvB,OAAO,GAAG,MAAM,CAAC;gBACnB,CAAC;YACH,CAAC;YAED,sBAAsB;YACtB,IAAI,WAAW,IAAI,EAAE,EAAE,CAAC;gBACtB,OAAO,OAAO,CAAC;YACjB,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,iBAAiB,CAAC,QAAkB,EAAE,KAAY;QACxD,IAAI,QAAQ,CAAC,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,IAAI,QAAQ,CAAC,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;YACvE,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,QAAQ,CAAC,IAAI,KAAK,KAAK,CAAC,KAAK,CAAC,IAAI,IAAI,QAAQ,CAAC,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YAC/E,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,QAAQ,CAAC,IAAI,KAAK,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI,QAAQ,CAAC,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;YAC5E,OAAO,KAAK,CAAC;QACf,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACK,2BAA2B,CAAC,GAAQ,EAAE,QAAkB;QAC9D,MAAM,QAAQ,GAAG,GAAe,CAAC;QAEjC,mBAAmB;QACnB,IAAI,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;YAClC,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACxD,MAAM,UAAU,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,0BAA0B;YAEvE,IAAI,UAAU,EAAE,CAAC;gBACf,cAAc;gBACd,MAAM,YAAY,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,6BAA6B;gBAChG,MAAM,WAAW,GAAG,UAAU,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBAE9D,6BAA6B;gBAC7B,IAAI,mBAAmB,GAAG,WAAW,CAAC;gBACtC,IAAI,WAAW,GAAG,CAAC,CAAC;gBACpB,OAAO,WAAW,GAAG,WAAW,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC;oBAC/E,WAAW,EAAE,CAAC;gBAChB,CAAC;gBACD,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;oBACpB,mBAAmB,GAAG,WAAW,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;gBAC3D,CAAC;gBAED,aAAa;gBACb,IAAI,KAAK,GAAG,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;gBACpC,OAAO,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;oBACpD,KAAK,EAAE,CAAC;gBACV,CAAC;gBACD,KAAK,EAAE,CAAC,CAAC,eAAe;gBAExB,aAAa;gBACb,IAAI,GAAG,GAAG,CAAC,CAAC;gBACZ,OAAO,GAAG,GAAG,mBAAmB,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;oBAC/E,GAAG,EAAE,CAAC;gBACR,CAAC;gBAED,QAAQ;gBACR,MAAM,UAAU,GAAG,YAAY,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,mBAAmB,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;gBACzF,OAAO,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;YACvD,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,+BAA+B,CAAC,UAA2B;QACjE,QAAQ,UAAU,EAAE,CAAC;YACrB,KAAK,eAAe,CAAC,KAAK;gBACxB,OAAO,OAAO,CAAC;YACjB,KAAK,eAAe,CAAC,MAAM;gBACzB,OAAO,OAAO,CAAC,CAAC,yBAAyB;YAC3C,KAAK,eAAe,CAAC,IAAI;gBACvB,OAAO,MAAM,CAAC;YAChB,KAAK,eAAe,CAAC,QAAQ;gBAC3B,OAAO,WAAW,CAAC;YACrB,KAAK,eAAe,CAAC,QAAQ,CAAC;YAC9B,KAAK,eAAe,CAAC,MAAM,CAAC;YAC5B,KAAK,eAAe,CAAC,WAAW,CAAC;YACjC,KAAK,eAAe,CAAC,aAAa;gBAChC,OAAO,UAAU,CAAC;YACpB,KAAK,eAAe,CAAC,QAAQ,CAAC;YAC9B,KAAK,eAAe,CAAC,QAAQ;gBAC3B,OAAO,UAAU,CAAC;YACpB,KAAK,eAAe,CAAC,QAAQ;gBAC3B,OAAO,UAAU,CAAC;YACpB,KAAK,eAAe,CAAC,SAAS;gBAC5B,OAAO,MAAM,CAAC;YAChB,KAAK,eAAe,CAAC,SAAS;gBAC5B,OAAO,OAAO,CAAC;YACjB,KAAK,eAAe,CAAC,QAAQ;gBAC3B,OAAO,UAAU,CAAC;YACpB,KAAK,eAAe,CAAC,SAAS;gBAC5B,OAAO,UAAU,CAAC;YACpB,KAAK,eAAe,CAAC,OAAO;gBAC1B,OAAO,MAAM,CAAC;YAChB;gBACE,OAAO,UAAU,CAAC;QACpB,CAAC;IACH,CAAC;CACF"}
|