@blxzer/cursor-trellis-core 0.4.2 → 0.4.3
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/index.d.ts +0 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -3
- package/dist/index.js.map +1 -1
- package/dist/task/adapter-middleware.d.ts +91 -0
- package/dist/task/adapter-middleware.d.ts.map +1 -0
- package/dist/task/adapter-middleware.js +384 -0
- package/dist/task/adapter-middleware.js.map +1 -0
- package/dist/task/contract-migrate.d.ts +29 -0
- package/dist/task/contract-migrate.d.ts.map +1 -0
- package/dist/task/contract-migrate.js +207 -0
- package/dist/task/contract-migrate.js.map +1 -0
- package/dist/task/full-quality.d.ts +89 -0
- package/dist/task/full-quality.d.ts.map +1 -0
- package/dist/task/full-quality.js +379 -0
- package/dist/task/full-quality.js.map +1 -0
- package/dist/task/index.d.ts +20 -0
- package/dist/task/index.d.ts.map +1 -1
- package/dist/task/index.js +10 -0
- package/dist/task/index.js.map +1 -1
- package/dist/task/kernel-cli.d.ts +44 -0
- package/dist/task/kernel-cli.d.ts.map +1 -0
- package/dist/task/kernel-cli.js +287 -0
- package/dist/task/kernel-cli.js.map +1 -0
- package/dist/task/kernel-contract.d.ts +113 -0
- package/dist/task/kernel-contract.d.ts.map +1 -0
- package/dist/task/kernel-contract.js +332 -0
- package/dist/task/kernel-contract.js.map +1 -0
- package/dist/task/kernel-store.d.ts +99 -0
- package/dist/task/kernel-store.d.ts.map +1 -0
- package/dist/task/kernel-store.js +735 -0
- package/dist/task/kernel-store.js.map +1 -0
- package/dist/task/lite-context-pack.d.ts +71 -0
- package/dist/task/lite-context-pack.d.ts.map +1 -0
- package/dist/task/lite-context-pack.js +175 -0
- package/dist/task/lite-context-pack.js.map +1 -0
- package/dist/task/ondemand-topology.d.ts +100 -0
- package/dist/task/ondemand-topology.d.ts.map +1 -0
- package/dist/task/ondemand-topology.js +418 -0
- package/dist/task/ondemand-topology.js.map +1 -0
- package/dist/task/p36-artifact-migrate.d.ts +61 -0
- package/dist/task/p36-artifact-migrate.d.ts.map +1 -0
- package/dist/task/p36-artifact-migrate.js +336 -0
- package/dist/task/p36-artifact-migrate.js.map +1 -0
- package/dist/task/p36-wave-c.d.ts +39 -0
- package/dist/task/p36-wave-c.d.ts.map +1 -0
- package/dist/task/p36-wave-c.js +100 -0
- package/dist/task/p36-wave-c.js.map +1 -0
- package/dist/task/records.d.ts +9 -0
- package/dist/task/records.d.ts.map +1 -1
- package/dist/task/records.js +11 -0
- package/dist/task/records.js.map +1 -1
- package/package.json +1 -6
- package/dist/rpc/broker/audit.d.ts +0 -16
- package/dist/rpc/broker/audit.d.ts.map +0 -1
- package/dist/rpc/broker/audit.js +0 -33
- package/dist/rpc/broker/audit.js.map +0 -1
- package/dist/rpc/broker/in-process.d.ts +0 -62
- package/dist/rpc/broker/in-process.d.ts.map +0 -1
- package/dist/rpc/broker/in-process.js +0 -490
- package/dist/rpc/broker/in-process.js.map +0 -1
- package/dist/rpc/broker/journal.d.ts +0 -11
- package/dist/rpc/broker/journal.d.ts.map +0 -1
- package/dist/rpc/broker/journal.js +0 -17
- package/dist/rpc/broker/journal.js.map +0 -1
- package/dist/rpc/contract/errors.d.ts +0 -18
- package/dist/rpc/contract/errors.d.ts.map +0 -1
- package/dist/rpc/contract/errors.js +0 -55
- package/dist/rpc/contract/errors.js.map +0 -1
- package/dist/rpc/contract/parse.d.ts +0 -9
- package/dist/rpc/contract/parse.d.ts.map +0 -1
- package/dist/rpc/contract/parse.js +0 -144
- package/dist/rpc/contract/parse.js.map +0 -1
- package/dist/rpc/contract/topics.d.ts +0 -11
- package/dist/rpc/contract/topics.d.ts.map +0 -1
- package/dist/rpc/contract/topics.js +0 -42
- package/dist/rpc/contract/topics.js.map +0 -1
- package/dist/rpc/contract/types.d.ts +0 -54
- package/dist/rpc/contract/types.d.ts.map +0 -1
- package/dist/rpc/contract/types.js +0 -39
- package/dist/rpc/contract/types.js.map +0 -1
- package/dist/rpc/index.d.ts +0 -10
- package/dist/rpc/index.d.ts.map +0 -1
- package/dist/rpc/index.js +0 -11
- package/dist/rpc/index.js.map +0 -1
- package/dist/rpc/transport/localhost-server.d.ts +0 -36
- package/dist/rpc/transport/localhost-server.d.ts.map +0 -1
- package/dist/rpc/transport/localhost-server.js +0 -275
- package/dist/rpc/transport/localhost-server.js.map +0 -1
- package/dist/rpc/transport/websocket.d.ts +0 -20
- package/dist/rpc/transport/websocket.d.ts.map +0 -1
- package/dist/rpc/transport/websocket.js +0 -156
- package/dist/rpc/transport/websocket.js.map +0 -1
|
@@ -0,0 +1,336 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* P36 wave B — artifact dual-read + optional write (not wave C).
|
|
3
|
+
*
|
|
4
|
+
* User default: keep reading old task.json / evidence / pool. Maintainer
|
|
5
|
+
* may write required_controls + Topology projections. Never delete
|
|
6
|
+
* business prose. Archive is read-only. Failure rolls back to dual-read.
|
|
7
|
+
*/
|
|
8
|
+
import fs from "node:fs";
|
|
9
|
+
import path from "node:path";
|
|
10
|
+
import { resolveRequiredControls } from "./full-quality.js";
|
|
11
|
+
import { projectLegacyStatus } from "./kernel-contract.js";
|
|
12
|
+
import { STAGE5_SCHEMA_VERSION, defaultDependencyGraph, defaultTopology, expandDependsOnToRequires, topologyKindFromChildren, } from "./ondemand-topology.js";
|
|
13
|
+
import { loadTaskRecord, writeTaskRecord } from "./records.js";
|
|
14
|
+
import { isPlainObject } from "./schema.js";
|
|
15
|
+
export const P36_ARTIFACT_SOURCE = "p36-artifact-migrate";
|
|
16
|
+
export function planArtifactMigration(options) {
|
|
17
|
+
const root = path.resolve(options.root);
|
|
18
|
+
const tasksRoot = options.tasksDir
|
|
19
|
+
? path.resolve(options.tasksDir)
|
|
20
|
+
: path.join(root, ".cstl", "tasks");
|
|
21
|
+
const poolRoot = options.poolDir
|
|
22
|
+
? path.resolve(options.poolDir)
|
|
23
|
+
: path.join(root, ".cstl", "pool", "items");
|
|
24
|
+
const degraded = [];
|
|
25
|
+
const tasks = [];
|
|
26
|
+
const writable = [];
|
|
27
|
+
for (const file of collectFiles(tasksRoot, "task.json")) {
|
|
28
|
+
const scanned = scanTaskArtifact(file, tasksRoot);
|
|
29
|
+
if (scanned.degraded) {
|
|
30
|
+
degraded.push(scanned.degraded);
|
|
31
|
+
continue;
|
|
32
|
+
}
|
|
33
|
+
if (!scanned.task)
|
|
34
|
+
continue;
|
|
35
|
+
tasks.push(scanned.task);
|
|
36
|
+
if (scanned.write)
|
|
37
|
+
writable.push(scanned.write);
|
|
38
|
+
}
|
|
39
|
+
for (const file of collectFiles(poolRoot, ".md")) {
|
|
40
|
+
if (isArchivePath(poolRoot, file))
|
|
41
|
+
continue;
|
|
42
|
+
const poolWrite = projectPoolPriority(file);
|
|
43
|
+
if (poolWrite)
|
|
44
|
+
writable.push(poolWrite);
|
|
45
|
+
}
|
|
46
|
+
const dualRead = tasks.filter((task) => task.dualRead).length;
|
|
47
|
+
const activeDualRead = tasks.filter((task) => task.dualRead && !task.archive && isActiveStatus(task.status)).length;
|
|
48
|
+
const archiveSkipped = tasks.filter((task) => task.archive).length;
|
|
49
|
+
return {
|
|
50
|
+
scanned: tasks.length,
|
|
51
|
+
dualRead,
|
|
52
|
+
activeDualRead,
|
|
53
|
+
archiveSkipped,
|
|
54
|
+
writable,
|
|
55
|
+
tasks,
|
|
56
|
+
degraded,
|
|
57
|
+
continueOk: tasks.length === 0 || tasks.every((task) => task.continueOk),
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
export function applyArtifactMigration(options) {
|
|
61
|
+
const snapshots = [];
|
|
62
|
+
let written = 0;
|
|
63
|
+
try {
|
|
64
|
+
for (const target of options.plan.writable) {
|
|
65
|
+
if (options.onBeforeWrite)
|
|
66
|
+
options.onBeforeWrite(target);
|
|
67
|
+
if (!fs.existsSync(target.path)) {
|
|
68
|
+
throw new Error(`missing ${target.path}`);
|
|
69
|
+
}
|
|
70
|
+
snapshots.push({
|
|
71
|
+
path: target.path,
|
|
72
|
+
content: fs.readFileSync(target.path, "utf-8"),
|
|
73
|
+
});
|
|
74
|
+
writeArtifactTarget(target);
|
|
75
|
+
written += 1;
|
|
76
|
+
}
|
|
77
|
+
return { ok: true, wrote: written > 0, written, rolledBack: false };
|
|
78
|
+
}
|
|
79
|
+
catch (err) {
|
|
80
|
+
restoreSnapshots(snapshots);
|
|
81
|
+
return {
|
|
82
|
+
ok: false,
|
|
83
|
+
wrote: false,
|
|
84
|
+
written: 0,
|
|
85
|
+
rolledBack: snapshots.length > 0,
|
|
86
|
+
error: err instanceof Error ? err.message : String(err),
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
export function formatArtifactVernacular(plan, writeArtifacts) {
|
|
91
|
+
const lines = [
|
|
92
|
+
writeArtifacts
|
|
93
|
+
? `产物:将写入 ${plan.writable.length} 个投影(required_controls / Topology;不删正文)。归档 ${plan.archiveSkipped} 个只读。`
|
|
94
|
+
: `产物:${plan.activeDualRead} 个进行中的任务仍按旧形状可读,这次不用改它们。归档 ${plan.archiveSkipped} 个只读。`,
|
|
95
|
+
];
|
|
96
|
+
if (plan.degraded.length > 0) {
|
|
97
|
+
lines.push(`degraded:${plan.degraded.length}(仍可再跑 update)`);
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
lines.push("degraded:无");
|
|
101
|
+
}
|
|
102
|
+
return lines;
|
|
103
|
+
}
|
|
104
|
+
function writeArtifactTarget(target) {
|
|
105
|
+
if (target.kind === "pool") {
|
|
106
|
+
if (target.nextText === undefined) {
|
|
107
|
+
throw new Error(`pool write missing text: ${target.path}`);
|
|
108
|
+
}
|
|
109
|
+
fs.writeFileSync(target.path, target.nextText, "utf-8");
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
const record = loadTaskRecord({ taskDir: path.dirname(target.path) });
|
|
113
|
+
writeTaskRecord({
|
|
114
|
+
taskDir: path.dirname(target.path),
|
|
115
|
+
record,
|
|
116
|
+
extra: target.extra ?? {},
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
function restoreSnapshots(snapshots) {
|
|
120
|
+
for (const snapshot of [...snapshots].reverse()) {
|
|
121
|
+
if (snapshot.content === null) {
|
|
122
|
+
if (fs.existsSync(snapshot.path))
|
|
123
|
+
fs.unlinkSync(snapshot.path);
|
|
124
|
+
continue;
|
|
125
|
+
}
|
|
126
|
+
fs.writeFileSync(snapshot.path, snapshot.content, "utf-8");
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
function scanTaskArtifact(file, tasksRoot) {
|
|
130
|
+
let parsed;
|
|
131
|
+
try {
|
|
132
|
+
parsed = JSON.parse(fs.readFileSync(file, "utf-8"));
|
|
133
|
+
}
|
|
134
|
+
catch {
|
|
135
|
+
return { degraded: `${file}: task.json is not readable JSON` };
|
|
136
|
+
}
|
|
137
|
+
if (!isPlainObject(parsed)) {
|
|
138
|
+
return { degraded: `${file}: task.json is not an object` };
|
|
139
|
+
}
|
|
140
|
+
const id = typeof parsed.id === "string" ? parsed.id : path.basename(path.dirname(file));
|
|
141
|
+
const status = typeof parsed.status === "string" ? parsed.status : "";
|
|
142
|
+
const archive = isArchivePath(tasksRoot, file);
|
|
143
|
+
const continueOk = status.trim() !== "";
|
|
144
|
+
if (continueOk) {
|
|
145
|
+
projectLegacyStatus(status);
|
|
146
|
+
}
|
|
147
|
+
const missing = [];
|
|
148
|
+
const extra = {};
|
|
149
|
+
if (!hasRequiredControls(parsed)) {
|
|
150
|
+
missing.push("required_controls");
|
|
151
|
+
extra.required_controls = resolveRequiredControls({
|
|
152
|
+
rigor: inferLegacyRigor(parsed),
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
const parent = typeof parsed.parent === "string" && parsed.parent.trim() !== ""
|
|
156
|
+
? parsed.parent
|
|
157
|
+
: null;
|
|
158
|
+
const children = asStringArray(parsed.children);
|
|
159
|
+
if (!hasTopology(parsed)) {
|
|
160
|
+
missing.push("topology");
|
|
161
|
+
extra.topology = defaultTopology({
|
|
162
|
+
id,
|
|
163
|
+
parent,
|
|
164
|
+
children,
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
else {
|
|
168
|
+
const repaired = repairMisclassifiedTopology(parsed, { id, parent, children });
|
|
169
|
+
if (repaired) {
|
|
170
|
+
missing.push("topology");
|
|
171
|
+
extra.topology = repaired;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
const dependsOn = asStringArray(parsed.depends_on);
|
|
175
|
+
if (!hasDependencyGraph(parsed) && dependsOn.length > 0) {
|
|
176
|
+
missing.push("dependency_graph");
|
|
177
|
+
extra.dependency_graph = expandDependsOnToRequires(defaultDependencyGraph(), id, dependsOn);
|
|
178
|
+
}
|
|
179
|
+
const dualRead = missing.length > 0;
|
|
180
|
+
const writable = dualRead && !archive && Object.keys(extra).length > 0;
|
|
181
|
+
return {
|
|
182
|
+
task: {
|
|
183
|
+
path: file,
|
|
184
|
+
id,
|
|
185
|
+
status,
|
|
186
|
+
archive,
|
|
187
|
+
continueOk,
|
|
188
|
+
dualRead,
|
|
189
|
+
writable,
|
|
190
|
+
missing,
|
|
191
|
+
},
|
|
192
|
+
write: writable
|
|
193
|
+
? {
|
|
194
|
+
kind: "task",
|
|
195
|
+
path: file,
|
|
196
|
+
extra,
|
|
197
|
+
}
|
|
198
|
+
: undefined,
|
|
199
|
+
};
|
|
200
|
+
}
|
|
201
|
+
function projectPoolPriority(file) {
|
|
202
|
+
let text;
|
|
203
|
+
try {
|
|
204
|
+
text = fs.readFileSync(file, "utf-8");
|
|
205
|
+
}
|
|
206
|
+
catch {
|
|
207
|
+
return null;
|
|
208
|
+
}
|
|
209
|
+
if (!text.startsWith("---"))
|
|
210
|
+
return null;
|
|
211
|
+
const close = text.indexOf("\n---", 3);
|
|
212
|
+
if (close === -1)
|
|
213
|
+
return null;
|
|
214
|
+
const frontmatter = text.slice(0, close);
|
|
215
|
+
if (/^priority\s*:/m.test(frontmatter))
|
|
216
|
+
return null;
|
|
217
|
+
return {
|
|
218
|
+
kind: "pool",
|
|
219
|
+
path: file,
|
|
220
|
+
nextText: text.replace(/^---\r?\n/, "---\npriority: P2\n"),
|
|
221
|
+
};
|
|
222
|
+
}
|
|
223
|
+
function collectFiles(root, match) {
|
|
224
|
+
if (!fs.existsSync(root))
|
|
225
|
+
return [];
|
|
226
|
+
const out = [];
|
|
227
|
+
const stack = [root];
|
|
228
|
+
while (stack.length > 0) {
|
|
229
|
+
const current = stack.pop();
|
|
230
|
+
if (current === undefined)
|
|
231
|
+
continue;
|
|
232
|
+
let entries;
|
|
233
|
+
try {
|
|
234
|
+
entries = fs.readdirSync(current, { withFileTypes: true });
|
|
235
|
+
}
|
|
236
|
+
catch {
|
|
237
|
+
continue;
|
|
238
|
+
}
|
|
239
|
+
for (const entry of entries) {
|
|
240
|
+
const full = path.join(current, entry.name);
|
|
241
|
+
if (entry.isDirectory()) {
|
|
242
|
+
stack.push(full);
|
|
243
|
+
}
|
|
244
|
+
else if (entry.isFile()) {
|
|
245
|
+
if (match === "task.json" && entry.name === "task.json")
|
|
246
|
+
out.push(full);
|
|
247
|
+
if (match === ".md" && entry.name.endsWith(".md"))
|
|
248
|
+
out.push(full);
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
return out.sort();
|
|
253
|
+
}
|
|
254
|
+
function isArchivePath(root, file) {
|
|
255
|
+
const rel = path.relative(root, file).replace(/\\/g, "/");
|
|
256
|
+
return rel.split("/").includes("archive");
|
|
257
|
+
}
|
|
258
|
+
function hasRequiredControls(parsed) {
|
|
259
|
+
const raw = parsed.required_controls;
|
|
260
|
+
return (isPlainObject(raw) && (raw.rigor === "lite" || raw.rigor === "full"));
|
|
261
|
+
}
|
|
262
|
+
function hasTopology(parsed) {
|
|
263
|
+
const raw = parsed.topology;
|
|
264
|
+
return isPlainObject(raw) && (raw.kind === "single" || raw.kind === "parent-child");
|
|
265
|
+
}
|
|
266
|
+
function repairMisclassifiedTopology(parsed, record) {
|
|
267
|
+
const raw = parsed.topology;
|
|
268
|
+
if (!isPlainObject(raw))
|
|
269
|
+
return null;
|
|
270
|
+
const parentId = raw.parent_id === null || raw.parent_id === undefined
|
|
271
|
+
? record.parent
|
|
272
|
+
: typeof raw.parent_id === "string" && raw.parent_id.trim() !== ""
|
|
273
|
+
? raw.parent_id.trim()
|
|
274
|
+
: null;
|
|
275
|
+
const children = uniqueStrings([
|
|
276
|
+
...asStringArray(raw.children),
|
|
277
|
+
...record.children,
|
|
278
|
+
]);
|
|
279
|
+
const expectedKind = topologyKindFromChildren(children);
|
|
280
|
+
if (raw.kind === expectedKind)
|
|
281
|
+
return null;
|
|
282
|
+
return {
|
|
283
|
+
schema_version: STAGE5_SCHEMA_VERSION,
|
|
284
|
+
kind: expectedKind,
|
|
285
|
+
parent_id: parentId,
|
|
286
|
+
children,
|
|
287
|
+
};
|
|
288
|
+
}
|
|
289
|
+
function uniqueStrings(values) {
|
|
290
|
+
const out = [];
|
|
291
|
+
for (const value of values) {
|
|
292
|
+
if (typeof value !== "string")
|
|
293
|
+
continue;
|
|
294
|
+
const id = value.trim();
|
|
295
|
+
if (!id || out.includes(id))
|
|
296
|
+
continue;
|
|
297
|
+
out.push(id);
|
|
298
|
+
}
|
|
299
|
+
return out;
|
|
300
|
+
}
|
|
301
|
+
function hasDependencyGraph(parsed) {
|
|
302
|
+
const raw = parsed.dependency_graph;
|
|
303
|
+
return isPlainObject(raw) && Array.isArray(raw.edges);
|
|
304
|
+
}
|
|
305
|
+
function inferLegacyRigor(parsed) {
|
|
306
|
+
const meta = isPlainObject(parsed.meta) ? parsed.meta : {};
|
|
307
|
+
const candidates = [
|
|
308
|
+
parsed.task_kind,
|
|
309
|
+
parsed.task_type,
|
|
310
|
+
parsed.kind,
|
|
311
|
+
parsed.mode,
|
|
312
|
+
meta.task_kind,
|
|
313
|
+
meta.task_type,
|
|
314
|
+
meta.classification,
|
|
315
|
+
meta.mode,
|
|
316
|
+
];
|
|
317
|
+
for (const value of candidates) {
|
|
318
|
+
if (typeof value !== "string")
|
|
319
|
+
continue;
|
|
320
|
+
const normalized = value.toLowerCase().replace(/_/g, "-");
|
|
321
|
+
if (normalized.includes("full"))
|
|
322
|
+
return "full";
|
|
323
|
+
if (normalized.includes("lite"))
|
|
324
|
+
return "lite";
|
|
325
|
+
}
|
|
326
|
+
return "lite";
|
|
327
|
+
}
|
|
328
|
+
function isActiveStatus(status) {
|
|
329
|
+
return !["completed", "done", "cancelled", "canceled"].includes(status);
|
|
330
|
+
}
|
|
331
|
+
function asStringArray(value) {
|
|
332
|
+
if (!Array.isArray(value))
|
|
333
|
+
return [];
|
|
334
|
+
return value.filter((item) => typeof item === "string");
|
|
335
|
+
}
|
|
336
|
+
//# sourceMappingURL=p36-artifact-migrate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"p36-artifact-migrate.js","sourceRoot":"","sources":["../../src/task/p36-artifact-migrate.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,uBAAuB,EAA+B,MAAM,mBAAmB,CAAC;AACzF,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EACL,qBAAqB,EACrB,sBAAsB,EACtB,eAAe,EACf,yBAAyB,EACzB,wBAAwB,GAGzB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,CAAC,MAAM,mBAAmB,GAAG,sBAAsB,CAAC;AAuD1D,MAAM,UAAU,qBAAqB,CACnC,OAAqC;IAErC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACxC,MAAM,SAAS,GAAG,OAAO,CAAC,QAAQ;QAChC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC;QAChC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IACtC,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO;QAC9B,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC;QAC/B,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IAE9C,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,MAAM,KAAK,GAAuB,EAAE,CAAC;IACrC,MAAM,QAAQ,GAA0B,EAAE,CAAC;IAE3C,KAAK,MAAM,IAAI,IAAI,YAAY,CAAC,SAAS,EAAE,WAAW,CAAC,EAAE,CAAC;QACxD,MAAM,OAAO,GAAG,gBAAgB,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QAClD,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;YACrB,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YAChC,SAAS;QACX,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,IAAI;YAAE,SAAS;QAC5B,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACzB,IAAI,OAAO,CAAC,KAAK;YAAE,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAClD,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,YAAY,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC;QACjD,IAAI,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC;YAAE,SAAS;QAC5C,MAAM,SAAS,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;QAC5C,IAAI,SAAS;YAAE,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC1C,CAAC;IAED,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC;IAC9D,MAAM,cAAc,GAAG,KAAK,CAAC,MAAM,CACjC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CACxE,CAAC,MAAM,CAAC;IACT,MAAM,cAAc,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;IAEnE,OAAO;QACL,OAAO,EAAE,KAAK,CAAC,MAAM;QACrB,QAAQ;QACR,cAAc;QACd,cAAc;QACd,QAAQ;QACR,KAAK;QACL,QAAQ;QACR,UAAU,EAAE,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC;KACzE,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,OAAsC;IAEtC,MAAM,SAAS,GAA+C,EAAE,CAAC;IACjE,IAAI,OAAO,GAAG,CAAC,CAAC;IAEhB,IAAI,CAAC;QACH,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC3C,IAAI,OAAO,CAAC,aAAa;gBAAE,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;YACzD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;gBAChC,MAAM,IAAI,KAAK,CAAC,WAAW,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;YAC5C,CAAC;YACD,SAAS,CAAC,IAAI,CAAC;gBACb,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,OAAO,EAAE,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC;aAC/C,CAAC,CAAC;YACH,mBAAmB,CAAC,MAAM,CAAC,CAAC;YAC5B,OAAO,IAAI,CAAC,CAAC;QACf,CAAC;QACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,GAAG,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;IACtE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,gBAAgB,CAAC,SAAS,CAAC,CAAC;QAC5B,OAAO;YACL,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,KAAK;YACZ,OAAO,EAAE,CAAC;YACV,UAAU,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC;YAChC,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;SACxD,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,wBAAwB,CACtC,IAAyB,EACzB,cAAuB;IAEvB,MAAM,KAAK,GAAG;QACZ,cAAc;YACZ,CAAC,CAAC,UAAU,IAAI,CAAC,QAAQ,CAAC,MAAM,8CAA8C,IAAI,CAAC,cAAc,OAAO;YACxG,CAAC,CAAC,MAAM,IAAI,CAAC,cAAc,8BAA8B,IAAI,CAAC,cAAc,OAAO;KACtF,CAAC;IACF,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,KAAK,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,QAAQ,CAAC,MAAM,eAAe,CAAC,CAAC;IAC9D,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC3B,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,mBAAmB,CAAC,MAA2B;IACtD,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QAC3B,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YAClC,MAAM,IAAI,KAAK,CAAC,4BAA4B,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QAC7D,CAAC;QACD,EAAE,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACxD,OAAO;IACT,CAAC;IACD,MAAM,MAAM,GAAG,cAAc,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACtE,eAAe,CAAC;QACd,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC;QAClC,MAAM;QACN,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,EAAE;KAC1B,CAAC,CAAC;AACL,CAAC;AAED,SAAS,gBAAgB,CACvB,SAAqD;IAErD,KAAK,MAAM,QAAQ,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;QAChD,IAAI,QAAQ,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;YAC9B,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC;gBAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAC/D,SAAS;QACX,CAAC;QACD,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC7D,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB,CACvB,IAAY,EACZ,SAAiB;IAMjB,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;IACtD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,QAAQ,EAAE,GAAG,IAAI,kCAAkC,EAAE,CAAC;IACjE,CAAC;IACD,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3B,OAAO,EAAE,QAAQ,EAAE,GAAG,IAAI,8BAA8B,EAAE,CAAC;IAC7D,CAAC;IAED,MAAM,EAAE,GAAG,OAAO,MAAM,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IACzF,MAAM,MAAM,GAAG,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IACtE,MAAM,OAAO,GAAG,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAC/C,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;IACxC,IAAI,UAAU,EAAE,CAAC;QACf,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAC9B,CAAC;IAED,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,KAAK,GAAiC,EAAE,CAAC;IAE/C,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,EAAE,CAAC;QACjC,OAAO,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QAClC,KAAK,CAAC,iBAAiB,GAAG,uBAAuB,CAAC;YAChD,KAAK,EAAE,gBAAgB,CAAC,MAAM,CAAC;SAChC,CAAC,CAAC;IACL,CAAC;IAED,MAAM,MAAM,GACV,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE;QAC9D,CAAC,CAAC,MAAM,CAAC,MAAM;QACf,CAAC,CAAC,IAAI,CAAC;IACX,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAChD,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;QACzB,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACzB,KAAK,CAAC,QAAQ,GAAG,eAAe,CAAC;YAC/B,EAAE;YACF,MAAM;YACN,QAAQ;SACT,CAAC,CAAC;IACL,CAAC;SAAM,CAAC;QACN,MAAM,QAAQ,GAAG,2BAA2B,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC/E,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACzB,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,MAAM,SAAS,GAAG,aAAa,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IACnD,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxD,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QACjC,KAAK,CAAC,gBAAgB,GAAG,yBAAyB,CAChD,sBAAsB,EAAE,EACxB,EAAE,EACF,SAAS,CACV,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;IACpC,MAAM,QAAQ,GAAG,QAAQ,IAAI,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;IAEvE,OAAO;QACL,IAAI,EAAE;YACJ,IAAI,EAAE,IAAI;YACV,EAAE;YACF,MAAM;YACN,OAAO;YACP,UAAU;YACV,QAAQ;YACR,QAAQ;YACR,OAAO;SACR;QACD,KAAK,EAAE,QAAQ;YACb,CAAC,CAAC;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,IAAI;gBACV,KAAK;aACN;YACH,CAAC,CAAC,SAAS;KACd,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB,CAAC,IAAY;IACvC,IAAI,IAAY,CAAC;IACjB,IAAI,CAAC;QACH,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACxC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACzC,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IACvC,IAAI,KAAK,KAAK,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAC9B,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IACzC,IAAI,gBAAgB,CAAC,IAAI,CAAC,WAAW,CAAC;QAAE,OAAO,IAAI,CAAC;IACpD,OAAO;QACL,IAAI,EAAE,MAAM;QACZ,IAAI,EAAE,IAAI;QACV,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,qBAAqB,CAAC;KAC3D,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,IAAY,EAAE,KAAa;IAC/C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,CAAC;IACpC,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC;IACrB,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC;QAC5B,IAAI,OAAO,KAAK,SAAS;YAAE,SAAS;QACpC,IAAI,OAAoB,CAAC;QACzB,IAAI,CAAC;YACH,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7D,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;QACD,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YAC5C,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;gBACxB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACnB,CAAC;iBAAM,IAAI,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;gBAC1B,IAAI,KAAK,KAAK,WAAW,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW;oBAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACxE,IAAI,KAAK,KAAK,KAAK,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;oBAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACpE,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC;AACpB,CAAC;AAED,SAAS,aAAa,CAAC,IAAY,EAAE,IAAY;IAC/C,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAC1D,OAAO,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;AAC5C,CAAC;AAED,SAAS,mBAAmB,CAAC,MAA+B;IAC1D,MAAM,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC;IACrC,OAAO,CACL,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,KAAK,MAAM,IAAI,GAAG,CAAC,KAAK,KAAK,MAAM,CAAC,CACrE,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,MAA+B;IAClD,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC;IAC5B,OAAO,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,KAAK,QAAQ,IAAI,GAAG,CAAC,IAAI,KAAK,cAAc,CAAC,CAAC;AACtF,CAAC;AAED,SAAS,2BAA2B,CAClC,MAA+B,EAC/B,MAAiE;IAEjE,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC;IAC5B,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IACrC,MAAM,QAAQ,GACZ,GAAG,CAAC,SAAS,KAAK,IAAI,IAAI,GAAG,CAAC,SAAS,KAAK,SAAS;QACnD,CAAC,CAAC,MAAM,CAAC,MAAM;QACf,CAAC,CAAC,OAAO,GAAG,CAAC,SAAS,KAAK,QAAQ,IAAI,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE;YAChE,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE;YACtB,CAAC,CAAC,IAAI,CAAC;IACb,MAAM,QAAQ,GAAG,aAAa,CAAC;QAC7B,GAAG,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC;QAC9B,GAAG,MAAM,CAAC,QAAQ;KACnB,CAAC,CAAC;IACH,MAAM,YAAY,GAAG,wBAAwB,CAAC,QAAQ,CAAC,CAAC;IACxD,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY;QAAE,OAAO,IAAI,CAAC;IAC3C,OAAO;QACL,cAAc,EAAE,qBAAqB;QACrC,IAAI,EAAE,YAAY;QAClB,SAAS,EAAE,QAAQ;QACnB,QAAQ;KACT,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,MAA0B;IAC/C,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,SAAS;QACxC,MAAM,EAAE,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;QACxB,IAAI,CAAC,EAAE,IAAI,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YAAE,SAAS;QACtC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,kBAAkB,CAAC,MAA+B;IACzD,MAAM,GAAG,GAAG,MAAM,CAAC,gBAAgB,CAAC;IACpC,OAAO,aAAa,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AACxD,CAAC;AAED,SAAS,gBAAgB,CAAC,MAA+B;IACvD,MAAM,IAAI,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IAC3D,MAAM,UAAU,GAAG;QACjB,MAAM,CAAC,SAAS;QAChB,MAAM,CAAC,SAAS;QAChB,MAAM,CAAC,IAAI;QACX,MAAM,CAAC,IAAI;QACX,IAAI,CAAC,SAAS;QACd,IAAI,CAAC,SAAS;QACd,IAAI,CAAC,cAAc;QACnB,IAAI,CAAC,IAAI;KACV,CAAC;IACF,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE,CAAC;QAC/B,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,SAAS;QACxC,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAC1D,IAAI,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC;YAAE,OAAO,MAAM,CAAC;QAC/C,IAAI,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC;YAAE,OAAO,MAAM,CAAC;IACjD,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,cAAc,CAAC,MAAc;IACpC,OAAO,CAAC,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AAC1E,CAAC;AAED,SAAS,aAAa,CAAC,KAAc;IACnC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACrC,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC;AAC1E,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* P36 Wave C: confirm-gated stop-read of leftover Task fields.
|
|
3
|
+
*
|
|
4
|
+
* Written only after `cstl update` confirm. Dry-run and refuse never write.
|
|
5
|
+
* Runtime closeout reads this flag; leftover kind/mode/classification stay
|
|
6
|
+
* dual-read until it exists.
|
|
7
|
+
*/
|
|
8
|
+
import { type ContractMigrateReport } from "./contract-migrate.js";
|
|
9
|
+
export declare const WAVE_C_STATE_REL = ".cstl/.p36-wave-c.json";
|
|
10
|
+
export declare const WAVE_C_SCHEMA_VERSION = 1;
|
|
11
|
+
export interface WaveCState {
|
|
12
|
+
schema_version: number;
|
|
13
|
+
wave: "C";
|
|
14
|
+
confirmed: boolean;
|
|
15
|
+
confirmedAt: string | null;
|
|
16
|
+
}
|
|
17
|
+
export interface WaveCPlan {
|
|
18
|
+
confirmed: boolean;
|
|
19
|
+
scanned: number;
|
|
20
|
+
leftoverCloseout: number;
|
|
21
|
+
alreadyNewShape: number;
|
|
22
|
+
vernacular: string[];
|
|
23
|
+
}
|
|
24
|
+
export declare function waveCStatePath(root: string): string;
|
|
25
|
+
export declare function emptyWaveCState(): WaveCState;
|
|
26
|
+
export declare function readWaveCState(root: string): WaveCState;
|
|
27
|
+
export declare function isWaveCConfirmed(root: string): boolean;
|
|
28
|
+
export declare function writeWaveCConfirmed(root: string, at?: Date): WaveCState;
|
|
29
|
+
export declare function planWaveC(options: {
|
|
30
|
+
root: string;
|
|
31
|
+
report?: ContractMigrateReport;
|
|
32
|
+
}): WaveCPlan;
|
|
33
|
+
export declare function formatWaveCVernacular(plan: {
|
|
34
|
+
confirmed: boolean;
|
|
35
|
+
scanned: number;
|
|
36
|
+
leftoverCloseout: number;
|
|
37
|
+
alreadyNewShape: number;
|
|
38
|
+
}): string[];
|
|
39
|
+
//# sourceMappingURL=p36-wave-c.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"p36-wave-c.d.ts","sourceRoot":"","sources":["../../src/task/p36-wave-c.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,EAEL,KAAK,qBAAqB,EAC3B,MAAM,uBAAuB,CAAC;AAG/B,eAAO,MAAM,gBAAgB,2BAA2B,CAAC;AACzD,eAAO,MAAM,qBAAqB,IAAI,CAAC;AAEvC,MAAM,WAAW,UAAU;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,GAAG,CAAC;IACV,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,MAAM,WAAW,SAAS;IACxB,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED,wBAAgB,eAAe,IAAI,UAAU,CAO5C;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CAmBvD;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEtD;AAED,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,EACZ,EAAE,GAAE,IAAiB,GACpB,UAAU,CAWZ;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,qBAAqB,CAAC;CAChC,GAAG,SAAS,CA4BZ;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE;IAC1C,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;CACzB,GAAG,MAAM,EAAE,CAWX"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* P36 Wave C: confirm-gated stop-read of leftover Task fields.
|
|
3
|
+
*
|
|
4
|
+
* Written only after `cstl update` confirm. Dry-run and refuse never write.
|
|
5
|
+
* Runtime closeout reads this flag; leftover kind/mode/classification stay
|
|
6
|
+
* dual-read until it exists.
|
|
7
|
+
*/
|
|
8
|
+
import fs from "node:fs";
|
|
9
|
+
import path from "node:path";
|
|
10
|
+
import { scanContractMigration, } from "./contract-migrate.js";
|
|
11
|
+
import { isPlainObject } from "./schema.js";
|
|
12
|
+
export const WAVE_C_STATE_REL = ".cstl/.p36-wave-c.json";
|
|
13
|
+
export const WAVE_C_SCHEMA_VERSION = 1;
|
|
14
|
+
export function waveCStatePath(root) {
|
|
15
|
+
return path.join(path.resolve(root), WAVE_C_STATE_REL);
|
|
16
|
+
}
|
|
17
|
+
export function emptyWaveCState() {
|
|
18
|
+
return {
|
|
19
|
+
schema_version: WAVE_C_SCHEMA_VERSION,
|
|
20
|
+
wave: "C",
|
|
21
|
+
confirmed: false,
|
|
22
|
+
confirmedAt: null,
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
export function readWaveCState(root) {
|
|
26
|
+
const file = waveCStatePath(root);
|
|
27
|
+
if (!fs.existsSync(file))
|
|
28
|
+
return emptyWaveCState();
|
|
29
|
+
try {
|
|
30
|
+
const parsed = JSON.parse(fs.readFileSync(file, "utf-8"));
|
|
31
|
+
if (!isPlainObject(parsed))
|
|
32
|
+
return emptyWaveCState();
|
|
33
|
+
return {
|
|
34
|
+
schema_version: parsed.schema_version === WAVE_C_SCHEMA_VERSION
|
|
35
|
+
? WAVE_C_SCHEMA_VERSION
|
|
36
|
+
: WAVE_C_SCHEMA_VERSION,
|
|
37
|
+
wave: "C",
|
|
38
|
+
confirmed: parsed.confirmed === true,
|
|
39
|
+
confirmedAt: typeof parsed.confirmedAt === "string" ? parsed.confirmedAt : null,
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
return emptyWaveCState();
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
export function isWaveCConfirmed(root) {
|
|
47
|
+
return readWaveCState(root).confirmed;
|
|
48
|
+
}
|
|
49
|
+
export function writeWaveCConfirmed(root, at = new Date()) {
|
|
50
|
+
const state = {
|
|
51
|
+
schema_version: WAVE_C_SCHEMA_VERSION,
|
|
52
|
+
wave: "C",
|
|
53
|
+
confirmed: true,
|
|
54
|
+
confirmedAt: at.toISOString(),
|
|
55
|
+
};
|
|
56
|
+
const file = waveCStatePath(root);
|
|
57
|
+
fs.mkdirSync(path.dirname(file), { recursive: true });
|
|
58
|
+
fs.writeFileSync(file, `${JSON.stringify(state, null, 2)}\n`, "utf-8");
|
|
59
|
+
return state;
|
|
60
|
+
}
|
|
61
|
+
export function planWaveC(options) {
|
|
62
|
+
const confirmed = isWaveCConfirmed(options.root);
|
|
63
|
+
const report = options.report ?? scanContractMigration({ root: options.root });
|
|
64
|
+
const leftoverPaths = new Set();
|
|
65
|
+
for (const finding of report.findings) {
|
|
66
|
+
if (finding.kind === "retired-field" ||
|
|
67
|
+
finding.kind === "children-inferred-parent" ||
|
|
68
|
+
finding.kind === "file-inferred-rigor" ||
|
|
69
|
+
finding.kind === "legacy-parent") {
|
|
70
|
+
leftoverPaths.add(finding.path);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
const leftoverCloseout = leftoverPaths.size;
|
|
74
|
+
const alreadyNewShape = Math.max(0, report.scanned - leftoverCloseout);
|
|
75
|
+
return {
|
|
76
|
+
confirmed,
|
|
77
|
+
scanned: report.scanned,
|
|
78
|
+
leftoverCloseout,
|
|
79
|
+
alreadyNewShape,
|
|
80
|
+
vernacular: formatWaveCVernacular({
|
|
81
|
+
confirmed,
|
|
82
|
+
scanned: report.scanned,
|
|
83
|
+
leftoverCloseout,
|
|
84
|
+
alreadyNewShape,
|
|
85
|
+
}),
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
export function formatWaveCVernacular(plan) {
|
|
89
|
+
if (plan.confirmed) {
|
|
90
|
+
return [
|
|
91
|
+
"已确认停读旧形状。新任务只认 topology / required_controls,不再靠 leftover kind/mode/classification 推断 Rigor / Parent。",
|
|
92
|
+
];
|
|
93
|
+
}
|
|
94
|
+
return [
|
|
95
|
+
"确认后才会停读旧形状:不再把 leftover kind/mode/classification 当 Rigor/Parent 唯一真相。",
|
|
96
|
+
`已扫描 ${plan.scanned} 个任务:${plan.alreadyNewShape} 个已是新形状,${plan.leftoverCloseout} 个仍靠旧字段。`,
|
|
97
|
+
"拒绝或失败:项目仍能 Continue / Close,可再跑 update。",
|
|
98
|
+
];
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=p36-wave-c.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"p36-wave-c.js","sourceRoot":"","sources":["../../src/task/p36-wave-c.ts"],"names":[],"mappings":"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"}
|
package/dist/task/records.d.ts
CHANGED
|
@@ -12,6 +12,11 @@ export interface WriteTaskRecordOptions {
|
|
|
12
12
|
record: TrellisTaskRecord;
|
|
13
13
|
/** Optional repo root used to resolve relative `taskDir` values. */
|
|
14
14
|
cwd?: string;
|
|
15
|
+
/**
|
|
16
|
+
* Non-canonical projection fields owned by a Kernel Command
|
|
17
|
+
* (`execution_approval`, `quality_gate_results`, …). Canonical keys are ignored.
|
|
18
|
+
*/
|
|
19
|
+
extra?: Record<string, unknown>;
|
|
15
20
|
}
|
|
16
21
|
/**
|
|
17
22
|
* Read a task.json file and return a canonicalized record.
|
|
@@ -33,6 +38,10 @@ export declare function loadTaskRecord(options: LoadTaskRecordOptions): TrellisT
|
|
|
33
38
|
* of silently replacing potentially recoverable local data.
|
|
34
39
|
*
|
|
35
40
|
* The directory containing `task.json` is created if it does not exist.
|
|
41
|
+
*
|
|
42
|
+
* Stage 2 (P28/P30): Kernel Commands may call this for same-command
|
|
43
|
+
* legacy projection. Do not add another packages/core `writeFileSync`
|
|
44
|
+
* primitive for `task.json`.
|
|
36
45
|
*/
|
|
37
46
|
export declare function writeTaskRecord(options: WriteTaskRecordOptions): void;
|
|
38
47
|
export { emptyTaskRecord };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"records.d.ts","sourceRoot":"","sources":["../../src/task/records.ts"],"names":[],"mappings":"AAGA,OAAO,EAEL,eAAe,EAGf,KAAK,iBAAiB,EACvB,MAAM,aAAa,CAAC;AAIrB,MAAM,WAAW,qBAAqB;IACpC,kEAAkE;IAClE,OAAO,EAAE,MAAM,CAAC;IAChB,oEAAoE;IACpE,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,sBAAsB;IACrC,kEAAkE;IAClE,OAAO,EAAE,MAAM,CAAC;IAChB,yEAAyE;IACzE,MAAM,EAAE,iBAAiB,CAAC;IAC1B,oEAAoE;IACpE,GAAG,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"records.d.ts","sourceRoot":"","sources":["../../src/task/records.ts"],"names":[],"mappings":"AAGA,OAAO,EAEL,eAAe,EAGf,KAAK,iBAAiB,EACvB,MAAM,aAAa,CAAC;AAIrB,MAAM,WAAW,qBAAqB;IACpC,kEAAkE;IAClE,OAAO,EAAE,MAAM,CAAC;IAChB,oEAAoE;IACpE,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,sBAAsB;IACrC,kEAAkE;IAClE,OAAO,EAAE,MAAM,CAAC;IAChB,yEAAyE;IACzE,MAAM,EAAE,iBAAiB,CAAC;IAC1B,oEAAoE;IACpE,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAED;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,qBAAqB,GAC7B,iBAAiB,CAYnB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,sBAAsB,GAAG,IAAI,CA4BrE;AAoCD,OAAO,EAAE,eAAe,EAAE,CAAC"}
|
package/dist/task/records.js
CHANGED
|
@@ -33,6 +33,10 @@ export function loadTaskRecord(options) {
|
|
|
33
33
|
* of silently replacing potentially recoverable local data.
|
|
34
34
|
*
|
|
35
35
|
* The directory containing `task.json` is created if it does not exist.
|
|
36
|
+
*
|
|
37
|
+
* Stage 2 (P28/P30): Kernel Commands may call this for same-command
|
|
38
|
+
* legacy projection. Do not add another packages/core `writeFileSync`
|
|
39
|
+
* primitive for `task.json`.
|
|
36
40
|
*/
|
|
37
41
|
export function writeTaskRecord(options) {
|
|
38
42
|
const record = taskRecordSchema.parse(options.record);
|
|
@@ -44,6 +48,13 @@ export function writeTaskRecord(options) {
|
|
|
44
48
|
for (const field of TASK_RECORD_FIELD_ORDER) {
|
|
45
49
|
out[field] = recordBag[field];
|
|
46
50
|
}
|
|
51
|
+
if (options.extra) {
|
|
52
|
+
for (const [key, value] of Object.entries(options.extra)) {
|
|
53
|
+
if (TASK_RECORD_FIELD_ORDER.includes(key))
|
|
54
|
+
continue;
|
|
55
|
+
out[key] = value;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
47
58
|
if (existing) {
|
|
48
59
|
for (const key of Object.keys(existing)) {
|
|
49
60
|
if (!(key in out)) {
|
package/dist/task/records.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"records.js","sourceRoot":"","sources":["../../src/task/records.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EACL,uBAAuB,EACvB,eAAe,EACf,aAAa,EACb,gBAAgB,GAEjB,MAAM,aAAa,CAAC;AAErB,MAAM,kBAAkB,GAAG,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"records.js","sourceRoot":"","sources":["../../src/task/records.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@blxzer/cursor-trellis-core",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.3",
|
|
4
4
|
"description": "Trellis core SDK — channel and task domain primitives consumed by the Trellis CLI and downstream Node services",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -22,11 +22,6 @@
|
|
|
22
22
|
"import": "./dist/task/index.js",
|
|
23
23
|
"default": "./dist/task/index.js"
|
|
24
24
|
},
|
|
25
|
-
"./rpc": {
|
|
26
|
-
"types": "./dist/rpc/index.d.ts",
|
|
27
|
-
"import": "./dist/rpc/index.js",
|
|
28
|
-
"default": "./dist/rpc/index.js"
|
|
29
|
-
},
|
|
30
25
|
"./testing": {
|
|
31
26
|
"types": "./dist/testing/index.d.ts",
|
|
32
27
|
"import": "./dist/testing/index.js",
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import type { RpcEnvelope } from "../contract/types.js";
|
|
2
|
-
export interface RpcAuditEntry {
|
|
3
|
-
seq: number;
|
|
4
|
-
ts: string;
|
|
5
|
-
kind: string;
|
|
6
|
-
detail: Record<string, unknown>;
|
|
7
|
-
}
|
|
8
|
-
export declare class RpcAuditLog {
|
|
9
|
-
private seq;
|
|
10
|
-
private readonly entries;
|
|
11
|
-
append(kind: string, detail?: Record<string, unknown>): RpcAuditEntry;
|
|
12
|
-
appendEnvelope(kind: string, envelope: RpcEnvelope): RpcAuditEntry;
|
|
13
|
-
list(): readonly RpcAuditEntry[];
|
|
14
|
-
get size(): number;
|
|
15
|
-
}
|
|
16
|
-
//# sourceMappingURL=audit.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../../../src/rpc/broker/audit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAExD,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,GAAG,CAAK;IAChB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAuB;IAE/C,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GAAG,aAAa;IAWzE,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,GAAG,aAAa;IAalE,IAAI,IAAI,SAAS,aAAa,EAAE;IAIhC,IAAI,IAAI,IAAI,MAAM,CAEjB;CACF"}
|
package/dist/rpc/broker/audit.js
DELETED
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
export class RpcAuditLog {
|
|
2
|
-
seq = 0;
|
|
3
|
-
entries = [];
|
|
4
|
-
append(kind, detail = {}) {
|
|
5
|
-
const entry = {
|
|
6
|
-
seq: ++this.seq,
|
|
7
|
-
ts: new Date().toISOString(),
|
|
8
|
-
kind,
|
|
9
|
-
detail,
|
|
10
|
-
};
|
|
11
|
-
this.entries.push(entry);
|
|
12
|
-
return entry;
|
|
13
|
-
}
|
|
14
|
-
appendEnvelope(kind, envelope) {
|
|
15
|
-
return this.append(kind, {
|
|
16
|
-
id: envelope.id,
|
|
17
|
-
type: envelope.type,
|
|
18
|
-
method: envelope.method ?? null,
|
|
19
|
-
event: envelope.event ?? null,
|
|
20
|
-
from: envelope.from,
|
|
21
|
-
to: envelope.to ?? null,
|
|
22
|
-
correlationId: envelope.correlationId ?? null,
|
|
23
|
-
topic: envelope.topic ?? null,
|
|
24
|
-
});
|
|
25
|
-
}
|
|
26
|
-
list() {
|
|
27
|
-
return this.entries;
|
|
28
|
-
}
|
|
29
|
-
get size() {
|
|
30
|
-
return this.entries.length;
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
//# sourceMappingURL=audit.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"audit.js","sourceRoot":"","sources":["../../../src/rpc/broker/audit.ts"],"names":[],"mappings":"AASA,MAAM,OAAO,WAAW;IACd,GAAG,GAAG,CAAC,CAAC;IACC,OAAO,GAAoB,EAAE,CAAC;IAE/C,MAAM,CAAC,IAAY,EAAE,SAAkC,EAAE;QACvD,MAAM,KAAK,GAAkB;YAC3B,GAAG,EAAE,EAAE,IAAI,CAAC,GAAG;YACf,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YAC5B,IAAI;YACJ,MAAM;SACP,CAAC;QACF,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACzB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,cAAc,CAAC,IAAY,EAAE,QAAqB;QAChD,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;YACvB,EAAE,EAAE,QAAQ,CAAC,EAAE;YACf,IAAI,EAAE,QAAQ,CAAC,IAAI;YACnB,MAAM,EAAE,QAAQ,CAAC,MAAM,IAAI,IAAI;YAC/B,KAAK,EAAE,QAAQ,CAAC,KAAK,IAAI,IAAI;YAC7B,IAAI,EAAE,QAAQ,CAAC,IAAI;YACnB,EAAE,EAAE,QAAQ,CAAC,EAAE,IAAI,IAAI;YACvB,aAAa,EAAE,QAAQ,CAAC,aAAa,IAAI,IAAI;YAC7C,KAAK,EAAE,QAAQ,CAAC,KAAK,IAAI,IAAI;SAC9B,CAAC,CAAC;IACL,CAAC;IAED,IAAI;QACF,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;IAC7B,CAAC;CACF"}
|