@memberjunction/connector-totara 0.2.0 → 0.3.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.
- package/dist/TotaraConnector.d.ts +121 -0
- package/dist/TotaraConnector.js +663 -38
- package/dist/TotaraConnector.js.map +1 -1
- package/package.json +3 -2
|
@@ -7,6 +7,8 @@ interface TotaraConfig {
|
|
|
7
7
|
Token: string;
|
|
8
8
|
/** The tenant's site base URL (e.g. https://learn.example.org). */
|
|
9
9
|
BaseURL: string;
|
|
10
|
+
/** Per-request read deadline in ms; 0 disables it. Defaults to {@link DEFAULT_REQUEST_TIMEOUT_MS}. */
|
|
11
|
+
RequestTimeoutMs: number;
|
|
10
12
|
}
|
|
11
13
|
/** Auth context threaded through every request. Carries the token + the resolved RPC endpoint. */
|
|
12
14
|
export interface TotaraAuthContext extends RESTAuthContext {
|
|
@@ -14,6 +16,8 @@ export interface TotaraAuthContext extends RESTAuthContext {
|
|
|
14
16
|
Token: string;
|
|
15
17
|
/** Fully-resolved RPC endpoint: `{base_url}/webservice/rest/server.php`. */
|
|
16
18
|
Endpoint: string;
|
|
19
|
+
/** Per-request read deadline in ms (0 = no deadline). Resolved once at Authenticate. */
|
|
20
|
+
RequestTimeoutMs: number;
|
|
17
21
|
}
|
|
18
22
|
/**
|
|
19
23
|
* The structured RPC request handed to {@link TotaraConnector.MakeHTTPRequest} as its `body`.
|
|
@@ -30,6 +34,11 @@ export interface MoodleRPCRequest {
|
|
|
30
34
|
export declare class TotaraConnector extends BaseRESTIntegrationConnector {
|
|
31
35
|
/** Resolved auth per CompanyIntegration.ID — avoids re-loading the credential every fetch/CRUD call. */
|
|
32
36
|
protected authCache: Map<string, TotaraAuthContext>;
|
|
37
|
+
/** Parent-id lists per connection+parent function, so a resumed parent walk does not re-read them. */
|
|
38
|
+
protected parentIDCache: Map<string, {
|
|
39
|
+
IDs: string[];
|
|
40
|
+
At: number;
|
|
41
|
+
}>;
|
|
33
42
|
/** Verbatim MJ: Integrations.Name (three-way identity invariant). */
|
|
34
43
|
get IntegrationName(): string;
|
|
35
44
|
/** Create is wired (courses/users/cohorts/groups/groupings/notes/categories + association adds). */
|
|
@@ -121,8 +130,101 @@ export declare class TotaraConnector extends BaseRESTIntegrationConnector {
|
|
|
121
130
|
* parent — keyset-resumable over the parent ids (ctx.AfterKeyValue), bounded per call (engine loops until
|
|
122
131
|
* HasMore=false), concurrency + rate-limit governed by the engine hooks. A per-parent failure (e.g. an
|
|
123
132
|
* accessexception on one course) is surfaced as a warning, never fatal to the whole batch.
|
|
133
|
+
*
|
|
134
|
+
* TWO shapes of parent param, because Moodle uses both:
|
|
135
|
+
* • scalar — `courseid=12` (core_enrol_get_enrolled_users, core_course_get_contents)
|
|
136
|
+
* • array — `cohortids[0]=12` (core_cohort_get_cohort_members, core_group_get_group_members)
|
|
137
|
+
* Declared as `paramStyle: 'scalar' | 'array'` (default scalar). Sending the array functions a scalar is
|
|
138
|
+
* what made `Cohort Members` fail `[invalidparameter]` on every run, with 0 records, since it shipped.
|
|
139
|
+
*
|
|
140
|
+
* The walk is also bounded IN TIME, not just in parent count. The engine kills a FetchChanges that
|
|
141
|
+
* overruns `FetchChangesMs` (30000) and **a killed batch persists nothing** — `Enrolled Users` timed out
|
|
142
|
+
* 3x and landed 0 rows behind a green run for exactly this reason: a page cap of N parents says nothing
|
|
143
|
+
* about how long N vendor calls take. `parentScope.budgetMs` (default 20000, under the kill) stops
|
|
144
|
+
* dispatching new parents and returns partial progress with a cursor, and the cursor advances only over
|
|
145
|
+
* the contiguous PREFIX of parents that actually completed — out-of-order completions past the prefix are
|
|
146
|
+
* still emitted (upserts are idempotent) but are not counted as covered. The first parent of a call never
|
|
147
|
+
* skips, so a call always makes forward progress and the scan cannot stall.
|
|
124
148
|
*/
|
|
149
|
+
/**
|
|
150
|
+
* A stable, human-readable signature of a (possibly chained) parent scope — the cache key, and the value
|
|
151
|
+
* reported when the chain is truncated. Deepest hop first, matching the order the requests actually go in.
|
|
152
|
+
*/
|
|
153
|
+
private parentChainSignature;
|
|
154
|
+
/**
|
|
155
|
+
* Resolves the ids the object's own request will iterate, following a parent CHAIN when one is declared.
|
|
156
|
+
*
|
|
157
|
+
* A one-hop scope is the common case: call `parentWsFunction` bare and read `parentIdField` off each row.
|
|
158
|
+
* But some Moodle read functions are reachable only through two hops, because the thing that lists their
|
|
159
|
+
* parents is ITSELF parent-scoped. `core_group_get_group_members(groupids[])` is the live example: nothing
|
|
160
|
+
* lists a site's groups, so the group ids come from `core_group_get_course_groups(courseid)`, whose course
|
|
161
|
+
* ids come from `core_course_get_courses`. Declaring only the near hop leaves the object with no way to
|
|
162
|
+
* name a single id, which is why these objects shipped unfetchable.
|
|
163
|
+
*
|
|
164
|
+
* A chain is expressed by nesting the SAME shape under `parentScope`, so each level reads exactly like the
|
|
165
|
+
* top one: the outer level's `parentWsFunction` is called once per id produced by the inner level, passed
|
|
166
|
+
* through the inner level's `paramName`/`paramStyle`. Depth is arbitrary; two is what the catalog needs.
|
|
167
|
+
*
|
|
168
|
+
* The expansion is bounded by the SAME budget as the walk, because it costs one request per id at each
|
|
169
|
+
* hop — a 408-course site is 408 requests just to learn the group ids, which would otherwise be spent
|
|
170
|
+
* inside the engine's 30000ms kill and land nothing. Running out of time returns what was resolved plus
|
|
171
|
+
* `Truncated`, and the caller declines to cache a truncated list so the next call re-enumerates.
|
|
172
|
+
*/
|
|
173
|
+
private resolveParentIDs;
|
|
125
174
|
private fetchParentScoped;
|
|
175
|
+
/**
|
|
176
|
+
* Reads a parent-walk cursor.
|
|
177
|
+
*
|
|
178
|
+
* Three wire forms, all still parsed, because an in-flight walk must resume rather than restart:
|
|
179
|
+
*
|
|
180
|
+
* - `"<id>"` — that parent is finished; start after it.
|
|
181
|
+
* - `"<id>#<offset>"` — that parent is partly read; resume AT it from that offset. **One** parent only.
|
|
182
|
+
* - `'{"a":"<id>","p":{"<id>":<offset>},"f":{"<id>":<n>}}'` — the extended form: `a` is the finished-through
|
|
183
|
+
* parent, `p` maps ANY parent to its mid-parent offset, `f` counts consecutive transient failures per
|
|
184
|
+
* parent.
|
|
185
|
+
*
|
|
186
|
+
* The extended form exists because the single-slot form is what made paged walks serial. Only the head of
|
|
187
|
+
* the covered prefix could carry an offset (pointing anywhere else would claim a budget-skipped parent as
|
|
188
|
+
* done), so when N parents were read concurrently and the budget stopped them all mid-way, N-1 offsets were
|
|
189
|
+
* thrown away and those parents restarted from 0 on the next call — every call, forever. Measured live on
|
|
190
|
+
* `Enrolled Users` (run `9200B480`, `MaxConcurrency: 2`): 50,608 records fetched for 29,002 rows, a 1.74x
|
|
191
|
+
* re-read that was entirely the discarded lane. Carrying every lane's offset fixes the cause, which is what
|
|
192
|
+
* lets the walk keep the engine's concurrency instead of trading throughput for correctness.
|
|
193
|
+
*
|
|
194
|
+
* JSON rather than more delimiters: parent ids are vendor strings and a `;`/`,` scheme cannot be made safe
|
|
195
|
+
* against one that contains the delimiter. The legacy forms are still EMITTED whenever they suffice, so a
|
|
196
|
+
* cursor only grows when the walk actually has multi-lane state to carry.
|
|
197
|
+
*/
|
|
198
|
+
private parseParentCursor;
|
|
199
|
+
/**
|
|
200
|
+
* Writes the cursor back, preferring the legacy forms so it stays human-readable and short whenever there
|
|
201
|
+
* is no multi-lane state to carry. `After` is the parent finished through; `partials`/`fails` are keyed by
|
|
202
|
+
* parent id and must only ever describe parents at or past the covered prefix.
|
|
203
|
+
*/
|
|
204
|
+
private serializeParentCursor;
|
|
205
|
+
/** Wall clock, isolated so the budget is testable without fake timers. */
|
|
206
|
+
protected nowMs(): number;
|
|
207
|
+
/**
|
|
208
|
+
* Bounded id-window scan for objects whose list function cannot be bulk-listed.
|
|
209
|
+
*
|
|
210
|
+
* WHY THIS EXISTS. `core_user_get_users` declares no pagination params, and the Totara/Moodle docs are
|
|
211
|
+
* explicit: "You can search without criteria, but the function is not designed for it. It could [be] very
|
|
212
|
+
* slow or timeout" — and the `%` wildcard "may be considerably slower". Asking it for every user in one
|
|
213
|
+
* shot (criteria email=%) is therefore a request the server is documented to be unable to satisfy: against
|
|
214
|
+
* a real-sized site it never returns inside the engine's FetchChangesMs budget, the batch is killed, and the
|
|
215
|
+
* object syncs ZERO rows behind an otherwise-green run. Observed live: 3x 30s timeouts, 0 users.
|
|
216
|
+
*
|
|
217
|
+
* WHAT THIS DOES INSTEAD. Walks the id space in bounded windows against the documented BULK reader
|
|
218
|
+
* (`core_user_get_users_by_field`, field=id, values[]) — an indexed primary-key lookup rather than a search.
|
|
219
|
+
*
|
|
220
|
+
* The scan itself is NOT Totara-specific and does not live here: `runIdWindowScan` in
|
|
221
|
+
* `@memberjunction/connector-id-window-scan` owns the windowing, the fetch budget, the bisection that
|
|
222
|
+
* isolates records the vendor refuses, and the resume cursor. This method supplies only the two things that
|
|
223
|
+
* ARE Totara-specific — how to turn a list of ids into a Moodle RPC call, and how to map the raw rows back
|
|
224
|
+
* into `ExternalRecord`s. Any connector facing the same "the list endpoint cannot list" shape imports the
|
|
225
|
+
* same helper rather than reimplementing it.
|
|
226
|
+
*/
|
|
227
|
+
private fetchIdWindowScan;
|
|
126
228
|
/** Bounded-concurrency runner (the base's RunBounded is private). Single-threaded async → array pushes are safe. */
|
|
127
229
|
private runParentBounded;
|
|
128
230
|
/**
|
|
@@ -160,6 +262,21 @@ export declare class TotaraConnector extends BaseRESTIntegrationConnector {
|
|
|
160
262
|
* is emitted directly. `countName` may carry alternates (`limitnum|limitnumber`) — the first is used.
|
|
161
263
|
*/
|
|
162
264
|
private applyOffsetPagination;
|
|
265
|
+
/**
|
|
266
|
+
* The declared stable ordering for an offset-paged read, or `undefined` when the object declares none.
|
|
267
|
+
*
|
|
268
|
+
* WHY THIS IS NOT OPTIONAL POLISH. `limitfrom`/`limitnumber` is SQL `OFFSET`/`LIMIT`, and an offset over a
|
|
269
|
+
* result set with no `ORDER BY` has no defined page boundary: consecutive pages may repeat rows and, worse,
|
|
270
|
+
* may never return others at all. Measured live on `Enrolled Users` (run `9200B480`): 50,608 records fetched
|
|
271
|
+
* produced 29,002 distinct keyed rows — a 1.74x re-read — behind a run that reported success. Overlap costs
|
|
272
|
+
* time; the gaps are silent data loss.
|
|
273
|
+
*
|
|
274
|
+
* Every object in this catalog already declares `stableOrderingKey`, and Totara/Moodle documents `sortby` +
|
|
275
|
+
* `sortdirection` next to `limitfrom`/`limitnumber` on the paged functions. Both halves existed; nothing
|
|
276
|
+
* joined them. Objects that declare no `orderingParams` are unchanged — the option names are per-function
|
|
277
|
+
* and are read from the catalog, never guessed.
|
|
278
|
+
*/
|
|
279
|
+
private readOffsetOrdering;
|
|
163
280
|
/** PageNumber pagination. `paginationParams` = [pageName, sizeName?]; sizeName is optional (`page` alone). */
|
|
164
281
|
private applyPageNumberPagination;
|
|
165
282
|
/**
|
|
@@ -224,6 +341,10 @@ export declare class TotaraConnector extends BaseRESTIntegrationConnector {
|
|
|
224
341
|
private readConfigString;
|
|
225
342
|
private readConfigStringArray;
|
|
226
343
|
private readConfigObject;
|
|
344
|
+
/** Positive-integer config reader (accepts a numeric string). Returns null for absent/zero/negative/NaN. */
|
|
345
|
+
private readConfigPositiveInt;
|
|
346
|
+
/** As readConfigPositiveInt, but 0 is a legal value (e.g. a zero time budget). Returns null for absent/negative/NaN. */
|
|
347
|
+
private readConfigNonNegativeInt;
|
|
227
348
|
private parseJson;
|
|
228
349
|
private headersToObject;
|
|
229
350
|
/** The first record object in a response (bare array → [0]; wrapped → first array's [0]; object → itself). */
|
package/dist/TotaraConnector.js
CHANGED
|
@@ -43,6 +43,7 @@ import { z } from 'zod';
|
|
|
43
43
|
import { BaseIntegrationConnector, BaseRESTIntegrationConnector, computeContentHash, serializeKeyValue, } from '@memberjunction/integration-engine';
|
|
44
44
|
import { IntegrationEngineBase } from '@memberjunction/integration-engine-base';
|
|
45
45
|
import { mergeDeclaredWithSampledFields } from '@memberjunction/connector-schema-merge';
|
|
46
|
+
import { runIdWindowScan } from '@memberjunction/connector-id-window-scan';
|
|
46
47
|
// ─── Constants ─────────────────────────────────────────────────────────
|
|
47
48
|
const REST_ENDPOINT_SUFFIX = '/webservice/rest/server.php';
|
|
48
49
|
const RESTFORMAT_PARAM = 'moodlewsrestformat';
|
|
@@ -56,11 +57,50 @@ const ConfigSchema = z.object({
|
|
|
56
57
|
BaseURL: z.string().min(1, 'Totara base_url is required').refine(v => /^https?:\/\//i.test(v), 'Totara base_url must be an absolute http(s) URL'),
|
|
57
58
|
});
|
|
58
59
|
// ─── Connector ─────────────────────────────────────────────────────────
|
|
60
|
+
/**
|
|
61
|
+
* Wall-clock budget for one parent-scoped fetch call, in ms. Deliberately under the engine's
|
|
62
|
+
* `FetchChangesMs` (30000): a batch that overruns that is KILLED and persists nothing, so a walk that stops
|
|
63
|
+
* itself at 20s with partial progress beats one that is 30s deep and loses everything. Per-object override:
|
|
64
|
+
* `Configuration.parentScope.budgetMs`.
|
|
65
|
+
*/
|
|
66
|
+
const DEFAULT_PARENT_WALK_BUDGET_MS = 20000;
|
|
67
|
+
/**
|
|
68
|
+
* How long a cached parent-id list stays usable, in ms. The list is re-read once per fetch batch otherwise,
|
|
69
|
+
* and it is not cheap — `core_course_get_courses` measured 6.1s live, spent out of a budget that must fit
|
|
70
|
+
* inside a 30000ms kill. Per-object override: `Configuration.parentScope.parentCacheMs` (0 disables).
|
|
71
|
+
*/
|
|
72
|
+
const DEFAULT_PARENT_LIST_CACHE_MS = 300000;
|
|
73
|
+
/**
|
|
74
|
+
* Read deadline for a single web-service call, in ms. Deliberately UNDER the engine's
|
|
75
|
+
* `FetchChangesMs = 30000` kill: a vendor that accepts the connection and then never answers used to hang
|
|
76
|
+
* the fetch forever — observed twice as wedged worker processes that had to be killed from outside, which
|
|
77
|
+
* is not a failed run and produces no artifact anyone can read. Aborting first turns that into an ordinary
|
|
78
|
+
* fetch error the engine can retry and the run artifact can record.
|
|
79
|
+
*
|
|
80
|
+
* Override per connection with `requestTimeoutMs` in CompanyIntegration.Configuration; `0` disables it.
|
|
81
|
+
*/
|
|
82
|
+
const DEFAULT_REQUEST_TIMEOUT_MS = 25000;
|
|
83
|
+
/**
|
|
84
|
+
* How many consecutive TRANSIENT failures one parent may cost before the walk abandons it and moves past.
|
|
85
|
+
*
|
|
86
|
+
* A transient failure must not advance the cursor over its parent: doing so drops that parent's unread records
|
|
87
|
+
* silently, behind a green run. Measured live (run `9200B480`): 24 requests were aborted on the 25000ms read
|
|
88
|
+
* deadline, and because every caught error marked its parent examined, each one advanced the cursor past a
|
|
89
|
+
* course whose enrolments had not been fully read. But refusing to advance forever is the OTHER failure mode —
|
|
90
|
+
* the `Users` `[invalidresponse]` deadlock was 61 identical failures, 0 records, and no forward progress
|
|
91
|
+
* possible. So the attempt count rides the CURSOR (a per-call counter forgets it at every batch boundary), and
|
|
92
|
+
* after this many tries the parent is abandoned with a warning that names it.
|
|
93
|
+
*
|
|
94
|
+
* Per-object override: `Configuration.parentScope.maxParentAttempts`.
|
|
95
|
+
*/
|
|
96
|
+
const DEFAULT_MAX_PARENT_ATTEMPTS = 3;
|
|
59
97
|
let TotaraConnector = class TotaraConnector extends BaseRESTIntegrationConnector {
|
|
60
98
|
constructor() {
|
|
61
99
|
super(...arguments);
|
|
62
100
|
/** Resolved auth per CompanyIntegration.ID — avoids re-loading the credential every fetch/CRUD call. */
|
|
63
101
|
this.authCache = new Map();
|
|
102
|
+
/** Parent-id lists per connection+parent function, so a resumed parent walk does not re-read them. */
|
|
103
|
+
this.parentIDCache = new Map();
|
|
64
104
|
}
|
|
65
105
|
// ── Identity + capabilities ──────────────────────────────────────
|
|
66
106
|
/** Verbatim MJ: Integrations.Name (three-way identity invariant). */
|
|
@@ -168,6 +208,7 @@ let TotaraConnector = class TotaraConnector extends BaseRESTIntegrationConnector
|
|
|
168
208
|
const auth = {
|
|
169
209
|
Token: config.Token,
|
|
170
210
|
Endpoint: this.buildEndpoint(config.BaseURL),
|
|
211
|
+
RequestTimeoutMs: config.RequestTimeoutMs,
|
|
171
212
|
};
|
|
172
213
|
this.authCache.set(companyIntegration.ID, auth);
|
|
173
214
|
return auth;
|
|
@@ -206,8 +247,29 @@ let TotaraConnector = class TotaraConnector extends BaseRESTIntegrationConnector
|
|
|
206
247
|
for (const [key, value] of Object.entries(request.Params)) {
|
|
207
248
|
form.append(key, String(value));
|
|
208
249
|
}
|
|
209
|
-
|
|
210
|
-
|
|
250
|
+
// The deadline covers the response BODY, not just the headers: a site that streams a header block
|
|
251
|
+
// and then stalls mid-body hangs just as hard as one that never answers, so the same signal is
|
|
252
|
+
// passed to fetch and held across the text() read.
|
|
253
|
+
const timeoutMs = auth.RequestTimeoutMs ?? DEFAULT_REQUEST_TIMEOUT_MS;
|
|
254
|
+
const signal = timeoutMs > 0 ? AbortSignal.timeout(timeoutMs) : undefined;
|
|
255
|
+
let httpResponse;
|
|
256
|
+
let text;
|
|
257
|
+
try {
|
|
258
|
+
httpResponse = await fetch(url, { method, headers, body: form.toString(), signal });
|
|
259
|
+
text = await httpResponse.text();
|
|
260
|
+
}
|
|
261
|
+
catch (err) {
|
|
262
|
+
// Surface an abort as an ordinary fetch error naming the function and the deadline, so the
|
|
263
|
+
// engine retries it like any other transport failure and the run artifact records WHY. An
|
|
264
|
+
// unnamed abort reads as a mystery; "core_enrol_get_enrolled_users exceeded 25000ms" is a
|
|
265
|
+
// fact someone can act on.
|
|
266
|
+
if (err instanceof Error && (err.name === 'TimeoutError' || err.name === 'AbortError')) {
|
|
267
|
+
throw new Error(`Totara web service "${request.WsFunction}" did not respond within ${timeoutMs}ms`
|
|
268
|
+
+ ` and the request was aborted. Raise requestTimeoutMs in the connection's Configuration`
|
|
269
|
+
+ ` (0 disables the deadline) if this function is legitimately slower than that.`);
|
|
270
|
+
}
|
|
271
|
+
throw err;
|
|
272
|
+
}
|
|
211
273
|
return {
|
|
212
274
|
Status: httpResponse.status,
|
|
213
275
|
Body: this.parseJson(text),
|
|
@@ -310,6 +372,14 @@ let TotaraConnector = class TotaraConnector extends BaseRESTIntegrationConnector
|
|
|
310
372
|
}],
|
|
311
373
|
};
|
|
312
374
|
}
|
|
375
|
+
// Objects whose LIST function cannot be bulk-listed (no pagination params, and the vendor docs
|
|
376
|
+
// explicitly warn it "could [be] very slow or timeout" without narrow criteria — core_user_get_users
|
|
377
|
+
// is the canonical case) fetch through a bounded id-window scan against the by-field bulk reader
|
|
378
|
+
// instead. Declared via Configuration.idWindowScan. Delegate before every other path.
|
|
379
|
+
const idWindowScan = this.readConfigObject(cfg, 'idWindowScan');
|
|
380
|
+
if (idWindowScan) {
|
|
381
|
+
return this.fetchIdWindowScan(obj, cfg, ctx, idWindowScan);
|
|
382
|
+
}
|
|
313
383
|
// Parent-scoped RPC objects (e.g. core_enrol_get_enrolled_users / core_course_get_contents need a
|
|
314
384
|
// `courseid`) iterate ONE request per parent — declared via Configuration.parentScope. Delegate
|
|
315
385
|
// before the single-call path so these objects sync instead of failing with [invalidparameter].
|
|
@@ -348,49 +418,290 @@ let TotaraConnector = class TotaraConnector extends BaseRESTIntegrationConnector
|
|
|
348
418
|
* parent — keyset-resumable over the parent ids (ctx.AfterKeyValue), bounded per call (engine loops until
|
|
349
419
|
* HasMore=false), concurrency + rate-limit governed by the engine hooks. A per-parent failure (e.g. an
|
|
350
420
|
* accessexception on one course) is surfaced as a warning, never fatal to the whole batch.
|
|
421
|
+
*
|
|
422
|
+
* TWO shapes of parent param, because Moodle uses both:
|
|
423
|
+
* • scalar — `courseid=12` (core_enrol_get_enrolled_users, core_course_get_contents)
|
|
424
|
+
* • array — `cohortids[0]=12` (core_cohort_get_cohort_members, core_group_get_group_members)
|
|
425
|
+
* Declared as `paramStyle: 'scalar' | 'array'` (default scalar). Sending the array functions a scalar is
|
|
426
|
+
* what made `Cohort Members` fail `[invalidparameter]` on every run, with 0 records, since it shipped.
|
|
427
|
+
*
|
|
428
|
+
* The walk is also bounded IN TIME, not just in parent count. The engine kills a FetchChanges that
|
|
429
|
+
* overruns `FetchChangesMs` (30000) and **a killed batch persists nothing** — `Enrolled Users` timed out
|
|
430
|
+
* 3x and landed 0 rows behind a green run for exactly this reason: a page cap of N parents says nothing
|
|
431
|
+
* about how long N vendor calls take. `parentScope.budgetMs` (default 20000, under the kill) stops
|
|
432
|
+
* dispatching new parents and returns partial progress with a cursor, and the cursor advances only over
|
|
433
|
+
* the contiguous PREFIX of parents that actually completed — out-of-order completions past the prefix are
|
|
434
|
+
* still emitted (upserts are idempotent) but are not counted as covered. The first parent of a call never
|
|
435
|
+
* skips, so a call always makes forward progress and the scan cannot stall.
|
|
436
|
+
*/
|
|
437
|
+
/**
|
|
438
|
+
* A stable, human-readable signature of a (possibly chained) parent scope — the cache key, and the value
|
|
439
|
+
* reported when the chain is truncated. Deepest hop first, matching the order the requests actually go in.
|
|
440
|
+
*/
|
|
441
|
+
parentChainSignature(scope) {
|
|
442
|
+
const inner = this.readConfigObject(scope, 'parentScope');
|
|
443
|
+
const here = `${this.readConfigString(scope, 'parentWsFunction') ?? '?'}.${this.readConfigString(scope, 'parentIdField') ?? 'id'}`;
|
|
444
|
+
return inner ? `${this.parentChainSignature(inner)} -> ${here}` : here;
|
|
445
|
+
}
|
|
446
|
+
/**
|
|
447
|
+
* Resolves the ids the object's own request will iterate, following a parent CHAIN when one is declared.
|
|
448
|
+
*
|
|
449
|
+
* A one-hop scope is the common case: call `parentWsFunction` bare and read `parentIdField` off each row.
|
|
450
|
+
* But some Moodle read functions are reachable only through two hops, because the thing that lists their
|
|
451
|
+
* parents is ITSELF parent-scoped. `core_group_get_group_members(groupids[])` is the live example: nothing
|
|
452
|
+
* lists a site's groups, so the group ids come from `core_group_get_course_groups(courseid)`, whose course
|
|
453
|
+
* ids come from `core_course_get_courses`. Declaring only the near hop leaves the object with no way to
|
|
454
|
+
* name a single id, which is why these objects shipped unfetchable.
|
|
455
|
+
*
|
|
456
|
+
* A chain is expressed by nesting the SAME shape under `parentScope`, so each level reads exactly like the
|
|
457
|
+
* top one: the outer level's `parentWsFunction` is called once per id produced by the inner level, passed
|
|
458
|
+
* through the inner level's `paramName`/`paramStyle`. Depth is arbitrary; two is what the catalog needs.
|
|
459
|
+
*
|
|
460
|
+
* The expansion is bounded by the SAME budget as the walk, because it costs one request per id at each
|
|
461
|
+
* hop — a 408-course site is 408 requests just to learn the group ids, which would otherwise be spent
|
|
462
|
+
* inside the engine's 30000ms kill and land nothing. Running out of time returns what was resolved plus
|
|
463
|
+
* `Truncated`, and the caller declines to cache a truncated list so the next call re-enumerates.
|
|
351
464
|
*/
|
|
465
|
+
async resolveParentIDs(auth, scope, timed, outOfTime) {
|
|
466
|
+
const wsFn = this.readConfigString(scope, 'parentWsFunction');
|
|
467
|
+
const idField = this.readConfigString(scope, 'parentIdField') ?? 'id';
|
|
468
|
+
if (!wsFn)
|
|
469
|
+
return { IDs: [], Truncated: false };
|
|
470
|
+
const collect = (body) => this.NormalizeResponse(body, null)
|
|
471
|
+
.map(r => r[idField]).filter(v => v != null && String(v).length > 0).map(String);
|
|
472
|
+
const dedupeSorted = (ids) => Array.from(new Set(ids)).sort((a, b) => a.localeCompare(b));
|
|
473
|
+
const inner = this.readConfigObject(scope, 'parentScope');
|
|
474
|
+
if (!inner) {
|
|
475
|
+
const resp = await timed(() => this.MakeHTTPRequest(auth, auth.Endpoint, 'POST', this.BuildHeaders(auth), { WsFunction: wsFn, Params: {} }));
|
|
476
|
+
return { IDs: dedupeSorted(collect(resp.Body)), Truncated: false };
|
|
477
|
+
}
|
|
478
|
+
const upstream = await this.resolveParentIDs(auth, inner, timed, outOfTime);
|
|
479
|
+
const innerParam = this.readConfigString(inner, 'paramName');
|
|
480
|
+
if (!innerParam)
|
|
481
|
+
return { IDs: [], Truncated: upstream.Truncated };
|
|
482
|
+
const innerIsArray = this.readConfigString(inner, 'paramStyle') === 'array';
|
|
483
|
+
const ids = [];
|
|
484
|
+
let truncated = upstream.Truncated;
|
|
485
|
+
for (let i = 0; i < upstream.IDs.length; i++) {
|
|
486
|
+
// The first hop always runs, for the same reason the first parent of a walk always runs: a call
|
|
487
|
+
// that resolves nothing makes no progress and the engine would loop on an empty list forever.
|
|
488
|
+
if (i > 0 && outOfTime()) {
|
|
489
|
+
truncated = true;
|
|
490
|
+
break;
|
|
491
|
+
}
|
|
492
|
+
const params = innerIsArray
|
|
493
|
+
? { [`${innerParam}[0]`]: upstream.IDs[i] }
|
|
494
|
+
: { [innerParam]: upstream.IDs[i] };
|
|
495
|
+
try {
|
|
496
|
+
const resp = await timed(() => this.MakeHTTPRequest(auth, auth.Endpoint, 'POST', this.BuildHeaders(auth), { WsFunction: wsFn, Params: params }));
|
|
497
|
+
ids.push(...collect(resp.Body));
|
|
498
|
+
}
|
|
499
|
+
catch {
|
|
500
|
+
// One upstream id the site will not answer for (a course whose groups the token cannot read)
|
|
501
|
+
// must not abort the enumeration — the same rule the per-parent walk already follows. The hop
|
|
502
|
+
// contributes nothing and the rest of the chain proceeds.
|
|
503
|
+
}
|
|
504
|
+
}
|
|
505
|
+
return { IDs: dedupeSorted(ids), Truncated: truncated };
|
|
506
|
+
}
|
|
352
507
|
async fetchParentScoped(obj, cfg, ctx, wsfunction, parentScope) {
|
|
353
508
|
const parentWsFn = this.readConfigString(parentScope, 'parentWsFunction');
|
|
354
509
|
const paramName = this.readConfigString(parentScope, 'paramName');
|
|
355
510
|
const parentIdField = this.readConfigString(parentScope, 'parentIdField') ?? 'id';
|
|
511
|
+
const isArrayParam = this.readConfigString(parentScope, 'paramStyle') === 'array';
|
|
512
|
+
const budgetMs = this.readConfigNonNegativeInt(parentScope, 'budgetMs') ?? DEFAULT_PARENT_WALK_BUDGET_MS;
|
|
356
513
|
if (!parentWsFn || !paramName) {
|
|
357
514
|
return { Records: [], HasMore: false, Warnings: [{ Code: 'PARENT_SCOPE_INCOMPLETE',
|
|
358
515
|
Message: `"${obj.Name}": Configuration.parentScope requires parentWsFunction + paramName.`, Data: { object: obj.Name } }] };
|
|
359
516
|
}
|
|
517
|
+
// The field the CHILD row carries the parent id in. Defaults to the request param name, which is right
|
|
518
|
+
// for scalar params (`courseid`) and wrong for array ones (the param is `cohortids`, the field is
|
|
519
|
+
// `cohortid`) — so array-shaped scopes declare it.
|
|
520
|
+
const childIdField = this.readConfigString(parentScope, 'childIdField') ?? paramName;
|
|
521
|
+
// The budget is measured from HERE, not from the start of the walk. The engine's FetchChangesMs timer
|
|
522
|
+
// starts when this method is entered, and the parent LIST call below is part of that: measuring only
|
|
523
|
+
// the walk meant "parent list (however long) + a full 20s of walking", which overran the 30000ms kill
|
|
524
|
+
// and was killed with 0 records — the exact failure this budget exists to prevent, still happening
|
|
525
|
+
// with the budget in place. Every parent request now competes with the parent list for one budget.
|
|
526
|
+
const startedAt = this.nowMs();
|
|
527
|
+
/**
|
|
528
|
+
* How long the slowest request of this call took. The deadline is enforced against work ABOUT TO
|
|
529
|
+
* START, not work already done: measured live, `core_enrol_get_enrolled_users` needs ~26s for a
|
|
530
|
+
* 250-user page, so "elapsed < budget" would happily start a request that lands 26s past it. Stopping
|
|
531
|
+
* when `elapsed + slowest >= budget` is what keeps the call under the engine's kill.
|
|
532
|
+
*/
|
|
533
|
+
let slowestRequestMs = 0;
|
|
534
|
+
// Generic so EVERY await inside the walk can be measured, not just the ones that return a response.
|
|
535
|
+
// The rate-limit acquire is the one that mattered: untimed, it let a call outrun its own budget by 53x.
|
|
536
|
+
const timed = async (step) => {
|
|
537
|
+
const t0 = this.nowMs();
|
|
538
|
+
try {
|
|
539
|
+
return await step();
|
|
540
|
+
}
|
|
541
|
+
finally {
|
|
542
|
+
slowestRequestMs = Math.max(slowestRequestMs, this.nowMs() - t0);
|
|
543
|
+
}
|
|
544
|
+
};
|
|
545
|
+
const outOfTime = () => budgetMs > 0 && this.nowMs() - startedAt + slowestRequestMs >= budgetMs;
|
|
360
546
|
const auth = await this.Authenticate(ctx.CompanyIntegration, ctx.ContextUser);
|
|
361
547
|
const fields = this.GetCachedFields(obj.ID);
|
|
362
548
|
const pkFieldNames = this.primaryKeyFieldNames(fields);
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
549
|
+
const warnings = [];
|
|
550
|
+
// 1) Parent ids from the parent's list wsfunction (bare array or single-collection envelope), CACHED.
|
|
551
|
+
// The walk is resumed once per batch and the list does not change between them, but re-reading it
|
|
552
|
+
// is not free: `core_course_get_courses` measured 6.1s live, which every batch was paying out of a
|
|
553
|
+
// budget that has to fit inside a 30000ms kill. Cached, that time goes to reading records instead.
|
|
554
|
+
const cacheKey = `${ctx.CompanyIntegration.ID}|${this.parentChainSignature(parentScope)}`;
|
|
555
|
+
const cacheMs = this.readConfigNonNegativeInt(parentScope, 'parentCacheMs') ?? DEFAULT_PARENT_LIST_CACHE_MS;
|
|
556
|
+
const cached = this.parentIDCache.get(cacheKey);
|
|
557
|
+
let allParentIDs;
|
|
558
|
+
let parentsTruncated = false;
|
|
559
|
+
if (cached && this.nowMs() - cached.At < cacheMs) {
|
|
560
|
+
allParentIDs = cached.IDs;
|
|
561
|
+
}
|
|
562
|
+
else {
|
|
563
|
+
const resolved = await this.resolveParentIDs(auth, parentScope, timed, outOfTime);
|
|
564
|
+
allParentIDs = resolved.IDs;
|
|
565
|
+
parentsTruncated = resolved.Truncated;
|
|
566
|
+
// A truncated chain is an INCOMPLETE parent list. Caching it would freeze that partial view for
|
|
567
|
+
// the whole cache window and make every later batch walk the same short list — the run would then
|
|
568
|
+
// look complete while missing every parent the budget never reached.
|
|
569
|
+
if (!parentsTruncated)
|
|
570
|
+
this.parentIDCache.set(cacheKey, { IDs: allParentIDs, At: this.nowMs() });
|
|
571
|
+
}
|
|
572
|
+
if (parentsTruncated) {
|
|
573
|
+
warnings.push({
|
|
574
|
+
Code: 'PARENT_CHAIN_TRUNCATED',
|
|
575
|
+
Message: `"${obj.Name}": the parent chain ran out of time while enumerating ids, so this call`
|
|
576
|
+
+ ` walked ${allParentIDs.length} parent(s) rather than all of them. The chain is`
|
|
577
|
+
+ ` re-enumerated (uncached) on the next call, so coverage is not lost — but a run that`
|
|
578
|
+
+ ` never completes the chain will not reach every parent.`,
|
|
579
|
+
Data: { object: obj.Name, resolvedParents: allParentIDs.length,
|
|
580
|
+
chain: this.parentChainSignature(parentScope) },
|
|
581
|
+
});
|
|
582
|
+
}
|
|
369
583
|
if (allParentIDs.length === 0) {
|
|
370
|
-
|
|
371
|
-
|
|
584
|
+
warnings.push({ Code: 'ZERO_PARENTS',
|
|
585
|
+
Message: `"${obj.Name}": ${parentWsFn} returned no parent ids to iterate ${paramName} over — sync the parent first.`, Data: { object: obj.Name } });
|
|
586
|
+
return { Records: [], HasMore: false, Warnings: warnings };
|
|
372
587
|
}
|
|
373
|
-
// 2) Keyset-resume + bounded batch over the parent ids.
|
|
374
|
-
|
|
375
|
-
const
|
|
588
|
+
// 2) Keyset-resume + bounded batch over the parent ids. The cursor is either "<parentID>" (that parent
|
|
589
|
+
// is DONE, start after it) or "<parentID>#<offset>" (that parent is PARTLY read, resume AT it).
|
|
590
|
+
const cursor = this.parseParentCursor(ctx.AfterKeyValue);
|
|
591
|
+
// Resume AT the earliest parent that still has unread pages, and after `After` otherwise. Taking the
|
|
592
|
+
// earliest of the partials (rather than the single one the old cursor could name) is what makes a
|
|
593
|
+
// multi-lane stop resumable: every parent from there on either carries its own offset or starts at 0.
|
|
594
|
+
const firstPartial = [...cursor.Partials.keys()]
|
|
595
|
+
.map(id => allParentIDs.indexOf(id))
|
|
596
|
+
.filter(i => i >= 0)
|
|
597
|
+
.sort((a, b) => a - b)[0];
|
|
598
|
+
const remaining = firstPartial != null
|
|
599
|
+
? allParentIDs.slice(firstPartial)
|
|
600
|
+
: cursor.After != null
|
|
601
|
+
? allParentIDs.filter(id => id.localeCompare(cursor.After) > 0)
|
|
602
|
+
: allParentIDs;
|
|
376
603
|
const batch = remaining.slice(0, Math.max(1, this.TemplateVarParentBatchSize()));
|
|
377
|
-
//
|
|
604
|
+
// Paging WITHIN one parent. Only for functions that document offset params (Enrolled Users declares
|
|
605
|
+
// options.limitfrom/options.limitnumber); objects with an empty paginationParams read a parent in one
|
|
606
|
+
// request as before. This is not an optimisation: `core_enrol_get_enrolled_users` returns every
|
|
607
|
+
// enrolment on a course with full user profiles, and on a real site ONE such call outruns the engine's
|
|
608
|
+
// 30000ms kill — at which point the batch persists nothing, which is how this object landed 0 rows on
|
|
609
|
+
// every live run. A per-call budget cannot save a single request that is itself too big.
|
|
610
|
+
const pageParams = this.readConfigStringArray(cfg, 'paginationParams') ?? [];
|
|
611
|
+
const parentPageSize = pageParams.length >= 2
|
|
612
|
+
? Math.max(1, this.readConfigPositiveInt(parentScope, 'pageSize') ?? obj.DefaultPageSize ?? ctx.BatchSize)
|
|
613
|
+
: 0; // 0 = this function has no paging; one request per parent
|
|
614
|
+
// 3) One request per parent (bounded concurrency + adaptive rate-limit via the engine hooks), inside a
|
|
615
|
+
// wall-clock budget so the call returns partial progress instead of being killed with nothing.
|
|
378
616
|
const out = [];
|
|
379
|
-
const warnings = [];
|
|
380
617
|
const collectionKeys = this.recordCollectionKeys(obj, cfg);
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
618
|
+
/** Parents read to the END — successfully OR with a recorded warning. Both are "nothing left here". */
|
|
619
|
+
const examined = new Set();
|
|
620
|
+
/** Parents stopped mid-way by the budget → the offset to resume that parent from. */
|
|
621
|
+
const partial = new Map();
|
|
622
|
+
let skippedForBudget = 0;
|
|
623
|
+
/** Parents the vendor refused on PERMISSIONS, attributed as one fact after the walk, not one each. */
|
|
624
|
+
const forbidden = [];
|
|
625
|
+
let forbiddenMessage;
|
|
626
|
+
/** Parents that failed TRANSIENTLY this call → their new consecutive-failure count, carried on the cursor. */
|
|
627
|
+
const transientFails = new Map();
|
|
628
|
+
/** Parents abandoned because they have now failed transiently `maxParentAttempts` times in a row. */
|
|
629
|
+
const abandoned = [];
|
|
630
|
+
const ordering = parentPageSize > 0 ? this.readOffsetOrdering(cfg) : undefined;
|
|
631
|
+
const maxAttempts = this.readConfigNonNegativeInt(parentScope, 'maxParentAttempts') ?? DEFAULT_MAX_PARENT_ATTEMPTS;
|
|
632
|
+
/**
|
|
633
|
+
* Paged walks keep the engine's concurrency, because every lane's offset now survives the stop.
|
|
634
|
+
*
|
|
635
|
+
* This was `parentPageSize > 0 ? 1 : …` — paged walks were forced serial to stop the 1.74x re-read, since
|
|
636
|
+
* a single-slot cursor threw away every lane's offset but one. That fixed the waste by removing the
|
|
637
|
+
* parallelism, which is a poor trade on an object whose healthy cost is 68ms per record and which has
|
|
638
|
+
* never once been read to completion. {@link ParentCursor} carries an offset per parent, so the cause is
|
|
639
|
+
* gone and the concurrency can come back.
|
|
640
|
+
*/
|
|
641
|
+
const parentConcurrency = Math.max(1, ctx.MaxConcurrency ?? 1);
|
|
642
|
+
await this.runParentBounded(batch.map((id, index) => ({ id, index })), parentConcurrency, async ({ id: parentID, index }) => {
|
|
643
|
+
// Index 0 always runs: a call that skips every parent makes no progress and the engine would
|
|
644
|
+
// loop on the same cursor forever. Everything after it yields to the budget.
|
|
645
|
+
if (index > 0 && outOfTime()) {
|
|
646
|
+
skippedForBudget++;
|
|
647
|
+
return;
|
|
648
|
+
}
|
|
649
|
+
// Any parent may resume mid-way now — it reads its own offset rather than the one slot the
|
|
650
|
+
// cursor used to have. A parent with no recorded offset starts at its beginning.
|
|
651
|
+
let offset = cursor.Partials.get(parentID) ?? 0;
|
|
652
|
+
let issuedRequest = false;
|
|
384
653
|
try {
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
654
|
+
for (;;) {
|
|
655
|
+
/**
|
|
656
|
+
* The rate-limit wait counts against the budget, and is checked before the request.
|
|
657
|
+
*
|
|
658
|
+
* This await used to sit outside the deadline entirely: it was not passed through
|
|
659
|
+
* `timed`, so its wait never entered `slowestStepMs`, and nothing re-checked the clock
|
|
660
|
+
* after it. A throttled walk therefore blew its own budget without bound — the engine
|
|
661
|
+
* measured single `Enrolled Users` calls at up to **1,063,987ms** on run `9200B480`
|
|
662
|
+
* against a 20000ms budget the connector believed it was honouring, and 15 such calls
|
|
663
|
+
* consumed 3.30 of the run's 4.22 fetch-hours for 3.7% of its records. A deadline that
|
|
664
|
+
* only sees the awaits it happens to wrap is not a deadline.
|
|
665
|
+
*/
|
|
666
|
+
if (ctx.RateLimitAcquire)
|
|
667
|
+
await timed(() => ctx.RateLimitAcquire());
|
|
668
|
+
// Gate the request itself, not just the next loop turn — except for the very first
|
|
669
|
+
// request of parent 0, which must always go out or the call makes no progress at all.
|
|
670
|
+
if (outOfTime() && !(index === 0 && !issuedRequest)) {
|
|
671
|
+
if (offset > 0 || issuedRequest)
|
|
672
|
+
partial.set(index, offset);
|
|
673
|
+
else
|
|
674
|
+
skippedForBudget++;
|
|
675
|
+
return;
|
|
676
|
+
}
|
|
677
|
+
const params = isArrayParam
|
|
678
|
+
? { [`${paramName}[0]`]: parentID }
|
|
679
|
+
: { [paramName]: parentID };
|
|
680
|
+
if (parentPageSize > 0)
|
|
681
|
+
this.applyOffsetPagination(params, pageParams, offset, parentPageSize, ordering);
|
|
682
|
+
const resp = await timed(() => this.MakeHTTPRequest(auth, auth.Endpoint, 'POST', this.BuildHeaders(auth), { WsFunction: wsfunction, Params: params }));
|
|
683
|
+
issuedRequest = true;
|
|
684
|
+
let pageCount = 0;
|
|
685
|
+
for (const key of collectionKeys) {
|
|
686
|
+
for (const raw of this.NormalizeResponse(resp.Body, key)) {
|
|
687
|
+
// tag the child with the parent FK so its row links back to the parent record
|
|
688
|
+
const tagged = raw[childIdField] != null ? raw : { ...raw, [childIdField]: parentID };
|
|
689
|
+
out.push(this.buildExternalRecord(this.applyTransformPreservingKeys(tagged, obj, fields), ctx.ObjectName, pkFieldNames));
|
|
690
|
+
pageCount++;
|
|
691
|
+
}
|
|
692
|
+
}
|
|
693
|
+
ctx.RateLimitReport?.();
|
|
694
|
+
// Unpaged function, or a short page → this parent is exhausted.
|
|
695
|
+
if (parentPageSize === 0 || pageCount < parentPageSize)
|
|
696
|
+
break;
|
|
697
|
+
offset += pageCount;
|
|
698
|
+
// Mid-parent budget stop: record where to resume rather than dropping the rest.
|
|
699
|
+
if (outOfTime()) {
|
|
700
|
+
partial.set(index, offset);
|
|
701
|
+
return;
|
|
391
702
|
}
|
|
392
703
|
}
|
|
393
|
-
|
|
704
|
+
examined.add(index);
|
|
394
705
|
}
|
|
395
706
|
catch (e) {
|
|
396
707
|
const msg = e instanceof Error ? e.message : String(e);
|
|
@@ -398,11 +709,274 @@ let TotaraConnector = class TotaraConnector extends BaseRESTIntegrationConnector
|
|
|
398
709
|
ctx.RateLimitReport?.(e);
|
|
399
710
|
throw e;
|
|
400
711
|
} // rate-limit → propagate for backoff
|
|
401
|
-
|
|
712
|
+
/**
|
|
713
|
+
* A TRANSIENT failure must not advance the cursor over its parent.
|
|
714
|
+
*
|
|
715
|
+
* Every caught error used to end with `examined.add(index)`, which marks the parent "nothing
|
|
716
|
+
* left here" and lets the cursor move past it. For a permission refusal that is correct — the
|
|
717
|
+
* token will not be granted mid-run. For a 25000ms read timeout it is **silent data loss**:
|
|
718
|
+
* run `9200B480` aborted 24 requests that way, including `courseid=1 (offset 18850)`, and
|
|
719
|
+
* each one retired a course whose enrolments had not been fully read, behind a green run.
|
|
720
|
+
*
|
|
721
|
+
* So a transient failure keeps the parent's offset and counts an attempt on the cursor. The
|
|
722
|
+
* bounded count is what stops this becoming the opposite bug (the `Users` `[invalidresponse]`
|
|
723
|
+
* deadlock: 61 identical failures and no forward progress possible).
|
|
724
|
+
*/
|
|
725
|
+
if (/did not respond within|\bETIMEDOUT\b|\bECONNRESET\b|\bECONNREFUSED\b|\bEAI_AGAIN\b|socket hang up|fetch failed|network|\b5\d\d\b/i.test(msg)) {
|
|
726
|
+
const attempts = (cursor.Fails.get(parentID) ?? 0) + 1;
|
|
727
|
+
if (attempts >= maxAttempts) {
|
|
728
|
+
abandoned.push({ id: parentID, attempts, message: msg });
|
|
729
|
+
examined.add(index); // give up deliberately, and say so — never silently
|
|
730
|
+
}
|
|
731
|
+
else {
|
|
732
|
+
transientFails.set(index, attempts);
|
|
733
|
+
if (offset > 0)
|
|
734
|
+
partial.set(index, offset);
|
|
735
|
+
}
|
|
736
|
+
return;
|
|
737
|
+
}
|
|
738
|
+
// A permission refusal is not a fetch error. Moodle answers `[accessexception]` for a
|
|
739
|
+
// function the token may not call at all, and it answers it for EVERY parent — so the
|
|
740
|
+
// per-parent error is the wrong grain: it says "52 things went wrong" about one credential
|
|
741
|
+
// that was never granted. Counted here, attributed once below.
|
|
742
|
+
if (/\[accessexception\]|\[requiredcapability\]|\[nopermission\]/i.test(msg)) {
|
|
743
|
+
forbidden.push(parentID);
|
|
744
|
+
forbiddenMessage ??= msg;
|
|
745
|
+
}
|
|
746
|
+
else {
|
|
747
|
+
warnings.push({ Code: 'PARENT_FETCH_ERROR', Message: `"${obj.Name}" fetch for ${paramName}=${parentID}${offset ? ` (offset ${offset})` : ''}: ${msg}`, Data: { object: obj.Name, [paramName]: parentID, offset } });
|
|
748
|
+
}
|
|
749
|
+
examined.add(index);
|
|
402
750
|
}
|
|
403
751
|
});
|
|
404
|
-
|
|
405
|
-
|
|
752
|
+
// Every parent this call reached was refused on permissions, and nothing was read. That is a credential
|
|
753
|
+
// scope limit stated as one fact — the same grain OpenWater's `LEAF_FORBIDDEN` uses — rather than N
|
|
754
|
+
// fetch errors that read like N separate faults. A PARTIAL refusal stays per-parent (below), because
|
|
755
|
+
// "some courses' groups are readable" is genuinely different from "this function is not granted".
|
|
756
|
+
if (forbidden.length > 0 && out.length === 0 && forbidden.length === examined.size) {
|
|
757
|
+
warnings.push({
|
|
758
|
+
Code: 'LEAF_FORBIDDEN',
|
|
759
|
+
Message: `"${obj.Name}": ${wsfunction} refused every one of the ${forbidden.length} ${paramName}`
|
|
760
|
+
+ ` value(s) this call reached — the token is not permitted this function on this site.`
|
|
761
|
+
+ ` The parent chain resolved fine (${allParentIDs.length} parent id(s)), so this is a`
|
|
762
|
+
+ ` credential scope limit, not a request-shape or empty-data result. Vendor: ${forbiddenMessage}`,
|
|
763
|
+
Data: { object: obj.Name, wsfunction, refusedParents: forbidden.length,
|
|
764
|
+
resolvedParents: allParentIDs.length, sample: forbidden.slice(0, 5) },
|
|
765
|
+
});
|
|
766
|
+
}
|
|
767
|
+
else if (forbidden.length > 0) {
|
|
768
|
+
warnings.push({
|
|
769
|
+
Code: 'LEAF_FORBIDDEN',
|
|
770
|
+
Message: `"${obj.Name}": ${forbidden.length} of the ${examined.size} ${paramName} value(s) this`
|
|
771
|
+
+ ` call reached were refused on permissions; the rest were read. Vendor: ${forbiddenMessage}`,
|
|
772
|
+
Data: { object: obj.Name, wsfunction, refusedParents: forbidden.length,
|
|
773
|
+
examined: examined.size, sample: forbidden.slice(0, 5) },
|
|
774
|
+
});
|
|
775
|
+
}
|
|
776
|
+
// A parent abandoned after repeated transient failures is stated, with the vendor's own words and the
|
|
777
|
+
// attempt count. It is the one place the walk knowingly leaves records unread, so it must never be
|
|
778
|
+
// quiet about it — and it names the parent so an operator can go and look at that course.
|
|
779
|
+
if (abandoned.length > 0) {
|
|
780
|
+
warnings.push({
|
|
781
|
+
Code: 'PARENT_ABANDONED',
|
|
782
|
+
Message: `"${obj.Name}": ${abandoned.length} ${paramName} value(s) failed ${maxAttempts} times in a`
|
|
783
|
+
+ ` row on transport errors and were passed over so the walk can continue —`
|
|
784
|
+
+ ` ${abandoned.slice(0, 5).map(a => a.id).join(', ')}. Their records are NOT synced. This is`
|
|
785
|
+
+ ` usually a vendor-side slow response for that parent (raise requestTimeoutMs, or`
|
|
786
|
+
+ ` parentScope.maxParentAttempts, if it is legitimately slow). Vendor: ${abandoned[0].message}`,
|
|
787
|
+
Data: { object: obj.Name, wsfunction, abandoned: abandoned.length, maxAttempts,
|
|
788
|
+
sample: abandoned.slice(0, 5).map(a => ({ [paramName]: a.id, attempts: a.attempts })) },
|
|
789
|
+
});
|
|
790
|
+
}
|
|
791
|
+
// The cursor may only advance over the contiguous prefix that was examined. A parent past a
|
|
792
|
+
// budget-skipped one may well have completed (concurrency finishes out of order) and its records are
|
|
793
|
+
// kept — upserts are idempotent — but claiming it as covered would silently drop the skipped parent.
|
|
794
|
+
let covered = 0;
|
|
795
|
+
while (covered < batch.length && examined.has(covered))
|
|
796
|
+
covered++;
|
|
797
|
+
// Every parent at or past the covered prefix that holds mid-parent progress, or a transient-failure
|
|
798
|
+
// count, is carried by id. Entries before the prefix are dropped: those parents are finished, and
|
|
799
|
+
// keeping their state would resume a walk into ground it has already covered.
|
|
800
|
+
const carriedPartials = new Map();
|
|
801
|
+
for (const [index, off] of partial)
|
|
802
|
+
if (index >= covered)
|
|
803
|
+
carriedPartials.set(batch[index], off);
|
|
804
|
+
const carriedFails = new Map();
|
|
805
|
+
for (const [index, n] of transientFails)
|
|
806
|
+
if (index >= covered)
|
|
807
|
+
carriedFails.set(batch[index], n);
|
|
808
|
+
const resumeOffset = partial.get(covered);
|
|
809
|
+
const stopped = skippedForBudget > 0 || partial.size > 0;
|
|
810
|
+
if (stopped) {
|
|
811
|
+
warnings.push({
|
|
812
|
+
Code: 'PARENT_BUDGET_STOP',
|
|
813
|
+
Message: `"${obj.Name}": stopped after ${covered} of ${batch.length} ${paramName} values`
|
|
814
|
+
+ (resumeOffset != null ? ` (plus ${resumeOffset} records into the next)` : '')
|
|
815
|
+
+ (partial.size > 1 ? ` and ${partial.size} partly-read parent(s) whose offsets are carried` : '')
|
|
816
|
+
+ ` on the ${budgetMs}ms budget — resuming from there.`,
|
|
817
|
+
Data: { object: obj.Name, covered, batch: batch.length, skipped: skippedForBudget,
|
|
818
|
+
resumeOffset: resumeOffset ?? null, partlyRead: partial.size, budgetMs },
|
|
819
|
+
});
|
|
820
|
+
}
|
|
821
|
+
// A parent held back for a retry is not covered, so the walk still has work even if the prefix reached
|
|
822
|
+
// the end of the batch — otherwise a transient failure on the last parent would end the walk early.
|
|
823
|
+
const hasMore = remaining.length > covered || carriedFails.size > 0 || carriedPartials.size > 0;
|
|
824
|
+
return {
|
|
825
|
+
Records: out,
|
|
826
|
+
HasMore: hasMore,
|
|
827
|
+
NextAfterKeyValue: !hasMore ? undefined
|
|
828
|
+
: this.serializeParentCursor(covered > 0 ? batch[covered - 1] : null, carriedPartials, carriedFails),
|
|
829
|
+
Warnings: warnings.length ? warnings : undefined,
|
|
830
|
+
};
|
|
831
|
+
}
|
|
832
|
+
/**
|
|
833
|
+
* Reads a parent-walk cursor.
|
|
834
|
+
*
|
|
835
|
+
* Three wire forms, all still parsed, because an in-flight walk must resume rather than restart:
|
|
836
|
+
*
|
|
837
|
+
* - `"<id>"` — that parent is finished; start after it.
|
|
838
|
+
* - `"<id>#<offset>"` — that parent is partly read; resume AT it from that offset. **One** parent only.
|
|
839
|
+
* - `'{"a":"<id>","p":{"<id>":<offset>},"f":{"<id>":<n>}}'` — the extended form: `a` is the finished-through
|
|
840
|
+
* parent, `p` maps ANY parent to its mid-parent offset, `f` counts consecutive transient failures per
|
|
841
|
+
* parent.
|
|
842
|
+
*
|
|
843
|
+
* The extended form exists because the single-slot form is what made paged walks serial. Only the head of
|
|
844
|
+
* the covered prefix could carry an offset (pointing anywhere else would claim a budget-skipped parent as
|
|
845
|
+
* done), so when N parents were read concurrently and the budget stopped them all mid-way, N-1 offsets were
|
|
846
|
+
* thrown away and those parents restarted from 0 on the next call — every call, forever. Measured live on
|
|
847
|
+
* `Enrolled Users` (run `9200B480`, `MaxConcurrency: 2`): 50,608 records fetched for 29,002 rows, a 1.74x
|
|
848
|
+
* re-read that was entirely the discarded lane. Carrying every lane's offset fixes the cause, which is what
|
|
849
|
+
* lets the walk keep the engine's concurrency instead of trading throughput for correctness.
|
|
850
|
+
*
|
|
851
|
+
* JSON rather than more delimiters: parent ids are vendor strings and a `;`/`,` scheme cannot be made safe
|
|
852
|
+
* against one that contains the delimiter. The legacy forms are still EMITTED whenever they suffice, so a
|
|
853
|
+
* cursor only grows when the walk actually has multi-lane state to carry.
|
|
854
|
+
*/
|
|
855
|
+
parseParentCursor(raw) {
|
|
856
|
+
const empty = { After: null, Partials: new Map(), Fails: new Map() };
|
|
857
|
+
if (!raw)
|
|
858
|
+
return empty;
|
|
859
|
+
if (raw.startsWith('{')) {
|
|
860
|
+
try {
|
|
861
|
+
const p = JSON.parse(raw);
|
|
862
|
+
const nums = (v) => {
|
|
863
|
+
const m = new Map();
|
|
864
|
+
if (v && typeof v === 'object') {
|
|
865
|
+
for (const [k, n] of Object.entries(v)) {
|
|
866
|
+
const parsed = typeof n === 'number' ? n : Number.parseInt(String(n), 10);
|
|
867
|
+
if (Number.isFinite(parsed) && parsed >= 0)
|
|
868
|
+
m.set(k, parsed);
|
|
869
|
+
}
|
|
870
|
+
}
|
|
871
|
+
return m;
|
|
872
|
+
};
|
|
873
|
+
return {
|
|
874
|
+
After: typeof p.a === 'string' && p.a.length > 0 ? p.a : null,
|
|
875
|
+
Partials: nums(p.p),
|
|
876
|
+
Fails: nums(p.f),
|
|
877
|
+
};
|
|
878
|
+
}
|
|
879
|
+
catch {
|
|
880
|
+
// A cursor we cannot read must not be guessed at: restarting the walk re-reads (idempotent
|
|
881
|
+
// upserts) where a mis-parse could skip parents outright.
|
|
882
|
+
return empty;
|
|
883
|
+
}
|
|
884
|
+
}
|
|
885
|
+
const hash = raw.lastIndexOf('#');
|
|
886
|
+
if (hash < 0)
|
|
887
|
+
return { After: raw, Partials: new Map(), Fails: new Map() };
|
|
888
|
+
const offset = Number.parseInt(raw.slice(hash + 1), 10);
|
|
889
|
+
if (!Number.isFinite(offset) || offset < 0)
|
|
890
|
+
return { After: raw.slice(0, hash), Partials: new Map(), Fails: new Map() };
|
|
891
|
+
return { After: null, Partials: new Map([[raw.slice(0, hash), offset]]), Fails: new Map() };
|
|
892
|
+
}
|
|
893
|
+
/**
|
|
894
|
+
* Writes the cursor back, preferring the legacy forms so it stays human-readable and short whenever there
|
|
895
|
+
* is no multi-lane state to carry. `After` is the parent finished through; `partials`/`fails` are keyed by
|
|
896
|
+
* parent id and must only ever describe parents at or past the covered prefix.
|
|
897
|
+
*/
|
|
898
|
+
serializeParentCursor(after, partials, fails) {
|
|
899
|
+
if (partials.size === 0 && fails.size === 0)
|
|
900
|
+
return after ?? undefined;
|
|
901
|
+
if (fails.size === 0 && partials.size === 1 && after == null) {
|
|
902
|
+
const [id, offset] = [...partials.entries()][0];
|
|
903
|
+
return `${id}#${offset}`;
|
|
904
|
+
}
|
|
905
|
+
const payload = {};
|
|
906
|
+
if (after != null)
|
|
907
|
+
payload.a = after;
|
|
908
|
+
if (partials.size > 0)
|
|
909
|
+
payload.p = Object.fromEntries(partials);
|
|
910
|
+
if (fails.size > 0)
|
|
911
|
+
payload.f = Object.fromEntries(fails);
|
|
912
|
+
return JSON.stringify(payload);
|
|
913
|
+
}
|
|
914
|
+
/** Wall clock, isolated so the budget is testable without fake timers. */
|
|
915
|
+
nowMs() {
|
|
916
|
+
return Date.now();
|
|
917
|
+
}
|
|
918
|
+
/**
|
|
919
|
+
* Bounded id-window scan for objects whose list function cannot be bulk-listed.
|
|
920
|
+
*
|
|
921
|
+
* WHY THIS EXISTS. `core_user_get_users` declares no pagination params, and the Totara/Moodle docs are
|
|
922
|
+
* explicit: "You can search without criteria, but the function is not designed for it. It could [be] very
|
|
923
|
+
* slow or timeout" — and the `%` wildcard "may be considerably slower". Asking it for every user in one
|
|
924
|
+
* shot (criteria email=%) is therefore a request the server is documented to be unable to satisfy: against
|
|
925
|
+
* a real-sized site it never returns inside the engine's FetchChangesMs budget, the batch is killed, and the
|
|
926
|
+
* object syncs ZERO rows behind an otherwise-green run. Observed live: 3x 30s timeouts, 0 users.
|
|
927
|
+
*
|
|
928
|
+
* WHAT THIS DOES INSTEAD. Walks the id space in bounded windows against the documented BULK reader
|
|
929
|
+
* (`core_user_get_users_by_field`, field=id, values[]) — an indexed primary-key lookup rather than a search.
|
|
930
|
+
*
|
|
931
|
+
* The scan itself is NOT Totara-specific and does not live here: `runIdWindowScan` in
|
|
932
|
+
* `@memberjunction/connector-id-window-scan` owns the windowing, the fetch budget, the bisection that
|
|
933
|
+
* isolates records the vendor refuses, and the resume cursor. This method supplies only the two things that
|
|
934
|
+
* ARE Totara-specific — how to turn a list of ids into a Moodle RPC call, and how to map the raw rows back
|
|
935
|
+
* into `ExternalRecord`s. Any connector facing the same "the list endpoint cannot list" shape imports the
|
|
936
|
+
* same helper rather than reimplementing it.
|
|
937
|
+
*/
|
|
938
|
+
async fetchIdWindowScan(obj, _cfg, ctx, scan) {
|
|
939
|
+
const scanWsFn = this.readConfigString(scan, 'wsFunction');
|
|
940
|
+
const field = this.readConfigString(scan, 'field') ?? 'id';
|
|
941
|
+
if (!scanWsFn) {
|
|
942
|
+
return { Records: [], HasMore: false, Warnings: [{ Code: 'ID_WINDOW_SCAN_INCOMPLETE',
|
|
943
|
+
Message: `"${obj.Name}": Configuration.idWindowScan requires wsFunction.`, Data: { object: obj.Name } }] };
|
|
944
|
+
}
|
|
945
|
+
const auth = await this.Authenticate(ctx.CompanyIntegration, ctx.ContextUser);
|
|
946
|
+
const fields = this.GetCachedFields(obj.ID);
|
|
947
|
+
const pkFieldNames = this.primaryKeyFieldNames(fields);
|
|
948
|
+
const result = await runIdWindowScan({
|
|
949
|
+
ObjectName: obj.Name,
|
|
950
|
+
Config: {
|
|
951
|
+
field,
|
|
952
|
+
windowSize: this.readConfigPositiveInt(scan, 'windowSize') ?? undefined,
|
|
953
|
+
windowsPerCall: this.readConfigPositiveInt(scan, 'windowsPerCall') ?? undefined,
|
|
954
|
+
maxConsecutiveEmptyWindows: this.readConfigPositiveInt(scan, 'maxConsecutiveEmptyWindows') ?? undefined,
|
|
955
|
+
// Non-negative (not positive): budgetMs=0 is meaningful — "spend no time beyond the first
|
|
956
|
+
// window" — and it is what makes the deadline deterministically testable.
|
|
957
|
+
budgetMs: this.readConfigNonNegativeInt(scan, 'budgetMs') ?? undefined,
|
|
958
|
+
maxBisectSplitsPerCall: this.readConfigPositiveInt(scan, 'maxBisectSplitsPerCall') ?? undefined,
|
|
959
|
+
},
|
|
960
|
+
AfterKeyValue: ctx.AfterKeyValue,
|
|
961
|
+
MaxConcurrency: ctx.MaxConcurrency,
|
|
962
|
+
RateLimitAcquire: ctx.RateLimitAcquire,
|
|
963
|
+
RateLimitReport: ctx.RateLimitReport,
|
|
964
|
+
// Moodle takes the id list as bracket-notation params. NormalizeResponse THROWS on an in-band
|
|
965
|
+
// Moodle exception envelope, which is exactly the signal the scan bisects on — so it must not be
|
|
966
|
+
// caught here.
|
|
967
|
+
FetchWindow: async (ids) => {
|
|
968
|
+
const params = { field };
|
|
969
|
+
ids.forEach((id, i) => { params[`values[${i}]`] = id; });
|
|
970
|
+
const resp = await this.MakeHTTPRequest(auth, auth.Endpoint, 'POST', this.BuildHeaders(auth), { WsFunction: scanWsFn, Params: params });
|
|
971
|
+
return this.NormalizeResponse(resp.Body, null);
|
|
972
|
+
},
|
|
973
|
+
});
|
|
974
|
+
return {
|
|
975
|
+
Records: result.Records.map((raw) => this.buildExternalRecord(this.applyTransformPreservingKeys(raw, obj, fields), ctx.ObjectName, pkFieldNames)),
|
|
976
|
+
HasMore: result.HasMore,
|
|
977
|
+
...(result.NextAfterKeyValue !== undefined ? { NextAfterKeyValue: result.NextAfterKeyValue } : {}),
|
|
978
|
+
...(result.Warnings ? { Warnings: result.Warnings } : {}),
|
|
979
|
+
};
|
|
406
980
|
}
|
|
407
981
|
/** Bounded-concurrency runner (the base's RunBounded is private). Single-threaded async → array pushes are safe. */
|
|
408
982
|
async runParentBounded(items, concurrency, worker) {
|
|
@@ -571,23 +1145,54 @@ let TotaraConnector = class TotaraConnector extends BaseRESTIntegrationConnector
|
|
|
571
1145
|
* Moodle options-array param → emitted as `options[i][name]=limitfrom&options[i][value]=<n>`; a flat name
|
|
572
1146
|
* is emitted directly. `countName` may carry alternates (`limitnum|limitnumber`) — the first is used.
|
|
573
1147
|
*/
|
|
574
|
-
applyOffsetPagination(params, pagParams, offset, pageSize) {
|
|
1148
|
+
applyOffsetPagination(params, pagParams, offset, pageSize, ordering) {
|
|
575
1149
|
const fromRaw = pagParams[0] ?? 'limitfrom';
|
|
576
1150
|
const countRaw = (pagParams[1] ?? 'limitnum').split('|')[0];
|
|
1151
|
+
const pairs = [[fromRaw, offset], [countRaw, pageSize]];
|
|
1152
|
+
// Ordering rides in the SAME option array as the limits, which is why it is written here rather than
|
|
1153
|
+
// by a second helper: a separate helper would start its own bracket indexes at 0 and overwrite the
|
|
1154
|
+
// limits it was meant to accompany.
|
|
1155
|
+
if (ordering)
|
|
1156
|
+
pairs.push([ordering.SortByParam, ordering.Key], [ordering.SortDirectionParam, ordering.Direction]);
|
|
577
1157
|
if (fromRaw.includes('.')) {
|
|
578
|
-
const prefix = fromRaw.
|
|
579
|
-
const
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
params[`${prefix}[1][value]`] = pageSize;
|
|
1158
|
+
const prefix = fromRaw.slice(0, fromRaw.indexOf('.'));
|
|
1159
|
+
const short = (n) => (n.includes('.') ? n.slice(n.indexOf('.') + 1) : n);
|
|
1160
|
+
pairs.forEach(([name, value], i) => {
|
|
1161
|
+
params[`${prefix}[${i}][name]`] = short(name);
|
|
1162
|
+
params[`${prefix}[${i}][value]`] = value;
|
|
1163
|
+
});
|
|
585
1164
|
}
|
|
586
1165
|
else {
|
|
587
|
-
|
|
588
|
-
|
|
1166
|
+
for (const [name, value] of pairs)
|
|
1167
|
+
params[name] = value;
|
|
589
1168
|
}
|
|
590
1169
|
}
|
|
1170
|
+
/**
|
|
1171
|
+
* The declared stable ordering for an offset-paged read, or `undefined` when the object declares none.
|
|
1172
|
+
*
|
|
1173
|
+
* WHY THIS IS NOT OPTIONAL POLISH. `limitfrom`/`limitnumber` is SQL `OFFSET`/`LIMIT`, and an offset over a
|
|
1174
|
+
* result set with no `ORDER BY` has no defined page boundary: consecutive pages may repeat rows and, worse,
|
|
1175
|
+
* may never return others at all. Measured live on `Enrolled Users` (run `9200B480`): 50,608 records fetched
|
|
1176
|
+
* produced 29,002 distinct keyed rows — a 1.74x re-read — behind a run that reported success. Overlap costs
|
|
1177
|
+
* time; the gaps are silent data loss.
|
|
1178
|
+
*
|
|
1179
|
+
* Every object in this catalog already declares `stableOrderingKey`, and Totara/Moodle documents `sortby` +
|
|
1180
|
+
* `sortdirection` next to `limitfrom`/`limitnumber` on the paged functions. Both halves existed; nothing
|
|
1181
|
+
* joined them. Objects that declare no `orderingParams` are unchanged — the option names are per-function
|
|
1182
|
+
* and are read from the catalog, never guessed.
|
|
1183
|
+
*/
|
|
1184
|
+
readOffsetOrdering(cfg) {
|
|
1185
|
+
const orderParams = this.readConfigStringArray(cfg, 'orderingParams') ?? [];
|
|
1186
|
+
const key = this.readConfigString(cfg, 'stableOrderingKey');
|
|
1187
|
+
if (orderParams.length < 2 || !orderParams[0] || !orderParams[1] || !key)
|
|
1188
|
+
return undefined;
|
|
1189
|
+
return {
|
|
1190
|
+
SortByParam: orderParams[0],
|
|
1191
|
+
SortDirectionParam: orderParams[1],
|
|
1192
|
+
Key: key,
|
|
1193
|
+
Direction: this.readConfigString(cfg, 'orderingDirection') ?? 'ASC',
|
|
1194
|
+
};
|
|
1195
|
+
}
|
|
591
1196
|
/** PageNumber pagination. `paginationParams` = [pageName, sizeName?]; sizeName is optional (`page` alone). */
|
|
592
1197
|
applyPageNumberPagination(params, pagParams, page, pageSize) {
|
|
593
1198
|
const pageName = pagParams[0] ?? 'page';
|
|
@@ -811,9 +1416,17 @@ let TotaraConnector = class TotaraConnector extends BaseRESTIntegrationConnector
|
|
|
811
1416
|
}
|
|
812
1417
|
return undefined;
|
|
813
1418
|
};
|
|
1419
|
+
// Numeric knob, read separately: `pick` only matches string values, and a timeout is normally
|
|
1420
|
+
// written as a number. Absent/invalid → the default; an explicit 0 → no deadline (opt out).
|
|
1421
|
+
const timeoutRaw = Object.entries(raw)
|
|
1422
|
+
.find(([k]) => k.toLowerCase() === 'requesttimeoutms')?.[1];
|
|
1423
|
+
const timeout = typeof timeoutRaw === 'number' ? timeoutRaw
|
|
1424
|
+
: typeof timeoutRaw === 'string' && timeoutRaw.trim() !== '' ? Number(timeoutRaw)
|
|
1425
|
+
: NaN;
|
|
814
1426
|
const candidate = {
|
|
815
1427
|
Token: pick('wstoken', 'token', 'wsToken', 'apiKey', 'api_key', 'apitoken') ?? '',
|
|
816
1428
|
BaseURL: pick('base_url', 'baseUrl', 'baseURL', 'url', 'site', 'siteUrl', 'site_url', 'host') ?? '',
|
|
1429
|
+
RequestTimeoutMs: Number.isFinite(timeout) && timeout >= 0 ? timeout : DEFAULT_REQUEST_TIMEOUT_MS,
|
|
817
1430
|
};
|
|
818
1431
|
const parsed = ConfigSchema.safeParse(candidate);
|
|
819
1432
|
if (!parsed.success) {
|
|
@@ -867,6 +1480,18 @@ let TotaraConnector = class TotaraConnector extends BaseRESTIntegrationConnector
|
|
|
867
1480
|
const v = cfg[key];
|
|
868
1481
|
return v && typeof v === 'object' && !Array.isArray(v) ? v : null;
|
|
869
1482
|
}
|
|
1483
|
+
/** Positive-integer config reader (accepts a numeric string). Returns null for absent/zero/negative/NaN. */
|
|
1484
|
+
readConfigPositiveInt(cfg, key) {
|
|
1485
|
+
const v = cfg[key];
|
|
1486
|
+
const n = typeof v === 'number' ? v : typeof v === 'string' ? Number.parseInt(v, 10) : Number.NaN;
|
|
1487
|
+
return Number.isFinite(n) && n > 0 ? Math.floor(n) : null;
|
|
1488
|
+
}
|
|
1489
|
+
/** As readConfigPositiveInt, but 0 is a legal value (e.g. a zero time budget). Returns null for absent/negative/NaN. */
|
|
1490
|
+
readConfigNonNegativeInt(cfg, key) {
|
|
1491
|
+
const v = cfg[key];
|
|
1492
|
+
const n = typeof v === 'number' ? v : typeof v === 'string' ? Number.parseInt(v, 10) : Number.NaN;
|
|
1493
|
+
return Number.isFinite(n) && n >= 0 ? Math.floor(n) : null;
|
|
1494
|
+
}
|
|
870
1495
|
// ── Small utilities ────────────────────────────────────────────────
|
|
871
1496
|
parseJson(text) {
|
|
872
1497
|
const trimmed = text.trim();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TotaraConnector.js","sourceRoot":"","sources":["../src/TotaraConnector.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"TotaraConnector.js","sourceRoot":"","sources":["../src/TotaraConnector.ts"],"names":[],"mappings":";;;;;;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAiB,MAAM,sBAAsB,CAAC;AAO/D,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACH,wBAAwB,EACxB,4BAA4B,EAC5B,kBAAkB,EAClB,iBAAiB,GAcpB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,qBAAqB,EAAE,MAAM,yCAAyC,CAAC;AAChF,OAAO,EAAE,8BAA8B,EAAE,MAAM,wCAAwC,CAAC;AACxF,OAAO,EAAE,eAAe,EAAE,MAAM,0CAA0C,CAAC;AAE3E,0EAA0E;AAC1E,MAAM,oBAAoB,GAAG,6BAA6B,CAAC;AAC3D,MAAM,gBAAgB,GAAG,oBAAoB,CAAC;AAC9C,MAAM,gBAAgB,GAAG,MAAM,CAAC;AAChC,MAAM,gBAAgB,GAAG,YAAY,CAAC;AACtC,MAAM,aAAa,GAAG,SAAS,CAAC;AAChC,MAAM,kBAAkB,GAAG,+BAA+B,CAAC;AAqC3D,qDAAqD;AACrD,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,4BAA4B,CAAC;IACtD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,6BAA6B,CAAC,CAAC,MAAM,CAC5D,CAAC,CAAC,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAC5B,iDAAiD,CACpD;CACJ,CAAC,CAAC;AA2BH,0EAA0E;AAE1E;;;;;GAKG;AACH,MAAM,6BAA6B,GAAG,KAAK,CAAC;AAE5C;;;;GAIG;AACH,MAAM,4BAA4B,GAAG,MAAM,CAAC;AAE5C;;;;;;;;GAQG;AACH,MAAM,0BAA0B,GAAG,KAAK,CAAC;AAEzC;;;;;;;;;;;;GAYG;AACH,MAAM,2BAA2B,GAAG,CAAC,CAAC;AAG/B,IAAM,eAAe,GAArB,MAAM,eAAgB,SAAQ,4BAA4B;IAA1D;;QAEH,wGAAwG;QAC9F,cAAS,GAAG,IAAI,GAAG,EAA6B,CAAC;QAE3D,sGAAsG;QAC5F,kBAAa,GAAG,IAAI,GAAG,EAAyC,CAAC;IAkjD/E,CAAC;IAhjDG,oEAAoE;IAEpE,qEAAqE;IACrE,IAAoB,eAAe,KAAa,OAAO,QAAQ,CAAC,CAAC,CAAC;IAElE,oGAAoG;IACpG,IAAoB,cAAc,KAAc,OAAO,IAAI,CAAC,CAAC,CAAC;IAC9D,0GAA0G;IAC1G,IAAoB,cAAc,KAAc,OAAO,IAAI,CAAC,CAAC,CAAC;IAC9D,sFAAsF;IACtF,IAAoB,cAAc,KAAc,OAAO,IAAI,CAAC,CAAC,CAAC;IAE9D;;;;OAIG;IACH,IAAoB,wBAAwB,KAAc,OAAO,KAAK,CAAC,CAAC,CAAC;IAEzE;;;;OAIG;IACa,iBAAiB,CAAC,UAAkB;QAChD,MAAM,KAAK,GAAG,qBAAqB,CAAC,QAAQ,CAAC,oBAAoB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QACxF,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC;QACxB,MAAM,GAAG,GAAG,qBAAqB,CAAC,QAAQ,CAAC,oBAAoB,CAAC,KAAK,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;QACtF,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAC;QACtB,OAAO,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,mBAAmB,CAAC,CAAC;IAC9E,CAAC;IAED,qEAAqE;IAErE;;;;;;;;OAQG;IACI,KAAK,CAAC,cAAc,CACvB,kBAA8C,EAC9C,WAAqB;QAErB,IAAI,IAAuB,CAAC;QAC5B,IAAI,CAAC;YACD,IAAI,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,kBAAkB,EAAE,WAAW,CAAC,CAAC;QACpE,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACpB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,4BAA4B,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACvH,CAAC;QAED,IAAI,CAAC;YACD,MAAM,OAAO,GAAqB,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;YACjF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;YAC3G,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YACxC,MAAM,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,IAAI,EAAE,CAA4B,CAAC;YAC9D,MAAM,QAAQ,GAAG,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC;YACnF,MAAM,OAAO,GAAG,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;YAC5E,OAAO;gBACH,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,gBAAgB,QAAQ,+BAA+B;gBAChE,aAAa,EAAE,OAAO;aACzB,CAAC;QACN,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACpB,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACjE,IAAI,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,EAAE,CAAC;gBAClC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,iCAAiC,OAAO,EAAE,EAAE,CAAC;YACnF,CAAC;YACD,8FAA8F;YAC9F,+EAA+E;YAC/E,OAAO,MAAM,IAAI,CAAC,uBAAuB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC7D,CAAC;IACL,CAAC;IAED,yFAAyF;IACjF,iBAAiB,CAAC,OAAe;QACrC,OAAO,0GAA0G,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACpI,CAAC;IAED;;;OAGG;IACK,KAAK,CAAC,uBAAuB,CAAC,IAAuB,EAAE,eAAuB;QAClF,IAAI,CAAC;YACD,MAAM,OAAO,GAAqB,EAAE,UAAU,EAAE,4BAA4B,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;YAC3F,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;YAC3G,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YACxC,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC/B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,uGAAuG,EAAE,CAAC;YAC/I,CAAC;YACD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,4BAA4B,eAAe,EAAE,EAAE,CAAC;QACtF,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACpB,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACjE,OAAO;gBACH,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,iCAAiC,OAAO,EAAE,CAAC,CAAC,CAAC,4BAA4B,OAAO,EAAE;aAChI,CAAC;QACN,CAAC;IACL,CAAC;IAED,qEAAqE;IAErE,wGAAwG;IAC9F,KAAK,CAAC,YAAY,CACxB,kBAA8C,EAC9C,WAAqB;QAErB,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC;QACzD,IAAI,MAAM;YAAE,OAAO,MAAM,CAAC;QAE1B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,kBAAkB,EAAE,WAAW,CAAC,CAAC;QACvE,MAAM,IAAI,GAAsB;YAC5B,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,QAAQ,EAAE,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC;YAC5C,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;SAC5C,CAAC;QACF,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,kBAAkB,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QAChD,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;OAGG;IACO,YAAY,CAAC,KAAsB;QACzC,OAAO;YACH,cAAc,EAAE,kDAAkD;YAClE,QAAQ,EAAE,kBAAkB;SAC/B,CAAC;IACN,CAAC;IAED,uGAAuG;IAC7F,UAAU,CAAC,mBAA+C,EAAE,IAAqB;QACvF,OAAQ,IAA0B,CAAC,QAAQ,CAAC;IAChD,CAAC;IAED,qEAAqE;IAErE;;;;;OAKG;IACO,KAAK,CAAC,eAAe,CAC3B,IAAqB,EACrB,GAAW,EACX,MAAc,EACd,OAA+B,EAC/B,IAAc;QAEd,MAAM,OAAO,GAAG,IAAoC,CAAC;QACrD,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,CAAC,UAAU,KAAK,QAAQ,EAAE,CAAC;YACrD,MAAM,IAAI,KAAK,CAAC,wFAAwF,CAAC,CAAC;QAC9G,CAAC;QACD,MAAM,KAAK,GAAI,IAA0B,CAAC,KAAK,IAAI,EAAE,CAAC;QACtD,MAAM,IAAI,GAAG,IAAI,eAAe,EAAE,CAAC;QACnC,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;QAClC,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,gBAAgB,CAAC,CAAC;QAChD,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;QAClD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YACxD,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACpC,CAAC;QAED,kGAAkG;QAClG,+FAA+F;QAC/F,mDAAmD;QACnD,MAAM,SAAS,GAAI,IAA0B,CAAC,gBAAgB,IAAI,0BAA0B,CAAC;QAC7F,MAAM,MAAM,GAAG,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAE1E,IAAI,YAAsB,CAAC;QAC3B,IAAI,IAAY,CAAC;QACjB,IAAI,CAAC;YACD,YAAY,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;YACpF,IAAI,GAAG,MAAM,YAAY,CAAC,IAAI,EAAE,CAAC;QACrC,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACpB,2FAA2F;YAC3F,0FAA0F;YAC1F,0FAA0F;YAC1F,2BAA2B;YAC3B,IAAI,GAAG,YAAY,KAAK,IAAI,CAAC,GAAG,CAAC,IAAI,KAAK,cAAc,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY,CAAC,EAAE,CAAC;gBACrF,MAAM,IAAI,KAAK,CACX,uBAAuB,OAAO,CAAC,UAAU,4BAA4B,SAAS,IAAI;sBAChF,wFAAwF;sBACxF,+EAA+E,CACpF,CAAC;YACN,CAAC;YACD,MAAM,GAAG,CAAC;QACd,CAAC;QACD,OAAO;YACH,MAAM,EAAE,YAAY,CAAC,MAAM;YAC3B,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;YAC1B,OAAO,EAAE,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,OAAO,CAAC;SACtD,CAAC;IACN,CAAC;IAED,6EAA6E;IAE7E;;;;;;OAMG;IACO,iBAAiB,CAAC,OAAgB,EAAE,eAA8B;QACxE,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;QAClC,IAAI,OAAO,IAAI,IAAI;YAAE,OAAO,EAAE,CAAC;QAE/B,IAAI,MAAM,GAAY,OAAO,CAAC;QAC9B,IAAI,eAAe,EAAE,CAAC;YAClB,IAAI,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;gBACpE,MAAM,GAAI,OAAmC,CAAC,eAAe,CAAC,CAAC;gBAC/D,IAAI,MAAM,KAAK,SAAS;oBAAE,OAAO,EAAE,CAAC,CAAC,4CAA4C;YACrF,CAAC;iBAAM,CAAC;gBACJ,OAAO,EAAE,CAAC;YACd,CAAC;QACL,CAAC;QACD,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IACtC,CAAC;IAED,uEAAuE;IAEvE;;;;OAIG;IACO,qBAAqB,CAC3B,OAAgB,EAChB,cAA8B,EAC9B,WAAmB,EACnB,aAAqB,EACrB,QAAgB;QAEhB,IAAI,cAAc,KAAK,MAAM;YAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;QAEzD,sFAAsF;QACtF,IAAI,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YACpE,MAAM,GAAG,GAAG,OAAkC,CAAC;YAC/C,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACvC,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC;YACpD,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;gBAChB,MAAM,OAAO,GAAG,IAAI,GAAG,KAAK,CAAC;gBAC7B,OAAO,cAAc,KAAK,QAAQ;oBAC9B,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE;oBAC7E,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,GAAG,CAAC,EAAE,CAAC;YACnD,CAAC;QACL,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QACxC,MAAM,OAAO,GAAG,QAAQ,GAAG,CAAC,IAAI,KAAK,IAAI,QAAQ,CAAC;QAClD,IAAI,cAAc,KAAK,QAAQ,EAAE,CAAC;YAC9B,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,aAAa,GAAG,KAAK,EAAE,CAAC;QACnE,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,GAAG,CAAC,EAAE,CAAC;IAC3D,CAAC;IAED,+EAA+E;IAE/E;;;;;;OAMG;IACa,KAAK,CAAC,gBAAgB,CAClC,kBAA8C,EAC9C,WAAqB;QAErB,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,WAAW,CAAC,CAAC;QAC3E,MAAM,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;YAC7C,IAAI,CAAC;gBACD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,kBAAkB,EAAE,GAAG,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;gBACrG,GAAG,CAAC,MAAM,GAAG,8BAA8B,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YACrE,CAAC;YAAC,MAAM,CAAC,CAAC,8EAA8E,CAAC,CAAC;QAC9F,CAAC,CAAC,CAAC,CAAC;QACJ,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,qEAAqE;IAErE;;;;;;OAMG;IACa,KAAK,CAAC,YAAY,CAAC,GAAiB;QAChD,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,kBAAkB,CAAC,aAAa,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC;QACvF,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC5C,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;QAEnC,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;QAC5D,IAAI,CAAC,UAAU,EAAE,CAAC;YACd,OAAO;gBACH,OAAO,EAAE,EAAE;gBACX,OAAO,EAAE,KAAK;gBACd,QAAQ,EAAE,CAAC;wBACP,IAAI,EAAE,eAAe;wBACrB,OAAO,EAAE,IAAI,GAAG,CAAC,IAAI,iEAAiE;wBACtF,IAAI,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE;qBAC7B,CAAC;aACL,CAAC;QACN,CAAC;QAED,+FAA+F;QAC/F,qGAAqG;QACrG,iGAAiG;QACjG,sFAAsF;QACtF,MAAM,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;QAChE,IAAI,YAAY,EAAE,CAAC;YACf,OAAO,IAAI,CAAC,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,YAAY,CAAC,CAAC;QAC/D,CAAC;QAED,kGAAkG;QAClG,gGAAgG;QAChG,gGAAgG;QAChG,MAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;QAC9D,IAAI,WAAW,EAAE,CAAC;YACd,OAAO,IAAI,CAAC,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;QAC1E,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,kBAAkB,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC;QAC9E,MAAM,IAAI,GAAG,GAAG,CAAC,WAAW,IAAI,CAAC,CAAC;QAClC,MAAM,MAAM,GAAG,GAAG,CAAC,aAAa,IAAI,CAAC,CAAC;QACtC,MAAM,QAAQ,GAAG,GAAG,CAAC,eAAe,IAAI,GAAG,CAAC,eAAe,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC;QAEnH,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;QAC3E,MAAM,OAAO,GAAqB,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;QAC7E,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;QAE3G,oGAAoG;QACpG,MAAM,cAAc,GAAG,IAAI,CAAC,oBAAoB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAC3D,MAAM,UAAU,GAA8B,EAAE,CAAC;QACjD,KAAK,MAAM,GAAG,IAAI,cAAc,EAAE,CAAC;YAC/B,UAAU,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;QACnE,CAAC;QAED,MAAM,YAAY,GAAG,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;QACvD,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,mBAAmB,CACxD,IAAI,CAAC,4BAA4B,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,EACjD,GAAG,CAAC,UAAU,EACd,YAAY,CACf,CAAC,CAAC;QAEH,MAAM,UAAU,GAAG,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,cAAgC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;QAC3H,OAAO;YACH,OAAO,EAAE,OAAO;YAChB,OAAO,EAAE,UAAU,CAAC,OAAO;YAC3B,QAAQ,EAAE,UAAU,CAAC,QAAQ;YAC7B,UAAU,EAAE,UAAU,CAAC,UAAU;SACpC,CAAC;IACN,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACH;;;OAGG;IACK,oBAAoB,CAAC,KAA8B;QACvD,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;QAC1D,MAAM,IAAI,GAAG,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,kBAAkB,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,eAAe,CAAC,IAAI,IAAI,EAAE,CAAC;QACnI,OAAO,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IAC3E,CAAC;IAED;;;;;;;;;;;;;;;;;;OAkBG;IACK,KAAK,CAAC,gBAAgB,CAC1B,IAAuB,EACvB,KAA8B,EAC9B,KAAmE,EACnE,SAAwB;QAExB,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,kBAAkB,CAAC,CAAC;QAC9D,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,eAAe,CAAC,IAAI,IAAI,CAAC;QACtE,IAAI,CAAC,IAAI;YAAE,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;QAEhD,MAAM,OAAO,GAAG,CAAC,IAAa,EAAY,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC;aAC1E,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACrF,MAAM,YAAY,GAAG,CAAC,GAAa,EAAY,EAAE,CAC7C,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;QAEhE,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;QAC1D,IAAI,CAAC,KAAK,EAAE,CAAC;YACT,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EACpG,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAsB,CAAC,CAAC,CAAC;YAC3D,OAAO,EAAE,GAAG,EAAE,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;QACvE,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;QAC5E,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;QAC7D,IAAI,CAAC,UAAU;YAAE,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,SAAS,EAAE,QAAQ,CAAC,SAAS,EAAE,CAAC;QACnE,MAAM,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,YAAY,CAAC,KAAK,OAAO,CAAC;QAE5E,MAAM,GAAG,GAAa,EAAE,CAAC;QACzB,IAAI,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC;QACnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3C,gGAAgG;YAChG,8FAA8F;YAC9F,IAAI,CAAC,GAAG,CAAC,IAAI,SAAS,EAAE,EAAE,CAAC;gBAAC,SAAS,GAAG,IAAI,CAAC;gBAAC,MAAM;YAAC,CAAC;YACtD,MAAM,MAAM,GAAoC,YAAY;gBACxD,CAAC,CAAC,EAAE,CAAC,GAAG,UAAU,KAAK,CAAC,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;gBAC3C,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YACxC,IAAI,CAAC;gBACD,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EACpG,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAsB,CAAC,CAAC,CAAC;gBAC/D,GAAG,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YACpC,CAAC;YAAC,MAAM,CAAC;gBACL,6FAA6F;gBAC7F,8FAA8F;gBAC9F,0DAA0D;YAC9D,CAAC;QACL,CAAC;QACD,OAAO,EAAE,GAAG,EAAE,YAAY,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC;IAC5D,CAAC;IAEO,KAAK,CAAC,iBAAiB,CAC3B,GAA8B,EAC9B,GAA4B,EAC5B,GAAiB,EACjB,UAAkB,EAClB,WAAoC;QAEpC,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,kBAAkB,CAAC,CAAC;QAC1E,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;QAClE,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,eAAe,CAAC,IAAI,IAAI,CAAC;QAClF,MAAM,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,YAAY,CAAC,KAAK,OAAO,CAAC;QAClF,MAAM,QAAQ,GAAG,IAAI,CAAC,wBAAwB,CAAC,WAAW,EAAE,UAAU,CAAC,IAAI,6BAA6B,CAAC;QACzG,IAAI,CAAC,UAAU,IAAI,CAAC,SAAS,EAAE,CAAC;YAC5B,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,yBAAyB;wBAC9E,OAAO,EAAE,IAAI,GAAG,CAAC,IAAI,qEAAqE,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC;QACpI,CAAC;QAED,uGAAuG;QACvG,kGAAkG;QAClG,mDAAmD;QACnD,MAAM,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,cAAc,CAAC,IAAI,SAAS,CAAC;QAErF,sGAAsG;QACtG,qGAAqG;QACrG,sGAAsG;QACtG,mGAAmG;QACnG,mGAAmG;QACnG,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;QAC/B;;;;;WAKG;QACH,IAAI,gBAAgB,GAAG,CAAC,CAAC;QACzB,oGAAoG;QACpG,wGAAwG;QACxG,MAAM,KAAK,GAAG,KAAK,EAAK,IAAsB,EAAc,EAAE;YAC1D,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;YACxB,IAAI,CAAC;gBAAC,OAAO,MAAM,IAAI,EAAE,CAAC;YAAC,CAAC;oBAAS,CAAC;gBAAC,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;YAAC,CAAC;QAC9G,CAAC,CAAC;QACF,MAAM,SAAS,GAAG,GAAY,EAAE,CAAC,QAAQ,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,GAAG,SAAS,GAAG,gBAAgB,IAAI,QAAQ,CAAC;QAEzG,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,kBAAkB,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC;QAC9E,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC5C,MAAM,YAAY,GAAG,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;QACvD,MAAM,QAAQ,GAA8C,EAAE,CAAC;QAE/D,sGAAsG;QACtG,qGAAqG;QACrG,sGAAsG;QACtG,sGAAsG;QACtG,MAAM,QAAQ,GAAG,GAAG,GAAG,CAAC,kBAAkB,CAAC,EAAE,IAAI,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC,EAAE,CAAC;QAC1F,MAAM,OAAO,GAAG,IAAI,CAAC,wBAAwB,CAAC,WAAW,EAAE,eAAe,CAAC,IAAI,4BAA4B,CAAC;QAC5G,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAChD,IAAI,YAAsB,CAAC;QAC3B,IAAI,gBAAgB,GAAG,KAAK,CAAC;QAC7B,IAAI,MAAM,IAAI,IAAI,CAAC,KAAK,EAAE,GAAG,MAAM,CAAC,EAAE,GAAG,OAAO,EAAE,CAAC;YAC/C,YAAY,GAAG,MAAM,CAAC,GAAG,CAAC;QAC9B,CAAC;aAAM,CAAC;YACJ,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;YAClF,YAAY,GAAG,QAAQ,CAAC,GAAG,CAAC;YAC5B,gBAAgB,GAAG,QAAQ,CAAC,SAAS,CAAC;YACtC,gGAAgG;YAChG,kGAAkG;YAClG,qEAAqE;YACrE,IAAI,CAAC,gBAAgB;gBAAE,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,GAAG,EAAE,YAAY,EAAE,EAAE,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACrG,CAAC;QACD,IAAI,gBAAgB,EAAE,CAAC;YACnB,QAAQ,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,wBAAwB;gBAC9B,OAAO,EAAE,IAAI,GAAG,CAAC,IAAI,yEAAyE;sBACxF,WAAW,YAAY,CAAC,MAAM,kDAAkD;sBAChF,sFAAsF;sBACtF,yDAAyD;gBAC/D,IAAI,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,eAAe,EAAE,YAAY,CAAC,MAAM;oBACtD,KAAK,EAAE,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC,EAAE;aAC1D,CAAC,CAAC;QACP,CAAC;QACD,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5B,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,cAAc;gBAChC,OAAO,EAAE,IAAI,GAAG,CAAC,IAAI,MAAM,UAAU,sCAAsC,SAAS,gCAAgC,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACxJ,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;QAC/D,CAAC;QAED,uGAAuG;QACvG,mGAAmG;QACnG,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QACzD,qGAAqG;QACrG,kGAAkG;QAClG,sGAAsG;QACtG,MAAM,YAAY,GAAG,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;aAC3C,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;aACnC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;aACnB,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9B,MAAM,SAAS,GAAG,YAAY,IAAI,IAAI;YAClC,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,YAAY,CAAC;YAClC,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,IAAI;gBAClB,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,aAAa,CAAC,MAAM,CAAC,KAAe,CAAC,GAAG,CAAC,CAAC;gBACzE,CAAC,CAAC,YAAY,CAAC;QACvB,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,0BAA0B,EAAE,CAAC,CAAC,CAAC;QAEjF,oGAAoG;QACpG,sGAAsG;QACtG,gGAAgG;QAChG,uGAAuG;QACvG,sGAAsG;QACtG,yFAAyF;QACzF,MAAM,UAAU,GAAG,IAAI,CAAC,qBAAqB,CAAC,GAAG,EAAE,kBAAkB,CAAC,IAAI,EAAE,CAAC;QAC7E,MAAM,cAAc,GAAG,UAAU,CAAC,MAAM,IAAI,CAAC;YACzC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,qBAAqB,CAAC,WAAW,EAAE,UAAU,CAAC,IAAI,GAAG,CAAC,eAAe,IAAI,GAAG,CAAC,SAAS,CAAC;YAC1G,CAAC,CAAC,CAAC,CAAC,CAAG,0DAA0D;QAErE,uGAAuG;QACvG,kGAAkG;QAClG,MAAM,GAAG,GAAqB,EAAE,CAAC;QACjC,MAAM,cAAc,GAAG,IAAI,CAAC,oBAAoB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAC3D,uGAAuG;QACvG,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;QACnC,qFAAqF;QACrF,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;QAC1C,IAAI,gBAAgB,GAAG,CAAC,CAAC;QACzB,sGAAsG;QACtG,MAAM,SAAS,GAAa,EAAE,CAAC;QAC/B,IAAI,gBAAoC,CAAC;QACzC,8GAA8G;QAC9G,MAAM,cAAc,GAAG,IAAI,GAAG,EAAkB,CAAC;QACjD,qGAAqG;QACrG,MAAM,SAAS,GAA6D,EAAE,CAAC;QAE/E,MAAM,QAAQ,GAAG,cAAc,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC/E,MAAM,WAAW,GAAG,IAAI,CAAC,wBAAwB,CAAC,WAAW,EAAE,mBAAmB,CAAC,IAAI,2BAA2B,CAAC;QAEnH;;;;;;;;WAQG;QACH,MAAM,iBAAiB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,cAAc,IAAI,CAAC,CAAC,CAAC;QAE/D,MAAM,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,iBAAiB,EACpF,KAAK,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE;YAC9B,6FAA6F;YAC7F,6EAA6E;YAC7E,IAAI,KAAK,GAAG,CAAC,IAAI,SAAS,EAAE,EAAE,CAAC;gBAAC,gBAAgB,EAAE,CAAC;gBAAC,OAAO;YAAC,CAAC;YAC7D,2FAA2F;YAC3F,iFAAiF;YACjF,IAAI,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAChD,IAAI,aAAa,GAAG,KAAK,CAAC;YAC1B,IAAI,CAAC;gBACD,SAAS,CAAC;oBACN;;;;;;;;;;uBAUG;oBACH,IAAI,GAAG,CAAC,gBAAgB;wBAAE,MAAM,KAAK,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,gBAAiB,EAAE,CAAC,CAAC;oBACrE,mFAAmF;oBACnF,sFAAsF;oBACtF,IAAI,SAAS,EAAE,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;wBAClD,IAAI,MAAM,GAAG,CAAC,IAAI,aAAa;4BAAE,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;;4BACvD,gBAAgB,EAAE,CAAC;wBACxB,OAAO;oBACX,CAAC;oBACD,MAAM,MAAM,GAAoC,YAAY;wBACxD,CAAC,CAAC,EAAE,CAAC,GAAG,SAAS,KAAK,CAAC,EAAE,QAAQ,EAAE;wBACnC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC;oBAChC,IAAI,cAAc,GAAG,CAAC;wBAAE,IAAI,CAAC,qBAAqB,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,cAAc,EAAE,QAAQ,CAAC,CAAC;oBACzG,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EACpG,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAsB,CAAC,CAAC,CAAC;oBACrE,aAAa,GAAG,IAAI,CAAC;oBACrB,IAAI,SAAS,GAAG,CAAC,CAAC;oBAClB,KAAK,MAAM,GAAG,IAAI,cAAc,EAAE,CAAC;wBAC/B,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC;4BACvD,8EAA8E;4BAC9E,MAAM,MAAM,GAAG,GAAG,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,EAAE,QAAQ,EAAE,CAAC;4BACtF,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,4BAA4B,CAAC,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,GAAG,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC,CAAC;4BACzH,SAAS,EAAE,CAAC;wBAChB,CAAC;oBACL,CAAC;oBACD,GAAG,CAAC,eAAe,EAAE,EAAE,CAAC;oBACxB,gEAAgE;oBAChE,IAAI,cAAc,KAAK,CAAC,IAAI,SAAS,GAAG,cAAc;wBAAE,MAAM;oBAC9D,MAAM,IAAI,SAAS,CAAC;oBACpB,gFAAgF;oBAChF,IAAI,SAAS,EAAE,EAAE,CAAC;wBAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;wBAAC,OAAO;oBAAC,CAAC;gBAC5D,CAAC;gBACD,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACxB,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACT,MAAM,GAAG,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;gBACvD,IAAI,8BAA8B,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;oBAAC,GAAG,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,CAAC;oBAAC,MAAM,CAAC,CAAC;gBAAC,CAAC,CAAE,qCAAqC;gBAC3H;;;;;;;;;;;;mBAYG;gBACH,IAAI,mIAAmI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;oBAChJ,MAAM,QAAQ,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;oBACvD,IAAI,QAAQ,IAAI,WAAW,EAAE,CAAC;wBAC1B,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;wBACzD,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAG,oDAAoD;oBAC/E,CAAC;yBAAM,CAAC;wBACJ,cAAc,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;wBACpC,IAAI,MAAM,GAAG,CAAC;4BAAE,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;oBAC/C,CAAC;oBACD,OAAO;gBACX,CAAC;gBACD,sFAAsF;gBACtF,sFAAsF;gBACtF,2FAA2F;gBAC3F,+DAA+D;gBAC/D,IAAI,8DAA8D,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;oBAC3E,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;oBACzB,gBAAgB,KAAK,GAAG,CAAC;gBAC7B,CAAC;qBAAM,CAAC;oBACJ,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,oBAAoB,EAAE,OAAO,EAAE,IAAI,GAAG,CAAC,IAAI,eAAe,SAAS,IAAI,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,YAAY,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,GAAG,EAAE,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;gBACxN,CAAC;gBACD,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACxB,CAAC;QACL,CAAC,CAAC,CAAC;QAEP,wGAAwG;QACxG,oGAAoG;QACpG,qGAAqG;QACrG,kGAAkG;QAClG,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,IAAI,SAAS,CAAC,MAAM,KAAK,QAAQ,CAAC,IAAI,EAAE,CAAC;YACjF,QAAQ,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,gBAAgB;gBACtB,OAAO,EAAE,IAAI,GAAG,CAAC,IAAI,MAAM,UAAU,6BAA6B,SAAS,CAAC,MAAM,IAAI,SAAS,EAAE;sBAC3F,sFAAsF;sBACtF,oCAAoC,YAAY,CAAC,MAAM,8BAA8B;sBACrF,8EAA8E,gBAAgB,EAAE;gBACtG,IAAI,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,UAAU,EAAE,cAAc,EAAE,SAAS,CAAC,MAAM;oBAC9D,eAAe,EAAE,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;aAChF,CAAC,CAAC;QACP,CAAC;aAAM,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9B,QAAQ,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,gBAAgB;gBACtB,OAAO,EAAE,IAAI,GAAG,CAAC,IAAI,MAAM,SAAS,CAAC,MAAM,WAAW,QAAQ,CAAC,IAAI,IAAI,SAAS,gBAAgB;sBAC1F,0EAA0E,gBAAgB,EAAE;gBAClG,IAAI,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,UAAU,EAAE,cAAc,EAAE,SAAS,CAAC,MAAM;oBAC9D,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;aACnE,CAAC,CAAC;QACP,CAAC;QAED,sGAAsG;QACtG,mGAAmG;QACnG,0FAA0F;QAC1F,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,QAAQ,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,kBAAkB;gBACxB,OAAO,EAAE,IAAI,GAAG,CAAC,IAAI,MAAM,SAAS,CAAC,MAAM,IAAI,SAAS,oBAAoB,WAAW,aAAa;sBAC9F,0EAA0E;sBAC1E,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,yCAAyC;sBAC5F,kFAAkF;sBAClF,wEAAwE,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE;gBACpG,IAAI,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,CAAC,MAAM,EAAE,WAAW;oBACtE,MAAM,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE;aAClG,CAAC,CAAC;QACP,CAAC;QAED,4FAA4F;QAC5F,qGAAqG;QACrG,qGAAqG;QACrG,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,OAAO,OAAO,GAAG,KAAK,CAAC,MAAM,IAAI,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC;YAAE,OAAO,EAAE,CAAC;QAElE,oGAAoG;QACpG,kGAAkG;QAClG,8EAA8E;QAC9E,MAAM,eAAe,GAAG,IAAI,GAAG,EAAkB,CAAC;QAClD,KAAK,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,OAAO;YAAE,IAAI,KAAK,IAAI,OAAO;gBAAE,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC;QACjG,MAAM,YAAY,GAAG,IAAI,GAAG,EAAkB,CAAC;QAC/C,KAAK,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,cAAc;YAAE,IAAI,KAAK,IAAI,OAAO;gBAAE,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;QAEjG,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC1C,MAAM,OAAO,GAAG,gBAAgB,GAAG,CAAC,IAAI,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC;QACzD,IAAI,OAAO,EAAE,CAAC;YACV,QAAQ,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,oBAAoB;gBAC1B,OAAO,EAAE,IAAI,GAAG,CAAC,IAAI,oBAAoB,OAAO,OAAO,KAAK,CAAC,MAAM,IAAI,SAAS,SAAS;sBACnF,CAAC,YAAY,IAAI,IAAI,CAAC,CAAC,CAAC,UAAU,YAAY,yBAAyB,CAAC,CAAC,CAAC,EAAE,CAAC;sBAC7E,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,OAAO,CAAC,IAAI,kDAAkD,CAAC,CAAC,CAAC,EAAE,CAAC;sBAChG,WAAW,QAAQ,kCAAkC;gBAC3D,IAAI,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,gBAAgB;oBACzE,YAAY,EAAE,YAAY,IAAI,IAAI,EAAE,UAAU,EAAE,OAAO,CAAC,IAAI,EAAE,QAAQ,EAAE;aACnF,CAAC,CAAC;QACP,CAAC;QAED,uGAAuG;QACvG,oGAAoG;QACpG,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,GAAG,OAAO,IAAI,YAAY,CAAC,IAAI,GAAG,CAAC,IAAI,eAAe,CAAC,IAAI,GAAG,CAAC,CAAC;QAChG,OAAO;YACH,OAAO,EAAE,GAAG;YACZ,OAAO,EAAE,OAAO;YAChB,iBAAiB,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS;gBACnC,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,eAAe,EAAE,YAAY,CAAC;YACxG,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;SACnD,CAAC;IACN,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACK,iBAAiB,CAAC,GAA8B;QACpD,MAAM,KAAK,GAAiB,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,GAAG,EAAE,EAAE,KAAK,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC;QACnF,IAAI,CAAC,GAAG;YAAE,OAAO,KAAK,CAAC;QAEvB,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACtB,IAAI,CAAC;gBACD,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAA8C,CAAC;gBACvE,MAAM,IAAI,GAAG,CAAC,CAAU,EAAuB,EAAE;oBAC7C,MAAM,CAAC,GAAG,IAAI,GAAG,EAAkB,CAAC;oBACpC,IAAI,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;wBAC7B,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,CAA4B,CAAC,EAAE,CAAC;4BAChE,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;4BAC1E,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,IAAI,CAAC;gCAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;wBACjE,CAAC;oBACL,CAAC;oBACD,OAAO,CAAC,CAAC;gBACb,CAAC,CAAC;gBACF,OAAO;oBACH,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI;oBAC7D,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;oBACnB,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;iBACnB,CAAC;YACN,CAAC;YAAC,MAAM,CAAC;gBACL,2FAA2F;gBAC3F,0DAA0D;gBAC1D,OAAO,KAAK,CAAC;YACjB,CAAC;QACL,CAAC;QAED,MAAM,IAAI,GAAG,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QAClC,IAAI,IAAI,GAAG,CAAC;YAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,GAAG,EAAE,EAAE,KAAK,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC;QAC3E,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACxD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC;YAAE,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,QAAQ,EAAE,IAAI,GAAG,EAAE,EAAE,KAAK,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC;QACxH,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC;IAChG,CAAC;IAED;;;;OAIG;IACK,qBAAqB,CAAC,KAAoB,EAAE,QAA6B,EAAE,KAA0B;QACzG,IAAI,QAAQ,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC;YAAE,OAAO,KAAK,IAAI,SAAS,CAAC;QACvE,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,QAAQ,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;YAC3D,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YAChD,OAAO,GAAG,EAAE,IAAI,MAAM,EAAE,CAAC;QAC7B,CAAC;QACD,MAAM,OAAO,GAA2E,EAAE,CAAC;QAC3F,IAAI,KAAK,IAAI,IAAI;YAAE,OAAO,CAAC,CAAC,GAAG,KAAK,CAAC;QACrC,IAAI,QAAQ,CAAC,IAAI,GAAG,CAAC;YAAE,OAAO,CAAC,CAAC,GAAG,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAChE,IAAI,KAAK,CAAC,IAAI,GAAG,CAAC;YAAE,OAAO,CAAC,CAAC,GAAG,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAC1D,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IACnC,CAAC;IAED,0EAA0E;IAChE,KAAK;QACX,OAAO,IAAI,CAAC,GAAG,EAAE,CAAC;IACtB,CAAC;IAED;;;;;;;;;;;;;;;;;;;OAmBG;IACK,KAAK,CAAC,iBAAiB,CAC3B,GAA8B,EAC9B,IAA6B,EAC7B,GAAiB,EACjB,IAA6B;QAE7B,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;QAC3D,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC;QAC3D,IAAI,CAAC,QAAQ,EAAE,CAAC;YACZ,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,2BAA2B;wBAChF,OAAO,EAAE,IAAI,GAAG,CAAC,IAAI,oDAAoD,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC;QACnH,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,kBAAkB,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC;QAC9E,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC5C,MAAM,YAAY,GAAG,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;QAEvD,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC;YACjC,UAAU,EAAE,GAAG,CAAC,IAAI;YACpB,MAAM,EAAE;gBACJ,KAAK;gBACL,UAAU,EAAE,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE,YAAY,CAAC,IAAI,SAAS;gBACvE,cAAc,EAAE,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE,gBAAgB,CAAC,IAAI,SAAS;gBAC/E,0BAA0B,EAAE,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE,4BAA4B,CAAC,IAAI,SAAS;gBACvG,0FAA0F;gBAC1F,0EAA0E;gBAC1E,QAAQ,EAAE,IAAI,CAAC,wBAAwB,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,SAAS;gBACtE,sBAAsB,EAAE,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE,wBAAwB,CAAC,IAAI,SAAS;aAClG;YACD,aAAa,EAAE,GAAG,CAAC,aAAa;YAChC,cAAc,EAAE,GAAG,CAAC,cAAc;YAClC,gBAAgB,EAAE,GAAG,CAAC,gBAAgB;YACtC,eAAe,EAAE,GAAG,CAAC,eAAe;YACpC,8FAA8F;YAC9F,iGAAiG;YACjG,eAAe;YACf,WAAW,EAAE,KAAK,EAAE,GAAa,EAAsC,EAAE;gBACrE,MAAM,MAAM,GAAoC,EAAE,KAAK,EAAE,CAAC;gBAC1D,GAAG,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;gBACzD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EACxF,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAsB,CAAC,CAAC;gBAClE,OAAO,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YACnD,CAAC;SACJ,CAAC,CAAC;QAEH,OAAO;YACH,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAChC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,4BAA4B,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,GAAG,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;YAChH,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,GAAG,CAAC,MAAM,CAAC,iBAAiB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,MAAM,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAClG,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC5D,CAAC;IACN,CAAC;IAGD,oHAAoH;IAC5G,KAAK,CAAC,gBAAgB,CAAI,KAAU,EAAE,WAAmB,EAAE,MAAkC;QACjG,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,KAAK,IAAI,EAAE;YAC3G,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;gBAAC,MAAM,GAAG,GAAG,CAAC,EAAE,CAAC;gBAAC,MAAM,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;YAAC,CAAC;QAC3E,CAAC,CAAC,CAAC;QACH,MAAM,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC;IAED,qEAAqE;IAErE;;;;;;OAMG;IACa,KAAK,CAAC,YAAY,CAAC,GAAwB;QACvD,MAAM,EAAE,GAAG,GAAG,CAAC,kBAAgD,CAAC;QAChE,MAAM,WAAW,GAAG,GAAG,CAAC,WAAuB,CAAC;QAChD,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,aAAa,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC;QACnE,IAAI,CAAC,GAAG,CAAC,aAAa,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;YAC1C,MAAM,IAAI,KAAK,CACX,mCAAmC,GAAG,CAAC,UAAU,sEAAsE,CAC1H,CAAC;QACN,CAAC;QACD,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;QACnC,MAAM,EAAE,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC;QACxC,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;QACnD,IAAI,CAAC,MAAM,EAAE,CAAC;YACV,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,YAAY,EAAE,qBAAqB,GAAG,CAAC,UAAU,wDAAwD,EAAE,CAAC;QAC1J,CAAC;QAED,IAAI,CAAC;YACD,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC5C,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;YAC1D,MAAM,UAAU,GAAG,IAAI,CAAC,sBAAsB,CAAC,GAAG,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;YAChE,MAAM,MAAM,GAAG,IAAI,CAAC,mBAAmB,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;YAC3D,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;YAEvE,MAAM,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAC1D,IAAI,WAAW,EAAE,CAAC;gBACd,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,CAAC,MAAM,EAAE,YAAY,EAAE,2BAA2B,GAAG,CAAC,UAAU,KAAK,WAAW,EAAE,EAAE,CAAC;YACtI,CAAC;YAED,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,EAAE,EAAE,uBAAuB,CAAC,CAAC;YACnE,MAAM,UAAU,GAAG,OAAO;gBACtB,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;gBAC/C,CAAC,CAAC,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,CAAC,CAAC,6DAA6D;YACxG,OAAO,IAAI,CAAC,kBAAkB,CAAC,UAAU,EAAE,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC;QAChF,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACpB,OAAO,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,cAAc,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC;QACpE,CAAC;IACL,CAAC;IAED;;;OAGG;IACa,KAAK,CAAC,YAAY,CAAC,GAAwB;QACvD,MAAM,EAAE,GAAG,GAAG,CAAC,kBAAgD,CAAC;QAChE,MAAM,WAAW,GAAG,GAAG,CAAC,WAAuB,CAAC;QAChD,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,aAAa,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC;QACnE,IAAI,CAAC,GAAG,CAAC,aAAa,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;YAC1C,MAAM,IAAI,KAAK,CACX,mCAAmC,GAAG,CAAC,UAAU,sEAAsE,CAC1H,CAAC;QACN,CAAC;QACD,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;QACnC,MAAM,EAAE,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC;QACxC,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;QACnD,IAAI,CAAC,MAAM,EAAE,CAAC;YACV,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,YAAY,EAAE,qBAAqB,GAAG,CAAC,UAAU,wDAAwD,EAAE,CAAC;QAC1J,CAAC;QAED,IAAI,CAAC;YACD,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC5C,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;YAC1D,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;YAClD,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,SAAS;gBAAE,KAAK,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,UAAU,CAAC;YAChE,MAAM,UAAU,GAAG,IAAI,CAAC,sBAAsB,CAAC,GAAG,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;YAChE,MAAM,MAAM,GAAG,IAAI,CAAC,mBAAmB,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;YAC3D,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;YAEvE,MAAM,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAC1D,IAAI,WAAW,EAAE,CAAC;gBACd,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,CAAC,MAAM,EAAE,YAAY,EAAE,2BAA2B,GAAG,CAAC,UAAU,KAAK,WAAW,EAAE,EAAE,CAAC;YACtI,CAAC;YACD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE,CAAC;QACtF,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACpB,OAAO,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,cAAc,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC;QACpE,CAAC;IACL,CAAC;IAED;;;OAGG;IACa,KAAK,CAAC,YAAY,CAAC,GAAwB;QACvD,MAAM,EAAE,GAAG,GAAG,CAAC,kBAAgD,CAAC;QAChE,MAAM,WAAW,GAAG,GAAG,CAAC,WAAuB,CAAC;QAChD,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,aAAa,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC;QACnE,IAAI,CAAC,GAAG,CAAC,aAAa,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;YAC1C,MAAM,IAAI,KAAK,CACX,mCAAmC,GAAG,CAAC,UAAU,sEAAsE,CAC1H,CAAC;QACN,CAAC;QACD,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;QACnC,MAAM,EAAE,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC;QACxC,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;QACnD,IAAI,CAAC,MAAM,EAAE,CAAC;YACV,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,YAAY,EAAE,qBAAqB,GAAG,CAAC,UAAU,wDAAwD,EAAE,CAAC;QAC1J,CAAC;QAED,IAAI,CAAC;YACD,MAAM,QAAQ,GAAG,IAAI,CAAC,qBAAqB,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;YACxD,MAAM,MAAM,GAAoC,EAAE,CAAC,GAAG,QAAQ,KAAK,CAAC,EAAE,GAAG,CAAC,UAAU,EAAE,CAAC;YACvF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;YAEvE,MAAM,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAC1D,IAAI,WAAW,EAAE,CAAC;gBACd,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,CAAC,MAAM,EAAE,YAAY,EAAE,2BAA2B,GAAG,CAAC,UAAU,KAAK,WAAW,EAAE,EAAE,CAAC;YACtI,CAAC;YACD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE,CAAC;QACtF,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACpB,OAAO,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,cAAc,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC;QACpE,CAAC;IACL,CAAC;IAED,2GAA2G;IACnG,KAAK,CAAC,SAAS,CACnB,EAA8B,EAC9B,WAAqB,EACrB,MAAc,EACd,MAAuC;QAEvC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;QACtD,MAAM,OAAO,GAAqB,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;QACzE,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;IAC/F,CAAC;IAED,qEAAqE;IAErE,6GAA6G;IACrG,eAAe,CACnB,GAA8B,EAC9B,GAA4B,EAC5B,GAAiB,EACjB,IAAY,EACZ,MAAc,EACd,QAAgB;QAEhB,MAAM,MAAM,GAAoC,EAAE,CAAC;QACnD,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,kBAAkB,CAAC,CAAC;QAE9D,IAAI,CAAC,GAAG,CAAC,kBAAkB,IAAI,GAAG,CAAC,cAAc,KAAK,MAAM;YAAE,OAAO,MAAM,CAAC;QAC5E,MAAM,SAAS,GAAG,IAAI,CAAC,qBAAqB,CAAC,GAAG,EAAE,kBAAkB,CAAC,IAAI,EAAE,CAAC;QAC5E,IAAI,GAAG,CAAC,cAAc,KAAK,QAAQ,EAAE,CAAC;YAClC,IAAI,CAAC,qBAAqB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;QACpE,CAAC;aAAM,IAAI,GAAG,CAAC,cAAc,KAAK,YAAY,EAAE,CAAC;YAC7C,IAAI,CAAC,yBAAyB,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;QACtE,CAAC;QACD,OAAO,MAAM,CAAC;IAClB,CAAC;IAED;;;;;OAKG;IACK,cAAc,CAClB,MAAuC,EACvC,GAA8B,EAC9B,GAA4B,EAC5B,kBAA8C;QAE9C,MAAM,KAAK,GAAG,CAAC,GAAmC,EAAQ,EAAE;YACxD,IAAI,CAAC,GAAG;gBAAE,OAAO;YACjB,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;gBACvC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,QAAQ;oBAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACtE,CAAC;QACL,CAAC,CAAC;QACF,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC,CAAC;QACjD,MAAM,OAAO,GAAG,IAAI,CAAC,qBAAqB,CAAC,kBAAkB,CAAC,CAAC;QAC/D,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;QAChE,IAAI,UAAU;YAAE,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;IACvE,CAAC;IAED;;;;OAIG;IACK,qBAAqB,CACzB,MAAuC,EACvC,SAAmB,EACnB,MAAc,EACd,QAAgB,EAChB,QAAyB;QAEzB,MAAM,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,WAAW,CAAC;QAC5C,MAAM,QAAQ,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5D,MAAM,KAAK,GAAqC,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;QAC1F,qGAAqG;QACrG,mGAAmG;QACnG,oCAAoC;QACpC,IAAI,QAAQ;YAAE,KAAK,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,kBAAkB,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;QAClH,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACxB,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;YACtD,MAAM,KAAK,GAAG,CAAC,CAAS,EAAU,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACzF,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE;gBAC/B,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC9C,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,KAAK,CAAC;YAC7C,CAAC,CAAC,CAAC;QACP,CAAC;aAAM,CAAC;YACJ,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,KAAK;gBAAE,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;QAC5D,CAAC;IACL,CAAC;IAED;;;;;;;;;;;;;OAaG;IACK,kBAAkB,CAAC,GAA4B;QACnD,MAAM,WAAW,GAAG,IAAI,CAAC,qBAAqB,CAAC,GAAG,EAAE,gBAAgB,CAAC,IAAI,EAAE,CAAC;QAC5E,MAAM,GAAG,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,mBAAmB,CAAC,CAAC;QAC5D,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG;YAAE,OAAO,SAAS,CAAC;QAC3F,OAAO;YACH,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC;YAC3B,kBAAkB,EAAE,WAAW,CAAC,CAAC,CAAC;YAClC,GAAG,EAAE,GAAG;YACR,SAAS,EAAE,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,mBAAmB,CAAC,IAAI,KAAK;SACtE,CAAC;IACN,CAAC;IAED,8GAA8G;IACtG,yBAAyB,CAC7B,MAAuC,EACvC,SAAmB,EACnB,IAAY,EACZ,QAAgB;QAEhB,MAAM,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC;QACxC,MAAM,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC;QACxB,MAAM,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;QAC9B,IAAI,QAAQ;YAAE,MAAM,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAC;IAC9C,CAAC;IAED,qEAAqE;IAErE;;;;;;OAMG;IACK,sBAAsB,CAAC,GAA4B,EAAE,EAA2B,EAAE,MAAc;QACpG,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,EAAE,EAAE,YAAY,CAAC,IAAI,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAC;QAC1G,IAAI,QAAQ;YAAE,OAAO,QAAQ,CAAC;QAC9B,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE,EAAE,eAAe,CAAC,CAAC,CAAC;QACjF,IAAI,SAAS;YAAE,OAAO,SAAS,CAAC;QAChC,OAAO,IAAI,CAAC,4BAA4B,CAAC,MAAM,CAAC,CAAC;IACrD,CAAC;IAED,0FAA0F;IAClF,qBAAqB,CAAC,EAA2B,EAAE,MAAc;QACrE,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE,EAAE,eAAe,CAAC,CAAC,CAAC;QACjF,IAAI,SAAS;YAAE,OAAO,SAAS,CAAC;QAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;QACvD,IAAI,QAAQ;YAAE,OAAO,QAAQ,CAAC;QAC9B,2FAA2F;QAC3F,MAAM,MAAM,GAAG,IAAI,CAAC,4BAA4B,CAAC,MAAM,CAAC,CAAC;QACzD,OAAO,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,KAAK,CAAC;IAC/E,CAAC;IAED,8FAA8F;IACtF,4BAA4B,CAAC,MAAc;QAC/C,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,mDAAmD,CAAC,CAAC;QAC5E,IAAI,CAAC,EAAE,CAAC;YACJ,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAClB,kFAAkF;YAClF,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;YAClC,OAAO,GAAG,IAAI,IAAI,CAAC;QACvB,CAAC;QACD,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,sHAAsH;IAC9G,aAAa,CAAC,OAAsB;QACxC,IAAI,CAAC,OAAO;YAAE,OAAO,IAAI,CAAC;QAC1B,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACjC,MAAM,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;QACzD,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IAC3D,CAAC;IAED,oHAAoH;IAC5G,iBAAiB,CAAC,EAA2B,EAAE,MAAwC;QAC3F,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,EAAE,EAAE,eAAe,CAAC,CAAC;QAC5D,IAAI,QAAQ,EAAE,CAAC;YACX,MAAM,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAC,4CAA4C;YAC1F,IAAI,CAAC;gBAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QACvB,CAAC;QACD,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QACzF,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IAC/B,CAAC;IAED,gGAAgG;IACxF,mBAAmB,CAAC,UAAkB,EAAE,KAA8B;QAC1E,MAAM,GAAG,GAAoC,EAAE,CAAC;QAChD,IAAI,CAAC,aAAa,CAAC,GAAG,UAAU,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;QACnD,OAAO,GAAG,CAAC;IACf,CAAC;IAEO,aAAa,CAAC,MAAc,EAAE,KAAc,EAAE,GAAoC;QACtF,IAAI,KAAK,IAAI,IAAI;YAAE,OAAO;QAC1B,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACvB,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,MAAM,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QAC3E,CAAC;aAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YACnC,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAgC,CAAC,EAAE,CAAC;gBACpE,IAAI,CAAC,aAAa,CAAC,GAAG,MAAM,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;YAClD,CAAC;QACL,CAAC;aAAM,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;YACpC,GAAG,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,8BAA8B;QAC/D,CAAC;aAAM,CAAC;YACJ,GAAG,CAAC,MAAM,CAAC,GAAG,KAAwB,CAAC;QAC3C,CAAC;IACL,CAAC;IAED,4FAA4F;IACpF,cAAc,CAAC,KAA8B,EAAE,MAAwC;QAC3F,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAC5E,IAAI,QAAQ,CAAC,IAAI,KAAK,CAAC;YAAE,OAAO,EAAE,GAAG,KAAK,EAAE,CAAC;QAC7C,OAAO,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACvF,CAAC;IAED,sEAAsE;IAEtE;;;;;;;;;;;OAWG;IACK,oBAAoB,CAAC,GAA8B,EAAE,GAA4B;QACrF,MAAM,KAAK,GAAG,IAAI,CAAC,qBAAqB,CAAC,GAAG,EAAE,sBAAsB,CAAC,CAAC;QACtE,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,KAAK,CAAC;QAC5C,MAAM,MAAM,GAAG,OAAO,GAAG,CAAC,eAAe,KAAK,QAAQ,IAAI,GAAG,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;YAC3F,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,EAAE;YAC5B,CAAC,CAAC,IAAI,CAAC;QACX,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,qBAAqB,CAAC,CAAC,CAAC;IACzE,CAAC;IAEO,aAAa,CAAC,MAAe;QACjC,IAAI,MAAM,IAAI,IAAI;YAAE,OAAO,EAAE,CAAC;QAC9B,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YACxB,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAA8B,CAAC;QACpH,CAAC;QACD,IAAI,OAAO,MAAM,KAAK,QAAQ;YAAE,OAAO,CAAC,MAAiC,CAAC,CAAC;QAC3E,OAAO,EAAE,CAAC;IACd,CAAC;IAED;;;;OAIG;IACK,mBAAmB,CACvB,GAA4B,EAC5B,UAAkB,EAClB,YAAsB;QAEtB,MAAM,YAAY,GAAG,YAAY,CAAC,MAAM,GAAG,CAAC;eACrC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAChG,MAAM,UAAU,GAAG,YAAY;YAC3B,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;YAClE,CAAC,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC;QAC9B,IAAI,MAAM,GAAG,GAAG,CAAC;QACjB,IAAI,CAAC,YAAY,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC;eACvC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,IAAI,iBAAiB,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,EAAE,CAAC;YAC5F,MAAM,GAAG,EAAE,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC;QACvD,CAAC;QACD,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IAC9E,CAAC;IAEO,oBAAoB,CAAC,MAAwC;QACjE,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACvG,OAAO,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACvC,CAAC;IAED,gHAAgH;IACxG,gBAAgB,CAAC,IAAa,EAAE,OAAe;QACnD,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,IAAI;YAAE,OAAO,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QACnE,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC7C,OAAO,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACnD,CAAC;IAED,6GAA6G;IACrG,uBAAuB,CAAC,KAA8B;QAC1D,OAAO,kBAAkB,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC;IAEO,iBAAiB,CAAC,IAAa;QACnC,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3D,MAAM,GAAG,GAAG,IAA+B,CAAC;YAC5C,IAAI,OAAO,GAAG,CAAC,SAAS,KAAK,QAAQ,IAAI,GAAG,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAChE,MAAM,IAAI,GAAG,OAAO,GAAG,CAAC,SAAS,KAAK,QAAQ,IAAI,GAAG,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC;gBAC3G,MAAM,OAAO,GAAG,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,mCAAmC,CAAC;gBACpG,OAAO,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;YAClC,CAAC;QACL,CAAC;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,2GAA2G;IACnG,mBAAmB,CAAC,IAAa;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;QACzC,IAAI,GAAG;YAAE,MAAM,IAAI,KAAK,CAAC,oCAAoC,GAAG,EAAE,CAAC,CAAC;IACxE,CAAC;IAEO,cAAc,CAAC,GAAY,EAAE,SAAiB,EAAE,UAAkB;QACtE,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,SAAS,eAAe,UAAU,KAAK,OAAO,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC;IAClH,CAAC;IAED,qEAAqE;IAErE,4GAA4G;IAClG,KAAK,CAAC,WAAW,CACvB,kBAA8C,EAC9C,WAAqB;QAErB,MAAM,GAAG,GAA4B,EAAE,CAAC;QACxC,IAAI,kBAAkB,CAAC,YAAY,EAAE,CAAC;YAClC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,IAAI,CAAC,oBAAoB,CAAC,kBAAkB,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC,CAAC;QACtG,CAAC;QACD,IAAI,kBAAkB,CAAC,aAAa,EAAE,CAAC;YACnC,IAAI,CAAC;gBACD,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,aAAa,CAA4B,CAAC,CAAC;YAChG,CAAC;YAAC,MAAM,CAAC,CAAC,wEAAwE,CAAC,CAAC;QACxF,CAAC;QACD,OAAO,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;IACrC,CAAC;IAEO,KAAK,CAAC,oBAAoB,CAAC,YAAoB,EAAE,WAAqB;QAC1E,MAAM,EAAE,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC1B,MAAM,UAAU,GAAG,MAAM,EAAE,CAAC,eAAe,CAAqB,iBAAiB,EAAE,WAAW,CAAC,CAAC;QAChG,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACnD,IAAI,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM;YAAE,OAAO,EAAE,CAAC;QAC7C,IAAI,CAAC;YACD,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAA4B,CAAC;QACpE,CAAC;QAAC,MAAM,CAAC;YACL,OAAO,EAAE,CAAC;QACd,CAAC;IACL,CAAC;IAEO,eAAe,CAAC,GAA4B;QAChD,MAAM,IAAI,GAAG,CAAC,GAAG,IAAc,EAAsB,EAAE;YACnD,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;gBACrB,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;oBACvC,IAAI,CAAC,CAAC,WAAW,EAAE,KAAK,GAAG,CAAC,WAAW,EAAE,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC;wBAAE,OAAO,CAAC,CAAC;gBACjG,CAAC;YACL,CAAC;YACD,OAAO,SAAS,CAAC;QACrB,CAAC,CAAC;QACF,8FAA8F;QAC9F,4FAA4F;QAC5F,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC;aACjC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,KAAK,kBAAkB,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAChE,MAAM,OAAO,GAAG,OAAO,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU;YACvD,CAAC,CAAC,OAAO,UAAU,KAAK,QAAQ,IAAI,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC;gBACjF,CAAC,CAAC,GAAG,CAAC;QACV,MAAM,SAAS,GAAiB;YAC5B,KAAK,EAAE,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,CAAC,IAAI,EAAE;YACjF,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,CAAC,IAAI,EAAE;YACnG,gBAAgB,EAAE,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,0BAA0B;SACpG,CAAC;QACF,MAAM,MAAM,GAAG,YAAY,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QACjD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,iCAAiC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC3G,CAAC;QACD,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,wGAAwG;IAChG,aAAa,CAAC,OAAe;QACjC,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACzC,OAAO,IAAI,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,oBAAoB,EAAE,CAAC;IACzF,CAAC;IAEO,qBAAqB,CAAC,kBAA8C;QACxE,IAAI,CAAC,kBAAkB,CAAC,aAAa;YAAE,OAAO,EAAE,CAAC;QACjD,IAAI,CAAC;YACD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,aAAa,CAAY,CAAC;YACvE,OAAO,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAiC,CAAC,CAAC,CAAC,EAAE,CAAC;QACnH,CAAC;QAAC,MAAM,CAAC;YACL,OAAO,EAAE,CAAC;QACd,CAAC;IACL,CAAC;IAED,sEAAsE;IAE9D,YAAY,CAAC,GAA8B;QAC/C,IAAI,CAAC,GAAG,CAAC,aAAa;YAAE,OAAO,EAAE,CAAC;QAClC,IAAI,CAAC;YACD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,CAAY,CAAC;YACxD,OAAO,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAiC,CAAC,CAAC,CAAC,EAAE,CAAC;QACnH,CAAC;QAAC,MAAM,CAAC;YACL,OAAO,EAAE,CAAC;QACd,CAAC;IACL,CAAC;IAEO,kBAAkB,CAAC,GAA4B;QACnD,OAAO,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,gBAAgB,CAAC,IAAI,EAAE,CAAC;IAC9D,CAAC;IAEO,gBAAgB,CAAC,GAA4B,EAAE,GAAW;QAC9D,MAAM,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;QACnB,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IAC1E,CAAC;IAEO,qBAAqB,CAAC,GAA4B,EAAE,GAAW;QACnE,MAAM,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;QACnB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;QACnC,MAAM,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAChF,OAAO,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;IACvC,CAAC;IAEO,gBAAgB,CAAC,GAA4B,EAAE,GAAW;QAC9D,MAAM,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;QACnB,OAAO,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAA4B,CAAC,CAAC,CAAC,IAAI,CAAC;IACjG,CAAC;IAED,4GAA4G;IACpG,qBAAqB,CAAC,GAA4B,EAAE,GAAW;QACnE,MAAM,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;QACnB,MAAM,CAAC,GAAG,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;QAClG,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC9D,CAAC;IAED,wHAAwH;IAChH,wBAAwB,CAAC,GAA4B,EAAE,GAAW;QACtE,MAAM,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;QACnB,MAAM,CAAC,GAAG,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;QAClG,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC/D,CAAC;IAED,sEAAsE;IAE9D,SAAS,CAAC,IAAY;QAC1B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC,CAAC,sEAAsE;QAC7G,IAAI,CAAC;YACD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC/B,CAAC;QAAC,MAAM,CAAC;YACL,OAAO,OAAO,CAAC,CAAC,gDAAgD;QACpE,CAAC;IACL,CAAC;IAEO,eAAe,CAAC,OAAgB;QACpC,MAAM,GAAG,GAA2B,EAAE,CAAC;QACvC,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACrE,OAAO,GAAG,CAAC;IACf,CAAC;IAED,8GAA8G;IACtG,WAAW,CAAC,IAAa;QAC7B,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YACtB,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;YACtF,OAAQ,KAAiC,IAAI,IAAI,CAAC;QACtD,CAAC;QACD,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YACnC,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,IAA+B,CAAC,CAAC;YAClE,IAAI,GAAG,EAAE,CAAC;gBACN,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;gBACrF,IAAI,KAAK;oBAAE,OAAO,KAAgC,CAAC;YACvD,CAAC;YACD,OAAO,IAA+B,CAAC;QAC3C,CAAC;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAEO,eAAe,CAAC,IAA6B;QACjD,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YACtC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;gBAAE,OAAO,KAAK,CAAC;YACvC,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBACrC,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,KAAgC,CAAC,CAAC;gBACtE,IAAI,MAAM;oBAAE,OAAO,MAAM,CAAC;YAC9B,CAAC;QACL,CAAC;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAEO,WAAW,CAAC,OAAgB;QAChC,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;YAAE,OAAO,OAAO,CAAC,MAAM,CAAC;QAClD,IAAI,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YACzC,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,OAAkC,CAAC,CAAC;YACrE,IAAI,GAAG;gBAAE,OAAO,GAAG,CAAC,MAAM,CAAC;YAC3B,OAAO,MAAM,CAAC,IAAI,CAAC,OAAkC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9E,CAAC;QACD,OAAO,CAAC,CAAC;IACb,CAAC;IAEO,WAAW,CAAC,IAAa,EAAE,GAAW;QAC1C,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;YAAE,OAAO,SAAS,CAAC;QACxD,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YACtB,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE,CAAC;gBACtB,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;gBAC1C,IAAI,KAAK,KAAK,SAAS;oBAAE,OAAO,KAAK,CAAC;YAC1C,CAAC;YACD,OAAO,SAAS,CAAC;QACrB,CAAC;QACD,MAAM,GAAG,GAAG,IAA+B,CAAC;QAC5C,IAAI,GAAG,IAAI,GAAG;YAAE,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;QAChC,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;YACrC,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YAC3C,IAAI,KAAK,KAAK,SAAS;gBAAE,OAAO,KAAK,CAAC;QAC1C,CAAC;QACD,OAAO,SAAS,CAAC;IACrB,CAAC;IAEO,QAAQ,CAAC,CAAU;QACvB,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;YAAE,OAAO,CAAC,CAAC;QAC1D,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;YAAE,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;QACjE,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ,CAAA;AAxjDY,eAAe;IAD3B,aAAa,CAAC,wBAAwB,EAAE,iBAAiB,CAAC;GAC9C,eAAe,CAwjD3B;;AAED,8EAA8E;AAC9E,MAAM,UAAU,mBAAmB,KAAuB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@memberjunction/connector-totara",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "MemberJunction Totara connector.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -21,10 +21,11 @@
|
|
|
21
21
|
"@memberjunction/integration-engine": ">=5.43.0 <6.0.0"
|
|
22
22
|
},
|
|
23
23
|
"dependencies": {
|
|
24
|
+
"@memberjunction/connector-id-window-scan": "^1.1.0",
|
|
25
|
+
"@memberjunction/connector-schema-merge": "^1.0.1",
|
|
24
26
|
"zod": "~3.24.4"
|
|
25
27
|
},
|
|
26
28
|
"devDependencies": {
|
|
27
|
-
"@memberjunction/connector-schema-merge": "^1.0.1",
|
|
28
29
|
"@memberjunction/core": "^5.43.0",
|
|
29
30
|
"@memberjunction/core-entities": "^5.43.0",
|
|
30
31
|
"@memberjunction/global": "^5.43.0",
|