run402 1.49.0 → 1.50.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 (41) hide show
  1. package/core-dist/config.js +10 -0
  2. package/lib/deploy-v2.mjs +359 -0
  3. package/lib/deploy.mjs +14 -0
  4. package/package.json +1 -1
  5. package/sdk/core-dist/config.js +10 -0
  6. package/sdk/dist/errors.d.ts +41 -0
  7. package/sdk/dist/errors.d.ts.map +1 -1
  8. package/sdk/dist/errors.js +23 -0
  9. package/sdk/dist/errors.js.map +1 -1
  10. package/sdk/dist/index.d.ts +24 -1
  11. package/sdk/dist/index.d.ts.map +1 -1
  12. package/sdk/dist/index.js +24 -1
  13. package/sdk/dist/index.js.map +1 -1
  14. package/sdk/dist/namespaces/apps.d.ts +14 -0
  15. package/sdk/dist/namespaces/apps.d.ts.map +1 -1
  16. package/sdk/dist/namespaces/apps.js +162 -19
  17. package/sdk/dist/namespaces/apps.js.map +1 -1
  18. package/sdk/dist/namespaces/deploy.d.ts +116 -0
  19. package/sdk/dist/namespaces/deploy.d.ts.map +1 -0
  20. package/sdk/dist/namespaces/deploy.js +1127 -0
  21. package/sdk/dist/namespaces/deploy.js.map +1 -0
  22. package/sdk/dist/namespaces/deploy.types.d.ts +430 -0
  23. package/sdk/dist/namespaces/deploy.types.d.ts.map +1 -0
  24. package/sdk/dist/namespaces/deploy.types.js +11 -0
  25. package/sdk/dist/namespaces/deploy.types.js.map +1 -0
  26. package/sdk/dist/node/canonicalize.d.ts +12 -5
  27. package/sdk/dist/node/canonicalize.d.ts.map +1 -1
  28. package/sdk/dist/node/canonicalize.js +12 -5
  29. package/sdk/dist/node/canonicalize.js.map +1 -1
  30. package/sdk/dist/node/files.d.ts +38 -0
  31. package/sdk/dist/node/files.d.ts.map +1 -0
  32. package/sdk/dist/node/files.js +88 -0
  33. package/sdk/dist/node/files.js.map +1 -0
  34. package/sdk/dist/node/index.d.ts +5 -3
  35. package/sdk/dist/node/index.d.ts.map +1 -1
  36. package/sdk/dist/node/index.js +2 -1
  37. package/sdk/dist/node/index.js.map +1 -1
  38. package/sdk/dist/node/sites-node.d.ts +34 -107
  39. package/sdk/dist/node/sites-node.d.ts.map +1 -1
  40. package/sdk/dist/node/sites-node.js +84 -353
  41. package/sdk/dist/node/sites-node.js.map +1 -1
@@ -1,376 +1,107 @@
1
1
  /**
2
- * Node-only augmentation of the `sites` namespace.
2
+ * Node-only `sites.deployDir` convenience.
3
3
  *
4
- * `deployDir(dir)` walks a directory, computes per-file SHA-256 + size,
5
- * builds a canonical manifest, and ships it via the v1.32 plan/commit
6
- * transport:
4
+ * **As of v1.34, this is a thin wrapper over `r.deploy.apply`** bytes ride
5
+ * through the unified CAS substrate, the deploy flows through the v2 plan/
6
+ * commit endpoints, and the agent-observable result remains a
7
+ * {@link SiteDeployResult}. Existing callers keep their input shape
8
+ * (`{ project, dir, target?, onEvent? }`) and their legacy event consumers
9
+ * keep working: the wrapper synthesizes both the unified `DeployEvent`
10
+ * shapes (from the SDK's `deploy` namespace) and the legacy phase events
11
+ * (`{ phase: "plan"|"upload"|"commit"|"poll", ... }`) for the deprecation
12
+ * window.
7
13
  *
8
- * 1. POST /deploy/v1/plan { manifest_digest, manifest } returns per-file
9
- * state (`present`, `satisfied_by_plan`, or `missing` + presigned URLs).
10
- * 2. PUT each `missing` file's bytes to its presigned S3 URL(s),
11
- * sending `x-amz-checksum-sha256` to satisfy the signed checksum
12
- * algorithm. Single-PUT covers small files; multipart covers large
13
- * files (the gateway picks per-part sizing).
14
- * 3. POST /deploy/v1/commit { plan_id } — Stage 1 (DB) returns
15
- * synchronously with `applied`, `noop`, `copying`, or `failed`.
16
- * `copying` triggers a poll loop on `GET /deployments/v1/:id` until
17
- * `ready` (or `failed`).
18
- *
19
- * The canonicalize used to compute `manifest_digest` MUST match the
20
- * gateway's byte-for-byte (see `./canonicalize.ts`).
21
- *
22
- * Imports `node:fs/promises` and so cannot run in a V8 isolate. Wired into
23
- * the SDK via the `@run402/sdk/node` entry point only.
14
+ * Imports `node:fs/promises` via `fileSetFromDir`, so this module remains
15
+ * Node-only V8 isolates use `r.deploy.apply` with in-memory byte sources.
24
16
  */
