@aisy/core 0.1.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.
Files changed (270) hide show
  1. package/LICENSE +202 -0
  2. package/dist/agent-loop/index.d.ts +4 -0
  3. package/dist/agent-loop/index.d.ts.map +1 -0
  4. package/dist/agent-loop/index.js +352 -0
  5. package/dist/agent-loop/index.js.map +1 -0
  6. package/dist/agent-loop/types.d.ts +183 -0
  7. package/dist/agent-loop/types.d.ts.map +1 -0
  8. package/dist/agent-loop/types.js +3 -0
  9. package/dist/agent-loop/types.js.map +1 -0
  10. package/dist/bin/aisy.d.ts +3 -0
  11. package/dist/bin/aisy.d.ts.map +1 -0
  12. package/dist/bin/aisy.js +14 -0
  13. package/dist/bin/aisy.js.map +1 -0
  14. package/dist/cli/index.d.ts +17 -0
  15. package/dist/cli/index.d.ts.map +1 -0
  16. package/dist/cli/index.js +114 -0
  17. package/dist/cli/index.js.map +1 -0
  18. package/dist/context-engine/index.d.ts +4 -0
  19. package/dist/context-engine/index.d.ts.map +1 -0
  20. package/dist/context-engine/index.js +126 -0
  21. package/dist/context-engine/index.js.map +1 -0
  22. package/dist/context-engine/types.d.ts +54 -0
  23. package/dist/context-engine/types.d.ts.map +1 -0
  24. package/dist/context-engine/types.js +4 -0
  25. package/dist/context-engine/types.js.map +1 -0
  26. package/dist/eval/index.d.ts +20 -0
  27. package/dist/eval/index.d.ts.map +1 -0
  28. package/dist/eval/index.js +128 -0
  29. package/dist/eval/index.js.map +1 -0
  30. package/dist/eval/types.d.ts +62 -0
  31. package/dist/eval/types.d.ts.map +1 -0
  32. package/dist/eval/types.js +17 -0
  33. package/dist/eval/types.js.map +1 -0
  34. package/dist/gateway/index.d.ts +5 -0
  35. package/dist/gateway/index.d.ts.map +1 -0
  36. package/dist/gateway/index.js +288 -0
  37. package/dist/gateway/index.js.map +1 -0
  38. package/dist/gateway/types.d.ts +194 -0
  39. package/dist/gateway/types.d.ts.map +1 -0
  40. package/dist/gateway/types.js +94 -0
  41. package/dist/gateway/types.js.map +1 -0
  42. package/dist/goals/index.d.ts +11 -0
  43. package/dist/goals/index.d.ts.map +1 -0
  44. package/dist/goals/index.js +21 -0
  45. package/dist/goals/index.js.map +1 -0
  46. package/dist/goals/types.d.ts +47 -0
  47. package/dist/goals/types.d.ts.map +1 -0
  48. package/dist/goals/types.js +5 -0
  49. package/dist/goals/types.js.map +1 -0
  50. package/dist/index.d.ts +56 -0
  51. package/dist/index.d.ts.map +1 -0
  52. package/dist/index.js +50 -0
  53. package/dist/index.js.map +1 -0
  54. package/dist/mcp/index.d.ts +5 -0
  55. package/dist/mcp/index.d.ts.map +1 -0
  56. package/dist/mcp/index.js +215 -0
  57. package/dist/mcp/index.js.map +1 -0
  58. package/dist/mcp/types.d.ts +148 -0
  59. package/dist/mcp/types.d.ts.map +1 -0
  60. package/dist/mcp/types.js +4 -0
  61. package/dist/mcp/types.js.map +1 -0
  62. package/dist/memory/index.d.ts +6 -0
  63. package/dist/memory/index.d.ts.map +1 -0
  64. package/dist/memory/index.js +419 -0
  65. package/dist/memory/index.js.map +1 -0
  66. package/dist/memory/types.d.ts +131 -0
  67. package/dist/memory/types.d.ts.map +1 -0
  68. package/dist/memory/types.js +33 -0
  69. package/dist/memory/types.js.map +1 -0
  70. package/dist/nightly/index.d.ts +4 -0
  71. package/dist/nightly/index.d.ts.map +1 -0
  72. package/dist/nightly/index.js +470 -0
  73. package/dist/nightly/index.js.map +1 -0
  74. package/dist/nightly/types.d.ts +326 -0
  75. package/dist/nightly/types.d.ts.map +1 -0
  76. package/dist/nightly/types.js +3 -0
  77. package/dist/nightly/types.js.map +1 -0
  78. package/dist/observability/index.d.ts +11 -0
  79. package/dist/observability/index.d.ts.map +1 -0
  80. package/dist/observability/index.js +396 -0
  81. package/dist/observability/index.js.map +1 -0
  82. package/dist/observability/types.d.ts +139 -0
  83. package/dist/observability/types.d.ts.map +1 -0
  84. package/dist/observability/types.js +4 -0
  85. package/dist/observability/types.js.map +1 -0
  86. package/dist/onboarding/index.d.ts +16 -0
  87. package/dist/onboarding/index.d.ts.map +1 -0
  88. package/dist/onboarding/index.js +787 -0
  89. package/dist/onboarding/index.js.map +1 -0
  90. package/dist/onboarding/interactive.d.ts +23 -0
  91. package/dist/onboarding/interactive.d.ts.map +1 -0
  92. package/dist/onboarding/interactive.js +45 -0
  93. package/dist/onboarding/interactive.js.map +1 -0
  94. package/dist/onboarding/types.d.ts +388 -0
  95. package/dist/onboarding/types.d.ts.map +1 -0
  96. package/dist/onboarding/types.js +35 -0
  97. package/dist/onboarding/types.js.map +1 -0
  98. package/dist/orchestration/index.d.ts +8 -0
  99. package/dist/orchestration/index.d.ts.map +1 -0
  100. package/dist/orchestration/index.js +706 -0
  101. package/dist/orchestration/index.js.map +1 -0
  102. package/dist/orchestration/types.d.ts +391 -0
  103. package/dist/orchestration/types.d.ts.map +1 -0
  104. package/dist/orchestration/types.js +30 -0
  105. package/dist/orchestration/types.js.map +1 -0
  106. package/dist/personality/index.d.ts +65 -0
  107. package/dist/personality/index.d.ts.map +1 -0
  108. package/dist/personality/index.js +339 -0
  109. package/dist/personality/index.js.map +1 -0
  110. package/dist/personality/types.d.ts +103 -0
  111. package/dist/personality/types.d.ts.map +1 -0
  112. package/dist/personality/types.js +15 -0
  113. package/dist/personality/types.js.map +1 -0
  114. package/dist/provider/index.d.ts +4 -0
  115. package/dist/provider/index.d.ts.map +1 -0
  116. package/dist/provider/index.js +236 -0
  117. package/dist/provider/index.js.map +1 -0
  118. package/dist/provider/types.d.ts +180 -0
  119. package/dist/provider/types.d.ts.map +1 -0
  120. package/dist/provider/types.js +4 -0
  121. package/dist/provider/types.js.map +1 -0
  122. package/dist/runtime/agent-cards.d.ts +14 -0
  123. package/dist/runtime/agent-cards.d.ts.map +1 -0
  124. package/dist/runtime/agent-cards.js +90 -0
  125. package/dist/runtime/agent-cards.js.map +1 -0
  126. package/dist/runtime/agent-runner.d.ts +30 -0
  127. package/dist/runtime/agent-runner.d.ts.map +1 -0
  128. package/dist/runtime/agent-runner.js +37 -0
  129. package/dist/runtime/agent-runner.js.map +1 -0
  130. package/dist/runtime/budget.d.ts +15 -0
  131. package/dist/runtime/budget.d.ts.map +1 -0
  132. package/dist/runtime/budget.js +24 -0
  133. package/dist/runtime/budget.js.map +1 -0
  134. package/dist/runtime/delegation-driver.d.ts +11 -0
  135. package/dist/runtime/delegation-driver.d.ts.map +1 -0
  136. package/dist/runtime/delegation-driver.js +132 -0
  137. package/dist/runtime/delegation-driver.js.map +1 -0
  138. package/dist/runtime/exact-cache.d.ts +10 -0
  139. package/dist/runtime/exact-cache.d.ts.map +1 -0
  140. package/dist/runtime/exact-cache.js +30 -0
  141. package/dist/runtime/exact-cache.js.map +1 -0
  142. package/dist/runtime/execute-tool.d.ts +29 -0
  143. package/dist/runtime/execute-tool.d.ts.map +1 -0
  144. package/dist/runtime/execute-tool.js +80 -0
  145. package/dist/runtime/execute-tool.js.map +1 -0
  146. package/dist/runtime/guardian.d.ts +9 -0
  147. package/dist/runtime/guardian.d.ts.map +1 -0
  148. package/dist/runtime/guardian.js +41 -0
  149. package/dist/runtime/guardian.js.map +1 -0
  150. package/dist/runtime/hook-gate.d.ts +17 -0
  151. package/dist/runtime/hook-gate.d.ts.map +1 -0
  152. package/dist/runtime/hook-gate.js +56 -0
  153. package/dist/runtime/hook-gate.js.map +1 -0
  154. package/dist/runtime/memory-adapter.d.ts +6 -0
  155. package/dist/runtime/memory-adapter.d.ts.map +1 -0
  156. package/dist/runtime/memory-adapter.js +38 -0
  157. package/dist/runtime/memory-adapter.js.map +1 -0
  158. package/dist/runtime/nightly-adapters.d.ts +48 -0
  159. package/dist/runtime/nightly-adapters.d.ts.map +1 -0
  160. package/dist/runtime/nightly-adapters.js +139 -0
  161. package/dist/runtime/nightly-adapters.js.map +1 -0
  162. package/dist/runtime/nightly-generator.d.ts +10 -0
  163. package/dist/runtime/nightly-generator.d.ts.map +1 -0
  164. package/dist/runtime/nightly-generator.js +335 -0
  165. package/dist/runtime/nightly-generator.js.map +1 -0
  166. package/dist/runtime/onboarding-node.d.ts +6 -0
  167. package/dist/runtime/onboarding-node.d.ts.map +1 -0
  168. package/dist/runtime/onboarding-node.js +356 -0
  169. package/dist/runtime/onboarding-node.js.map +1 -0
  170. package/dist/runtime/provider-anthropic.d.ts +43 -0
  171. package/dist/runtime/provider-anthropic.d.ts.map +1 -0
  172. package/dist/runtime/provider-anthropic.js +148 -0
  173. package/dist/runtime/provider-anthropic.js.map +1 -0
  174. package/dist/runtime/provider-cli.d.ts +18 -0
  175. package/dist/runtime/provider-cli.d.ts.map +1 -0
  176. package/dist/runtime/provider-cli.js +73 -0
  177. package/dist/runtime/provider-cli.js.map +1 -0
  178. package/dist/runtime/provider-openai.d.ts +30 -0
  179. package/dist/runtime/provider-openai.d.ts.map +1 -0
  180. package/dist/runtime/provider-openai.js +114 -0
  181. package/dist/runtime/provider-openai.js.map +1 -0
  182. package/dist/runtime/providers.d.ts +43 -0
  183. package/dist/runtime/providers.d.ts.map +1 -0
  184. package/dist/runtime/providers.js +72 -0
  185. package/dist/runtime/providers.js.map +1 -0
  186. package/dist/runtime/sandbox-bash.d.ts +21 -0
  187. package/dist/runtime/sandbox-bash.d.ts.map +1 -0
  188. package/dist/runtime/sandbox-bash.js +51 -0
  189. package/dist/runtime/sandbox-bash.js.map +1 -0
  190. package/dist/runtime/scoped-tool-executor.d.ts +10 -0
  191. package/dist/runtime/scoped-tool-executor.d.ts.map +1 -0
  192. package/dist/runtime/scoped-tool-executor.js +30 -0
  193. package/dist/runtime/scoped-tool-executor.js.map +1 -0
  194. package/dist/runtime/session-log.d.ts +6 -0
  195. package/dist/runtime/session-log.d.ts.map +1 -0
  196. package/dist/runtime/session-log.js +54 -0
  197. package/dist/runtime/session-log.js.map +1 -0
  198. package/dist/runtime/settings.d.ts +24 -0
  199. package/dist/runtime/settings.d.ts.map +1 -0
  200. package/dist/runtime/settings.js +29 -0
  201. package/dist/runtime/settings.js.map +1 -0
  202. package/dist/runtime/spawn-plan.d.ts +13 -0
  203. package/dist/runtime/spawn-plan.d.ts.map +1 -0
  204. package/dist/runtime/spawn-plan.js +107 -0
  205. package/dist/runtime/spawn-plan.js.map +1 -0
  206. package/dist/runtime/spend.d.ts +41 -0
  207. package/dist/runtime/spend.d.ts.map +1 -0
  208. package/dist/runtime/spend.js +0 -0
  209. package/dist/runtime/spend.js.map +1 -0
  210. package/dist/runtime/sub-agent-runner.d.ts +19 -0
  211. package/dist/runtime/sub-agent-runner.d.ts.map +1 -0
  212. package/dist/runtime/sub-agent-runner.js +47 -0
  213. package/dist/runtime/sub-agent-runner.js.map +1 -0
  214. package/dist/safety/grants.d.ts +7 -0
  215. package/dist/safety/grants.d.ts.map +1 -0
  216. package/dist/safety/grants.js +53 -0
  217. package/dist/safety/grants.js.map +1 -0
  218. package/dist/safety/index.d.ts +72 -0
  219. package/dist/safety/index.d.ts.map +1 -0
  220. package/dist/safety/index.js +464 -0
  221. package/dist/safety/index.js.map +1 -0
  222. package/dist/safety/types.d.ts +254 -0
  223. package/dist/safety/types.d.ts.map +1 -0
  224. package/dist/safety/types.js +3 -0
  225. package/dist/safety/types.js.map +1 -0
  226. package/dist/skills/index.d.ts +4 -0
  227. package/dist/skills/index.d.ts.map +1 -0
  228. package/dist/skills/index.js +463 -0
  229. package/dist/skills/index.js.map +1 -0
  230. package/dist/skills/types.d.ts +177 -0
  231. package/dist/skills/types.d.ts.map +1 -0
  232. package/dist/skills/types.js +3 -0
  233. package/dist/skills/types.js.map +1 -0
  234. package/dist/testing/clock.d.ts +8 -0
  235. package/dist/testing/clock.d.ts.map +1 -0
  236. package/dist/testing/clock.js +13 -0
  237. package/dist/testing/clock.js.map +1 -0
  238. package/dist/testing/effect-verifier.d.ts +15 -0
  239. package/dist/testing/effect-verifier.d.ts.map +1 -0
  240. package/dist/testing/effect-verifier.js +27 -0
  241. package/dist/testing/effect-verifier.js.map +1 -0
  242. package/dist/testing/index.d.ts +5 -0
  243. package/dist/testing/index.d.ts.map +1 -0
  244. package/dist/testing/index.js +5 -0
  245. package/dist/testing/index.js.map +1 -0
  246. package/dist/testing/provider-fake.d.ts +14 -0
  247. package/dist/testing/provider-fake.d.ts.map +1 -0
  248. package/dist/testing/provider-fake.js +18 -0
  249. package/dist/testing/provider-fake.js.map +1 -0
  250. package/dist/testing/sandbox-stub.d.ts +15 -0
  251. package/dist/testing/sandbox-stub.d.ts.map +1 -0
  252. package/dist/testing/sandbox-stub.js +15 -0
  253. package/dist/testing/sandbox-stub.js.map +1 -0
  254. package/dist/tools/index.d.ts +11 -0
  255. package/dist/tools/index.d.ts.map +1 -0
  256. package/dist/tools/index.js +0 -0
  257. package/dist/tools/index.js.map +1 -0
  258. package/dist/tools/types.d.ts +138 -0
  259. package/dist/tools/types.d.ts.map +1 -0
  260. package/dist/tools/types.js +4 -0
  261. package/dist/tools/types.js.map +1 -0
  262. package/dist/triggers/index.d.ts +4 -0
  263. package/dist/triggers/index.d.ts.map +1 -0
  264. package/dist/triggers/index.js +187 -0
  265. package/dist/triggers/index.js.map +1 -0
  266. package/dist/triggers/types.d.ts +74 -0
  267. package/dist/triggers/types.d.ts.map +1 -0
  268. package/dist/triggers/types.js +5 -0
  269. package/dist/triggers/types.js.map +1 -0
  270. package/package.json +36 -0
