@jevitate/cli 0.17.0 → 0.18.1

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 (89) hide show
  1. package/dist/author-journey-cli.js +11 -8
  2. package/dist/author-journey-cli.js.map +1 -1
  3. package/dist/bin.js +2802 -1110
  4. package/dist/build-info.generated.js +3 -3
  5. package/dist/catalog-api.d.ts +22 -0
  6. package/dist/catalog-api.js +49 -0
  7. package/dist/catalog-api.js.map +1 -1
  8. package/dist/catalog-cli.js +59 -37
  9. package/dist/catalog-cli.js.map +1 -1
  10. package/dist/cli-shared.d.ts +6 -1
  11. package/dist/cli-shared.js +11 -2
  12. package/dist/cli-shared.js.map +1 -1
  13. package/dist/exit-codes.js +8 -0
  14. package/dist/exit-codes.js.map +1 -1
  15. package/dist/journeeze-api.d.ts +5 -0
  16. package/dist/journeeze-api.js +24 -9
  17. package/dist/journeeze-api.js.map +1 -1
  18. package/dist/journeeze-connect.d.ts +2 -0
  19. package/dist/journeeze-connect.js +9 -1
  20. package/dist/journeeze-connect.js.map +1 -1
  21. package/dist/journey-anchor-cli.js +16 -8
  22. package/dist/journey-anchor-cli.js.map +1 -1
  23. package/dist/journey-annotate-cli.js +10 -5
  24. package/dist/journey-annotate-cli.js.map +1 -1
  25. package/dist/journey-api.d.ts +2 -0
  26. package/dist/journey-api.js +14 -0
  27. package/dist/journey-api.js.map +1 -1
  28. package/dist/journey-bundle.d.ts +83 -0
  29. package/dist/journey-bundle.js +267 -0
  30. package/dist/journey-bundle.js.map +1 -0
  31. package/dist/journey-chain.d.ts +14 -1
  32. package/dist/journey-chain.js +139 -8
  33. package/dist/journey-chain.js.map +1 -1
  34. package/dist/journey-cli/anchors.js +11 -6
  35. package/dist/journey-cli/anchors.js.map +1 -1
  36. package/dist/journey-cli/chain.js +12 -5
  37. package/dist/journey-cli/chain.js.map +1 -1
  38. package/dist/journey-cli/find.js +10 -5
  39. package/dist/journey-cli/find.js.map +1 -1
  40. package/dist/journey-cli/lint.js +14 -10
  41. package/dist/journey-cli/lint.js.map +1 -1
  42. package/dist/journey-cli/list.js +10 -5
  43. package/dist/journey-cli/list.js.map +1 -1
  44. package/dist/journey-cli/migrate.js +13 -6
  45. package/dist/journey-cli/migrate.js.map +1 -1
  46. package/dist/journey-cli/promote.js +14 -9
  47. package/dist/journey-cli/promote.js.map +1 -1
  48. package/dist/journey-cli/publish.js +12 -6
  49. package/dist/journey-cli/publish.js.map +1 -1
  50. package/dist/journey-cli/review.js +15 -9
  51. package/dist/journey-cli/review.js.map +1 -1
  52. package/dist/journey-cli/run.js +25 -10
  53. package/dist/journey-cli/run.js.map +1 -1
  54. package/dist/journey-cli/shared.d.ts +25 -1
  55. package/dist/journey-cli/shared.js +36 -0
  56. package/dist/journey-cli/shared.js.map +1 -1
  57. package/dist/journey-cli/verify.js +13 -6
  58. package/dist/journey-cli/verify.js.map +1 -1
  59. package/dist/journey-cli-bundle.d.ts +4 -0
  60. package/dist/journey-cli-bundle.js +70 -0
  61. package/dist/journey-cli-bundle.js.map +1 -0
  62. package/dist/journey-cli-readiness.d.ts +4 -0
  63. package/dist/journey-cli-readiness.js +163 -0
  64. package/dist/journey-cli-readiness.js.map +1 -0
  65. package/dist/journey-cli.js +5 -0
  66. package/dist/journey-cli.js.map +1 -1
  67. package/dist/journey-demo-cli.js +10 -5
  68. package/dist/journey-demo-cli.js.map +1 -1
  69. package/dist/journey-handback.d.ts +62 -0
  70. package/dist/journey-handback.js +152 -0
  71. package/dist/journey-handback.js.map +1 -0
  72. package/dist/journey-link-api.js +1 -1
  73. package/dist/journey-link-api.js.map +1 -1
  74. package/dist/journey-link-cli.js +13 -8
  75. package/dist/journey-link-cli.js.map +1 -1
  76. package/dist/journey-readiness.d.ts +104 -0
  77. package/dist/journey-readiness.js +381 -0
  78. package/dist/journey-readiness.js.map +1 -0
  79. package/dist/mcp-cli-tools.js +57 -21
  80. package/dist/mcp-cli-tools.js.map +1 -1
  81. package/dist/program.js +3 -0
  82. package/dist/program.js.map +1 -1
  83. package/dist/project-layout.d.ts +57 -0
  84. package/dist/project-layout.js +144 -0
  85. package/dist/project-layout.js.map +1 -0
  86. package/dist/project-where.d.ts +4 -0
  87. package/dist/project-where.js +48 -0
  88. package/dist/project-where.js.map +1 -0
  89. package/package.json +9 -9
