@enricai/barnacle 1.6.14 → 1.7.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 (67) hide show
  1. package/README.md +3 -5
  2. package/dist/api/schemas/submissions.d.ts +8 -8
  3. package/dist/config.d.ts +23 -0
  4. package/dist/config.d.ts.map +1 -1
  5. package/dist/config.js +2 -0
  6. package/dist/config.js.map +1 -1
  7. package/dist/lib/bedrock.d.ts +2 -2
  8. package/dist/lib/bedrock.d.ts.map +1 -1
  9. package/dist/lib/bedrock.js.map +1 -1
  10. package/dist/lib/llm/anthropic-client.d.ts +12 -0
  11. package/dist/lib/llm/anthropic-client.d.ts.map +1 -1
  12. package/dist/lib/llm/anthropic-client.js +25 -0
  13. package/dist/lib/llm/anthropic-client.js.map +1 -1
  14. package/dist/lib/telemetry/beacon-capture.d.ts +4 -3
  15. package/dist/lib/telemetry/beacon-capture.d.ts.map +1 -1
  16. package/dist/lib/telemetry/beacon-capture.js.map +1 -1
  17. package/dist/lib/telemetry/reconciliation-record.d.ts +15 -33
  18. package/dist/lib/telemetry/reconciliation-record.d.ts.map +1 -1
  19. package/dist/lib/telemetry/reconciliation-record.js +11 -49
  20. package/dist/lib/telemetry/reconciliation-record.js.map +1 -1
  21. package/dist/lib/telemetry/submission-capture.d.ts +8 -13
  22. package/dist/lib/telemetry/submission-capture.d.ts.map +1 -1
  23. package/dist/lib/telemetry/submission-capture.js +2 -4
  24. package/dist/lib/telemetry/submission-capture.js.map +1 -1
  25. package/dist/lib/telemetry/submission-reader.d.ts +3 -4
  26. package/dist/lib/telemetry/submission-reader.d.ts.map +1 -1
  27. package/dist/lib/telemetry/submission-reader.js +3 -4
  28. package/dist/lib/telemetry/submission-reader.js.map +1 -1
  29. package/dist/plugins/config-plugin.d.ts.map +1 -1
  30. package/dist/plugins/config-plugin.js +22 -0
  31. package/dist/plugins/config-plugin.js.map +1 -1
  32. package/dist/plugins/loader.d.ts +0 -7
  33. package/dist/plugins/loader.d.ts.map +1 -1
  34. package/dist/plugins/loader.js +0 -9
  35. package/dist/plugins/loader.js.map +1 -1
  36. package/dist/scraper/deep-locator-actuate.d.ts +24 -19
  37. package/dist/scraper/deep-locator-actuate.d.ts.map +1 -1
  38. package/dist/scraper/deep-locator-actuate.js +68 -23
  39. package/dist/scraper/deep-locator-actuate.js.map +1 -1
  40. package/dist/scraper/deep-locator-scan.d.ts +20 -0
  41. package/dist/scraper/deep-locator-scan.d.ts.map +1 -1
  42. package/dist/scraper/deep-locator-scan.js +25 -0
  43. package/dist/scraper/deep-locator-scan.js.map +1 -1
  44. package/dist/scraper/flow-runner.d.ts +50 -10
  45. package/dist/scraper/flow-runner.d.ts.map +1 -1
  46. package/dist/scraper/flow-runner.js +239 -97
  47. package/dist/scraper/flow-runner.js.map +1 -1
  48. package/dist/scripts/recon-browser.d.ts +5 -4
  49. package/dist/scripts/recon-browser.d.ts.map +1 -1
  50. package/dist/scripts/recon-browser.js +8 -5
  51. package/dist/scripts/recon-browser.js.map +1 -1
  52. package/dist/scripts/recon-generate.d.ts +2 -2
  53. package/dist/scripts/recon-generate.d.ts.map +1 -1
  54. package/dist/scripts/recon-generate.js +18 -85
  55. package/dist/scripts/recon-generate.js.map +1 -1
  56. package/dist/scripts/recon-shared.d.ts +0 -10
  57. package/dist/scripts/recon-shared.d.ts.map +1 -1
  58. package/dist/scripts/recon-shared.js +0 -11
  59. package/dist/scripts/recon-shared.js.map +1 -1
  60. package/dist/site-plugin.d.ts +3 -3
  61. package/dist/testing/coverage-guard-suite.d.mts +7 -7
  62. package/dist/testing/coverage-guard-suite.mjs +5 -5
  63. package/package.json +3 -1
  64. package/dist/scripts/migrate-telemetry-dir-names.d.ts +0 -57
  65. package/dist/scripts/migrate-telemetry-dir-names.d.ts.map +0 -1
  66. package/dist/scripts/migrate-telemetry-dir-names.js +0 -156
  67. package/dist/scripts/migrate-telemetry-dir-names.js.map +0 -1