@@ -0,0 +1,470 @@
1
+ import { createHash } from 'node:crypto';
2
+ // ---------------------------------------------------------------------------
3
+ // Determinism helpers (node:crypto; §3, ADR-0017/0029)
4
+ // ---------------------------------------------------------------------------
5
+ function sha256(input) {
6
+ return createHash('sha256').update(input).digest('hex');
7
+ }
8
+ /** Equivalence-class key as a stable string — paraphrase-safe (ADR-0030). */
9
+ function factKeyId(k) {
10
+ return `${k.entity}‖${k.relation}‖${k.object}`;
11
+ }
12
+ /** Trust/permanence fields the model output may never carry (CSO-C3, ADR-0029). */
13
+ const TRUST_FIELDS = ['is_human_confirmed', 'isHumanConfirmed', 'human_confirmed', 'permanence', 'trusted'];
14
+ /** Strip every trust field; nightly never sets is_human_confirmed (AC-10-8/9). */
15
+ function stripTrustFields(op) {
16
+ const stripped = {};
17
+ for (const [key, value] of Object.entries(op)) {
18
+ if (TRUST_FIELDS.includes(key))
19
+ continue;
20
+ stripped[key] = value;
21
+ }
22
+ return stripped;
23
+ }
24
+ function opFactKey(op) {
25
+ if (op.kind === 'ADD' || op.kind === 'UPDATE')
26
+ return op.factKey;
27
+ return null;
28
+ }
29
+ class NightlyError extends Error {
30
+ }
31
+ // ---------------------------------------------------------------------------
32
+ // makeConsolidationRunner — deterministic orchestration (§5). The model appears
33
+ // only as the generator (drafts) and the blind judge (grades a quarantined diff);
34
+ // every irreversible step is code-gated, preconditioned, snapshot-reversible.
35
+ // ---------------------------------------------------------------------------
36
+ export function makeConsolidationRunner(deps) {
37
+ // Staging persists across run()/promote within one runner instance (the
38
+ // hold-default: nothing is promoted until a human taps Approve — §8, AC-10-28).
39
+ const memoryPatches = [];
40
+ const skillPatches = [];
41
+ const lintPatches = [];
42
+ const emit = (event) => deps.emit?.(event);
43
+ // --- resurrection-guard invocation (logic owned by Memory 03; ADR-0030) ---
44
+ // FactKey equivalence-class match catches paraphrases, not surface text
45
+ // (AC-10-12). guardAvailable=false fails closed (AC-10-22).
46
+ const tombstoneIds = () => new Set((deps.tombstones ?? []).map(factKeyId));
47
+ const guardBlocks = (op) => {
48
+ deps.onGuardCheck?.();
49
+ const key = opFactKey(op);
50
+ if (key === null)
51
+ return false;
52
+ return tombstoneIds().has(factKeyId(key));
53
+ };
54
+ // --- the deterministic forget filter at ingestion (Stage 1; AC-10-2) ---
55
+ const normalizedLog = () => {
56
+ const raw = deps.rawDayLog ?? { date: '2026-06-11', records: [] };
57
+ const isForgotten = deps.isForgotten;
58
+ if (!isForgotten)
59
+ return raw;
60
+ return { date: raw.date, records: raw.records.filter((r) => !isForgotten(r)) };
61
+ };
62
+ // --- the live fact set: only invalid_at IS NULL reaches the generator (AC-10-3) ---
63
+ const liveFacts = () => (deps.facts ?? []).filter((f) => f.invalidAt === null);
64
+ // --- quarantine the diff before the judge ever reads it (CSO-M5; AC-10-7) ---
65
+ const quarantine = (diff) => ({
66
+ quarantined: true,
67
+ body: JSON.stringify(diff.added.concat(diff.updated).map(stripTrustFields)),
68
+ diff,
69
+ });
70
+ const stageMemoryPatch = (op, judged) => {
71
+ const body = JSON.stringify(stripTrustFields(op));
72
+ const id = sha256(`memory:${body}:${memoryPatches.length}`);
73
+ deps.stagingWrite?.(`staging/memory/${id}.patch`);
74
+ memoryPatches.push({ id, kind: 'memory', body, hashAtAccept: sha256(body), judged, op });
75
+ };
76
+ const stageSkillPatch = (skill) => {
77
+ const body = JSON.stringify(skill);
78
+ const id = sha256(`skill:${body}:${skillPatches.length}`);
79
+ deps.stagingWrite?.(`staging/skills/${id}`);
80
+ skillPatches.push({ id, kind: 'skill', body, hashAtAccept: sha256(body), judged: true });
81
+ };
82
+ // --- Stage 1: content-addressed session archival (AC-10-1) ---
83
+ const runArchival = (config, card) => {
84
+ const archive = deps.archive;
85
+ if (!archive)
86
+ return;
87
+ const date = card.runDate;
88
+ for (const session of archive.sessions()) {
89
+ const contentHash = sha256(session.transcript).slice(0, 16);
90
+ const path = `${config.archiveDir}sessions/${date}/${contentHash}.md`;
91
+ // Content-addressed idempotency: a re-run never double-writes (AC-10-1).
92
+ if (archive.has(path))
93
+ continue;
94
+ archive.write(path, session.transcript);
95
+ archivedThisRun = true;
96
+ // Trace-based self-verification (AC-10-26, ADR-0017): probe the claim.
97
+ if (deps.traceProbe && !deps.traceProbe.fileExists(path)) {
98
+ card.verificationMisses.push({
99
+ stage: 'archival',
100
+ claimedEffect: `archive ${path}`,
101
+ traceFailure: 'file absent at content-addressed path',
102
+ });
103
+ }
104
+ }
105
+ };
106
+ // --- Stage 2: memory consolidation (generator→validators→guard→judge) ---
107
+ const runConsolidation = async (log, card) => {
108
+ let proposal;
109
+ try {
110
+ proposal = await deps.generator.proposeMemoryOps(log, liveFacts());
111
+ }
112
+ catch {
113
+ // Provider/generator unavailable: skip stage 2 (degrade; §7).
114
+ return;
115
+ }
116
+ for (const rawOp of proposal.ops) {
117
+ // STRIP is_human_confirmed from every op before anything else (CSO-C3).
118
+ const op = stripTrustFields(rawOp);
119
+ // Validators run BEFORE the judge; a failure drops the candidate (AC-10-4/5).
120
+ const verdict = deps.validators.check(op);
121
+ if (!verdict.ok)
122
+ continue;
123
+ // Resurrection-guard runs BEFORE the judge; a match is blocked to the
124
+ // "Tried to resurrect" card section, never passed to the judge (AC-10-10/12).
125
+ if (guardBlocks(op)) {
126
+ card.triedToResurrect.push({ op, reason: 'tombstone' });
127
+ emit('night.resurrection.blocked');
128
+ continue;
129
+ }
130
+ // Judge reads ONLY the quarantined diff for this op (AC-10-6/7). A judge
131
+ // that errors/times out is unavailable: hold the candidate unjudged in
132
+ // staging, never auto-accept (AC-10-21; §7 fail-safe degrade).
133
+ let verdictJudge;
134
+ try {
135
+ verdictJudge = await deps.judge.grade(quarantine({ added: [op], removed: [], updated: [] }));
136
+ }
137
+ catch {
138
+ stageMemoryPatch(op, false);
139
+ continue;
140
+ }
141
+ if (verdictJudge === 'accept') {
142
+ emit('night.judge.accepted');
143
+ stageMemoryPatch(op, true);
144
+ card.memoryEdits.push(stagedItem(memoryPatches[memoryPatches.length - 1], summarizeOp(op)));
145
+ }
146
+ }
147
+ };
148
+ // --- Stage 2b: lint pass (generator-assisted; graceful degradation) ---
149
+ const runLintPassInternal = async () => {
150
+ const inputs = deps.lintInputs ?? { orphans: [], staleAnnotations: [], brokenEdges: [] };
151
+ // Generator unavailability degrades the whole pass (AC-10-31).
152
+ try {
153
+ await deps.generator.draftSkills(normalizedLog());
154
+ }
155
+ catch {
156
+ return {
157
+ orphans: [],
158
+ staleAnnotations: [],
159
+ brokenEdges: [],
160
+ skipped: true,
161
+ skipReason: 'lint pass skipped: generator unavailable',
162
+ };
163
+ }
164
+ // Remediation proposals are staged, never auto-promoted (AC-10-29).
165
+ for (const orphan of inputs.orphans) {
166
+ const body = JSON.stringify(orphan);
167
+ const id = sha256(`lint-orphan:${body}:${lintPatches.length}`);
168
+ deps.stagingWrite?.(`staging/lint/orphans/${id}`);
169
+ lintPatches.push({ id, kind: 'lint-orphan', body, hashAtAccept: sha256(body), judged: false });
170
+ }
171
+ for (const stale of inputs.staleAnnotations) {
172
+ const body = JSON.stringify(stale);
173
+ const id = sha256(`lint-stale:${body}:${lintPatches.length}`);
174
+ deps.stagingWrite?.(`staging/lint/stale/${id}`);
175
+ lintPatches.push({ id, kind: 'lint-stale', body, hashAtAccept: sha256(body), judged: false });
176
+ }
177
+ for (const edge of inputs.brokenEdges) {
178
+ const body = JSON.stringify(edge);
179
+ const id = sha256(`lint-edge:${body}:${lintPatches.length}`);
180
+ deps.stagingWrite?.(`staging/lint/broken-edges/${id}`);
181
+ lintPatches.push({ id, kind: 'lint-broken-edge', body, hashAtAccept: sha256(body), judged: false });
182
+ }
183
+ // Broken edges are listed, never silently deleted (AC-10-30). No onDelete call.
184
+ return {
185
+ orphans: inputs.orphans,
186
+ staleAnnotations: inputs.staleAnnotations,
187
+ brokenEdges: inputs.brokenEdges,
188
+ skipped: false,
189
+ };
190
+ };
191
+ // --- Stage 3: skill hygiene (same generator→validators→judge discipline) ---
192
+ const runSkillHygiene = async (log, card) => {
193
+ let drafts;
194
+ try {
195
+ drafts = await deps.generator.draftSkills(log);
196
+ }
197
+ catch {
198
+ return; // generator down — degrade (§7)
199
+ }
200
+ for (const skill of drafts) {
201
+ // Transient-origin skills are flagged for retirement, never auto-promoted
202
+ // (ADR-0025; AC-10-23). This is advisory only — an informational card line
203
+ // with no promotion path — so it carries no staged patch (omitting the
204
+ // wrong sha256(skill.id) hash that made it un-approvable anyway).
205
+ if (skill.provenance === 'transient') {
206
+ card.skillChanges.push({
207
+ summary: `flagged for retirement (transient provenance): ${skill.name}`,
208
+ });
209
+ }
210
+ // has_check_section fails deterministically BEFORE the judge (AC-10-23).
211
+ const verdict = deps.validators.check(skill);
212
+ if (!verdict.ok)
213
+ continue;
214
+ const verdictJudge = await deps.judge.grade({
215
+ quarantined: true,
216
+ body: JSON.stringify(skill),
217
+ diff: { added: [], removed: [], updated: [] },
218
+ });
219
+ if (verdictJudge === 'accept') {
220
+ stageSkillPatch(skill);
221
+ card.skillChanges.push(stagedItem(skillPatches[skillPatches.length - 1], `skill: ${skill.name}`));
222
+ }
223
+ }
224
+ };
225
+ // Tracks whether crash-recovery already re-ran the prior crashed commit this
226
+ // run. This is NOT a substitute for backing up NEW archival/hygiene work the
227
+ // current run produces — those still need their own Stage-5 push (Eng-7).
228
+ let recoveryPushedThisRun = false;
229
+ let hygieneRan = false;
230
+ let archivedThisRun = false;
231
+ // --- Stage 4: DB/disk hygiene (under Safety carve-out; AC-10-24) ---
232
+ const runDiskHygiene = (card) => {
233
+ const h = deps.hygiene;
234
+ if (!h)
235
+ return;
236
+ hygieneRan = true;
237
+ // Pre-VACUUM DB snapshot FIRST — reversibility before any destructive op.
238
+ h.snapshot();
239
+ const integrityOk = h.integrityCheck();
240
+ const report = {
241
+ vacuumed: false,
242
+ walCheckpointed: false,
243
+ logRotated: false,
244
+ dockerPruned: false,
245
+ worktreePruned: false,
246
+ dbIntegrityOk: integrityOk,
247
+ };
248
+ if (integrityOk) {
249
+ h.vacuum();
250
+ report.vacuumed = true;
251
+ h.optimizeFts();
252
+ h.walCheckpoint();
253
+ report.walCheckpointed = true;
254
+ h.rotateLogs();
255
+ report.logRotated = true;
256
+ h.dockerPrune();
257
+ report.dockerPruned = true;
258
+ }
259
+ card.hygieneReport = report;
260
+ };
261
+ // --- Stage 5: git-push backup (fast-forward only; never --force; AC-10-25) ---
262
+ const runBackup = async (card) => {
263
+ const git = deps.git;
264
+ if (!git)
265
+ return;
266
+ // Only back up when the night produced durable repo work (archive/hygiene);
267
+ // staged-but-unpromoted proposals are pushed by the promotion path, not here.
268
+ // A recovery-only run (resumed a prior commit, produced no new durable work)
269
+ // already pushed in recoverFromJournal — skip a pointless empty push (Eng-7).
270
+ if (recoveryPushedThisRun && !archivedThisRun && !hygieneRan)
271
+ return;
272
+ if (!archivedThisRun && !hygieneRan)
273
+ return;
274
+ let attempt = 0;
275
+ let last = null;
276
+ // Retry on failure; non-fatal; always reported (§7). Never pass force.
277
+ while (attempt < 2) {
278
+ attempt++;
279
+ last = await git.commitAndPush();
280
+ if (last.ok)
281
+ break;
282
+ }
283
+ if (last && last.ok) {
284
+ card.backupStatus = { pushed: true, commitHash: last.commitHash, retried: attempt > 1 };
285
+ emit('night.backup.pushed');
286
+ // Read-back verification (AC-10-32): probe the remote ref advanced.
287
+ if (deps.traceProbe && !deps.traceProbe.refAdvanced(last.commitHash)) {
288
+ card.verificationMisses.push({
289
+ stage: 'backup',
290
+ claimedEffect: `push ${last.commitHash}`,
291
+ traceFailure: 'remote ref did not advance',
292
+ });
293
+ }
294
+ }
295
+ else {
296
+ card.backupStatus = {
297
+ pushed: false,
298
+ failureReason: last ? last.failureReason : 'unknown',
299
+ retried: attempt > 1,
300
+ };
301
+ emit('night.backup.failed');
302
+ }
303
+ };
304
+ // --- crash-recovery: resume an interrupted commit at the right step (Eng-7) ---
305
+ const recoverFromJournal = async (card) => {
306
+ const journal = deps.journal;
307
+ if (!journal)
308
+ return;
309
+ for (const entry of journal.entries) {
310
+ if (entry.state === 'reindexed' && entry.gitCommitHash === undefined) {
311
+ // Crash after the memory txn, before git push: resume at git only,
312
+ // do NOT re-run the txn; git commit/push is idempotent (AC-10-16).
313
+ if (deps.git) {
314
+ await deps.git.commitAndPush();
315
+ recoveryPushedThisRun = true;
316
+ }
317
+ }
318
+ else if (entry.state === 'pending') {
319
+ // Crash during the memory txn: SQLite rolled back. Re-attempt from the
320
+ // start, re-passing the resurrection-guard (AC-10-17).
321
+ if (guardBlocks(entry.op)) {
322
+ card.triedToResurrect.push({ op: entry.op, reason: 'tombstone' });
323
+ emit('night.resurrection.blocked');
324
+ }
325
+ // (A clean re-attempt would re-stage; the guard block stops here — no push.)
326
+ }
327
+ }
328
+ };
329
+ // ----- card / item helpers -----
330
+ const summarizeOp = (op) => op.kind === 'ADD' || op.kind === 'UPDATE' ? `${op.kind} ${factKeyId(op.factKey)}` : op.kind;
331
+ const stagedItem = (patch, summary) => ({
332
+ patch: { id: patch.id, kind: patch.kind, body: patch.body, hashAtAccept: patch.hashAtAccept, judged: patch.judged },
333
+ summary,
334
+ });
335
+ const emptyCard = (runDate) => ({
336
+ runDate,
337
+ memoryEdits: [],
338
+ triedToResurrect: [],
339
+ skillChanges: [],
340
+ lintReport: { orphans: [], staleAnnotations: [], brokenEdges: [], skipped: false },
341
+ hygieneReport: {
342
+ vacuumed: false,
343
+ walCheckpointed: false,
344
+ logRotated: false,
345
+ dockerPruned: false,
346
+ worktreePruned: false,
347
+ dbIntegrityOk: true,
348
+ },
349
+ backupStatus: { pushed: false, retried: false },
350
+ verificationMisses: [],
351
+ cost: { generatorTokens: 0, judgeTokens: 0, lintPassTokens: 0, totalUsd: 0 },
352
+ });
353
+ return {
354
+ async run(config) {
355
+ const runDate = deps.clock.now().toISOString().slice(0, 10);
356
+ const card = emptyCard(runDate);
357
+ // Least-privilege startup assertion — fail closed BEFORE any stage (AC-10-18).
358
+ const env = deps.envContext;
359
+ if (env) {
360
+ if (env.hasProdCreds) {
361
+ throw new NightlyError('least-privilege violated: prod credentials present — fail-closed');
362
+ }
363
+ const beyondBackup = env.egressAllowlist.filter((h) => h !== config.backupRemote);
364
+ if (beyondBackup.length > 0) {
365
+ throw new NightlyError('least-privilege violated: egress exceeds backup remote — fail-closed');
366
+ }
367
+ }
368
+ // Exclusive run lock — PID-reuse-safe (AC-10-19/20; CSO-H6).
369
+ const acquired = deps.lock.acquire();
370
+ if (!acquired.ok) {
371
+ if (acquired.heldForMs > config.maxHeldMs) {
372
+ // Held too long: alert, never blind-steal (AC-10-20).
373
+ emit('night.lock.held_too_long');
374
+ throw new NightlyError('night.lock.held_too_long: lock held past maxHeldMs; not auto-stolen');
375
+ }
376
+ // A live prior run holds it: abort, never run two nights concurrently (AC-10-19).
377
+ emit('night.lock.contended');
378
+ throw new NightlyError('night.lock.contended: prior run still alive — abort');
379
+ }
380
+ try {
381
+ emit('night.started');
382
+ // Crash recovery first: resume any interrupted commit idempotently (Eng-7).
383
+ await recoverFromJournal(card);
384
+ const log = normalizedLog();
385
+ runArchival(config, card); // Stage 1
386
+ await runConsolidation(log, card); // Stage 2
387
+ card.lintReport = await runLintPassInternal(); // Stage 2b
388
+ await runSkillHygiene(log, card); // Stage 3
389
+ runDiskHygiene(card); // Stage 4
390
+ await runBackup(card); // Stage 5
391
+ emit('night.card.staged');
392
+ const stagesCompleted = [
393
+ 'archival', 'consolidation', 'lint-pass', 'skill-hygiene', 'disk-hygiene', 'backup',
394
+ ];
395
+ return { runDate, stagesCompleted, card, lockToken: acquired.token };
396
+ }
397
+ finally {
398
+ deps.lock.release(acquired.token);
399
+ }
400
+ },
401
+ async runLintPass() {
402
+ return runLintPassInternal();
403
+ },
404
+ async getStagedProposals() {
405
+ const strip = (p) => ({
406
+ id: p.id, kind: p.kind, body: p.body, hashAtAccept: p.hashAtAccept, judged: p.judged,
407
+ });
408
+ return {
409
+ memoryPatches: memoryPatches.map(strip),
410
+ skillPatches: skillPatches.map(strip),
411
+ lintPatches: lintPatches.map(strip),
412
+ };
413
+ },
414
+ // PROMOTION on the human Approve tap (via Safety 05). This component never
415
+ // sets is_human_confirmed; it gates the commit deterministically (§5).
416
+ async approveStagedItem(id) {
417
+ const patch = [...memoryPatches, ...skillPatches, ...lintPatches].find((p) => p.id === id);
418
+ if (!patch)
419
+ throw new NightlyError(`no staged item ${id}`);
420
+ // Judge gate is a safety control: an item that was never judged (e.g. judge
421
+ // model unavailable → judged:false) must be held, never auto-accepted. Fail
422
+ // closed before any commit/reindex (AC-10-21; §7 fail-safe degrade).
423
+ if (!patch.judged) {
424
+ throw new NightlyError('unjudged staged item — held; fail-closed (judge gate; no commit or reindex)');
425
+ }
426
+ // TOCTOU: the staged body must be byte-identical to the judge-accepted one
427
+ // (hashAtPromote == hashAtAccept), else abort the item (AC-10-13).
428
+ const currentBody = deps.currentBodyForPatch ? deps.currentBodyForPatch(patch.id, patch.body) : patch.body;
429
+ if (sha256(currentBody) !== patch.hashAtAccept) {
430
+ throw new NightlyError('TOCTOU: hashAtPromote != hashAtAccept — item aborted to human review');
431
+ }
432
+ // Memory/resurrection-guard must be available — else fail closed (AC-10-22).
433
+ if (deps.guardAvailable && !deps.guardAvailable()) {
434
+ throw new NightlyError('resurrection-guard unavailable — fail-closed; no commit or reindex');
435
+ }
436
+ // Re-run the resurrection-guard on the promotion path, BEFORE reindex
437
+ // (AC-10-11). A match blocks the item; nothing is reindexed or committed.
438
+ if (patch.op && guardBlocks(patch.op)) {
439
+ emit('night.resurrection.blocked');
440
+ throw new NightlyError('resurrection-guard blocked at promotion — routed to human review');
441
+ }
442
+ // COMMIT ORDER (Eng-7): (1) atomic SQLite txn flips invalid_at + reindex,
443
+ // (2) git commit/push only AFTER the txn durably commits (AC-10-15).
444
+ const applyTxn = async () => {
445
+ const committedId = deps.commitOp && patch.op ? await deps.commitOp(patch.op) : null;
446
+ if (committedId)
447
+ deps.reindex?.(committedId); // memory.commit already reindexes; this is a harmless extra FTS sync
448
+ deps.journal?.record({
449
+ runDate: deps.clock.now().toISOString().slice(0, 10),
450
+ stage: 'consolidation',
451
+ op: patch.op ?? { kind: 'NOOP', factId: patch.id },
452
+ factIds: committedId ? [committedId] : [patch.id],
453
+ snapshotRef: patch.hashAtAccept,
454
+ reindexDone: true,
455
+ state: 'reindexed',
456
+ });
457
+ };
458
+ if (deps.memoryTxn) {
459
+ await deps.memoryTxn(applyTxn);
460
+ }
461
+ else {
462
+ await applyTxn();
463
+ }
464
+ if (deps.git)
465
+ await deps.git.commitAndPush();
466
+ emit('night.commit.applied');
467
+ },
468
+ };
469
+ }
470
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/nightly/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AA0ExC,8EAA8E;AAC9E,uDAAuD;AACvD,8EAA8E;AAE9E,SAAS,MAAM,CAAC,KAAa;IAC3B,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;AACzD,CAAC;AAED,6EAA6E;AAC7E,SAAS,SAAS,CAAC,CAAU;IAC3B,OAAO,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,MAAM,EAAE,CAAA;AAChD,CAAC;AAED,mFAAmF;AACnF,MAAM,YAAY,GAAG,CAAC,oBAAoB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,YAAY,EAAE,SAAS,CAAC,CAAA;AAE3G,kFAAkF;AAClF,SAAS,gBAAgB,CAAC,EAAS;IACjC,MAAM,QAAQ,GAA4B,EAAE,CAAA;IAC5C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,EAA6B,CAAC,EAAE,CAAC;QACzE,IAAI,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC;YAAE,SAAQ;QACxC,QAAQ,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;IACvB,CAAC;IACD,OAAO,QAA4B,CAAA;AACrC,CAAC;AAED,SAAS,SAAS,CAAC,EAAS;IAC1B,IAAI,EAAE,CAAC,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,EAAE,CAAC,OAAO,CAAA;IAChE,OAAO,IAAI,CAAA;AACb,CAAC;AAWD,MAAM,YAAa,SAAQ,KAAK;CAAG;AAEnC,8EAA8E;AAC9E,gFAAgF;AAChF,kFAAkF;AAClF,8EAA8E;AAC9E,8EAA8E;AAE9E,MAAM,UAAU,uBAAuB,CAAC,IAAuB;IAC7D,wEAAwE;IACxE,gFAAgF;IAChF,MAAM,aAAa,GAAqB,EAAE,CAAA;IAC1C,MAAM,YAAY,GAAqB,EAAE,CAAA;IACzC,MAAM,WAAW,GAAqB,EAAE,CAAA;IAExC,MAAM,IAAI,GAAG,CAAC,KAAa,EAAQ,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAA;IAExD,6EAA6E;IAC7E,wEAAwE;IACxE,4DAA4D;IAC5D,MAAM,YAAY,GAAG,GAAgB,EAAE,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAA;IAEvF,MAAM,WAAW,GAAG,CAAC,EAAS,EAAW,EAAE;QACzC,IAAI,CAAC,YAAY,EAAE,EAAE,CAAA;QACrB,MAAM,GAAG,GAAG,SAAS,CAAC,EAAE,CAAC,CAAA;QACzB,IAAI,GAAG,KAAK,IAAI;YAAE,OAAO,KAAK,CAAA;QAC9B,OAAO,YAAY,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAA;IAC3C,CAAC,CAAA;IAED,0EAA0E;IAC1E,MAAM,aAAa,GAAG,GAAqB,EAAE;QAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,EAAE,EAAE,CAAA;QACjE,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAA;QACpC,IAAI,CAAC,WAAW;YAAE,OAAO,GAAG,CAAA;QAC5B,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IAChF,CAAC,CAAA;IAED,qFAAqF;IACrF,MAAM,SAAS,GAAG,GAAW,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,IAAI,CAAC,CAAA;IAEtF,+EAA+E;IAC/E,MAAM,UAAU,GAAG,CAAC,IAAU,EAAmB,EAAE,CAAC,CAAC;QACnD,WAAW,EAAE,IAAI;QACjB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;QAC3E,IAAI;KACL,CAAC,CAAA;IAEF,MAAM,gBAAgB,GAAG,CAAC,EAAS,EAAE,MAAe,EAAQ,EAAE;QAC5D,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC,CAAA;QACjD,MAAM,EAAE,GAAG,MAAM,CAAC,UAAU,IAAI,IAAI,aAAa,CAAC,MAAM,EAAE,CAAC,CAAA;QAC3D,IAAI,CAAC,YAAY,EAAE,CAAC,kBAAkB,EAAE,QAAQ,CAAC,CAAA;QACjD,aAAa,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAA;IAC1F,CAAC,CAAA;IAED,MAAM,eAAe,GAAG,CAAC,KAAiB,EAAQ,EAAE;QAClD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;QAClC,MAAM,EAAE,GAAG,MAAM,CAAC,SAAS,IAAI,IAAI,YAAY,CAAC,MAAM,EAAE,CAAC,CAAA;QACzD,IAAI,CAAC,YAAY,EAAE,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAA;QAC3C,YAAY,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAA;IAC1F,CAAC,CAAA;IAED,gEAAgE;IAChE,MAAM,WAAW,GAAG,CAAC,MAAqB,EAAE,IAAiB,EAAQ,EAAE;QACrE,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAA;QAC5B,IAAI,CAAC,OAAO;YAAE,OAAM;QACpB,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAA;QACzB,KAAK,MAAM,OAAO,IAAI,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;YACzC,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;YAC3D,MAAM,IAAI,GAAG,GAAG,MAAM,CAAC,UAAU,YAAY,IAAI,IAAI,WAAW,KAAK,CAAA;YACrE,yEAAyE;YACzE,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;gBAAE,SAAQ;YAC/B,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,UAAU,CAAC,CAAA;YACvC,eAAe,GAAG,IAAI,CAAA;YACtB,uEAAuE;YACvE,IAAI,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBACzD,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC;oBAC3B,KAAK,EAAE,UAAU;oBACjB,aAAa,EAAE,WAAW,IAAI,EAAE;oBAChC,YAAY,EAAE,uCAAuC;iBACtD,CAAC,CAAA;YACJ,CAAC;QACH,CAAC;IACH,CAAC,CAAA;IAED,2EAA2E;IAC3E,MAAM,gBAAgB,GAAG,KAAK,EAAE,GAAqB,EAAE,IAAiB,EAAiB,EAAE;QACzF,IAAI,QAAsC,CAAA;QAC1C,IAAI,CAAC;YACH,QAAQ,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,GAAG,EAAE,SAAS,EAAE,CAAC,CAAA;QACpE,CAAC;QAAC,MAAM,CAAC;YACP,8DAA8D;YAC9D,OAAM;QACR,CAAC;QAED,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,GAAG,EAAE,CAAC;YACjC,wEAAwE;YACxE,MAAM,EAAE,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAA;YAElC,8EAA8E;YAC9E,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;YACzC,IAAI,CAAC,OAAO,CAAC,EAAE;gBAAE,SAAQ;YAEzB,sEAAsE;YACtE,8EAA8E;YAC9E,IAAI,WAAW,CAAC,EAAE,CAAC,EAAE,CAAC;gBACpB,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAA;gBACvD,IAAI,CAAC,4BAA4B,CAAC,CAAA;gBAClC,SAAQ;YACV,CAAC;YAED,yEAAyE;YACzE,uEAAuE;YACvE,+DAA+D;YAC/D,IAAI,YAA0C,CAAA;YAC9C,IAAI,CAAC;gBACH,YAAY,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC,CAAA;YAC9F,CAAC;YAAC,MAAM,CAAC;gBACP,gBAAgB,CAAC,EAAE,EAAE,KAAK,CAAC,CAAA;gBAC3B,SAAQ;YACV,CAAC;YACD,IAAI,YAAY,KAAK,QAAQ,EAAE,CAAC;gBAC9B,IAAI,CAAC,sBAAsB,CAAC,CAAA;gBAC5B,gBAAgB,CAAC,EAAE,EAAE,IAAI,CAAC,CAAA;gBAC1B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAE,EAAE,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;YAC9F,CAAC;QACH,CAAC;IACH,CAAC,CAAA;IAED,yEAAyE;IACzE,MAAM,mBAAmB,GAAG,KAAK,IAA6B,EAAE;QAC9D,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,CAAA;QACxF,+DAA+D;QAC/D,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,aAAa,EAAE,CAAC,CAAA;QACnD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO;gBACL,OAAO,EAAE,EAAE;gBACX,gBAAgB,EAAE,EAAE;gBACpB,WAAW,EAAE,EAAE;gBACf,OAAO,EAAE,IAAI;gBACb,UAAU,EAAE,0CAA0C;aACvD,CAAA;QACH,CAAC;QACD,oEAAoE;QACpE,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACpC,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;YACnC,MAAM,EAAE,GAAG,MAAM,CAAC,eAAe,IAAI,IAAI,WAAW,CAAC,MAAM,EAAE,CAAC,CAAA;YAC9D,IAAI,CAAC,YAAY,EAAE,CAAC,wBAAwB,EAAE,EAAE,CAAC,CAAA;YACjD,WAAW,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAA;QAChG,CAAC;QACD,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,gBAAgB,EAAE,CAAC;YAC5C,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;YAClC,MAAM,EAAE,GAAG,MAAM,CAAC,cAAc,IAAI,IAAI,WAAW,CAAC,MAAM,EAAE,CAAC,CAAA;YAC7D,IAAI,CAAC,YAAY,EAAE,CAAC,sBAAsB,EAAE,EAAE,CAAC,CAAA;YAC/C,WAAW,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAA;QAC/F,CAAC;QACD,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;YACtC,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;YACjC,MAAM,EAAE,GAAG,MAAM,CAAC,aAAa,IAAI,IAAI,WAAW,CAAC,MAAM,EAAE,CAAC,CAAA;YAC5D,IAAI,CAAC,YAAY,EAAE,CAAC,6BAA6B,EAAE,EAAE,CAAC,CAAA;YACtD,WAAW,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAA;QACrG,CAAC;QACD,gFAAgF;QAChF,OAAO;YACL,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;YACzC,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,OAAO,EAAE,KAAK;SACf,CAAA;IACH,CAAC,CAAA;IAED,8EAA8E;IAC9E,MAAM,eAAe,GAAG,KAAK,EAAE,GAAqB,EAAE,IAAiB,EAAiB,EAAE;QACxF,IAAI,MAAoB,CAAA;QACxB,IAAI,CAAC;YACH,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA;QAChD,CAAC;QAAC,MAAM,CAAC;YACP,OAAM,CAAC,gCAAgC;QACzC,CAAC;QACD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,0EAA0E;YAC1E,2EAA2E;YAC3E,uEAAuE;YACvE,kEAAkE;YAClE,IAAI,KAAK,CAAC,UAAU,KAAK,WAAW,EAAE,CAAC;gBACrC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;oBACrB,OAAO,EAAE,kDAAkD,KAAK,CAAC,IAAI,EAAE;iBACxE,CAAC,CAAA;YACJ,CAAC;YACD,yEAAyE;YACzE,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;YAC5C,IAAI,CAAC,OAAO,CAAC,EAAE;gBAAE,SAAQ;YACzB,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;gBAC1C,WAAW,EAAE,IAAI;gBACjB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;gBAC3B,IAAI,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;aAC9C,CAAC,CAAA;YACF,IAAI,YAAY,KAAK,QAAQ,EAAE,CAAC;gBAC9B,eAAe,CAAC,KAAK,CAAC,CAAA;gBACtB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAE,EAAE,UAAU,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;YACpG,CAAC;QACH,CAAC;IACH,CAAC,CAAA;IAED,6EAA6E;IAC7E,6EAA6E;IAC7E,0EAA0E;IAC1E,IAAI,qBAAqB,GAAG,KAAK,CAAA;IACjC,IAAI,UAAU,GAAG,KAAK,CAAA;IACtB,IAAI,eAAe,GAAG,KAAK,CAAA;IAE3B,sEAAsE;IACtE,MAAM,cAAc,GAAG,CAAC,IAAiB,EAAQ,EAAE;QACjD,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAA;QACtB,IAAI,CAAC,CAAC;YAAE,OAAM;QACd,UAAU,GAAG,IAAI,CAAA;QACjB,0EAA0E;QAC1E,CAAC,CAAC,QAAQ,EAAE,CAAA;QACZ,MAAM,WAAW,GAAG,CAAC,CAAC,cAAc,EAAE,CAAA;QACtC,MAAM,MAAM,GAAkB;YAC5B,QAAQ,EAAE,KAAK;YACf,eAAe,EAAE,KAAK;YACtB,UAAU,EAAE,KAAK;YACjB,YAAY,EAAE,KAAK;YACnB,cAAc,EAAE,KAAK;YACrB,aAAa,EAAE,WAAW;SAC3B,CAAA;QACD,IAAI,WAAW,EAAE,CAAC;YAChB,CAAC,CAAC,MAAM,EAAE,CAAC;YAAC,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAA;YAClC,CAAC,CAAC,WAAW,EAAE,CAAA;YACf,CAAC,CAAC,aAAa,EAAE,CAAC;YAAC,MAAM,CAAC,eAAe,GAAG,IAAI,CAAA;YAChD,CAAC,CAAC,UAAU,EAAE,CAAC;YAAC,MAAM,CAAC,UAAU,GAAG,IAAI,CAAA;YACxC,CAAC,CAAC,WAAW,EAAE,CAAC;YAAC,MAAM,CAAC,YAAY,GAAG,IAAI,CAAA;QAC7C,CAAC;QACD,IAAI,CAAC,aAAa,GAAG,MAAM,CAAA;IAC7B,CAAC,CAAA;IAED,gFAAgF;IAChF,MAAM,SAAS,GAAG,KAAK,EAAE,IAAiB,EAAiB,EAAE;QAC3D,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAA;QACpB,IAAI,CAAC,GAAG;YAAE,OAAM;QAChB,4EAA4E;QAC5E,8EAA8E;QAC9E,6EAA6E;QAC7E,8EAA8E;QAC9E,IAAI,qBAAqB,IAAI,CAAC,eAAe,IAAI,CAAC,UAAU;YAAE,OAAM;QACpE,IAAI,CAAC,eAAe,IAAI,CAAC,UAAU;YAAE,OAAM;QAC3C,IAAI,OAAO,GAAG,CAAC,CAAA;QACf,IAAI,IAAI,GAAmF,IAAI,CAAA;QAC/F,uEAAuE;QACvE,OAAO,OAAO,GAAG,CAAC,EAAE,CAAC;YACnB,OAAO,EAAE,CAAA;YACT,IAAI,GAAG,MAAM,GAAG,CAAC,aAAa,EAAE,CAAA;YAChC,IAAI,IAAI,CAAC,EAAE;gBAAE,MAAK;QACpB,CAAC;QACD,IAAI,IAAI,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;YACpB,IAAI,CAAC,YAAY,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,OAAO,GAAG,CAAC,EAAE,CAAA;YACvF,IAAI,CAAC,qBAAqB,CAAC,CAAA;YAC3B,oEAAoE;YACpE,IAAI,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;gBACrE,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC;oBAC3B,KAAK,EAAE,QAAQ;oBACf,aAAa,EAAE,QAAQ,IAAI,CAAC,UAAU,EAAE;oBACxC,YAAY,EAAE,4BAA4B;iBAC3C,CAAC,CAAA;YACJ,CAAC;QACH,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,YAAY,GAAG;gBAClB,MAAM,EAAE,KAAK;gBACb,aAAa,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS;gBACpD,OAAO,EAAE,OAAO,GAAG,CAAC;aACrB,CAAA;YACD,IAAI,CAAC,qBAAqB,CAAC,CAAA;QAC7B,CAAC;IACH,CAAC,CAAA;IAED,iFAAiF;IACjF,MAAM,kBAAkB,GAAG,KAAK,EAAE,IAAiB,EAAiB,EAAE;QACpE,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAA;QAC5B,IAAI,CAAC,OAAO;YAAE,OAAM;QACpB,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpC,IAAI,KAAK,CAAC,KAAK,KAAK,WAAW,IAAI,KAAK,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;gBACrE,mEAAmE;gBACnE,mEAAmE;gBACnE,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;oBACb,MAAM,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAA;oBAC9B,qBAAqB,GAAG,IAAI,CAAA;gBAC9B,CAAC;YACH,CAAC;iBAAM,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;gBACrC,uEAAuE;gBACvE,uDAAuD;gBACvD,IAAI,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;oBAC1B,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAA;oBACjE,IAAI,CAAC,4BAA4B,CAAC,CAAA;gBACpC,CAAC;gBACD,6EAA6E;YAC/E,CAAC;QACH,CAAC;IACH,CAAC,CAAA;IAED,kCAAkC;IAClC,MAAM,WAAW,GAAG,CAAC,EAAS,EAAU,EAAE,CACxC,EAAE,CAAC,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,IAAI,SAAS,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAA;IAE7F,MAAM,UAAU,GAAG,CAAC,KAAkB,EAAE,OAAe,EAAmB,EAAE,CAAC,CAAC;QAC5E,KAAK,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,YAAY,EAAE,KAAK,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE;QACnH,OAAO;KACR,CAAC,CAAA;IAEF,MAAM,SAAS,GAAG,CAAC,OAAe,EAAe,EAAE,CAAC,CAAC;QACnD,OAAO;QACP,WAAW,EAAE,EAAE;QACf,gBAAgB,EAAE,EAAE;QACpB,YAAY,EAAE,EAAE;QAChB,UAAU,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE;QAClF,aAAa,EAAE;YACb,QAAQ,EAAE,KAAK;YACf,eAAe,EAAE,KAAK;YACtB,UAAU,EAAE,KAAK;YACjB,YAAY,EAAE,KAAK;YACnB,cAAc,EAAE,KAAK;YACrB,aAAa,EAAE,IAAI;SACpB;QACD,YAAY,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE;QAC/C,kBAAkB,EAAE,EAAE;QACtB,IAAI,EAAE,EAAE,eAAe,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE;KAC7E,CAAC,CAAA;IAEF,OAAO;QACL,KAAK,CAAC,GAAG,CAAC,MAAqB;YAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;YAC3D,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC,CAAA;YAE/B,+EAA+E;YAC/E,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAA;YAC3B,IAAI,GAAG,EAAE,CAAC;gBACR,IAAI,GAAG,CAAC,YAAY,EAAE,CAAC;oBACrB,MAAM,IAAI,YAAY,CAAC,kEAAkE,CAAC,CAAA;gBAC5F,CAAC;gBACD,MAAM,YAAY,GAAG,GAAG,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,MAAM,CAAC,YAAY,CAAC,CAAA;gBACjF,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC5B,MAAM,IAAI,YAAY,CAAC,sEAAsE,CAAC,CAAA;gBAChG,CAAC;YACH,CAAC;YAED,6DAA6D;YAC7D,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAA;YACpC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,IAAI,QAAQ,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;oBAC1C,sDAAsD;oBACtD,IAAI,CAAC,0BAA0B,CAAC,CAAA;oBAChC,MAAM,IAAI,YAAY,CAAC,qEAAqE,CAAC,CAAA;gBAC/F,CAAC;gBACD,kFAAkF;gBAClF,IAAI,CAAC,sBAAsB,CAAC,CAAA;gBAC5B,MAAM,IAAI,YAAY,CAAC,qDAAqD,CAAC,CAAA;YAC/E,CAAC;YAED,IAAI,CAAC;gBACH,IAAI,CAAC,eAAe,CAAC,CAAA;gBACrB,4EAA4E;gBAC5E,MAAM,kBAAkB,CAAC,IAAI,CAAC,CAAA;gBAE9B,MAAM,GAAG,GAAG,aAAa,EAAE,CAAA;gBAC3B,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA,CAAuB,UAAU;gBAC1D,MAAM,gBAAgB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA,CAAe,UAAU;gBAC1D,IAAI,CAAC,UAAU,GAAG,MAAM,mBAAmB,EAAE,CAAA,CAAG,WAAW;gBAC3D,MAAM,eAAe,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA,CAAgB,UAAU;gBAC1D,cAAc,CAAC,IAAI,CAAC,CAAA,CAA4B,UAAU;gBAC1D,MAAM,SAAS,CAAC,IAAI,CAAC,CAAA,CAA2B,UAAU;gBAE1D,IAAI,CAAC,mBAAmB,CAAC,CAAA;gBACzB,MAAM,eAAe,GAAY;oBAC/B,UAAU,EAAE,eAAe,EAAE,WAAW,EAAE,eAAe,EAAE,cAAc,EAAE,QAAQ;iBACpF,CAAA;gBACD,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAA;YACtE,CAAC;oBAAS,CAAC;gBACT,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;YACnC,CAAC;QACH,CAAC;QAED,KAAK,CAAC,WAAW;YACf,OAAO,mBAAmB,EAAE,CAAA;QAC9B,CAAC;QAED,KAAK,CAAC,kBAAkB;YACtB,MAAM,KAAK,GAAG,CAAC,CAAiB,EAAe,EAAE,CAAC,CAAC;gBACjD,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC,YAAY,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM;aACrF,CAAC,CAAA;YACF,OAAO;gBACL,aAAa,EAAE,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC;gBACvC,YAAY,EAAE,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC;gBACrC,WAAW,EAAE,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC;aACpC,CAAA;QACH,CAAC;QAED,2EAA2E;QAC3E,uEAAuE;QACvE,KAAK,CAAC,iBAAiB,CAAC,EAAU;YAChC,MAAM,KAAK,GAAG,CAAC,GAAG,aAAa,EAAE,GAAG,YAAY,EAAE,GAAG,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAA;YAC1F,IAAI,CAAC,KAAK;gBAAE,MAAM,IAAI,YAAY,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAA;YAE1D,4EAA4E;YAC5E,4EAA4E;YAC5E,qEAAqE;YACrE,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;gBAClB,MAAM,IAAI,YAAY,CAAC,6EAA6E,CAAC,CAAA;YACvG,CAAC;YAED,2EAA2E;YAC3E,mEAAmE;YACnE,MAAM,WAAW,GAAG,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAA;YAC1G,IAAI,MAAM,CAAC,WAAW,CAAC,KAAK,KAAK,CAAC,YAAY,EAAE,CAAC;gBAC/C,MAAM,IAAI,YAAY,CAAC,sEAAsE,CAAC,CAAA;YAChG,CAAC;YAED,6EAA6E;YAC7E,IAAI,IAAI,CAAC,cAAc,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;gBAClD,MAAM,IAAI,YAAY,CAAC,oEAAoE,CAAC,CAAA;YAC9F,CAAC;YAED,sEAAsE;YACtE,0EAA0E;YAC1E,IAAI,KAAK,CAAC,EAAE,IAAI,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;gBACtC,IAAI,CAAC,4BAA4B,CAAC,CAAA;gBAClC,MAAM,IAAI,YAAY,CAAC,kEAAkE,CAAC,CAAA;YAC5F,CAAC;YAED,0EAA0E;YAC1E,qEAAqE;YACrE,MAAM,QAAQ,GAAG,KAAK,IAAmB,EAAE;gBACzC,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,IAAI,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;gBACpF,IAAI,WAAW;oBAAE,IAAI,CAAC,OAAO,EAAE,CAAC,WAAW,CAAC,CAAA,CAAG,qEAAqE;gBACpH,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC;oBACnB,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;oBACpD,KAAK,EAAE,eAAe;oBACtB,EAAE,EAAE,KAAK,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,EAAE;oBAClD,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;oBACjD,WAAW,EAAE,KAAK,CAAC,YAAY;oBAC/B,WAAW,EAAE,IAAI;oBACjB,KAAK,EAAE,WAAW;iBACnB,CAAC,CAAA;YACJ,CAAC,CAAA;YACD,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;gBACnB,MAAM,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAA;YAChC,CAAC;iBAAM,CAAC;gBACN,MAAM,QAAQ,EAAE,CAAA;YAClB,CAAC;YACD,IAAI,IAAI,CAAC,GAAG;gBAAE,MAAM,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAA;YAC5C,IAAI,CAAC,sBAAsB,CAAC,CAAA;QAC9B,CAAC;KACF,CAAA;AACH,CAAC"}