25
- import { readdir, readFile, lstat } from "node:fs/promises";
26
- import { join, relative, sep } from "node:path";
27
17
  import { Sites } from "../namespaces/sites.js";
28
- import { ApiError, LocalError, Run402Error } from "../errors.js";
29
- import { buildCanonicalManifest, computeManifestDigest, } from "./canonicalize.js";
30
- const DEFAULT_IGNORE = new Set([".git", "node_modules", ".DS_Store"]);
31
- const CONTEXT = "deploying directory";
32
- /** Cap on total time spent waiting for Stage 2 copy to drain. */
33
- const COPY_POLL_TIMEOUT_MS = 10 * 60 * 1000;
34
- /** Initial poll interval; we hold this for ~30 s, then back off. */
35
- const COPY_POLL_INITIAL_MS = 1_000;
36
- const COPY_POLL_MAX_MS = 30_000;
37
- /** Time after which we re-call /deploy/v1/plan to refresh presigned URLs (1 h TTL). */
38
- const URL_REFRESH_AT_MS = 50 * 60 * 1000;
18
+ import { Deploy } from "../namespaces/deploy.js";
19
+ import { fileSetFromDir } from "./files.js";
39
20
  /**
40
21
  * Sites namespace enriched with the Node-only `deployDir` convenience.
41
22
  * All existing `Sites` methods are inherited unchanged.
42
23
  */