@@ -0,0 +1,381 @@
1
+ import { relative, sep } from "node:path";
2
+ import { checkCompatibility, journeyParamSchema, journeyWriteSteps, lintJourney, } from "@jevitate/journey";
3
+ import { currentBuildTree, currentEngineInfo } from "./engine.js";
4
+ import { environmentFromFlags } from "./environments.js";
5
+ import { runJourneyChain, chainSucceeded } from "./journey-chain.js";
6
+ import { journeyContentHash } from "./journey-annotate-api.js";
7
+ import { reviewJourneyById } from "./journey-review-api.js";
8
+ import { verifyRecordPath } from "./journey-review-store.js";
9
+ import { verifyJourneyMutations } from "./journey-verify.js";
10
+ import { runJourneyProgrammatically } from "./journey-api.js";
11
+ export class ReadinessError extends Error {
12
+ code;
13
+ constructor(code, message) {
14
+ super(message);
15
+ this.name = "ReadinessError";
16
+ this.code = code;
17
+ }
18
+ }
19
+ const REQUIRED_PROOF_CHECK = "proof";
20
+ /** #581 §1: the target shared by `replay` and `prove`, refused in this order before any runner call. */
21
+ function resolveTarget(opts, deps, required) {
22
+ let environment;
23
+ if (opts.env !== undefined || opts.baseUrl !== undefined) {
24
+ environment = environmentFromFlags({ ...(opts.env === undefined ? {} : { env: opts.env }), ...(opts.baseUrl === undefined ? {} : { baseUrl: opts.baseUrl }) }, { ...(deps.environmentsFile === undefined ? {} : { environmentsFile: deps.environmentsFile }), ...(opts.targetsFile === undefined ? {} : { targetsFile: opts.targetsFile }) });
25
+ }
26
+ if (environment === undefined) {
27
+ throw new ReadinessError("E_READINESS_TARGET", "replay and prove need a target: pass --env <name> or --base-url <origin>");
28
+ }
29
+ if (environment.production === true) {
30
+ throw new ReadinessError("E_READINESS_PRODUCTION", `environment '${environment.name ?? environment.baseUrl}' is flagged production: readiness never replays or proves against it`);
31
+ }
32
+ const missing = required.filter((name) => !(name in (opts.params ?? {})));
33
+ if (missing.length > 0) {
34
+ throw new ReadinessError("E_READINESS_PARAMS", `missing required param(s): ${missing.join(", ")}`);
35
+ }
36
+ return environment;
37
+ }
38
+ /** The required params of the Journey the run/`--param` flags drive (a pair's consumer is bound by the chain). */
39
+ function requiredParams(journey, pair, hasRequests) {
40
+ const names = journeyParamSchema(journey).required;
41
+ return pair && !hasRequests ? [...names, "requests"] : names;
42
+ }
43
+ function lintFindings(journey, projectDir) {
44
+ // `lintJourney` runs the upload-fixture rules itself when it is given a project root (#488).
45
+ return lintJourney(journey, projectDir === undefined ? {} : { baseDir: projectDir });
46
+ }
47
+ function lintCheck(ctx, projectDir) {
48
+ const findings = lintFindings(ctx.journey, projectDir);
49
+ const errors = findings.filter((f) => f.level === "error").length;
50
+ const warnings = findings.filter((f) => f.level === "warning").length;
51
+ if (errors > 0) {
52
+ return {
53
+ check: { check: "lint", journey: ctx.id, state: "fail", detail: `${errors} error(s)${warnings === 0 ? "" : `, ${warnings} warning(s)`}` },
54
+ blocker: { check: "lint", journey: ctx.id, why: `${errors} lint error(s)`, next: `jevitate journey lint ${ctx.id}` },
55
+ };
56
+ }
57
+ return { check: { check: "lint", journey: ctx.id, state: "pass", detail: warnings === 0 ? "no findings" : `${warnings} warning(s)` } };
58
+ }
59
+ function schemaCheck(ctx) {
60
+ return { check: "schema", journey: ctx.id, state: "pass", detail: "the Journey loads" };
61
+ }
62
+ /** #582: the producing/consuming contract of a pair; absent contracts are nothing to check. */
63
+ function handoffCheck(producer, consumer) {
64
+ const declared = producer.journey.metadata.outputs !== undefined || consumer.journey.metadata.inputs !== undefined;
65
+ if (!declared) {
66
+ return { check: { check: "handoff", journey: producer.id, state: "not-run", detail: "neither Journey declares a handoff contract" } };
67
+ }
68
+ const issues = checkCompatibility(producer.journey, consumer.journey);
69
+ if (issues.length > 0) {
70
+ return {
71
+ check: { check: "handoff", journey: producer.id, state: "fail", detail: issues.map((i) => i.message).join("; ") },
72
+ blocker: { check: "handoff", journey: producer.id, why: issues.map((i) => i.message).join("; "), next: `jevitate journey chain --from ${producer.id} --to ${consumer.id} --requests <file>` },
73
+ };
74
+ }
75
+ return { check: { check: "handoff", journey: producer.id, state: "pass", detail: "contracts are compatible" } };
76
+ }
77
+ /** #583: a declared prepare-only boundary is what stops a Journey before the irreversible action. */
78
+ function boundaryCheck(ctx) {
79
+ return ctx.journey.metadata.boundary === undefined
80
+ ? { check: "boundary", journey: ctx.id, state: "not-run", detail: "no prepare-only boundary declared" }
81
+ : { check: "boundary", journey: ctx.id, state: "pass", detail: "a prepare-only boundary is declared" };
82
+ }
83
+ /** `journey review --strict`: every `warn` attention item is a blocker (an `info` item is advice, not a gate). */
84
+ function reviewStrictCheck(ctx) {
85
+ const warns = (ctx.review.attention ?? []).filter((a) => a.severity === "warn");
86
+ if (warns.length > 0) {
87
+ return {
88
+ check: { check: "review-strict", journey: ctx.id, state: "fail", detail: warns.map((a) => a.text).join("; ") },
89
+ blocker: { check: "review-strict", journey: ctx.id, why: warns.map((a) => a.text).join("; "), next: `jevitate journey review ${ctx.id} --strict` },
90
+ };
91
+ }
92
+ return { check: { check: "review-strict", journey: ctx.id, state: "pass", detail: "no strict attention items" } };
93
+ }
94
+ /** Every step objective written; a missing one is a person's annotation to draft. */
95
+ function annotationsCheck(ctx) {
96
+ const missing = ctx.review.summary.missingIntent;
97
+ if (missing.length === 0)
98
+ return { check: { check: "annotations", journey: ctx.id, state: "pass", detail: "every step has an objective" }, awaiting: [] };
99
+ return {
100
+ check: { check: "annotations", journey: ctx.id, state: "awaiting-human", detail: `${missing.length} intent gap(s)` },
101
+ awaiting: missing.map((item) => ({ check: "annotations", journey: ctx.id, item, next: `jevitate journey annotate ${ctx.id}` })),
102
+ };
103
+ }
104
+ /** #433: the job/persona links resolve; a draft/stale approval is a person's call. */
105
+ function catalogCheck(ctx) {
106
+ const links = ctx.review.catalog;
107
+ if (links === undefined)
108
+ return { check: { check: "catalog", journey: ctx.id, state: "not-run", detail: "the catalog was not loaded" }, awaiting: [] };
109
+ const dangling = [];
110
+ for (const [kind, link] of [["job", links.job], ["persona", links.persona]]) {
111
+ if (link !== undefined && link.status === "unknown")
112
+ dangling.push(`${kind}:${link.id}`);
113
+ }
114
+ if (dangling.length > 0) {
115
+ return {
116
+ check: { check: "catalog", journey: ctx.id, state: "fail", detail: `dangling link(s): ${dangling.join(", ")}` },
117
+ blocker: { check: "catalog", journey: ctx.id, why: `dangling link(s): ${dangling.join(", ")}`, next: `jevitate journey link ${ctx.id} --job <job-id> --persona <persona-id>` },
118
+ awaiting: [],
119
+ };
120
+ }
121
+ if (!links.linked) {
122
+ return {
123
+ check: { check: "catalog", journey: ctx.id, state: "fail", detail: "no job/persona link declared" },
124
+ blocker: { check: "catalog", journey: ctx.id, why: "no job/persona link declared", next: `jevitate journey link ${ctx.id} --job <job-id> --persona <persona-id>` },
125
+ awaiting: [],
126
+ };
127
+ }
128
+ if (links.unvetted.length > 0) {
129
+ return {
130
+ check: { check: "catalog", journey: ctx.id, state: "awaiting-human", detail: links.unvetted.join(", ") },
131
+ awaiting: links.unvetted.map((item) => ({
132
+ check: "catalog",
133
+ journey: ctx.id,
134
+ item,
135
+ next: item.startsWith("job:") ? `jevitate job review ${item.slice("job:".length)}` : `jevitate persona review ${item.slice("persona:".length)}`,
136
+ })),
137
+ };
138
+ }
139
+ return { check: { check: "catalog", journey: ctx.id, state: "pass", detail: "links resolve and are approved" }, awaiting: [] };
140
+ }
141
+ /** The `.verify/<id>.json` proof record, and the freshness rule shared with the review sheet. */
142
+ function proofCheck(ctx, journeysDir, cwd) {
143
+ const verify = ctx.review.proof.verify;
144
+ const evidence = relativeEvidence(cwd, verifyRecordPath(journeysDir, ctx.id));
145
+ if (verify.status === "not-verified") {
146
+ return {
147
+ check: { check: "proof", journey: ctx.id, state: "not-run", detail: verify.hint },
148
+ blocker: { check: "proof", journey: ctx.id, why: "no mutation proof recorded", next: `jevitate journey verify ${ctx.id} --mutate` },
149
+ };
150
+ }
151
+ if (verify.stale) {
152
+ return {
153
+ check: { check: "proof", journey: ctx.id, state: "stale", detail: `the ${verify.verdict} proof at ${verify.at} is bound to older content`, evidence },
154
+ blocker: { check: "proof", journey: ctx.id, why: "the recorded proof is stale", next: `jevitate journey verify ${ctx.id} --mutate` },
155
+ };
156
+ }
157
+ if (verify.verdict === "proven") {
158
+ const passed = Object.values(verify.summary).reduce((a, b) => a + b, 0);
159
+ return { check: { check: "proof", journey: ctx.id, state: "pass", detail: `proven ${passed}/${passed}`, evidence } };
160
+ }
161
+ if (verify.verdict === "insensitive") {
162
+ return {
163
+ check: { check: "proof", journey: ctx.id, state: "fail", detail: verify.reason ?? "some checks cannot fail", evidence },
164
+ blocker: { check: "proof", journey: ctx.id, why: verify.reason ?? "some checks cannot fail", next: `jevitate journey verify ${ctx.id} --mutate` },
165
+ };
166
+ }
167
+ // A read-only Journey that takes no input has nothing a mutation could break: no write to skip or
168
+ // block, no typed value, no parameter. Its proof can never conclude, and that is not a doubt about
169
+ // its checks — only this case passes; any other inconclusive proof stays inconclusive (#579).
170
+ if (nothingToMutate(ctx.journey, verify.summary)) {
171
+ return { check: { check: "proof", journey: ctx.id, state: "pass", detail: "read-only with no inputs: nothing a mutation could break", evidence } };
172
+ }
173
+ return { check: { check: "proof", journey: ctx.id, state: "inconclusive", detail: verify.reason ?? `proof verdict ${verify.verdict}`, evidence } };
174
+ }
175
+ /** No mutation was paired at all (only unpaired checks), the Journey writes nothing and takes no param. */
176
+ function nothingToMutate(journey, summary) {
177
+ const paired = Object.entries(summary).filter(([k]) => k !== "unpaired").reduce((n, [, v]) => n + v, 0);
178
+ // At least one check was looked at and none could be paired (a proof with no counts proves nothing).
179
+ return (summary.unpaired ?? 0) > 0 && paired === 0 && journeyWriteSteps(journey).length === 0 && journeyParamSchema(journey).required.length === 0;
180
+ }
181
+ function relativeEvidence(cwd, path) {
182
+ const r = relative(cwd, path);
183
+ return r === "" || r.startsWith("..") ? path : r.split(sep).join("/");
184
+ }
185
+ /** `review` promoted with an approval that still binds the current review hash. */
186
+ function promotionCheck(ctx) {
187
+ const change = ctx.review.changeSinceApproval;
188
+ const stale = (change.kind === "diff" || change.kind === "snapshot-missing") && change.changed;
189
+ const current = ctx.journey.metadata.promoted && ctx.journey.metadata.approval !== undefined && !stale;
190
+ if (current)
191
+ return { check: { check: "promotion", journey: ctx.id, state: "pass", detail: "promoted with a current approval" }, awaiting: [] };
192
+ const why = !ctx.journey.metadata.promoted ? "not promoted" : stale ? "approval is stale (the Journey changed since it was approved)" : "no recorded approval";
193
+ return {
194
+ check: { check: "promotion", journey: ctx.id, state: "awaiting-human", detail: why },
195
+ awaiting: [{ check: "promotion", journey: ctx.id, item: why, next: `jevitate journey promote ${ctx.id}` }],
196
+ };
197
+ }
198
+ function replayCheck(ctx, outcome) {
199
+ const next = `jevitate journey run ${ctx.id}`;
200
+ const check = { check: "replay", journey: ctx.id, state: outcome.state, detail: outcome.detail };
201
+ return outcome.state === "pass" ? { check } : { check, blocker: { check: "replay", journey: ctx.id, why: outcome.detail, next } };
202
+ }
203
+ /** The #583 handback state, as `journey run` reports it. */
204
+ function handbackOutcome(state) {
205
+ switch (state) {
206
+ case "prepared":
207
+ return { state: "pass", detail: "the run stopped at its prepare-only boundary" };
208
+ case "submitted":
209
+ return { state: "fail", detail: "the run submitted the irreversible action (a prepare-only boundary must stop before it)" };
210
+ case "inconclusive":
211
+ return { state: "inconclusive", detail: "the handback state is inconclusive" };
212
+ default:
213
+ return { state: "fail", detail: `the handback state is ${state}` };
214
+ }
215
+ }
216
+ function oneJourneyReplay(result) {
217
+ if (result.outcome === "ok") {
218
+ return result.handback === undefined ? { state: "pass", detail: "the recorded replay held" } : handbackOutcome(result.handback.state);
219
+ }
220
+ if (result.outcome === "quarantined")
221
+ return { state: "fail", detail: result.reason ?? "the replay diverged" };
222
+ if (result.outcome === "inconclusive")
223
+ return { state: "inconclusive", detail: result.reason ?? "the replay had no verdict" };
224
+ return { state: "fail", detail: `the replay ended ${result.outcome}` };
225
+ }
226
+ function pairReplay(result) {
227
+ if (chainSucceeded(result))
228
+ return { state: "pass", detail: "the chain held for every request" };
229
+ if (result.runs.some((r) => r.outcome === "inconclusive"))
230
+ return { state: "inconclusive", detail: "a chained run had no verdict" };
231
+ return { state: "fail", detail: `${result.unmatched.length} unmatched request(s), ${result.runs.filter((r) => r.outcome !== "ok").length} failed run(s)` };
232
+ }
233
+ function verdictOf(checks, mode) {
234
+ if (checks.some((c) => c.state === "fail"))
235
+ return "blocked";
236
+ if (checks.some((c) => c.state === "inconclusive"))
237
+ return "inconclusive";
238
+ const requiredReplay = mode !== "report";
239
+ const required = checks.filter((c) => c.check === REQUIRED_PROOF_CHECK || (requiredReplay && c.check === "replay"));
240
+ if (required.some((c) => c.state === "stale" || c.state === "not-run"))
241
+ return "incomplete";
242
+ return "technically-ready";
243
+ }
244
+ function commandsFor(verdict, mode, id, blockers, awaiting) {
245
+ const next = [];
246
+ const add = (command) => void (command !== "" && !next.includes(command) && next.push(command));
247
+ if (verdict === "blocked") {
248
+ for (const b of blockers)
249
+ add(b.next);
250
+ return next;
251
+ }
252
+ if (mode !== "prove")
253
+ add(`jevitate journey readiness ${id} --mode prove`);
254
+ if (verdict === "technically-ready")
255
+ add(`jevitate journey promote ${id}`);
256
+ for (const a of awaiting)
257
+ add(a.next);
258
+ return next;
259
+ }
260
+ /**
261
+ * #581: one Journey's (or a linked pair's) readiness receipt. Static checks only in `report`; the
262
+ * baseline replay in `replay`/`prove`; fresh mutation proofs in `prove`. Experience reuse is the
263
+ * existing rule: a proof is fresh only while it binds the current review hash.
264
+ */
265
+ export async function runJourneyReadiness(opts, deps = {}) {
266
+ const mode = opts.mode ?? "report";
267
+ const cwd = (deps.cwd ?? (() => process.cwd()))();
268
+ const review = deps.review ?? reviewJourneyById;
269
+ const run = deps.run ?? runJourneyProgrammatically;
270
+ const chain = deps.chain ?? runJourneyChain;
271
+ const verify = deps.verify ?? verifyJourneyMutations;
272
+ const reviewOpts = { strict: true, ...(opts.catalogDir === undefined ? {} : { catalogDir: opts.catalogDir }), ...(opts.targetsFile === undefined ? {} : { targetsFile: opts.targetsFile }) };
273
+ const contexts = [];
274
+ const loaded = await review(opts.journeysDir, opts.id, reviewOpts);
275
+ contexts.push({ id: opts.id, journey: loaded.journey, review: loaded.review });
276
+ if (opts.with !== undefined) {
277
+ const consumer = await review(opts.journeysDir, opts.with, reviewOpts);
278
+ contexts.push({ id: opts.with, journey: consumer.journey, review: consumer.review });
279
+ }
280
+ const pair = opts.with !== undefined;
281
+ let environment;
282
+ let replay;
283
+ if (mode !== "report") {
284
+ environment = resolveTarget(opts, deps, requiredParams(contexts[0].journey, pair, opts.requests !== undefined));
285
+ const params = { ...(opts.params ?? {}) };
286
+ try {
287
+ if (pair) {
288
+ const chained = await chain({
289
+ from: opts.id,
290
+ to: opts.with,
291
+ requests: opts.requests ?? "",
292
+ dir: opts.journeysDir,
293
+ environment,
294
+ ...(opts.storageState === undefined ? {} : { storageState: opts.storageState }),
295
+ ...(opts.browser === undefined ? {} : { browser: opts.browser }),
296
+ ...(opts.browserPortFactory === undefined ? {} : { browserPortFactory: opts.browserPortFactory }),
297
+ });
298
+ replay = pairReplay(chained);
299
+ }
300
+ else {
301
+ const result = await run({
302
+ dir: opts.journeysDir,
303
+ id: opts.id,
304
+ params,
305
+ environment,
306
+ ...(opts.storageState === undefined ? {} : { storageState: opts.storageState }),
307
+ ...(opts.browser === undefined ? {} : { browser: opts.browser }),
308
+ ...(opts.browserPortFactory === undefined ? {} : { browserPortFactory: opts.browserPortFactory }),
309
+ ...(opts.fixtures === undefined ? {} : { fixtures: opts.fixtures(opts.id, environment) }),
310
+ });
311
+ replay = oneJourneyReplay(result);
312
+ }
313
+ }
314
+ catch (err) {
315
+ replay = { state: "inconclusive", detail: err instanceof Error ? err.message : String(err) };
316
+ }
317
+ if (mode === "prove") {
318
+ for (const ctx of contexts) {
319
+ try {
320
+ await verify({
321
+ dir: opts.journeysDir,
322
+ id: ctx.id,
323
+ params,
324
+ environment,
325
+ ...(opts.storageState === undefined ? {} : { storageState: opts.storageState }),
326
+ ...(opts.browser === undefined ? {} : { browser: opts.browser }),
327
+ ...(opts.browserPortFactory === undefined ? {} : { browserPortFactory: opts.browserPortFactory }),
328
+ ...(opts.fixtures === undefined ? {} : { fixtures: opts.fixtures(ctx.id, environment) }),
329
+ });
330
+ }
331
+ catch (err) {
332
+ // A proof the host could not run leaves the existing evidence in place (never a crash).
333
+ ctx.review = { ...ctx.review, proof: { ...ctx.review.proof, verify: { status: "not-verified", hint: err instanceof Error ? err.message : String(err) } } };
334
+ continue;
335
+ }
336
+ // Re-read the freshly recorded proof through the same sheet the verdict is computed from.
337
+ const refreshed = await review(opts.journeysDir, ctx.id, reviewOpts);
338
+ ctx.review = refreshed.review;
339
+ }
340
+ }
341
+ }
342
+ const checks = [];
343
+ const blockers = [];
344
+ const awaiting = [];
345
+ const push = (r) => {
346
+ checks.push(r.check);
347
+ if (r.blocker !== undefined)
348
+ blockers.push(r.blocker);
349
+ if (r.awaiting !== undefined)
350
+ awaiting.push(...r.awaiting);
351
+ };
352
+ for (const ctx of contexts) {
353
+ push({ check: schemaCheck(ctx) });
354
+ push(lintCheck(ctx, opts.projectDir));
355
+ if (pair && ctx.id === opts.id)
356
+ push(handoffCheck(contexts[0], contexts[1]));
357
+ push({ check: boundaryCheck(ctx) });
358
+ push(reviewStrictCheck(ctx));
359
+ push(annotationsCheck(ctx));
360
+ push(catalogCheck(ctx));
361
+ push(proofCheck(ctx, opts.journeysDir, cwd));
362
+ if (mode !== "report")
363
+ push(replayCheck(ctx, replay ?? { state: "not-run", detail: "the replay did not run" }));
364
+ push(promotionCheck(ctx));
365
+ }
366
+ const verdict = verdictOf(checks, mode);
367
+ const engineInfo = currentEngineInfo();
368
+ const target = environment === undefined ? null : { origin: environment.baseUrl, ...(environment.name === undefined ? {} : { env: environment.name }) };
369
+ return {
370
+ engine: { version: engineInfo.version, commit: engineInfo.commit, tree: currentBuildTree() },
371
+ mode,
372
+ target,
373
+ journeys: contexts.map((ctx) => ({ id: ctx.id, contentHash: journeyContentHash(ctx.journey), reviewHash: ctx.review.contentHash, promoted: ctx.journey.metadata.promoted })),
374
+ checks,
375
+ verdict,
376
+ blockers,
377
+ awaitingHuman: awaiting,
378
+ next: commandsFor(verdict, mode, opts.id, blockers, awaiting),
379
+ };
380
+ }
381
+ //# sourceMappingURL=journey-readiness.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"journey-readiness.js","sourceRoot":"","sources":["../src/journey-readiness.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,EACjB,WAAW,GAKZ,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAClE,OAAO,EAAE,oBAAoB,EAAmC,MAAM,mBAAmB,CAAC;AAC1F,OAAO,EAAE,eAAe,EAAE,cAAc,EAA2B,MAAM,oBAAoB,CAAC;AAC9F,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,0BAA0B,EAA0C,MAAM,kBAAkB,CAAC;AAwEtG,MAAM,OAAO,cAAe,SAAQ,KAAK;IAC9B,IAAI,CAAuB;IAEpC,YAAY,IAA0B,EAAE,OAAe;QACrD,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;QAC7B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF;AA8CD,MAAM,oBAAoB,GAAG,OAAO,CAAC;AAErC,wGAAwG;AACxG,SAAS,aAAa,CAAC,IAA6B,EAAE,IAA0B,EAAE,QAA2B;IAC3G,IAAI,WAAmD,CAAC;IACxD,IAAI,IAAI,CAAC,GAAG,KAAK,SAAS,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QACzD,WAAW,GAAG,oBAAoB,CAChC,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE,EAC1H,EAAE,GAAG,CAAC,IAAI,CAAC,gBAAgB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,EAAE,CAC9K,CAAC;IACJ,CAAC;IACD,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;QAC9B,MAAM,IAAI,cAAc,CAAC,oBAAoB,EAAE,0EAA0E,CAAC,CAAC;IAC7H,CAAC;IACD,IAAI,WAAW,CAAC,UAAU,KAAK,IAAI,EAAE,CAAC;QACpC,MAAM,IAAI,cAAc,CAAC,wBAAwB,EAAE,gBAAgB,WAAW,CAAC,IAAI,IAAI,WAAW,CAAC,OAAO,uEAAuE,CAAC,CAAC;IACrL,CAAC;IACD,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC1E,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,cAAc,CAAC,oBAAoB,EAAE,8BAA8B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACrG,CAAC;IACD,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,kHAAkH;AAClH,SAAS,cAAc,CAAC,OAAgB,EAAE,IAAa,EAAE,WAAoB;IAC3E,MAAM,KAAK,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC;IACnD,OAAO,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AAC/D,CAAC;AAED,SAAS,YAAY,CAAC,OAAgB,EAAE,UAA8B;IACpE,6FAA6F;IAC7F,OAAO,WAAW,CAAC,OAAO,EAAE,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC;AACvF,CAAC;AAED,SAAS,SAAS,CAAC,GAAmB,EAAE,UAA8B;IACpE,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IACvD,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,OAAO,CAAC,CAAC,MAAM,CAAC;IAClE,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,MAAM,CAAC;IACtE,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;QACf,OAAO;YACL,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,YAAY,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,QAAQ,aAAa,EAAE,EAAE;YACzI,OAAO,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,MAAM,gBAAgB,EAAE,IAAI,EAAE,yBAAyB,GAAG,CAAC,EAAE,EAAE,EAAE;SACrH,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,QAAQ,aAAa,EAAE,EAAE,CAAC;AACzI,CAAC;AAED,SAAS,WAAW,CAAC,GAAmB;IACtC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,mBAAmB,EAAE,CAAC;AAC1F,CAAC;AAED,+FAA+F;AAC/F,SAAS,YAAY,CAAC,QAAwB,EAAE,QAAwB;IACtE,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,KAAK,SAAS,IAAI,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,KAAK,SAAS,CAAC;IACnH,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,6CAA6C,EAAE,EAAE,CAAC;IACxI,CAAC;IACD,MAAM,MAAM,GAAG,kBAAkB,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;IACtE,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,OAAO;YACL,KAAK,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YACjH,OAAO,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,iCAAiC,QAAQ,CAAC,EAAE,SAAS,QAAQ,CAAC,EAAE,oBAAoB,EAAE;SAC9L,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,0BAA0B,EAAE,EAAE,CAAC;AAClH,CAAC;AAED,qGAAqG;AACrG,SAAS,aAAa,CAAC,GAAmB;IACxC,OAAO,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,KAAK,SAAS;QAChD,CAAC,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,mCAAmC,EAAE;QACvG,CAAC,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,qCAAqC,EAAE,CAAC;AAC3G,CAAC;AAED,kHAAkH;AAClH,SAAS,iBAAiB,CAAC,GAAmB;IAC5C,MAAM,KAAK,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC;IAChF,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrB,OAAO;YACL,KAAK,EAAE,EAAE,KAAK,EAAE,eAAe,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YAC9G,OAAO,EAAE,EAAE,KAAK,EAAE,eAAe,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,2BAA2B,GAAG,CAAC,EAAE,WAAW,EAAE;SACnJ,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,eAAe,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,2BAA2B,EAAE,EAAE,CAAC;AACpH,CAAC;AAED,qFAAqF;AACrF,SAAS,gBAAgB,CAAC,GAAmB;IAC3C,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC;IACjD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,6BAA6B,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;IAC1J,OAAO;QACL,KAAK,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,gBAAgB,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,gBAAgB,EAAE;QACpH,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,6BAA6B,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;KAChI,CAAC;AACJ,CAAC;AAED,sFAAsF;AACtF,SAAS,YAAY,CAAC,GAAmB;IACvC,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC;IACjC,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,4BAA4B,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;IACvJ,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,CAAU,EAAE,CAAC;QACrF,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS;YAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;IAC3F,CAAC;IACD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,OAAO;YACL,KAAK,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,qBAAqB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE;YAC/G,OAAO,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,qBAAqB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,yBAAyB,GAAG,CAAC,EAAE,wCAAwC,EAAE;YAC9K,QAAQ,EAAE,EAAE;SACb,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QAClB,OAAO;YACL,KAAK,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,8BAA8B,EAAE;YACnG,OAAO,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,8BAA8B,EAAE,IAAI,EAAE,yBAAyB,GAAG,CAAC,EAAE,wCAAwC,EAAE;YAClK,QAAQ,EAAE,EAAE;SACb,CAAC;IACJ,CAAC;IACD,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9B,OAAO;YACL,KAAK,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,gBAAgB,EAAE,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YACxG,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;gBACtC,KAAK,EAAE,SAAS;gBAChB,OAAO,EAAE,GAAG,CAAC,EAAE;gBACf,IAAI;gBACJ,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,uBAAuB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,2BAA2B,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE;aAChJ,CAAC,CAAC;SACJ,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,gCAAgC,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;AACjI,CAAC;AAED,iGAAiG;AACjG,SAAS,UAAU,CAAC,GAAmB,EAAE,WAAmB,EAAE,GAAW;IACvE,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;IACvC,MAAM,QAAQ,GAAG,gBAAgB,CAAC,GAAG,EAAE,gBAAgB,CAAC,WAAW,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9E,IAAI,MAAM,CAAC,MAAM,KAAK,cAAc,EAAE,CAAC;QACrC,OAAO;YACL,KAAK,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE;YACjF,OAAO,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,4BAA4B,EAAE,IAAI,EAAE,2BAA2B,GAAG,CAAC,EAAE,WAAW,EAAE;SACpI,CAAC;IACJ,CAAC;IACD,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,OAAO;YACL,KAAK,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,MAAM,CAAC,OAAO,aAAa,MAAM,CAAC,EAAE,4BAA4B,EAAE,QAAQ,EAAE;YACrJ,OAAO,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,6BAA6B,EAAE,IAAI,EAAE,2BAA2B,GAAG,CAAC,EAAE,WAAW,EAAE;SACrI,CAAC;IACJ,CAAC;IACD,IAAI,MAAM,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;QAChC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QACxE,OAAO,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,MAAM,IAAI,MAAM,EAAE,EAAE,QAAQ,EAAE,EAAE,CAAC;IACvH,CAAC;IACD,IAAI,MAAM,CAAC,OAAO,KAAK,aAAa,EAAE,CAAC;QACrC,OAAO;YACL,KAAK,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,yBAAyB,EAAE,QAAQ,EAAE;YACvH,OAAO,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,MAAM,CAAC,MAAM,IAAI,yBAAyB,EAAE,IAAI,EAAE,2BAA2B,GAAG,CAAC,EAAE,WAAW,EAAE;SAClJ,CAAC;IACJ,CAAC;IACD,kGAAkG;IAClG,mGAAmG;IACnG,8FAA8F;IAC9F,IAAI,eAAe,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;QACjD,OAAO,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,0DAA0D,EAAE,QAAQ,EAAE,EAAE,CAAC;IACrJ,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,iBAAiB,MAAM,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,EAAE,CAAC;AACrJ,CAAC;AAED,2GAA2G;AAC3G,SAAS,eAAe,CAAC,OAAgB,EAAE,OAAyC;IAClF,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IACxG,qGAAqG;IACrG,OAAO,CAAC,OAAO,CAAC,QAAQ,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,MAAM,KAAK,CAAC,IAAI,iBAAiB,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,kBAAkB,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC;AACrJ,CAAC;AAED,SAAS,gBAAgB,CAAC,GAAW,EAAE,IAAY;IACjD,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAC9B,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACxE,CAAC;AAED,mFAAmF;AACnF,SAAS,cAAc,CAAC,GAAmB;IACzC,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,mBAAmB,CAAC;IAC9C,MAAM,KAAK,GAAG,CAAC,MAAM,CAAC,IAAI,KAAK,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,kBAAkB,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC;IAC/F,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,IAAI,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC;IACvG,IAAI,OAAO;QAAE,OAAO,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,kCAAkC,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;IAChJ,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,+DAA+D,CAAC,CAAC,CAAC,sBAAsB,CAAC;IAC/J,OAAO;QACL,KAAK,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,gBAAgB,EAAE,MAAM,EAAE,GAAG,EAAE;QACpF,QAAQ,EAAE,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,4BAA4B,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC;KAC3G,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,GAAmB,EAAE,OAAsB;IAC9D,MAAM,IAAI,GAAG,wBAAwB,GAAG,CAAC,EAAE,EAAE,CAAC;IAC9C,MAAM,KAAK,GAAmB,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC;IACjH,OAAO,OAAO,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC;AACpI,CAAC;AAED,4DAA4D;AAC5D,SAAS,eAAe,CAAC,KAA+B;IACtD,QAAQ,KAAK,EAAE,CAAC;QACd,KAAK,UAAU;YACb,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,8CAA8C,EAAE,CAAC;QACnF,KAAK,WAAW;YACd,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,yFAAyF,EAAE,CAAC;QAC9H,KAAK,cAAc;YACjB,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,oCAAoC,EAAE,CAAC;QACjF;YACE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,yBAAyB,KAAK,EAAE,EAAE,CAAC;IACvE,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB,CAAC,MAAwE;IAChG,IAAI,MAAM,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;QAC5B,OAAO,MAAM,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,0BAA0B,EAAE,CAAC,CAAC,CAAC,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACxI,CAAC;IACD,IAAI,MAAM,CAAC,OAAO,KAAK,aAAa;QAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,qBAAqB,EAAE,CAAC;IAC/G,IAAI,MAAM,CAAC,OAAO,KAAK,cAAc;QAAE,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,2BAA2B,EAAE,CAAC;IAC9H,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,oBAAoB,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;AACzE,CAAC;AAED,SAAS,UAAU,CAAC,MAA0B;IAC5C,IAAI,cAAc,CAAC,MAAM,CAAC;QAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,kCAAkC,EAAE,CAAC;IACjG,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,cAAc,CAAC;QAAE,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,8BAA8B,EAAE,CAAC;IACpI,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,SAAS,CAAC,MAAM,0BAA0B,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC,MAAM,gBAAgB,EAAE,CAAC;AAC7J,CAAC;AAED,SAAS,SAAS,CAAC,MAAiC,EAAE,IAAmB;IACvE,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC;QAAE,OAAO,SAAS,CAAC;IAC7D,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,cAAc,CAAC;QAAE,OAAO,cAAc,CAAC;IAC1E,MAAM,cAAc,GAAG,IAAI,KAAK,QAAQ,CAAC;IACzC,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,oBAAoB,IAAI,CAAC,cAAc,IAAI,CAAC,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC;IACpH,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,OAAO,IAAI,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC;QAAE,OAAO,YAAY,CAAC;IAC5F,OAAO,mBAAmB,CAAC;AAC7B,CAAC;AAED,SAAS,WAAW,CAAC,OAAyB,EAAE,IAAmB,EAAE,EAAU,EAAE,QAAqC,EAAE,QAA2C;IACjK,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,MAAM,GAAG,GAAG,CAAC,OAAe,EAAQ,EAAE,CAAC,KAAK,CAAC,OAAO,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IAC9G,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,KAAK,MAAM,CAAC,IAAI,QAAQ;YAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACtC,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,IAAI,KAAK,OAAO;QAAE,GAAG,CAAC,8BAA8B,EAAE,eAAe,CAAC,CAAC;IAC3E,IAAI,OAAO,KAAK,mBAAmB;QAAE,GAAG,CAAC,4BAA4B,EAAE,EAAE,CAAC,CAAC;IAC3E,KAAK,MAAM,CAAC,IAAI,QAAQ;QAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACtC,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,IAA6B,EAAE,OAA6B,EAAE;IACtG,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,QAAQ,CAAC;IACnC,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC;IAClD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,iBAAiB,CAAC;IAChD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,0BAA0B,CAAC;IACnD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,eAAe,CAAC;IAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,sBAAsB,CAAC;IACrD,MAAM,UAAU,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,EAAW,CAAC;IAEtM,MAAM,QAAQ,GAAqB,EAAE,CAAC;IACtC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;IACnE,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IAC/E,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC5B,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QACvE,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IACvF,CAAC;IAED,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC;IACrC,IAAI,WAAmD,CAAC;IACxD,IAAI,MAAiC,CAAC;IACtC,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtB,WAAW,GAAG,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAE,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC;QACjH,MAAM,MAAM,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,CAAC;QAC1C,IAAI,CAAC;YACH,IAAI,IAAI,EAAE,CAAC;gBACT,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC;oBAC1B,IAAI,EAAE,IAAI,CAAC,EAAE;oBACb,EAAE,EAAE,IAAI,CAAC,IAAc;oBACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,EAAE;oBAC7B,GAAG,EAAE,IAAI,CAAC,WAAW;oBACrB,WAAW;oBACX,GAAG,CAAC,IAAI,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC;oBAC/E,GAAG,CAAC,IAAI,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;oBAChE,GAAG,CAAC,IAAI,CAAC,kBAAkB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,kBAAkB,EAAE,IAAI,CAAC,kBAAkB,EAAE,CAAC;iBAClG,CAAC,CAAC;gBACH,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;YAC/B,CAAC;iBAAM,CAAC;gBACN,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC;oBACvB,GAAG,EAAE,IAAI,CAAC,WAAW;oBACrB,EAAE,EAAE,IAAI,CAAC,EAAE;oBACX,MAAM;oBACN,WAAW;oBACX,GAAG,CAAC,IAAI,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC;oBAC/E,GAAG,CAAC,IAAI,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;oBAChE,GAAG,CAAC,IAAI,CAAC,kBAAkB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,kBAAkB,EAAE,IAAI,CAAC,kBAAkB,EAAE,CAAC;oBACjG,GAAG,CAAC,IAAI,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,WAAW,CAAC,EAAE,CAAC;iBAC1F,CAAC,CAAC;gBACH,MAAM,GAAG,gBAAgB,CAAC,MAA0E,CAAC,CAAC;YACxG,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,GAAG,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/F,CAAC;QACD,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;YACrB,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;gBAC3B,IAAI,CAAC;oBACH,MAAM,MAAM,CAAC;wBACX,GAAG,EAAE,IAAI,CAAC,WAAW;wBACrB,EAAE,EAAE,GAAG,CAAC,EAAE;wBACV,MAAM;wBACN,WAAW;wBACX,GAAG,CAAC,IAAI,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC;wBACjF,GAAG,CAAC,IAAI,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;wBAChE,GAAG,CAAC,IAAI,CAAC,kBAAkB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,kBAAkB,EAAE,IAAI,CAAC,kBAAkB,EAAE,CAAC;wBAC/F,GAAG,CAAC,IAAI,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,WAAW,CAAC,EAAE,CAAC;qBACzF,CAAC,CAAC;gBACL,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,wFAAwF;oBACxF,GAAG,CAAC,MAAM,GAAG,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC;oBAC3J,SAAS;gBACX,CAAC;gBACD,0FAA0F;gBAC1F,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;gBACrE,GAAG,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC;YAChC,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAqB,EAAE,CAAC;IACpC,MAAM,QAAQ,GAAuB,EAAE,CAAC;IACxC,MAAM,QAAQ,GAA6B,EAAE,CAAC;IAC9C,MAAM,IAAI,GAAG,CAAC,CAA6F,EAAQ,EAAE;QACnH,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACrB,IAAI,CAAC,CAAC,OAAO,KAAK,SAAS;YAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QACtD,IAAI,CAAC,CAAC,QAAQ,KAAK,SAAS;YAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;IAC7D,CAAC,CAAC;IAEF,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC3B,IAAI,CAAC,EAAE,KAAK,EAAE,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAClC,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;QACtC,IAAI,IAAI,IAAI,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE;YAAE,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAE,EAAE,QAAQ,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC;QAC/E,IAAI,CAAC,EAAE,KAAK,EAAE,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACpC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC;QAC7B,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC;QAC5B,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;QACxB,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,CAAC;QAC7C,IAAI,IAAI,KAAK,QAAQ;YAAE,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,MAAM,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,wBAAwB,EAAE,CAAC,CAAC,CAAC;QAChH,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5B,CAAC;IAED,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACxC,MAAM,UAAU,GAAG,iBAAiB,EAAE,CAAC;IACvC,MAAM,MAAM,GAA2B,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,OAAO,EAAE,GAAG,CAAC,WAAW,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,WAAW,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;IAChL,OAAO;QACL,MAAM,EAAE,EAAE,OAAO,EAAE,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,IAAI,EAAE,gBAAgB,EAAE,EAAE;QAC5F,IAAI;QACJ,MAAM;QACN,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,WAAW,EAAE,kBAAkB,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,WAAW,EAAE,QAAQ,EAAE,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC5K,MAAM;QACN,OAAO;QACP,QAAQ;QACR,aAAa,EAAE,QAAQ;QACvB,IAAI,EAAE,WAAW,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,QAAQ,EAAE,QAAQ,CAAC;KAC9D,CAAC;AACJ,CAAC"}