footprintjs 9.15.0 → 9.16.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/AGENTS.md +11 -0
- package/CLAUDE.md +1 -1
- package/dist/esm/index.d.ts +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/lib/decide/decide.d.ts +7 -3
- package/dist/esm/lib/decide/decide.js +29 -6
- package/dist/esm/lib/decide/index.d.ts +1 -1
- package/dist/esm/lib/decide/index.js +1 -1
- package/dist/esm/lib/decide/types.d.ts +38 -0
- package/dist/esm/lib/decide/types.js +1 -1
- package/dist/esm/lib/engine/narrative/CombinedNarrativeRecorder.js +7 -2
- package/dist/index.js +1 -1
- package/dist/lib/decide/decide.js +29 -6
- package/dist/lib/decide/index.js +1 -1
- package/dist/lib/decide/types.js +1 -1
- package/dist/lib/engine/narrative/CombinedNarrativeRecorder.js +7 -2
- package/dist/types/index.d.ts +1 -1
- package/dist/types/lib/decide/decide.d.ts +7 -3
- package/dist/types/lib/decide/index.d.ts +1 -1
- package/dist/types/lib/decide/types.d.ts +38 -0
- package/package.json +3 -2
package/AGENTS.md
CHANGED
|
@@ -85,6 +85,17 @@ import { decide, select } from 'footprintjs';
|
|
|
85
85
|
// Narrative: "It evaluated Rule 0 'Good credit': creditScore 750 gt 700, and chose approved."
|
|
86
86
|
```
|
|
87
87
|
|
|
88
|
+
**Naming the default branch.** The default is chosen by no rule, so no
|
|
89
|
+
`rules[].label` can describe it — it is the one branch evidence cannot
|
|
90
|
+
otherwise name. Declare it beside the rules by passing an object instead of a
|
|
91
|
+
string; the label lands on `DecisionEvidence.defaultLabel` and is recorded on
|
|
92
|
+
every decision, not just the runs that fell through.
|
|
93
|
+
|
|
94
|
+
```typescript
|
|
95
|
+
decide(scope, rules, { branch: 'rejected', label: 'No rule fired — application rejected' });
|
|
96
|
+
// bare string still works, byte-identical: decide(scope, rules, 'rejected')
|
|
97
|
+
```
|
|
98
|
+
|
|
88
99
|
### Builder
|
|
89
100
|
|
|
90
101
|
```typescript
|
package/CLAUDE.md
CHANGED
|
@@ -37,7 +37,7 @@ Entry points: `footprintjs` (public API) · `/recorders` (factories) · `/trace`
|
|
|
37
37
|
|
|
38
38
|
## Extension points
|
|
39
39
|
- **New stage kind**: boolean flag on `StageNode` (engine/graph/StageNode.ts:39 — kinds are flags, not an enum) + builder method on FlowChartBuilder (pattern: addPausableFunction :1264; fire structure events endpoint-before-edge) + phase in the hard-coded chain `executeNodeStep` (FlowchartTraverser.ts:801 — no handler registry; new handler class takes HandlerDeps, engine/types.ts:344, instantiated in traverser ctor :402-413). Must also edit 5 type-union sites: engine/types.ts:477, builder/types.ts:50, builder/types.ts:104, engine/types.ts:427, and computeNodeType's flag→type mapping (RuntimeStructureManager.ts:19-21 — the only one the compiler won't flag; miss it and the new kind silently serializes as 'stage'). Zero-engine alternative: pure sugar over addFunction (pattern: addDetachAndForget :1343). WORKED EXAMPLE (9.14.0 addParallelForEach): flag `isDynamicParallel` + ParallelForEachHandler + Phase 0b (BEFORE Phase 1 VALIDATE — the node has no fn/children/decider by design); it added NO new node type — the spec carries a BOOLEAN and computeNodeType returns 'fork' (precedent: isPausable/isLazy/isStreaming are flags on a 'stage'), which is the cheaper choice whenever the new kind is a variant of an existing shape.
|
|
40
|
-
- **Decider/selector**: addDeciderFunction :1433 → DeciderList (:53); addSelectorFunction :1478 → SelectorFnList (:428); runtime match on `child.branchId ?? child.id` (DeciderHandler.ts:133). Evidence via decide()/select() (decide/decide.ts:169/218).
|
|
40
|
+
- **Decider/selector**: addDeciderFunction :1433 → DeciderList (:53); addSelectorFunction :1478 → SelectorFnList (:428); runtime match on `child.branchId ?? child.id` (DeciderHandler.ts:133). Evidence via decide()/select() (decide/decide.ts:169/218). `decide()`'s 3rd param is `DefaultBranch = string | { branch, label? }` (9.16.0) — the default is chosen by NO rule, so `rules[].label` can never name it; the object form puts that label on `DecisionEvidence.defaultLabel`, spread into BOTH evidence exits (matched AND fallthrough) so a harvest doesn't gain/lose the meaning with the data. Bare string ⇒ key absent, byte-identical to pre-9.16. `select()` has no default and is deliberately untouched.
|
|
41
41
|
- **Recorder**: channels = ScopeRecorder (scope/types.ts:137), FlowRecorder (engine/narrative/types.ts:425), EmitRecorder (recorder/EmitRecorder.ts:121 — attachEmitRecorder just delegates to the scope channel), CombinedRecorder (recorder/CombinedRecorder.ts:98, routed by method-shape), StructureRecorder (builder/structure/StructureRecorder.ts:347, build-time). Attach via executor.attach*Recorder — idempotent by id. **Sync rule: a new hook name MUST also go into `RECORDER_EVENT_METHODS`/`FLOW_…`/`EMIT_…` (CombinedRecorder.ts:198/219/247)** — they drive both combined routing AND the deferred tier's taps; miss it and deferred recorders silently never see the event. Detection accepts class-prototype methods (blocks only Object.prototype — CombinedRecorder.ts:266). New built-in = compose a store as a field (no base classes) + factory in src/recorders.ts. `toSnapshot()` bundles are REBUILT field by field into `RecorderSnapshot` (FlowChartExecutor.ts:1698 — so a recorder can't spoof its own `id`); anything not on that copy list is dropped silently — the free-form slot is `meta` (facts about the bundle: which projection, what it omits — what a consumer BRANCHES on; prose goes in `description`). A new bundle field means editing the copy list AND the three `toSnapshot?()` signature sites (scope/types.ts:159, engine/narrative/types.ts:462, recorder/CombinedRecorder.ts:121).
|
|
42
42
|
- **Scope $-method (4-file checklist)**: ScopeFacade capability + ReactiveTarget (reactive/types.ts:20); ScopeMethods type (:74); METHOD_ROUTES (createTypedScope.ts:46); SCOPE_METHOD_NAMES (reactive/types.ts:262) — miss #4 and the name becomes a state key.
|
|
43
43
|
- **Contract**: builder.contract() (:1056) → makeRunnable toOpenAPI/toMCPTool (runner/RunnableChart.ts:83/153). BYO schema is duck-typed (schema/detect.ts:24).
|
package/dist/esm/index.d.ts
CHANGED
|
@@ -34,7 +34,7 @@ export type { ScopeMethods, TypedScope } from './lib/reactive/index.js';
|
|
|
34
34
|
/** @category Quick Start */
|
|
35
35
|
export { narrative } from './recorders.js';
|
|
36
36
|
/** @category Decision Branching */
|
|
37
|
-
export type { DecideRule, DecisionEvidence, DecisionResult, FilterOps, RuleEvidence, SelectionEvidence, SelectionResult, WhenClause, WhereFilter, } from './lib/decide/index.js';
|
|
37
|
+
export type { DecideRule, DecisionEvidence, DecisionResult, DefaultBranch, FilterOps, RuleEvidence, SelectionEvidence, SelectionResult, WhenClause, WhereFilter, } from './lib/decide/index.js';
|
|
38
38
|
/** @category Decision Branching */
|
|
39
39
|
export { decide, select } from './lib/decide/index.js';
|
|
40
40
|
/** @category Run */
|
package/dist/esm/index.js
CHANGED
|
@@ -83,4 +83,4 @@ export { disableDevMode, enableDevMode, isDevMode } from './lib/scope/detectCirc
|
|
|
83
83
|
// `defineScopeFromZod` and the other zod-based scope helpers moved to the opt-in
|
|
84
84
|
// `footprintjs/zod` entry — keeping zod out of the core load path (it is an
|
|
85
85
|
// optional peer). Import them from 'footprintjs/zod'.
|
|
86
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFTSCw0QkFBNEI7QUFDNUIsT0FBTyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBNEJ4Riw0QkFBNEI7QUFDNUIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBbUIzQyxtQ0FBbUM7QUFDbkMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQVl2RCxvQkFBb0I7QUFDcEIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFMUQsb0JBQW9CO0FBQ3BCLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQXFCbkQsK0JBQStCO0FBQy9CLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUV0RCwrQkFBK0I7QUFDL0IsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRXJELG9DQUFvQztBQUNwQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQW1DNUQscUVBQXFFO0FBQ3JFLE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsc0JBQXNCLEVBQ3RCLGtCQUFrQixFQUNsQixXQUFXLEdBQ1osTUFBTSx5QkFBeUIsQ0FBQztBQWlEakMsK0JBQStCO0FBQy9CLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBSzlELCtCQUErQjtBQUMvQixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUU3RCwrQkFBK0I7QUFDL0IsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFdEUsK0JBQStCO0FBQy9CLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRXZFLCtCQUErQjtBQUMvQixPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUV6RSwrQkFBK0I7QUFDL0IsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFakUsK0JBQStCO0FBQy9CLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRXRFLCtCQUErQjtBQUMvQixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUVwRSwrQkFBK0I7QUFDL0IsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUF5QnRFLHVDQUF1QztBQUN2QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUU3RSwrRUFBK0U7QUFDL0UsNEVBQTRFO0FBQzVFLCtFQUErRTtBQUUvRSw4QkFBOEI7QUFDOUIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFvQjVELDZCQUE2QjtBQUM3QixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFpRWpELHNDQUFzQztBQUN0QyxPQUFPLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUUzRSxzQ0FBc0M7QUFDdEMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLHFCQUFxQixFQUFFLGVBQWUsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBU3JHLGdDQUFnQztBQUNoQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFMUUsK0VBQStFO0FBQy9FLGlEQUFpRDtBQUNqRCwrRUFBK0U7QUFFL0U7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxPQUFPLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUV6RixpRkFBaUY7QUFDakYsNEVBQTRFO0FBQzVFLHNEQUFzRCIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRm9vdFByaW50IOKAlCBQdWJsaWMgQVBJICh2MylcbiAqXG4gKiBUaGUgZmxvd2NoYXJ0IHBhdHRlcm4gZm9yIGJhY2tlbmQgY29kZS5cbiAqIEJ1aWxkIOKGkiBSdW4g4oaSIE9ic2VydmUuXG4gKlxuICogKipUaHJlZSBpbXBvcnQgcGF0aHM6KipcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBmbG93Q2hhcnQsIGRlY2lkZSwgbmFycmF0aXZlIH0gZnJvbSAnZm9vdHByaW50anMnOyAgICAgICAgICAgLy8gbWFpbiDigJQgc3RhcnQgaGVyZVxuICogaW1wb3J0IHsgbWV0cmljcywgZGVidWcsIG1hbmlmZXN0IH0gICAgIGZyb20gJ2Zvb3RwcmludGpzL3JlY29yZGVycyc7IC8vIHJlY29yZGVyIGZhY3Rvcmllc1xuICogaW1wb3J0IHsgU2hhcmVkTWVtb3J5LCBTdGFnZUNvbnRleHQgfSAgIGZyb20gJ2Zvb3RwcmludGpzL2FkdmFuY2VkJzsgIC8vIGludGVybmFsc1xuICogYGBgXG4gKlxuICogQG1vZHVsZVxuICovXG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFF1aWNrIFN0YXJ0IOKAlCBFdmVyeXRoaW5nIHlvdSBuZWVkIGZvciA5MCUgb2YgdXNlIGNhc2VzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKiBAY2F0ZWdvcnkgUXVpY2sgU3RhcnQgKi9cbmV4cG9ydCB0eXBlIHsgRmxvd0NoYXJ0LCBTdGFnZUZ1bmN0aW9uIGFzIFN0YWdlSGFuZGxlciwgU3RyZWFtSGFuZGxlcnMgfSBmcm9tICcuL2xpYi9idWlsZGVyL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBRdWljayBTdGFydCAqL1xuZXhwb3J0IHsgZmxvd0NoYXJ0LCBGbG93Q2hhcnRCdWlsZGVyLCBmbG93Q2hhcnRTZWxlY3RvciB9IGZyb20gJy4vbGliL2J1aWxkZXIvaW5kZXguanMnO1xuXG4vKipcbiAqIEBjYXRlZ29yeSBRdWljayBTdGFydFxuICpcbiAqIENvbmZpZyBmb3IgYC5hZGRQYXJhbGxlbEZvckVhY2goKWAg4oCUIG9uZSBicmFuY2ggcGVyIGl0ZW0sIGJyYW5jaCBjb3VudFxuICogZGVjaWRlZCBhdCBydW4gdGltZSBmcm9tIHRoZSBwYXlsb2FkLiBgbWF4QnJhbmNoZXNgIGFuZCBgaW50b2AgYXJlIHJlcXVpcmVkXG4gKiBvbiBwdXJwb3NlIChzZWUgZG9jcy9kZXNpZ24vZXhlY3V0aW9uLWNvbnRyb2wubWQpLlxuICovXG5leHBvcnQgdHlwZSB7IEJyYW5jaENoYXJ0LCBQYXJhbGxlbEZvckVhY2hDb25maWcsIFJldHJ5UG9saWN5IH0gZnJvbSAnLi9saWIvYnVpbGRlci9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgUXVpY2sgU3RhcnQg4oCUIGJ1aWxkLXRpbWUgb2JzZXJ2ZXIgKHR3aW4gb2YgRmxvd1JlY29yZGVyKSAqL1xuZXhwb3J0IHR5cGUge1xuICBTdHJ1Y3R1cmVEZWNpZGVyQ29tcGxldGVFdmVudCxcbiAgU3RydWN0dXJlRWRnZUFkZGVkRXZlbnQsXG4gIFN0cnVjdHVyZUVkZ2VLaW5kLFxuICBTdHJ1Y3R1cmVMb29wRWRnZUFkZGVkRXZlbnQsXG4gIFN0cnVjdHVyZVJlY29yZGVyLFxuICBTdHJ1Y3R1cmVTdGFnZUFkZGVkRXZlbnQsXG4gIFN0cnVjdHVyZVN1YmZsb3dNb3VudGVkRXZlbnQsXG59IGZyb20gJy4vbGliL2J1aWxkZXIvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IFF1aWNrIFN0YXJ0ICovXG5leHBvcnQgdHlwZSB7IFR5cGVkU3RhZ2VGdW5jdGlvbiB9IGZyb20gJy4vbGliL2J1aWxkZXIvdHlwZWRGbG93Q2hhcnQuanMnO1xuXG4vKiogQGNhdGVnb3J5IFF1aWNrIFN0YXJ0ICovXG5leHBvcnQgdHlwZSB7IFNjb3BlTWV0aG9kcywgVHlwZWRTY29wZSB9IGZyb20gJy4vbGliL3JlYWN0aXZlL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBRdWljayBTdGFydCAqL1xuZXhwb3J0IHsgbmFycmF0aXZlIH0gZnJvbSAnLi9yZWNvcmRlcnMuanMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBEZWNpc2lvbiBCcmFuY2hpbmcg4oCUIGRlY2lkZSgpIC8gc2VsZWN0KCkgd2l0aCBldmlkZW5jZSBjYXB0dXJlXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKiBAY2F0ZWdvcnkgRGVjaXNpb24gQnJhbmNoaW5nICovXG5leHBvcnQgdHlwZSB7XG4gIERlY2lkZVJ1bGUsXG4gIERlY2lzaW9uRXZpZGVuY2UsXG4gIERlY2lzaW9uUmVzdWx0LFxuICBGaWx0ZXJPcHMsXG4gIFJ1bGVFdmlkZW5jZSxcbiAgU2VsZWN0aW9uRXZpZGVuY2UsXG4gIFNlbGVjdGlvblJlc3VsdCxcbiAgV2hlbkNsYXVzZSxcbiAgV2hlcmVGaWx0ZXIsXG59IGZyb20gJy4vbGliL2RlY2lkZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgRGVjaXNpb24gQnJhbmNoaW5nICovXG5leHBvcnQgeyBkZWNpZGUsIHNlbGVjdCB9IGZyb20gJy4vbGliL2RlY2lkZS9pbmRleC5qcyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFJ1biDigJQgRXhlY3V0ZSBjaGFydHMgYW5kIGNvbGxlY3QgcmVzdWx0c1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKiogQGNhdGVnb3J5IFJ1biAqL1xuZXhwb3J0IHR5cGUgeyBSdW5SZXN1bHQgfSBmcm9tICcuL2xpYi9ydW5uZXIvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IFJ1biAqL1xuZXhwb3J0IHR5cGUgeyBGbG93Q2hhcnRFeGVjdXRvck9wdGlvbnMgfSBmcm9tICcuL2xpYi9ydW5uZXIvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IFJ1biAqL1xuZXhwb3J0IHsgRmxvd0NoYXJ0RXhlY3V0b3IgfSBmcm9tICcuL2xpYi9ydW5uZXIvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IFJ1biAqL1xuZXhwb3J0IHsgUnVuQ29udGV4dCB9IGZyb20gJy4vbGliL3J1bm5lci9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgUnVuICovXG5leHBvcnQgdHlwZSB7IENoYXJ0T3BlbkFQSU9wdGlvbnMsIE1DUFRvb2xEZXNjcmlwdGlvbiwgUnVubmFibGVGbG93Q2hhcnQgfSBmcm9tICcuL2xpYi9ydW5uZXIvUnVubmFibGVDaGFydC5qcyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIE9ic2VydmUg4oCUIERhdGEgKHNjb3BlIHJlY29yZGVycywgZmlyZSBkdXJpbmcgc3RhZ2UgZXhlY3V0aW9uKVxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKiogQGNhdGVnb3J5IE9ic2VydmUg4oCUIERhdGEgKi9cbmV4cG9ydCB0eXBlIHtcbiAgQ29tbWl0RXZlbnQsXG4gIEVycm9yRXZlbnQsXG4gIFJlYWRFdmVudCxcbiAgUmVkYWN0aW9uUG9saWN5LFxuICBSZWRhY3Rpb25SZXBvcnQsXG4gIFNjb3BlUmVjb3JkZXIsXG4gIFN0YWdlRXZlbnQsXG4gIFdyaXRlRXZlbnQsXG59IGZyb20gJy4vbGliL3Njb3BlL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBEYXRhICovXG5leHBvcnQgeyBNZXRyaWNSZWNvcmRlciB9IGZyb20gJy4vbGliL3Njb3BlL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBEYXRhICovXG5leHBvcnQgeyBEZWJ1Z1JlY29yZGVyIH0gZnJvbSAnLi9saWIvc2NvcGUvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IE9ic2VydmUg4oCUIE9wZXJhdGlvbiAqL1xuZXhwb3J0IHsgUmVjb3JkZXJPcGVyYXRpb24gfSBmcm9tICcuL2xpYi9yZWNvcmRlci9pbmRleC5qcyc7XG5cbi8qKlxuICogQGNhdGVnb3J5IE9ic2VydmUg4oCUIERlbGl2ZXJ5IHRpZXIgKFJGQy0wMDEgZGVmZXJyZWQgb2JzZXJ2ZXJzKVxuICpcbiAqIEV2ZXJ5IGBhdHRhY2gqUmVjb3JkZXJgIGNhbGwgYWNjZXB0cyBhbiBvcHRpb25zIGJhZzpcbiAqIGBleGVjdXRvci5hdHRhY2hTY29wZVJlY29yZGVyKHJlYywgeyBkZWxpdmVyeTogJ2RlZmVycmVkJyB9KWAgdGFrZXMgdGhlXG4gKiByZWNvcmRlciBPVVQgb2YgdGhlIGVuZ2luZSdzIGhvdCBwYXRoIOKAlCBldmVudHMgYXJlIGNhcHR1cmVkIGludG8gb25lXG4gKiBib3VuZGVkLCB0b3RhbGx5LW9yZGVyZWQgcXVldWUgYW5kIGRlbGl2ZXJlZCBhdCB0aGUgbmV4dCBtaWNyb3Rhc2tcbiAqIGNoZWNrcG9pbnQgKFwib25lIGJlYXQgYmVoaW5kXCIpLiBPbWl0IGBkZWxpdmVyeWAgZm9yIHRoZSBoaXN0b3JpY2FsXG4gKiBzeW5jaHJvbm91cyBjYWxsIChieXRlLWlkZW50aWNhbCB0byBwcmV2aW91cyByZWxlYXNlcykuIEFjY291bnRpbmdcbiAqIHN1cmZhY2VzIG9uIGBzbmFwc2hvdC5vYnNlcnZlclN0YXRzYDsgYGV4ZWN1dG9yLmRyYWluT2JzZXJ2ZXJzKClgIHNldHRsZXNcbiAqIGFzeW5jIGxpc3RlbmVycyBiZWZvcmUgc2h1dGRvd24uIFNlZSBgZG9jcy9ndWlkZXMvb2JzZXJ2ZXJzLWRlZmVycmVkLm1kYC5cbiAqL1xuZXhwb3J0IHR5cGUge1xuICBBdHRhY2hSZWNvcmRlck9wdGlvbnMsXG4gIE9ic2VydmVyRGVsaXZlcnksXG4gIE9ic2VydmVyRHJhaW5SZXN1bHQsXG4gIE9ic2VydmVyU3RhdHMsXG59IGZyb20gJy4vbGliL3J1bm5lci9pbmRleC5qcyc7XG5cbi8qKlxuICogQGNhdGVnb3J5IE9ic2VydmUg4oCUIERlbGl2ZXJ5IHRpZXIgKFJGQy0wMDEgZGVmZXJyZWQgb2JzZXJ2ZXJzKVxuICpcbiAqIGBDYXB0dXJlUG9saWN5YCDigJQgaG93IGEgZGVmZXJyZWQgZXZlbnQncyBwYXlsb2FkIGlzIG1hdGVyaWFsaXplZCBhdFxuICogY2FwdHVyZSB0aW1lIChgJ3N1bW1hcnknYCBkZWZhdWx0IC8gYCdjbG9uZSdgIC8gYCdyZWYnYCkuIGBPdmVyZmxvd1BvbGljeWBcbiAqIOKAlCB3aGF0IGEgc2F0dXJhdGVkIHF1ZXVlIGRvZXMgKGAnZHJvcC1vbGRlc3QnYCBkZWZhdWx0IC8gYCdzYW1wbGUnYCAvXG4gKiBgJ2Jsb2NrJ2ApLiBgRGlzcGF0Y2hlclN0YXRzYCAvIGBMaXN0ZW5lclN0YXRzYCDigJQgdGhlIGFjY291bnRpbmcgc2hhcGVzXG4gKiBlbWJlZGRlZCBpbiBgT2JzZXJ2ZXJTdGF0c2AuIFR5cGVzIG9ubHkg4oCUIHRoZSBvYnNlcnZlci1xdWV1ZSBtb2R1bGVcbiAqIGl0c2VsZiBpcyBpbnRlcm5hbDsgY29uc3VtZXJzIHVzZSB0aGUgYXR0YWNoIG9wdGlvbnMuXG4gKi9cbmV4cG9ydCB0eXBlIHsgQ2FwdHVyZVBvbGljeSwgRGlzcGF0Y2hlclN0YXRzLCBMaXN0ZW5lclN0YXRzLCBPdmVyZmxvd1BvbGljeSB9IGZyb20gJy4vbGliL29ic2VydmVyLXF1ZXVlL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBDb21iaW5lZCAoYm90aCBkYXRhLWZsb3cgYW5kIGNvbnRyb2wtZmxvdykgKi9cbmV4cG9ydCB0eXBlIHsgQ29tYmluZWRSZWNvcmRlciB9IGZyb20gJy4vbGliL3JlY29yZGVyL2luZGV4LmpzJztcbi8qKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgQ29tYmluZWQgKGJvdGggZGF0YS1mbG93IGFuZCBjb250cm9sLWZsb3cpICovXG5leHBvcnQge1xuICBoYXNFbWl0UmVjb3JkZXJNZXRob2RzLFxuICBoYXNGbG93UmVjb3JkZXJNZXRob2RzLFxuICBoYXNSZWNvcmRlck1ldGhvZHMsXG4gIGlzRmxvd0V2ZW50LFxufSBmcm9tICcuL2xpYi9yZWNvcmRlci9pbmRleC5qcyc7XG5cbi8qKlxuICogQGNhdGVnb3J5IE9ic2VydmUg4oCUIEVtaXQgKHVzZXItYXV0aG9yZWQgc3RydWN0dXJlZCBldmVudHMpXG4gKlxuICogVGhpcmQgb2JzZXJ2ZXIgY2hhbm5lbCAoYWxvbmdzaWRlIGBTY29wZVJlY29yZGVyYCBhbmQgYEZsb3dSZWNvcmRlcmApLiBDb25zdW1lclxuICogY29kZSBjYWxscyBgc2NvcGUuJGVtaXQobmFtZSwgcGF5bG9hZClgIGZyb20gaW5zaWRlIGEgc3RhZ2U7IGV2ZXJ5IGF0dGFjaGVkXG4gKiBgRW1pdFJlY29yZGVyLm9uRW1pdChldmVudClgIGZpcmVzIHN5bmNocm9ub3VzbHkgd2l0aCBzdGFnZS1jb250ZXh0XG4gKiBlbnJpY2htZW50LiBQYXNzLXRocm91Z2gg4oCUIG5vIGJ1ZmZlcmluZywgemVybyBhbGxvY2F0aW9uIHdoZW4gbm8gcmVjb3JkZXJcbiAqIGlzIGF0dGFjaGVkLlxuICovXG5leHBvcnQgdHlwZSB7IEVtaXRFdmVudCwgRW1pdFJlY29yZGVyIH0gZnJvbSAnLi9saWIvcmVjb3JkZXIvaW5kZXguanMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBPYnNlcnZlIOKAlCBGbG93IChGbG93UmVjb3JkZXIsIGZpcmVzIGFmdGVyIHN0YWdlIGV4ZWN1dGlvbilcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBGbG93ICovXG5leHBvcnQgdHlwZSB7XG4gIEZsb3dCcmVha0V2ZW50LFxuICBGbG93RGVjaXNpb25FdmVudCxcbiAgRmxvd0Vycm9yRXZlbnQsXG4gIEZsb3dGb3JrRXZlbnQsXG4gIEZsb3dMb29wRXZlbnQsXG4gIEZsb3dOZXh0RXZlbnQsXG4gIEZsb3dSZWNvcmRlcixcbiAgRmxvd1J1bkV2ZW50LFxuICBGbG93UnVuRmFpbGVkRXZlbnQsXG4gIEZsb3dTZWxlY3RlZEV2ZW50LFxuICBGbG93U3RhZ2VFdmVudCxcbiAgRmxvd1N0YWdlUmV0cnlFdmVudCxcbiAgRmxvd1N1YmZsb3dFdmVudCxcbiAgRmxvd1N1YmZsb3dSZWdpc3RlcmVkRXZlbnQsXG4gIFRyYXZlcnNhbENvbnRleHQsXG59IGZyb20gJy4vbGliL2VuZ2luZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgRmxvdyAqL1xuZXhwb3J0IHR5cGUgeyBDb21iaW5lZE5hcnJhdGl2ZUVudHJ5IH0gZnJvbSAnLi9saWIvZW5naW5lL2luZGV4LmpzJztcblxuLyoqXG4gKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgRmxvd1xuICpcbiAqIGBOYXJyYXRpdmVGb3JtYXR0ZXJgIOKAlCBwbHVnZ2FibGUgZm9ybWF0dGVyIHRoYXQgY29udmVydHMgZXZlbnQgY29udGV4dFxuICogb2JqZWN0cyBpbnRvIHRoZSB0ZXh0IGxpbmVzIG9mIHRoZSBuYXJyYXRpdmUuIFByZWZlciB0aGlzIG5hbWUgaW4gbmV3XG4gKiBjb2RlOyBgTmFycmF0aXZlUmVuZGVyZXJgIGlzIGEgZGVwcmVjYXRlZCBhbGlhcyB0aGF0IHdpbGwgYmUgcmVtb3ZlZCBpblxuICogdGhlIG5leHQgbWFqb3IgcmVsZWFzZS5cbiAqL1xuZXhwb3J0IHR5cGUgeyBOYXJyYXRpdmVGb3JtYXR0ZXIsIE5hcnJhdGl2ZVJlbmRlcmVyIH0gZnJvbSAnLi9saWIvZW5naW5lL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBGbG93ICovXG5leHBvcnQgeyBOYXJyYXRpdmVGbG93UmVjb3JkZXIgfSBmcm9tICcuL2xpYi9lbmdpbmUvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IE9ic2VydmUg4oCUIEZsb3cgKi9cbmV4cG9ydCB0eXBlIHsgTWFuaWZlc3RFbnRyeSB9IGZyb20gJy4vbGliL2VuZ2luZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgRmxvdyAqL1xuZXhwb3J0IHsgTWFuaWZlc3RGbG93UmVjb3JkZXIgfSBmcm9tICcuL2xpYi9lbmdpbmUvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IE9ic2VydmUg4oCUIEZsb3cgKi9cbmV4cG9ydCB7IEFkYXB0aXZlTmFycmF0aXZlRmxvd1JlY29yZGVyIH0gZnJvbSAnLi9saWIvZW5naW5lL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBGbG93ICovXG5leHBvcnQgeyBNaWxlc3RvbmVOYXJyYXRpdmVGbG93UmVjb3JkZXIgfSBmcm9tICcuL2xpYi9lbmdpbmUvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IE9ic2VydmUg4oCUIEZsb3cgKi9cbmV4cG9ydCB7IFByb2dyZXNzaXZlTmFycmF0aXZlRmxvd1JlY29yZGVyIH0gZnJvbSAnLi9saWIvZW5naW5lL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBGbG93ICovXG5leHBvcnQgeyBSTEVOYXJyYXRpdmVGbG93UmVjb3JkZXIgfSBmcm9tICcuL2xpYi9lbmdpbmUvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IE9ic2VydmUg4oCUIEZsb3cgKi9cbmV4cG9ydCB7IFNlcGFyYXRlTmFycmF0aXZlRmxvd1JlY29yZGVyIH0gZnJvbSAnLi9saWIvZW5naW5lL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBGbG93ICovXG5leHBvcnQgeyBTaWxlbnROYXJyYXRpdmVGbG93UmVjb3JkZXIgfSBmcm9tICcuL2xpYi9lbmdpbmUvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IE9ic2VydmUg4oCUIEZsb3cgKi9cbmV4cG9ydCB7IFdpbmRvd2VkTmFycmF0aXZlRmxvd1JlY29yZGVyIH0gZnJvbSAnLi9saWIvZW5naW5lL2luZGV4LmpzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gU2VsZi1EZXNjcmliaW5nIOKAlCAuY29udHJhY3QoKSwgdG9PcGVuQVBJKCksIHRvTUNQVG9vbCgpXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKiBAY2F0ZWdvcnkgU2VsZi1EZXNjcmliaW5nICovXG5leHBvcnQgdHlwZSB7XG4gIEZsb3dDaGFydENvbnRyYWN0LFxuICBGbG93Q2hhcnRDb250cmFjdE9wdGlvbnMsXG4gIEpzb25TY2hlbWEsXG4gIE9wZW5BUElPcHRpb25zLFxuICBPcGVuQVBJU3BlYyxcbn0gZnJvbSAnLi9saWIvY29udHJhY3QvaW5kZXguanMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBTbmFwc2hvdCAmIENvbXBvc2l0aW9uIOKAlCBTdWJmbG93IG5hdmlnYXRpb24gYW5kIENvbXBvc2FibGVSdW5uZXJcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqIEBjYXRlZ29yeSBTbmFwc2hvdCAmIENvbXBvc2l0aW9uICovXG5leHBvcnQgdHlwZSB7IENvbXBvc2FibGVSdW5uZXIgfSBmcm9tICcuL2xpYi9ydW5uZXIvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IFNuYXBzaG90ICYgQ29tcG9zaXRpb24gKi9cbmV4cG9ydCB0eXBlIHsgUmVjb3JkZXJTbmFwc2hvdCwgUnVudGltZVNuYXBzaG90LCBTdWJ0cmVlU25hcHNob3QgfSBmcm9tICcuL2xpYi9ydW5uZXIvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IFNuYXBzaG90ICYgQ29tcG9zaXRpb24gKi9cbmV4cG9ydCB7IGdldFN1YnRyZWVTbmFwc2hvdCwgbGlzdFN1YmZsb3dQYXRocyB9IGZyb20gJy4vbGliL3J1bm5lci9pbmRleC5qcyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFNjb3BlUmVjb3JkZXIgQ29tcG9zaXRpb24g4oCUIEJ1bmRsZSBtdWx0aXBsZSByZWNvcmRlcnMgaW50byBkb21haW4gcHJlc2V0c1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKiogQGNhdGVnb3J5IFNjb3BlUmVjb3JkZXIgKi9cbmV4cG9ydCB7IENvbXBvc2l0ZVJlY29yZGVyIH0gZnJvbSAnLi9saWIvcmVjb3JkZXIvaW5kZXguanMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBQYXVzZS9SZXN1bWUg4oCUIFNlcmlhbGl6YWJsZSBjaGVja3BvaW50cyBmb3IgbG9uZy1ydW5uaW5nIG9yIGh1bWFuLWluLXRoZS1sb29wIGZsb3dzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKiBAY2F0ZWdvcnkgUGF1c2UvUmVzdW1lICovXG4vKiogQGNhdGVnb3J5IFBhdXNlL1Jlc3VtZSAqL1xuZXhwb3J0IHR5cGUgeyBGbG93Y2hhcnRDaGVja3BvaW50LCBQYXVzYWJsZUhhbmRsZXIgfSBmcm9tICcuL2xpYi9wYXVzZS9pbmRleC5qcyc7XG5cbi8qKlxuICogQGNhdGVnb3J5IFBhdXNlL1Jlc3VtZVxuICpcbiAqIGBpbnRlcnJ1cHQoc2NvcGUsIHsgcmVhc29uLCBleHBlY3RzPyB9KWAg4oCUIHN0b3AgbWlkLXN0YWdlIHRvIGFzayBhIHF1ZXN0aW9uLFxuICogYW5kIGdldCB0aGUgYW5zd2VyIGJhY2sgYXQgdGhlIHNhbWUgY2FsbCBzaXRlIHdoZW4gdGhlIHJ1biByZXN1bWVzLiBSZXN1bWVcbiAqIHJlLWVudGVycyB0aGUgc3RhZ2UgZnJvbSBpdHMgVE9QIChzdGFnZXMgYXJlIGF0b21pYyksIHNvIGtlZXAgdGhlIGhhbGZcbiAqIGJlZm9yZSB0aGUgY2FsbCBpZGVtcG90ZW50LlxuICovXG5leHBvcnQgdHlwZSB7IEludGVycnVwdFBheWxvYWQgfSBmcm9tICcuL2xpYi9wYXVzZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgUGF1c2UvUmVzdW1lICovXG5leHBvcnQgeyBpbnRlcnJ1cHQgfSBmcm9tICcuL2xpYi9wYXVzZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgU2NvcGVSZWNvcmRlciAqL1xuZXhwb3J0IHR5cGUgeyBDb21wb3NpdGVTbmFwc2hvdCB9IGZyb20gJy4vbGliL3JlY29yZGVyL2luZGV4LmpzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gQ29uZmlndXJhdGlvbiDigJQgVHlwZXMgcGFzc2VkIHRvIEZsb3dDaGFydEV4ZWN1dG9yIGFuZCBydW4oKVxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKiogQGNhdGVnb3J5IENvbmZpZ3VyYXRpb24gKi9cbmV4cG9ydCB0eXBlIHsgRXhlY3V0aW9uRW52LCBFeGVjdXRvclJlc3VsdCwgUGF1c2VkUmVzdWx0LCBSdW5PcHRpb25zIH0gZnJvbSAnLi9saWIvZW5naW5lL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBDb25maWd1cmF0aW9uICovXG5leHBvcnQgdHlwZSB7IFNjb3BlRmFjdG9yeSB9IGZyb20gJy4vbGliL2VuZ2luZS9pbmRleC5qcyc7XG5cbi8qKlxuICogQGNhdGVnb3J5IENvbmZpZ3VyYXRpb25cbiAqXG4gKiBSZWFkLXRyYWNraW5nIHBvbGljeSBmb3IgYFN0YWdlU25hcHNob3Quc3RhZ2VSZWFkc2AgKCMxNCk6XG4gKiBgJ2Z1bGwnYCAoZGVmYXVsdCDigJQgcGVyLXJlYWQgdmFsdWUgY2xvbmUsIGhpc3RvcmljYWwgYmVoYXZpb3IpIC9cbiAqIGAnc3VtbWFyeSdgIChjaGVhcCBgUmVhZFN1bW1hcnlNYXJrZXJgIHBlciByZWFkKSAvIGAnb2ZmJ2AgKG5vIHRyYWNraW5nLFxuICogemVybyBwZXItcmVhZCBjbG9uZSkuIFBhc3MgYXMgYG5ldyBGbG93Q2hhcnRFeGVjdXRvcihjaGFydCwgeyByZWFkVHJhY2tpbmcgfSlgXG4gKiBvciBjYWxsIGBleGVjdXRvci5zZXRSZWFkVHJhY2tpbmcobW9kZSlgIGJlZm9yZSBgcnVuKClgLlxuICovXG5leHBvcnQgdHlwZSB7IFJlYWRTdW1tYXJ5TWFya2VyLCBSZWFkVHJhY2tpbmdNb2RlIH0gZnJvbSAnLi9saWIvbWVtb3J5L2luZGV4LmpzJztcblxuLyoqXG4gKiBAY2F0ZWdvcnkgQ29uZmlndXJhdGlvblxuICpcbiAqIFdyaXRlLXRyYWNraW5nIHBvbGljeSBmb3IgYFN0YWdlU25hcHNob3Quc3RhZ2VXcml0ZXNgICgjMTNjLUEpIOKAlCB0aGVcbiAqIHNpYmxpbmcgb2YgYFJlYWRUcmFja2luZ01vZGVgOyBib3RoIGFsaWFzIHRoZSBzaGFyZWQgYFJldGVudGlvblBvbGljeWBcbiAqIGZhbWlseSBmcm9tIGBsaWIvY2FwdHVyZWAuIGAnZnVsbCdgIChkZWZhdWx0IOKAlCBwZXItd3JpdGUgdmFsdWUgY2xvbmUsXG4gKiBoaXN0b3JpY2FsIGJlaGF2aW9yKSAvIGAnc3VtbWFyeSdgIChjaGVhcCBgV3JpdGVTdW1tYXJ5TWFya2VyYCBwZXIgd3JpdGUpXG4gKiAvIGAnb2ZmJ2AgKG5vIHRyYWNraW5nOyBgc3RhZ2VXcml0ZXNgIGFic2VudCBhbmQgdGhlIGBvbkNvbW1pdGAgbXV0YXRpb25zXG4gKiBwYXlsb2FkIGlzIGVtcHR5IOKAlCB3cml0ZXMgdGhlbXNlbHZlcyBzdGlsbCBjb21taXQsIGFuZCB0aGUgY29tbWl0IGxvZyBpc1xuICogdW5hZmZlY3RlZCkuIFBhc3MgYXMgYG5ldyBGbG93Q2hhcnRFeGVjdXRvcihjaGFydCwgeyB3cml0ZVRyYWNraW5nIH0pYCBvclxuICogY2FsbCBgZXhlY3V0b3Iuc2V0V3JpdGVUcmFja2luZyhtb2RlKWAgYmVmb3JlIGBydW4oKWAuXG4gKi9cbmV4cG9ydCB0eXBlIHsgUmV0ZW50aW9uUG9saWN5LCBXcml0ZVN1bW1hcnlNYXJrZXIsIFdyaXRlVHJhY2tpbmdNb2RlIH0gZnJvbSAnLi9saWIvbWVtb3J5L2luZGV4LmpzJztcblxuLyoqXG4gKiBAY2F0ZWdvcnkgQ29uZmlndXJhdGlvblxuICpcbiAqIENvbW1pdC12YWx1ZXMgZW5jb2RpbmcgZm9yIHRoZSBDT01NSVQgTE9HICgjMTNjLUIpIOKAlCB0aGUgdGhpcmQgZGlhbCBvZlxuICogdGhlIGZhbWlseSwgYW5kIHRoZSBvbmx5IExPU1NMRVNTIG9uZSAoaXQgY2hhbmdlcyB0aGUgbG9nJ3MgZW5jb2RpbmcsXG4gKiBuZXZlciBpdHMgaW5mb3JtYXRpb24pLiBgJ2Z1bGwnYCAoZGVmYXVsdCDigJQgZXZlcnkgc3Vydml2aW5nIGBzZXRgIHN0b3Jlc1xuICogdGhlIGZ1bGwgZmluYWwgdmFsdWUsIGJ5dGUtaWRlbnRpY2FsIHRvIGhpc3RvcnkpIC8gYCdkZWx0YSdgIChhcnJheVxuICogbmV0LWNoYW5nZXMgdGhhdCBhcmUgXCJiYXNlIHBsdXMgYSB0YWlsXCIgY29tbWl0IGFzIGFuIGBhcHBlbmRgIHZlcmJcbiAqIHN0b3Jpbmcgb25seSB0aGUgdGFpbDsgYGRlbGV0ZVZhbHVlKClgIGNvbW1pdHMgYXMgYSByZWFsIGBkZWxldGVgIHZlcmI7XG4gKiBvbmUgdHJhY2UgZW50cnkgcGVyIHN1cnZpdmluZyBwYXRoKS4gUmVwbGF5IHJlY29uc3RydWN0cyBldmVyeSBzdGVwJ3NcbiAqIGZ1bGwgc3RhdGUgZXhhY3RseS4gQ29uc3VtZXJzIHJlYWRpbmcgYGJ1bmRsZS5vdmVyd3JpdGVba2V5XWAgYXMgdGhlIGZ1bGxcbiAqIHZhbHVlIG11c3QgdXNlIGBjb21taXRWYWx1ZUF0YCBmcm9tIGBmb290cHJpbnRqcy90cmFjZWAuIFBhc3MgYXNcbiAqIGBuZXcgRmxvd0NoYXJ0RXhlY3V0b3IoY2hhcnQsIHsgY29tbWl0VmFsdWVzIH0pYCBvciBjYWxsXG4gKiBgZXhlY3V0b3Iuc2V0Q29tbWl0VmFsdWVzKG1vZGUpYCBiZWZvcmUgYHJ1bigpYDsgdGhlIGFjdGl2ZSBtb2RlIGlzIHRoZVxuICogc25hcHNob3QgZGlzY3JpbWluYW50IGBnZXRTbmFwc2hvdCgpLmNvbW1pdFZhbHVlc2AuXG4gKi9cbmV4cG9ydCB0eXBlIHsgQ29tbWl0VmFsdWVzTW9kZSB9IGZyb20gJy4vbGliL21lbW9yeS9pbmRleC5qcyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIENvbnRyYWN0ICYgVmFsaWRhdGlvblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKiogQGNhdGVnb3J5IENvbnRyYWN0ICYgVmFsaWRhdGlvbiAqL1xuZXhwb3J0IHR5cGUgeyBTY2hlbWFLaW5kLCBWYWxpZGF0aW9uSXNzdWUsIFZhbGlkYXRpb25SZXN1bHQgfSBmcm9tICcuL2xpYi9zY2hlbWEvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IENvbnRyYWN0ICYgVmFsaWRhdGlvbiAqL1xuZXhwb3J0IHsgZGV0ZWN0U2NoZW1hLCBpc1ZhbGlkYXRhYmxlLCBpc1pvZCB9IGZyb20gJy4vbGliL3NjaGVtYS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgQ29udHJhY3QgJiBWYWxpZGF0aW9uICovXG5leHBvcnQgeyBJbnB1dFZhbGlkYXRpb25FcnJvciwgdmFsaWRhdGVBZ2FpbnN0U2NoZW1hLCB2YWxpZGF0ZU9yVGhyb3cgfSBmcm9tICcuL2xpYi9zY2hlbWEvaW5kZXguanMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBFcnJvciBVdGlsaXRpZXNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqIEBjYXRlZ29yeSBFcnJvciBVdGlsaXRpZXMgKi9cbmV4cG9ydCB0eXBlIHsgU3RydWN0dXJlZEVycm9ySW5mbyB9IGZyb20gJy4vbGliL2VuZ2luZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgRXJyb3IgVXRpbGl0aWVzICovXG5leHBvcnQgeyBleHRyYWN0RXJyb3JJbmZvLCBmb3JtYXRFcnJvckluZm8gfSBmcm9tICcuL2xpYi9lbmdpbmUvaW5kZXguanMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBEZXYgVG9vbHMg4oCUIE1vZGUgZmxhZ3MgYW5kIFpvZCBzY29wZSB1dGlsaXRpZXNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBAY2F0ZWdvcnkgRGV2IFRvb2xzXG4gKlxuICogR2xvYmFsIGRldi1tb2RlIGZsYWcuIENhbGwgYGVuYWJsZURldk1vZGUoKWAgYXQgYXBwbGljYXRpb24gc3RhcnR1cCB0b1xuICogdHVybiBvbiBkZXZlbG9wZXItb25seSBkaWFnbm9zdGljcyBhY3Jvc3MgdGhlIGxpYnJhcnkg4oCUIGNpcmN1bGFyLXJlZmVyZW5jZVxuICogZGV0ZWN0aW9uIGluIHNjb3BlIHdyaXRlcywgd2FybmluZ3Mgd2hlbiBhIHJlY29yZGVyIGhhcyBubyBvYnNlcnZlclxuICogbWV0aG9kcywgc3VzcGljaW91cy1wcmVkaWNhdGUgd2FybmluZ3MgaW4gZGVjaWRlL3NlbGVjdCwgc3RydWN0dXJhbFxuICogY2hlY2tzIGluIGBnZXRTdWJ0cmVlU25hcHNob3RgLCBhbmQgYW55IGZ1dHVyZSBkZXYtb25seSBkaWFnbm9zdGljLlxuICpcbiAqIFByb2R1Y3Rpb24gbGVhdmVzIGl0IE9GRiBieSBkZWZhdWx0ICh6ZXJvIG92ZXJoZWFkKS4gU2VlIHRoZSBKU0RvYyBvblxuICogYGVuYWJsZURldk1vZGVgIGZvciB0aGUgZnVsbCBsaXN0IGFuZCB1c2FnZSBleGFtcGxlLlxuICovXG5leHBvcnQgeyBkaXNhYmxlRGV2TW9kZSwgZW5hYmxlRGV2TW9kZSwgaXNEZXZNb2RlIH0gZnJvbSAnLi9saWIvc2NvcGUvZGV0ZWN0Q2lyY3VsYXIuanMnO1xuXG4vLyBgZGVmaW5lU2NvcGVGcm9tWm9kYCBhbmQgdGhlIG90aGVyIHpvZC1iYXNlZCBzY29wZSBoZWxwZXJzIG1vdmVkIHRvIHRoZSBvcHQtaW5cbi8vIGBmb290cHJpbnRqcy96b2RgIGVudHJ5IOKAlCBrZWVwaW5nIHpvZCBvdXQgb2YgdGhlIGNvcmUgbG9hZCBwYXRoIChpdCBpcyBhblxuLy8gb3B0aW9uYWwgcGVlcikuIEltcG9ydCB0aGVtIGZyb20gJ2Zvb3RwcmludGpzL3pvZCcuXG4iXX0=
|
|
86
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFTSCw0QkFBNEI7QUFDNUIsT0FBTyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBNEJ4Riw0QkFBNEI7QUFDNUIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBb0IzQyxtQ0FBbUM7QUFDbkMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQVl2RCxvQkFBb0I7QUFDcEIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFMUQsb0JBQW9CO0FBQ3BCLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQXFCbkQsK0JBQStCO0FBQy9CLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUV0RCwrQkFBK0I7QUFDL0IsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRXJELG9DQUFvQztBQUNwQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQW1DNUQscUVBQXFFO0FBQ3JFLE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsc0JBQXNCLEVBQ3RCLGtCQUFrQixFQUNsQixXQUFXLEdBQ1osTUFBTSx5QkFBeUIsQ0FBQztBQWlEakMsK0JBQStCO0FBQy9CLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBSzlELCtCQUErQjtBQUMvQixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUU3RCwrQkFBK0I7QUFDL0IsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFdEUsK0JBQStCO0FBQy9CLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRXZFLCtCQUErQjtBQUMvQixPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUV6RSwrQkFBK0I7QUFDL0IsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFakUsK0JBQStCO0FBQy9CLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRXRFLCtCQUErQjtBQUMvQixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUVwRSwrQkFBK0I7QUFDL0IsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUF5QnRFLHVDQUF1QztBQUN2QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUU3RSwrRUFBK0U7QUFDL0UsNEVBQTRFO0FBQzVFLCtFQUErRTtBQUUvRSw4QkFBOEI7QUFDOUIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFvQjVELDZCQUE2QjtBQUM3QixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFpRWpELHNDQUFzQztBQUN0QyxPQUFPLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUUzRSxzQ0FBc0M7QUFDdEMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLHFCQUFxQixFQUFFLGVBQWUsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBU3JHLGdDQUFnQztBQUNoQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFMUUsK0VBQStFO0FBQy9FLGlEQUFpRDtBQUNqRCwrRUFBK0U7QUFFL0U7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxPQUFPLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUV6RixpRkFBaUY7QUFDakYsNEVBQTRFO0FBQzVFLHNEQUFzRCIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRm9vdFByaW50IOKAlCBQdWJsaWMgQVBJICh2MylcbiAqXG4gKiBUaGUgZmxvd2NoYXJ0IHBhdHRlcm4gZm9yIGJhY2tlbmQgY29kZS5cbiAqIEJ1aWxkIOKGkiBSdW4g4oaSIE9ic2VydmUuXG4gKlxuICogKipUaHJlZSBpbXBvcnQgcGF0aHM6KipcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBmbG93Q2hhcnQsIGRlY2lkZSwgbmFycmF0aXZlIH0gZnJvbSAnZm9vdHByaW50anMnOyAgICAgICAgICAgLy8gbWFpbiDigJQgc3RhcnQgaGVyZVxuICogaW1wb3J0IHsgbWV0cmljcywgZGVidWcsIG1hbmlmZXN0IH0gICAgIGZyb20gJ2Zvb3RwcmludGpzL3JlY29yZGVycyc7IC8vIHJlY29yZGVyIGZhY3Rvcmllc1xuICogaW1wb3J0IHsgU2hhcmVkTWVtb3J5LCBTdGFnZUNvbnRleHQgfSAgIGZyb20gJ2Zvb3RwcmludGpzL2FkdmFuY2VkJzsgIC8vIGludGVybmFsc1xuICogYGBgXG4gKlxuICogQG1vZHVsZVxuICovXG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFF1aWNrIFN0YXJ0IOKAlCBFdmVyeXRoaW5nIHlvdSBuZWVkIGZvciA5MCUgb2YgdXNlIGNhc2VzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKiBAY2F0ZWdvcnkgUXVpY2sgU3RhcnQgKi9cbmV4cG9ydCB0eXBlIHsgRmxvd0NoYXJ0LCBTdGFnZUZ1bmN0aW9uIGFzIFN0YWdlSGFuZGxlciwgU3RyZWFtSGFuZGxlcnMgfSBmcm9tICcuL2xpYi9idWlsZGVyL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBRdWljayBTdGFydCAqL1xuZXhwb3J0IHsgZmxvd0NoYXJ0LCBGbG93Q2hhcnRCdWlsZGVyLCBmbG93Q2hhcnRTZWxlY3RvciB9IGZyb20gJy4vbGliL2J1aWxkZXIvaW5kZXguanMnO1xuXG4vKipcbiAqIEBjYXRlZ29yeSBRdWljayBTdGFydFxuICpcbiAqIENvbmZpZyBmb3IgYC5hZGRQYXJhbGxlbEZvckVhY2goKWAg4oCUIG9uZSBicmFuY2ggcGVyIGl0ZW0sIGJyYW5jaCBjb3VudFxuICogZGVjaWRlZCBhdCBydW4gdGltZSBmcm9tIHRoZSBwYXlsb2FkLiBgbWF4QnJhbmNoZXNgIGFuZCBgaW50b2AgYXJlIHJlcXVpcmVkXG4gKiBvbiBwdXJwb3NlIChzZWUgZG9jcy9kZXNpZ24vZXhlY3V0aW9uLWNvbnRyb2wubWQpLlxuICovXG5leHBvcnQgdHlwZSB7IEJyYW5jaENoYXJ0LCBQYXJhbGxlbEZvckVhY2hDb25maWcsIFJldHJ5UG9saWN5IH0gZnJvbSAnLi9saWIvYnVpbGRlci9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgUXVpY2sgU3RhcnQg4oCUIGJ1aWxkLXRpbWUgb2JzZXJ2ZXIgKHR3aW4gb2YgRmxvd1JlY29yZGVyKSAqL1xuZXhwb3J0IHR5cGUge1xuICBTdHJ1Y3R1cmVEZWNpZGVyQ29tcGxldGVFdmVudCxcbiAgU3RydWN0dXJlRWRnZUFkZGVkRXZlbnQsXG4gIFN0cnVjdHVyZUVkZ2VLaW5kLFxuICBTdHJ1Y3R1cmVMb29wRWRnZUFkZGVkRXZlbnQsXG4gIFN0cnVjdHVyZVJlY29yZGVyLFxuICBTdHJ1Y3R1cmVTdGFnZUFkZGVkRXZlbnQsXG4gIFN0cnVjdHVyZVN1YmZsb3dNb3VudGVkRXZlbnQsXG59IGZyb20gJy4vbGliL2J1aWxkZXIvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IFF1aWNrIFN0YXJ0ICovXG5leHBvcnQgdHlwZSB7IFR5cGVkU3RhZ2VGdW5jdGlvbiB9IGZyb20gJy4vbGliL2J1aWxkZXIvdHlwZWRGbG93Q2hhcnQuanMnO1xuXG4vKiogQGNhdGVnb3J5IFF1aWNrIFN0YXJ0ICovXG5leHBvcnQgdHlwZSB7IFNjb3BlTWV0aG9kcywgVHlwZWRTY29wZSB9IGZyb20gJy4vbGliL3JlYWN0aXZlL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBRdWljayBTdGFydCAqL1xuZXhwb3J0IHsgbmFycmF0aXZlIH0gZnJvbSAnLi9yZWNvcmRlcnMuanMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBEZWNpc2lvbiBCcmFuY2hpbmcg4oCUIGRlY2lkZSgpIC8gc2VsZWN0KCkgd2l0aCBldmlkZW5jZSBjYXB0dXJlXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKiBAY2F0ZWdvcnkgRGVjaXNpb24gQnJhbmNoaW5nICovXG5leHBvcnQgdHlwZSB7XG4gIERlY2lkZVJ1bGUsXG4gIERlY2lzaW9uRXZpZGVuY2UsXG4gIERlY2lzaW9uUmVzdWx0LFxuICBEZWZhdWx0QnJhbmNoLFxuICBGaWx0ZXJPcHMsXG4gIFJ1bGVFdmlkZW5jZSxcbiAgU2VsZWN0aW9uRXZpZGVuY2UsXG4gIFNlbGVjdGlvblJlc3VsdCxcbiAgV2hlbkNsYXVzZSxcbiAgV2hlcmVGaWx0ZXIsXG59IGZyb20gJy4vbGliL2RlY2lkZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgRGVjaXNpb24gQnJhbmNoaW5nICovXG5leHBvcnQgeyBkZWNpZGUsIHNlbGVjdCB9IGZyb20gJy4vbGliL2RlY2lkZS9pbmRleC5qcyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFJ1biDigJQgRXhlY3V0ZSBjaGFydHMgYW5kIGNvbGxlY3QgcmVzdWx0c1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKiogQGNhdGVnb3J5IFJ1biAqL1xuZXhwb3J0IHR5cGUgeyBSdW5SZXN1bHQgfSBmcm9tICcuL2xpYi9ydW5uZXIvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IFJ1biAqL1xuZXhwb3J0IHR5cGUgeyBGbG93Q2hhcnRFeGVjdXRvck9wdGlvbnMgfSBmcm9tICcuL2xpYi9ydW5uZXIvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IFJ1biAqL1xuZXhwb3J0IHsgRmxvd0NoYXJ0RXhlY3V0b3IgfSBmcm9tICcuL2xpYi9ydW5uZXIvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IFJ1biAqL1xuZXhwb3J0IHsgUnVuQ29udGV4dCB9IGZyb20gJy4vbGliL3J1bm5lci9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgUnVuICovXG5leHBvcnQgdHlwZSB7IENoYXJ0T3BlbkFQSU9wdGlvbnMsIE1DUFRvb2xEZXNjcmlwdGlvbiwgUnVubmFibGVGbG93Q2hhcnQgfSBmcm9tICcuL2xpYi9ydW5uZXIvUnVubmFibGVDaGFydC5qcyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIE9ic2VydmUg4oCUIERhdGEgKHNjb3BlIHJlY29yZGVycywgZmlyZSBkdXJpbmcgc3RhZ2UgZXhlY3V0aW9uKVxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKiogQGNhdGVnb3J5IE9ic2VydmUg4oCUIERhdGEgKi9cbmV4cG9ydCB0eXBlIHtcbiAgQ29tbWl0RXZlbnQsXG4gIEVycm9yRXZlbnQsXG4gIFJlYWRFdmVudCxcbiAgUmVkYWN0aW9uUG9saWN5LFxuICBSZWRhY3Rpb25SZXBvcnQsXG4gIFNjb3BlUmVjb3JkZXIsXG4gIFN0YWdlRXZlbnQsXG4gIFdyaXRlRXZlbnQsXG59IGZyb20gJy4vbGliL3Njb3BlL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBEYXRhICovXG5leHBvcnQgeyBNZXRyaWNSZWNvcmRlciB9IGZyb20gJy4vbGliL3Njb3BlL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBEYXRhICovXG5leHBvcnQgeyBEZWJ1Z1JlY29yZGVyIH0gZnJvbSAnLi9saWIvc2NvcGUvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IE9ic2VydmUg4oCUIE9wZXJhdGlvbiAqL1xuZXhwb3J0IHsgUmVjb3JkZXJPcGVyYXRpb24gfSBmcm9tICcuL2xpYi9yZWNvcmRlci9pbmRleC5qcyc7XG5cbi8qKlxuICogQGNhdGVnb3J5IE9ic2VydmUg4oCUIERlbGl2ZXJ5IHRpZXIgKFJGQy0wMDEgZGVmZXJyZWQgb2JzZXJ2ZXJzKVxuICpcbiAqIEV2ZXJ5IGBhdHRhY2gqUmVjb3JkZXJgIGNhbGwgYWNjZXB0cyBhbiBvcHRpb25zIGJhZzpcbiAqIGBleGVjdXRvci5hdHRhY2hTY29wZVJlY29yZGVyKHJlYywgeyBkZWxpdmVyeTogJ2RlZmVycmVkJyB9KWAgdGFrZXMgdGhlXG4gKiByZWNvcmRlciBPVVQgb2YgdGhlIGVuZ2luZSdzIGhvdCBwYXRoIOKAlCBldmVudHMgYXJlIGNhcHR1cmVkIGludG8gb25lXG4gKiBib3VuZGVkLCB0b3RhbGx5LW9yZGVyZWQgcXVldWUgYW5kIGRlbGl2ZXJlZCBhdCB0aGUgbmV4dCBtaWNyb3Rhc2tcbiAqIGNoZWNrcG9pbnQgKFwib25lIGJlYXQgYmVoaW5kXCIpLiBPbWl0IGBkZWxpdmVyeWAgZm9yIHRoZSBoaXN0b3JpY2FsXG4gKiBzeW5jaHJvbm91cyBjYWxsIChieXRlLWlkZW50aWNhbCB0byBwcmV2aW91cyByZWxlYXNlcykuIEFjY291bnRpbmdcbiAqIHN1cmZhY2VzIG9uIGBzbmFwc2hvdC5vYnNlcnZlclN0YXRzYDsgYGV4ZWN1dG9yLmRyYWluT2JzZXJ2ZXJzKClgIHNldHRsZXNcbiAqIGFzeW5jIGxpc3RlbmVycyBiZWZvcmUgc2h1dGRvd24uIFNlZSBgZG9jcy9ndWlkZXMvb2JzZXJ2ZXJzLWRlZmVycmVkLm1kYC5cbiAqL1xuZXhwb3J0IHR5cGUge1xuICBBdHRhY2hSZWNvcmRlck9wdGlvbnMsXG4gIE9ic2VydmVyRGVsaXZlcnksXG4gIE9ic2VydmVyRHJhaW5SZXN1bHQsXG4gIE9ic2VydmVyU3RhdHMsXG59IGZyb20gJy4vbGliL3J1bm5lci9pbmRleC5qcyc7XG5cbi8qKlxuICogQGNhdGVnb3J5IE9ic2VydmUg4oCUIERlbGl2ZXJ5IHRpZXIgKFJGQy0wMDEgZGVmZXJyZWQgb2JzZXJ2ZXJzKVxuICpcbiAqIGBDYXB0dXJlUG9saWN5YCDigJQgaG93IGEgZGVmZXJyZWQgZXZlbnQncyBwYXlsb2FkIGlzIG1hdGVyaWFsaXplZCBhdFxuICogY2FwdHVyZSB0aW1lIChgJ3N1bW1hcnknYCBkZWZhdWx0IC8gYCdjbG9uZSdgIC8gYCdyZWYnYCkuIGBPdmVyZmxvd1BvbGljeWBcbiAqIOKAlCB3aGF0IGEgc2F0dXJhdGVkIHF1ZXVlIGRvZXMgKGAnZHJvcC1vbGRlc3QnYCBkZWZhdWx0IC8gYCdzYW1wbGUnYCAvXG4gKiBgJ2Jsb2NrJ2ApLiBgRGlzcGF0Y2hlclN0YXRzYCAvIGBMaXN0ZW5lclN0YXRzYCDigJQgdGhlIGFjY291bnRpbmcgc2hhcGVzXG4gKiBlbWJlZGRlZCBpbiBgT2JzZXJ2ZXJTdGF0c2AuIFR5cGVzIG9ubHkg4oCUIHRoZSBvYnNlcnZlci1xdWV1ZSBtb2R1bGVcbiAqIGl0c2VsZiBpcyBpbnRlcm5hbDsgY29uc3VtZXJzIHVzZSB0aGUgYXR0YWNoIG9wdGlvbnMuXG4gKi9cbmV4cG9ydCB0eXBlIHsgQ2FwdHVyZVBvbGljeSwgRGlzcGF0Y2hlclN0YXRzLCBMaXN0ZW5lclN0YXRzLCBPdmVyZmxvd1BvbGljeSB9IGZyb20gJy4vbGliL29ic2VydmVyLXF1ZXVlL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBDb21iaW5lZCAoYm90aCBkYXRhLWZsb3cgYW5kIGNvbnRyb2wtZmxvdykgKi9cbmV4cG9ydCB0eXBlIHsgQ29tYmluZWRSZWNvcmRlciB9IGZyb20gJy4vbGliL3JlY29yZGVyL2luZGV4LmpzJztcbi8qKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgQ29tYmluZWQgKGJvdGggZGF0YS1mbG93IGFuZCBjb250cm9sLWZsb3cpICovXG5leHBvcnQge1xuICBoYXNFbWl0UmVjb3JkZXJNZXRob2RzLFxuICBoYXNGbG93UmVjb3JkZXJNZXRob2RzLFxuICBoYXNSZWNvcmRlck1ldGhvZHMsXG4gIGlzRmxvd0V2ZW50LFxufSBmcm9tICcuL2xpYi9yZWNvcmRlci9pbmRleC5qcyc7XG5cbi8qKlxuICogQGNhdGVnb3J5IE9ic2VydmUg4oCUIEVtaXQgKHVzZXItYXV0aG9yZWQgc3RydWN0dXJlZCBldmVudHMpXG4gKlxuICogVGhpcmQgb2JzZXJ2ZXIgY2hhbm5lbCAoYWxvbmdzaWRlIGBTY29wZVJlY29yZGVyYCBhbmQgYEZsb3dSZWNvcmRlcmApLiBDb25zdW1lclxuICogY29kZSBjYWxscyBgc2NvcGUuJGVtaXQobmFtZSwgcGF5bG9hZClgIGZyb20gaW5zaWRlIGEgc3RhZ2U7IGV2ZXJ5IGF0dGFjaGVkXG4gKiBgRW1pdFJlY29yZGVyLm9uRW1pdChldmVudClgIGZpcmVzIHN5bmNocm9ub3VzbHkgd2l0aCBzdGFnZS1jb250ZXh0XG4gKiBlbnJpY2htZW50LiBQYXNzLXRocm91Z2gg4oCUIG5vIGJ1ZmZlcmluZywgemVybyBhbGxvY2F0aW9uIHdoZW4gbm8gcmVjb3JkZXJcbiAqIGlzIGF0dGFjaGVkLlxuICovXG5leHBvcnQgdHlwZSB7IEVtaXRFdmVudCwgRW1pdFJlY29yZGVyIH0gZnJvbSAnLi9saWIvcmVjb3JkZXIvaW5kZXguanMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBPYnNlcnZlIOKAlCBGbG93IChGbG93UmVjb3JkZXIsIGZpcmVzIGFmdGVyIHN0YWdlIGV4ZWN1dGlvbilcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBGbG93ICovXG5leHBvcnQgdHlwZSB7XG4gIEZsb3dCcmVha0V2ZW50LFxuICBGbG93RGVjaXNpb25FdmVudCxcbiAgRmxvd0Vycm9yRXZlbnQsXG4gIEZsb3dGb3JrRXZlbnQsXG4gIEZsb3dMb29wRXZlbnQsXG4gIEZsb3dOZXh0RXZlbnQsXG4gIEZsb3dSZWNvcmRlcixcbiAgRmxvd1J1bkV2ZW50LFxuICBGbG93UnVuRmFpbGVkRXZlbnQsXG4gIEZsb3dTZWxlY3RlZEV2ZW50LFxuICBGbG93U3RhZ2VFdmVudCxcbiAgRmxvd1N0YWdlUmV0cnlFdmVudCxcbiAgRmxvd1N1YmZsb3dFdmVudCxcbiAgRmxvd1N1YmZsb3dSZWdpc3RlcmVkRXZlbnQsXG4gIFRyYXZlcnNhbENvbnRleHQsXG59IGZyb20gJy4vbGliL2VuZ2luZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgRmxvdyAqL1xuZXhwb3J0IHR5cGUgeyBDb21iaW5lZE5hcnJhdGl2ZUVudHJ5IH0gZnJvbSAnLi9saWIvZW5naW5lL2luZGV4LmpzJztcblxuLyoqXG4gKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgRmxvd1xuICpcbiAqIGBOYXJyYXRpdmVGb3JtYXR0ZXJgIOKAlCBwbHVnZ2FibGUgZm9ybWF0dGVyIHRoYXQgY29udmVydHMgZXZlbnQgY29udGV4dFxuICogb2JqZWN0cyBpbnRvIHRoZSB0ZXh0IGxpbmVzIG9mIHRoZSBuYXJyYXRpdmUuIFByZWZlciB0aGlzIG5hbWUgaW4gbmV3XG4gKiBjb2RlOyBgTmFycmF0aXZlUmVuZGVyZXJgIGlzIGEgZGVwcmVjYXRlZCBhbGlhcyB0aGF0IHdpbGwgYmUgcmVtb3ZlZCBpblxuICogdGhlIG5leHQgbWFqb3IgcmVsZWFzZS5cbiAqL1xuZXhwb3J0IHR5cGUgeyBOYXJyYXRpdmVGb3JtYXR0ZXIsIE5hcnJhdGl2ZVJlbmRlcmVyIH0gZnJvbSAnLi9saWIvZW5naW5lL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBGbG93ICovXG5leHBvcnQgeyBOYXJyYXRpdmVGbG93UmVjb3JkZXIgfSBmcm9tICcuL2xpYi9lbmdpbmUvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IE9ic2VydmUg4oCUIEZsb3cgKi9cbmV4cG9ydCB0eXBlIHsgTWFuaWZlc3RFbnRyeSB9IGZyb20gJy4vbGliL2VuZ2luZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgRmxvdyAqL1xuZXhwb3J0IHsgTWFuaWZlc3RGbG93UmVjb3JkZXIgfSBmcm9tICcuL2xpYi9lbmdpbmUvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IE9ic2VydmUg4oCUIEZsb3cgKi9cbmV4cG9ydCB7IEFkYXB0aXZlTmFycmF0aXZlRmxvd1JlY29yZGVyIH0gZnJvbSAnLi9saWIvZW5naW5lL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBGbG93ICovXG5leHBvcnQgeyBNaWxlc3RvbmVOYXJyYXRpdmVGbG93UmVjb3JkZXIgfSBmcm9tICcuL2xpYi9lbmdpbmUvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IE9ic2VydmUg4oCUIEZsb3cgKi9cbmV4cG9ydCB7IFByb2dyZXNzaXZlTmFycmF0aXZlRmxvd1JlY29yZGVyIH0gZnJvbSAnLi9saWIvZW5naW5lL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBGbG93ICovXG5leHBvcnQgeyBSTEVOYXJyYXRpdmVGbG93UmVjb3JkZXIgfSBmcm9tICcuL2xpYi9lbmdpbmUvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IE9ic2VydmUg4oCUIEZsb3cgKi9cbmV4cG9ydCB7IFNlcGFyYXRlTmFycmF0aXZlRmxvd1JlY29yZGVyIH0gZnJvbSAnLi9saWIvZW5naW5lL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBGbG93ICovXG5leHBvcnQgeyBTaWxlbnROYXJyYXRpdmVGbG93UmVjb3JkZXIgfSBmcm9tICcuL2xpYi9lbmdpbmUvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IE9ic2VydmUg4oCUIEZsb3cgKi9cbmV4cG9ydCB7IFdpbmRvd2VkTmFycmF0aXZlRmxvd1JlY29yZGVyIH0gZnJvbSAnLi9saWIvZW5naW5lL2luZGV4LmpzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gU2VsZi1EZXNjcmliaW5nIOKAlCAuY29udHJhY3QoKSwgdG9PcGVuQVBJKCksIHRvTUNQVG9vbCgpXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKiBAY2F0ZWdvcnkgU2VsZi1EZXNjcmliaW5nICovXG5leHBvcnQgdHlwZSB7XG4gIEZsb3dDaGFydENvbnRyYWN0LFxuICBGbG93Q2hhcnRDb250cmFjdE9wdGlvbnMsXG4gIEpzb25TY2hlbWEsXG4gIE9wZW5BUElPcHRpb25zLFxuICBPcGVuQVBJU3BlYyxcbn0gZnJvbSAnLi9saWIvY29udHJhY3QvaW5kZXguanMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBTbmFwc2hvdCAmIENvbXBvc2l0aW9uIOKAlCBTdWJmbG93IG5hdmlnYXRpb24gYW5kIENvbXBvc2FibGVSdW5uZXJcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqIEBjYXRlZ29yeSBTbmFwc2hvdCAmIENvbXBvc2l0aW9uICovXG5leHBvcnQgdHlwZSB7IENvbXBvc2FibGVSdW5uZXIgfSBmcm9tICcuL2xpYi9ydW5uZXIvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IFNuYXBzaG90ICYgQ29tcG9zaXRpb24gKi9cbmV4cG9ydCB0eXBlIHsgUmVjb3JkZXJTbmFwc2hvdCwgUnVudGltZVNuYXBzaG90LCBTdWJ0cmVlU25hcHNob3QgfSBmcm9tICcuL2xpYi9ydW5uZXIvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IFNuYXBzaG90ICYgQ29tcG9zaXRpb24gKi9cbmV4cG9ydCB7IGdldFN1YnRyZWVTbmFwc2hvdCwgbGlzdFN1YmZsb3dQYXRocyB9IGZyb20gJy4vbGliL3J1bm5lci9pbmRleC5qcyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFNjb3BlUmVjb3JkZXIgQ29tcG9zaXRpb24g4oCUIEJ1bmRsZSBtdWx0aXBsZSByZWNvcmRlcnMgaW50byBkb21haW4gcHJlc2V0c1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKiogQGNhdGVnb3J5IFNjb3BlUmVjb3JkZXIgKi9cbmV4cG9ydCB7IENvbXBvc2l0ZVJlY29yZGVyIH0gZnJvbSAnLi9saWIvcmVjb3JkZXIvaW5kZXguanMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBQYXVzZS9SZXN1bWUg4oCUIFNlcmlhbGl6YWJsZSBjaGVja3BvaW50cyBmb3IgbG9uZy1ydW5uaW5nIG9yIGh1bWFuLWluLXRoZS1sb29wIGZsb3dzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKiBAY2F0ZWdvcnkgUGF1c2UvUmVzdW1lICovXG4vKiogQGNhdGVnb3J5IFBhdXNlL1Jlc3VtZSAqL1xuZXhwb3J0IHR5cGUgeyBGbG93Y2hhcnRDaGVja3BvaW50LCBQYXVzYWJsZUhhbmRsZXIgfSBmcm9tICcuL2xpYi9wYXVzZS9pbmRleC5qcyc7XG5cbi8qKlxuICogQGNhdGVnb3J5IFBhdXNlL1Jlc3VtZVxuICpcbiAqIGBpbnRlcnJ1cHQoc2NvcGUsIHsgcmVhc29uLCBleHBlY3RzPyB9KWAg4oCUIHN0b3AgbWlkLXN0YWdlIHRvIGFzayBhIHF1ZXN0aW9uLFxuICogYW5kIGdldCB0aGUgYW5zd2VyIGJhY2sgYXQgdGhlIHNhbWUgY2FsbCBzaXRlIHdoZW4gdGhlIHJ1biByZXN1bWVzLiBSZXN1bWVcbiAqIHJlLWVudGVycyB0aGUgc3RhZ2UgZnJvbSBpdHMgVE9QIChzdGFnZXMgYXJlIGF0b21pYyksIHNvIGtlZXAgdGhlIGhhbGZcbiAqIGJlZm9yZSB0aGUgY2FsbCBpZGVtcG90ZW50LlxuICovXG5leHBvcnQgdHlwZSB7IEludGVycnVwdFBheWxvYWQgfSBmcm9tICcuL2xpYi9wYXVzZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgUGF1c2UvUmVzdW1lICovXG5leHBvcnQgeyBpbnRlcnJ1cHQgfSBmcm9tICcuL2xpYi9wYXVzZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgU2NvcGVSZWNvcmRlciAqL1xuZXhwb3J0IHR5cGUgeyBDb21wb3NpdGVTbmFwc2hvdCB9IGZyb20gJy4vbGliL3JlY29yZGVyL2luZGV4LmpzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gQ29uZmlndXJhdGlvbiDigJQgVHlwZXMgcGFzc2VkIHRvIEZsb3dDaGFydEV4ZWN1dG9yIGFuZCBydW4oKVxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKiogQGNhdGVnb3J5IENvbmZpZ3VyYXRpb24gKi9cbmV4cG9ydCB0eXBlIHsgRXhlY3V0aW9uRW52LCBFeGVjdXRvclJlc3VsdCwgUGF1c2VkUmVzdWx0LCBSdW5PcHRpb25zIH0gZnJvbSAnLi9saWIvZW5naW5lL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBDb25maWd1cmF0aW9uICovXG5leHBvcnQgdHlwZSB7IFNjb3BlRmFjdG9yeSB9IGZyb20gJy4vbGliL2VuZ2luZS9pbmRleC5qcyc7XG5cbi8qKlxuICogQGNhdGVnb3J5IENvbmZpZ3VyYXRpb25cbiAqXG4gKiBSZWFkLXRyYWNraW5nIHBvbGljeSBmb3IgYFN0YWdlU25hcHNob3Quc3RhZ2VSZWFkc2AgKCMxNCk6XG4gKiBgJ2Z1bGwnYCAoZGVmYXVsdCDigJQgcGVyLXJlYWQgdmFsdWUgY2xvbmUsIGhpc3RvcmljYWwgYmVoYXZpb3IpIC9cbiAqIGAnc3VtbWFyeSdgIChjaGVhcCBgUmVhZFN1bW1hcnlNYXJrZXJgIHBlciByZWFkKSAvIGAnb2ZmJ2AgKG5vIHRyYWNraW5nLFxuICogemVybyBwZXItcmVhZCBjbG9uZSkuIFBhc3MgYXMgYG5ldyBGbG93Q2hhcnRFeGVjdXRvcihjaGFydCwgeyByZWFkVHJhY2tpbmcgfSlgXG4gKiBvciBjYWxsIGBleGVjdXRvci5zZXRSZWFkVHJhY2tpbmcobW9kZSlgIGJlZm9yZSBgcnVuKClgLlxuICovXG5leHBvcnQgdHlwZSB7IFJlYWRTdW1tYXJ5TWFya2VyLCBSZWFkVHJhY2tpbmdNb2RlIH0gZnJvbSAnLi9saWIvbWVtb3J5L2luZGV4LmpzJztcblxuLyoqXG4gKiBAY2F0ZWdvcnkgQ29uZmlndXJhdGlvblxuICpcbiAqIFdyaXRlLXRyYWNraW5nIHBvbGljeSBmb3IgYFN0YWdlU25hcHNob3Quc3RhZ2VXcml0ZXNgICgjMTNjLUEpIOKAlCB0aGVcbiAqIHNpYmxpbmcgb2YgYFJlYWRUcmFja2luZ01vZGVgOyBib3RoIGFsaWFzIHRoZSBzaGFyZWQgYFJldGVudGlvblBvbGljeWBcbiAqIGZhbWlseSBmcm9tIGBsaWIvY2FwdHVyZWAuIGAnZnVsbCdgIChkZWZhdWx0IOKAlCBwZXItd3JpdGUgdmFsdWUgY2xvbmUsXG4gKiBoaXN0b3JpY2FsIGJlaGF2aW9yKSAvIGAnc3VtbWFyeSdgIChjaGVhcCBgV3JpdGVTdW1tYXJ5TWFya2VyYCBwZXIgd3JpdGUpXG4gKiAvIGAnb2ZmJ2AgKG5vIHRyYWNraW5nOyBgc3RhZ2VXcml0ZXNgIGFic2VudCBhbmQgdGhlIGBvbkNvbW1pdGAgbXV0YXRpb25zXG4gKiBwYXlsb2FkIGlzIGVtcHR5IOKAlCB3cml0ZXMgdGhlbXNlbHZlcyBzdGlsbCBjb21taXQsIGFuZCB0aGUgY29tbWl0IGxvZyBpc1xuICogdW5hZmZlY3RlZCkuIFBhc3MgYXMgYG5ldyBGbG93Q2hhcnRFeGVjdXRvcihjaGFydCwgeyB3cml0ZVRyYWNraW5nIH0pYCBvclxuICogY2FsbCBgZXhlY3V0b3Iuc2V0V3JpdGVUcmFja2luZyhtb2RlKWAgYmVmb3JlIGBydW4oKWAuXG4gKi9cbmV4cG9ydCB0eXBlIHsgUmV0ZW50aW9uUG9saWN5LCBXcml0ZVN1bW1hcnlNYXJrZXIsIFdyaXRlVHJhY2tpbmdNb2RlIH0gZnJvbSAnLi9saWIvbWVtb3J5L2luZGV4LmpzJztcblxuLyoqXG4gKiBAY2F0ZWdvcnkgQ29uZmlndXJhdGlvblxuICpcbiAqIENvbW1pdC12YWx1ZXMgZW5jb2RpbmcgZm9yIHRoZSBDT01NSVQgTE9HICgjMTNjLUIpIOKAlCB0aGUgdGhpcmQgZGlhbCBvZlxuICogdGhlIGZhbWlseSwgYW5kIHRoZSBvbmx5IExPU1NMRVNTIG9uZSAoaXQgY2hhbmdlcyB0aGUgbG9nJ3MgZW5jb2RpbmcsXG4gKiBuZXZlciBpdHMgaW5mb3JtYXRpb24pLiBgJ2Z1bGwnYCAoZGVmYXVsdCDigJQgZXZlcnkgc3Vydml2aW5nIGBzZXRgIHN0b3Jlc1xuICogdGhlIGZ1bGwgZmluYWwgdmFsdWUsIGJ5dGUtaWRlbnRpY2FsIHRvIGhpc3RvcnkpIC8gYCdkZWx0YSdgIChhcnJheVxuICogbmV0LWNoYW5nZXMgdGhhdCBhcmUgXCJiYXNlIHBsdXMgYSB0YWlsXCIgY29tbWl0IGFzIGFuIGBhcHBlbmRgIHZlcmJcbiAqIHN0b3Jpbmcgb25seSB0aGUgdGFpbDsgYGRlbGV0ZVZhbHVlKClgIGNvbW1pdHMgYXMgYSByZWFsIGBkZWxldGVgIHZlcmI7XG4gKiBvbmUgdHJhY2UgZW50cnkgcGVyIHN1cnZpdmluZyBwYXRoKS4gUmVwbGF5IHJlY29uc3RydWN0cyBldmVyeSBzdGVwJ3NcbiAqIGZ1bGwgc3RhdGUgZXhhY3RseS4gQ29uc3VtZXJzIHJlYWRpbmcgYGJ1bmRsZS5vdmVyd3JpdGVba2V5XWAgYXMgdGhlIGZ1bGxcbiAqIHZhbHVlIG11c3QgdXNlIGBjb21taXRWYWx1ZUF0YCBmcm9tIGBmb290cHJpbnRqcy90cmFjZWAuIFBhc3MgYXNcbiAqIGBuZXcgRmxvd0NoYXJ0RXhlY3V0b3IoY2hhcnQsIHsgY29tbWl0VmFsdWVzIH0pYCBvciBjYWxsXG4gKiBgZXhlY3V0b3Iuc2V0Q29tbWl0VmFsdWVzKG1vZGUpYCBiZWZvcmUgYHJ1bigpYDsgdGhlIGFjdGl2ZSBtb2RlIGlzIHRoZVxuICogc25hcHNob3QgZGlzY3JpbWluYW50IGBnZXRTbmFwc2hvdCgpLmNvbW1pdFZhbHVlc2AuXG4gKi9cbmV4cG9ydCB0eXBlIHsgQ29tbWl0VmFsdWVzTW9kZSB9IGZyb20gJy4vbGliL21lbW9yeS9pbmRleC5qcyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIENvbnRyYWN0ICYgVmFsaWRhdGlvblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKiogQGNhdGVnb3J5IENvbnRyYWN0ICYgVmFsaWRhdGlvbiAqL1xuZXhwb3J0IHR5cGUgeyBTY2hlbWFLaW5kLCBWYWxpZGF0aW9uSXNzdWUsIFZhbGlkYXRpb25SZXN1bHQgfSBmcm9tICcuL2xpYi9zY2hlbWEvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IENvbnRyYWN0ICYgVmFsaWRhdGlvbiAqL1xuZXhwb3J0IHsgZGV0ZWN0U2NoZW1hLCBpc1ZhbGlkYXRhYmxlLCBpc1pvZCB9IGZyb20gJy4vbGliL3NjaGVtYS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgQ29udHJhY3QgJiBWYWxpZGF0aW9uICovXG5leHBvcnQgeyBJbnB1dFZhbGlkYXRpb25FcnJvciwgdmFsaWRhdGVBZ2FpbnN0U2NoZW1hLCB2YWxpZGF0ZU9yVGhyb3cgfSBmcm9tICcuL2xpYi9zY2hlbWEvaW5kZXguanMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBFcnJvciBVdGlsaXRpZXNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqIEBjYXRlZ29yeSBFcnJvciBVdGlsaXRpZXMgKi9cbmV4cG9ydCB0eXBlIHsgU3RydWN0dXJlZEVycm9ySW5mbyB9IGZyb20gJy4vbGliL2VuZ2luZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgRXJyb3IgVXRpbGl0aWVzICovXG5leHBvcnQgeyBleHRyYWN0RXJyb3JJbmZvLCBmb3JtYXRFcnJvckluZm8gfSBmcm9tICcuL2xpYi9lbmdpbmUvaW5kZXguanMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBEZXYgVG9vbHMg4oCUIE1vZGUgZmxhZ3MgYW5kIFpvZCBzY29wZSB1dGlsaXRpZXNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBAY2F0ZWdvcnkgRGV2IFRvb2xzXG4gKlxuICogR2xvYmFsIGRldi1tb2RlIGZsYWcuIENhbGwgYGVuYWJsZURldk1vZGUoKWAgYXQgYXBwbGljYXRpb24gc3RhcnR1cCB0b1xuICogdHVybiBvbiBkZXZlbG9wZXItb25seSBkaWFnbm9zdGljcyBhY3Jvc3MgdGhlIGxpYnJhcnkg4oCUIGNpcmN1bGFyLXJlZmVyZW5jZVxuICogZGV0ZWN0aW9uIGluIHNjb3BlIHdyaXRlcywgd2FybmluZ3Mgd2hlbiBhIHJlY29yZGVyIGhhcyBubyBvYnNlcnZlclxuICogbWV0aG9kcywgc3VzcGljaW91cy1wcmVkaWNhdGUgd2FybmluZ3MgaW4gZGVjaWRlL3NlbGVjdCwgc3RydWN0dXJhbFxuICogY2hlY2tzIGluIGBnZXRTdWJ0cmVlU25hcHNob3RgLCBhbmQgYW55IGZ1dHVyZSBkZXYtb25seSBkaWFnbm9zdGljLlxuICpcbiAqIFByb2R1Y3Rpb24gbGVhdmVzIGl0IE9GRiBieSBkZWZhdWx0ICh6ZXJvIG92ZXJoZWFkKS4gU2VlIHRoZSBKU0RvYyBvblxuICogYGVuYWJsZURldk1vZGVgIGZvciB0aGUgZnVsbCBsaXN0IGFuZCB1c2FnZSBleGFtcGxlLlxuICovXG5leHBvcnQgeyBkaXNhYmxlRGV2TW9kZSwgZW5hYmxlRGV2TW9kZSwgaXNEZXZNb2RlIH0gZnJvbSAnLi9saWIvc2NvcGUvZGV0ZWN0Q2lyY3VsYXIuanMnO1xuXG4vLyBgZGVmaW5lU2NvcGVGcm9tWm9kYCBhbmQgdGhlIG90aGVyIHpvZC1iYXNlZCBzY29wZSBoZWxwZXJzIG1vdmVkIHRvIHRoZSBvcHQtaW5cbi8vIGBmb290cHJpbnRqcy96b2RgIGVudHJ5IOKAlCBrZWVwaW5nIHpvZCBvdXQgb2YgdGhlIGNvcmUgbG9hZCBwYXRoIChpdCBpcyBhblxuLy8gb3B0aW9uYWwgcGVlcikuIEltcG9ydCB0aGVtIGZyb20gJ2Zvb3RwcmludGpzL3pvZCcuXG4iXX0=
|
|
@@ -8,13 +8,17 @@
|
|
|
8
8
|
* - A function: (s) => s.creditScore > 700 (auto-captures reads via temp recorder)
|
|
9
9
|
* - A filter: { creditScore: { gt: 700 } } (captures reads + operators + thresholds)
|
|
10
10
|
*/
|
|
11
|
-
import type { DecideRule, DecisionResult, SelectionResult } from './types.js';
|
|
11
|
+
import type { DecideRule, DecisionResult, DefaultBranch, SelectionResult } from './types.js';
|
|
12
12
|
/**
|
|
13
13
|
* Evaluates rules in order (first-match). Returns a branded DecisionResult.
|
|
14
14
|
*
|
|
15
15
|
* @param scope - TypedScope or ScopeFacade
|
|
16
16
|
* @param rules - Array of DecideRule (function or filter when clauses)
|
|
17
|
-
* @param defaultBranch - Branch
|
|
17
|
+
* @param defaultBranch - Branch taken when no rule matches. Either the branch
|
|
18
|
+
* id (`'rejected'`) or the id plus what falling back to it MEANS
|
|
19
|
+
* (`{ branch: 'rejected', label: 'No rule fired' }`). The label lands on
|
|
20
|
+
* `evidence.defaultLabel` — the default is chosen by no rule, so it is the
|
|
21
|
+
* one branch that `rules[].label` can never describe.
|
|
18
22
|
*
|
|
19
23
|
* **Error behavior:** If a `when` function throws during evaluation, the rule is
|
|
20
24
|
* treated as non-matching (`matched: false`) and the error message is captured in
|
|
@@ -27,7 +31,7 @@ import type { DecideRule, DecisionResult, SelectionResult } from './types.js';
|
|
|
27
31
|
* nothing must not win a branch on vacuous truth. Use `defaultBranch` for the
|
|
28
32
|
* catch-all instead. Unknown filter operators also never match (dev mode warns).
|
|
29
33
|
*/
|
|
30
|
-
export declare function decide<S extends object>(scope: S, rules: DecideRule<S>[], defaultBranch:
|
|
34
|
+
export declare function decide<S extends object>(scope: S, rules: DecideRule<S>[], defaultBranch: DefaultBranch): DecisionResult;
|
|
31
35
|
/**
|
|
32
36
|
* Evaluates ALL rules (not first-match). Returns a branded SelectionResult.
|
|
33
37
|
*
|
|
@@ -125,13 +125,27 @@ function evaluateRule(scope, rule, index, attachFn, detachFn, valueFn, redactedF
|
|
|
125
125
|
return evidence;
|
|
126
126
|
}
|
|
127
127
|
}
|
|
128
|
+
// -- default branch normalization --------------------------------------------
|
|
129
|
+
/**
|
|
130
|
+
* Collapses both {@link DefaultBranch} forms to one shape, once, at the top of
|
|
131
|
+
* `decide()`. A bare string yields `label: undefined`, which every downstream
|
|
132
|
+
* spread then omits — so the string call site produces exactly the evidence it
|
|
133
|
+
* produced before this parameter was widened.
|
|
134
|
+
*/
|
|
135
|
+
function normalizeDefaultBranch(defaultBranch) {
|
|
136
|
+
return typeof defaultBranch === 'string' ? { branch: defaultBranch } : defaultBranch;
|
|
137
|
+
}
|
|
128
138
|
// -- decide() ----------------------------------------------------------------
|
|
129
139
|
/**
|
|
130
140
|
* Evaluates rules in order (first-match). Returns a branded DecisionResult.
|
|
131
141
|
*
|
|
132
142
|
* @param scope - TypedScope or ScopeFacade
|
|
133
143
|
* @param rules - Array of DecideRule (function or filter when clauses)
|
|
134
|
-
* @param defaultBranch - Branch
|
|
144
|
+
* @param defaultBranch - Branch taken when no rule matches. Either the branch
|
|
145
|
+
* id (`'rejected'`) or the id plus what falling back to it MEANS
|
|
146
|
+
* (`{ branch: 'rejected', label: 'No rule fired' }`). The label lands on
|
|
147
|
+
* `evidence.defaultLabel` — the default is chosen by no rule, so it is the
|
|
148
|
+
* one branch that `rules[].label` can never describe.
|
|
135
149
|
*
|
|
136
150
|
* **Error behavior:** If a `when` function throws during evaluation, the rule is
|
|
137
151
|
* treated as non-matching (`matched: false`) and the error message is captured in
|
|
@@ -149,6 +163,13 @@ export function decide(scope, rules, defaultBranch) {
|
|
|
149
163
|
const detachFn = getDetachFn(scope);
|
|
150
164
|
const valueFn = getValueFn(scope);
|
|
151
165
|
const redactedFn = getRedactedFn(scope);
|
|
166
|
+
const { branch: defaultBranchId, label: defaultLabel } = normalizeDefaultBranch(defaultBranch);
|
|
167
|
+
// Declared once, spread into BOTH exits below — deliberately. A default's
|
|
168
|
+
// meaning is a property of the DECIDER, not of the run: it must be in the
|
|
169
|
+
// evidence of the run where a rule won just as much as in the run that fell
|
|
170
|
+
// through. Emit it only on the fallthrough and any consumer harvesting branch
|
|
171
|
+
// meanings would watch them appear and disappear with the data.
|
|
172
|
+
const defaultMeaning = defaultLabel !== undefined ? { defaultLabel } : undefined;
|
|
152
173
|
const evaluatedRules = [];
|
|
153
174
|
for (const [index, rule] of rules.entries()) {
|
|
154
175
|
const ruleEvidence = evaluateRule(scope, rule, index, attachFn, detachFn, valueFn, redactedFn);
|
|
@@ -157,7 +178,8 @@ export function decide(scope, rules, defaultBranch) {
|
|
|
157
178
|
const evidence = {
|
|
158
179
|
rules: evaluatedRules,
|
|
159
180
|
chosen: rule.then,
|
|
160
|
-
default:
|
|
181
|
+
default: defaultBranchId,
|
|
182
|
+
...defaultMeaning,
|
|
161
183
|
};
|
|
162
184
|
return { branch: rule.then, [DECISION_RESULT]: true, evidence };
|
|
163
185
|
}
|
|
@@ -165,10 +187,11 @@ export function decide(scope, rules, defaultBranch) {
|
|
|
165
187
|
// Default: no rule matched
|
|
166
188
|
const evidence = {
|
|
167
189
|
rules: evaluatedRules,
|
|
168
|
-
chosen:
|
|
169
|
-
default:
|
|
190
|
+
chosen: defaultBranchId,
|
|
191
|
+
default: defaultBranchId,
|
|
192
|
+
...defaultMeaning,
|
|
170
193
|
};
|
|
171
|
-
return { branch:
|
|
194
|
+
return { branch: defaultBranchId, [DECISION_RESULT]: true, evidence };
|
|
172
195
|
}
|
|
173
196
|
// -- select() ----------------------------------------------------------------
|
|
174
197
|
/**
|
|
@@ -207,4 +230,4 @@ export function select(scope, rules) {
|
|
|
207
230
|
};
|
|
208
231
|
return { branches: selectedBranches, [DECISION_RESULT]: true, evidence };
|
|
209
232
|
}
|
|
210
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjaWRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9kZWNpZGUvZGVjaWRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7R0FTRztBQUVILE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUV2RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBYWxELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFN0MsK0VBQStFO0FBRS9FLFNBQVMsV0FBVyxDQUFDLEtBQWM7SUFDakMsTUFBTSxDQUFDLEdBQUcsS0FBZ0MsQ0FBQztJQUMzQyxJQUFJLE9BQU8sQ0FBQyxDQUFDLG9CQUFvQixLQUFLLFVBQVU7UUFBRSxPQUFPLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDeEYsSUFBSSxPQUFPLENBQUMsQ0FBQyxtQkFBbUIsS0FBSyxVQUFVO1FBQUUsT0FBTyxDQUFDLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RGLE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUM7QUFFRCxTQUFTLFdBQVcsQ0FBQyxLQUFjO0lBQ2pDLE1BQU0sQ0FBQyxHQUFHLEtBQWdDLENBQUM7SUFDM0MsSUFBSSxPQUFPLENBQUMsQ0FBQyxvQkFBb0IsS0FBSyxVQUFVO1FBQUUsT0FBTyxDQUFDLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hGLElBQUksT0FBTyxDQUFDLENBQUMsbUJBQW1CLEtBQUssVUFBVTtRQUFFLE9BQU8sQ0FBQyxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0RixPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFD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S0FBSyxNQUFNLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO1FBQzVDLE1BQU0sWUFBWSxHQUFHLFlBQVksQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQztRQUMvRixjQUFjLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBRWxDLElBQUksWUFBWSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3pCLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbkMsQ0FBQztJQUNILENBQUM7SUFFRCxNQUFNLFFBQVEsR0FBc0I7UUFDbEMsS0FBSyxFQUFFLGNBQWM7UUFDckIsUUFBUSxFQUFFLGdCQUFnQjtLQUMzQixDQUFDO0lBQ0YsT0FBTyxFQUFFLFFBQVEsRUFBRSxnQkFBZ0IsRUFBRSxDQUFDLGVBQWUsQ0FBQyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsQ0FBQztBQUMzRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBkZWNpZGUvZGVjaWRlIC0tIENvcmUgZGVjaWRlKCkgYW5kIHNlbGVjdCgpIGhlbHBlciBmdW5jdGlvbnMuXG4gKlxuICogZGVjaWRlKCkgZXZhbHVhdGVzIHJ1bGVzIGluIG9yZGVyIChmaXJzdC1tYXRjaCkgYW5kIHJldHVybnMgYSBEZWNpc2lvblJlc3VsdC5cbiAqIHNlbGVjdCgpIGV2YWx1YXRlcyBBTEwgcnVsZXMgYW5kIHJldHVybnMgYSBTZWxlY3Rpb25SZXN1bHQgd2l0aCBhbGwgbWF0Y2hlcy5cbiAqXG4gKiBFYWNoIHJ1bGUncyBgd2hlbmAgY2FuIGJlOlxuICogLSBBIGZ1bmN0aW9uOiAocykgPT4gcy5jcmVkaXRTY29yZSA+IDcwMCAgKGF1dG8tY2FwdHVyZXMgcmVhZHMgdmlhIHRlbXAgcmVjb3JkZXIpXG4gKiAtIEEgZmlsdGVyOiAgIHsgY3JlZGl0U2NvcmU6IHsgZ3Q6IDcwMCB9IH0gKGNhcHR1cmVzIHJlYWRzICsgb3BlcmF0b3JzICsgdGhyZXNob2xkcylcbiAqL1xuXG5pbXBvcnQgeyBpc0Rldk1vZGUgfSBmcm9tICcuLi9zY29wZS9kZXRlY3RDaXJjdWxhci5qcyc7XG5pbXBvcnQgdHlwZSB7IFNjb3BlUmVjb3JkZXIgfSBmcm9tICcuLi9zY29wZS90eXBlcy5qcyc7XG5pbXBvcnQgeyBldmFsdWF0ZUZpbHRlciB9IGZyb20gJy4vZXZhbHVhdG9yLmpzJztcbmltcG9ydCB7IEV2aWRlbmNlQ29sbGVjdG9yIH0gZnJvbSAnLi9ldmlkZW5jZS5qcyc7XG5pbXBvcnQgdHlwZSB7XG4gIERlY2lkZVJ1bGUsXG4gIERlY2lzaW9uRXZpZGVuY2UsXG4gIERlY2lzaW9uUmVzdWx0LFxuICBGaWx0ZXJDb25kaXRpb24sXG4gIEZpbHRlclJ1bGVFdmlkZW5jZSxcbiAgRnVuY3Rpb25SdWxlRXZpZGVuY2UsXG4gIFJ1bGVFdmlkZW5jZSxcbiAgU2VsZWN0aW9uRXZpZGVuY2UsXG4gIFNlbGVjdGlvblJlc3VsdCxcbiAgV2hlcmVGaWx0ZXIsXG59IGZyb20gJy4vdHlwZXMuanMnO1xuaW1wb3J0IHsgREVDSVNJT05fUkVTVUxUIH0gZnJvbSAnLi90eXBlcy5qcyc7XG5cbi8vIC0tIFNjb3BlIGFjY2Vzc29yIGhlbHBlcnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZnVuY3Rpb24gZ2V0QXR0YWNoRm4oc2NvcGU6IHVua25vd24pOiAoKHI6IFNjb3BlUmVjb3JkZXIpID0+IHZvaWQpIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgcyA9IHNjb3BlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBpZiAodHlwZW9mIHMuJGF0dGFjaFNjb3BlUmVjb3JkZXIgPT09ICdmdW5jdGlvbicpIHJldHVybiBzLiRhdHRhY2hTY29wZVJlY29yZGVyLmJpbmQocyk7XG4gIGlmICh0eXBlb2Ygcy5hdHRhY2hTY29wZVJlY29yZGVyID09PSAnZnVuY3Rpb24nKSByZXR1cm4gcy5hdHRhY2hTY29wZVJlY29yZGVyLmJpbmQocyk7XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGdldERldGFjaEZuKHNjb3BlOiB1bmtub3duKTogKChpZDogc3RyaW5nKSA9PiB2b2lkKSB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHMgPSBzY29wZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgaWYgKHR5cGVvZiBzLiRkZXRhY2hTY29wZVJlY29yZGVyID09PSAnZnVuY3Rpb24nKSByZXR1cm4gcy4kZGV0YWNoU2NvcGVSZWNvcmRlci5iaW5kKHMpO1xuICBpZiAodHlwZW9mIHMuZGV0YWNoU2NvcGVSZWNvcmRlciA9PT0gJ2Z1bmN0aW9uJykgcmV0dXJuIHMuZGV0YWNoU2NvcGVSZWNvcmRlci5iaW5kKHMpO1xuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBnZXRWYWx1ZUZuKHNjb3BlOiB1bmtub3duKTogKGtleTogc3RyaW5nKSA9PiB1bmtub3duIHtcbiAgY29uc3QgcyA9IHNjb3BlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAvLyBDaGVjayAkZ2V0VmFsdWUgZmlyc3Q6IG9uIFR5cGVkU2NvcGUsIGFjY2Vzc2luZyAuZ2V0VmFsdWUgdHJpZ2dlcnMgYSBzcHVyaW91c1xuICAvLyBvblJlYWQgZm9yIGtleSBcImdldFZhbHVlXCIgdmlhIHRoZSBQcm94eSBnZXQgdHJhcC4gJGdldFZhbHVlIHJvdXRlcyB0aHJvdWdoXG4gIC8vIFNDT1BFX01FVEhPRF9OQU1FUyBhbmQgYXZvaWRzIHRoZSBzdGF0ZS1yZWFkIHBhdGguXG4gIGlmICh0eXBlb2Ygcy4kZ2V0VmFsdWUgPT09ICdmdW5jdGlvbicpIHJldHVybiBzLiRnZXRWYWx1ZS5iaW5kKHMpO1xuICBpZiAodHlwZW9mIHMuZ2V0VmFsdWUgPT09ICdmdW5jdGlvbicpIHJldHVybiBzLmdldFZhbHVlLmJpbmQocyk7XG4gIHJldHVybiAoKSA9PiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGdldFJlZGFjdGVkRm4oc2NvcGU6IHVua25vd24pOiAoa2V5OiBzdHJpbmcpID0+IGJvb2xlYW4ge1xuICBjb25zdCBzID0gc2NvcGUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIC8vIFRyeSAkdG9SYXcoKSBmaXJzdCAoVHlwZWRTY29wZSksIHRoZW4gZGlyZWN0XG4gIGNvbnN0IHJhdyA9IHR5cGVvZiBzLiR0b1JhdyA9PT0gJ2Z1bmN0aW9uJyA/IHMuJHRvUmF3KCkgOiBzO1xuICBjb25zdCByID0gcmF3IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBpZiAodHlwZW9mIHIuZ2V0UmVkYWN0ZWRLZXlzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY29uc3Qga2V5cyA9IHIuZ2V0UmVkYWN0ZWRLZXlzKCkgYXMgU2V0PHN0cmluZz47XG4gICAgcmV0dXJuIChrZXk6IHN0cmluZykgPT4ga2V5cy5oYXMoa2V5KTtcbiAgfVxuICByZXR1cm4gKCkgPT4gZmFsc2U7XG59XG5cbi8vIC0tIGV2YWx1YXRlIGEgc2luZ2xlIHJ1bGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZnVuY3Rpb24gZXZhbHVhdGVSdWxlPFMgZXh0ZW5kcyBvYmplY3Q+KFxuICBzY29wZTogUyxcbiAgcnVsZTogRGVjaWRlUnVsZTxTPixcbiAgaW5kZXg6IG51bWJlcixcbiAgYXR0YWNoRm4/OiAocjogU2NvcGVSZWNvcmRlcikgPT4gdm9pZCxcbiAgZGV0YWNoRm4/OiAoaWQ6IHN0cmluZykgPT4gdm9pZCxcbiAgdmFsdWVGbj86IChrZXk6IHN0cmluZykgPT4gdW5rbm93bixcbiAgcmVkYWN0ZWRGbj86IChrZXk6IHN0cmluZykgPT4gYm9vbGVhbixcbik6IFJ1bGVFdmlkZW5jZSB7XG4gIGlmICh0eXBlb2YgcnVsZS53aGVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gRlVOQ1RJT04gUEFUSDogdGVtcCByZWNvcmRlciBjYXB0dXJlcyByZWFkcyAobGF6eSDigJQgc2tpcCBpZiBubyByZWNvcmRlciBzdXBwb3J0KVxuICAgIGNvbnN0IGhhc1JlY29yZGVyU3VwcG9ydCA9IEJvb2xlYW4oYXR0YWNoRm4pO1xuICAgIGNvbnN0IGNvbGxlY3RvciA9IGhhc1JlY29yZGVyU3VwcG9ydCA/IG5ldyBFdmlkZW5jZUNvbGxlY3RvcigpIDogdW5kZWZpbmVkO1xuICAgIGlmIChjb2xsZWN0b3IgJiYgYXR0YWNoRm4pIGF0dGFjaEZuKGNvbGxlY3Rvcik7XG5cbiAgICBsZXQgbWF0Y2hlZDogYm9vbGVhbjtcbiAgICBsZXQgbWF0Y2hFcnJvcjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHRyeSB7XG4gICAgICBtYXRjaGVkID0gcnVsZS53aGVuKHNjb3BlKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBtYXRjaGVkID0gZmFsc2U7XG4gICAgICAvLyBDYXB0dXJlIHRoZSBlcnJvciBmb3IgZGVidWdnaW5nIOKAlCBzdXJmYWNlIGl0IGluIGV2aWRlbmNlIGluc3RlYWQgb2Ygc3dhbGxvd2luZyBzaWxlbnRseVxuICAgICAgbWF0Y2hFcnJvciA9IGUgaW5zdGFuY2VvZiBFcnJvciA/IGUubWVzc2FnZSA6IFN0cmluZyhlKTtcbiAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xuICAgICAgICBjb25zdCBsYWJlbCA9IHJ1bGUubGFiZWwgPyBgICgnJHtydWxlLmxhYmVsfScpYCA6ICcnO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICBjb25zb2xlLndhcm4oYFtmb290cHJpbnRdIGRlY2lkZSgpIHJ1bGUgJHtpbmRleH0ke2xhYmVsfSB0aHJldyBkdXJpbmcgZXZhbHVhdGlvbjogJHttYXRjaEVycm9yfWApO1xuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAoY29sbGVjdG9yICYmIGRldGFjaEZuKSBkZXRhY2hGbihjb2xsZWN0b3IuaWQpO1xuICAgIH1cblxuICAgIGNvbnN0IGV2aWRlbmNlOiBGdW5jdGlvblJ1bGVFdmlkZW5jZSA9IHtcbiAgICAgIHR5cGU6ICdmdW5jdGlvbicsXG4gICAgICBydWxlSW5kZXg6IGluZGV4LFxuICAgICAgYnJhbmNoOiBydWxlLnRoZW4sXG4gICAgICBtYXRjaGVkLFxuICAgICAgbGFiZWw6IHJ1bGUubGFiZWwsXG4gICAgICAvLyBQYXJ0aWFsIHJlYWRzOiBpZiBydWxlIHRocmV3IGFmdGVyIHNvbWUgZ2V0VmFsdWUoKSBjYWxscywgY29sbGVjdG9yIGhvbGRzIHJlYWRzIHVwIHRvIHRoZSB0aHJvdyBwb2ludFxuICAgICAgaW5wdXRzOiBjb2xsZWN0b3I/LmdldElucHV0cygpID8/IFtdLFxuICAgICAgLi4uKG1hdGNoRXJyb3IgIT09IHVuZGVmaW5lZCAmJiB7IG1hdGNoRXJyb3IgfSksXG4gICAgfTtcbiAgICByZXR1cm4gZXZpZGVuY2U7XG4gIH0gZWxzZSB7XG4gICAgLy8gRklMVEVSIFBBVEg6IHJlYWRzIHZhbHVlcyBkaXJlY3RseSB2aWEgY2FsbGJhY2tzIChubyByZWNvcmRlcik7IGV4Y2VwdGlvbnMgdHJlYXRlZCBhcyBub24tbWF0Y2hcbiAgICBjb25zdCByZXNvbHZlZFZhbHVlRm4gPSB2YWx1ZUZuID8/ICgoKSA9PiB1bmRlZmluZWQpO1xuICAgIGNvbnN0IHJlc29sdmVkUmVkYWN0ZWRGbiA9IHJlZGFjdGVkRm4gPz8gKCgpID0+IGZhbHNlKTtcbiAgICBsZXQgZmlsdGVyTWF0Y2hlZCA9IGZhbHNlO1xuICAgIGxldCBmaWx0ZXJDb25kaXRpb25zOiBGaWx0ZXJDb25kaXRpb25bXSA9IFtdO1xuICAgIGxldCBtYXRjaEVycm9yOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGV2YWx1YXRlRmlsdGVyKHJlc29sdmVkVmFsdWVGbiwgcmVzb2x2ZWRSZWRhY3RlZEZuLCBydWxlLndoZW4gYXMgV2hlcmVGaWx0ZXI8Uz4pO1xuICAgICAgZmlsdGVyTWF0Y2hlZCA9IHJlc3VsdC5tYXRjaGVkO1xuICAgICAgZmlsdGVyQ29uZGl0aW9ucyA9IHJlc3VsdC5jb25kaXRpb25zO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGZpbHRlck1hdGNoZWQgPSBmYWxzZTtcbiAgICAgIGZpbHRlckNvbmRpdGlvbnMgPSBbXTtcbiAgICAgIC8vIENhcHR1cmUgdGhlIGVycm9yIGZvciBkZWJ1Z2dpbmcg4oCUIHN1cmZhY2UgaXQgaW4gZXZpZGVuY2UgaW5zdGVhZCBvZiBzd2FsbG93aW5nIHNpbGVudGx5XG4gICAgICBtYXRjaEVycm9yID0gZSBpbnN0YW5jZW9mIEVycm9yID8gZS5tZXNzYWdlIDogU3RyaW5nKGUpO1xuICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XG4gICAgICAgIGNvbnN0IGxhYmVsID0gcnVsZS5sYWJlbCA/IGAgKCcke3J1bGUubGFiZWx9JylgIDogJyc7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgIGNvbnNvbGUud2FybihgW2Zvb3RwcmludF0gZGVjaWRlKCkgZmlsdGVyIHJ1bGUgJHtpbmRleH0ke2xhYmVsfSB0aHJldyBkdXJpbmcgZXZhbHVhdGlvbjogJHttYXRjaEVycm9yfWApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGV2aWRlbmNlOiBGaWx0ZXJSdWxlRXZpZGVuY2UgPSB7XG4gICAgICB0eXBlOiAnZmlsdGVyJyxcbiAgICAgIHJ1bGVJbmRleDogaW5kZXgsXG4gICAgICBicmFuY2g6IHJ1bGUudGhlbixcbiAgICAgIG1hdGNoZWQ6IGZpbHRlck1hdGNoZWQsXG4gICAgICBsYWJlbDogcnVsZS5sYWJlbCxcbiAgICAgIGNvbmRpdGlvbnM6IGZpbHRlckNvbmRpdGlvbnMsXG4gICAgICAuLi4obWF0Y2hFcnJvciAhPT0gdW5kZWZpbmVkICYmIHsgbWF0Y2hFcnJvciB9KSxcbiAgICB9O1xuICAgIHJldHVybiBldmlkZW5jZTtcbiAgfVxufVxuXG4vLyAtLSBkZWNpZGUoKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKlxuICogRXZhbHVhdGVzIHJ1bGVzIGluIG9yZGVyIChmaXJzdC1tYXRjaCkuIFJldHVybnMgYSBicmFuZGVkIERlY2lzaW9uUmVzdWx0LlxuICpcbiAqIEBwYXJhbSBzY29wZSAtIFR5cGVkU2NvcGUgb3IgU2NvcGVGYWNhZGVcbiAqIEBwYXJhbSBydWxlcyAtIEFycmF5IG9mIERlY2lkZVJ1bGUgKGZ1bmN0aW9uIG9yIGZpbHRlciB3aGVuIGNsYXVzZXMpXG4gKiBAcGFyYW0gZGVmYXVsdEJyYW5jaCAtIEJyYW5jaCBJRCBpZiBubyBydWxlIG1hdGNoZXNcbiAqXG4gKiAqKkVycm9yIGJlaGF2aW9yOioqIElmIGEgYHdoZW5gIGZ1bmN0aW9uIHRocm93cyBkdXJpbmcgZXZhbHVhdGlvbiwgdGhlIHJ1bGUgaXNcbiAqIHRyZWF0ZWQgYXMgbm9uLW1hdGNoaW5nIChgbWF0Y2hlZDogZmFsc2VgKSBhbmQgdGhlIGVycm9yIG1lc3NhZ2UgaXMgY2FwdHVyZWQgaW5cbiAqIGBtYXRjaEVycm9yYCBvbiB0aGF0IHJ1bGUncyBgUnVsZUV2aWRlbmNlYCBlbnRyeS4gRXhlY3V0aW9uIGNvbnRpbnVlcyB3aXRoXG4gKiBzdWJzZXF1ZW50IHJ1bGVzOyBlcnJvcnMgZG8gbm90IHByb3BhZ2F0ZSB0byB0aGUgY2FsbGVyLlxuICpcbiAqICoqRW1wdHktZmlsdGVyIGJlaGF2aW9yIChhbnRpLXZhY3VvdXMtdHJ1dGgpOioqIGEgZmlsdGVyIHJ1bGUgd2hvc2UgYHdoZW5gIGlzXG4gKiBge31gIChubyBldmFsdWFibGUgY29uZGl0aW9ucykgTkVWRVIgbWF0Y2hlcy4gVGhpcyBkZWxpYmVyYXRlbHkgaW52ZXJ0cyB0aGVcbiAqIFByaXNtYS9TUUwgYHdoZXJlOiB7fWAgaW50dWl0aW9uIChcIm1hdGNoIGV2ZXJ5dGhpbmdcIikg4oCUIGEgcnVsZSB0aGF0IGFzc2VydHNcbiAqIG5vdGhpbmcgbXVzdCBub3Qgd2luIGEgYnJhbmNoIG9uIHZhY3VvdXMgdHJ1dGguIFVzZSBgZGVmYXVsdEJyYW5jaGAgZm9yIHRoZVxuICogY2F0Y2gtYWxsIGluc3RlYWQuIFVua25vd24gZmlsdGVyIG9wZXJhdG9ycyBhbHNvIG5ldmVyIG1hdGNoIChkZXYgbW9kZSB3YXJucykuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWNpZGU8UyBleHRlbmRzIG9iamVjdD4oc2NvcGU6IFMsIHJ1bGVzOiBEZWNpZGVSdWxlPFM+W10sIGRlZmF1bHRCcmFuY2g6IHN0cmluZyk6IERlY2lzaW9uUmVzdWx0IHtcbiAgY29uc3QgYXR0YWNoRm4gPSBnZXRBdHRhY2hGbihzY29wZSk7XG4gIGNvbnN0IGRldGFjaEZuID0gZ2V0RGV0YWNoRm4oc2NvcGUpO1xuICBjb25zdCB2YWx1ZUZuID0gZ2V0VmFsdWVGbihzY29wZSk7XG4gIGNvbnN0IHJlZGFjdGVkRm4gPSBnZXRSZWRhY3RlZEZuKHNjb3BlKTtcblxuICBjb25zdCBldmFsdWF0ZWRSdWxlczogUnVsZUV2aWRlbmNlW10gPSBbXTtcblxuICBmb3IgKGNvbnN0IFtpbmRleCwgcnVsZV0gb2YgcnVsZXMuZW50cmllcygpKSB7XG4gICAgY29uc3QgcnVsZUV2aWRlbmNlID0gZXZhbHVhdGVSdWxlKHNjb3BlLCBydWxlLCBpbmRleCwgYXR0YWNoRm4sIGRldGFjaEZuLCB2YWx1ZUZuLCByZWRhY3RlZEZuKTtcbiAgICBldmFsdWF0ZWRSdWxlcy5wdXNoKHJ1bGVFdmlkZW5jZSk7XG5cbiAgICBpZiAocnVsZUV2aWRlbmNlLm1hdGNoZWQpIHtcbiAgICAgIGNvbnN0IGV2aWRlbmNlOiBEZWNpc2lvbkV2aWRlbmNlID0ge1xuICAgICAgICBydWxlczogZXZhbHVhdGVkUnVsZXMsXG4gICAgICAgIGNob3NlbjogcnVsZS50aGVuLFxuICAgICAgICBkZWZhdWx0OiBkZWZhdWx0QnJhbmNoLFxuICAgICAgfTtcbiAgICAgIHJldHVybiB7IGJyYW5jaDogcnVsZS50aGVuLCBbREVDSVNJT05fUkVTVUxUXTogdHJ1ZSwgZXZpZGVuY2UgfTtcbiAgICB9XG4gIH1cblxuICAvLyBEZWZhdWx0OiBubyBydWxlIG1hdGNoZWRcbiAgY29uc3QgZXZpZGVuY2U6IERlY2lzaW9uRXZpZGVuY2UgPSB7XG4gICAgcnVsZXM6IGV2YWx1YXRlZFJ1bGVzLFxuICAgIGNob3NlbjogZGVmYXVsdEJyYW5jaCxcbiAgICBkZWZhdWx0OiBkZWZhdWx0QnJhbmNoLFxuICB9O1xuICByZXR1cm4geyBicmFuY2g6IGRlZmF1bHRCcmFuY2gsIFtERUNJU0lPTl9SRVNVTFRdOiB0cnVlLCBldmlkZW5jZSB9O1xufVxuXG4vLyAtLSBzZWxlY3QoKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKlxuICogRXZhbHVhdGVzIEFMTCBydWxlcyAobm90IGZpcnN0LW1hdGNoKS4gUmV0dXJucyBhIGJyYW5kZWQgU2VsZWN0aW9uUmVzdWx0LlxuICpcbiAqIEBwYXJhbSBzY29wZSAtIFR5cGVkU2NvcGUgb3IgU2NvcGVGYWNhZGVcbiAqIEBwYXJhbSBydWxlcyAtIEFycmF5IG9mIERlY2lkZVJ1bGUgKGZ1bmN0aW9uIG9yIGZpbHRlciB3aGVuIGNsYXVzZXMpXG4gKlxuICogKipFcnJvciBiZWhhdmlvcjoqKiBJZiBhIGB3aGVuYCBmdW5jdGlvbiB0aHJvd3MgZHVyaW5nIGV2YWx1YXRpb24sIHRoZSBydWxlIGlzXG4gKiB0cmVhdGVkIGFzIG5vbi1tYXRjaGluZyAoYG1hdGNoZWQ6IGZhbHNlYCkgYW5kIHRoZSBlcnJvciBtZXNzYWdlIGlzIGNhcHR1cmVkIGluXG4gKiBgbWF0Y2hFcnJvcmAgb24gdGhhdCBydWxlJ3MgYFJ1bGVFdmlkZW5jZWAgZW50cnkuIEV2YWx1YXRpb24gY29udGludWVzIHdpdGhcbiAqIHJlbWFpbmluZyBydWxlczsgZXJyb3JzIGRvIG5vdCBwcm9wYWdhdGUgdG8gdGhlIGNhbGxlci5cbiAqXG4gKiAqKkVtcHR5LWZpbHRlciBiZWhhdmlvciAoYW50aS12YWN1b3VzLXRydXRoKToqKiBhIGZpbHRlciBydWxlIHdob3NlIGB3aGVuYCBpc1xuICogYHt9YCAobm8gZXZhbHVhYmxlIGNvbmRpdGlvbnMpIE5FVkVSIG1hdGNoZXMg4oCUIHNhbWUgcnVsZSBhcyBgZGVjaWRlKClgOyBhblxuICogYWx3YXlzLXNlbGVjdGVkIGJyYW5jaCBtdXN0IGJlIGV4cHJlc3NlZCBleHBsaWNpdGx5LCBub3QgdmlhIGFuIGVtcHR5IGZpbHRlci5cbiAqIFVua25vd24gZmlsdGVyIG9wZXJhdG9ycyBhbHNvIG5ldmVyIG1hdGNoIChkZXYgbW9kZSB3YXJucykuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZWxlY3Q8UyBleHRlbmRzIG9iamVjdD4oc2NvcGU6IFMsIHJ1bGVzOiBEZWNpZGVSdWxlPFM+W10pOiBTZWxlY3Rpb25SZXN1bHQge1xuICBjb25zdCBhdHRhY2hGbiA9IGdldEF0dGFjaEZuKHNjb3BlKTtcbiAgY29uc3QgZGV0YWNoRm4gPSBnZXREZXRhY2hGbihzY29wZSk7XG4gIGNvbnN0IHZhbHVlRm4gPSBnZXRWYWx1ZUZuKHNjb3BlKTtcbiAgY29uc3QgcmVkYWN0ZWRGbiA9IGdldFJlZGFjdGVkRm4oc2NvcGUpO1xuXG4gIGNvbnN0IGV2YWx1YXRlZFJ1bGVzOiBSdWxlRXZpZGVuY2VbXSA9IFtdO1xuICBjb25zdCBzZWxlY3RlZEJyYW5jaGVzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGZvciAoY29uc3QgW2luZGV4LCBydWxlXSBvZiBydWxlcy5lbnRyaWVzKCkpIHtcbiAgICBjb25zdCBydWxlRXZpZGVuY2UgPSBldmFsdWF0ZVJ1bGUoc2NvcGUsIHJ1bGUsIGluZGV4LCBhdHRhY2hGbiwgZGV0YWNoRm4sIHZhbHVlRm4sIHJlZGFjdGVkRm4pO1xuICAgIGV2YWx1YXRlZFJ1bGVzLnB1c2gocnVsZUV2aWRlbmNlKTtcblxuICAgIGlmIChydWxlRXZpZGVuY2UubWF0Y2hlZCkge1xuICAgICAgc2VsZWN0ZWRCcmFuY2hlcy5wdXNoKHJ1bGUudGhlbik7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgZXZpZGVuY2U6IFNlbGVjdGlvbkV2aWRlbmNlID0ge1xuICAgIHJ1bGVzOiBldmFsdWF0ZWRSdWxlcyxcbiAgICBzZWxlY3RlZDogc2VsZWN0ZWRCcmFuY2hlcyxcbiAgfTtcbiAgcmV0dXJuIHsgYnJhbmNoZXM6IHNlbGVjdGVkQnJhbmNoZXMsIFtERUNJU0lPTl9SRVNVTFRdOiB0cnVlLCBldmlkZW5jZSB9O1xufVxuIl19
|
|
233
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjaWRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9kZWNpZGUvZGVjaWRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7R0FTRztBQUVILE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUV2RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBY2xELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFN0MsK0VBQStFO0FBRS9FLFNBQVMsV0FBVyxDQUFDLEtBQWM7SUFDakMsTUFBTSxDQUFDLEdBQUcsS0FBZ0MsQ0FBQztJQUMzQyxJQUFJLE9BQU8sQ0FBQyxDQUFDLG9CQUFvQixLQUFLLFVBQVU7UUFBRSxPQUFPLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDeEYsSUFBSSxPQUFPLENBQUMsQ0FBQyxtQkFBbUIsS0FBSyxVQUFVO1FBQUUsT0FBTyxDQUFDLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RGLE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUM7QUFFRCxTQUFTLFdBQVcsQ0FBQyxLQUFjO0lBQ2pDLE1BQU0sQ0FBQyxHQUFHLEtBQWdDLENBQUM7SUFDM0MsSUFBSSxPQUFPLENBQUMsQ0FBQyxvQkFBb0IsS0FBSyxVQUFVO1FBQUUsT0FBTyxDQUFDLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hGLElBQUksT0FBTyxDQUFDLENBQUMsbUJBQW1CLEtBQUssVUFBVTtRQUFFLE9BQU8sQ0FBQyxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0RixPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFD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QUFFLElBQUksRUFBRSxRQUFRLEVBQUUsQ0FBQztBQUMzRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBkZWNpZGUvZGVjaWRlIC0tIENvcmUgZGVjaWRlKCkgYW5kIHNlbGVjdCgpIGhlbHBlciBmdW5jdGlvbnMuXG4gKlxuICogZGVjaWRlKCkgZXZhbHVhdGVzIHJ1bGVzIGluIG9yZGVyIChmaXJzdC1tYXRjaCkgYW5kIHJldHVybnMgYSBEZWNpc2lvblJlc3VsdC5cbiAqIHNlbGVjdCgpIGV2YWx1YXRlcyBBTEwgcnVsZXMgYW5kIHJldHVybnMgYSBTZWxlY3Rpb25SZXN1bHQgd2l0aCBhbGwgbWF0Y2hlcy5cbiAqXG4gKiBFYWNoIHJ1bGUncyBgd2hlbmAgY2FuIGJlOlxuICogLSBBIGZ1bmN0aW9uOiAocykgPT4gcy5jcmVkaXRTY29yZSA+IDcwMCAgKGF1dG8tY2FwdHVyZXMgcmVhZHMgdmlhIHRlbXAgcmVjb3JkZXIpXG4gKiAtIEEgZmlsdGVyOiAgIHsgY3JlZGl0U2NvcmU6IHsgZ3Q6IDcwMCB9IH0gKGNhcHR1cmVzIHJlYWRzICsgb3BlcmF0b3JzICsgdGhyZXNob2xkcylcbiAqL1xuXG5pbXBvcnQgeyBpc0Rldk1vZGUgfSBmcm9tICcuLi9zY29wZS9kZXRlY3RDaXJjdWxhci5qcyc7XG5pbXBvcnQgdHlwZSB7IFNjb3BlUmVjb3JkZXIgfSBmcm9tICcuLi9zY29wZS90eXBlcy5qcyc7XG5pbXBvcnQgeyBldmFsdWF0ZUZpbHRlciB9IGZyb20gJy4vZXZhbHVhdG9yLmpzJztcbmltcG9ydCB7IEV2aWRlbmNlQ29sbGVjdG9yIH0gZnJvbSAnLi9ldmlkZW5jZS5qcyc7XG5pbXBvcnQgdHlwZSB7XG4gIERlY2lkZVJ1bGUsXG4gIERlY2lzaW9uRXZpZGVuY2UsXG4gIERlY2lzaW9uUmVzdWx0LFxuICBEZWZhdWx0QnJhbmNoLFxuICBGaWx0ZXJDb25kaXRpb24sXG4gIEZpbHRlclJ1bGVFdmlkZW5jZSxcbiAgRnVuY3Rpb25SdWxlRXZpZGVuY2UsXG4gIFJ1bGVFdmlkZW5jZSxcbiAgU2VsZWN0aW9uRXZpZGVuY2UsXG4gIFNlbGVjdGlvblJlc3VsdCxcbiAgV2hlcmVGaWx0ZXIsXG59IGZyb20gJy4vdHlwZXMuanMnO1xuaW1wb3J0IHsgREVDSVNJT05fUkVTVUxUIH0gZnJvbSAnLi90eXBlcy5qcyc7XG5cbi8vIC0tIFNjb3BlIGFjY2Vzc29yIGhlbHBlcnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZnVuY3Rpb24gZ2V0QXR0YWNoRm4oc2NvcGU6IHVua25vd24pOiAoKHI6IFNjb3BlUmVjb3JkZXIpID0+IHZvaWQpIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgcyA9IHNjb3BlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBpZiAodHlwZW9mIHMuJGF0dGFjaFNjb3BlUmVjb3JkZXIgPT09ICdmdW5jdGlvbicpIHJldHVybiBzLiRhdHRhY2hTY29wZVJlY29yZGVyLmJpbmQocyk7XG4gIGlmICh0eXBlb2Ygcy5hdHRhY2hTY29wZVJlY29yZGVyID09PSAnZnVuY3Rpb24nKSByZXR1cm4gcy5hdHRhY2hTY29wZVJlY29yZGVyLmJpbmQocyk7XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGdldERldGFjaEZuKHNjb3BlOiB1bmtub3duKTogKChpZDogc3RyaW5nKSA9PiB2b2lkKSB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHMgPSBzY29wZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgaWYgKHR5cGVvZiBzLiRkZXRhY2hTY29wZVJlY29yZGVyID09PSAnZnVuY3Rpb24nKSByZXR1cm4gcy4kZGV0YWNoU2NvcGVSZWNvcmRlci5iaW5kKHMpO1xuICBpZiAodHlwZW9mIHMuZGV0YWNoU2NvcGVSZWNvcmRlciA9PT0gJ2Z1bmN0aW9uJykgcmV0dXJuIHMuZGV0YWNoU2NvcGVSZWNvcmRlci5iaW5kKHMpO1xuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBnZXRWYWx1ZUZuKHNjb3BlOiB1bmtub3duKTogKGtleTogc3RyaW5nKSA9PiB1bmtub3duIHtcbiAgY29uc3QgcyA9IHNjb3BlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAvLyBDaGVjayAkZ2V0VmFsdWUgZmlyc3Q6IG9uIFR5cGVkU2NvcGUsIGFjY2Vzc2luZyAuZ2V0VmFsdWUgdHJpZ2dlcnMgYSBzcHVyaW91c1xuICAvLyBvblJlYWQgZm9yIGtleSBcImdldFZhbHVlXCIgdmlhIHRoZSBQcm94eSBnZXQgdHJhcC4gJGdldFZhbHVlIHJvdXRlcyB0aHJvdWdoXG4gIC8vIFNDT1BFX01FVEhPRF9OQU1FUyBhbmQgYXZvaWRzIHRoZSBzdGF0ZS1yZWFkIHBhdGguXG4gIGlmICh0eXBlb2Ygcy4kZ2V0VmFsdWUgPT09ICdmdW5jdGlvbicpIHJldHVybiBzLiRnZXRWYWx1ZS5iaW5kKHMpO1xuICBpZiAodHlwZW9mIHMuZ2V0VmFsdWUgPT09ICdmdW5jdGlvbicpIHJldHVybiBzLmdldFZhbHVlLmJpbmQocyk7XG4gIHJldHVybiAoKSA9PiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGdldFJlZGFjdGVkRm4oc2NvcGU6IHVua25vd24pOiAoa2V5OiBzdHJpbmcpID0+IGJvb2xlYW4ge1xuICBjb25zdCBzID0gc2NvcGUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIC8vIFRyeSAkdG9SYXcoKSBmaXJzdCAoVHlwZWRTY29wZSksIHRoZW4gZGlyZWN0XG4gIGNvbnN0IHJhdyA9IHR5cGVvZiBzLiR0b1JhdyA9PT0gJ2Z1bmN0aW9uJyA/IHMuJHRvUmF3KCkgOiBzO1xuICBjb25zdCByID0gcmF3IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBpZiAodHlwZW9mIHIuZ2V0UmVkYWN0ZWRLZXlzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY29uc3Qga2V5cyA9IHIuZ2V0UmVkYWN0ZWRLZXlzKCkgYXMgU2V0PHN0cmluZz47XG4gICAgcmV0dXJuIChrZXk6IHN0cmluZykgPT4ga2V5cy5oYXMoa2V5KTtcbiAgfVxuICByZXR1cm4gKCkgPT4gZmFsc2U7XG59XG5cbi8vIC0tIGV2YWx1YXRlIGEgc2luZ2xlIHJ1bGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZnVuY3Rpb24gZXZhbHVhdGVSdWxlPFMgZXh0ZW5kcyBvYmplY3Q+KFxuICBzY29wZTogUyxcbiAgcnVsZTogRGVjaWRlUnVsZTxTPixcbiAgaW5kZXg6IG51bWJlcixcbiAgYXR0YWNoRm4/OiAocjogU2NvcGVSZWNvcmRlcikgPT4gdm9pZCxcbiAgZGV0YWNoRm4/OiAoaWQ6IHN0cmluZykgPT4gdm9pZCxcbiAgdmFsdWVGbj86IChrZXk6IHN0cmluZykgPT4gdW5rbm93bixcbiAgcmVkYWN0ZWRGbj86IChrZXk6IHN0cmluZykgPT4gYm9vbGVhbixcbik6IFJ1bGVFdmlkZW5jZSB7XG4gIGlmICh0eXBlb2YgcnVsZS53aGVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gRlVOQ1RJT04gUEFUSDogdGVtcCByZWNvcmRlciBjYXB0dXJlcyByZWFkcyAobGF6eSDigJQgc2tpcCBpZiBubyByZWNvcmRlciBzdXBwb3J0KVxuICAgIGNvbnN0IGhhc1JlY29yZGVyU3VwcG9ydCA9IEJvb2xlYW4oYXR0YWNoRm4pO1xuICAgIGNvbnN0IGNvbGxlY3RvciA9IGhhc1JlY29yZGVyU3VwcG9ydCA/IG5ldyBFdmlkZW5jZUNvbGxlY3RvcigpIDogdW5kZWZpbmVkO1xuICAgIGlmIChjb2xsZWN0b3IgJiYgYXR0YWNoRm4pIGF0dGFjaEZuKGNvbGxlY3Rvcik7XG5cbiAgICBsZXQgbWF0Y2hlZDogYm9vbGVhbjtcbiAgICBsZXQgbWF0Y2hFcnJvcjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHRyeSB7XG4gICAgICBtYXRjaGVkID0gcnVsZS53aGVuKHNjb3BlKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBtYXRjaGVkID0gZmFsc2U7XG4gICAgICAvLyBDYXB0dXJlIHRoZSBlcnJvciBmb3IgZGVidWdnaW5nIOKAlCBzdXJmYWNlIGl0IGluIGV2aWRlbmNlIGluc3RlYWQgb2Ygc3dhbGxvd2luZyBzaWxlbnRseVxuICAgICAgbWF0Y2hFcnJvciA9IGUgaW5zdGFuY2VvZiBFcnJvciA/IGUubWVzc2FnZSA6IFN0cmluZyhlKTtcbiAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xuICAgICAgICBjb25zdCBsYWJlbCA9IHJ1bGUubGFiZWwgPyBgICgnJHtydWxlLmxhYmVsfScpYCA6ICcnO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICBjb25zb2xlLndhcm4oYFtmb290cHJpbnRdIGRlY2lkZSgpIHJ1bGUgJHtpbmRleH0ke2xhYmVsfSB0aHJldyBkdXJpbmcgZXZhbHVhdGlvbjogJHttYXRjaEVycm9yfWApO1xuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAoY29sbGVjdG9yICYmIGRldGFjaEZuKSBkZXRhY2hGbihjb2xsZWN0b3IuaWQpO1xuICAgIH1cblxuICAgIGNvbnN0IGV2aWRlbmNlOiBGdW5jdGlvblJ1bGVFdmlkZW5jZSA9IHtcbiAgICAgIHR5cGU6ICdmdW5jdGlvbicsXG4gICAgICBydWxlSW5kZXg6IGluZGV4LFxuICAgICAgYnJhbmNoOiBydWxlLnRoZW4sXG4gICAgICBtYXRjaGVkLFxuICAgICAgbGFiZWw6IHJ1bGUubGFiZWwsXG4gICAgICAvLyBQYXJ0aWFsIHJlYWRzOiBpZiBydWxlIHRocmV3IGFmdGVyIHNvbWUgZ2V0VmFsdWUoKSBjYWxscywgY29sbGVjdG9yIGhvbGRzIHJlYWRzIHVwIHRvIHRoZSB0aHJvdyBwb2ludFxuICAgICAgaW5wdXRzOiBjb2xsZWN0b3I/LmdldElucHV0cygpID8/IFtdLFxuICAgICAgLi4uKG1hdGNoRXJyb3IgIT09IHVuZGVmaW5lZCAmJiB7IG1hdGNoRXJyb3IgfSksXG4gICAgfTtcbiAgICByZXR1cm4gZXZpZGVuY2U7XG4gIH0gZWxzZSB7XG4gICAgLy8gRklMVEVSIFBBVEg6IHJlYWRzIHZhbHVlcyBkaXJlY3RseSB2aWEgY2FsbGJhY2tzIChubyByZWNvcmRlcik7IGV4Y2VwdGlvbnMgdHJlYXRlZCBhcyBub24tbWF0Y2hcbiAgICBjb25zdCByZXNvbHZlZFZhbHVlRm4gPSB2YWx1ZUZuID8/ICgoKSA9PiB1bmRlZmluZWQpO1xuICAgIGNvbnN0IHJlc29sdmVkUmVkYWN0ZWRGbiA9IHJlZGFjdGVkRm4gPz8gKCgpID0+IGZhbHNlKTtcbiAgICBsZXQgZmlsdGVyTWF0Y2hlZCA9IGZhbHNlO1xuICAgIGxldCBmaWx0ZXJDb25kaXRpb25zOiBGaWx0ZXJDb25kaXRpb25bXSA9IFtdO1xuICAgIGxldCBtYXRjaEVycm9yOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGV2YWx1YXRlRmlsdGVyKHJlc29sdmVkVmFsdWVGbiwgcmVzb2x2ZWRSZWRhY3RlZEZuLCBydWxlLndoZW4gYXMgV2hlcmVGaWx0ZXI8Uz4pO1xuICAgICAgZmlsdGVyTWF0Y2hlZCA9IHJlc3VsdC5tYXRjaGVkO1xuICAgICAgZmlsdGVyQ29uZGl0aW9ucyA9IHJlc3VsdC5jb25kaXRpb25zO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGZpbHRlck1hdGNoZWQgPSBmYWxzZTtcbiAgICAgIGZpbHRlckNvbmRpdGlvbnMgPSBbXTtcbiAgICAgIC8vIENhcHR1cmUgdGhlIGVycm9yIGZvciBkZWJ1Z2dpbmcg4oCUIHN1cmZhY2UgaXQgaW4gZXZpZGVuY2UgaW5zdGVhZCBvZiBzd2FsbG93aW5nIHNpbGVudGx5XG4gICAgICBtYXRjaEVycm9yID0gZSBpbnN0YW5jZW9mIEVycm9yID8gZS5tZXNzYWdlIDogU3RyaW5nKGUpO1xuICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XG4gICAgICAgIGNvbnN0IGxhYmVsID0gcnVsZS5sYWJlbCA/IGAgKCcke3J1bGUubGFiZWx9JylgIDogJyc7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgIGNvbnNvbGUud2FybihgW2Zvb3RwcmludF0gZGVjaWRlKCkgZmlsdGVyIHJ1bGUgJHtpbmRleH0ke2xhYmVsfSB0aHJldyBkdXJpbmcgZXZhbHVhdGlvbjogJHttYXRjaEVycm9yfWApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGV2aWRlbmNlOiBGaWx0ZXJSdWxlRXZpZGVuY2UgPSB7XG4gICAgICB0eXBlOiAnZmlsdGVyJyxcbiAgICAgIHJ1bGVJbmRleDogaW5kZXgsXG4gICAgICBicmFuY2g6IHJ1bGUudGhlbixcbiAgICAgIG1hdGNoZWQ6IGZpbHRlck1hdGNoZWQsXG4gICAgICBsYWJlbDogcnVsZS5sYWJlbCxcbiAgICAgIGNvbmRpdGlvbnM6IGZpbHRlckNvbmRpdGlvbnMsXG4gICAgICAuLi4obWF0Y2hFcnJvciAhPT0gdW5kZWZpbmVkICYmIHsgbWF0Y2hFcnJvciB9KSxcbiAgICB9O1xuICAgIHJldHVybiBldmlkZW5jZTtcbiAgfVxufVxuXG4vLyAtLSBkZWZhdWx0IGJyYW5jaCBub3JtYWxpemF0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKlxuICogQ29sbGFwc2VzIGJvdGgge0BsaW5rIERlZmF1bHRCcmFuY2h9IGZvcm1zIHRvIG9uZSBzaGFwZSwgb25jZSwgYXQgdGhlIHRvcCBvZlxuICogYGRlY2lkZSgpYC4gQSBiYXJlIHN0cmluZyB5aWVsZHMgYGxhYmVsOiB1bmRlZmluZWRgLCB3aGljaCBldmVyeSBkb3duc3RyZWFtXG4gKiBzcHJlYWQgdGhlbiBvbWl0cyDigJQgc28gdGhlIHN0cmluZyBjYWxsIHNpdGUgcHJvZHVjZXMgZXhhY3RseSB0aGUgZXZpZGVuY2UgaXRcbiAqIHByb2R1Y2VkIGJlZm9yZSB0aGlzIHBhcmFtZXRlciB3YXMgd2lkZW5lZC5cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplRGVmYXVsdEJyYW5jaChkZWZhdWx0QnJhbmNoOiBEZWZhdWx0QnJhbmNoKTogeyBicmFuY2g6IHN0cmluZzsgbGFiZWw/OiBzdHJpbmcgfSB7XG4gIHJldHVybiB0eXBlb2YgZGVmYXVsdEJyYW5jaCA9PT0gJ3N0cmluZycgPyB7IGJyYW5jaDogZGVmYXVsdEJyYW5jaCB9IDogZGVmYXVsdEJyYW5jaDtcbn1cblxuLy8gLS0gZGVjaWRlKCkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIEV2YWx1YXRlcyBydWxlcyBpbiBvcmRlciAoZmlyc3QtbWF0Y2gpLiBSZXR1cm5zIGEgYnJhbmRlZCBEZWNpc2lvblJlc3VsdC5cbiAqXG4gKiBAcGFyYW0gc2NvcGUgLSBUeXBlZFNjb3BlIG9yIFNjb3BlRmFjYWRlXG4gKiBAcGFyYW0gcnVsZXMgLSBBcnJheSBvZiBEZWNpZGVSdWxlIChmdW5jdGlvbiBvciBmaWx0ZXIgd2hlbiBjbGF1c2VzKVxuICogQHBhcmFtIGRlZmF1bHRCcmFuY2ggLSBCcmFuY2ggdGFrZW4gd2hlbiBubyBydWxlIG1hdGNoZXMuIEVpdGhlciB0aGUgYnJhbmNoXG4gKiAgIGlkIChgJ3JlamVjdGVkJ2ApIG9yIHRoZSBpZCBwbHVzIHdoYXQgZmFsbGluZyBiYWNrIHRvIGl0IE1FQU5TXG4gKiAgIChgeyBicmFuY2g6ICdyZWplY3RlZCcsIGxhYmVsOiAnTm8gcnVsZSBmaXJlZCcgfWApLiBUaGUgbGFiZWwgbGFuZHMgb25cbiAqICAgYGV2aWRlbmNlLmRlZmF1bHRMYWJlbGAg4oCUIHRoZSBkZWZhdWx0IGlzIGNob3NlbiBieSBubyBydWxlLCBzbyBpdCBpcyB0aGVcbiAqICAgb25lIGJyYW5jaCB0aGF0IGBydWxlc1tdLmxhYmVsYCBjYW4gbmV2ZXIgZGVzY3JpYmUuXG4gKlxuICogKipFcnJvciBiZWhhdmlvcjoqKiBJZiBhIGB3aGVuYCBmdW5jdGlvbiB0aHJvd3MgZHVyaW5nIGV2YWx1YXRpb24sIHRoZSBydWxlIGlzXG4gKiB0cmVhdGVkIGFzIG5vbi1tYXRjaGluZyAoYG1hdGNoZWQ6IGZhbHNlYCkgYW5kIHRoZSBlcnJvciBtZXNzYWdlIGlzIGNhcHR1cmVkIGluXG4gKiBgbWF0Y2hFcnJvcmAgb24gdGhhdCBydWxlJ3MgYFJ1bGVFdmlkZW5jZWAgZW50cnkuIEV4ZWN1dGlvbiBjb250aW51ZXMgd2l0aFxuICogc3Vic2VxdWVudCBydWxlczsgZXJyb3JzIGRvIG5vdCBwcm9wYWdhdGUgdG8gdGhlIGNhbGxlci5cbiAqXG4gKiAqKkVtcHR5LWZpbHRlciBiZWhhdmlvciAoYW50aS12YWN1b3VzLXRydXRoKToqKiBhIGZpbHRlciBydWxlIHdob3NlIGB3aGVuYCBpc1xuICogYHt9YCAobm8gZXZhbHVhYmxlIGNvbmRpdGlvbnMpIE5FVkVSIG1hdGNoZXMuIFRoaXMgZGVsaWJlcmF0ZWx5IGludmVydHMgdGhlXG4gKiBQcmlzbWEvU1FMIGB3aGVyZToge31gIGludHVpdGlvbiAoXCJtYXRjaCBldmVyeXRoaW5nXCIpIOKAlCBhIHJ1bGUgdGhhdCBhc3NlcnRzXG4gKiBub3RoaW5nIG11c3Qgbm90IHdpbiBhIGJyYW5jaCBvbiB2YWN1b3VzIHRydXRoLiBVc2UgYGRlZmF1bHRCcmFuY2hgIGZvciB0aGVcbiAqIGNhdGNoLWFsbCBpbnN0ZWFkLiBVbmtub3duIGZpbHRlciBvcGVyYXRvcnMgYWxzbyBuZXZlciBtYXRjaCAoZGV2IG1vZGUgd2FybnMpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVjaWRlPFMgZXh0ZW5kcyBvYmplY3Q+KFxuICBzY29wZTogUyxcbiAgcnVsZXM6IERlY2lkZVJ1bGU8Uz5bXSxcbiAgZGVmYXVsdEJyYW5jaDogRGVmYXVsdEJyYW5jaCxcbik6IERlY2lzaW9uUmVzdWx0IHtcbiAgY29uc3QgYXR0YWNoRm4gPSBnZXRBdHRhY2hGbihzY29wZSk7XG4gIGNvbnN0IGRldGFjaEZuID0gZ2V0RGV0YWNoRm4oc2NvcGUpO1xuICBjb25zdCB2YWx1ZUZuID0gZ2V0VmFsdWVGbihzY29wZSk7XG4gIGNvbnN0IHJlZGFjdGVkRm4gPSBnZXRSZWRhY3RlZEZuKHNjb3BlKTtcblxuICBjb25zdCB7IGJyYW5jaDogZGVmYXVsdEJyYW5jaElkLCBsYWJlbDogZGVmYXVsdExhYmVsIH0gPSBub3JtYWxpemVEZWZhdWx0QnJhbmNoKGRlZmF1bHRCcmFuY2gpO1xuICAvLyBEZWNsYXJlZCBvbmNlLCBzcHJlYWQgaW50byBCT1RIIGV4aXRzIGJlbG93IOKAlCBkZWxpYmVyYXRlbHkuIEEgZGVmYXVsdCdzXG4gIC8vIG1lYW5pbmcgaXMgYSBwcm9wZXJ0eSBvZiB0aGUgREVDSURFUiwgbm90IG9mIHRoZSBydW46IGl0IG11c3QgYmUgaW4gdGhlXG4gIC8vIGV2aWRlbmNlIG9mIHRoZSBydW4gd2hlcmUgYSBydWxlIHdvbiBqdXN0IGFzIG11Y2ggYXMgaW4gdGhlIHJ1biB0aGF0IGZlbGxcbiAgLy8gdGhyb3VnaC4gRW1pdCBpdCBvbmx5IG9uIHRoZSBmYWxsdGhyb3VnaCBhbmQgYW55IGNvbnN1bWVyIGhhcnZlc3RpbmcgYnJhbmNoXG4gIC8vIG1lYW5pbmdzIHdvdWxkIHdhdGNoIHRoZW0gYXBwZWFyIGFuZCBkaXNhcHBlYXIgd2l0aCB0aGUgZGF0YS5cbiAgY29uc3QgZGVmYXVsdE1lYW5pbmcgPSBkZWZhdWx0TGFiZWwgIT09IHVuZGVmaW5lZCA/IHsgZGVmYXVsdExhYmVsIH0gOiB1bmRlZmluZWQ7XG5cbiAgY29uc3QgZXZhbHVhdGVkUnVsZXM6IFJ1bGVFdmlkZW5jZVtdID0gW107XG5cbiAgZm9yIChjb25zdCBbaW5kZXgsIHJ1bGVdIG9mIHJ1bGVzLmVudHJpZXMoKSkge1xuICAgIGNvbnN0IHJ1bGVFdmlkZW5jZSA9IGV2YWx1YXRlUnVsZShzY29wZSwgcnVsZSwgaW5kZXgsIGF0dGFjaEZuLCBkZXRhY2hGbiwgdmFsdWVGbiwgcmVkYWN0ZWRGbik7XG4gICAgZXZhbHVhdGVkUnVsZXMucHVzaChydWxlRXZpZGVuY2UpO1xuXG4gICAgaWYgKHJ1bGVFdmlkZW5jZS5tYXRjaGVkKSB7XG4gICAgICBjb25zdCBldmlkZW5jZTogRGVjaXNpb25FdmlkZW5jZSA9IHtcbiAgICAgICAgcnVsZXM6IGV2YWx1YXRlZFJ1bGVzLFxuICAgICAgICBjaG9zZW46IHJ1bGUudGhlbixcbiAgICAgICAgZGVmYXVsdDogZGVmYXVsdEJyYW5jaElkLFxuICAgICAgICAuLi5kZWZhdWx0TWVhbmluZyxcbiAgICAgIH07XG4gICAgICByZXR1cm4geyBicmFuY2g6IHJ1bGUudGhlbiwgW0RFQ0lTSU9OX1JFU1VMVF06IHRydWUsIGV2aWRlbmNlIH07XG4gICAgfVxuICB9XG5cbiAgLy8gRGVmYXVsdDogbm8gcnVsZSBtYXRjaGVkXG4gIGNvbnN0IGV2aWRlbmNlOiBEZWNpc2lvbkV2aWRlbmNlID0ge1xuICAgIHJ1bGVzOiBldmFsdWF0ZWRSdWxlcyxcbiAgICBjaG9zZW46IGRlZmF1bHRCcmFuY2hJZCxcbiAgICBkZWZhdWx0OiBkZWZhdWx0QnJhbmNoSWQsXG4gICAgLi4uZGVmYXVsdE1lYW5pbmcsXG4gIH07XG4gIHJldHVybiB7IGJyYW5jaDogZGVmYXVsdEJyYW5jaElkLCBbREVDSVNJT05fUkVTVUxUXTogdHJ1ZSwgZXZpZGVuY2UgfTtcbn1cblxuLy8gLS0gc2VsZWN0KCkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIEV2YWx1YXRlcyBBTEwgcnVsZXMgKG5vdCBmaXJzdC1tYXRjaCkuIFJldHVybnMgYSBicmFuZGVkIFNlbGVjdGlvblJlc3VsdC5cbiAqXG4gKiBAcGFyYW0gc2NvcGUgLSBUeXBlZFNjb3BlIG9yIFNjb3BlRmFjYWRlXG4gKiBAcGFyYW0gcnVsZXMgLSBBcnJheSBvZiBEZWNpZGVSdWxlIChmdW5jdGlvbiBvciBmaWx0ZXIgd2hlbiBjbGF1c2VzKVxuICpcbiAqICoqRXJyb3IgYmVoYXZpb3I6KiogSWYgYSBgd2hlbmAgZnVuY3Rpb24gdGhyb3dzIGR1cmluZyBldmFsdWF0aW9uLCB0aGUgcnVsZSBpc1xuICogdHJlYXRlZCBhcyBub24tbWF0Y2hpbmcgKGBtYXRjaGVkOiBmYWxzZWApIGFuZCB0aGUgZXJyb3IgbWVzc2FnZSBpcyBjYXB0dXJlZCBpblxuICogYG1hdGNoRXJyb3JgIG9uIHRoYXQgcnVsZSdzIGBSdWxlRXZpZGVuY2VgIGVudHJ5LiBFdmFsdWF0aW9uIGNvbnRpbnVlcyB3aXRoXG4gKiByZW1haW5pbmcgcnVsZXM7IGVycm9ycyBkbyBub3QgcHJvcGFnYXRlIHRvIHRoZSBjYWxsZXIuXG4gKlxuICogKipFbXB0eS1maWx0ZXIgYmVoYXZpb3IgKGFudGktdmFjdW91cy10cnV0aCk6KiogYSBmaWx0ZXIgcnVsZSB3aG9zZSBgd2hlbmAgaXNcbiAqIGB7fWAgKG5vIGV2YWx1YWJsZSBjb25kaXRpb25zKSBORVZFUiBtYXRjaGVzIOKAlCBzYW1lIHJ1bGUgYXMgYGRlY2lkZSgpYDsgYW5cbiAqIGFsd2F5cy1zZWxlY3RlZCBicmFuY2ggbXVzdCBiZSBleHByZXNzZWQgZXhwbGljaXRseSwgbm90IHZpYSBhbiBlbXB0eSBmaWx0ZXIuXG4gKiBVbmtub3duIGZpbHRlciBvcGVyYXRvcnMgYWxzbyBuZXZlciBtYXRjaCAoZGV2IG1vZGUgd2FybnMpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VsZWN0PFMgZXh0ZW5kcyBvYmplY3Q+KHNjb3BlOiBTLCBydWxlczogRGVjaWRlUnVsZTxTPltdKTogU2VsZWN0aW9uUmVzdWx0IHtcbiAgY29uc3QgYXR0YWNoRm4gPSBnZXRBdHRhY2hGbihzY29wZSk7XG4gIGNvbnN0IGRldGFjaEZuID0gZ2V0RGV0YWNoRm4oc2NvcGUpO1xuICBjb25zdCB2YWx1ZUZuID0gZ2V0VmFsdWVGbihzY29wZSk7XG4gIGNvbnN0IHJlZGFjdGVkRm4gPSBnZXRSZWRhY3RlZEZuKHNjb3BlKTtcblxuICBjb25zdCBldmFsdWF0ZWRSdWxlczogUnVsZUV2aWRlbmNlW10gPSBbXTtcbiAgY29uc3Qgc2VsZWN0ZWRCcmFuY2hlczogc3RyaW5nW10gPSBbXTtcblxuICBmb3IgKGNvbnN0IFtpbmRleCwgcnVsZV0gb2YgcnVsZXMuZW50cmllcygpKSB7XG4gICAgY29uc3QgcnVsZUV2aWRlbmNlID0gZXZhbHVhdGVSdWxlKHNjb3BlLCBydWxlLCBpbmRleCwgYXR0YWNoRm4sIGRldGFjaEZuLCB2YWx1ZUZuLCByZWRhY3RlZEZuKTtcbiAgICBldmFsdWF0ZWRSdWxlcy5wdXNoKHJ1bGVFdmlkZW5jZSk7XG5cbiAgICBpZiAocnVsZUV2aWRlbmNlLm1hdGNoZWQpIHtcbiAgICAgIHNlbGVjdGVkQnJhbmNoZXMucHVzaChydWxlLnRoZW4pO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGV2aWRlbmNlOiBTZWxlY3Rpb25FdmlkZW5jZSA9IHtcbiAgICBydWxlczogZXZhbHVhdGVkUnVsZXMsXG4gICAgc2VsZWN0ZWQ6IHNlbGVjdGVkQnJhbmNoZXMsXG4gIH07XG4gIHJldHVybiB7IGJyYW5jaGVzOiBzZWxlY3RlZEJyYW5jaGVzLCBbREVDSVNJT05fUkVTVUxUXTogdHJ1ZSwgZXZpZGVuY2UgfTtcbn1cbiJdfQ==
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* - Function when: (s) => s.creditScore > 700 (auto-captures reads)
|
|
6
6
|
* - Filter when: { creditScore: { gt: 700 } } (captures reads + operators + thresholds)
|
|
7
7
|
*/
|
|
8
|
-
export type { DecideRule, DecisionEvidence, DecisionResult, FilterCondition, FilterOps, FilterRuleEvidence, FunctionRuleEvidence, ReadInput, RuleEvidence, SelectionEvidence, SelectionResult, WhenClause, WhereFilter, } from './types.js';
|
|
8
|
+
export type { DecideRule, DecisionEvidence, DecisionResult, DefaultBranch, FilterCondition, FilterOps, FilterRuleEvidence, FunctionRuleEvidence, ReadInput, RuleEvidence, SelectionEvidence, SelectionResult, WhenClause, WhereFilter, } from './types.js';
|
|
9
9
|
export { DECISION_RESULT } from './types.js';
|
|
10
10
|
export { decide, select } from './decide.js';
|
|
11
11
|
export { evaluateFilter } from './evaluator.js';
|
|
@@ -13,4 +13,4 @@ export { decide, select } from './decide.js';
|
|
|
13
13
|
export { evaluateFilter } from './evaluator.js';
|
|
14
14
|
// Evidence collector (for advanced use)
|
|
15
15
|
export { EvidenceCollector } from './evidence.js';
|
|
16
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2RlY2lkZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFvQkgsb0JBQW9CO0FBQ3BCLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFN0MsaUJBQWlCO0FBQ2pCLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRTdDLCtCQUErQjtBQUMvQixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFaEQsd0NBQXdDO0FBQ3hDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogZGVjaWRlLyAtLSBEZWNpc2lvbiByZWFzb25pbmcgY2FwdHVyZSBmb3IgZm9vdHByaW50anMuXG4gKlxuICogZGVjaWRlKCkgYW5kIHNlbGVjdCgpIGF1dG8tY2FwdHVyZSBldmlkZW5jZSBmcm9tIGRlY2lkZXIvc2VsZWN0b3IgZnVuY3Rpb25zOlxuICogLSBGdW5jdGlvbiB3aGVuOiAocykgPT4gcy5jcmVkaXRTY29yZSA+IDcwMCAgKGF1dG8tY2FwdHVyZXMgcmVhZHMpXG4gKiAtIEZpbHRlciB3aGVuOiAgeyBjcmVkaXRTY29yZTogeyBndDogNzAwIH0gfSAgKGNhcHR1cmVzIHJlYWRzICsgb3BlcmF0b3JzICsgdGhyZXNob2xkcylcbiAqL1xuXG4vLyBUeXBlc1xuZXhwb3J0IHR5cGUge1xuICBEZWNpZGVSdWxlLFxuICBEZWNpc2lvbkV2aWRlbmNlLFxuICBEZWNpc2lvblJlc3VsdCxcbiAgRGVmYXVsdEJyYW5jaCxcbiAgRmlsdGVyQ29uZGl0aW9uLFxuICBGaWx0ZXJPcHMsXG4gIEZpbHRlclJ1bGVFdmlkZW5jZSxcbiAgRnVuY3Rpb25SdWxlRXZpZGVuY2UsXG4gIFJlYWRJbnB1dCxcbiAgUnVsZUV2aWRlbmNlLFxuICBTZWxlY3Rpb25FdmlkZW5jZSxcbiAgU2VsZWN0aW9uUmVzdWx0LFxuICBXaGVuQ2xhdXNlLFxuICBXaGVyZUZpbHRlcixcbn0gZnJvbSAnLi90eXBlcy5qcyc7XG5cbi8vIFJ1bnRpbWUgY29uc3RhbnRzXG5leHBvcnQgeyBERUNJU0lPTl9SRVNVTFQgfSBmcm9tICcuL3R5cGVzLmpzJztcblxuLy8gQ29yZSBmdW5jdGlvbnNcbmV4cG9ydCB7IGRlY2lkZSwgc2VsZWN0IH0gZnJvbSAnLi9kZWNpZGUuanMnO1xuXG4vLyBFdmFsdWF0b3IgKGZvciBhZHZhbmNlZCB1c2UpXG5leHBvcnQgeyBldmFsdWF0ZUZpbHRlciB9IGZyb20gJy4vZXZhbHVhdG9yLmpzJztcblxuLy8gRXZpZGVuY2UgY29sbGVjdG9yIChmb3IgYWR2YW5jZWQgdXNlKVxuZXhwb3J0IHsgRXZpZGVuY2VDb2xsZWN0b3IgfSBmcm9tICcuL2V2aWRlbmNlLmpzJztcbiJdfQ==
|
|
@@ -34,6 +34,33 @@ export interface DecideRule<T extends object = Record<string, unknown>> {
|
|
|
34
34
|
/** Human-readable rule name for narrative: "Good credit" */
|
|
35
35
|
label?: string;
|
|
36
36
|
}
|
|
37
|
+
/**
|
|
38
|
+
* The fallback branch of a `decide()` — taken when NO rule matched.
|
|
39
|
+
*
|
|
40
|
+
* Two forms, and the bare string is the original one:
|
|
41
|
+
* - `'protected'` — just the branch id. Behaves exactly as it always has.
|
|
42
|
+
* - `{ branch: 'protected', label: 'No rule fired — asset stays protected' }`
|
|
43
|
+
* — the branch id PLUS what that branch means.
|
|
44
|
+
*
|
|
45
|
+
* **Why the object form exists.** Every other branch of a decider is named by
|
|
46
|
+
* the rule that chose it: the rule carries a `label`, and that label travels
|
|
47
|
+
* out through `DecisionEvidence.rules[].label` for narratives, audits and
|
|
48
|
+
* downstream harvesters. The default branch is chosen by no rule, so there is
|
|
49
|
+
* no rule to carry its label — it is the one branch evidence could not name.
|
|
50
|
+
* Declaring the label here puts the default's meaning beside the rules that it
|
|
51
|
+
* competes with, and sends it out through the same evidence channel.
|
|
52
|
+
*
|
|
53
|
+
* @example
|
|
54
|
+
* ```ts
|
|
55
|
+
* decide(scope, rules, { branch: 'protected', label: 'Nothing matched — leave it protected' });
|
|
56
|
+
* ```
|
|
57
|
+
*/
|
|
58
|
+
export type DefaultBranch = string | {
|
|
59
|
+
/** The branch id to fall back to. */
|
|
60
|
+
readonly branch: string;
|
|
61
|
+
/** What falling back to this branch MEANS. Lands on `DecisionEvidence.defaultLabel`. */
|
|
62
|
+
readonly label?: string;
|
|
63
|
+
};
|
|
37
64
|
export declare const DECISION_RESULT: unique symbol;
|
|
38
65
|
export interface DecisionResult {
|
|
39
66
|
branch: string;
|
|
@@ -104,6 +131,17 @@ export interface DecisionEvidence {
|
|
|
104
131
|
chosen: string;
|
|
105
132
|
/** The fallback branch passed as defaultBranch. Always set. */
|
|
106
133
|
default: string;
|
|
134
|
+
/**
|
|
135
|
+
* What the DEFAULT branch means — present only when the caller declared it
|
|
136
|
+
* via the object form of {@link DefaultBranch}.
|
|
137
|
+
*
|
|
138
|
+
* The default branch is chosen by no rule, so no `rules[].label` describes
|
|
139
|
+
* it: it is the one branch evidence cannot otherwise name. This field is that
|
|
140
|
+
* name, and it is recorded on EVERY decision — the run where a rule won as
|
|
141
|
+
* well as the run that fell through — so a consumer harvesting meanings sees
|
|
142
|
+
* the same set of branch meanings regardless of which way the data went.
|
|
143
|
+
*/
|
|
144
|
+
defaultLabel?: string;
|
|
107
145
|
}
|
|
108
146
|
export interface SelectionEvidence {
|
|
109
147
|
rules: RuleEvidence[];
|
|
@@ -7,4 +7,4 @@
|
|
|
7
7
|
*/
|
|
8
8
|
// -- Symbol Brand (duck-type safety) -----------------------------------------
|
|
9
9
|
export const DECISION_RESULT = Symbol('footprint:decide:result');
|
|
10
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
10
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2RlY2lkZS90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUF5RUgsK0VBQStFO0FBRS9FLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxNQUFNLENBQUMseUJBQXlCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogZGVjaWRlL3R5cGVzIC0tIFR5cGUgZGVmaW5pdGlvbnMgZm9yIHRoZSBkZWNpZGUoKS9zZWxlY3QoKSBkZWNpc2lvbiByZWFzb25pbmcgc3lzdGVtLlxuICpcbiAqIFR3byBgd2hlbmAgZm9ybWF0cyBpbiBvbmUgQVBJOlxuICogLSBGdW5jdGlvbjogKHMpID0+IHMuY3JlZGl0U2NvcmUgPiA3MDAgICAoYXV0by1jYXB0dXJlcyByZWFkcyB2aWEgdGVtcCByZWNvcmRlcilcbiAqIC0gRmlsdGVyOiAgIHsgY3JlZGl0U2NvcmU6IHsgZ3Q6IDcwMCB9IH0gKGNhcHR1cmVzIHJlYWRzICsgb3BlcmF0b3JzICsgdGhyZXNob2xkcylcbiAqL1xuXG4vLyAtLSBGaWx0ZXIgT3BlcmF0b3JzIChQcmlzbWEgbmFtaW5nLCA4IG9wZXJhdG9ycykgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKiBNdWx0aXBsZSBvcGVyYXRvcnMgb24gdGhlIHNhbWUga2V5IGFyZSBBTkRlZCAoZS5nLiwgeyBndDogNSwgbHQ6IDEwIH0gbWVhbnMgNSA8IHZhbHVlIDwgMTApLiAqL1xuZXhwb3J0IHR5cGUgRmlsdGVyT3BzPFY+ID0ge1xuICAvKiogRXF1YWw6IHZhbHVlID09PSB0aHJlc2hvbGQgKi9cbiAgZXE/OiBWO1xuICAvKiogTm90IGVxdWFsOiB2YWx1ZSAhPT0gdGhyZXNob2xkICovXG4gIG5lPzogVjtcbiAgLyoqIEdyZWF0ZXIgdGhhbjogdmFsdWUgPiB0aHJlc2hvbGQgKi9cbiAgZ3Q/OiBWO1xuICAvKiogR3JlYXRlciB0aGFuIG9yIGVxdWFsOiB2YWx1ZSA+PSB0aHJlc2hvbGQgKi9cbiAgZ3RlPzogVjtcbiAgLyoqIExlc3MgdGhhbjogdmFsdWUgPCB0aHJlc2hvbGQgKi9cbiAgbHQ/OiBWO1xuICAvKiogTGVzcyB0aGFuIG9yIGVxdWFsOiB2YWx1ZSA8PSB0aHJlc2hvbGQgKi9cbiAgbHRlPzogVjtcbiAgLyoqIFZhbHVlIGlzIGluIGFycmF5ICovXG4gIGluPzogVltdO1xuICAvKiogVmFsdWUgaXMgTk9UIGluIGFycmF5ICovXG4gIG5vdEluPzogVltdO1xufTtcblxuLy8gLS0gV2hlcmVGaWx0ZXIgKGZsYXQga2V5cyBvbmx5LCBubyBuZXN0ZWQgdjEpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgdHlwZSBXaGVyZUZpbHRlcjxUIGV4dGVuZHMgb2JqZWN0ID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj4+ID0ge1xuICBbSyBpbiBrZXlvZiBUXT86IEZpbHRlck9wczxUW0tdPjtcbn07XG5cbi8vIC0tIFJ1bGUgRGVmaW5pdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZXhwb3J0IHR5cGUgV2hlbkNsYXVzZTxUIGV4dGVuZHMgb2JqZWN0ID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj4+ID0gKChzOiBUKSA9PiBib29sZWFuKSB8IFdoZXJlRmlsdGVyPFQ+O1xuXG5leHBvcnQgaW50ZXJmYWNlIERlY2lkZVJ1bGU8VCBleHRlbmRzIG9iamVjdCA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+PiB7XG4gIHdoZW46IFdoZW5DbGF1c2U8VD47XG4gIHRoZW46IHN0cmluZztcbiAgLyoqIEh1bWFuLXJlYWRhYmxlIHJ1bGUgbmFtZSBmb3IgbmFycmF0aXZlOiBcIkdvb2QgY3JlZGl0XCIgKi9cbiAgbGFiZWw/OiBzdHJpbmc7XG59XG5cbi8vIC0tIERlZmF1bHQgQnJhbmNoIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBUaGUgZmFsbGJhY2sgYnJhbmNoIG9mIGEgYGRlY2lkZSgpYCDigJQgdGFrZW4gd2hlbiBOTyBydWxlIG1hdGNoZWQuXG4gKlxuICogVHdvIGZvcm1zLCBhbmQgdGhlIGJhcmUgc3RyaW5nIGlzIHRoZSBvcmlnaW5hbCBvbmU6XG4gKiAtIGAncHJvdGVjdGVkJ2Ag4oCUIGp1c3QgdGhlIGJyYW5jaCBpZC4gQmVoYXZlcyBleGFjdGx5IGFzIGl0IGFsd2F5cyBoYXMuXG4gKiAtIGB7IGJyYW5jaDogJ3Byb3RlY3RlZCcsIGxhYmVsOiAnTm8gcnVsZSBmaXJlZCDigJQgYXNzZXQgc3RheXMgcHJvdGVjdGVkJyB9YFxuICogICDigJQgdGhlIGJyYW5jaCBpZCBQTFVTIHdoYXQgdGhhdCBicmFuY2ggbWVhbnMuXG4gKlxuICogKipXaHkgdGhlIG9iamVjdCBmb3JtIGV4aXN0cy4qKiBFdmVyeSBvdGhlciBicmFuY2ggb2YgYSBkZWNpZGVyIGlzIG5hbWVkIGJ5XG4gKiB0aGUgcnVsZSB0aGF0IGNob3NlIGl0OiB0aGUgcnVsZSBjYXJyaWVzIGEgYGxhYmVsYCwgYW5kIHRoYXQgbGFiZWwgdHJhdmVsc1xuICogb3V0IHRocm91Z2ggYERlY2lzaW9uRXZpZGVuY2UucnVsZXNbXS5sYWJlbGAgZm9yIG5hcnJhdGl2ZXMsIGF1ZGl0cyBhbmRcbiAqIGRvd25zdHJlYW0gaGFydmVzdGVycy4gVGhlIGRlZmF1bHQgYnJhbmNoIGlzIGNob3NlbiBieSBubyBydWxlLCBzbyB0aGVyZSBpc1xuICogbm8gcnVsZSB0byBjYXJyeSBpdHMgbGFiZWwg4oCUIGl0IGlzIHRoZSBvbmUgYnJhbmNoIGV2aWRlbmNlIGNvdWxkIG5vdCBuYW1lLlxuICogRGVjbGFyaW5nIHRoZSBsYWJlbCBoZXJlIHB1dHMgdGhlIGRlZmF1bHQncyBtZWFuaW5nIGJlc2lkZSB0aGUgcnVsZXMgdGhhdCBpdFxuICogY29tcGV0ZXMgd2l0aCwgYW5kIHNlbmRzIGl0IG91dCB0aHJvdWdoIHRoZSBzYW1lIGV2aWRlbmNlIGNoYW5uZWwuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBkZWNpZGUoc2NvcGUsIHJ1bGVzLCB7IGJyYW5jaDogJ3Byb3RlY3RlZCcsIGxhYmVsOiAnTm90aGluZyBtYXRjaGVkIOKAlCBsZWF2ZSBpdCBwcm90ZWN0ZWQnIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCB0eXBlIERlZmF1bHRCcmFuY2ggPVxuICB8IHN0cmluZ1xuICB8IHtcbiAgICAgIC8qKiBUaGUgYnJhbmNoIGlkIHRvIGZhbGwgYmFjayB0by4gKi9cbiAgICAgIHJlYWRvbmx5IGJyYW5jaDogc3RyaW5nO1xuICAgICAgLyoqIFdoYXQgZmFsbGluZyBiYWNrIHRvIHRoaXMgYnJhbmNoIE1FQU5TLiBMYW5kcyBvbiBgRGVjaXNpb25FdmlkZW5jZS5kZWZhdWx0TGFiZWxgLiAqL1xuICAgICAgcmVhZG9ubHkgbGFiZWw/OiBzdHJpbmc7XG4gICAgfTtcblxuLy8gLS0gU3ltYm9sIEJyYW5kIChkdWNrLXR5cGUgc2FmZXR5KSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgY29uc3QgREVDSVNJT05fUkVTVUxUID0gU3ltYm9sKCdmb290cHJpbnQ6ZGVjaWRlOnJlc3VsdCcpO1xuXG4vLyAtLSBEZWNpc2lvbiBSZXN1bHQgKGZyb20gZGVjaWRlKCkpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZXhwb3J0IGludGVyZmFjZSBEZWNpc2lvblJlc3VsdCB7XG4gIGJyYW5jaDogc3RyaW5nO1xuICBbREVDSVNJT05fUkVTVUxUXTogdHJ1ZTtcbiAgZXZpZGVuY2U6IERlY2lzaW9uRXZpZGVuY2U7XG59XG5cbi8vIC0tIFNlbGVjdGlvbiBSZXN1bHQgKGZyb20gc2VsZWN0KCkpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZXhwb3J0IGludGVyZmFjZSBTZWxlY3Rpb25SZXN1bHQge1xuICBicmFuY2hlczogc3RyaW5nW107XG4gIFtERUNJU0lPTl9SRVNVTFRdOiB0cnVlO1xuICBldmlkZW5jZTogU2VsZWN0aW9uRXZpZGVuY2U7XG59XG5cbi8vIC0tIEV2aWRlbmNlIFR5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZXhwb3J0IGludGVyZmFjZSBGdW5jdGlvblJ1bGVFdmlkZW5jZSB7XG4gIHR5cGU6ICdmdW5jdGlvbic7XG4gIHJ1bGVJbmRleDogbnVtYmVyO1xuICAvKiogVGhlIGJyYW5jaCBJRCB0aGlzIHJ1bGUgbWFwcyB0by4gU2VsZi1kZXNjcmliaW5nIOKAlCBubyBpbmRleCBjb3JyZWxhdGlvbiBuZWVkZWQuICovXG4gIGJyYW5jaDogc3RyaW5nO1xuICBtYXRjaGVkOiBib29sZWFuO1xuICBsYWJlbD86IHN0cmluZztcbiAgaW5wdXRzOiBSZWFkSW5wdXRbXTtcbiAgLyoqXG4gICAqIEVycm9yIG1lc3NhZ2UgaWYgdGhlIGB3aGVuYCBmdW5jdGlvbiB0aHJldyBkdXJpbmcgZXZhbHVhdGlvbi5cbiAgICogUHJlc2VudCBvbmx5IHdoZW4gYW4gZXhjZXB0aW9uIG9jY3VycmVkOyBgbWF0Y2hlZGAgaXMgYGZhbHNlYCBpbiB0aGF0IGNhc2UuXG4gICAqIFN1cmZhY2VzIHRoZSBlcnJvciBmb3IgZGVidWdnaW5nIHJhdGhlciB0aGFuIHN3YWxsb3dpbmcgaXQgc2lsZW50bHkuXG4gICAqXG4gICAqICoqU2VjdXJpdHkgbm90ZToqKiBFcnJvciBtZXNzYWdlcyBmcm9tIHVzZXItcHJvdmlkZWQgYHdoZW5gIGZ1bmN0aW9ucyBhcmUgY2FwdHVyZWRcbiAgICogYXMtaXMgYW5kIGFyZSBOT1QgZmlsdGVyZWQgdGhyb3VnaCB0aGUgcmVkYWN0aW9uIHBvbGljeS4gQXZvaWQgaW5jbHVkaW5nIHNlbnNpdGl2ZVxuICAgKiBzY29wZSB2YWx1ZXMgaW4gdGhyb3duIGVycm9yIG1lc3NhZ2VzLlxuICAgKi9cbiAgbWF0Y2hFcnJvcj86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGaWx0ZXJSdWxlRXZpZGVuY2Uge1xuICB0eXBlOiAnZmlsdGVyJztcbiAgcnVsZUluZGV4OiBudW1iZXI7XG4gIC8qKiBUaGUgYnJhbmNoIElEIHRoaXMgcnVsZSBtYXBzIHRvLiBTZWxmLWRlc2NyaWJpbmcg4oCUIG5vIGluZGV4IGNvcnJlbGF0aW9uIG5lZWRlZC4gKi9cbiAgYnJhbmNoOiBzdHJpbmc7XG4gIG1hdGNoZWQ6IGJvb2xlYW47XG4gIGxhYmVsPzogc3RyaW5nO1xuICBjb25kaXRpb25zOiBGaWx0ZXJDb25kaXRpb25bXTtcbiAgLyoqXG4gICAqIEVycm9yIG1lc3NhZ2UgaWYgdGhlIGZpbHRlciBldmFsdWF0b3IgdGhyZXcgZHVyaW5nIGV2YWx1YXRpb24uXG4gICAqIFByZXNlbnQgb25seSB3aGVuIGFuIGV4Y2VwdGlvbiBvY2N1cnJlZDsgYG1hdGNoZWRgIGlzIGBmYWxzZWAgaW4gdGhhdCBjYXNlLlxuICAgKiBTdXJmYWNlcyB0aGUgZXJyb3IgZm9yIGRlYnVnZ2luZyByYXRoZXIgdGhhbiBzd2FsbG93aW5nIGl0IHNpbGVudGx5LlxuICAgKlxuICAgKiAqKlNlY3VyaXR5IG5vdGU6KiogRXJyb3IgbWVzc2FnZXMgZnJvbSB1c2VyLXByb3ZpZGVkIGB3aGVuYCBmdW5jdGlvbnMgYXJlIGNhcHR1cmVkXG4gICAqIGFzLWlzIGFuZCBhcmUgTk9UIGZpbHRlcmVkIHRocm91Z2ggdGhlIHJlZGFjdGlvbiBwb2xpY3kuIEF2b2lkIGluY2x1ZGluZyBzZW5zaXRpdmVcbiAgICogc2NvcGUgdmFsdWVzIGluIHRocm93biBlcnJvciBtZXNzYWdlcy5cbiAgICovXG4gIG1hdGNoRXJyb3I/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIFJ1bGVFdmlkZW5jZSA9IEZ1bmN0aW9uUnVsZUV2aWRlbmNlIHwgRmlsdGVyUnVsZUV2aWRlbmNlO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJlYWRJbnB1dCB7XG4gIGtleTogc3RyaW5nO1xuICB2YWx1ZVN1bW1hcnk6IHN0cmluZztcbiAgcmVkYWN0ZWQ6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmlsdGVyQ29uZGl0aW9uIHtcbiAga2V5OiBzdHJpbmc7XG4gIG9wOiBzdHJpbmc7XG4gIC8qKiBLZXB0IHJhdyBmb3IgYXVkaXQgYWNjdXJhY3k7IGVuZ2luZS9zZXJpYWxpemVyIG11c3QgaGFuZGxlIHNhZmVseS4gKi9cbiAgdGhyZXNob2xkOiB1bmtub3duO1xuICBhY3R1YWxTdW1tYXJ5OiBzdHJpbmc7XG4gIHJlc3VsdDogYm9vbGVhbjtcbiAgcmVkYWN0ZWQ6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGVjaXNpb25FdmlkZW5jZSB7XG4gIHJ1bGVzOiBSdWxlRXZpZGVuY2VbXTtcbiAgLyoqIFRoZSBicmFuY2ggc2VsZWN0ZWQuIEVxdWFscyBgZGVmYXVsdGAgd2hlbiBubyBydWxlIG1hdGNoZWQuICovXG4gIGNob3Nlbjogc3RyaW5nO1xuICAvKiogVGhlIGZhbGxiYWNrIGJyYW5jaCBwYXNzZWQgYXMgZGVmYXVsdEJyYW5jaC4gQWx3YXlzIHNldC4gKi9cbiAgZGVmYXVsdDogc3RyaW5nO1xuICAvKipcbiAgICogV2hhdCB0aGUgREVGQVVMVCBicmFuY2ggbWVhbnMg4oCUIHByZXNlbnQgb25seSB3aGVuIHRoZSBjYWxsZXIgZGVjbGFyZWQgaXRcbiAgICogdmlhIHRoZSBvYmplY3QgZm9ybSBvZiB7QGxpbmsgRGVmYXVsdEJyYW5jaH0uXG4gICAqXG4gICAqIFRoZSBkZWZhdWx0IGJyYW5jaCBpcyBjaG9zZW4gYnkgbm8gcnVsZSwgc28gbm8gYHJ1bGVzW10ubGFiZWxgIGRlc2NyaWJlc1xuICAgKiBpdDogaXQgaXMgdGhlIG9uZSBicmFuY2ggZXZpZGVuY2UgY2Fubm90IG90aGVyd2lzZSBuYW1lLiBUaGlzIGZpZWxkIGlzIHRoYXRcbiAgICogbmFtZSwgYW5kIGl0IGlzIHJlY29yZGVkIG9uIEVWRVJZIGRlY2lzaW9uIOKAlCB0aGUgcnVuIHdoZXJlIGEgcnVsZSB3b24gYXNcbiAgICogd2VsbCBhcyB0aGUgcnVuIHRoYXQgZmVsbCB0aHJvdWdoIOKAlCBzbyBhIGNvbnN1bWVyIGhhcnZlc3RpbmcgbWVhbmluZ3Mgc2Vlc1xuICAgKiB0aGUgc2FtZSBzZXQgb2YgYnJhbmNoIG1lYW5pbmdzIHJlZ2FyZGxlc3Mgb2Ygd2hpY2ggd2F5IHRoZSBkYXRhIHdlbnQuXG4gICAqL1xuICBkZWZhdWx0TGFiZWw/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VsZWN0aW9uRXZpZGVuY2Uge1xuICBydWxlczogUnVsZUV2aWRlbmNlW107XG4gIHNlbGVjdGVkOiBzdHJpbmdbXTtcbn1cbiJdfQ==
|