@su-record/vibe 3.2.54 → 3.2.56
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.
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vibe",
|
|
3
3
|
"displayName": "Vibe",
|
|
4
|
-
"version": "3.2.
|
|
4
|
+
"version": "3.2.56",
|
|
5
5
|
"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.",
|
|
6
6
|
"author": {
|
|
7
7
|
"name": "su-record",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vibe",
|
|
3
|
-
"version": "3.2.
|
|
3
|
+
"version": "3.2.56",
|
|
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",
|
|
@@ -37,6 +37,30 @@ export declare function formatNativeDepStatus(packageRoot: string): string;
|
|
|
37
37
|
* 훨씬 나쁘다. 무엇이 있는지 보여주면 판단은 사람이 한다.
|
|
38
38
|
*/
|
|
39
39
|
export declare function formatSkillStatus(globalSkillsDir: string, shippedSkillsDir: string): string;
|
|
40
|
+
/**
|
|
41
|
+
* 설치된 스킬이 배송본과 같은가.
|
|
42
|
+
*
|
|
43
|
+
* WHY: `vibe status` 는 스킬 **개수**만 셌다. 개수가 같아도 내용은 다를 수 있다 —
|
|
44
|
+
* 중단된 postinstall, 부분 복사, 사용자가 고친 파일. 이 저장소가 반복해서 겪은
|
|
45
|
+
* 실패가 전부 "설치본이 조용히 어긋났고 확인할 기준값이 없었다" 였다.
|
|
46
|
+
*
|
|
47
|
+
* ## 왜 해시 잠금 파일이 아니라 배송본 직접 대조인가
|
|
48
|
+
*
|
|
49
|
+
* 설치 시 postinstall 이 `{{VIBE_PATH_URL}}`·`{{VIBE_PATH}}` 를 실제 경로로 치환한다
|
|
50
|
+
* (`fs-utils.ts` replaceTemplatesInDir). 그래서 날것 비교는 치환된 스킬을 전부
|
|
51
|
+
* 드리프트로 잡는다(실측 29개 중 11개 오탐).
|
|
52
|
+
*
|
|
53
|
+
* 그렇다고 **역치환은 불가능하다** — 소스의 `file://{{VIBE_PATH}}` 와
|
|
54
|
+
* `{{VIBE_PATH_URL}}` 이 **같은 문자열**(`file:///…`)로 치환되므로 되돌릴 때
|
|
55
|
+
* 어느 쪽이었는지 알 수 없다(실측으로 `process-steps.md` 가 여기 걸렸다).
|
|
56
|
+
*
|
|
57
|
+
* 방향을 뒤집으면 모호함이 사라진다: 배송본에 **같은 치환을 적용해** 기대값을 만들고
|
|
58
|
+
* 설치본과 비교한다. 그리고 배송본은 항상 곁에 있다 — CLI 가 그 안에서 돈다.
|
|
59
|
+
* 별도 잠금 파일이 필요 없는 이유다.
|
|
60
|
+
*
|
|
61
|
+
* @returns 어긋난 스킬 이름들 (배송본을 못 읽으면 null — 판정하지 않는다)
|
|
62
|
+
*/
|
|
63
|
+
export declare function driftedSkills(installedDir: string, shippedSkillsDir: string, corePath?: string): string[] | null;
|
|
40
64
|
/**
|
|
41
65
|
* 상태 표시 — 모든 시스템 상태를 한 곳에서 확인
|
|
42
66
|
*/
|
|
@@ -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;AAaH;;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;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAAC,eAAe,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,GAAG,MAAM,CA4C3F;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,aAAa,CAC3B,YAAY,EAAE,MAAM,EACpB,gBAAgB,EAAE,MAAM,EACxB,QAAQ,GAAE,MAA2B,GACpC,MAAM,EAAE,GAAG,IAAI,CAoCjB;AAED;;GAEG;AACH,wBAAgB,UAAU,IAAI,IAAI,CA6BjC;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,IAAI,CAGlC"}
|
|
@@ -8,6 +8,8 @@ import { formatLLMStatus } from '../auth.js';
|
|
|
8
8
|
import { detectCodexCli } from '../utils/cli-detector.js';
|
|
9
9
|
import { missingNativeDeps } from '../setup/NativeDeps.js';
|
|
10
10
|
import { RETIRED_SKILL_NAMES } from '../postinstall/constants.js';
|
|
11
|
+
import { createHash } from 'crypto';
|
|
12
|
+
import { getCoreConfigDir } from '../setup/GlobalInstaller.js';
|
|
11
13
|
/**
|
|
12
14
|
* 도움말 표시
|
|
13
15
|
*/
|
|
@@ -145,6 +147,12 @@ export function formatSkillStatus(globalSkillsDir, shippedSkillsDir) {
|
|
|
145
147
|
const retired = others.filter((n) => RETIRED_SKILL_NAMES.has(n));
|
|
146
148
|
const external = others.filter((n) => !RETIRED_SKILL_NAMES.has(n));
|
|
147
149
|
const lines = [` Skills ${entries.length} always-on (vibe ${vibe.length})`];
|
|
150
|
+
// 개수가 같아도 내용은 다를 수 있다 — 지문으로 확인한다
|
|
151
|
+
const drifted = driftedSkills(globalSkillsDir, shippedSkillsDir);
|
|
152
|
+
if (drifted !== null && drifted.length > 0) {
|
|
153
|
+
lines.push(` drifted ${drifted.length} — ${drifted.slice(0, 5).join(', ')}`
|
|
154
|
+
+ (drifted.length > 5 ? ` 외 ${drifted.length - 5}` : ''), ' ↳ 배송본과 내용이 다르다 (run: vibe update)');
|
|
155
|
+
}
|
|
148
156
|
if (external.length > 0) {
|
|
149
157
|
lines.push(` external ${external.length} — ${external.join(', ')}`);
|
|
150
158
|
}
|
|
@@ -153,6 +161,69 @@ export function formatSkillStatus(globalSkillsDir, shippedSkillsDir) {
|
|
|
153
161
|
}
|
|
154
162
|
return lines.join('\n');
|
|
155
163
|
}
|
|
164
|
+
/**
|
|
165
|
+
* 설치된 스킬이 배송본과 같은가.
|
|
166
|
+
*
|
|
167
|
+
* WHY: `vibe status` 는 스킬 **개수**만 셌다. 개수가 같아도 내용은 다를 수 있다 —
|
|
168
|
+
* 중단된 postinstall, 부분 복사, 사용자가 고친 파일. 이 저장소가 반복해서 겪은
|
|
169
|
+
* 실패가 전부 "설치본이 조용히 어긋났고 확인할 기준값이 없었다" 였다.
|
|
170
|
+
*
|
|
171
|
+
* ## 왜 해시 잠금 파일이 아니라 배송본 직접 대조인가
|
|
172
|
+
*
|
|
173
|
+
* 설치 시 postinstall 이 `{{VIBE_PATH_URL}}`·`{{VIBE_PATH}}` 를 실제 경로로 치환한다
|
|
174
|
+
* (`fs-utils.ts` replaceTemplatesInDir). 그래서 날것 비교는 치환된 스킬을 전부
|
|
175
|
+
* 드리프트로 잡는다(실측 29개 중 11개 오탐).
|
|
176
|
+
*
|
|
177
|
+
* 그렇다고 **역치환은 불가능하다** — 소스의 `file://{{VIBE_PATH}}` 와
|
|
178
|
+
* `{{VIBE_PATH_URL}}` 이 **같은 문자열**(`file:///…`)로 치환되므로 되돌릴 때
|
|
179
|
+
* 어느 쪽이었는지 알 수 없다(실측으로 `process-steps.md` 가 여기 걸렸다).
|
|
180
|
+
*
|
|
181
|
+
* 방향을 뒤집으면 모호함이 사라진다: 배송본에 **같은 치환을 적용해** 기대값을 만들고
|
|
182
|
+
* 설치본과 비교한다. 그리고 배송본은 항상 곁에 있다 — CLI 가 그 안에서 돈다.
|
|
183
|
+
* 별도 잠금 파일이 필요 없는 이유다.
|
|
184
|
+
*
|
|
185
|
+
* @returns 어긋난 스킬 이름들 (배송본을 못 읽으면 null — 판정하지 않는다)
|
|
186
|
+
*/
|
|
187
|
+
export function driftedSkills(installedDir, shippedSkillsDir, corePath = getCoreConfigDir()) {
|
|
188
|
+
if (!fs.existsSync(shippedSkillsDir))
|
|
189
|
+
return null;
|
|
190
|
+
// 설치가 하는 것과 **같은** 치환 — SSOT 는 fs-utils.ts replaceTemplatesInDir
|
|
191
|
+
const corePathUrl = 'file:///' + corePath.replace(/^\//, '');
|
|
192
|
+
const asInstalled = (content) => content.split('{{VIBE_PATH_URL}}').join(corePathUrl).split('{{VIBE_PATH}}').join(corePath);
|
|
193
|
+
const hash = (text) => createHash('sha256').update(text).digest('hex');
|
|
194
|
+
const drifted = [];
|
|
195
|
+
const walk = (shipped, installed) => {
|
|
196
|
+
for (const entry of fs.readdirSync(shipped, { withFileTypes: true })) {
|
|
197
|
+
const a = path.join(shipped, entry.name);
|
|
198
|
+
const b = path.join(installed, entry.name);
|
|
199
|
+
if (entry.isDirectory()) {
|
|
200
|
+
if (walk(a, b))
|
|
201
|
+
return true;
|
|
202
|
+
continue;
|
|
203
|
+
}
|
|
204
|
+
try {
|
|
205
|
+
if (hash(asInstalled(fs.readFileSync(a, 'utf-8'))) !== hash(fs.readFileSync(b, 'utf-8'))) {
|
|
206
|
+
return true;
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
catch {
|
|
210
|
+
return true; // 설치본에 없는 파일 = 드리프트
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
return false;
|
|
214
|
+
};
|
|
215
|
+
for (const name of fs.readdirSync(shippedSkillsDir)) {
|
|
216
|
+
const shipped = path.join(shippedSkillsDir, name);
|
|
217
|
+
const installed = path.join(installedDir, name);
|
|
218
|
+
if (!fs.statSync(shipped).isDirectory())
|
|
219
|
+
continue;
|
|
220
|
+
if (!fs.existsSync(installed))
|
|
221
|
+
continue; // 미설치는 드리프트가 아니다 (조건부 스킬)
|
|
222
|
+
if (walk(shipped, installed))
|
|
223
|
+
drifted.push(name);
|
|
224
|
+
}
|
|
225
|
+
return drifted;
|
|
226
|
+
}
|
|
156
227
|
/**
|
|
157
228
|
* 상태 표시 — 모든 시스템 상태를 한 곳에서 확인
|
|
158
229
|
*/
|
|
@@ -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;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;
|
|
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;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAE/D;;GAEG;AACH,MAAM,UAAU,QAAQ;IACtB,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CX,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,gBAAgB,CAC9B,WAAmB;AACnB,+DAA+D;AAC/D,iBAA0B,cAAc,EAAE,CAAC,SAAS;IAEpD,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,qBAAqB,CAAC,CAAC;IAChF,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,cAAc,EAAE,OAAO,CAAC,CAAwB,CAAC;QAC3F,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC;IAAC,MAAM,CAAC,CAAC,qBAAqB,CAAC,CAAC;IACjC,KAAK,CAAC,IAAI,CACR,QAAQ;QACN,CAAC,CAAC,qDAAqD;QACvD,CAAC,CAAC,0DAA0D,CAC/D,CAAC;IAEF,+CAA+C;IAC/C,EAAE;IACF,uDAAuD;IACvD,uDAAuD;IACvD,gDAAgD;IAChD,yDAAyD;IACzD,MAAM,cAAc,GAClB,cAAc;QACd,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;QAC/C,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC;IACrD,IAAI,cAAc,EAAE,CAAC;QACnB,MAAM,OAAO,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC;QAC9E,KAAK,CAAC,IAAI,CACR,OAAO;YACL,CAAC,CAAC,2CAA2C;YAC7C,CAAC,CAAC,0DAA0D,CAC/D,CAAC;IACJ,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,qBAAqB,CAAC,WAAmB;IACvD,MAAM,OAAO,GAAG,iBAAiB,CAAC,WAAW,CAAC,CAAC;IAC/C,OAAO,OAAO,CAAC,MAAM,KAAK,CAAC;QACzB,CAAC,CAAC,4BAA4B;QAC9B,CAAC,CAAC,2BAA2B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,4CAA4C,CAAC;AAChG,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,iBAAiB,CAAC,eAAuB,EAAE,gBAAwB;IACjF,MAAM,IAAI,GAAG,CAAC,EAAU,EAAY,EAAE;QACpC,IAAI,CAAC;YACH,OAAO,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;iBAC/C,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACvD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC;IACtC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,0DAA0D,CAAC;IACpE,CAAC;IAED,6CAA6C;IAC7C,+CAA+C;IAC/C,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAChD,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACnD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACtD,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACjE,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAEnE,MAAM,KAAK,GAAG,CAAC,yBAAyB,OAAO,CAAC,MAAM,oBAAoB,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;IAE1F,kCAAkC;IAClC,MAAM,OAAO,GAAG,aAAa,CAAC,eAAe,EAAE,gBAAgB,CAAC,CAAC;IACjE,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3C,KAAK,CAAC,IAAI,CACR,yBAAyB,OAAO,CAAC,MAAM,MAAM,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;cACzE,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAC1D,yDAAyD,CAC1D,CAAC;IACJ,CAAC;IACD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,KAAK,CAAC,IAAI,CAAC,yBAAyB,QAAQ,CAAC,MAAM,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAClF,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,KAAK,CAAC,IAAI,CACR,wBAAwB,OAAO,CAAC,MAAM,MAAM,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAChE,uDAAuD,CACxD,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,UAAU,aAAa,CAC3B,YAAoB,EACpB,gBAAwB,EACxB,WAAmB,gBAAgB,EAAE;IAErC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,gBAAgB,CAAC;QAAE,OAAO,IAAI,CAAC;IAElD,iEAAiE;IACjE,MAAM,WAAW,GAAG,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAC7D,MAAM,WAAW,GAAG,CAAC,OAAe,EAAU,EAAE,CAC9C,OAAO,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAE7F,MAAM,IAAI,GAAG,CAAC,IAAY,EAAU,EAAE,CACpC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAElD,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,IAAI,GAAG,CAAC,OAAe,EAAE,SAAiB,EAAW,EAAE;QAC3D,KAAK,MAAM,KAAK,IAAI,EAAE,CAAC,WAAW,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;YACrE,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YACzC,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YAC3C,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;gBAAC,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;oBAAE,OAAO,IAAI,CAAC;gBAAC,SAAS;YAAC,CAAC;YACnE,IAAI,CAAC;gBACH,IAAI,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC;oBACzF,OAAO,IAAI,CAAC;gBACd,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,IAAI,CAAC,CAAG,oBAAoB;YACrC,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;IAEF,KAAK,MAAM,IAAI,IAAI,EAAE,CAAC,WAAW,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACpD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC;QAClD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;QAChD,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE;YAAE,SAAS;QAClD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC;YAAE,SAAS,CAAG,0BAA0B;QACrE,IAAI,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC;YAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnD,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU;IACxB,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAClC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAChD,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;IAChE,MAAM,aAAa,GAAG,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC;IACvE,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;IAE3D,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;IACrC,MAAM,aAAa,GAAG,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;IAEnD,IAAI,MAAM,GAAyC,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IAClF,IAAI,aAAa,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/C,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;IAC5D,CAAC;IAED,UAAU;IACV,MAAM,aAAa,GAAG,aAAa;QACjC,CAAC,CAAC,KAAK,WAAW,EAAE;QACpB,CAAC,CAAC,uCAAuC,CAAC;IAE5C,OAAO,CAAC,GAAG,CAAC;gBACE,WAAW,CAAC,OAAO;;WAExB,aAAa;EACtB,aAAa,CAAC,CAAC,CAAC,aAAa,MAAM,CAAC,QAAQ,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE;EAC7D,aAAa,CAAC,CAAC,CAAC,iCAAiC,gBAAgB,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,qBAAqB,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,KAAK,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;;EAEjT,eAAe,EAAE;GAChB,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW;IACzB,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;IACrC,OAAO,CAAC,GAAG,CAAC,SAAS,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC;AAC9C,CAAC"}
|