@enricai/barnacle 1.6.12 → 1.6.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +113 -9
- package/dist/api/schemas/submissions.d.ts +14 -0
- package/dist/api/schemas/submissions.d.ts.map +1 -1
- package/dist/api/schemas/submissions.js +1 -0
- package/dist/api/schemas/submissions.js.map +1 -1
- package/dist/config.d.ts +33 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +4 -0
- package/dist/config.js.map +1 -1
- package/dist/lib/bedrock.d.ts +8 -5
- package/dist/lib/bedrock.d.ts.map +1 -1
- package/dist/lib/bedrock.js +8 -5
- package/dist/lib/bedrock.js.map +1 -1
- package/dist/lib/http.d.ts +4 -3
- package/dist/lib/http.d.ts.map +1 -1
- package/dist/lib/http.js +25 -3
- package/dist/lib/http.js.map +1 -1
- package/dist/lib/telemetry/beacon-capture.d.ts +45 -2
- package/dist/lib/telemetry/beacon-capture.d.ts.map +1 -1
- package/dist/lib/telemetry/beacon-capture.js +36 -0
- package/dist/lib/telemetry/beacon-capture.js.map +1 -1
- package/dist/lib/telemetry/reconciliation-record.d.ts +41 -1
- package/dist/lib/telemetry/reconciliation-record.d.ts.map +1 -1
- package/dist/lib/telemetry/reconciliation-record.js +29 -2
- package/dist/lib/telemetry/reconciliation-record.js.map +1 -1
- package/dist/lib/telemetry/reconciliation-source.d.ts +7 -1
- package/dist/lib/telemetry/reconciliation-source.d.ts.map +1 -1
- package/dist/lib/telemetry/reconciliation-source.js +21 -5
- package/dist/lib/telemetry/reconciliation-source.js.map +1 -1
- package/dist/lib/telemetry/run-telemetry.d.ts +67 -0
- package/dist/lib/telemetry/run-telemetry.d.ts.map +1 -0
- package/dist/lib/telemetry/run-telemetry.js +55 -0
- package/dist/lib/telemetry/run-telemetry.js.map +1 -0
- package/dist/lib/telemetry/submission-capture.d.ts +11 -4
- package/dist/lib/telemetry/submission-capture.d.ts.map +1 -1
- package/dist/lib/telemetry/submission-capture.js +1 -0
- package/dist/lib/telemetry/submission-capture.js.map +1 -1
- package/dist/lib/telemetry/submission-reader.d.ts +11 -3
- package/dist/lib/telemetry/submission-reader.d.ts.map +1 -1
- package/dist/lib/telemetry/submission-reader.js +32 -8
- package/dist/lib/telemetry/submission-reader.js.map +1 -1
- package/dist/lib/tracking-click.d.ts.map +1 -1
- package/dist/lib/tracking-click.js +19 -0
- package/dist/lib/tracking-click.js.map +1 -1
- package/dist/plugins/config-plugin.js +3 -3
- package/dist/plugins/loader.d.ts +20 -0
- package/dist/plugins/loader.d.ts.map +1 -1
- package/dist/plugins/loader.js +94 -17
- package/dist/plugins/loader.js.map +1 -1
- package/dist/scraper/deep-locator-actuate.d.ts +94 -0
- package/dist/scraper/deep-locator-actuate.d.ts.map +1 -0
- package/dist/scraper/deep-locator-actuate.js +216 -0
- package/dist/scraper/deep-locator-actuate.js.map +1 -0
- package/dist/scraper/deep-locator-candidates.d.ts +105 -18
- package/dist/scraper/deep-locator-candidates.d.ts.map +1 -1
- package/dist/scraper/deep-locator-candidates.js +238 -46
- package/dist/scraper/deep-locator-candidates.js.map +1 -1
- package/dist/scraper/deep-locator-click.d.ts +71 -0
- package/dist/scraper/deep-locator-click.d.ts.map +1 -0
- package/dist/scraper/deep-locator-click.js +71 -0
- package/dist/scraper/deep-locator-click.js.map +1 -0
- package/dist/scraper/deep-locator-fake.d.ts +344 -14
- package/dist/scraper/deep-locator-fake.d.ts.map +1 -1
- package/dist/scraper/deep-locator-fake.js +509 -7
- package/dist/scraper/deep-locator-fake.js.map +1 -1
- package/dist/scraper/deep-locator-scan.d.ts +220 -0
- package/dist/scraper/deep-locator-scan.d.ts.map +1 -0
- package/dist/scraper/deep-locator-scan.js +386 -0
- package/dist/scraper/deep-locator-scan.js.map +1 -0
- package/dist/scraper/fake-timer-advance.d.ts +47 -0
- package/dist/scraper/fake-timer-advance.d.ts.map +1 -0
- package/dist/scraper/fake-timer-advance.js +44 -0
- package/dist/scraper/fake-timer-advance.js.map +1 -0
- package/dist/scraper/flow-runner.d.ts +80 -9
- package/dist/scraper/flow-runner.d.ts.map +1 -1
- package/dist/scraper/flow-runner.js +417 -63
- package/dist/scraper/flow-runner.js.map +1 -1
- package/dist/scraper/frame-target.d.ts +28 -0
- package/dist/scraper/frame-target.d.ts.map +1 -1
- package/dist/scraper/frame-target.js +30 -0
- package/dist/scraper/frame-target.js.map +1 -1
- package/dist/scraper/session-browserbase.d.ts +13 -0
- package/dist/scraper/session-browserbase.d.ts.map +1 -1
- package/dist/scraper/session-browserbase.js +29 -0
- package/dist/scraper/session-browserbase.js.map +1 -1
- package/dist/scraper/session-ip.d.ts +69 -0
- package/dist/scraper/session-ip.d.ts.map +1 -0
- package/dist/scraper/session-ip.js +88 -0
- package/dist/scraper/session-ip.js.map +1 -0
- package/dist/scraper/session-shared.d.ts +9 -0
- package/dist/scraper/session-shared.d.ts.map +1 -1
- package/dist/scraper/session-shared.js.map +1 -1
- package/dist/scraper/submit-control.d.ts +14 -2
- package/dist/scraper/submit-control.d.ts.map +1 -1
- package/dist/scraper/submit-control.js +33 -2
- package/dist/scraper/submit-control.js.map +1 -1
- package/dist/scripts/recon-browser.d.ts +1 -1
- package/dist/scripts/recon-browser.d.ts.map +1 -1
- package/dist/scripts/recon-browser.js +48 -16
- package/dist/scripts/recon-browser.js.map +1 -1
- package/dist/scripts/recon-generate.js +3 -3
- package/dist/scripts/recon-generate.js.map +1 -1
- package/dist/site-plugin.d.ts +20 -0
- package/dist/site-plugin.d.ts.map +1 -1
- package/dist/testing/integration-runner.d.ts.map +1 -1
- package/dist/testing/integration-runner.js +6 -7
- package/dist/testing/integration-runner.js.map +1 -1
- package/package.json +3 -2
|
@@ -1,9 +1,20 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DENSE_FORM_DECOY_TEXTS = exports.DENSE_FORM_TARGET_TEXT = exports.DENSE_FORM_TOTAL_COUNT = exports.NODE_NOT_ACTIONABLE_MESSAGE = void 0;
|
|
3
4
|
exports.registerDeepLocatorHop = registerDeepLocatorHop;
|
|
4
5
|
exports.registerDeepLocatorHopElements = registerDeepLocatorHopElements;
|
|
5
6
|
exports.registerDeepLocatorHangingHop = registerDeepLocatorHangingHop;
|
|
7
|
+
exports.registerDeepLocatorHopLatency = registerDeepLocatorHopLatency;
|
|
6
8
|
exports.makeFakeDeepLocator = makeFakeDeepLocator;
|
|
9
|
+
exports.makeFakeDomElement = makeFakeDomElement;
|
|
10
|
+
exports.makeSelectorAwareDomRoot = makeSelectorAwareDomRoot;
|
|
11
|
+
exports.buildDenseFormFixture = buildDenseFormFixture;
|
|
12
|
+
exports.makeFakeFrameScan = makeFakeFrameScan;
|
|
13
|
+
exports.makeFakeFrameClickByIndex = makeFakeFrameClickByIndex;
|
|
14
|
+
exports.makeFakeFrameFillByIndex = makeFakeFrameFillByIndex;
|
|
15
|
+
exports.makeFakeFrameSelectByIndex = makeFakeFrameSelectByIndex;
|
|
16
|
+
exports.makeFakeFrameResolutionPage = makeFakeFrameResolutionPage;
|
|
17
|
+
const vitest_1 = require("vitest");
|
|
7
18
|
function buildHop(elements) {
|
|
8
19
|
const first = elements[0];
|
|
9
20
|
if (!first)
|
|
@@ -16,6 +27,9 @@ function buildHop(elements) {
|
|
|
16
27
|
get filledWith() {
|
|
17
28
|
return first.filledWith;
|
|
18
29
|
},
|
|
30
|
+
get selectedWith() {
|
|
31
|
+
return first.selectedWith;
|
|
32
|
+
},
|
|
19
33
|
get text() {
|
|
20
34
|
return first.text;
|
|
21
35
|
},
|
|
@@ -31,16 +45,30 @@ function registerDeepLocatorHop(frame, selector, text = "") {
|
|
|
31
45
|
}
|
|
32
46
|
/**
|
|
33
47
|
* Registers a hop selector with N ordered candidate elements so
|
|
34
|
-
* `deepLocator(selector).count()` resolves to `
|
|
48
|
+
* `deepLocator(selector).count()` resolves to `elements.length` and
|
|
35
49
|
* `nth(i).textContent()`/`nth(i).click()`/`nth(i).fill()` act on element `i`
|
|
36
50
|
* specifically — the shape a real cross-origin OOPIF hop resolves to when
|
|
37
51
|
* more than one element matches the inner selector (e.g. `"*"` matching
|
|
38
52
|
* every node in the iframe), which the single-element
|
|
39
|
-
* {@link registerDeepLocatorHop} path can't model.
|
|
53
|
+
* {@link registerDeepLocatorHop} path can't model. Each entry is either a
|
|
54
|
+
* bare string (rendered, `visible: true`) or a
|
|
55
|
+
* {@link FakeDeepLocatorElementSpec} for a candidate that also needs
|
|
56
|
+
* non-default layout state — mixing both in one call models a hop where
|
|
57
|
+
* only some candidates have a layout box, same as a real dense OOPIF form.
|
|
40
58
|
*/
|
|
41
|
-
function registerDeepLocatorHopElements(frame, selector,
|
|
42
|
-
const
|
|
43
|
-
|
|
59
|
+
function registerDeepLocatorHopElements(frame, selector, elements) {
|
|
60
|
+
const built = elements.map((entry) => {
|
|
61
|
+
const spec = typeof entry === "string" ? { text: entry } : entry;
|
|
62
|
+
return {
|
|
63
|
+
clicks: 0,
|
|
64
|
+
filledWith: null,
|
|
65
|
+
selectedWith: null,
|
|
66
|
+
text: spec.text,
|
|
67
|
+
visible: spec.visible ?? true,
|
|
68
|
+
tagName: spec.tagName,
|
|
69
|
+
};
|
|
70
|
+
});
|
|
71
|
+
const hop = buildHop(built);
|
|
44
72
|
frame.set(selector, hop);
|
|
45
73
|
return hop;
|
|
46
74
|
}
|
|
@@ -72,6 +100,79 @@ function registerDeepLocatorHangingHop(frame, selector, options) {
|
|
|
72
100
|
hangGates.set(hop, { hangOn, deferred });
|
|
73
101
|
return { hop, release: deferred.resolve };
|
|
74
102
|
}
|
|
103
|
+
/**
|
|
104
|
+
* Keyed by hop object (not selector), the same pattern {@link hangGates}
|
|
105
|
+
* uses, so a finite per-call delay travels with a hop's return value without
|
|
106
|
+
* widening {@link FakeDeepLocatorHop}'s public shape.
|
|
107
|
+
*/
|
|
108
|
+
const latencyGates = new WeakMap();
|
|
109
|
+
/**
|
|
110
|
+
* Charges `repeats` sequential `delayMs` round-trips when `method` is
|
|
111
|
+
* registered against `hop`'s latency profile, immediate otherwise. `repeats`
|
|
112
|
+
* defaults to 1 (a flat per-call cost) — {@link buildFakeDelegate} passes
|
|
113
|
+
* `elementIndex + 1` for the methods that model Stagehand's per-index
|
|
114
|
+
* resolve cost (see {@link INDEXED_RESOLVE_METHODS}), everything else stays
|
|
115
|
+
* flat regardless of which index a caller chained `nth()` onto.
|
|
116
|
+
*/
|
|
117
|
+
async function delayIfRegistered(hop, method, repeats = 1) {
|
|
118
|
+
const gate = hop ? latencyGates.get(hop) : undefined;
|
|
119
|
+
if (!gate?.delayOn.has(method))
|
|
120
|
+
return;
|
|
121
|
+
for (let call = 0; call < repeats; call += 1) {
|
|
122
|
+
await new Promise((resolve) => setTimeout(resolve, gate.delayMs));
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Attaches a finite per-call delay to an already-registered hop's `delayOn`
|
|
127
|
+
* methods, leaving every other method — and every other hop — immediate.
|
|
128
|
+
* This is the seam a test uses to prove a batched fix collapses N serial
|
|
129
|
+
* round-trips into one: register the same `delayMs` against `"textContent"`/
|
|
130
|
+
* `"click"`/`"fill"`/`"selectOption"`/`"inputValue"` (the legacy per-index
|
|
131
|
+
* paths, charged `index + 1` times — see {@link INDEXED_RESOLVE_METHODS}) and
|
|
132
|
+
* `"scan"`/`"clickByIndex"` (the batched paths, always charged once) on the
|
|
133
|
+
* same hop, then compare how time scales
|
|
134
|
+
* with candidate count/index through each. Unlike
|
|
135
|
+
* {@link registerDeepLocatorHangingHop}, calls resolve on their own after
|
|
136
|
+
* `delayMs` — there is no `release()`.
|
|
137
|
+
*/
|
|
138
|
+
function registerDeepLocatorHopLatency(hop, options) {
|
|
139
|
+
const delayOn = new Set(Array.isArray(options.delayOn) ? options.delayOn : [options.delayOn]);
|
|
140
|
+
latencyGates.set(hop, { delayOn, delayMs: options.delayMs });
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* The literal CDP error message a real `DOM.getBoxModel`/
|
|
144
|
+
* `DOM.scrollIntoViewIfNeeded` failure over "no layout object" arrives as
|
|
145
|
+
* (`understudy/cdp.js`) — exported so both this fake's click rejection and a
|
|
146
|
+
* consuming test assert against the same string bugfix-001's
|
|
147
|
+
* `isNodeNotActionableError` (`deep-locator-scan.ts`) matches.
|
|
148
|
+
*/
|
|
149
|
+
exports.NODE_NOT_ACTIONABLE_MESSAGE = "-32000 Node does not have a layout object";
|
|
150
|
+
/**
|
|
151
|
+
* The delegate methods whose real cost scales with the resolved index:
|
|
152
|
+
* Stagehand 3.7.0's `resolveAtIndex(query, index)` calls
|
|
153
|
+
* `resolveAll(query, {limit: index + 1})`, whose `resolveCss` runs
|
|
154
|
+
* `for (let i = 0; i < limit; i += 1) { await this.evaluateElement(...) }`
|
|
155
|
+
* (`selectorResolver.js`) — one serial CDP `Runtime.evaluate` per index, so
|
|
156
|
+
* `nth(k)` pays `k + 1` round-trips, not one. `click()`/`textContent()` call
|
|
157
|
+
* `resolveAtIndex` directly; `fill()`/`selectOption()`/`inputValue()` route
|
|
158
|
+
* through `Locator.resolveNode() -> resolveAtIndex(query, index)` the same
|
|
159
|
+
* way, paying the identical `index + 1` cost — pinned against the installed
|
|
160
|
+
* `@browserbasehq/stagehand` in
|
|
161
|
+
* `deep-locator-stagehand-contract.test.ts`'s `Locator.fill/selectOption/
|
|
162
|
+
* inputValue route through resolveNode()` suite. A write/read-back actuation
|
|
163
|
+
* (`fillDeepLocatorCandidate` in `deep-locator-actuate.ts`: `fill()` then
|
|
164
|
+
* `inputValue()`) therefore pays `2 * (index + 1)` round-trips total, not one
|
|
165
|
+
* flat cost. `count()` resolves the whole match set once regardless of which
|
|
166
|
+
* index a caller later chains `nth()` onto, so it — and the batched
|
|
167
|
+
* `scan`/`clickByIndex` seams — stay a flat one-call cost.
|
|
168
|
+
*/
|
|
169
|
+
const INDEXED_RESOLVE_METHODS = new Set([
|
|
170
|
+
"click",
|
|
171
|
+
"textContent",
|
|
172
|
+
"fill",
|
|
173
|
+
"selectOption",
|
|
174
|
+
"inputValue",
|
|
175
|
+
]);
|
|
75
176
|
/**
|
|
76
177
|
* Builds a `deepLocator()`-shaped delegate resolving against `frame`, scoped
|
|
77
178
|
* to a single `elementIndex` (defaulting to 0, matching the real delegate's
|
|
@@ -81,6 +182,14 @@ function registerDeepLocatorHangingHop(frame, selector, options) {
|
|
|
81
182
|
* scenario) still resolves once registered. `count()` reports the hop's full
|
|
82
183
|
* `elements.length` regardless of `elementIndex`, mirroring the real
|
|
83
184
|
* delegate: `nth(i).count()` still reports the total match count, not `1`.
|
|
185
|
+
* `click()`/`fill()`/`selectOption()` each reject with
|
|
186
|
+
* {@link NODE_NOT_ACTIONABLE_MESSAGE} when the targeted element's `visible`
|
|
187
|
+
* is `false`, reproducing the CDP `-32000` actuation failure on an
|
|
188
|
+
* unrendered node. `click()`/`textContent()`/`fill()`/`selectOption()`/
|
|
189
|
+
* `inputValue()` charge `elementIndex + 1` delay units under a registered
|
|
190
|
+
* latency profile (see {@link INDEXED_RESOLVE_METHODS}), modeling
|
|
191
|
+
* Stagehand's per-index resolve cost — `count()` and the batched
|
|
192
|
+
* `scan`/`clickByIndex` seams stay a flat one-call cost.
|
|
84
193
|
*/
|
|
85
194
|
function buildFakeDelegate(frame, selector, elementIndex = 0) {
|
|
86
195
|
const requireElement = () => {
|
|
@@ -96,19 +205,50 @@ function buildFakeDelegate(frame, selector, elementIndex = 0) {
|
|
|
96
205
|
if (gate?.hangOn.has(method))
|
|
97
206
|
await gate.deferred.promise;
|
|
98
207
|
};
|
|
208
|
+
const delayForMethod = (method) => delayIfRegistered(frame.get(selector), method, INDEXED_RESOLVE_METHODS.has(method) ? elementIndex + 1 : 1);
|
|
99
209
|
return {
|
|
100
210
|
count: async () => {
|
|
211
|
+
await delayForMethod("count");
|
|
101
212
|
await awaitReleaseIfHungOn("count");
|
|
102
213
|
return frame.get(selector)?.elements.length ?? 0;
|
|
103
214
|
},
|
|
104
215
|
click: async () => {
|
|
216
|
+
await delayForMethod("click");
|
|
105
217
|
await awaitReleaseIfHungOn("click");
|
|
106
|
-
requireElement()
|
|
218
|
+
const element = requireElement();
|
|
219
|
+
if (!element.visible)
|
|
220
|
+
throw new Error(exports.NODE_NOT_ACTIONABLE_MESSAGE);
|
|
221
|
+
element.clicks += 1;
|
|
107
222
|
},
|
|
108
223
|
fill: async (value) => {
|
|
109
|
-
|
|
224
|
+
await delayForMethod("fill");
|
|
225
|
+
await awaitReleaseIfHungOn("fill");
|
|
226
|
+
const element = requireElement();
|
|
227
|
+
if (!element.visible)
|
|
228
|
+
throw new Error(exports.NODE_NOT_ACTIONABLE_MESSAGE);
|
|
229
|
+
element.filledWith = value;
|
|
230
|
+
},
|
|
231
|
+
selectOption: async (values) => {
|
|
232
|
+
await delayForMethod("selectOption");
|
|
233
|
+
await awaitReleaseIfHungOn("selectOption");
|
|
234
|
+
const element = requireElement();
|
|
235
|
+
if (!element.visible)
|
|
236
|
+
throw new Error(exports.NODE_NOT_ACTIONABLE_MESSAGE);
|
|
237
|
+
if (element.tagName !== undefined && element.tagName !== "select") {
|
|
238
|
+
throw new Error(exports.NODE_NOT_ACTIONABLE_MESSAGE);
|
|
239
|
+
}
|
|
240
|
+
const selected = Array.isArray(values) ? values : [values];
|
|
241
|
+
element.selectedWith = selected;
|
|
242
|
+
return selected;
|
|
243
|
+
},
|
|
244
|
+
inputValue: async () => {
|
|
245
|
+
await delayForMethod("inputValue");
|
|
246
|
+
await awaitReleaseIfHungOn("inputValue");
|
|
247
|
+
const element = requireElement();
|
|
248
|
+
return element.readBackValue ?? element.selectedWith?.[0] ?? element.filledWith ?? "";
|
|
110
249
|
},
|
|
111
250
|
textContent: async () => {
|
|
251
|
+
await delayForMethod("textContent");
|
|
112
252
|
await awaitReleaseIfHungOn("textContent");
|
|
113
253
|
return requireElement().text;
|
|
114
254
|
},
|
|
@@ -125,4 +265,366 @@ function buildFakeDelegate(frame, selector, elementIndex = 0) {
|
|
|
125
265
|
function makeFakeDeepLocator(frame) {
|
|
126
266
|
return (selector) => buildFakeDelegate(frame, selector);
|
|
127
267
|
}
|
|
268
|
+
/** Parses one simple-selector clause — a bare tag, `[attr]`, or `[attr=value]` — the three shapes {@link INTERACTIVE_CANDIDATE_SELECTOR} composes via commas. No combinators, descendant selectors, or pseudo-classes: the generated expression only ever calls `querySelectorAll` with a flat, comma-joined clause list. */
|
|
269
|
+
function parseSimpleSelectorClause(clause) {
|
|
270
|
+
const trimmed = clause.trim();
|
|
271
|
+
const attrMatch = /^\[([a-zA-Z-]+)(?:=(.*))?\]$/.exec(trimmed);
|
|
272
|
+
if (!attrMatch)
|
|
273
|
+
return { tag: trimmed.toLowerCase() };
|
|
274
|
+
const [, attr, rawValue] = attrMatch;
|
|
275
|
+
const value = rawValue === undefined ? null : rawValue.replace(/^["']|["']$/g, "");
|
|
276
|
+
return { attr: attr ?? "", value };
|
|
277
|
+
}
|
|
278
|
+
/** Matches `el` against one comma-separated clause of a selector — the attribute-aware step {@link makeSelectorAwareDomRoot}'s `querySelectorAll` and {@link makeFakeDomElement}'s `closest` both need beyond a bare tag-name comparison. */
|
|
279
|
+
function matchesSelectorClause(el, clause) {
|
|
280
|
+
const parsed = parseSimpleSelectorClause(clause);
|
|
281
|
+
if ("tag" in parsed)
|
|
282
|
+
return el.tagName.toLowerCase() === parsed.tag;
|
|
283
|
+
const attrValue = el.getAttribute(parsed.attr);
|
|
284
|
+
if (attrValue === null)
|
|
285
|
+
return false;
|
|
286
|
+
return parsed.value === null || attrValue === parsed.value;
|
|
287
|
+
}
|
|
288
|
+
/** `true` when `el` matches any comma-separated clause of `selector` — the full `querySelectorAll(selector)` predicate. */
|
|
289
|
+
function matchesSelector(el, selector) {
|
|
290
|
+
return selector.split(",").some((clause) => matchesSelectorClause(el, clause));
|
|
291
|
+
}
|
|
292
|
+
/**
|
|
293
|
+
* Builds one fake DOM element. Defaults model a rendered, tag-less `div`
|
|
294
|
+
* with no accessible-name signal — the "structural filler" shape a dense
|
|
295
|
+
* form fixture needs many of — so a caller building a large fixture only
|
|
296
|
+
* spells out the overrides that make a specific element interesting.
|
|
297
|
+
*/
|
|
298
|
+
function makeFakeDomElement(textContent = "", options = {}) {
|
|
299
|
+
const tagName = options.tagName ?? "div";
|
|
300
|
+
const attributes = options.attributes ?? {};
|
|
301
|
+
const rect = options.rect ?? { width: 100, height: 20 };
|
|
302
|
+
const computedStyle = options.computedStyle ?? { display: "block", visibility: "visible" };
|
|
303
|
+
const parent = options.parent ?? null;
|
|
304
|
+
const dispatchedEvents = [];
|
|
305
|
+
const el = {
|
|
306
|
+
textContent,
|
|
307
|
+
tagName,
|
|
308
|
+
attributes,
|
|
309
|
+
rect,
|
|
310
|
+
computedStyle,
|
|
311
|
+
parent,
|
|
312
|
+
value: options.value ?? "",
|
|
313
|
+
options: options.options ?? [],
|
|
314
|
+
dispatchedEvents,
|
|
315
|
+
getBoundingClientRect() {
|
|
316
|
+
return rect;
|
|
317
|
+
},
|
|
318
|
+
getAttribute(name) {
|
|
319
|
+
return attributes[name] ?? null;
|
|
320
|
+
},
|
|
321
|
+
closest(selector) {
|
|
322
|
+
const found = (node) => {
|
|
323
|
+
if (!node)
|
|
324
|
+
return null;
|
|
325
|
+
return matchesSelector(node, selector) ? node : found(node.parent);
|
|
326
|
+
};
|
|
327
|
+
return found(el);
|
|
328
|
+
},
|
|
329
|
+
dispatchEvent(event) {
|
|
330
|
+
dispatchedEvents.push(event.type);
|
|
331
|
+
return true;
|
|
332
|
+
},
|
|
333
|
+
focus() { },
|
|
334
|
+
};
|
|
335
|
+
return el;
|
|
336
|
+
}
|
|
337
|
+
/**
|
|
338
|
+
* Builds a selector-aware fake `document` root: `querySelectorAll` supports
|
|
339
|
+
* the exact clause shapes {@link INTERACTIVE_CANDIDATE_SELECTOR} needs (a
|
|
340
|
+
* bare tag, `[attr]`, `[attr=value]`, comma-joined, or `"*"`) instead of
|
|
341
|
+
* `deep-locator-scan.test.ts`'s tag-only `makeRoot`, so a fixture exercising
|
|
342
|
+
* that constant's `[role=button]` / `[tabindex]` clauses actually selects
|
|
343
|
+
* against them.
|
|
344
|
+
*/
|
|
345
|
+
function makeSelectorAwareDomRoot(elements) {
|
|
346
|
+
return {
|
|
347
|
+
querySelectorAll(selector) {
|
|
348
|
+
if (selector.trim() === "*")
|
|
349
|
+
return [...elements];
|
|
350
|
+
return elements.filter((el) => matchesSelector(el, selector));
|
|
351
|
+
},
|
|
352
|
+
getElementById(id) {
|
|
353
|
+
return elements.find((el) => el.getAttribute("id") === id) ?? null;
|
|
354
|
+
},
|
|
355
|
+
};
|
|
356
|
+
}
|
|
357
|
+
/** Total node count {@link buildDenseFormFixture} produces — the live-measured `#talemetry_apply_iframe >> *` match count from the uchealth-7 bug report. */
|
|
358
|
+
exports.DENSE_FORM_TOTAL_COUNT = 371;
|
|
359
|
+
/** Accessible name {@link buildDenseFormFixture}'s icon-only target button resolves to — mirrors the live report's `button.c-SocialButton-button-25:has(svg[data-testid='EditIcon'])` control, modeled here as a plain icon-only `button` named via `aria-label` since `:has()` support is not what this fixture is for. */
|
|
360
|
+
exports.DENSE_FORM_TARGET_TEXT = "Manual Application";
|
|
361
|
+
/** Accessible names of {@link buildDenseFormFixture}'s two unrendered decoys — one `display:none`, one a 0x0 layout box — the two shapes a real click rejects with the CDP `-32000 Node does not have a layout object` error. */
|
|
362
|
+
exports.DENSE_FORM_DECOY_TEXTS = ["Upload a Resume/CV", "Use LinkedIn Profile"];
|
|
363
|
+
/**
|
|
364
|
+
* Builds the {@link DENSE_FORM_TOTAL_COUNT}-node dense-OOPIF-shaped fixture
|
|
365
|
+
* the uchealth-7 bug report measured (`#talemetry_apply_iframe >> *`
|
|
366
|
+
* matching 371 elements): mostly structural `div`/`span` filler, a handful
|
|
367
|
+
* of real form controls, an icon-only target button, and two unrendered
|
|
368
|
+
* decoys. Exported (not inlined per test file) so `test-002`'s Stagehand-
|
|
369
|
+
* resolver-contract pin can run the installed dependency's own resolver
|
|
370
|
+
* against the IDENTICAL fixture `deep-locator-scan.dense-form.test.ts`
|
|
371
|
+
* proves {@link buildScanFrameCandidatesExpr} against.
|
|
372
|
+
*/
|
|
373
|
+
function buildDenseFormFixture() {
|
|
374
|
+
const [uploadDecoyText, linkedinDecoyText] = exports.DENSE_FORM_DECOY_TEXTS;
|
|
375
|
+
const structuralCount = exports.DENSE_FORM_TOTAL_COUNT -
|
|
376
|
+
6 /* firstName, country, coverLetter, learnMore, saveDraft, moreOptions */ -
|
|
377
|
+
1 /* target */ -
|
|
378
|
+
2 /* decoys */;
|
|
379
|
+
const structural = Array.from({ length: structuralCount }, (_, index) => makeFakeDomElement("", { tagName: index % 2 === 0 ? "div" : "span" }));
|
|
380
|
+
const firstName = makeFakeDomElement("", {
|
|
381
|
+
tagName: "input",
|
|
382
|
+
attributes: { "aria-label": "First Name" },
|
|
383
|
+
});
|
|
384
|
+
const country = makeFakeDomElement("", {
|
|
385
|
+
tagName: "select",
|
|
386
|
+
attributes: { "aria-label": "Country" },
|
|
387
|
+
});
|
|
388
|
+
const coverLetter = makeFakeDomElement("", {
|
|
389
|
+
tagName: "textarea",
|
|
390
|
+
attributes: { "aria-label": "Cover Letter" },
|
|
391
|
+
});
|
|
392
|
+
const learnMore = makeFakeDomElement("Learn more", { tagName: "a", attributes: { href: "#" } });
|
|
393
|
+
const saveDraft = makeFakeDomElement("Save Draft", {
|
|
394
|
+
tagName: "div",
|
|
395
|
+
attributes: { role: "button" },
|
|
396
|
+
});
|
|
397
|
+
const moreOptions = makeFakeDomElement("More options", {
|
|
398
|
+
tagName: "div",
|
|
399
|
+
attributes: { tabindex: "0" },
|
|
400
|
+
});
|
|
401
|
+
const target = makeFakeDomElement("", {
|
|
402
|
+
tagName: "button",
|
|
403
|
+
attributes: { "aria-label": exports.DENSE_FORM_TARGET_TEXT },
|
|
404
|
+
});
|
|
405
|
+
const uploadDecoy = makeFakeDomElement(uploadDecoyText, {
|
|
406
|
+
tagName: "button",
|
|
407
|
+
computedStyle: { display: "none", visibility: "visible" },
|
|
408
|
+
});
|
|
409
|
+
const linkedinDecoy = makeFakeDomElement(linkedinDecoyText, {
|
|
410
|
+
tagName: "button",
|
|
411
|
+
rect: { width: 0, height: 0 },
|
|
412
|
+
});
|
|
413
|
+
const elements = [
|
|
414
|
+
...structural,
|
|
415
|
+
firstName,
|
|
416
|
+
country,
|
|
417
|
+
coverLetter,
|
|
418
|
+
learnMore,
|
|
419
|
+
saveDraft,
|
|
420
|
+
moreOptions,
|
|
421
|
+
uploadDecoy,
|
|
422
|
+
linkedinDecoy,
|
|
423
|
+
target,
|
|
424
|
+
];
|
|
425
|
+
return { root: makeSelectorAwareDomRoot(elements), elements };
|
|
426
|
+
}
|
|
427
|
+
/**
|
|
428
|
+
* Fake frame-scoped batched evaluate bound to `selector` — models the seam
|
|
429
|
+
* `resolveDeepLocatorCandidates`'s batched-scan fix calls once per frame via
|
|
430
|
+
* `FrameTarget.evaluate(buildScanFrameCandidatesExpr(innerSelector))`
|
|
431
|
+
* (`deep-locator-scan.ts`). Ignores whatever expression string it's called
|
|
432
|
+
* with — a fake cannot execute browser-side code, and `deep-locator-scan.
|
|
433
|
+
* test.ts`'s `node:vm` test is what proves the expression itself is correct
|
|
434
|
+
* — and instead returns the hop registered at `selector` as
|
|
435
|
+
* `FrameCandidateScanResult[]`, in registration order: the exact payload
|
|
436
|
+
* shape a real `Frame.evaluate` call resolves to. Pass the result into a
|
|
437
|
+
* fake `FrameTarget`'s `evaluate` field so a caller that reads through
|
|
438
|
+
* `target.evaluate(...)` resolves against fixture state instead of a
|
|
439
|
+
* browser.
|
|
440
|
+
*/
|
|
441
|
+
function makeFakeFrameScan(frame, selector) {
|
|
442
|
+
return async () => {
|
|
443
|
+
const hop = frame.get(selector);
|
|
444
|
+
await delayIfRegistered(hop, "scan");
|
|
445
|
+
if (!hop)
|
|
446
|
+
return [];
|
|
447
|
+
return hop.elements.map((element, index) => ({
|
|
448
|
+
index,
|
|
449
|
+
text: element.text,
|
|
450
|
+
visible: element.visible,
|
|
451
|
+
}));
|
|
452
|
+
};
|
|
453
|
+
}
|
|
454
|
+
/**
|
|
455
|
+
* Fake frame-scoped batched click-by-index bound to `selector` — models the
|
|
456
|
+
* seam a click-by-index fix would call once per click via a single frame
|
|
457
|
+
* evaluate, instead of the legacy delegate's `nth(index).click()` walking
|
|
458
|
+
* `resolveAtIndex`'s serial per-index loop (see {@link INDEXED_RESOLVE_METHODS}).
|
|
459
|
+
* Same "ignore the expression string, resolve against the hop registry"
|
|
460
|
+
* contract as {@link makeFakeFrameScan}: a fake cannot execute browser-side
|
|
461
|
+
* code, so the `expression` argument is accepted (mirroring `evaluate`'s
|
|
462
|
+
* signature) but never inspected. Increments `elements[index].clicks` when
|
|
463
|
+
* the targeted element is registered and `visible`, so an assertion like
|
|
464
|
+
* `hop.elements[i]?.clicks` reads the same regardless of which click path a
|
|
465
|
+
* consumer routes through. Resolves `{ clicked: false, reason }` — never
|
|
466
|
+
* throws — when `index` doesn't resolve to a registered element (hop
|
|
467
|
+
* unregistered, or `index` out of range) or the element is `visible: false`.
|
|
468
|
+
*/
|
|
469
|
+
function makeFakeFrameClickByIndex(frame, selector) {
|
|
470
|
+
return async (index) => {
|
|
471
|
+
const hop = frame.get(selector);
|
|
472
|
+
await delayIfRegistered(hop, "clickByIndex");
|
|
473
|
+
const element = hop?.elements[index];
|
|
474
|
+
if (!element)
|
|
475
|
+
return { clicked: false, reason: `deepLocator: no element at index ${index}` };
|
|
476
|
+
if (!element.visible)
|
|
477
|
+
return { clicked: false, reason: exports.NODE_NOT_ACTIONABLE_MESSAGE };
|
|
478
|
+
element.clicks += 1;
|
|
479
|
+
return { clicked: true };
|
|
480
|
+
};
|
|
481
|
+
}
|
|
482
|
+
/**
|
|
483
|
+
* Resolves a batched write against `hop.elements[index]`, shared by
|
|
484
|
+
* {@link makeFakeFrameFillByIndex} and {@link makeFakeFrameSelectByIndex}:
|
|
485
|
+
* `{ written: false, reason: "out-of-range" }` for an unregistered hop or an
|
|
486
|
+
* out-of-range index, `{ written: false, reason: "not-actionable" }` for a
|
|
487
|
+
* `visible: false` element (never throws, mirroring
|
|
488
|
+
* {@link buildFillFrameCandidateExpr}'s/{@link buildSelectFrameCandidateExpr}'s
|
|
489
|
+
* data-not-exception contract), otherwise writes `value` into `filledWith`
|
|
490
|
+
* and resolves `{ written: true, readBack }` — `readBack` honors
|
|
491
|
+
* `readBackValue` when set, the same "write that doesn't stick" override
|
|
492
|
+
* {@link buildFakeDelegate}'s `inputValue()` already applies.
|
|
493
|
+
*/
|
|
494
|
+
function resolveFakeBatchedWrite(hop, index, value) {
|
|
495
|
+
const element = hop?.elements[index];
|
|
496
|
+
if (!element)
|
|
497
|
+
return { written: false, reason: "out-of-range" };
|
|
498
|
+
if (!element.visible)
|
|
499
|
+
return { written: false, reason: "not-actionable" };
|
|
500
|
+
element.filledWith = value;
|
|
501
|
+
return { written: true, readBack: element.readBackValue ?? value };
|
|
502
|
+
}
|
|
503
|
+
/**
|
|
504
|
+
* Fake frame-scoped batched fill-by-index bound to `selector` — models the
|
|
505
|
+
* seam a batched-fill fix would call once per fill via a single frame
|
|
506
|
+
* evaluate (`buildFillFrameCandidateExpr`, `deep-locator-scan.ts`), instead
|
|
507
|
+
* of the legacy delegate's `nth(index).fill()`. Same "ignore the expression
|
|
508
|
+
* string, resolve against the hop registry" contract as
|
|
509
|
+
* {@link makeFakeFrameClickByIndex}: the fake cannot execute browser-side
|
|
510
|
+
* code, so `expression` is accepted (mirroring the real seam's signature)
|
|
511
|
+
* but never inspected — `value` is passed explicitly since it's what a real
|
|
512
|
+
* expression bakes in rather than something the fake could read back out of
|
|
513
|
+
* a string it never parses. See {@link resolveFakeBatchedWrite} for the
|
|
514
|
+
* shared not-actionable/out-of-range/write contract.
|
|
515
|
+
*/
|
|
516
|
+
function makeFakeFrameFillByIndex(frame, selector) {
|
|
517
|
+
return async (index, value) => {
|
|
518
|
+
const hop = frame.get(selector);
|
|
519
|
+
await delayIfRegistered(hop, "fillByIndex");
|
|
520
|
+
return resolveFakeBatchedWrite(hop, index, value);
|
|
521
|
+
};
|
|
522
|
+
}
|
|
523
|
+
/**
|
|
524
|
+
* Fake frame-scoped batched select-by-index bound to `selector` — models the
|
|
525
|
+
* seam a batched-select fix would call once per select via a single frame
|
|
526
|
+
* evaluate (`buildSelectFrameCandidateExpr`, `deep-locator-scan.ts`),
|
|
527
|
+
* instead of the legacy delegate's `nth(index).selectOption()`. Writes
|
|
528
|
+
* `optionValue` into the same `filledWith` field {@link makeFakeFrameFillByIndex}
|
|
529
|
+
* does rather than `selectedWith` — the real expression matches and reports a
|
|
530
|
+
* single option `value` (`FrameCandidateWriteResult.readBack` is one string,
|
|
531
|
+
* not the delegate's array-shaped `selectedWith`/multi-value `selectOption()`),
|
|
532
|
+
* so this batched primitive models the same single-value write shape as fill.
|
|
533
|
+
* Same "ignore the expression string" contract as
|
|
534
|
+
* {@link makeFakeFrameClickByIndex}; see {@link resolveFakeBatchedWrite} for
|
|
535
|
+
* the shared not-actionable/out-of-range/write contract.
|
|
536
|
+
*/
|
|
537
|
+
function makeFakeFrameSelectByIndex(frame, selector) {
|
|
538
|
+
return async (index, optionValue) => {
|
|
539
|
+
const hop = frame.get(selector);
|
|
540
|
+
await delayIfRegistered(hop, "selectByIndex");
|
|
541
|
+
return resolveFakeBatchedWrite(hop, index, optionValue);
|
|
542
|
+
};
|
|
543
|
+
}
|
|
544
|
+
/**
|
|
545
|
+
* Matches `tryResolveChildFrame`'s iframe-src probe expression
|
|
546
|
+
* (`frame-target.ts:207-211`, `document.querySelector(<selector>)`-shaped)
|
|
547
|
+
* and extracts the CSS selector it was built with — a fake cannot execute
|
|
548
|
+
* browser-side code, so it reads the selector back out of the expression
|
|
549
|
+
* string instead, the same technique
|
|
550
|
+
* `deep-locator-candidates.internal-frame-resolution.test.ts`'s
|
|
551
|
+
* `makeIframeSrcProbe` already uses. The capture group matches a complete
|
|
552
|
+
* `JSON.stringify`-quoted string (escaped-char-or-non-quote, repeated) rather
|
|
553
|
+
* than a lazy `.+?` up to the first `)` — a selector containing its own
|
|
554
|
+
* parens (`:not(...)`, `:has(...)`, `:nth-child(...)`) would otherwise
|
|
555
|
+
* truncate the match at that inner `)` and leave unparsable JSON.
|
|
556
|
+
*/
|
|
557
|
+
const IFRAME_SRC_PROBE_PATTERN = /document\.querySelector\(("(?:\\.|[^"\\])*")\)/;
|
|
558
|
+
function parseIframeSrcSelector(expression) {
|
|
559
|
+
const match = IFRAME_SRC_PROBE_PATTERN.exec(String(expression));
|
|
560
|
+
if (!match?.[1])
|
|
561
|
+
return null;
|
|
562
|
+
try {
|
|
563
|
+
return JSON.parse(match[1]);
|
|
564
|
+
}
|
|
565
|
+
catch {
|
|
566
|
+
return null;
|
|
567
|
+
}
|
|
568
|
+
}
|
|
569
|
+
/**
|
|
570
|
+
* Resolves `value` immediately (same-tick, no internal `await`, settling as
|
|
571
|
+
* a microtask) when `probeDelayMs` is `0`, or after a real `setTimeout` when
|
|
572
|
+
* positive. This is the exact dial that decides whether a fake wins or
|
|
573
|
+
* loses a `{ timeoutMs: 0 }` watchdog race: `withWatchdog`'s `Promise.race`
|
|
574
|
+
* (`watchdog.ts`) arms its own reject timer BEFORE the raced operation even
|
|
575
|
+
* starts, so any macrotask-settling probe loses to a zero-delay watchdog
|
|
576
|
+
* regardless of how small its own delay is — only a same-tick microtask
|
|
577
|
+
* resolve can win.
|
|
578
|
+
*/
|
|
579
|
+
function resolveAfterProbeDelay(value, probeDelayMs) {
|
|
580
|
+
if (probeDelayMs <= 0)
|
|
581
|
+
return Promise.resolve(value);
|
|
582
|
+
return new Promise((resolve) => setTimeout(() => resolve(value), probeDelayMs));
|
|
583
|
+
}
|
|
584
|
+
/**
|
|
585
|
+
* Builds a fake top `Page` + single child `Frame` pair bound to
|
|
586
|
+
* `iframeSelector` — the shared instrument every OOPIF throughput fixture
|
|
587
|
+
* hand-rolls a variant of (`flow-runner.oopif-click-throughput.test.ts` et
|
|
588
|
+
* al.) but none of which can model production CDP latency at frame-
|
|
589
|
+
* RESOLUTION time: every one of those resolves both of
|
|
590
|
+
* `tryResolveChildFrame`'s probes with no internal `await`, a same-tick
|
|
591
|
+
* microtask that always wins a `{ timeoutMs: 0 }` watchdog race and
|
|
592
|
+
* therefore MASKS the production degrade this fake exists to make
|
|
593
|
+
* testable. `probeDelayMs: 0` (the default) reproduces those fixtures'
|
|
594
|
+
* timing exactly, so nothing that later adopts this factory sees a timing
|
|
595
|
+
* change; a positive value reproduces the production degrade those
|
|
596
|
+
* fixtures structurally cannot.
|
|
597
|
+
*/
|
|
598
|
+
function makeFakeFrameResolutionPage(options) {
|
|
599
|
+
const probeDelayMs = options.probeDelayMs ?? 0;
|
|
600
|
+
const iframeProbeSpy = vitest_1.vi.fn();
|
|
601
|
+
const locationProbeSpy = vitest_1.vi.fn();
|
|
602
|
+
const childFrame = {
|
|
603
|
+
evaluate: async (expression) => {
|
|
604
|
+
if (expression === "location.href") {
|
|
605
|
+
locationProbeSpy(expression);
|
|
606
|
+
return resolveAfterProbeDelay(options.childSrc, probeDelayMs);
|
|
607
|
+
}
|
|
608
|
+
return (await options.onFrameEvaluate?.(expression)) ?? null;
|
|
609
|
+
},
|
|
610
|
+
locator: (selector) => ({ selector }),
|
|
611
|
+
};
|
|
612
|
+
const page = {
|
|
613
|
+
evaluate: async (expression) => {
|
|
614
|
+
iframeProbeSpy(expression);
|
|
615
|
+
const matched = parseIframeSrcSelector(expression) === options.iframeSelector;
|
|
616
|
+
return resolveAfterProbeDelay(matched ? { matched: true, src: options.childSrc } : { matched: false, src: null }, probeDelayMs);
|
|
617
|
+
},
|
|
618
|
+
url: () => "",
|
|
619
|
+
title: async () => "",
|
|
620
|
+
locator: (selector) => ({ selector }),
|
|
621
|
+
frames: () => [childFrame],
|
|
622
|
+
};
|
|
623
|
+
return {
|
|
624
|
+
page: page,
|
|
625
|
+
childFrame: childFrame,
|
|
626
|
+
iframeProbeSpy,
|
|
627
|
+
locationProbeSpy,
|
|
628
|
+
};
|
|
629
|
+
}
|
|
128
630
|
//# sourceMappingURL=deep-locator-fake.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deep-locator-fake.js","sourceRoot":"","sources":["../../src/scraper/deep-locator-fake.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"deep-locator-fake.js","sourceRoot":"","sources":["../../src/scraper/deep-locator-fake.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAEA,mCAA4B;AA+E5B,SAAS,QAAQ,CAAC,QAAkC;IAClD,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC1B,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;IACnF,OAAO;QACL,QAAQ;QACR,IAAI,MAAM;YACR,OAAO,KAAK,CAAC,MAAM,CAAC;QACtB,CAAC;QACD,IAAI,UAAU;YACZ,OAAO,KAAK,CAAC,UAAU,CAAC;QAC1B,CAAC;QACD,IAAI,YAAY;YACd,OAAO,KAAK,CAAC,YAAY,CAAC;QAC5B,CAAC;QACD,IAAI,IAAI;YACN,OAAO,KAAK,CAAC,IAAI,CAAC;QACpB,CAAC;KACF,CAAC;AACJ,CAAC;AAUD;;;;GAIG;AACH,gCACE,KAA2B,EAC3B,QAAgB,EAChB,IAAI,GAAG,EAAE;IAET,OAAO,8BAA8B,CAAC,KAAK,EAAE,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;AACjE,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,wCACE,KAA2B,EAC3B,QAAgB,EAChB,QAA4D;IAE5D,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QACnC,MAAM,IAAI,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;QACjE,OAAO;YACL,MAAM,EAAE,CAAC;YACT,UAAU,EAAE,IAAI;YAChB,YAAY,EAAE,IAAI;YAClB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,IAAI;YAC7B,OAAO,EAAE,IAAI,CAAC,OAAO;SACtB,CAAC;IACJ,CAAC,CAAC,CAAC;IACH,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC5B,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IACzB,OAAO,GAAG,CAAC;AACb,CAAC;AAuBD,SAAS,cAAc;IACrB,IAAI,OAAoB,CAAC;IACzB,MAAM,OAAO,GAAG,IAAI,OAAO,CAAO,CAAC,GAAG,EAAE,EAAE;QACxC,OAAO,GAAG,GAAG,CAAC;IAChB,CAAC,CAAC,CAAC;IACH,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;AAC9B,CAAC;AAOD;;;;;;GAMG;AACH,MAAM,SAAS,GAAG,IAAI,OAAO,EAAgC,CAAC;AAoB9D;;;;;GAKG;AACH,uCACE,KAA2B,EAC3B,QAAgB,EAChB,OAA6C;IAE7C,MAAM,GAAG,GAAG,sBAAsB,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAClE,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IAC1F,MAAM,QAAQ,GAAG,cAAc,EAAE,CAAC;IAClC,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;IACzC,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAC;AAC5C,CAAC;AA2BD;;;;GAIG;AACH,MAAM,YAAY,GAAG,IAAI,OAAO,EAAmC,CAAC;AAEpE;;;;;;;GAOG;AACH,KAAK,UAAU,iBAAiB,CAC9B,GAAmC,EACnC,MAAgC,EAChC,OAAO,GAAG,CAAC;IAEX,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACrD,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC;QAAE,OAAO;IACvC,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,OAAO,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC;QAC7C,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IAC1E,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,uCACE,GAAuB,EACvB,OAA6C;IAE7C,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;IAC9F,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;AAC/D,CAAC;AAmCD;;;;;;GAMG;AACU,QAAA,2BAA2B,GAAG,2CAA2C,CAAC;AAEvF;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,uBAAuB,GAA0C,IAAI,GAAG,CAAC;IAC7E,OAAO;IACP,aAAa;IACb,MAAM;IACN,cAAc;IACd,YAAY;CACb,CAAC,CAAC;AAEH;;;;;;;;;;;;;;;;;GAiBG;AACH,SAAS,iBAAiB,CACxB,KAA2B,EAC3B,QAAgB,EAChB,YAAY,GAAG,CAAC;IAEhB,MAAM,cAAc,GAAG,GAA2B,EAAE;QAClD,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAChC,MAAM,OAAO,GAAG,GAAG,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC;QAC5C,IAAI,CAAC,OAAO;YAAE,MAAM,IAAI,KAAK,CAAC,oCAAoC,QAAQ,GAAG,CAAC,CAAC;QAC/E,OAAO,OAAO,CAAC;IACjB,CAAC,CAAC;IACF,MAAM,oBAAoB,GAAG,KAAK,EAAE,MAAgC,EAAiB,EAAE;QACrF,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAChC,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAClD,IAAI,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;YAAE,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;IAC5D,CAAC,CAAC;IACF,MAAM,cAAc,GAAG,CAAC,MAAgC,EAAiB,EAAE,CACzE,iBAAiB,CACf,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EACnB,MAAM,EACN,uBAAuB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAC3D,CAAC;IAEJ,OAAO;QACL,KAAK,EAAE,KAAK,IAAI,EAAE;YAChB,MAAM,cAAc,CAAC,OAAO,CAAC,CAAC;YAC9B,MAAM,oBAAoB,CAAC,OAAO,CAAC,CAAC;YACpC,OAAO,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,MAAM,IAAI,CAAC,CAAC;QACnD,CAAC;QACD,KAAK,EAAE,KAAK,IAAI,EAAE;YAChB,MAAM,cAAc,CAAC,OAAO,CAAC,CAAC;YAC9B,MAAM,oBAAoB,CAAC,OAAO,CAAC,CAAC;YACpC,MAAM,OAAO,GAAG,cAAc,EAAE,CAAC;YACjC,IAAI,CAAC,OAAO,CAAC,OAAO;gBAAE,MAAM,IAAI,KAAK,CAAC,QAAA,2BAA2B,CAAC,CAAC;YACnE,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC;QACtB,CAAC;QACD,IAAI,EAAE,KAAK,EAAE,KAAa,EAAE,EAAE;YAC5B,MAAM,cAAc,CAAC,MAAM,CAAC,CAAC;YAC7B,MAAM,oBAAoB,CAAC,MAAM,CAAC,CAAC;YACnC,MAAM,OAAO,GAAG,cAAc,EAAE,CAAC;YACjC,IAAI,CAAC,OAAO,CAAC,OAAO;gBAAE,MAAM,IAAI,KAAK,CAAC,QAAA,2BAA2B,CAAC,CAAC;YACnE,OAAO,CAAC,UAAU,GAAG,KAAK,CAAC;QAC7B,CAAC;QACD,YAAY,EAAE,KAAK,EAAE,MAAyB,EAAE,EAAE;YAChD,MAAM,cAAc,CAAC,cAAc,CAAC,CAAC;YACrC,MAAM,oBAAoB,CAAC,cAAc,CAAC,CAAC;YAC3C,MAAM,OAAO,GAAG,cAAc,EAAE,CAAC;YACjC,IAAI,CAAC,OAAO,CAAC,OAAO;gBAAE,MAAM,IAAI,KAAK,CAAC,QAAA,2BAA2B,CAAC,CAAC;YACnE,IAAI,OAAO,CAAC,OAAO,KAAK,SAAS,IAAI,OAAO,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;gBAClE,MAAM,IAAI,KAAK,CAAC,QAAA,2BAA2B,CAAC,CAAC;YAC/C,CAAC;YACD,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YAC3D,OAAO,CAAC,YAAY,GAAG,QAAQ,CAAC;YAChC,OAAO,QAAQ,CAAC;QAClB,CAAC;QACD,UAAU,EAAE,KAAK,IAAI,EAAE;YACrB,MAAM,cAAc,CAAC,YAAY,CAAC,CAAC;YACnC,MAAM,oBAAoB,CAAC,YAAY,CAAC,CAAC;YACzC,MAAM,OAAO,GAAG,cAAc,EAAE,CAAC;YACjC,OAAO,OAAO,CAAC,aAAa,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,UAAU,IAAI,EAAE,CAAC;QACxF,CAAC;QACD,WAAW,EAAE,KAAK,IAAI,EAAE;YACtB,MAAM,cAAc,CAAC,aAAa,CAAC,CAAC;YACpC,MAAM,oBAAoB,CAAC,aAAa,CAAC,CAAC;YAC1C,OAAO,cAAc,EAAE,CAAC,IAAI,CAAC;QAC/B,CAAC;QACD,KAAK,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QAClD,GAAG,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,iBAAiB,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC;KAClE,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,6BACE,KAA2B;IAE3B,OAAO,CAAC,QAAgB,EAAE,EAAE,CAAC,iBAAiB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;AAClE,CAAC;AAsDD,6TAA6T;AAC7T,SAAS,yBAAyB,CAChC,MAAc;IAEd,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;IAC9B,MAAM,SAAS,GAAG,8BAA8B,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC/D,IAAI,CAAC,SAAS;QAAE,OAAO,EAAE,GAAG,EAAE,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;IACtD,MAAM,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,GAAG,SAAS,CAAC;IACrC,MAAM,KAAK,GAAG,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;IACnF,OAAO,EAAE,IAAI,EAAE,IAAI,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC;AACrC,CAAC;AAED,6OAA6O;AAC7O,SAAS,qBAAqB,CAAC,EAAkB,EAAE,MAAc;IAC/D,MAAM,MAAM,GAAG,yBAAyB,CAAC,MAAM,CAAC,CAAC;IACjD,IAAI,KAAK,IAAI,MAAM;QAAE,OAAO,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,MAAM,CAAC,GAAG,CAAC;IACpE,MAAM,SAAS,GAAG,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC/C,IAAI,SAAS,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IACrC,OAAO,MAAM,CAAC,KAAK,KAAK,IAAI,IAAI,SAAS,KAAK,MAAM,CAAC,KAAK,CAAC;AAC7D,CAAC;AAED,2HAA2H;AAC3H,SAAS,eAAe,CAAC,EAAkB,EAAE,QAAgB;IAC3D,OAAO,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,qBAAqB,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;AACjF,CAAC;AAED;;;;;GAKG;AACH,4BACE,WAAW,GAAG,EAAE,EAChB,OAAO,GAA8B,EAAE;IAEvC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,KAAK,CAAC;IACzC,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,EAAE,CAAC;IAC5C,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IACxD,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC;IAC3F,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC;IACtC,MAAM,gBAAgB,GAAa,EAAE,CAAC;IACtC,MAAM,EAAE,GAAmB;QACzB,WAAW;QACX,OAAO;QACP,UAAU;QACV,IAAI;QACJ,aAAa;QACb,MAAM;QACN,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,EAAE;QAC1B,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,EAAE;QAC9B,gBAAgB;QAChB,qBAAqB;YACnB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,YAAY,CAAC,IAAI;YACf,OAAO,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;QAClC,CAAC;QACD,OAAO,CAAC,QAAQ;YACd,MAAM,KAAK,GAAG,CAAC,IAA2B,EAAyB,EAAE;gBACnE,IAAI,CAAC,IAAI;oBAAE,OAAO,IAAI,CAAC;gBACvB,OAAO,eAAe,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACrE,CAAC,CAAC;YACF,OAAO,KAAK,CAAC,EAAE,CAAC,CAAC;QACnB,CAAC;QACD,aAAa,CAAC,KAAK;YACjB,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAClC,OAAO,IAAI,CAAC;QACd,CAAC;QACD,KAAK,KAAI,CAAC;KACX,CAAC;IACF,OAAO,EAAE,CAAC;AACZ,CAAC;AAED;;;;;;;GAOG;AACH,kCAAyC,QAAmC;IAC1E,OAAO;QACL,gBAAgB,CAAC,QAAQ;YACvB,IAAI,QAAQ,CAAC,IAAI,EAAE,KAAK,GAAG;gBAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,CAAC;YAClD,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,eAAe,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC;QAChE,CAAC;QACD,cAAc,CAAC,EAAE;YACf,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,IAAI,CAAC;QACrE,CAAC;KACF,CAAC;AACJ,CAAC;AAED,6JAA6J;AAChJ,QAAA,sBAAsB,GAAG,GAAG,CAAC;AAE1C,4TAA4T;AAC/S,QAAA,sBAAsB,GAAG,oBAAoB,CAAC;AAE3D,iOAAiO;AACpN,QAAA,sBAAsB,GAAG,CAAC,oBAAoB,EAAE,sBAAsB,CAAU,CAAC;AAQ9F;;;;;;;;;GASG;AACH;IACE,MAAM,CAAC,eAAe,EAAE,iBAAiB,CAAC,GAAG,QAAA,sBAAsB,CAAC;IACpE,MAAM,eAAe,GACnB,QAAA,sBAAsB;QACtB,CAAC,CAAC,wEAAwE;QAC1E,CAAC,CAAC,YAAY;QACd,CAAC,CAAC,YAAY,CAAC;IACjB,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,eAAe,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CACtE,kBAAkB,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CACtE,CAAC;IACF,MAAM,SAAS,GAAG,kBAAkB,CAAC,EAAE,EAAE;QACvC,OAAO,EAAE,OAAO;QAChB,UAAU,EAAE,EAAE,YAAY,EAAE,YAAY,EAAE;KAC3C,CAAC,CAAC;IACH,MAAM,OAAO,GAAG,kBAAkB,CAAC,EAAE,EAAE;QACrC,OAAO,EAAE,QAAQ;QACjB,UAAU,EAAE,EAAE,YAAY,EAAE,SAAS,EAAE;KACxC,CAAC,CAAC;IACH,MAAM,WAAW,GAAG,kBAAkB,CAAC,EAAE,EAAE;QACzC,OAAO,EAAE,UAAU;QACnB,UAAU,EAAE,EAAE,YAAY,EAAE,cAAc,EAAE;KAC7C,CAAC,CAAC;IACH,MAAM,SAAS,GAAG,kBAAkB,CAAC,YAAY,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;IAChG,MAAM,SAAS,GAAG,kBAAkB,CAAC,YAAY,EAAE;QACjD,OAAO,EAAE,KAAK;QACd,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;KAC/B,CAAC,CAAC;IACH,MAAM,WAAW,GAAG,kBAAkB,CAAC,cAAc,EAAE;QACrD,OAAO,EAAE,KAAK;QACd,UAAU,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE;KAC9B,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,kBAAkB,CAAC,EAAE,EAAE;QACpC,OAAO,EAAE,QAAQ;QACjB,UAAU,EAAE,EAAE,YAAY,EAAE,QAAA,sBAAsB,EAAE;KACrD,CAAC,CAAC;IACH,MAAM,WAAW,GAAG,kBAAkB,CAAC,eAAe,EAAE;QACtD,OAAO,EAAE,QAAQ;QACjB,aAAa,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE;KAC1D,CAAC,CAAC;IACH,MAAM,aAAa,GAAG,kBAAkB,CAAC,iBAAiB,EAAE;QAC1D,OAAO,EAAE,QAAQ;QACjB,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE;KAC9B,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG;QACf,GAAG,UAAU;QACb,SAAS;QACT,OAAO;QACP,WAAW;QACX,SAAS;QACT,SAAS;QACT,WAAW;QACX,WAAW;QACX,aAAa;QACb,MAAM;KACP,CAAC;IAEF,OAAO,EAAE,IAAI,EAAE,wBAAwB,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,CAAC;AAChE,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,2BACE,KAA2B,EAC3B,QAAgB;IAEhB,OAAO,KAAK,IAAI,EAAE;QAChB,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAChC,MAAM,iBAAiB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QACrC,IAAI,CAAC,GAAG;YAAE,OAAO,EAAE,CAAC;QACpB,OAAO,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;YAC3C,KAAK;YACL,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,OAAO,EAAE,OAAO,CAAC,OAAO;SACzB,CAAC,CAAC,CAAC;IACN,CAAC,CAAC;AACJ,CAAC;AAiBD;;;;;;;;;;;;;;GAcG;AACH,mCACE,KAA2B,EAC3B,QAAgB;IAEhB,OAAO,KAAK,EAAE,KAAa,EAAE,EAAE;QAC7B,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAChC,MAAM,iBAAiB,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;QAC7C,MAAM,OAAO,GAAG,GAAG,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;QACrC,IAAI,CAAC,OAAO;YAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,oCAAoC,KAAK,EAAE,EAAE,CAAC;QAC7F,IAAI,CAAC,OAAO,CAAC,OAAO;YAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,QAAA,2BAA2B,EAAE,CAAC;QACrF,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC;QACpB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC3B,CAAC,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;GAWG;AACH,SAAS,uBAAuB,CAC9B,GAAmC,EACnC,KAAa,EACb,KAAa;IAEb,MAAM,OAAO,GAAG,GAAG,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;IACrC,IAAI,CAAC,OAAO;QAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC;IAChE,IAAI,CAAC,OAAO,CAAC,OAAO;QAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC;IAC1E,OAAO,CAAC,UAAU,GAAG,KAAK,CAAC;IAC3B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,aAAa,IAAI,KAAK,EAAE,CAAC;AACrE,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,kCACE,KAA2B,EAC3B,QAAgB;IAEhB,OAAO,KAAK,EAAE,KAAa,EAAE,KAAa,EAAE,EAAE;QAC5C,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAChC,MAAM,iBAAiB,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;QAC5C,OAAO,uBAAuB,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;IACpD,CAAC,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,oCACE,KAA2B,EAC3B,QAAgB;IAMhB,OAAO,KAAK,EAAE,KAAa,EAAE,WAAmB,EAAE,EAAE;QAClD,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAChC,MAAM,iBAAiB,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC;QAC9C,OAAO,uBAAuB,CAAC,GAAG,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC;IAC1D,CAAC,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,wBAAwB,GAAG,gDAAgD,CAAC;AAElF,SAAS,sBAAsB,CAAC,UAAmB;IACjD,MAAM,KAAK,GAAG,wBAAwB,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;IAChE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAC7B,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAW,CAAC;IACxC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;;;;;;GASG;AACH,SAAS,sBAAsB,CAAI,KAAQ,EAAE,YAAoB;IAC/D,IAAI,YAAY,IAAI,CAAC;QAAE,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACrD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC;AAClF,CAAC;AA4CD;;;;;;;;;;;;;GAaG;AACH,qCACE,OAA2C;IAE3C,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,CAAC,CAAC;IAC/C,MAAM,cAAc,GAAG,WAAE,CAAC,EAAE,EAAE,CAAC;IAC/B,MAAM,gBAAgB,GAAG,WAAE,CAAC,EAAE,EAAE,CAAC;IAEjC,MAAM,UAAU,GAAG;QACjB,QAAQ,EAAE,KAAK,EAAE,UAAmB,EAAE,EAAE;YACtC,IAAI,UAAU,KAAK,eAAe,EAAE,CAAC;gBACnC,gBAAgB,CAAC,UAAU,CAAC,CAAC;gBAC7B,OAAO,sBAAsB,CAAC,OAAO,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;YAChE,CAAC;YACD,OAAO,CAAC,MAAM,OAAO,CAAC,eAAe,EAAE,CAAC,UAAU,CAAC,CAAC,IAAI,IAAI,CAAC;QAC/D,CAAC;QACD,OAAO,EAAE,CAAC,QAAgB,EAAE,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC;KAC9C,CAAC;IAEF,MAAM,IAAI,GAAG;QACX,QAAQ,EAAE,KAAK,EAAE,UAAmB,EAAE,EAAE;YACtC,cAAc,CAAC,UAAU,CAAC,CAAC;YAC3B,MAAM,OAAO,GAAG,sBAAsB,CAAC,UAAU,CAAC,KAAK,OAAO,CAAC,cAAc,CAAC;YAC9E,OAAO,sBAAsB,CAC3B,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAClF,YAAY,CACb,CAAC;QACJ,CAAC;QACD,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE;QACb,KAAK,EAAE,KAAK,IAAI,EAAE,CAAC,EAAE;QACrB,OAAO,EAAE,CAAC,QAAgB,EAAE,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC;QAC7C,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,UAAU,CAAC;KAC3B,CAAC;IAEF,OAAO;QACL,IAAI,EAAE,IAAuB;QAC7B,UAAU,EAAE,UAA2D;QACvE,cAAc;QACd,gBAAgB;KACjB,CAAC;AACJ,CAAC"}
|