43
24
  export class NodeSites extends Sites {
44
25
  /**
45
- * Deploy every file under `dir` as a static site. Walks the tree, hashes
46
- * each file, plans the deploy with the gateway (which dedupes against
47
- * already-uploaded content), uploads only the missing bytes, then
48
- * commits.
49
- *
50
- * Files named `.git`, `node_modules`, or `.DS_Store` are skipped at every
51
- * depth. Symlinks cause a {@link LocalError} — they are not followed.
26
+ * Deploy every file under `dir` as a static site. Walks the tree (skipping
27
+ * `.git`/`node_modules`/`.DS_Store`, rejecting symlinks), produces an
28
+ * `FsFileSource`-backed `FileSet`, and delegates to `r.deploy.apply`
29
+ * which uploads only the bytes the gateway doesn't already have, applies
30
+ * the new release atomically, and polls the operation until terminal.
52
31
  */
53
32
  async deployDir(opts) {
54
- const emit = (event) => {
55
- if (!opts.onEvent)
56
- return;
57
- try {
58
- opts.onEvent(event);
59
- }
60
- catch {
61
- // Swallow a buggy consumer must not abort a deploy in progress.
62
- }
33
+ const fileSet = await fileSetFromDir(opts.dir);
34
+ const manifestSize = Object.keys(fileSet).length;
35
+ const deploy = new Deploy(this.client);
36
+ const synth = makeLegacyEventSynth(opts.onEvent, manifestSize);
37
+ const result = await deploy.apply({ project: opts.project, site: { replace: fileSet } }, { onEvent: synth });
38
+ const out = {
39
+ deployment_id: pickFromUrls(result.urls, "deployment_id") ?? result.release_id,
40
+ url: pickFromUrls(result.urls, "site") ?? "",
63
41
  };
64
- const files = await collectFiles(opts.dir);
65
- if (files.length === 0) {
66
- throw new LocalError(`directory ${opts.dir} contains no deployable files`, CONTEXT);
67
- }
68
- const manifest = buildCanonicalManifest(files.map((f) => ({
69
- path: f.path,
70
- sha256: f.sha256,
71
- size: f.size,
72
- content_type: f.content_type,
73
- })));
74
- const manifestDigest = await computeManifestDigest(manifest);
75
- // Map sha → bytes so we can satisfy the plan response without re-walking.
76
- // Multiple paths may share the same sha (identical files); any copy works.
77
- const bytesBySha = new Map();
78
- // Map sha → first manifest path with that content, so upload events can
79
- // report a human-readable file path even when multiple paths dedupe.
80
- const pathBySha = new Map();
81
- for (const f of files) {
82
- bytesBySha.set(f.sha256, f.bytes);
83
- if (!pathBySha.has(f.sha256))
84
- pathBySha.set(f.sha256, f.path);
85
- }
86
- // Reach through to the kernel client. `Sites.client` is `private` in TS
87
- // but enumerable at runtime; the cast bypasses the visibility check.
88
- const client = this.client;
89
- const planClient = new ClientFromBase(client);
90
- const plan = await planClient.requestPlan(opts.project, manifest, manifestDigest);
91
- const planAt = Date.now();
92
- emit({ phase: "plan", manifest_size: manifest.files.length });
93
- const totalMissing = plan.files.filter(isMissing).length;
94
- let doneCounter = 0;
95
- let activePlan = plan;
96
- let activePlanAt = planAt;
97
- for (const entry of activePlan.files) {
98
- if (!isMissing(entry))
99
- continue;
100
- // Refresh the plan if the URL TTL window is about to close.
101
- if (Date.now() - activePlanAt > URL_REFRESH_AT_MS) {
102
- activePlan = await planClient.requestPlan(opts.project, manifest, manifestDigest);
103
- activePlanAt = Date.now();
104
- }
105
- const refreshed = activePlan.files.find((e) => e.sha256 === entry.sha256);
106
- const target = refreshed && isMissing(refreshed) ? refreshed : entry;
107
- const bytes = bytesBySha.get(target.sha256);
108
- if (!bytes) {
109
- throw new LocalError(`internal: no local bytes for sha ${target.sha256.slice(0, 12)}…`, CONTEXT);
110
- }
111
- try {
112
- await uploadOne(client.fetch, target, bytes);
113
- }
114
- catch (err) {
115
- // S3 returns 403 when the presigned URL has expired. Refresh once.
116
- if (err instanceof ApiError && err.status === 403) {
117
- activePlan = await planClient.requestPlan(opts.project, manifest, manifestDigest);
118
- activePlanAt = Date.now();
119
- const fresh = activePlan.files.find((e) => e.sha256 === target.sha256);
120
- if (fresh && isMissing(fresh)) {
121
- await uploadOne(client.fetch, fresh, bytes);
122
- }
123
- else {
124
- throw err;
125
- }
126
- }
127
- else {
128
- throw err;
129
- }
130
- }
131
- doneCounter += 1;
132
- emit({
133
- phase: "upload",
134
- file: pathBySha.get(target.sha256) ?? target.sha256,
135
- sha256: target.sha256,
136
- done: doneCounter,
137
- total: totalMissing,
138
- });
139
- }
140
- emit({ phase: "commit" });
141
- const commit = await planClient.commit(opts.project, activePlan.plan_id);
142
- if (commit.status === "applied" || commit.status === "noop") {
143
- return shapeResult(commit);
144
- }
145
- if (commit.status === "copying") {
146
- const final = await pollUntilReady(this, commit.deployment_id, emit);
147
- return { deployment_id: commit.deployment_id, url: commit.url, ...final };
148
- }
149
- // status === "failed": stage 2 exhausted retries. Surface as ApiError so
150
- // callers can decide whether to re-call deployDir (which re-commits).
151
- throw new ApiError(`Deploy commit failed for plan ${activePlan.plan_id} after copy retries`, 500, commit, "committing deploy");
152
- }
153
- }
154
- class ClientFromBase {
155
- client;
156
- constructor(client) {
157
- this.client = client;
158
- }
159
- async requestPlan(projectId, manifest, manifestDigest) {
160
- return this.client.request("/deploy/v1/plan", {
161
- method: "POST",
162
- body: { project: projectId, manifest_digest: manifestDigest, manifest },
163
- context: "planning deploy",
164
- });
165
- }
166
- async commit(projectId, planId) {
167
- return this.client.request("/deploy/v1/commit", {
168
- method: "POST",
169
- body: { project: projectId, plan_id: planId },
170
- context: "committing deploy",
171
- });
42
+ return out;
172
43
  }
173
44
  }
174
- function isMissing(entry) {
175
- return entry.missing === true;
176
- }
177
- function shapeResult(commit) {
178
- const out = { deployment_id: commit.deployment_id, url: commit.url };
179
- if (commit.bytes_total !== undefined)
180
- out.bytes_total = commit.bytes_total;
181
- if (commit.bytes_uploaded !== undefined)
182
- out.bytes_uploaded = commit.bytes_uploaded;
183
- return out;
184
- }
185
- // ─── Upload ──────────────────────────────────────────────────────────────────
186
- async function uploadOne(fetchFn, entry, bytes) {
187
- if (entry.mode === "single") {
188
- if (entry.parts.length !== 1) {
189
- throw new LocalError(`internal: single-mode upload for ${entry.sha256.slice(0, 12)}… returned ${entry.parts.length} parts`, CONTEXT);
190
- }
191
- const part = entry.parts[0];
192
- const slice = bytes.subarray(part.byte_start, part.byte_end + 1);
193
- // For single-PUT, the URL pre-commits the whole-object SHA — we send
194
- // the same value (in base64, not hex) on the PUT.
195
- const checksum = base64FromHex(entry.sha256);
196
- await putToS3(fetchFn, part.url, slice, checksum, part.part_number);
197
- return;
198
- }
199
- // multipart: each part PUT carries its own per-part SHA-256 base64.
200
- for (const part of entry.parts) {
201
- const slice = bytes.subarray(part.byte_start, part.byte_end + 1);
202
- const checksum = await sha256Base64(slice);
203
- await putToS3(fetchFn, part.url, slice, checksum, part.part_number);
204
- }
205
- }
206
- async function putToS3(fetchFn, url, body, checksumBase64, partNumber) {
207
- let res;
208
- try {
209
- res = await fetchFn(url, {
210
- method: "PUT",
211
- headers: { "x-amz-checksum-sha256": checksumBase64 },
212
- body: body,
213
- });
214
- }
215
- catch (err) {
216
- throw new ApiError(`S3 PUT failed for part ${partNumber}: ${err.message}`, 0, null, "uploading deploy bytes");
217
- }
218
- if (!res.ok) {
219
- const text = await res.text().catch(() => "");
220
- throw new ApiError(`S3 PUT failed for part ${partNumber} (HTTP ${res.status})${text ? ": " + text.slice(0, 200) : ""}`, res.status, text, "uploading deploy bytes");
221
- }
222
- }
223
- async function pollUntilReady(sites, deploymentId, emit) {
224
- const start = Date.now();
225
- let interval = COPY_POLL_INITIAL_MS;
226
- while (Date.now() - start < COPY_POLL_TIMEOUT_MS) {
227
- await sleep(interval);
228
- let info;
45
+ // ─── Legacy event synthesis ──────────────────────────────────────────────────
46
+ /**
47
+ * Build a unified-event listener that mirrors the unified events to the
48
+ * caller verbatim AND synthesizes the legacy phase events alongside.
49
+ */
50
+ function makeLegacyEventSynth(consumer, manifestSize) {
51
+ if (!consumer)
52
+ return () => { };
53
+ const safe = (e) => {
229
54
  try {
230
- info = await sites.getDeployment(deploymentId);
231
- }
232
- catch (err) {
233
- // Transient lookup failure: keep polling unless we're a hard error.
234
- if (err instanceof Run402Error && err.status !== null && err.status >= 500) {
235
- continue;
236
- }
237
- throw err;
55
+ consumer(e);
238
56
  }
239
- emit({ phase: "poll", status: info.status, elapsed_ms: Date.now() - start });
240
- if (info.status === "ready" || info.status === "applied") {
241
- return { status: info.status, url: info.url };
57
+ catch {
58
+ /* swallow buggy consumer must not abort the deploy */
242
59
  }
243
- if (info.status === "failed") {
244
- throw new ApiError(`Deployment ${deploymentId} entered failed state during copy`, 500, info, "polling deploy");
245
- }
246
- // Hold the initial cadence for the first 30 s, then back off to a max.
247
- if (Date.now() - start > 30_000) {
248
- interval = Math.min(Math.floor(interval * 1.5), COPY_POLL_MAX_MS);
249
- }
250
- }
251
- throw new ApiError(`Timed out waiting for deployment ${deploymentId} to reach ready (${COPY_POLL_TIMEOUT_MS / 60_000} min)`, 504, null, "polling deploy");
252
- }
253
- function sleep(ms) {
254
- return new Promise((resolve) => setTimeout(resolve, ms));
255
- }
256
- // ─── Filesystem walk + hashing ───────────────────────────────────────────────
257
- async function collectFiles(root) {
258
- let rootStat;
259
- try {
260
- rootStat = await lstat(root);
261
- }
262
- catch (err) {
263
- throw new LocalError(`cannot read directory ${root}: ${err.message}`, CONTEXT, err);
264
- }
265
- if (rootStat.isSymbolicLink()) {
266
- throw new LocalError(`symlink found at ${root} (following symlinks is not supported)`, CONTEXT);
267
- }
268
- if (!rootStat.isDirectory()) {
269
- throw new LocalError(`path ${root} is not a directory`, CONTEXT);
270
- }
271
- const out = [];
272
- await walkInto(root, root, out);
273
- return out;
274
- }
275
- async function walkInto(root, current, out) {
276
- let entries;
277
- try {
278
- entries = await readdir(current, { withFileTypes: true });
279
- }
280
- catch (err) {
281
- throw new LocalError(`cannot read directory ${current}: ${err.message}`, CONTEXT, err);
282
- }
283
- for (const entry of entries) {
284
- if (DEFAULT_IGNORE.has(entry.name))
285
- continue;
286
- const fullPath = join(current, entry.name);
287
- if (entry.isSymbolicLink()) {
288
- throw new LocalError(`symlink found at ${fullPath} (following symlinks is not supported)`, CONTEXT);
289
- }
290
- if (entry.isDirectory()) {
291
- await walkInto(root, fullPath, out);
292
- continue;
293
- }
294
- if (entry.isFile()) {
295
- let bytes;
296
- try {
297
- bytes = await readFile(fullPath);
298
- }
299
- catch (err) {
300
- throw new LocalError(`cannot read file ${fullPath}: ${err.message}`, CONTEXT, err);
301
- }
302
- const rel = normalizeRelPath(relative(root, fullPath));
303
- out.push({
304
- path: rel,
305
- size: bytes.byteLength,
306
- sha256: await sha256Hex(bytes),
307
- content_type: guessContentType(rel),
308
- bytes,
309
- });
60
+ };
61
+ let pollStart = null;
62
+ let commitEmitted = false;
63
+ return (event) => {
64
+ safe(event);
65
+ switch (event.type) {
66
+ case "plan.diff":
67
+ safe({ phase: "plan", manifest_size: manifestSize });
68
+ break;
69
+ case "content.upload.progress":
70
+ safe({
71
+ phase: "upload",
72
+ file: event.label,
73
+ sha256: event.sha256,
74
+ done: event.done,
75
+ total: event.total,
76
+ });
77
+ break;
78
+ case "commit.phase":
79
+ if (!commitEmitted) {
80
+ commitEmitted = true;
81
+ safe({ phase: "commit" });
82
+ }
83
+ if ((event.phase === "schema-settle" ||
84
+ event.phase === "activate" ||
85
+ event.phase === "ready") &&
86
+ event.status === "started") {
87
+ if (pollStart === null)
88
+ pollStart = Date.now();
89
+ safe({
90
+ phase: "poll",
91
+ status: event.phase,
92
+ elapsed_ms: Date.now() - pollStart,
93
+ });
94
+ }
95
+ break;
96
+ default:
97
+ break;
310
98
  }
311
- }
312
- }
313
- /**
314
- * Normalize a relative path to POSIX forward slashes. Exposed for tests;
315
- * not part of the public SDK API.
316
- */
317
- export function normalizeRelPath(rel) {
318
- return sep === "/" ? rel : rel.split(sep).join("/");
319
- }
320
- async function sha256Hex(bytes) {
321
- const hash = await crypto.subtle.digest("SHA-256", bytes);
322
- return Array.from(new Uint8Array(hash))
323
- .map((b) => b.toString(16).padStart(2, "0"))
324
- .join("");
325
- }
326
- async function sha256Base64(bytes) {
327
- const hash = await crypto.subtle.digest("SHA-256", bytes);
328
- return Buffer.from(hash).toString("base64");
329
- }
330
- function base64FromHex(hex) {
331
- if (!/^[0-9a-f]*$/i.test(hex) || hex.length % 2 !== 0) {
332
- throw new LocalError(`invalid hex sha256: ${hex}`, CONTEXT);
333
- }
334
- return Buffer.from(hex, "hex").toString("base64");
335
- }
336
- const CONTENT_TYPES = {
337
- html: "text/html; charset=utf-8",
338
- htm: "text/html; charset=utf-8",
339
- css: "text/css; charset=utf-8",
340
- js: "application/javascript; charset=utf-8",
341
- mjs: "application/javascript; charset=utf-8",
342
- json: "application/json; charset=utf-8",
343
- svg: "image/svg+xml",
344
- png: "image/png",
345
- jpg: "image/jpeg",
346
- jpeg: "image/jpeg",
347
- gif: "image/gif",
348
- webp: "image/webp",
349
- ico: "image/x-icon",
350
- woff: "font/woff",
351
- woff2: "font/woff2",
352
- ttf: "font/ttf",
353
- eot: "application/vnd.ms-fontobject",
354
- otf: "font/otf",
355
- txt: "text/plain; charset=utf-8",
356
- md: "text/markdown; charset=utf-8",
357
- xml: "application/xml",
358
- pdf: "application/pdf",
359
- wasm: "application/wasm",
360
- map: "application/json; charset=utf-8",
361
- };
362
- function guessContentType(path) {
363
- const dot = path.lastIndexOf(".");
364
- if (dot === -1)
365
- return "application/octet-stream";
366
- const ext = path.slice(dot + 1).toLowerCase();
367
- return CONTENT_TYPES[ext] ?? "application/octet-stream";
99
+ };
368
100
  }
369
- // ─── Test-only exports ───────────────────────────────────────────────────────
370
- // Kept exported so the unit tests can drive the walk + hash logic without
371
- // having to spin up an HTTP mock for every concern.
372
- /** @internal — exposed for tests, not part of the public SDK API. */
373
- export async function _collectFilesForTest(root) {
374
- return collectFiles(root);
101
+ // ─── Helpers ─────────────────────────────────────────────────────────────────
102
+ function pickFromUrls(urls, key) {
103
+ if (!urls)
104
+ return undefined;
105
+ return urls[key];
375
106
  }
376
107
  //# sourceMappingURL=sites-node.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sites-node.js","sourceRoot":"","sources":["../../src/node/sites-node.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sites-node.js","sourceRoot":"","sources":["../../src/node/sites-node.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,KAAK,EAAyB,MAAM,wBAAwB,CAAC;AACtE,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAMjD,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAwC5C;;;GAGG;AACH,MAAM,OAAO,SAAU,SAAQ,KAAK;IAClC;;;;;;OAMG;IACH,KAAK,CAAC,SAAS,CAAC,IAAsB;QACpC,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC/C,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;QAEjD,MAAM,MAAM,GAAG,IAAI,MAAM,CACtB,IAAsC,CAAC,MAAM,CAC/C,CAAC;QAEF,MAAM,KAAK,GAAG,oBAAoB,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;QAE/D,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAC/B,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EACrD,EAAE,OAAO,EAAE,KAAK,EAAE,CACnB,CAAC;QAEF,MAAM,GAAG,GAAqB;YAC5B,aAAa,EAAE,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE,eAAe,CAAC,IAAI,MAAM,CAAC,UAAU;YAC9E,GAAG,EAAE,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE;SAC7C,CAAC;QACF,OAAO,GAAG,CAAC;IACb,CAAC;CACF;AAED,gFAAgF;AAEhF;;;GAGG;AACH,SAAS,oBAAoB,CAC3B,QAAoD,EACpD,YAAoB;IAEpB,IAAI,CAAC,QAAQ;QAAE,OAAO,GAAG,EAAE,GAAE,CAAC,CAAC;IAE/B,MAAM,IAAI,GAAG,CAAC,CAAc,EAAQ,EAAE;QACpC,IAAI,CAAC;YACH,QAAQ,CAAC,CAAC,CAAC,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACP,wDAAwD;QAC1D,CAAC;IACH,CAAC,CAAC;IAEF,IAAI,SAAS,GAAkB,IAAI,CAAC;IACpC,IAAI,aAAa,GAAG,KAAK,CAAC;IAE1B,OAAO,CAAC,KAAK,EAAE,EAAE;QACf,IAAI,CAAC,KAAK,CAAC,CAAC;QAEZ,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;YACnB,KAAK,WAAW;gBACd,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,YAAY,EAAE,CAAC,CAAC;gBACrD,MAAM;YACR,KAAK,yBAAyB;gBAC5B,IAAI,CAAC;oBACH,KAAK,EAAE,QAAQ;oBACf,IAAI,EAAE,KAAK,CAAC,KAAK;oBACjB,MAAM,EAAE,KAAK,CAAC,MAAM;oBACpB,IAAI,EAAE,KAAK,CAAC,IAAI;oBAChB,KAAK,EAAE,KAAK,CAAC,KAAK;iBACnB,CAAC,CAAC;gBACH,MAAM;YACR,KAAK,cAAc;gBACjB,IAAI,CAAC,aAAa,EAAE,CAAC;oBACnB,aAAa,GAAG,IAAI,CAAC;oBACrB,IAAI,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;gBAC5B,CAAC;gBACD,IACE,CAAC,KAAK,CAAC,KAAK,KAAK,eAAe;oBAC9B,KAAK,CAAC,KAAK,KAAK,UAAU;oBAC1B,KAAK,CAAC,KAAK,KAAK,OAAO,CAAC;oBAC1B,KAAK,CAAC,MAAM,KAAK,SAAS,EAC1B,CAAC;oBACD,IAAI,SAAS,KAAK,IAAI;wBAAE,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;oBAC/C,IAAI,CAAC;wBACH,KAAK,EAAE,MAAM;wBACb,MAAM,EAAE,KAAK,CAAC,KAAK;wBACnB,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;qBACnC,CAAC,CAAC;gBACL,CAAC;gBACD,MAAM;YACR;gBACE,MAAM;QACV,CAAC;IACH,CAAC,CAAC;AACJ,CAAC;AAED,gFAAgF;AAEhF,SAAS,YAAY,CACnB,IAAwC,EACxC,GAAW;IAEX,IAAI,CAAC,IAAI;QAAE,OAAO,SAAS,CAAC;IAC5B,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;AACnB,CAAC"}