@su-record/vibe 3.2.28 → 3.2.29
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/.codex-plugin/plugin.json +1 -1
- package/dist/cli/commands/info.d.ts +8 -0
- package/dist/cli/commands/info.d.ts.map +1 -1
- package/dist/cli/commands/info.js +16 -1
- package/dist/cli/commands/info.js.map +1 -1
- package/dist/cli/commands/upgrade.d.ts.map +1 -1
- package/dist/cli/commands/upgrade.js +19 -1
- package/dist/cli/commands/upgrade.js.map +1 -1
- package/dist/cli/setup/NativeDeps.d.ts +20 -0
- package/dist/cli/setup/NativeDeps.d.ts.map +1 -0
- package/dist/cli/setup/NativeDeps.js +69 -0
- package/dist/cli/setup/NativeDeps.js.map +1 -0
- package/package.json +1 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vibe",
|
|
3
|
-
"version": "3.2.
|
|
3
|
+
"version": "3.2.29",
|
|
4
4
|
"description": "Verification harness for AI coding agents — \"done\" is decided by deterministic gates (test exit codes, run-ledger, regression memory), not the model self-report.",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "su-record",
|
|
@@ -16,6 +16,14 @@ export declare function showHelp(): void;
|
|
|
16
16
|
export declare function formatHookStatus(projectRoot: string,
|
|
17
17
|
/** Codex CLI 설치 여부 — 생략하면 감지한다. 테스트가 머신 상태에 좌우되지 않도록 주입 가능. */
|
|
18
18
|
codexInstalled?: boolean): string;
|
|
19
|
+
/**
|
|
20
|
+
* 네이티브 바인딩 상태 — 빠져 있으면 메모리·RAG 가 매 훅마다 조용히 죽는다.
|
|
21
|
+
*
|
|
22
|
+
* npm 12 의 `allowScripts` 가 install 스크립트를 차단하면 설치는 성공하는데
|
|
23
|
+
* 바인딩만 없는 상태가 된다. 상태 화면이 이걸 보여주지 않으면 사용자는
|
|
24
|
+
* "설치는 됐는데 메모리가 안 붙는다" 를 진단할 방법이 없다.
|
|
25
|
+
*/
|
|
26
|
+
export declare function formatNativeDepStatus(packageRoot: string): string;
|
|
19
27
|
/**
|
|
20
28
|
* 상태 표시 — 모든 시스템 상태를 한 곳에서 확인
|
|
21
29
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"info.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/info.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"info.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/info.ts"],"names":[],"mappings":"AAAA;;GAEG;AAUH;;GAEG;AACH,wBAAgB,QAAQ,IAAI,IAAI,CA+C/B;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAC9B,WAAW,EAAE,MAAM;AACnB,+DAA+D;AAC/D,cAAc,GAAE,OAAoC,GACnD,MAAM,CAmCR;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAKjE;AAED;;GAEG;AACH,wBAAgB,UAAU,IAAI,IAAI,CA6BjC;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,IAAI,CAGlC"}
|
|
@@ -6,6 +6,7 @@ import fs from 'fs';
|
|
|
6
6
|
import { getPackageJson } from '../utils.js';
|
|
7
7
|
import { formatLLMStatus } from '../auth.js';
|
|
8
8
|
import { detectCodexCli } from '../utils/cli-detector.js';
|
|
9
|
+
import { missingNativeDeps } from '../setup/NativeDeps.js';
|
|
9
10
|
/**
|
|
10
11
|
* 도움말 표시
|
|
11
12
|
*/
|
|
@@ -96,6 +97,19 @@ codexInstalled = detectCodexCli().installed) {
|
|
|
96
97
|
}
|
|
97
98
|
return lines.join('\n');
|
|
98
99
|
}
|
|
100
|
+
/**
|
|
101
|
+
* 네이티브 바인딩 상태 — 빠져 있으면 메모리·RAG 가 매 훅마다 조용히 죽는다.
|
|
102
|
+
*
|
|
103
|
+
* npm 12 의 `allowScripts` 가 install 스크립트를 차단하면 설치는 성공하는데
|
|
104
|
+
* 바인딩만 없는 상태가 된다. 상태 화면이 이걸 보여주지 않으면 사용자는
|
|
105
|
+
* "설치는 됐는데 메모리가 안 붙는다" 를 진단할 방법이 없다.
|
|
106
|
+
*/
|
|
107
|
+
export function formatNativeDepStatus(packageRoot) {
|
|
108
|
+
const missing = missingNativeDeps(packageRoot);
|
|
109
|
+
return missing.length === 0
|
|
110
|
+
? ' Native bindings ✓ ok'
|
|
111
|
+
: ` Native bindings ✗ ${missing.join(', ')} — memory/RAG disabled (run: vibe upgrade)`;
|
|
112
|
+
}
|
|
99
113
|
/**
|
|
100
114
|
* 상태 표시 — 모든 시스템 상태를 한 곳에서 확인
|
|
101
115
|
*/
|
|
@@ -120,7 +134,8 @@ VIBE Status (v${packageJson.version})
|
|
|
120
134
|
|
|
121
135
|
Project: ${projectStatus}
|
|
122
136
|
${isCoreProject ? `Language: ${config.language || 'ko'}\n` : ''}
|
|
123
|
-
${isCoreProject ? `Hooks (deterministic gates):\n${formatHookStatus(projectRoot)}\n` : ''}
|
|
137
|
+
${isCoreProject ? `Hooks (deterministic gates):\n${formatHookStatus(projectRoot)}\n` : ''}${formatNativeDepStatus(path.resolve(import.meta.dirname, '..', '..', '..'))}
|
|
138
|
+
|
|
124
139
|
${formatLLMStatus()}
|
|
125
140
|
`);
|
|
126
141
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"info.js","sourceRoot":"","sources":["../../../src/cli/commands/info.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"info.js","sourceRoot":"","sources":["../../../src/cli/commands/info.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upgrade.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/upgrade.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"upgrade.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/upgrade.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AA0BzC;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAYjE;AAQD;;;;;;;;;;GAUG;AACH,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,CAMpE;AAcD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,CA+BhE;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,gBAAgB,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAUzE;AA0BD;;;GAGG;AACH,wBAAgB,OAAO,CAAC,QAAQ,GAAE,UAA8B,GAAG,IAAI,CAiFtE"}
|
|
@@ -10,6 +10,7 @@ import { formatLLMStatus } from '../auth.js';
|
|
|
10
10
|
import { installProjectHooks, installProjectCodexHooks } from '../setup.js';
|
|
11
11
|
import { detectCodexCli } from '../utils/cli-detector.js';
|
|
12
12
|
import { getCoreConfigDir } from '../setup/GlobalInstaller.js';
|
|
13
|
+
import { missingNativeDeps, repairNativeDeps, nativeDepHint } from '../setup/NativeDeps.js';
|
|
13
14
|
/**
|
|
14
15
|
* Remove stale npm temp directories that cause ENOTEMPTY errors
|
|
15
16
|
*/
|
|
@@ -147,6 +148,8 @@ export function staleGlobalAssets(installedVersion) {
|
|
|
147
148
|
* postinstall 을 직접 실행해 전역 자산을 복구한다.
|
|
148
149
|
*
|
|
149
150
|
* WHY: npm 이 lifecycle script 를 건너뛰는 환경이 있다 (`npm warn install-scripts`).
|
|
151
|
+
* npm 12 의 `allowScripts` 는 아예 **기본 차단**이다 — 승인 목록에 없는 패키지의
|
|
152
|
+
* install/postinstall 은 실행되지 않고 경고 한 줄만 남는다.
|
|
150
153
|
* 그러면 전역 **패키지**는 새 버전인데 `~/.vibe/hooks/scripts/` 는 옛날 그대로다 —
|
|
151
154
|
* sentinel·scope·run-ledger·verify 가 전부 구버전 코드로 돌면서 upgrade 는
|
|
152
155
|
* "✅ 성공" 을 출력한다. 실측: 두 번의 릴리즈 동안 훅이 5일 전 상태로 멈춰 있었다.
|
|
@@ -211,6 +214,21 @@ export function upgrade(_options = { silent: false }) {
|
|
|
211
214
|
? `\n🔧 Global assets restored (postinstall did not run — was v${stale})\n`
|
|
212
215
|
: `\n⚠️ Global assets stale (v${after}) — hooks may run old code. Try: npm install -g @su-record/vibe@latest --force --foreground-scripts\n`;
|
|
213
216
|
}
|
|
217
|
+
// 네이티브 바인딩도 같은 이유(allowScripts 차단)로 빠진다 — 여기서도 복구한다.
|
|
218
|
+
// 빠지면 메모리·RAG·sentinel 이 매 훅마다 bindings 에러로 죽는데, 설치는 ✅ 로 보인다.
|
|
219
|
+
let nativeNote = '';
|
|
220
|
+
if (globalRoot) {
|
|
221
|
+
const pkgRoot = join(globalRoot, '@su-record', 'vibe');
|
|
222
|
+
if (missingNativeDeps(pkgRoot).length > 0) {
|
|
223
|
+
const { repaired: fixed, failed } = repairNativeDeps(pkgRoot);
|
|
224
|
+
if (fixed.length > 0)
|
|
225
|
+
nativeNote += `\n🔧 Native bindings rebuilt: ${fixed.join(', ')}\n`;
|
|
226
|
+
if (failed.length > 0) {
|
|
227
|
+
nativeNote += `\n⚠️ Native bindings missing (${failed.join(', ')}) — memory/RAG disabled.`
|
|
228
|
+
+ ` Try: ${nativeDepHint(failed)}\n`;
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
}
|
|
214
232
|
const repaired = repairProjectHooks(process.cwd());
|
|
215
233
|
const hookNote = repaired.length > 0
|
|
216
234
|
? `\n🔧 Project hooks restored: ${repaired.join(', ')}\n`
|
|
@@ -218,7 +236,7 @@ export function upgrade(_options = { silent: false }) {
|
|
|
218
236
|
const pruneNote = postinstallReport.length > 0
|
|
219
237
|
? `\n🧹 ${postinstallReport.join('\n🧹 ')}\n`
|
|
220
238
|
: '';
|
|
221
|
-
log(`\n✅ vibe upgraded (v${newVersion})\n${globalNote}${hookNote}${pruneNote}\n${llmStatus}\n`);
|
|
239
|
+
log(`\n✅ vibe upgraded (v${newVersion})\n${globalNote}${nativeNote}${hookNote}${pruneNote}\n${llmStatus}\n`);
|
|
222
240
|
}
|
|
223
241
|
catch (error) {
|
|
224
242
|
const message = error instanceof Error ? error.message : String(error);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upgrade.js","sourceRoot":"","sources":["../../../src/cli/commands/upgrade.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC;AACnE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,OAAO,EAAE,GAAG,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,mBAAmB,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAC5E,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"upgrade.js","sourceRoot":"","sources":["../../../src/cli/commands/upgrade.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 바인딩이 빠진 네이티브 의존성 목록.
|
|
3
|
+
*
|
|
4
|
+
* 패키지 자체가 없으면 **누락이 아니다** — 설치되지 않은 선택 의존성과
|
|
5
|
+
* 설치됐는데 빌드가 안 된 상태는 다른 사건이다. 후자만 복구 대상이다.
|
|
6
|
+
*/
|
|
7
|
+
export declare function missingNativeDeps(packageRoot: string): string[];
|
|
8
|
+
/**
|
|
9
|
+
* 빠진 바인딩을 내려받아 복구한다.
|
|
10
|
+
*
|
|
11
|
+
* @returns 복구된 것과 실패한 것 — 실패는 숨기지 않는다. 조용히 실패하면
|
|
12
|
+
* "설치 성공" 이 또 거짓말이 된다.
|
|
13
|
+
*/
|
|
14
|
+
export declare function repairNativeDeps(packageRoot: string): {
|
|
15
|
+
repaired: string[];
|
|
16
|
+
failed: string[];
|
|
17
|
+
};
|
|
18
|
+
/** 복구 실패 시 사용자가 직접 쓸 명령 — npm 정책을 푸는 쪽이 근본 처방이다 */
|
|
19
|
+
export declare function nativeDepHint(names: string[]): string;
|
|
20
|
+
//# sourceMappingURL=NativeDeps.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NativeDeps.d.ts","sourceRoot":"","sources":["../../../src/cli/setup/NativeDeps.ts"],"names":[],"mappings":"AA8BA;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,CAM/D;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG;IAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAkB9F;AAED,mDAAmD;AACnD,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CAErD"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 네이티브 의존성 자기복구.
|
|
3
|
+
*
|
|
4
|
+
* WHY: npm 12 는 `allowScripts` 정책으로 **install 스크립트를 기본 차단**한다.
|
|
5
|
+
*
|
|
6
|
+
* npm warn rebuild 1 package had install scripts blocked
|
|
7
|
+
* better-sqlite3@12.11.1 (install: prebuild-install || node-gyp rebuild --release)
|
|
8
|
+
*
|
|
9
|
+
* 그래서 `npm i -g @su-record/vibe` 는 성공하는데 `better-sqlite3` 의 네이티브
|
|
10
|
+
* 바인딩(`build/Release/better_sqlite3.node`)은 끝내 생기지 않는다. 설치는 ✅ 인데
|
|
11
|
+
* 메모리·RAG·sentinel 이 매 훅마다 "Could not locate the bindings file" 로 죽는다 —
|
|
12
|
+
* postinstall 이 통째로 건너뛰어졌던 것과 **같은 뿌리**이고, 그때와 같은 결론을 쓴다:
|
|
13
|
+
* npm 이 실행해주길 기다리지 말고 우리가 직접 실행한다.
|
|
14
|
+
*
|
|
15
|
+
* 복구는 `prebuild-install` 을 npm 라이프사이클 밖에서 직접 돌린다. `.bin/` 심링크가
|
|
16
|
+
* 아니라 JS 엔트리를 `process.execPath` 로 실행하는 이유는 셸·확장자(.cmd) 차이를
|
|
17
|
+
* 타지 않기 위해서다 — `runInstalledPostinstall` 과 같은 방식.
|
|
18
|
+
*/
|
|
19
|
+
import { execFileSync } from 'child_process';
|
|
20
|
+
import { existsSync } from 'fs';
|
|
21
|
+
import { join } from 'path';
|
|
22
|
+
/** 네이티브 바인딩이 필요한 런타임 의존성 — 이름 → 있어야 하는 산출물 */
|
|
23
|
+
const NATIVE_DEPS = [
|
|
24
|
+
{ name: 'better-sqlite3', artifact: join('build', 'Release', 'better_sqlite3.node') },
|
|
25
|
+
];
|
|
26
|
+
/** prebuild-install 의 JS 엔트리 (bin 심링크 대신 직접 실행한다) */
|
|
27
|
+
const PREBUILD_ENTRY = join('prebuild-install', 'bin.js');
|
|
28
|
+
/**
|
|
29
|
+
* 바인딩이 빠진 네이티브 의존성 목록.
|
|
30
|
+
*
|
|
31
|
+
* 패키지 자체가 없으면 **누락이 아니다** — 설치되지 않은 선택 의존성과
|
|
32
|
+
* 설치됐는데 빌드가 안 된 상태는 다른 사건이다. 후자만 복구 대상이다.
|
|
33
|
+
*/
|
|
34
|
+
export function missingNativeDeps(packageRoot) {
|
|
35
|
+
const modules = join(packageRoot, 'node_modules');
|
|
36
|
+
return NATIVE_DEPS
|
|
37
|
+
.filter(({ name, artifact }) => existsSync(join(modules, name)) && !existsSync(join(modules, name, artifact)))
|
|
38
|
+
.map(({ name }) => name);
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* 빠진 바인딩을 내려받아 복구한다.
|
|
42
|
+
*
|
|
43
|
+
* @returns 복구된 것과 실패한 것 — 실패는 숨기지 않는다. 조용히 실패하면
|
|
44
|
+
* "설치 성공" 이 또 거짓말이 된다.
|
|
45
|
+
*/
|
|
46
|
+
export function repairNativeDeps(packageRoot) {
|
|
47
|
+
const modules = join(packageRoot, 'node_modules');
|
|
48
|
+
const prebuild = join(modules, PREBUILD_ENTRY);
|
|
49
|
+
const repaired = [];
|
|
50
|
+
const failed = [];
|
|
51
|
+
for (const name of missingNativeDeps(packageRoot)) {
|
|
52
|
+
const dir = join(modules, name);
|
|
53
|
+
try {
|
|
54
|
+
if (!existsSync(prebuild))
|
|
55
|
+
throw new Error(`prebuild-install not found: ${prebuild}`);
|
|
56
|
+
execFileSync(process.execPath, [prebuild], { cwd: dir, stdio: 'ignore', timeout: 180_000 });
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
/* 아래 재확인이 결과를 판정한다 — 종료 코드가 아니라 산출물이 기준이다 */
|
|
60
|
+
}
|
|
61
|
+
(missingNativeDeps(packageRoot).includes(name) ? failed : repaired).push(name);
|
|
62
|
+
}
|
|
63
|
+
return { repaired, failed };
|
|
64
|
+
}
|
|
65
|
+
/** 복구 실패 시 사용자가 직접 쓸 명령 — npm 정책을 푸는 쪽이 근본 처방이다 */
|
|
66
|
+
export function nativeDepHint(names) {
|
|
67
|
+
return `npm install-scripts approve ${names.join(' ')} && npm install -g @su-record/vibe@latest --force`;
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=NativeDeps.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NativeDeps.js","sourceRoot":"","sources":["../../../src/cli/setup/NativeDeps.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,8CAA8C;AAC9C,MAAM,WAAW,GAAG;IAClB,EAAE,IAAI,EAAE,gBAAgB,EAAE,QAAQ,EAAE,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,qBAAqB,CAAC,EAAE;CAC7E,CAAC;AAEX,qDAAqD;AACrD,MAAM,cAAc,GAAG,IAAI,CAAC,kBAAkB,EAAE,QAAQ,CAAC,CAAC;AAE1D;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,WAAmB;IACnD,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;IAClD,OAAO,WAAW;SACf,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,CAC7B,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;SAC/E,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;AAC7B,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAAC,WAAmB;IAClD,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;IAClD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;IAC/C,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,KAAK,MAAM,IAAI,IAAI,iBAAiB,CAAC,WAAW,CAAC,EAAE,CAAC;QAClD,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAChC,IAAI,CAAC;YACH,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,+BAA+B,QAAQ,EAAE,CAAC,CAAC;YACtF,YAAY,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;QAC9F,CAAC;QAAC,MAAM,CAAC;YACP,6CAA6C;QAC/C,CAAC;QACD,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjF,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;AAC9B,CAAC;AAED,mDAAmD;AACnD,MAAM,UAAU,aAAa,CAAC,KAAe;IAC3C,OAAO,+BAA+B,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,mDAAmD,CAAC;AAC3G,CAAC"}
|