@@ -1,57 +0,0 @@
1
- /**
2
- * One-off migration: rename existing base64-encoded telemetry run directories
3
- * to the new `<unix-ms>-<short-hash>` scheme introduced in commit ce63526.
4
- *
5
- * Background: until ce63526, per-URL telemetry partitions were named
6
- * `runs/<base64url-canonical-url>/` (e.g.
7
- * `aHR0cHM6Ly9jbGljay5hcHBjYXN0Lmlv...`). After ce63526, new runs create
8
- * `runs/<unix-ms>-<sha1-hex-8>/` directories. The engine reads both styles
9
- * (readSiteCallsNdjson walks all dirs blindly), so mixed naming is
10
- * functionally harmless — but visually inconsistent and prevents the new
11
- * `awk -F- '{print $NF}' | sort | uniq -c` URL-grouping pattern from
12
- * working on historical data.
13
- *
14
- * This script walks every `src/sites/<site>/telemetry/runs/` tree, reads
15
- * each partition's `url.txt` sidecar to recover the original URL, and
16
- * renames the dir to the new scheme. The timestamp is sourced from the
17
- * mtime of the partition's `calls.ndjson` (when this run actually wrote
18
- * data) or falls back to the dir's mtime when there's no NDJSON yet.
19
- *
20
- * Idempotent: dirs already in the new shape are skipped.
21
- * Safe: dry-run is the default; `--apply` is required to actually rename.
22
- *
23
- * Usage:
24
- * pnpm tsx src/scripts/migrate-telemetry-dir-names.ts
25
- * pnpm tsx src/scripts/migrate-telemetry-dir-names.ts --apply
26
- * pnpm tsx src/scripts/migrate-telemetry-dir-names.ts --site <siteId> --apply
27
- */
28
- interface MigrateOptions {
29
- /** Path to the project root containing `src/sites/`. */
30
- sitesRoot: string;
31
- /** Optional: restrict to one site directory by name (e.g. "acme-jobs"). */
32
- siteFilter: string | null;
33
- /** If false, log planned renames but do not execute them. */
34
- apply: boolean;
35
- }
36
- interface MigrationOutcome {
37
- migrated: number;
38
- alreadyMigrated: number;
39
- warnings: number;
40
- }
41
- /**
42
- * Drive the migration end-to-end across every site under `sitesRoot`.
43
- * Returns a tally so callers (CLI + tests) can assert outcomes without
44
- * scraping log output.
45
- */
46
- export declare function migrateTelemetryDirs(opts: MigrateOptions): MigrationOutcome;
47
- interface ParsedArgs {
48
- apply: boolean;
49
- siteFilter: string | null;
50
- }
51
- /**
52
- * Tiny argv parser matching the rest of the scripts in this dir. Exposed
53
- * for unit tests; defaults to dry-run (apply=false).
54
- */
55
- export declare function parseArgs(argv: string[]): ParsedArgs;
56
- export {};
57
- //# sourceMappingURL=migrate-telemetry-dir-names.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"migrate-telemetry-dir-names.d.ts","sourceRoot":"","sources":["../../src/scripts/migrate-telemetry-dir-names.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAYH,UAAU,cAAc;IACtB,wDAAwD;IACxD,SAAS,EAAE,MAAM,CAAC;IAClB,2EAA2E;IAC3E,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,6DAA6D;IAC7D,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,UAAU,gBAAgB;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,cAAc,GAAG,gBAAgB,CAiB3E;AAqED,UAAU,UAAU;IAClB,KAAK,EAAE,OAAO,CAAC;IACf,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,CAapD"}
@@ -1,156 +0,0 @@
1
- "use strict";
2
- /**
3
- * One-off migration: rename existing base64-encoded telemetry run directories
4
- * to the new `<unix-ms>-<short-hash>` scheme introduced in commit ce63526.
5
- *
6
- * Background: until ce63526, per-URL telemetry partitions were named
7
- * `runs/<base64url-canonical-url>/` (e.g.
8
- * `aHR0cHM6Ly9jbGljay5hcHBjYXN0Lmlv...`). After ce63526, new runs create
9
- * `runs/<unix-ms>-<sha1-hex-8>/` directories. The engine reads both styles
10
- * (readSiteCallsNdjson walks all dirs blindly), so mixed naming is
11
- * functionally harmless — but visually inconsistent and prevents the new
12
- * `awk -F- '{print $NF}' | sort | uniq -c` URL-grouping pattern from
13
- * working on historical data.
14
- *
15
- * This script walks every `src/sites/<site>/telemetry/runs/` tree, reads
16
- * each partition's `url.txt` sidecar to recover the original URL, and
17
- * renames the dir to the new scheme. The timestamp is sourced from the
18
- * mtime of the partition's `calls.ndjson` (when this run actually wrote
19
- * data) or falls back to the dir's mtime when there's no NDJSON yet.
20
- *
21
- * Idempotent: dirs already in the new shape are skipped.
22
- * Safe: dry-run is the default; `--apply` is required to actually rename.
23
- *
24
- * Usage:
25
- * pnpm tsx src/scripts/migrate-telemetry-dir-names.ts
26
- * pnpm tsx src/scripts/migrate-telemetry-dir-names.ts --apply
27
- * pnpm tsx src/scripts/migrate-telemetry-dir-names.ts --site <siteId> --apply
28
- */
29
- Object.defineProperty(exports, "__esModule", { value: true });
30
- exports.migrateTelemetryDirs = migrateTelemetryDirs;
31
- exports.parseArgs = parseArgs;
32
- const node_fs_1 = require("node:fs");
33
- const node_path_1 = require("node:path");
34
- const logging_1 = require("../lib/logging");
35
- const telemetry_paths_1 = require("../lib/telemetry/telemetry-paths");
36
- const logger = (0, logging_1.getScriptLogger)("migrate-telemetry-dir-names");
37
- const ALREADY_MIGRATED_RX = /^\d+-[0-9a-f]{8}$/;
38
- /**
39
- * Drive the migration end-to-end across every site under `sitesRoot`.
40
- * Returns a tally so callers (CLI + tests) can assert outcomes without
41
- * scraping log output.
42
- */
43
- function migrateTelemetryDirs(opts) {
44
- const outcome = { migrated: 0, alreadyMigrated: 0, warnings: 0 };
45
- if (!(0, node_fs_1.existsSync)(opts.sitesRoot)) {
46
- logger.warn(`sites root not found: ${opts.sitesRoot}`);
47
- outcome.warnings++;
48
- return outcome;
49
- }
50
- const siteDirs = (0, node_fs_1.readdirSync)(opts.sitesRoot, { withFileTypes: true })
51
- .filter((d) => d.isDirectory())
52
- .filter((d) => opts.siteFilter === null || d.name === opts.siteFilter)
53
- .map((d) => (0, node_path_1.join)(opts.sitesRoot, d.name));
54
- for (const siteDir of siteDirs) {
55
- const runsDir = (0, node_path_1.join)(siteDir, "telemetry", "runs");
56
- if (!(0, node_fs_1.existsSync)(runsDir))
57
- continue;
58
- migrateRunsDir(runsDir, opts.apply, outcome);
59
- }
60
- return outcome;
61
- }
62
- /**
63
- * Per-`runs/` walker. Inspects every child entry; rename-eligible ones get
64
- * routed to renamePartition, which is also where dry-run vs apply is gated.
65
- */
66
- function migrateRunsDir(runsDir, apply, outcome) {
67
- const partitions = (0, node_fs_1.readdirSync)(runsDir, { withFileTypes: true }).filter((d) => d.isDirectory());
68
- for (const partition of partitions) {
69
- const partitionPath = (0, node_path_1.join)(runsDir, partition.name);
70
- if (ALREADY_MIGRATED_RX.test(partition.name)) {
71
- logger.info(`skip (already migrated): ${partitionPath}`);
72
- outcome.alreadyMigrated++;
73
- continue;
74
- }
75
- renamePartition(runsDir, partition.name, apply, outcome);
76
- }
77
- }
78
- /**
79
- * Compute the target name from `url.txt` + mtime, then dry-run-or-rename.
80
- * Skips with a warning when the partition is missing the sidecar (can't
81
- * recover URL), when the target already exists (collision; needs manual
82
- * triage), or when mtime can't be read.
83
- */
84
- function renamePartition(runsDir, oldName, apply, outcome) {
85
- const partitionPath = (0, node_path_1.join)(runsDir, oldName);
86
- const urlTxtPath = (0, node_path_1.join)(partitionPath, "url.txt");
87
- if (!(0, node_fs_1.existsSync)(urlTxtPath)) {
88
- logger.warn(`skip (no url.txt): ${partitionPath}`);
89
- outcome.warnings++;
90
- return;
91
- }
92
- const url = (0, node_fs_1.readFileSync)(urlTxtPath, "utf8").trim();
93
- if (url.length === 0) {
94
- logger.warn(`skip (empty url.txt): ${partitionPath}`);
95
- outcome.warnings++;
96
- return;
97
- }
98
- const callsPath = (0, node_path_1.join)(partitionPath, "calls.ndjson");
99
- const mtimeMs = (0, node_fs_1.existsSync)(callsPath)
100
- ? Math.round((0, node_fs_1.statSync)(callsPath).mtimeMs)
101
- : Math.round((0, node_fs_1.statSync)(partitionPath).mtimeMs);
102
- const newName = (0, telemetry_paths_1.urlDirName)(mtimeMs, url);
103
- if (newName === oldName) {
104
- logger.info(`skip (same name): ${partitionPath}`);
105
- outcome.alreadyMigrated++;
106
- return;
107
- }
108
- const newPath = (0, node_path_1.join)(runsDir, newName);
109
- if ((0, node_fs_1.existsSync)(newPath)) {
110
- logger.warn(`skip (target collision): ${partitionPath} → ${newPath}`);
111
- outcome.warnings++;
112
- return;
113
- }
114
- if (apply) {
115
- (0, node_fs_1.renameSync)(partitionPath, newPath);
116
- logger.info(`renamed: ${oldName} → ${newName} (in ${runsDir})`);
117
- }
118
- else {
119
- logger.info(`dry-run: ${oldName} → ${newName} (in ${runsDir})`);
120
- }
121
- outcome.migrated++;
122
- }
123
- /**
124
- * Tiny argv parser matching the rest of the scripts in this dir. Exposed
125
- * for unit tests; defaults to dry-run (apply=false).
126
- */
127
- function parseArgs(argv) {
128
- const args = argv.slice(2);
129
- let apply = false;
130
- let siteFilter = null;
131
- for (let i = 0; i < args.length; i++) {
132
- const arg = args[i];
133
- if (arg === "--apply") {
134
- apply = true;
135
- }
136
- else if (arg === "--site" && args[i + 1]) {
137
- siteFilter = args[++i] ?? null;
138
- }
139
- }
140
- return { apply, siteFilter };
141
- }
142
- async function main() {
143
- const { apply, siteFilter } = parseArgs(process.argv);
144
- const sitesRoot = (0, node_path_1.join)(process.cwd(), "src", "sites");
145
- logger.info(`migrate-telemetry-dir-names: sitesRoot=${sitesRoot} siteFilter=${siteFilter ?? "(all)"} apply=${apply}`);
146
- const outcome = migrateTelemetryDirs({ sitesRoot, siteFilter, apply });
147
- logger.info(`summary: ${outcome.migrated} ${apply ? "renamed" : "planned"}, ${outcome.alreadyMigrated} skipped (already migrated), ${outcome.warnings} warning(s)`);
148
- if (!apply && outcome.migrated > 0) {
149
- logger.info(`re-run with --apply to execute the renames`);
150
- }
151
- }
152
- main().catch((err) => {
153
- logger.error(`migrate-telemetry-dir-names failed: ${err instanceof Error ? err.message : String(err)}`);
154
- process.exit(1);
155
- });
156
- //# sourceMappingURL=migrate-telemetry-dir-names.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"migrate-telemetry-dir-names.js","sourceRoot":"","sources":["../../src/scripts/migrate-telemetry-dir-names.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;;;;AAEH,qCAAsF;AACtF,yCAAiC;AAEjC,2CAAgD;AAChD,qEAA6D;AAE7D,MAAM,MAAM,GAAG,IAAA,yBAAe,EAAC,6BAA6B,CAAC,CAAC;AAE9D,MAAM,mBAAmB,GAAG,mBAAmB,CAAC;AAiBhD;;;;GAIG;AACH,8BAAqC,IAAoB;IACvD,MAAM,OAAO,GAAqB,EAAE,QAAQ,EAAE,CAAC,EAAE,eAAe,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;IACnF,IAAI,CAAC,IAAA,oBAAU,EAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;QAChC,MAAM,CAAC,IAAI,CAAC,yBAAyB,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;QACvD,OAAO,CAAC,QAAQ,EAAE,CAAC;QACnB,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,MAAM,QAAQ,GAAG,IAAA,qBAAW,EAAC,IAAI,CAAC,SAAS,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;SAClE,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;SAC9B,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,KAAK,IAAI,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,UAAU,CAAC;SACrE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAA,gBAAI,EAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAC5C,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,MAAM,OAAO,GAAG,IAAA,gBAAI,EAAC,OAAO,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;QACnD,IAAI,CAAC,IAAA,oBAAU,EAAC,OAAO,CAAC;YAAE,SAAS;QACnC,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC/C,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;GAGG;AACH,SAAS,cAAc,CAAC,OAAe,EAAE,KAAc,EAAE,OAAyB;IAChF,MAAM,UAAU,GAAG,IAAA,qBAAW,EAAC,OAAO,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;IAChG,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,MAAM,aAAa,GAAG,IAAA,gBAAI,EAAC,OAAO,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;QACpD,IAAI,mBAAmB,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7C,MAAM,CAAC,IAAI,CAAC,4BAA4B,aAAa,EAAE,CAAC,CAAC;YACzD,OAAO,CAAC,eAAe,EAAE,CAAC;YAC1B,SAAS;QACX,CAAC;QACD,eAAe,CAAC,OAAO,EAAE,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IAC3D,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,SAAS,eAAe,CACtB,OAAe,EACf,OAAe,EACf,KAAc,EACd,OAAyB;IAEzB,MAAM,aAAa,GAAG,IAAA,gBAAI,EAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC7C,MAAM,UAAU,GAAG,IAAA,gBAAI,EAAC,aAAa,EAAE,SAAS,CAAC,CAAC;IAClD,IAAI,CAAC,IAAA,oBAAU,EAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,MAAM,CAAC,IAAI,CAAC,sBAAsB,aAAa,EAAE,CAAC,CAAC;QACnD,OAAO,CAAC,QAAQ,EAAE,CAAC;QACnB,OAAO;IACT,CAAC;IACD,MAAM,GAAG,GAAG,IAAA,sBAAY,EAAC,UAAU,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;IACpD,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrB,MAAM,CAAC,IAAI,CAAC,yBAAyB,aAAa,EAAE,CAAC,CAAC;QACtD,OAAO,CAAC,QAAQ,EAAE,CAAC;QACnB,OAAO;IACT,CAAC;IACD,MAAM,SAAS,GAAG,IAAA,gBAAI,EAAC,aAAa,EAAE,cAAc,CAAC,CAAC;IACtD,MAAM,OAAO,GAAG,IAAA,oBAAU,EAAC,SAAS,CAAC;QACnC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAA,kBAAQ,EAAC,SAAS,CAAC,CAAC,OAAO,CAAC;QACzC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAA,kBAAQ,EAAC,aAAa,CAAC,CAAC,OAAO,CAAC,CAAC;IAChD,MAAM,OAAO,GAAG,IAAA,4BAAU,EAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IACzC,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;QACxB,MAAM,CAAC,IAAI,CAAC,qBAAqB,aAAa,EAAE,CAAC,CAAC;QAClD,OAAO,CAAC,eAAe,EAAE,CAAC;QAC1B,OAAO;IACT,CAAC;IACD,MAAM,OAAO,GAAG,IAAA,gBAAI,EAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACvC,IAAI,IAAA,oBAAU,EAAC,OAAO,CAAC,EAAE,CAAC;QACxB,MAAM,CAAC,IAAI,CAAC,4BAA4B,aAAa,MAAM,OAAO,EAAE,CAAC,CAAC;QACtE,OAAO,CAAC,QAAQ,EAAE,CAAC;QACnB,OAAO;IACT,CAAC;IACD,IAAI,KAAK,EAAE,CAAC;QACV,IAAA,oBAAU,EAAC,aAAa,EAAE,OAAO,CAAC,CAAC;QACnC,MAAM,CAAC,IAAI,CAAC,YAAY,OAAO,MAAM,OAAO,QAAQ,OAAO,GAAG,CAAC,CAAC;IAClE,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,IAAI,CAAC,YAAY,OAAO,MAAM,OAAO,QAAQ,OAAO,GAAG,CAAC,CAAC;IAClE,CAAC;IACD,OAAO,CAAC,QAAQ,EAAE,CAAC;AACrB,CAAC;AAOD;;;GAGG;AACH,mBAA0B,IAAc;IACtC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC3B,IAAI,KAAK,GAAG,KAAK,CAAC;IAClB,IAAI,UAAU,GAAkB,IAAI,CAAC;IACrC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACtB,KAAK,GAAG,IAAI,CAAC;QACf,CAAC;aAAM,IAAI,GAAG,KAAK,QAAQ,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YAC3C,UAAU,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC;QACjC,CAAC;IACH,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;AAC/B,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACtD,MAAM,SAAS,GAAG,IAAA,gBAAI,EAAC,OAAO,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IACtD,MAAM,CAAC,IAAI,CACT,0CAA0C,SAAS,eAAe,UAAU,IAAI,OAAO,UAAU,KAAK,EAAE,CACzG,CAAC;IACF,MAAM,OAAO,GAAG,oBAAoB,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC;IACvE,MAAM,CAAC,IAAI,CACT,YAAY,OAAO,CAAC,QAAQ,IAAI,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,KAAK,OAAO,CAAC,eAAe,gCAAgC,OAAO,CAAC,QAAQ,aAAa,CACvJ,CAAC;IACF,IAAI,CAAC,KAAK,IAAI,OAAO,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC;QACnC,MAAM,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;IAC5D,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;IAC5B,MAAM,CAAC,KAAK,CACV,uCAAuC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAC1F,CAAC;IACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}