atlas-pipeline-mcp 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.
- package/.env.example +21 -0
- package/LICENSE +21 -0
- package/README.md +175 -0
- package/dist/mcp.d.ts +21 -0
- package/dist/mcp.d.ts.map +1 -0
- package/dist/mcp.js +404 -0
- package/dist/mcp.js.map +1 -0
- package/dist/pipeline.d.ts +39 -0
- package/dist/pipeline.d.ts.map +1 -0
- package/dist/pipeline.js +355 -0
- package/dist/pipeline.js.map +1 -0
- package/dist/providers/index.d.ts +14 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +13 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/llm-provider.d.ts +71 -0
- package/dist/providers/llm-provider.d.ts.map +1 -0
- package/dist/providers/llm-provider.js +357 -0
- package/dist/providers/llm-provider.js.map +1 -0
- package/dist/server.d.ts +27 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +312 -0
- package/dist/server.js.map +1 -0
- package/dist/tools/context.d.ts +23 -0
- package/dist/tools/context.d.ts.map +1 -0
- package/dist/tools/context.js +363 -0
- package/dist/tools/context.js.map +1 -0
- package/dist/tools/critique.d.ts +40 -0
- package/dist/tools/critique.d.ts.map +1 -0
- package/dist/tools/critique.js +315 -0
- package/dist/tools/critique.js.map +1 -0
- package/dist/tools/decompose.d.ts +34 -0
- package/dist/tools/decompose.d.ts.map +1 -0
- package/dist/tools/decompose.js +328 -0
- package/dist/tools/decompose.js.map +1 -0
- package/dist/tools/git.d.ts +66 -0
- package/dist/tools/git.d.ts.map +1 -0
- package/dist/tools/git.js +333 -0
- package/dist/tools/git.js.map +1 -0
- package/dist/tools/intent.d.ts +24 -0
- package/dist/tools/intent.d.ts.map +1 -0
- package/dist/tools/intent.js +245 -0
- package/dist/tools/intent.js.map +1 -0
- package/dist/tools/ollama.d.ts +104 -0
- package/dist/tools/ollama.d.ts.map +1 -0
- package/dist/tools/ollama.js +299 -0
- package/dist/tools/ollama.js.map +1 -0
- package/dist/tools/optimize.d.ts +64 -0
- package/dist/tools/optimize.d.ts.map +1 -0
- package/dist/tools/optimize.js +302 -0
- package/dist/tools/optimize.js.map +1 -0
- package/dist/tools/variants.d.ts +49 -0
- package/dist/tools/variants.d.ts.map +1 -0
- package/dist/tools/variants.js +252 -0
- package/dist/tools/variants.js.map +1 -0
- package/dist/types.d.ts +447 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +25 -0
- package/dist/types.js.map +1 -0
- package/dist/utils.d.ts +117 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +279 -0
- package/dist/utils.js.map +1 -0
- package/package.json +77 -0
|
@@ -0,0 +1,363 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Atlas Server - Context Aggregation Tool
|
|
3
|
+
*
|
|
4
|
+
* Gathers and aggregates context from multiple sources:
|
|
5
|
+
* - Project structure analysis
|
|
6
|
+
* - Relevant code snippets
|
|
7
|
+
* - Configuration files
|
|
8
|
+
* - Dependencies information
|
|
9
|
+
*/
|
|
10
|
+
import { readFile, readdir, stat } from 'node:fs/promises';
|
|
11
|
+
import { join, extname, relative } from 'node:path';
|
|
12
|
+
import { logger } from '../utils.js';
|
|
13
|
+
// ============================================================================
|
|
14
|
+
// Configuration
|
|
15
|
+
// ============================================================================
|
|
16
|
+
const MAX_FILE_SIZE = 100 * 1024; // 100KB max file size to read
|
|
17
|
+
const MAX_SNIPPET_LENGTH = 2000; // Max characters per snippet
|
|
18
|
+
const MAX_SNIPPETS = 10; // Max number of snippets to return
|
|
19
|
+
const CODE_EXTENSIONS = new Set([
|
|
20
|
+
'.ts', '.tsx', '.js', '.jsx', '.mjs', '.cjs',
|
|
21
|
+
'.py', '.pyw',
|
|
22
|
+
'.rs',
|
|
23
|
+
'.go',
|
|
24
|
+
'.java',
|
|
25
|
+
'.rb',
|
|
26
|
+
'.php',
|
|
27
|
+
'.swift',
|
|
28
|
+
'.kt', '.kts',
|
|
29
|
+
'.c', '.h', '.cpp', '.hpp', '.cc',
|
|
30
|
+
'.cs',
|
|
31
|
+
'.vue', '.svelte',
|
|
32
|
+
]);
|
|
33
|
+
const CONFIG_FILES = [
|
|
34
|
+
'package.json',
|
|
35
|
+
'tsconfig.json',
|
|
36
|
+
'pyproject.toml',
|
|
37
|
+
'Cargo.toml',
|
|
38
|
+
'go.mod',
|
|
39
|
+
'pom.xml',
|
|
40
|
+
'build.gradle',
|
|
41
|
+
'requirements.txt',
|
|
42
|
+
'Gemfile',
|
|
43
|
+
'composer.json',
|
|
44
|
+
'.env',
|
|
45
|
+
'.env.example',
|
|
46
|
+
];
|
|
47
|
+
const IGNORE_DIRS = new Set([
|
|
48
|
+
'node_modules',
|
|
49
|
+
'.git',
|
|
50
|
+
'dist',
|
|
51
|
+
'build',
|
|
52
|
+
'out',
|
|
53
|
+
'.next',
|
|
54
|
+
'__pycache__',
|
|
55
|
+
'.pytest_cache',
|
|
56
|
+
'target',
|
|
57
|
+
'vendor',
|
|
58
|
+
'.venv',
|
|
59
|
+
'venv',
|
|
60
|
+
'env',
|
|
61
|
+
]);
|
|
62
|
+
// ============================================================================
|
|
63
|
+
// Context Building
|
|
64
|
+
// ============================================================================
|
|
65
|
+
/**
|
|
66
|
+
* Build comprehensive context for the pipeline
|
|
67
|
+
*/
|
|
68
|
+
export async function buildContext(intent, repoPath, gitContext) {
|
|
69
|
+
logger.debug({ repoPath, hasGitContext: !!gitContext }, 'Building context');
|
|
70
|
+
const context = {
|
|
71
|
+
intent,
|
|
72
|
+
codeSnippets: [],
|
|
73
|
+
gitContext,
|
|
74
|
+
};
|
|
75
|
+
if (!repoPath) {
|
|
76
|
+
return context;
|
|
77
|
+
}
|
|
78
|
+
try {
|
|
79
|
+
// Gather project info
|
|
80
|
+
context.projectInfo = await analyzeProject(repoPath);
|
|
81
|
+
// Find relevant code snippets based on intent
|
|
82
|
+
context.codeSnippets = await findRelevantSnippets(repoPath, intent, context.projectInfo);
|
|
83
|
+
logger.debug({
|
|
84
|
+
snippetCount: context.codeSnippets.length,
|
|
85
|
+
languages: context.projectInfo.languages,
|
|
86
|
+
}, 'Context built successfully');
|
|
87
|
+
}
|
|
88
|
+
catch (error) {
|
|
89
|
+
logger.warn({ error, repoPath }, 'Error building context');
|
|
90
|
+
}
|
|
91
|
+
return context;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Analyze project structure and configuration
|
|
95
|
+
*/
|
|
96
|
+
export async function analyzeProject(rootPath) {
|
|
97
|
+
const languages = new Set();
|
|
98
|
+
const frameworks = new Set();
|
|
99
|
+
const configFiles = [];
|
|
100
|
+
let packageManager;
|
|
101
|
+
// Check for config files
|
|
102
|
+
for (const configFile of CONFIG_FILES) {
|
|
103
|
+
try {
|
|
104
|
+
const filePath = join(rootPath, configFile);
|
|
105
|
+
await stat(filePath);
|
|
106
|
+
configFiles.push(configFile);
|
|
107
|
+
}
|
|
108
|
+
catch {
|
|
109
|
+
// File doesn't exist
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
// Detect package manager
|
|
113
|
+
if (configFiles.includes('package.json')) {
|
|
114
|
+
if (await fileExists(join(rootPath, 'bun.lockb'))) {
|
|
115
|
+
packageManager = 'bun';
|
|
116
|
+
}
|
|
117
|
+
else if (await fileExists(join(rootPath, 'pnpm-lock.yaml'))) {
|
|
118
|
+
packageManager = 'pnpm';
|
|
119
|
+
}
|
|
120
|
+
else if (await fileExists(join(rootPath, 'yarn.lock'))) {
|
|
121
|
+
packageManager = 'yarn';
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
packageManager = 'npm';
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
// Analyze package.json for frameworks
|
|
128
|
+
const packageJsonPath = join(rootPath, 'package.json');
|
|
129
|
+
if (await fileExists(packageJsonPath)) {
|
|
130
|
+
try {
|
|
131
|
+
const content = await readFile(packageJsonPath, 'utf-8');
|
|
132
|
+
const pkg = JSON.parse(content);
|
|
133
|
+
const allDeps = {
|
|
134
|
+
...pkg.dependencies,
|
|
135
|
+
...pkg.devDependencies,
|
|
136
|
+
};
|
|
137
|
+
// Detect frameworks
|
|
138
|
+
if (allDeps['next'])
|
|
139
|
+
frameworks.add('Next.js');
|
|
140
|
+
if (allDeps['react'])
|
|
141
|
+
frameworks.add('React');
|
|
142
|
+
if (allDeps['vue'])
|
|
143
|
+
frameworks.add('Vue');
|
|
144
|
+
if (allDeps['@angular/core'])
|
|
145
|
+
frameworks.add('Angular');
|
|
146
|
+
if (allDeps['svelte'])
|
|
147
|
+
frameworks.add('Svelte');
|
|
148
|
+
if (allDeps['express'])
|
|
149
|
+
frameworks.add('Express');
|
|
150
|
+
if (allDeps['fastify'])
|
|
151
|
+
frameworks.add('Fastify');
|
|
152
|
+
if (allDeps['koa'])
|
|
153
|
+
frameworks.add('Koa');
|
|
154
|
+
if (allDeps['nestjs'] || allDeps['@nestjs/core'])
|
|
155
|
+
frameworks.add('NestJS');
|
|
156
|
+
// Detect TypeScript
|
|
157
|
+
if (allDeps['typescript'])
|
|
158
|
+
languages.add('TypeScript');
|
|
159
|
+
}
|
|
160
|
+
catch {
|
|
161
|
+
// Ignore parse errors
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
// Scan for code files to detect languages
|
|
165
|
+
await scanForLanguages(rootPath, languages, 3);
|
|
166
|
+
return {
|
|
167
|
+
rootPath,
|
|
168
|
+
languages: Array.from(languages),
|
|
169
|
+
frameworks: Array.from(frameworks),
|
|
170
|
+
packageManager,
|
|
171
|
+
configFiles,
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Find code snippets relevant to the user's intent
|
|
176
|
+
*/
|
|
177
|
+
async function findRelevantSnippets(rootPath, intent, projectInfo) {
|
|
178
|
+
const snippets = [];
|
|
179
|
+
const targetFiles = [];
|
|
180
|
+
// Find files mentioned in entities
|
|
181
|
+
for (const entity of intent.entities) {
|
|
182
|
+
if (entity.type === 'file') {
|
|
183
|
+
const filePath = await findFile(rootPath, entity.value);
|
|
184
|
+
if (filePath) {
|
|
185
|
+
targetFiles.push(filePath);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
// If no specific files, scan for relevant files based on keywords
|
|
190
|
+
if (targetFiles.length === 0) {
|
|
191
|
+
const relevantFiles = await scanForRelevantFiles(rootPath, intent.keywords, 5);
|
|
192
|
+
targetFiles.push(...relevantFiles);
|
|
193
|
+
}
|
|
194
|
+
// Read and create snippets
|
|
195
|
+
for (const filePath of targetFiles.slice(0, MAX_SNIPPETS)) {
|
|
196
|
+
try {
|
|
197
|
+
const content = await readFile(filePath, 'utf-8');
|
|
198
|
+
const language = detectLanguage(filePath);
|
|
199
|
+
snippets.push({
|
|
200
|
+
filePath: relative(rootPath, filePath),
|
|
201
|
+
content: content.substring(0, MAX_SNIPPET_LENGTH),
|
|
202
|
+
language,
|
|
203
|
+
lineRange: { start: 1, end: content.split('\n').length },
|
|
204
|
+
relevance: calculateRelevance(content, intent.keywords),
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
catch {
|
|
208
|
+
// Skip unreadable files
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
// Sort by relevance
|
|
212
|
+
return snippets.sort((a, b) => b.relevance - a.relevance);
|
|
213
|
+
}
|
|
214
|
+
// ============================================================================
|
|
215
|
+
// Helper Functions
|
|
216
|
+
// ============================================================================
|
|
217
|
+
/**
|
|
218
|
+
* Check if a file exists
|
|
219
|
+
*/
|
|
220
|
+
async function fileExists(path) {
|
|
221
|
+
try {
|
|
222
|
+
await stat(path);
|
|
223
|
+
return true;
|
|
224
|
+
}
|
|
225
|
+
catch {
|
|
226
|
+
return false;
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Scan directory for languages used
|
|
231
|
+
*/
|
|
232
|
+
async function scanForLanguages(dir, languages, depth) {
|
|
233
|
+
if (depth <= 0)
|
|
234
|
+
return;
|
|
235
|
+
try {
|
|
236
|
+
const entries = await readdir(dir, { withFileTypes: true });
|
|
237
|
+
for (const entry of entries) {
|
|
238
|
+
if (entry.isDirectory()) {
|
|
239
|
+
if (!IGNORE_DIRS.has(entry.name)) {
|
|
240
|
+
await scanForLanguages(join(dir, entry.name), languages, depth - 1);
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
else if (entry.isFile()) {
|
|
244
|
+
const ext = extname(entry.name).toLowerCase();
|
|
245
|
+
const lang = EXTENSION_TO_LANGUAGE[ext];
|
|
246
|
+
if (lang) {
|
|
247
|
+
languages.add(lang);
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
catch {
|
|
253
|
+
// Ignore read errors
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* Find a file by name in the project
|
|
258
|
+
*/
|
|
259
|
+
async function findFile(rootPath, fileName) {
|
|
260
|
+
const queue = [rootPath];
|
|
261
|
+
while (queue.length > 0) {
|
|
262
|
+
const dir = queue.shift();
|
|
263
|
+
try {
|
|
264
|
+
const entries = await readdir(dir, { withFileTypes: true });
|
|
265
|
+
for (const entry of entries) {
|
|
266
|
+
const fullPath = join(dir, entry.name);
|
|
267
|
+
if (entry.isFile() && entry.name === fileName) {
|
|
268
|
+
return fullPath;
|
|
269
|
+
}
|
|
270
|
+
if (entry.isDirectory() && !IGNORE_DIRS.has(entry.name)) {
|
|
271
|
+
queue.push(fullPath);
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
catch {
|
|
276
|
+
// Ignore read errors
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
return null;
|
|
280
|
+
}
|
|
281
|
+
/**
|
|
282
|
+
* Scan for files relevant to keywords
|
|
283
|
+
*/
|
|
284
|
+
async function scanForRelevantFiles(rootPath, keywords, maxFiles) {
|
|
285
|
+
const files = [];
|
|
286
|
+
const queue = [rootPath];
|
|
287
|
+
while (queue.length > 0 && files.length < maxFiles * 2) {
|
|
288
|
+
const dir = queue.shift();
|
|
289
|
+
try {
|
|
290
|
+
const entries = await readdir(dir, { withFileTypes: true });
|
|
291
|
+
for (const entry of entries) {
|
|
292
|
+
const fullPath = join(dir, entry.name);
|
|
293
|
+
if (entry.isFile() && CODE_EXTENSIONS.has(extname(entry.name).toLowerCase())) {
|
|
294
|
+
const score = keywords.filter((kw) => entry.name.toLowerCase().includes(kw.toLowerCase())).length;
|
|
295
|
+
if (score > 0) {
|
|
296
|
+
files.push({ path: fullPath, score });
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
if (entry.isDirectory() && !IGNORE_DIRS.has(entry.name)) {
|
|
300
|
+
queue.push(fullPath);
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
catch {
|
|
305
|
+
// Ignore read errors
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
return files
|
|
309
|
+
.sort((a, b) => b.score - a.score)
|
|
310
|
+
.slice(0, maxFiles)
|
|
311
|
+
.map((f) => f.path);
|
|
312
|
+
}
|
|
313
|
+
/**
|
|
314
|
+
* Detect language from file extension
|
|
315
|
+
*/
|
|
316
|
+
function detectLanguage(filePath) {
|
|
317
|
+
const ext = extname(filePath).toLowerCase();
|
|
318
|
+
return EXTENSION_TO_LANGUAGE[ext] ?? 'text';
|
|
319
|
+
}
|
|
320
|
+
/**
|
|
321
|
+
* Calculate relevance score based on keyword matches
|
|
322
|
+
*/
|
|
323
|
+
function calculateRelevance(content, keywords) {
|
|
324
|
+
if (keywords.length === 0)
|
|
325
|
+
return 0.5;
|
|
326
|
+
const lowerContent = content.toLowerCase();
|
|
327
|
+
const matches = keywords.filter((kw) => lowerContent.includes(kw.toLowerCase())).length;
|
|
328
|
+
return Math.min(1, matches / keywords.length);
|
|
329
|
+
}
|
|
330
|
+
/**
|
|
331
|
+
* Extension to language mapping
|
|
332
|
+
*/
|
|
333
|
+
const EXTENSION_TO_LANGUAGE = {
|
|
334
|
+
'.ts': 'TypeScript',
|
|
335
|
+
'.tsx': 'TypeScript',
|
|
336
|
+
'.js': 'JavaScript',
|
|
337
|
+
'.jsx': 'JavaScript',
|
|
338
|
+
'.mjs': 'JavaScript',
|
|
339
|
+
'.cjs': 'JavaScript',
|
|
340
|
+
'.py': 'Python',
|
|
341
|
+
'.pyw': 'Python',
|
|
342
|
+
'.rs': 'Rust',
|
|
343
|
+
'.go': 'Go',
|
|
344
|
+
'.java': 'Java',
|
|
345
|
+
'.rb': 'Ruby',
|
|
346
|
+
'.php': 'PHP',
|
|
347
|
+
'.swift': 'Swift',
|
|
348
|
+
'.kt': 'Kotlin',
|
|
349
|
+
'.kts': 'Kotlin',
|
|
350
|
+
'.c': 'C',
|
|
351
|
+
'.h': 'C',
|
|
352
|
+
'.cpp': 'C++',
|
|
353
|
+
'.hpp': 'C++',
|
|
354
|
+
'.cc': 'C++',
|
|
355
|
+
'.cs': 'C#',
|
|
356
|
+
'.vue': 'Vue',
|
|
357
|
+
'.svelte': 'Svelte',
|
|
358
|
+
};
|
|
359
|
+
// ============================================================================
|
|
360
|
+
// Exports
|
|
361
|
+
// ============================================================================
|
|
362
|
+
export { CODE_EXTENSIONS, CONFIG_FILES, IGNORE_DIRS };
|
|
363
|
+
//# sourceMappingURL=context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/tools/context.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Atlas Server - Critique Tool
|
|
3
|
+
*
|
|
4
|
+
* Provides thorough code review and critique:
|
|
5
|
+
* - Correctness analysis
|
|
6
|
+
* - Performance evaluation
|
|
7
|
+
* - Maintainability assessment
|
|
8
|
+
* - Security review
|
|
9
|
+
* - Best practices check
|
|
10
|
+
*/
|
|
11
|
+
import type { SolutionVariant, Critique, CritiqueResult, CritiqueAssessment } from '../types.js';
|
|
12
|
+
/**
|
|
13
|
+
* Critique all solution variants
|
|
14
|
+
*/
|
|
15
|
+
export declare function critiqueVariants(variants: SolutionVariant[]): Promise<CritiqueResult>;
|
|
16
|
+
/**
|
|
17
|
+
* Get the most common issues across variants
|
|
18
|
+
*/
|
|
19
|
+
export declare function getCommonIssues(critiques: Critique[]): {
|
|
20
|
+
category: keyof CritiqueAssessment;
|
|
21
|
+
count: number;
|
|
22
|
+
examples: string[];
|
|
23
|
+
}[];
|
|
24
|
+
/**
|
|
25
|
+
* Get improvement priorities based on critiques
|
|
26
|
+
*/
|
|
27
|
+
export declare function getImprovementPriorities(critiques: Critique[]): {
|
|
28
|
+
area: keyof CritiqueAssessment;
|
|
29
|
+
averageScore: number;
|
|
30
|
+
priority: 'high' | 'medium' | 'low';
|
|
31
|
+
}[];
|
|
32
|
+
/**
|
|
33
|
+
* Compare two critiques
|
|
34
|
+
*/
|
|
35
|
+
export declare function compareCritiques(a: Critique, b: Critique): {
|
|
36
|
+
winner: string;
|
|
37
|
+
margin: number;
|
|
38
|
+
comparison: Record<keyof CritiqueAssessment, 'a' | 'b' | 'tie'>;
|
|
39
|
+
};
|
|
40
|
+
//# sourceMappingURL=critique.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"critique.d.ts","sourceRoot":"","sources":["../../src/tools/critique.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EACV,eAAe,EACf,QAAQ,EACR,cAAc,EACd,kBAAkB,EAEnB,MAAM,aAAa,CAAC;AAQrB;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,eAAe,EAAE,GAC1B,OAAO,CAAC,cAAc,CAAC,CAyBzB;AAsQD;;GAEG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,QAAQ,EAAE,GAAG;IACtD,QAAQ,EAAE,MAAM,kBAAkB,CAAC;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB,EAAE,CAkBF;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,QAAQ,EAAE,GAAG;IAC/D,IAAI,EAAE,MAAM,kBAAkB,CAAC;IAC/B,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;CACrC,EAAE,CAsBF;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,GAAG;IAC1D,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC,MAAM,kBAAkB,EAAE,GAAG,GAAG,GAAG,GAAG,KAAK,CAAC,CAAC;CACjE,CAcA"}
|