footprintjs 8.3.0 → 9.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/esm/lib/engine/handlers/ContinuationResolver.js +44 -45
- package/dist/esm/lib/engine/handlers/DeciderHandler.js +37 -14
- package/dist/esm/lib/engine/traversal/FlowchartTraverser.js +468 -315
- package/dist/esm/lib/engine/types.js +1 -1
- package/dist/esm/lib/memory/StageContext.js +28 -7
- package/dist/esm/lib/runner/FlowChartExecutor.js +5 -4
- package/dist/lib/engine/handlers/ContinuationResolver.js +44 -45
- package/dist/lib/engine/handlers/DeciderHandler.js +37 -14
- package/dist/lib/engine/traversal/FlowchartTraverser.js +468 -315
- package/dist/lib/engine/types.js +1 -1
- package/dist/lib/memory/StageContext.js +28 -7
- package/dist/lib/runner/FlowChartExecutor.js +5 -4
- package/dist/types/lib/engine/handlers/ContinuationResolver.d.ts +36 -9
- package/dist/types/lib/engine/handlers/DeciderHandler.d.ts +32 -0
- package/dist/types/lib/engine/traversal/FlowchartTraverser.d.ts +91 -23
- package/dist/types/lib/engine/types.d.ts +15 -3
- package/dist/types/lib/memory/StageContext.d.ts +3 -0
- package/dist/types/lib/runner/FlowChartExecutor.d.ts +1 -1
- package/package.json +1 -1
|
@@ -9,6 +9,15 @@
|
|
|
9
9
|
* - String ID → reference to existing node (resolve via NodeResolver)
|
|
10
10
|
* - StageNode with fn → truly dynamic node (execute directly)
|
|
11
11
|
* - StageNode without fn → reference by ID (resolve via NodeResolver)
|
|
12
|
+
*
|
|
13
|
+
* Two entry points:
|
|
14
|
+
* - `resolveTarget` — resolves the continuation to `{ node, context }` and
|
|
15
|
+
* fires every side effect (iteration counting, debug logs, `onLoop`
|
|
16
|
+
* narrative) WITHOUT executing. The traverser's trampoline driver uses
|
|
17
|
+
* this to follow loop edges iteratively — flat stack, so the iteration
|
|
18
|
+
* limit (not call-stack depth) is what bounds a loop.
|
|
19
|
+
* - `resolve` — resolveTarget + immediate execution via the provided
|
|
20
|
+
* `executeNode` callback. Kept for direct/advanced callers.
|
|
12
21
|
*/
|
|
13
22
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
23
|
exports.ContinuationResolver = exports.DEFAULT_MAX_ITERATIONS = void 0;
|
|
@@ -30,57 +39,47 @@ class ContinuationResolver {
|
|
|
30
39
|
this.maxIterations = maxIterations ?? exports.DEFAULT_MAX_ITERATIONS;
|
|
31
40
|
}
|
|
32
41
|
/**
|
|
33
|
-
* Resolve a dynamic continuation.
|
|
34
|
-
*
|
|
35
|
-
*
|
|
42
|
+
* Resolve a dynamic continuation and execute it immediately.
|
|
43
|
+
* Equivalent to `executeNode(...resolveTarget(...))` — the traverser's
|
|
44
|
+
* driver loop calls `resolveTarget` directly instead so the continuation
|
|
45
|
+
* becomes a flat trampoline hop rather than a retained recursive frame.
|
|
36
46
|
*/
|
|
37
47
|
async resolve(dynamicNext, node, context, breakFlag, branchPath, executeNode, traversalContext) {
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
}
|
|
41
|
-
if (dynamicNext.fn) {
|
|
42
|
-
return this.handleDirectNode(dynamicNext, context, breakFlag, branchPath, executeNode);
|
|
43
|
-
}
|
|
44
|
-
return this.handleNodeReference(dynamicNext, node, context, breakFlag, branchPath, executeNode, traversalContext);
|
|
48
|
+
const target = this.resolveTarget(dynamicNext, node, context, branchPath, traversalContext);
|
|
49
|
+
return executeNode(target.node, target.context, breakFlag, branchPath);
|
|
45
50
|
}
|
|
46
|
-
/**
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
51
|
+
/**
|
|
52
|
+
* Resolve a dynamic continuation to its target node + next StageContext
|
|
53
|
+
* WITHOUT executing it. Fires the same side effects `resolve` always did
|
|
54
|
+
* (iteration counting + limit, `dynamicNext*` logs, loop debug message,
|
|
55
|
+
* `onLoop` narrative), in the same order.
|
|
56
|
+
*
|
|
57
|
+
* Three dynamicNext patterns:
|
|
58
|
+
* - StageNode with fn → truly dynamic node, returned as-is (no iteration
|
|
59
|
+
* tracking — it is a fresh node, not a back-edge).
|
|
60
|
+
* - String ID → reference to an existing node, resolved via NodeResolver.
|
|
61
|
+
* - StageNode without fn → reference by ID, resolved via NodeResolver.
|
|
62
|
+
*/
|
|
63
|
+
resolveTarget(dynamicNext, currentNode, context, branchPath, traversalContext) {
|
|
64
|
+
// Truly dynamic node (has fn) → execute directly, no iteration tracking.
|
|
65
|
+
if (typeof dynamicNext !== 'string' && dynamicNext.fn) {
|
|
66
|
+
context.addLog('dynamicNextDirect', true);
|
|
67
|
+
context.addLog('dynamicNextName', dynamicNext.name);
|
|
68
|
+
context.addFlowDebugMessage('next', `Moving to ${dynamicNext.name} stage (dynamic)`, {
|
|
69
|
+
targetStage: dynamicNext.name,
|
|
70
|
+
});
|
|
71
|
+
const nextStageContext = context.createNext(branchPath, dynamicNext.name, dynamicNext.id);
|
|
72
|
+
return { node: dynamicNext, context: nextStageContext };
|
|
53
73
|
}
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
context.addFlowDebugMessage('loop', `Looping back to ${targetNode.name} (iteration ${iteration + 1})`, {
|
|
59
|
-
targetStage: targetNode.name,
|
|
60
|
-
iteration: iteration + 1,
|
|
61
|
-
});
|
|
62
|
-
this.deps.narrativeGenerator.onLoop(targetNode.name, iteration + 1, targetNode.description, traversalContext);
|
|
63
|
-
const nextStageContext = context.createNext(branchPath, iteratedStageName, targetNode.id);
|
|
64
|
-
return executeNode(targetNode, nextStageContext, breakFlag, branchPath);
|
|
65
|
-
}
|
|
66
|
-
/** dynamicNext is a StageNode with fn → execute directly (truly dynamic). */
|
|
67
|
-
async handleDirectNode(dynamicNode, context, breakFlag, branchPath, executeNode) {
|
|
68
|
-
context.addLog('dynamicNextDirect', true);
|
|
69
|
-
context.addLog('dynamicNextName', dynamicNode.name);
|
|
70
|
-
context.addFlowDebugMessage('next', `Moving to ${dynamicNode.name} stage (dynamic)`, {
|
|
71
|
-
targetStage: dynamicNode.name,
|
|
72
|
-
});
|
|
73
|
-
const nextStageContext = context.createNext(branchPath, dynamicNode.name, dynamicNode.id);
|
|
74
|
-
return executeNode(dynamicNode, nextStageContext, breakFlag, branchPath);
|
|
75
|
-
}
|
|
76
|
-
/** dynamicNext is a StageNode without fn → reference by ID, resolve + track iteration. */
|
|
77
|
-
async handleNodeReference(dynamicNode, currentNode, context, breakFlag, branchPath, executeNode, traversalContext) {
|
|
78
|
-
const nextNodeId = dynamicNode.id;
|
|
79
|
-
if (!nextNodeId) {
|
|
74
|
+
// Reference — by string ID or by node-without-fn ID. A node reference
|
|
75
|
+
// without an id is a usage error; a string reference is passed through
|
|
76
|
+
// verbatim (an unknown id surfaces as "target node not found" below).
|
|
77
|
+
if (typeof dynamicNext !== 'string' && !dynamicNext.id) {
|
|
80
78
|
const errorMessage = 'dynamicNext node must have an id when used as reference';
|
|
81
79
|
this.deps.logger.error(`Error in pipeline (${branchPath}) stage [${currentNode.name}]:`, { error: errorMessage });
|
|
82
80
|
throw new Error(errorMessage);
|
|
83
81
|
}
|
|
82
|
+
const nextNodeId = typeof dynamicNext === 'string' ? dynamicNext : dynamicNext.id;
|
|
84
83
|
const targetNode = this.nodeResolver.findNodeById(nextNodeId);
|
|
85
84
|
if (!targetNode) {
|
|
86
85
|
const errorMessage = `dynamicNext target node not found: ${nextNodeId}`;
|
|
@@ -97,7 +96,7 @@ class ContinuationResolver {
|
|
|
97
96
|
});
|
|
98
97
|
this.deps.narrativeGenerator.onLoop(targetNode.name, iteration + 1, targetNode.description, traversalContext);
|
|
99
98
|
const nextStageContext = context.createNext(branchPath, iteratedStageName, targetNode.id);
|
|
100
|
-
return
|
|
99
|
+
return { node: targetNode, context: nextStageContext };
|
|
101
100
|
}
|
|
102
101
|
/**
|
|
103
102
|
* Get the next iteration number for a node and increment.
|
|
@@ -125,4 +124,4 @@ class ContinuationResolver {
|
|
|
125
124
|
}
|
|
126
125
|
}
|
|
127
126
|
exports.ContinuationResolver = ContinuationResolver;
|
|
128
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29udGludWF0aW9uUmVzb2x2ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2VuZ2luZS9oYW5kbGVycy9Db250aW51YXRpb25SZXNvbHZlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7R0FVRzs7O0FBU1UsUUFBQSxzQkFBc0IsR0FBRyxJQUFJLENBQUM7QUFFM0MsTUFBYSxvQkFBb0I7SUFXWjtJQUNBO0lBWG5COzs7T0FHRztJQUNLLGlCQUFpQixHQUF3QixJQUFJLEdBQUcsRUFBRSxDQUFDO0lBRTFDLGlCQUFpQixDQUEyQztJQUM1RCxhQUFhLENBQVM7SUFFdkMsWUFDbUIsSUFBK0IsRUFDL0IsWUFBd0MsRUFDekQsaUJBQTJELEVBQzNELGFBQXNCO1FBSEwsU0FBSSxHQUFKLElBQUksQ0FBMkI7UUFDL0IsaUJBQVksR0FBWixZQUFZLENBQTRCO1FBSXpELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxpQkFBaUIsQ0FBQztRQUMzQyxJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsSUFBSSw4QkFBc0IsQ0FBQztJQUMvRCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILEtBQUssQ0FBQyxPQUFPLENBQ1gsV0FBNkMsRUFDN0MsSUFBNkIsRUFDN0IsT0FBcUIsRUFDckIsU0FBbUMsRUFDbkMsVUFBOEIsRUFDOUIsV0FBd0MsRUFDeEMsZ0JBQW1DO1FBRW5DLElBQUksT0FBTyxXQUFXLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDcEMsT0FBTyxJQUFJLENBQUMscUJBQXFCLENBQy9CLFdBQVcsRUFDWCxJQUFJLEVBQ0osT0FBTyxFQUNQLFNBQVMsRUFDVCxVQUFVLEVBQ1YsV0FBVyxFQUNYLGdCQUFnQixDQUNqQixDQUFDO1FBQ0osQ0FBQztRQUVELElBQUksV0FBVyxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ25CLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsRUFBRSxPQUFPLEVB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WUFDM0IsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDOUMsQ0FBQztRQUVELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxvQkFBb0IsQ0FBQyxRQUFnQixFQUFFLFNBQWlCO1FBQ3RELE9BQU8sU0FBUyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsSUFBSSxTQUFTLEVBQUUsQ0FBQztJQUNqRSxDQUFDO0NBQ0Y7QUE5S0Qsb0RBOEtDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb250aW51YXRpb25SZXNvbHZlciDigJQgQmFjay1lZGdlIHJlc29sdXRpb24gKyBpdGVyYXRpb24gY291bnRpbmcuXG4gKlxuICogUmVzb2x2ZXMgZHluYW1pYyBjb250aW51YXRpb25zIChsb29wLWJhY2tzLCBkeW5hbWljIG5leHQpIGFuZCB0cmFja3NcbiAqIHBlci1ub2RlIGl0ZXJhdGlvbiBjb3VudHMgZm9yIGNvbnRleHQgdHJlZSBuYW1pbmcuXG4gKlxuICogU3VwcG9ydHMgdGhyZWUgZHluYW1pY05leHQgcGF0dGVybnM6XG4gKiAtIFN0cmluZyBJRCDihpIgcmVmZXJlbmNlIHRvIGV4aXN0aW5nIG5vZGUgKHJlc29sdmUgdmlhIE5vZGVSZXNvbHZlcilcbiAqIC0gU3RhZ2VOb2RlIHdpdGggZm4g4oaSIHRydWx5IGR5bmFtaWMgbm9kZSAoZXhlY3V0ZSBkaXJlY3RseSlcbiAqIC0gU3RhZ2VOb2RlIHdpdGhvdXQgZm4g4oaSIHJlZmVyZW5jZSBieSBJRCAocmVzb2x2ZSB2aWEgTm9kZVJlc29sdmVyKVxuICovXG5cbmltcG9ydCB0eXBlIHsgU3RhZ2VDb250ZXh0IH0gZnJvbSAnLi4vLi4vbWVtb3J5L1N0YWdlQ29udGV4dC5qcyc7XG5pbXBvcnQgdHlwZSB7IFN0YWdlTm9kZSB9IGZyb20gJy4uL2dyYXBoL1N0YWdlTm9kZS5qcyc7XG5pbXBvcnQgdHlwZSB7IFRyYXZlcnNhbENvbnRleHQgfSBmcm9tICcuLi9uYXJyYXRpdmUvdHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBIYW5kbGVyRGVwcyB9IGZyb20gJy4uL3R5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgTm9kZVJlc29sdmVyIH0gZnJvbSAnLi9Ob2RlUmVzb2x2ZXIuanMnO1xuaW1wb3J0IHR5cGUgeyBFeGVjdXRlTm9kZUZuIH0gZnJvbSAnLi90eXBlcy5qcyc7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX01BWF9JVEVSQVRJT05TID0gMTAwMDtcblxuZXhwb3J0IGNsYXNzIENvbnRpbnVhdGlvblJlc29sdmVyPFRPdXQgPSBhbnksIFRTY29wZSA9IGFueT4ge1xuICAvKipcbiAgICogSXRlcmF0aW9uIGNvdW50ZXIgcGVyIG5vZGUgSUQuXG4gICAqIEtleTogbm9kZS5pZCwgVmFsdWU6IHZpc2l0IGNvdW50ICgwID0gZmlyc3QgdmlzaXQpLlxuICAgKi9cbiAgcHJpdmF0ZSBpdGVyYXRpb25Db3VudGVyczogTWFwPHN0cmluZywgbnVtYmVyPiA9IG5ldyBNYXAoKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IG9uSXRlcmF0aW9uVXBkYXRlPzogKG5vZGVJZDogc3RyaW5nLCBjb3VudDogbnVtYmVyKSA9PiB2b2lkO1xuICBwcml2YXRlIHJlYWRvbmx5IG1heEl0ZXJhdGlvbnM6IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlcHM6IEhhbmRsZXJEZXBzPFRPdXQsIFRTY29wZT4sXG4gICAgcHJpdmF0ZSByZWFkb25seSBub2RlUmVzb2x2ZXI6IE5vZGVSZXNvbHZlcjxUT3V0LCBUU2NvcGU+LFxuICAgIG9uSXRlcmF0aW9uVXBkYXRlPzogKG5vZGVJZDogc3RyaW5nLCBjb3VudDogbnVtYmVyKSA9PiB2b2lkLFxuICAgIG1heEl0ZXJhdGlvbnM/OiBudW1iZXIsXG4gICkge1xuICAgIHRoaXMub25JdGVyYXRpb25VcGRhdGUgPSBvbkl0ZXJhdGlvblVwZGF0ZTtcbiAgICB0aGlzLm1heEl0ZXJhdGlvbnMgPSBtYXhJdGVyYXRpb25zID8/IERFRkFVTFRfTUFYX0lURVJBVElPTlM7XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZSBhIGR5bmFtaWMgY29udGludWF0aW9uLlxuICAgKiBEaXNwYXRjaGVzIHRvIGhhbmRsZVN0cmluZ1JlZmVyZW5jZSwgaGFuZGxlRGlyZWN0Tm9kZSwgb3IgaGFuZGxlTm9kZVJlZmVyZW5jZVxuICAgKiBiYXNlZCBvbiB0aGUgZHluYW1pY05leHQgdHlwZS5cbiAgICovXG4gIGFzeW5jIHJlc29sdmUoXG4gICAgZHluYW1pY05leHQ6IHN0cmluZyB8IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+LFxuICAgIG5vZGU6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+LFxuICAgIGNvbnRleHQ6IFN0YWdlQ29udGV4dCxcbiAgICBicmVha0ZsYWc6IHsgc2hvdWxkQnJlYWs6IGJvb2xlYW4gfSxcbiAgICBicmFuY2hQYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICAgZXhlY3V0ZU5vZGU6IEV4ZWN1dGVOb2RlRm48VE91dCwgVFNjb3BlPixcbiAgICB0cmF2ZXJzYWxDb250ZXh0PzogVHJhdmVyc2FsQ29udGV4dCxcbiAgKTogUHJvbWlzZTxhbnk+IHtcbiAgICBpZiAodHlwZW9mIGR5bmFtaWNOZXh0ID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlU3RyaW5nUmVmZXJlbmNlKFxuICAgICAgICBkeW5hbWljTmV4dCxcbiAgICAgICAgbm9kZSxcbiAgICAgICAgY29udGV4dCxcbiAgICAgICAgYnJlYWtGbGFnLFxuICAgICAgICBicmFuY2hQYXRoLFxuICAgICAgICBleGVjdXRlTm9kZSxcbiAgICAgICAgdHJhdmVyc2FsQ29udGV4dCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKGR5bmFtaWNOZXh0LmZuKSB7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVEaXJlY3ROb2RlKGR5bmFtaWNOZXh0LCBjb250ZXh0LCBicmVha0ZsYWcsIGJyYW5jaFBhdGgsIGV4ZWN1dGVOb2RlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5oYW5kbGVOb2RlUmVmZXJlbmNlKGR5bmFtaWNOZXh0LCBub2RlLCBjb250ZXh0LCBicmVha0ZsYWcsIGJyYW5jaFBhdGgsIGV4ZWN1dGVOb2RlLCB0cmF2ZXJzYWxDb250ZXh0KTtcbiAgfVxuXG4gIC8qKiBkeW5hbWljTmV4dCBpcyBhIHN0cmluZyBJRCDihpIgcmVzb2x2ZSBmcm9tIGdyYXBoLCB0cmFjayBpdGVyYXRpb24uICovXG4gIHByaXZhdGUgYXN5bmMgaGFuZGxlU3RyaW5nUmVmZXJlbmNlKFxuICAgIG5vZGVJZDogc3RyaW5nLFxuICAgIGN1cnJlbnROb2RlOiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPixcbiAgICBjb250ZXh0OiBTdGFnZUNvbnRleHQsXG4gICAgYnJlYWtGbGFnOiB7IHNob3VsZEJyZWFrOiBib29sZWFuIH0sXG4gICAgYnJhbmNoUGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICAgIGV4ZWN1dGVOb2RlOiBFeGVjdXRlTm9kZUZuPFRPdXQsIFRTY29wZT4sXG4gICAgdHJhdmVyc2FsQ29udGV4dD86IFRyYXZlcnNhbENvbnRleHQsXG4gICk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3QgdGFyZ2V0Tm9kZSA9IHRoaXMubm9kZVJlc29sdmVyLmZpbmROb2RlQnlJZChub2RlSWQpO1xuICAgIGlmICghdGFyZ2V0Tm9kZSkge1xuICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gYGR5bmFtaWNOZXh0IHRhcmdldCBub2RlIG5vdCBmb3VuZDogJHtub2RlSWR9YDtcbiAgICAgIHRoaXMuZGVwcy5sb2dnZXIuZXJyb3IoYEVycm9yIGluIHBpcGVsaW5lICgke2JyYW5jaFBhdGh9KSBzdGFnZSBbJHtjdXJyZW50Tm9kZS5uYW1lfV06YCwgeyBlcnJvcjogZXJyb3JNZXNzYWdlIH0pO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGVycm9yTWVzc2FnZSk7XG4gICAgfVxuXG4gICAgY29uc3QgaXRlcmF0aW9uID0gdGhpcy5nZXRBbmRJbmNyZW1lbnRJdGVyYXRpb24obm9kZUlkKTtcbiAgICBjb25zdCBpdGVyYXRlZFN0YWdlTmFtZSA9IHRoaXMuZ2V0SXRlcmF0ZWRTdGFnZU5hbWUodGFyZ2V0Tm9kZS5uYW1lLCBpdGVyYXRpb24pO1xuICAgIGNvbnRleHQuYWRkTG9nKCdkeW5hbWljTmV4dFRhcmdldCcsIG5vZGVJZCk7XG4gICAgY29udGV4dC5hZGRMb2coJ2R5bmFtaWNOZXh0SXRlcmF0aW9uJywgaXRlcmF0aW9uKTtcblxuICAgIGNvbnRleHQuYWRkRmxvd0RlYnVnTWVzc2FnZSgnbG9vcCcsIGBMb29waW5nIGJhY2sgdG8gJHt0YXJnZXROb2RlLm5hbWV9IChpdGVyYXRpb24gJHtpdGVyYXRpb24gKyAxfSlgLCB7XG4gICAgICB0YXJnZXRTdGFnZTogdGFyZ2V0Tm9kZS5uYW1lLFxuICAgICAgaXRlcmF0aW9uOiBpdGVyYXRpb24gKyAxLFxuICAgIH0pO1xuXG4gICAgdGhpcy5kZXBzLm5hcnJhdGl2ZUdlbmVyYXRvci5vbkxvb3AodGFyZ2V0Tm9kZS5uYW1lLCBpdGVyYXRpb24gKyAxLCB0YXJnZXROb2RlLmRlc2NyaXB0aW9uLCB0cmF2ZXJzYWxDb250ZXh0KTtcblxuICAgIGNvbnN0IG5leHRTdGFnZUNvbnRleHQgPSBjb250ZXh0LmNyZWF0ZU5leHQoYnJhbmNoUGF0aCBhcyBzdHJpbmcsIGl0ZXJhdGVkU3RhZ2VOYW1lLCB0YXJnZXROb2RlLmlkKTtcbiAgICByZXR1cm4gZXhlY3V0ZU5vZGUodGFyZ2V0Tm9kZSwgbmV4dFN0YWdlQ29udGV4dCwgYnJlYWtGbGFnLCBicmFuY2hQYXRoKTtcbiAgfVxuXG4gIC8qKiBkeW5hbWljTmV4dCBpcyBhIFN0YWdlTm9kZSB3aXRoIGZuIOKGkiBleGVjdXRlIGRpcmVjdGx5ICh0cnVseSBkeW5hbWljKS4gKi9cbiAgcHJpdmF0ZSBhc3luYyBoYW5kbGVEaXJlY3ROb2RlKFxuICAgIGR5bmFtaWNOb2RlOiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPixcbiAgICBjb250ZXh0OiBTdGFnZUNvbnRleHQsXG4gICAgYnJlYWtGbGFnOiB7IHNob3VsZEJyZWFrOiBib29sZWFuIH0sXG4gICAgYnJhbmNoUGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICAgIGV4ZWN1dGVOb2RlOiBFeGVjdXRlTm9kZUZuPFRPdXQsIFRTY29wZT4sXG4gICk6IFByb21pc2U8YW55PiB7XG4gICAgY29udGV4dC5hZGRMb2coJ2R5bmFtaWNOZXh0RGlyZWN0JywgdHJ1ZSk7XG4gICAgY29udGV4dC5hZGRMb2coJ2R5bmFtaWNOZXh0TmFtZScsIGR5bmFtaWNOb2RlLm5hbWUpO1xuXG4gICAgY29udGV4dC5hZGRGbG93RGVidWdNZXNzYWdlKCduZXh0JywgYE1vdmluZyB0byAke2R5bmFtaWNOb2RlLm5hbWV9IHN0YWdlIChkeW5hbWljKWAsIHtcbiAgICAgIHRhcmdldFN0YWdlOiBkeW5hbWljTm9kZS5uYW1lLFxuICAgIH0pO1xuXG4gICAgY29uc3QgbmV4dFN0YWdlQ29udGV4dCA9IGNvbnRleHQuY3JlYXRlTmV4dChicmFuY2hQYXRoIGFzIHN0cmluZywgZHluYW1pY05vZGUubmFtZSwgZHluYW1pY05vZGUuaWQpO1xuICAgIHJldHVybiBleGVjdXRlTm9kZShkeW5hbWljTm9kZSwgbmV4dFN0YWdlQ29udGV4dCwgYnJlYWtGbGFnLCBicmFuY2hQYXRoKTtcbiAgfVxuXG4gIC8qKiBkeW5hbWljTmV4dCBpcyBhIFN0YWdlTm9kZSB3aXRob3V0IGZuIOKGkiByZWZlcmVuY2UgYnkgSUQsIHJlc29sdmUgKyB0cmFjayBpdGVyYXRpb24uICovXG4gIHByaXZhdGUgYXN5bmMgaGFuZGxlTm9kZVJlZmVyZW5jZShcbiAgICBkeW5hbWljTm9kZTogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT4sXG4gICAgY3VycmVudE5vZGU6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+LFxuICAgIGNvbnRleHQ6IFN0YWdlQ29udGV4dCxcbiAgICBicmVha0ZsYWc6IHsgc2hvdWxkQnJlYWs6IGJvb2xlYW4gfSxcbiAgICBicmFuY2hQYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICAgZXhlY3V0ZU5vZGU6IEV4ZWN1dGVOb2RlRm48VE91dCwgVFNjb3BlPixcbiAgICB0cmF2ZXJzYWxDb250ZXh0PzogVHJhdmVyc2FsQ29udGV4dCxcbiAgKTogUHJvbWlzZTxhbnk+IHtcbiAgICBjb25zdCBuZXh0Tm9kZUlkID0gZHluYW1pY05vZGUuaWQ7XG4gICAgaWYgKCFuZXh0Tm9kZUlkKSB7XG4gICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSAnZHluYW1pY05leHQgbm9kZSBtdXN0IGhhdmUgYW4gaWQgd2hlbiB1c2VkIGFzIHJlZmVyZW5jZSc7XG4gICAgICB0aGlzLmRlcHMubG9nZ2VyLmVycm9yKGBFcnJvciBpbiBwaXBlbGluZSAoJHticmFuY2hQYXRofSkgc3RhZ2UgWyR7Y3VycmVudE5vZGUubmFtZX1dOmAsIHsgZXJyb3I6IGVycm9yTWVzc2FnZSB9KTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvck1lc3NhZ2UpO1xuICAgIH1cblxuICAgIGNvbnN0IHRhcmdldE5vZGUgPSB0aGlzLm5vZGVSZXNvbHZlci5maW5kTm9kZUJ5SWQobmV4dE5vZGVJZCk7XG4gICAgaWYgKCF0YXJnZXROb2RlKSB7XG4gICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBgZHluYW1pY05leHQgdGFyZ2V0IG5vZGUgbm90IGZvdW5kOiAke25leHROb2RlSWR9YDtcbiAgICAgIHRoaXMuZGVwcy5sb2dnZXIuZXJyb3IoYEVycm9yIGluIHBpcGVsaW5lICgke2JyYW5jaFBhdGh9KSBzdGFnZSBbJHtjdXJyZW50Tm9kZS5uYW1lfV06YCwgeyBlcnJvcjogZXJyb3JNZXNzYWdlIH0pO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGVycm9yTWVzc2FnZSk7XG4gICAgfVxuXG4gICAgY29uc3QgaXRlcmF0aW9uID0gdGhpcy5nZXRBbmRJbmNyZW1lbnRJdGVyYXRpb24obmV4dE5vZGVJZCk7XG4gICAgY29uc3QgaXRlcmF0ZWRTdGFnZU5hbWUgPSB0aGlzLmdldEl0ZXJhdGVkU3RhZ2VOYW1lKHRhcmdldE5vZGUubmFtZSwgaXRlcmF0aW9uKTtcbiAgICBjb250ZXh0LmFkZExvZygnZHluYW1pY05leHRUYXJnZXQnLCBuZXh0Tm9kZUlkKTtcbiAgICBjb250ZXh0LmFkZExvZygnZHluYW1pY05leHRJdGVyYXRpb24nLCBpdGVyYXRpb24pO1xuXG4gICAgY29udGV4dC5hZGRGbG93RGVidWdNZXNzYWdlKCdsb29wJywgYExvb3BpbmcgYmFjayB0byAke3RhcmdldE5vZGUubmFtZX0gKGl0ZXJhdGlvbiAke2l0ZXJhdGlvbiArIDF9KWAsIHtcbiAgICAgIHRhcmdldFN0YWdlOiB0YXJnZXROb2RlLm5hbWUsXG4gICAgICBpdGVyYXRpb246IGl0ZXJhdGlvbiArIDEsXG4gICAgfSk7XG5cbiAgICB0aGlzLmRlcHMubmFycmF0aXZlR2VuZXJhdG9yLm9uTG9vcCh0YXJnZXROb2RlLm5hbWUsIGl0ZXJhdGlvbiArIDEsIHRhcmdldE5vZGUuZGVzY3JpcHRpb24sIHRyYXZlcnNhbENvbnRleHQpO1xuXG4gICAgY29uc3QgbmV4dFN0YWdlQ29udGV4dCA9IGNvbnRleHQuY3JlYXRlTmV4dChicmFuY2hQYXRoIGFzIHN0cmluZywgaXRlcmF0ZWRTdGFnZU5hbWUsIHRhcmdldE5vZGUuaWQpO1xuICAgIHJldHVybiBleGVjdXRlTm9kZSh0YXJnZXROb2RlLCBuZXh0U3RhZ2VDb250ZXh0LCBicmVha0ZsYWcsIGJyYW5jaFBhdGgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbmV4dCBpdGVyYXRpb24gbnVtYmVyIGZvciBhIG5vZGUgYW5kIGluY3JlbWVudC5cbiAgICogUmV0dXJucyAwIGZvciBmaXJzdCB2aXNpdCwgMSBmb3Igc2Vjb25kLCBldGMuXG4gICAqIFRocm93cyBpZiBtYXhJdGVyYXRpb25zIGV4Y2VlZGVkIChpbmZpbml0ZSBsb29wIGd1YXJkKS5cbiAgICovXG4gIGdldEFuZEluY3JlbWVudEl0ZXJhdGlvbihub2RlSWQ6IHN0cmluZyk6IG51bWJlciB7XG4gICAgY29uc3QgY3VycmVudCA9IHRoaXMuaXRlcmF0aW9uQ291bnRlcnMuZ2V0KG5vZGVJZCkgPz8gMDtcbiAgICBpZiAoY3VycmVudCA+PSB0aGlzLm1heEl0ZXJhdGlvbnMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYE1heGltdW0gbG9vcCBpdGVyYXRpb25zICgke3RoaXMubWF4SXRlcmF0aW9uc30pIGV4Y2VlZGVkIGZvciBub2RlICcke25vZGVJZH0nLiBgICtcbiAgICAgICAgICAnU2V0IG1heEl0ZXJhdGlvbnMgdG8gaW5jcmVhc2UgdGhlIGxpbWl0LicsXG4gICAgICApO1xuICAgIH1cbiAgICB0aGlzLml0ZXJhdGlvbkNvdW50ZXJzLnNldChub2RlSWQsIGN1cnJlbnQgKyAxKTtcblxuICAgIGlmICh0aGlzLm9uSXRlcmF0aW9uVXBkYXRlKSB7XG4gICAgICB0aGlzLm9uSXRlcmF0aW9uVXBkYXRlKG5vZGVJZCwgY3VycmVudCArIDEpO1xuICAgIH1cblxuICAgIHJldHVybiBjdXJyZW50O1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIGFuIGl0ZXJhdGVkIHN0YWdlIG5hbWUgZm9yIGNvbnRleHQgdHJlZS5cbiAgICogRmlyc3QgdmlzaXQ6IFwiYXNrTExNXCIsIHNlY29uZDogXCJhc2tMTE0uMVwiLCB0aGlyZDogXCJhc2tMTE0uMlwiLlxuICAgKi9cbiAgZ2V0SXRlcmF0ZWRTdGFnZU5hbWUoYmFzZU5hbWU6IHN0cmluZywgaXRlcmF0aW9uOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIHJldHVybiBpdGVyYXRpb24gPT09IDAgPyBiYXNlTmFtZSA6IGAke2Jhc2VOYW1lfS4ke2l0ZXJhdGlvbn1gO1xuICB9XG59XG4iXX0=
|
|
127
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29udGludWF0aW9uUmVzb2x2ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2VuZ2luZS9oYW5kbGVycy9Db250aW51YXRpb25SZXNvbHZlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtQkc7OztBQVNVLFFBQUEsc0JBQXNCLEdBQUcsSUFBSSxDQUFDO0FBYTNDLE1BQWEsb0JBQW9CO0lBV1o7SUFDQTtJQVhuQjs7O09BR0c7SUFDSyxpQkFBaUIsR0FBd0IsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUUxQyxpQkFBaUIsQ0FBMkM7SUFDNUQsYUFBYSxDQUFTO0lBRXZDLFlBQ21CLElBQStCLEVBQy9CLFlBQXdDLEVBQ3pELGlCQUEyRCxFQUMzRCxhQUFzQjtRQUhMLFNBQUksR0FBSixJQUFJLENBQTJCO1FBQy9CLGlCQUFZLEdBQVosWUFBWSxDQUE0QjtRQUl6RCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsaUJBQWlCLENBQUM7UUFDM0MsSUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLElBQUksOEJBQXNCLENBQUM7SUFDL0QsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsS0FBSyxDQUFDLE9BQU8sQ0FDWCxXQUE2QyxFQUM3QyxJQUE2QixFQUM3QixPQUFxQixFQUNyQixTQUFtQyxFQUNuQyxVQUE4QixFQUM5QixXQUF3QyxFQUN4QyxnQkFBbUM7UUFFbkMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztRQUM1RixPQUFPLFdBQVcsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7T0FXRztJQUNILGFBQWEsQ0FDWCxXQUE2QyxF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Z0IsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLFVBQW9CLEVBQUUsaUJBQWlCLEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3BHLE9BQU8sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxDQUFDO0lBQ3pELENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsd0JBQXdCLENBQUMsTUFBYztRQUNyQyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN4RCxJQUFJLE9BQU8sSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDbEMsTUFBTSxJQUFJLEtBQUssQ0FDYiw0QkFBNEIsSUFBSSxDQUFDLGFBQWEsd0JBQXdCLE1BQU0sS0FBSztnQkFDL0UsMENBQTBDLENBQzdDLENBQUM7UUFDSixDQUFDO1FBQ0QsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBRWhELElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDM0IsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDOUMsQ0FBQztRQUVELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxvQkFBb0IsQ0FBQyxRQUFnQixFQUFFLFNBQWlCO1FBQ3RELE9BQU8sU0FBUyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsSUFBSSxTQUFTLEVBQUUsQ0FBQztJQUNqRSxDQUFDO0NBQ0Y7QUFySUQsb0RBcUlDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb250aW51YXRpb25SZXNvbHZlciDigJQgQmFjay1lZGdlIHJlc29sdXRpb24gKyBpdGVyYXRpb24gY291bnRpbmcuXG4gKlxuICogUmVzb2x2ZXMgZHluYW1pYyBjb250aW51YXRpb25zIChsb29wLWJhY2tzLCBkeW5hbWljIG5leHQpIGFuZCB0cmFja3NcbiAqIHBlci1ub2RlIGl0ZXJhdGlvbiBjb3VudHMgZm9yIGNvbnRleHQgdHJlZSBuYW1pbmcuXG4gKlxuICogU3VwcG9ydHMgdGhyZWUgZHluYW1pY05leHQgcGF0dGVybnM6XG4gKiAtIFN0cmluZyBJRCDihpIgcmVmZXJlbmNlIHRvIGV4aXN0aW5nIG5vZGUgKHJlc29sdmUgdmlhIE5vZGVSZXNvbHZlcilcbiAqIC0gU3RhZ2VOb2RlIHdpdGggZm4g4oaSIHRydWx5IGR5bmFtaWMgbm9kZSAoZXhlY3V0ZSBkaXJlY3RseSlcbiAqIC0gU3RhZ2VOb2RlIHdpdGhvdXQgZm4g4oaSIHJlZmVyZW5jZSBieSBJRCAocmVzb2x2ZSB2aWEgTm9kZVJlc29sdmVyKVxuICpcbiAqIFR3byBlbnRyeSBwb2ludHM6XG4gKiAtIGByZXNvbHZlVGFyZ2V0YCDigJQgcmVzb2x2ZXMgdGhlIGNvbnRpbnVhdGlvbiB0byBgeyBub2RlLCBjb250ZXh0IH1gIGFuZFxuICogICBmaXJlcyBldmVyeSBzaWRlIGVmZmVjdCAoaXRlcmF0aW9uIGNvdW50aW5nLCBkZWJ1ZyBsb2dzLCBgb25Mb29wYFxuICogICBuYXJyYXRpdmUpIFdJVEhPVVQgZXhlY3V0aW5nLiBUaGUgdHJhdmVyc2VyJ3MgdHJhbXBvbGluZSBkcml2ZXIgdXNlc1xuICogICB0aGlzIHRvIGZvbGxvdyBsb29wIGVkZ2VzIGl0ZXJhdGl2ZWx5IOKAlCBmbGF0IHN0YWNrLCBzbyB0aGUgaXRlcmF0aW9uXG4gKiAgIGxpbWl0IChub3QgY2FsbC1zdGFjayBkZXB0aCkgaXMgd2hhdCBib3VuZHMgYSBsb29wLlxuICogLSBgcmVzb2x2ZWAg4oCUIHJlc29sdmVUYXJnZXQgKyBpbW1lZGlhdGUgZXhlY3V0aW9uIHZpYSB0aGUgcHJvdmlkZWRcbiAqICAgYGV4ZWN1dGVOb2RlYCBjYWxsYmFjay4gS2VwdCBmb3IgZGlyZWN0L2FkdmFuY2VkIGNhbGxlcnMuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBTdGFnZUNvbnRleHQgfSBmcm9tICcuLi8uLi9tZW1vcnkvU3RhZ2VDb250ZXh0LmpzJztcbmltcG9ydCB0eXBlIHsgU3RhZ2VOb2RlIH0gZnJvbSAnLi4vZ3JhcGgvU3RhZ2VOb2RlLmpzJztcbmltcG9ydCB0eXBlIHsgVHJhdmVyc2FsQ29udGV4dCB9IGZyb20gJy4uL25hcnJhdGl2ZS90eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IEhhbmRsZXJEZXBzIH0gZnJvbSAnLi4vdHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBOb2RlUmVzb2x2ZXIgfSBmcm9tICcuL05vZGVSZXNvbHZlci5qcyc7XG5pbXBvcnQgdHlwZSB7IEV4ZWN1dGVOb2RlRm4gfSBmcm9tICcuL3R5cGVzLmpzJztcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfTUFYX0lURVJBVElPTlMgPSAxMDAwO1xuXG4vKipcbiAqIEEgcmVzb2x2ZWQgY29udGludWF0aW9uIHRhcmdldCDigJQgdGhlIG5vZGUgdG8gZXhlY3V0ZSBuZXh0IHBsdXMgdGhlXG4gKiBTdGFnZUNvbnRleHQgdG8gZXhlY3V0ZSBpdCBpbi4gQWxsIHNpZGUgZWZmZWN0cyAoaXRlcmF0aW9uIGNvdW50aW5nLFxuICogZGVidWcgbG9ncywgYG9uTG9vcGAgbmFycmF0aXZlKSBoYXZlIGFscmVhZHkgZmlyZWQgYnkgdGhlIHRpbWUgdGhpc1xuICogaXMgcmV0dXJuZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb2x2ZWRDb250aW51YXRpb248VE91dCA9IGFueSwgVFNjb3BlID0gYW55PiB7XG4gIG5vZGU6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+O1xuICBjb250ZXh0OiBTdGFnZUNvbnRleHQ7XG59XG5cbmV4cG9ydCBjbGFzcyBDb250aW51YXRpb25SZXNvbHZlcjxUT3V0ID0gYW55LCBUU2NvcGUgPSBhbnk+IHtcbiAgLyoqXG4gICAqIEl0ZXJhdGlvbiBjb3VudGVyIHBlciBub2RlIElELlxuICAgKiBLZXk6IG5vZGUuaWQsIFZhbHVlOiB2aXNpdCBjb3VudCAoMCA9IGZpcnN0IHZpc2l0KS5cbiAgICovXG4gIHByaXZhdGUgaXRlcmF0aW9uQ291bnRlcnM6IE1hcDxzdHJpbmcsIG51bWJlcj4gPSBuZXcgTWFwKCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBvbkl0ZXJhdGlvblVwZGF0ZT86IChub2RlSWQ6IHN0cmluZywgY291bnQ6IG51bWJlcikgPT4gdm9pZDtcbiAgcHJpdmF0ZSByZWFkb25seSBtYXhJdGVyYXRpb25zOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBkZXBzOiBIYW5kbGVyRGVwczxUT3V0LCBUU2NvcGU+LFxuICAgIHByaXZhdGUgcmVhZG9ubHkgbm9kZVJlc29sdmVyOiBOb2RlUmVzb2x2ZXI8VE91dCwgVFNjb3BlPixcbiAgICBvbkl0ZXJhdGlvblVwZGF0ZT86IChub2RlSWQ6IHN0cmluZywgY291bnQ6IG51bWJlcikgPT4gdm9pZCxcbiAgICBtYXhJdGVyYXRpb25zPzogbnVtYmVyLFxuICApIHtcbiAgICB0aGlzLm9uSXRlcmF0aW9uVXBkYXRlID0gb25JdGVyYXRpb25VcGRhdGU7XG4gICAgdGhpcy5tYXhJdGVyYXRpb25zID0gbWF4SXRlcmF0aW9ucyA/PyBERUZBVUxUX01BWF9JVEVSQVRJT05TO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmUgYSBkeW5hbWljIGNvbnRpbnVhdGlvbiBhbmQgZXhlY3V0ZSBpdCBpbW1lZGlhdGVseS5cbiAgICogRXF1aXZhbGVudCB0byBgZXhlY3V0ZU5vZGUoLi4ucmVzb2x2ZVRhcmdldCguLi4pKWAg4oCUIHRoZSB0cmF2ZXJzZXInc1xuICAgKiBkcml2ZXIgbG9vcCBjYWxscyBgcmVzb2x2ZVRhcmdldGAgZGlyZWN0bHkgaW5zdGVhZCBzbyB0aGUgY29udGludWF0aW9uXG4gICAqIGJlY29tZXMgYSBmbGF0IHRyYW1wb2xpbmUgaG9wIHJhdGhlciB0aGFuIGEgcmV0YWluZWQgcmVjdXJzaXZlIGZyYW1lLlxuICAgKi9cbiAgYXN5bmMgcmVzb2x2ZShcbiAgICBkeW5hbWljTmV4dDogc3RyaW5nIHwgU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT4sXG4gICAgbm9kZTogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT4sXG4gICAgY29udGV4dDogU3RhZ2VDb250ZXh0LFxuICAgIGJyZWFrRmxhZzogeyBzaG91bGRCcmVhazogYm9vbGVhbiB9LFxuICAgIGJyYW5jaFBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICBleGVjdXRlTm9kZTogRXhlY3V0ZU5vZGVGbjxUT3V0LCBUU2NvcGU+LFxuICAgIHRyYXZlcnNhbENvbnRleHQ/OiBUcmF2ZXJzYWxDb250ZXh0LFxuICApOiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnN0IHRhcmdldCA9IHRoaXMucmVzb2x2ZVRhcmdldChkeW5hbWljTmV4dCwgbm9kZSwgY29udGV4dCwgYnJhbmNoUGF0aCwgdHJhdmVyc2FsQ29udGV4dCk7XG4gICAgcmV0dXJuIGV4ZWN1dGVOb2RlKHRhcmdldC5ub2RlLCB0YXJnZXQuY29udGV4dCwgYnJlYWtGbGFnLCBicmFuY2hQYXRoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlIGEgZHluYW1pYyBjb250aW51YXRpb24gdG8gaXRzIHRhcmdldCBub2RlICsgbmV4dCBTdGFnZUNvbnRleHRcbiAgICogV0lUSE9VVCBleGVjdXRpbmcgaXQuIEZpcmVzIHRoZSBzYW1lIHNpZGUgZWZmZWN0cyBgcmVzb2x2ZWAgYWx3YXlzIGRpZFxuICAgKiAoaXRlcmF0aW9uIGNvdW50aW5nICsgbGltaXQsIGBkeW5hbWljTmV4dCpgIGxvZ3MsIGxvb3AgZGVidWcgbWVzc2FnZSxcbiAgICogYG9uTG9vcGAgbmFycmF0aXZlKSwgaW4gdGhlIHNhbWUgb3JkZXIuXG4gICAqXG4gICAqIFRocmVlIGR5bmFtaWNOZXh0IHBhdHRlcm5zOlxuICAgKiAtIFN0YWdlTm9kZSB3aXRoIGZuIOKGkiB0cnVseSBkeW5hbWljIG5vZGUsIHJldHVybmVkIGFzLWlzIChubyBpdGVyYXRpb25cbiAgICogICB0cmFja2luZyDigJQgaXQgaXMgYSBmcmVzaCBub2RlLCBub3QgYSBiYWNrLWVkZ2UpLlxuICAgKiAtIFN0cmluZyBJRCDihpIgcmVmZXJlbmNlIHRvIGFuIGV4aXN0aW5nIG5vZGUsIHJlc29sdmVkIHZpYSBOb2RlUmVzb2x2ZXIuXG4gICAqIC0gU3RhZ2VOb2RlIHdpdGhvdXQgZm4g4oaSIHJlZmVyZW5jZSBieSBJRCwgcmVzb2x2ZWQgdmlhIE5vZGVSZXNvbHZlci5cbiAgICovXG4gIHJlc29sdmVUYXJnZXQoXG4gICAgZHluYW1pY05leHQ6IHN0cmluZyB8IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+LFxuICAgIGN1cnJlbnROb2RlOiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPixcbiAgICBjb250ZXh0OiBTdGFnZUNvbnRleHQsXG4gICAgYnJhbmNoUGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICAgIHRyYXZlcnNhbENvbnRleHQ/OiBUcmF2ZXJzYWxDb250ZXh0LFxuICApOiBSZXNvbHZlZENvbnRpbnVhdGlvbjxUT3V0LCBUU2NvcGU+IHtcbiAgICAvLyBUcnVseSBkeW5hbWljIG5vZGUgKGhhcyBmbikg4oaSIGV4ZWN1dGUgZGlyZWN0bHksIG5vIGl0ZXJhdGlvbiB0cmFja2luZy5cbiAgICBpZiAodHlwZW9mIGR5bmFtaWNOZXh0ICE9PSAnc3RyaW5nJyAmJiBkeW5hbWljTmV4dC5mbikge1xuICAgICAgY29udGV4dC5hZGRMb2coJ2R5bmFtaWNOZXh0RGlyZWN0JywgdHJ1ZSk7XG4gICAgICBjb250ZXh0LmFkZExvZygnZHluYW1pY05leHROYW1lJywgZHluYW1pY05leHQubmFtZSk7XG5cbiAgICAgIGNvbnRleHQuYWRkRmxvd0RlYnVnTWVzc2FnZSgnbmV4dCcsIGBNb3ZpbmcgdG8gJHtkeW5hbWljTmV4dC5uYW1lfSBzdGFnZSAoZHluYW1pYylgLCB7XG4gICAgICAgIHRhcmdldFN0YWdlOiBkeW5hbWljTmV4dC5uYW1lLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IG5leHRTdGFnZUNvbnRleHQgPSBjb250ZXh0LmNyZWF0ZU5leHQoYnJhbmNoUGF0aCBhcyBzdHJpbmcsIGR5bmFtaWNOZXh0Lm5hbWUsIGR5bmFtaWNOZXh0LmlkKTtcbiAgICAgIHJldHVybiB7IG5vZGU6IGR5bmFtaWNOZXh0LCBjb250ZXh0OiBuZXh0U3RhZ2VDb250ZXh0IH07XG4gICAgfVxuXG4gICAgLy8gUmVmZXJlbmNlIOKAlCBieSBzdHJpbmcgSUQgb3IgYnkgbm9kZS13aXRob3V0LWZuIElELiBBIG5vZGUgcmVmZXJlbmNlXG4gICAgLy8gd2l0aG91dCBhbiBpZCBpcyBhIHVzYWdlIGVycm9yOyBhIHN0cmluZyByZWZlcmVuY2UgaXMgcGFzc2VkIHRocm91Z2hcbiAgICAvLyB2ZXJiYXRpbSAoYW4gdW5rbm93biBpZCBzdXJmYWNlcyBhcyBcInRhcmdldCBub2RlIG5vdCBmb3VuZFwiIGJlbG93KS5cbiAgICBpZiAodHlwZW9mIGR5bmFtaWNOZXh0ICE9PSAnc3RyaW5nJyAmJiAhZHluYW1pY05leHQuaWQpIHtcbiAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9ICdkeW5hbWljTmV4dCBub2RlIG11c3QgaGF2ZSBhbiBpZCB3aGVuIHVzZWQgYXMgcmVmZXJlbmNlJztcbiAgICAgIHRoaXMuZGVwcy5sb2dnZXIuZXJyb3IoYEVycm9yIGluIHBpcGVsaW5lICgke2JyYW5jaFBhdGh9KSBzdGFnZSBbJHtjdXJyZW50Tm9kZS5uYW1lfV06YCwgeyBlcnJvcjogZXJyb3JNZXNzYWdlIH0pO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGVycm9yTWVzc2FnZSk7XG4gICAgfVxuICAgIGNvbnN0IG5leHROb2RlSWQgPSB0eXBlb2YgZHluYW1pY05leHQgPT09ICdzdHJpbmcnID8gZHluYW1pY05leHQgOiBkeW5hbWljTmV4dC5pZCE7XG5cbiAgICBjb25zdCB0YXJnZXROb2RlID0gdGhpcy5ub2RlUmVzb2x2ZXIuZmluZE5vZGVCeUlkKG5leHROb2RlSWQpO1xuICAgIGlmICghdGFyZ2V0Tm9kZSkge1xuICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gYGR5bmFtaWNOZXh0IHRhcmdldCBub2RlIG5vdCBmb3VuZDogJHtuZXh0Tm9kZUlkfWA7XG4gICAgICB0aGlzLmRlcHMubG9nZ2VyLmVycm9yKGBFcnJvciBpbiBwaXBlbGluZSAoJHticmFuY2hQYXRofSkgc3RhZ2UgWyR7Y3VycmVudE5vZGUubmFtZX1dOmAsIHsgZXJyb3I6IGVycm9yTWVzc2FnZSB9KTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvck1lc3NhZ2UpO1xuICAgIH1cblxuICAgIGNvbnN0IGl0ZXJhdGlvbiA9IHRoaXMuZ2V0QW5kSW5jcmVtZW50SXRlcmF0aW9uKG5leHROb2RlSWQpO1xuICAgIGNvbnN0IGl0ZXJhdGVkU3RhZ2VOYW1lID0gdGhpcy5nZXRJdGVyYXRlZFN0YWdlTmFtZSh0YXJnZXROb2RlLm5hbWUsIGl0ZXJhdGlvbik7XG4gICAgY29udGV4dC5hZGRMb2coJ2R5bmFtaWNOZXh0VGFyZ2V0JywgbmV4dE5vZGVJZCk7XG4gICAgY29udGV4dC5hZGRMb2coJ2R5bmFtaWNOZXh0SXRlcmF0aW9uJywgaXRlcmF0aW9uKTtcblxuICAgIGNvbnRleHQuYWRkRmxvd0RlYnVnTWVzc2FnZSgnbG9vcCcsIGBMb29waW5nIGJhY2sgdG8gJHt0YXJnZXROb2RlLm5hbWV9IChpdGVyYXRpb24gJHtpdGVyYXRpb24gKyAxfSlgLCB7XG4gICAgICB0YXJnZXRTdGFnZTogdGFyZ2V0Tm9kZS5uYW1lLFxuICAgICAgaXRlcmF0aW9uOiBpdGVyYXRpb24gKyAxLFxuICAgIH0pO1xuXG4gICAgdGhpcy5kZXBzLm5hcnJhdGl2ZUdlbmVyYXRvci5vbkxvb3AodGFyZ2V0Tm9kZS5uYW1lLCBpdGVyYXRpb24gKyAxLCB0YXJnZXROb2RlLmRlc2NyaXB0aW9uLCB0cmF2ZXJzYWxDb250ZXh0KTtcblxuICAgIGNvbnN0IG5leHRTdGFnZUNvbnRleHQgPSBjb250ZXh0LmNyZWF0ZU5leHQoYnJhbmNoUGF0aCBhcyBzdHJpbmcsIGl0ZXJhdGVkU3RhZ2VOYW1lLCB0YXJnZXROb2RlLmlkKTtcbiAgICByZXR1cm4geyBub2RlOiB0YXJnZXROb2RlLCBjb250ZXh0OiBuZXh0U3RhZ2VDb250ZXh0IH07XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBuZXh0IGl0ZXJhdGlvbiBudW1iZXIgZm9yIGEgbm9kZSBhbmQgaW5jcmVtZW50LlxuICAgKiBSZXR1cm5zIDAgZm9yIGZpcnN0IHZpc2l0LCAxIGZvciBzZWNvbmQsIGV0Yy5cbiAgICogVGhyb3dzIGlmIG1heEl0ZXJhdGlvbnMgZXhjZWVkZWQgKGluZmluaXRlIGxvb3AgZ3VhcmQpLlxuICAgKi9cbiAgZ2V0QW5kSW5jcmVtZW50SXRlcmF0aW9uKG5vZGVJZDogc3RyaW5nKTogbnVtYmVyIHtcbiAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5pdGVyYXRpb25Db3VudGVycy5nZXQobm9kZUlkKSA/PyAwO1xuICAgIGlmIChjdXJyZW50ID49IHRoaXMubWF4SXRlcmF0aW9ucykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgTWF4aW11bSBsb29wIGl0ZXJhdGlvbnMgKCR7dGhpcy5tYXhJdGVyYXRpb25zfSkgZXhjZWVkZWQgZm9yIG5vZGUgJyR7bm9kZUlkfScuIGAgK1xuICAgICAgICAgICdTZXQgbWF4SXRlcmF0aW9ucyB0byBpbmNyZWFzZSB0aGUgbGltaXQuJyxcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMuaXRlcmF0aW9uQ291bnRlcnMuc2V0KG5vZGVJZCwgY3VycmVudCArIDEpO1xuXG4gICAgaWYgKHRoaXMub25JdGVyYXRpb25VcGRhdGUpIHtcbiAgICAgIHRoaXMub25JdGVyYXRpb25VcGRhdGUobm9kZUlkLCBjdXJyZW50ICsgMSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGN1cnJlbnQ7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGUgYW4gaXRlcmF0ZWQgc3RhZ2UgbmFtZSBmb3IgY29udGV4dCB0cmVlLlxuICAgKiBGaXJzdCB2aXNpdDogXCJhc2tMTE1cIiwgc2Vjb25kOiBcImFza0xMTS4xXCIsIHRoaXJkOiBcImFza0xMTS4yXCIuXG4gICAqL1xuICBnZXRJdGVyYXRlZFN0YWdlTmFtZShiYXNlTmFtZTogc3RyaW5nLCBpdGVyYXRpb246IG51bWJlcik6IHN0cmluZyB7XG4gICAgcmV0dXJuIGl0ZXJhdGlvbiA9PT0gMCA/IGJhc2VOYW1lIDogYCR7YmFzZU5hbWV9LiR7aXRlcmF0aW9ufWA7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -4,6 +4,16 @@
|
|
|
4
4
|
*
|
|
5
5
|
* Handles scope-based deciders (stage IS the decider, returns branch ID).
|
|
6
6
|
* Logs flow control decisions and narrative sentences.
|
|
7
|
+
*
|
|
8
|
+
* Two entry points:
|
|
9
|
+
* - `prepareDispatch` — runs the decider stage, commits, resolves the chosen
|
|
10
|
+
* branch, fires narrative, and returns the chosen node + branch context
|
|
11
|
+
* WITHOUT executing it. The traverser's trampoline driver uses this so a
|
|
12
|
+
* decider with no continuation of its own can hand the branch to the
|
|
13
|
+
* driver as a flat hop (loop-heavy decider charts stay flat-stacked).
|
|
14
|
+
* - `handleScopeBased` — prepareDispatch + immediate branch execution via
|
|
15
|
+
* the provided `executeNode` callback. Kept for direct/advanced callers
|
|
16
|
+
* and for deciders whose own `.next` must run after the branch completes.
|
|
7
17
|
*/
|
|
8
18
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
19
|
exports.DeciderHandler = void 0;
|
|
@@ -20,6 +30,30 @@ class DeciderHandler {
|
|
|
20
30
|
* Execution order: runStage(fn) → commit → resolve child → log → executeNode(child).
|
|
21
31
|
*/
|
|
22
32
|
async handleScopeBased(node, stageFunc, context, breakFlag, branchPath, runStage, executeNode, traversalContext) {
|
|
33
|
+
const dispatch = await this.prepareDispatch(node, stageFunc, context, breakFlag, branchPath, runStage, traversalContext);
|
|
34
|
+
if (dispatch.kind === 'break') {
|
|
35
|
+
return dispatch.branchId;
|
|
36
|
+
}
|
|
37
|
+
try {
|
|
38
|
+
return await executeNode(dispatch.chosen, dispatch.branchContext, breakFlag, branchPath);
|
|
39
|
+
}
|
|
40
|
+
catch (error) {
|
|
41
|
+
// Stamp invoker context on PauseSignal during bubble-up.
|
|
42
|
+
// The decider (node) is the invoker; its .next is the continuation target.
|
|
43
|
+
if ((0, types_js_2.isPauseSignal)(error)) {
|
|
44
|
+
error.setInvoker(node.id, node.next?.id);
|
|
45
|
+
throw error;
|
|
46
|
+
}
|
|
47
|
+
throw error;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Run the decider stage and resolve the chosen branch WITHOUT executing it.
|
|
52
|
+
* Everything up to (and including) the `onDecision`/`onStageExecuted`
|
|
53
|
+
* narrative and the branch context creation happens here — only the
|
|
54
|
+
* branch execution itself is left to the caller.
|
|
55
|
+
*/
|
|
56
|
+
async prepareDispatch(node, stageFunc, context, breakFlag, branchPath, runStage, traversalContext) {
|
|
23
57
|
const breakFn = () => (breakFlag.shouldBreak = true);
|
|
24
58
|
let branchId;
|
|
25
59
|
let decisionEvidence;
|
|
@@ -48,7 +82,7 @@ class DeciderHandler {
|
|
|
48
82
|
}
|
|
49
83
|
context.commit();
|
|
50
84
|
if (breakFlag.shouldBreak) {
|
|
51
|
-
return branchId;
|
|
85
|
+
return { kind: 'break', branchId };
|
|
52
86
|
}
|
|
53
87
|
// Resolve child by matching branch ID against node.children.
|
|
54
88
|
// Match branchId first (original unprefixed ID), fall back to id for backward compat.
|
|
@@ -88,19 +122,8 @@ class DeciderHandler {
|
|
|
88
122
|
// so consumers tracking "did this stage run" work uniformly.
|
|
89
123
|
this.deps.narrativeGenerator.onStageExecuted(node.name, node.description, traversalContext, 'decider');
|
|
90
124
|
const branchContext = context.createChild(branchPath, chosen.id, chosen.name, chosen.id);
|
|
91
|
-
|
|
92
|
-
return await executeNode(chosen, branchContext, breakFlag, branchPath);
|
|
93
|
-
}
|
|
94
|
-
catch (error) {
|
|
95
|
-
// Stamp invoker context on PauseSignal during bubble-up.
|
|
96
|
-
// The decider (node) is the invoker; its .next is the continuation target.
|
|
97
|
-
if ((0, types_js_2.isPauseSignal)(error)) {
|
|
98
|
-
error.setInvoker(node.id, node.next?.id);
|
|
99
|
-
throw error;
|
|
100
|
-
}
|
|
101
|
-
throw error;
|
|
102
|
-
}
|
|
125
|
+
return { kind: 'dispatch', chosen, branchContext };
|
|
103
126
|
}
|
|
104
127
|
}
|
|
105
128
|
exports.DeciderHandler = DeciderHandler;
|
|
106
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGVjaWRlckhhbmRsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2VuZ2luZS9oYW5kbGVycy9EZWNpZGVySGFuZGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7O0dBS0c7OztBQUdILG9EQUF3RDtBQUV4RCxtREFBcUQ7QUFRckQsTUFBYSxjQUFjO0lBQ0k7SUFBN0IsWUFBNkIsSUFBK0I7UUFBL0IsU0FBSSxHQUFKLElBQUksQ0FBMkI7SUFBRyxDQUFDO0lBRWhFOzs7O09BSUc7SUFDSCxLQUFLLENBQUMsZ0JBQWdCLENBQ3BCLElBQTZCLEVBQzdCLFNBQXNDLEVBQ3RDLE9BQXFCLEVBQ3JCLFNBQW1DLEVBQ25DLFVBQThCLEVBQzlCLFFBQWtDLEVBQ2xDLFdBQXdDLEVBQ3hDLGdCQUFtQztRQUVuQyxNQUFNLE9BQU8sR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFFckQsSUFBSSxRQUFnQixDQUFDO1FBQ3JCLElBQUksZ0JBQThDLENBQUM7UUFDbkQsSUFBSSxDQUFDO1lBQ0gsTUFBTSxXQUFXLEdBQUcsTUFBTSxRQUFRLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDdEUsOERBQThEO1lBQzlELElBQUksV0FBVyxJQUFJLE9BQU8sV0FBVyxLQUFLLFFBQVEsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLFdBQXFCLEVBQUUsMEJBQWUsQ0FBQyxFQUFFLENBQUM7Z0JBQzFHLFFBQVEsR0FBSSxXQUFtQixDQUFDLE1BQU0sQ0FBQztnQkFDdkMsZ0JBQWdCLEdBQUksV0FBbUIsQ0FBQyxRQUFRLENBQUM7WUFDbkQsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLFFBQVEsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDakMsQ0FBQztRQUNILENBQUM7UUFBQyxPQUFPLEtB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QUM7UUFFSCxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsQ0FDckMsSUFBSSxDQUFDLElBQUksRUFDVCxNQUFNLENBQUMsSUFBSSxFQUNYLFNBQVMsRUFDVCxJQUFJLENBQUMsV0FBVyxFQUNoQixnQkFBZ0IsRUFDaEIsZ0JBQWdCLENBQ2pCLENBQUM7UUFDRixrRUFBa0U7UUFDbEUsNkRBQTZEO1FBQzdELElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUV2RyxNQUFNLGFBQWEsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLFVBQW9CLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUVuRyxJQUFJLENBQUM7WUFDSCxPQUFPLE1BQU0sV0FBVyxDQUFDLE1BQU0sRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ3pFLENBQUM7UUFBQyxPQUFPLEtBQWMsRUFBRSxDQUFDO1lBQ3hCLHlEQUF5RDtZQUN6RCwyRUFBMkU7WUFDM0UsSUFBSSxJQUFBLHdCQUFhLEVBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDekIsS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRyxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQzFDLE1BQU0sS0FBSyxDQUFDO1lBQ2QsQ0FBQztZQUNELE1BQU0sS0FBSyxDQUFDO1FBQ2QsQ0FBQztJQUNILENBQUM7Q0FDRjtBQTdHRCx3Q0E2R0MiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIERlY2lkZXJIYW5kbGVyIOKAlCBTaW5nbGUtY2hvaWNlIGNvbmRpdGlvbmFsIGJyYW5jaGluZy5cbiAqXG4gKiBIYW5kbGVzIHNjb3BlLWJhc2VkIGRlY2lkZXJzIChzdGFnZSBJUyB0aGUgZGVjaWRlciwgcmV0dXJucyBicmFuY2ggSUQpLlxuICogTG9ncyBmbG93IGNvbnRyb2wgZGVjaXNpb25zIGFuZCBuYXJyYXRpdmUgc2VudGVuY2VzLlxuICovXG5cbmltcG9ydCB0eXBlIHsgRGVjaXNpb25FdmlkZW5jZSB9IGZyb20gJy4uLy4uL2RlY2lkZS90eXBlcy5qcyc7XG5pbXBvcnQgeyBERUNJU0lPTl9SRVNVTFQgfSBmcm9tICcuLi8uLi9kZWNpZGUvdHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBTdGFnZUNvbnRleHQgfSBmcm9tICcuLi8uLi9tZW1vcnkvU3RhZ2VDb250ZXh0LmpzJztcbmltcG9ydCB7IGlzUGF1c2VTaWduYWwgfSBmcm9tICcuLi8uLi9wYXVzZS90eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IFN0YWdlTm9kZSB9IGZyb20gJy4uL2dyYXBoL1N0YWdlTm9kZS5qcyc7XG5pbXBvcnQgdHlwZSB7IFRyYXZlcnNhbENvbnRleHQgfSBmcm9tICcuLi9uYXJyYXRpdmUvdHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBIYW5kbGVyRGVwcywgU3RhZ2VGdW5jdGlvbiB9IGZyb20gJy4uL3R5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgRXhlY3V0ZU5vZGVGbiwgUnVuU3RhZ2VGbiB9IGZyb20gJy4vdHlwZXMuanMnO1xuXG5leHBvcnQgdHlwZSB7IEV4ZWN1dGVOb2RlRm4sIFJ1blN0YWdlRm4gfTtcblxuZXhwb3J0IGNsYXNzIERlY2lkZXJIYW5kbGVyPFRPdXQgPSBhbnksIFRTY29wZSA9IGFueT4ge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGRlcHM6IEhhbmRsZXJEZXBzPFRPdXQsIFRTY29wZT4pIHt9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBhIHNjb3BlLWJhc2VkIGRlY2lkZXIgKGNyZWF0ZWQgdmlhIGFkZERlY2lkZXJGdW5jdGlvbikuXG4gICAqIFRoZSBzdGFnZSBmdW5jdGlvbiBJUyB0aGUgZGVjaWRlciDigJQgaXRzIHJldHVybiB2YWx1ZSBpcyB0aGUgYnJhbmNoIElELlxuICAgKiBFeGVjdXRpb24gb3JkZXI6IHJ1blN0YWdlKGZuKSDihpIgY29tbWl0IOKGkiByZXNvbHZlIGNoaWxkIOKGkiBsb2cg4oaSIGV4ZWN1dGVOb2RlKGNoaWxkKS5cbiAgICovXG4gIGFzeW5jIGhhbmRsZVNjb3BlQmFzZWQoXG4gICAgbm9kZTogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT4sXG4gICAgc3RhZ2VGdW5jOiBTdGFnZUZ1bmN0aW9uPFRPdXQsIFRTY29wZT4sXG4gICAgY29udGV4dDogU3RhZ2VDb250ZXh0LFxuICAgIGJyZWFrRmxhZzogeyBzaG91bGRCcmVhazogYm9vbGVhbiB9LFxuICAgIGJyYW5jaFBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICBydW5TdGFnZTogUnVuU3RhZ2VGbjxUT3V0LCBUU2NvcGU+LFxuICAgIGV4ZWN1dGVOb2RlOiBFeGVjdXRlTm9kZUZuPFRPdXQsIFRTY29wZT4sXG4gICAgdHJhdmVyc2FsQ29udGV4dD86IFRyYXZlcnNhbENvbnRleHQsXG4gICk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3QgYnJlYWtGbiA9ICgpID0+IChicmVha0ZsYWcuc2hvdWxkQnJlYWsgPSB0cnVlKTtcblxuICAgIGxldCBicmFuY2hJZDogc3RyaW5nO1xuICAgIGxldCBkZWNpc2lvbkV2aWRlbmNlOiBEZWNpc2lvbkV2aWRlbmNlIHwgdW5kZWZpbmVkO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzdGFnZU91dHB1dCA9IGF3YWl0IHJ1blN0YWdlKG5vZGUsIHN0YWdlRnVuYywgY29udGV4dCwgYnJlYWtGbik7XG4gICAgICAvLyBEZXRlY3QgRGVjaXNpb25SZXN1bHQgZnJvbSBkZWNpZGUoKSBoZWxwZXIgdmlhIFN5bWJvbCBicmFuZFxuICAgICAgaWYgKHN0YWdlT3V0cHV0ICYmIHR5cGVvZiBzdGFnZU91dHB1dCA9PT0gJ29iamVjdCcgJiYgUmVmbGVjdC5oYXMoc3RhZ2VPdXRwdXQgYXMgb2JqZWN0LCBERUNJU0lPTl9SRVNVTFQpKSB7XG4gICAgICAgIGJyYW5jaElkID0gKHN0YWdlT3V0cHV0IGFzIGFueSkuYnJhbmNoO1xuICAgICAgICBkZWNpc2lvbkV2aWRlbmNlID0gKHN0YWdlT3V0cHV0IGFzIGFueSkuZXZpZGVuY2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBicmFuY2hJZCA9IFN0cmluZyhzdGFnZU91dHB1dCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgLy8gUGF1c2VTaWduYWwgaXMgZXhwZWN0ZWQgY29udHJvbCBmbG93IOKAlCBjb21taXQgYW5kIHJlLXRocm93IHdpdGhvdXQgZXJyb3IgbG9nZ2luZy5cbiAgICAgIGlmIChpc1BhdXNlU2lnbmFsKGVycm9yKSkge1xuICAgICAgICBjb250ZXh0LmNvbW1pdCgpO1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICAgIGNvbnRleHQuY29tbWl0KCk7XG4gICAgICB0aGlzLmRlcHMubG9nZ2VyLmVycm9yKGBFcnJvciBpbiBwaXBlbGluZSAoJHticmFuY2hQYXRofSkgc3RhZ2UgWyR7bm9kZS5uYW1lfV06YCwgeyBlcnJvciB9KTtcbiAgICAgIGNvbnRleHQuYWRkRXJyb3IoJ3N0YWdlRXhlY3V0aW9uRXJyb3InLCBlcnJvci50b1N0cmluZygpKTtcbiAgICAgIHRoaXMuZGVwcy5uYXJyYXRpdmVHZW5lcmF0b3Iub25FcnJvcihub2RlLm5hbWUsIGVycm9yLnRvU3RyaW5nKCksIGVycm9yLCB0cmF2ZXJzYWxDb250ZXh0KTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cblxuICAgIGNvbnRleHQuY29tbWl0KCk7XG5cbiAgICBpZiAoYnJlYWtGbGFnLnNob3VsZEJyZWFrKSB7XG4gICAgICByZXR1cm4gYnJhbmNoSWQ7XG4gICAgfVxuXG4gICAgLy8gUmVzb2x2ZSBjaGlsZCBieSBtYXRjaGluZyBicmFuY2ggSUQgYWdhaW5zdCBub2RlLmNoaWxkcmVuLlxuICAgIC8vIE1hdGNoIGJyYW5jaElkIGZpcnN0IChvcmlnaW5hbCB1bnByZWZpeGVkIElEKSwgZmFsbCBiYWNrIHRvIGlkIGZvciBiYWNrd2FyZCBjb21wYXQuXG4gICAgY29uc3QgY2hpbGRyZW4gPSBub2RlLmNoaWxkcmVuIGFzIFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+W107XG4gICAgbGV0IGNob3NlbiA9IGNoaWxkcmVuLmZpbmQoKGNoaWxkKSA9PiAoY2hpbGQuYnJhbmNoSWQgPz8gY2hpbGQuaWQpID09PSBicmFuY2hJZCk7XG5cbiAgICAvLyBGYWxsIGJhY2sgdG8gZGVmYXVsdCBicmFuY2hcbiAgICBpZiAoIWNob3Nlbikge1xuICAgICAgY29uc3QgZGVmYXVsdENoaWxkID0gY2hpbGRyZW4uZmluZCgoY2hpbGQpID0+IChjaGlsZC5icmFuY2hJZCA/PyBjaGlsZC5pZCkgPT09ICdkZWZhdWx0Jyk7XG4gICAgICBpZiAoZGVmYXVsdENoaWxkKSB7XG4gICAgICAgIGNob3NlbiA9IGRlZmF1bHRDaGlsZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGBTY29wZS1iYXNlZCBkZWNpZGVyICcke25vZGUubmFtZX0nIHJldHVybmVkIGJyYW5jaCBJRCAnJHticmFuY2hJZH0nIHdoaWNoIGRvZXNuJ3QgbWF0Y2ggYW55IGNoaWxkIGFuZCBubyBkZWZhdWx0IGJyYW5jaCBpcyBzZXRgO1xuICAgICAgICBjb250ZXh0LmFkZEVycm9yKCdkZWNpZGVyRXJyb3InLCBlcnJvck1lc3NhZ2UpO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3JNZXNzYWdlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBjaG9zZW5OYW1lID0gY2hvc2VuLm5hbWU7XG4gICAgY29uc3Qgd2FzRGVmYXVsdCA9IChjaG9zZW4uYnJhbmNoSWQgPz8gY2hvc2VuLmlkKSAhPT0gYnJhbmNoSWQ7XG4gICAgY29uc3QgcmF0aW9uYWxlID0gY29udGV4dC5kZWJ1Zz8ubG9nQ29udGV4dD8uZGVjaWRlclJhdGlvbmFsZSBhcyBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgbGV0IGJyYW5jaFJlYXNvbjogc3RyaW5nO1xuICAgIGlmICh3YXNEZWZhdWx0KSB7XG4gICAgICBicmFuY2hSZWFzb24gPSBgUmV0dXJuZWQgJyR7YnJhbmNoSWR9JyAobm8gbWF0Y2gpLCBmZWxsIGJhY2sgdG8gZGVmYXVsdCDihpIgJHtjaG9zZW5OYW1lfSBwYXRoLmA7XG4gICAgfSBlbHNlIGlmIChyYXRpb25hbGUpIHtcbiAgICAgIGJyYW5jaFJlYXNvbiA9IGBCYXNlZCBvbjogJHtyYXRpb25hbGV9IOKGkiBjaG9zZSAke2Nob3Nlbk5hbWV9IHBhdGguYDtcbiAgICB9IGVsc2Uge1xuICAgICAgYnJhbmNoUmVhc29uID0gYEV2YWx1YXRlZCBzY29wZSBhbmQgcmV0dXJuZWQgJyR7YnJhbmNoSWR9JyDihpIgY2hvc2UgJHtjaG9zZW5OYW1lfSBwYXRoLmA7XG4gICAgfVxuICAgIGNvbnRleHQuYWRkRmxvd0RlYnVnTWVzc2FnZSgnYnJhbmNoJywgYnJhbmNoUmVhc29uLCB7XG4gICAgICB0YXJnZXRTdGFnZTogY2hvc2VuLm5hbWUsXG4gICAgICByYXRpb25hbGU6IHJhdGlvbmFsZSB8fCBgcmV0dXJuZWQgYnJhbmNoSWQ6ICR7YnJhbmNoSWR9YCxcbiAgICB9KTtcblxuICAgIHRoaXMuZGVwcy5uYXJyYXRpdmVHZW5lcmF0b3Iub25EZWNpc2lvbihcbiAgICAgIG5vZGUubmFtZSxcbiAgICAgIGNob3Nlbi5uYW1lLFxuICAgICAgcmF0aW9uYWxlLFxuICAgICAgbm9kZS5kZXNjcmlwdGlvbixcbiAgICAgIHRyYXZlcnNhbENvbnRleHQsXG4gICAgICBkZWNpc2lvbkV2aWRlbmNlLFxuICAgICk7XG4gICAgLy8gUHJvcG9zYWwgIzAwMzogZmlyZSBvblN0YWdlRXhlY3V0ZWQgQUZURVIgdGhlIHNwZWNpYWxpemVkIGV2ZW50XG4gICAgLy8gc28gY29uc3VtZXJzIHRyYWNraW5nIFwiZGlkIHRoaXMgc3RhZ2UgcnVuXCIgd29yayB1bmlmb3JtbHkuXG4gICAgdGhpcy5kZXBzLm5hcnJhdGl2ZUdlbmVyYXRvci5vblN0YWdlRXhlY3V0ZWQobm9kZS5uYW1lLCBub2RlLmRlc2NyaXB0aW9uLCB0cmF2ZXJzYWxDb250ZXh0LCAnZGVjaWRlcicpO1xuXG4gICAgY29uc3QgYnJhbmNoQ29udGV4dCA9IGNvbnRleHQuY3JlYXRlQ2hpbGQoYnJhbmNoUGF0aCBhcyBzdHJpbmcsIGNob3Nlbi5pZCwgY2hvc2VuLm5hbWUsIGNob3Nlbi5pZCk7XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IGV4ZWN1dGVOb2RlKGNob3NlbiwgYnJhbmNoQ29udGV4dCwgYnJlYWtGbGFnLCBicmFuY2hQYXRoKTtcbiAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgLy8gU3RhbXAgaW52b2tlciBjb250ZXh0IG9uIFBhdXNlU2lnbmFsIGR1cmluZyBidWJibGUtdXAuXG4gICAgICAvLyBUaGUgZGVjaWRlciAobm9kZSkgaXMgdGhlIGludm9rZXI7IGl0cyAubmV4dCBpcyB0aGUgY29udGludWF0aW9uIHRhcmdldC5cbiAgICAgIGlmIChpc1BhdXNlU2lnbmFsKGVycm9yKSkge1xuICAgICAgICBlcnJvci5zZXRJbnZva2VyKG5vZGUuaWQhLCBub2RlLm5leHQ/LmlkKTtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
129
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGVjaWRlckhhbmRsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2VuZ2luZS9oYW5kbGVycy9EZWNpZGVySGFuZGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHOzs7QUFHSCxvREFBd0Q7QUFFeEQsbURBQXFEO0FBaUJyRCxNQUFhLGNBQWM7SUFDSTtJQUE3QixZQUE2QixJQUErQjtRQUEvQixTQUFJLEdBQUosSUFBSSxDQUEyQjtJQUFHLENBQUM7SUFFaEU7Ozs7T0FJRztJQUNILEtBQUssQ0FBQyxnQkFBZ0IsQ0FDcEIsSUFBNkIsRUFDN0IsU0FBc0MsRUFDdEMsT0FBcUIsRUFDckIsU0FBbUMsRUFDbkMsVUFBOEIsRUFDOUIsUUFBa0MsRUFDbEMsV0FBd0MsRUFDeEMsZ0JBQW1DO1FBRW5DLE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLGVBQWUsQ0FDekMsSUFBSSxFQUNKLFNBQVMsRUFDVCxPQUFPLEVBQ1AsU0FBUyxFQUNULFVBQVUsRUFDVixRQUFRLEVBQ1IsZ0JBQWdCLENBQ2pCLENBQUM7UUFFRixJQUFJLFFBQVEsQ0FBQyxJQUFJLEtBQUssT0FBTyxFQUFFLENBQUM7WUFDOUIsT0FBTyxRQUFRLENBQUMsUUFBUSxDQUFDO1FBQzNCLENBQUM7UUFFRCxJQUFJLENBQUM7WUFDSCxPQUFPLE1BQU0sV0FBVyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLGFBQWEsRUFBRSxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDM0YsQ0FBQztRQUFDLE9BQU8sS0FBYyxFQUFFLENBQUM7WUFDeEIseURBQXlEO1lBQ3pELDJFQUEyRTtZQUMzRSxJQUFJLElBQUEsd0JBQWEsRUFBQyxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUN6QixLQUFLLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksRUFB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QUFrRTtRQUNsRSw2REFBNkQ7UUFDN0QsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLGdCQUFnQixFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBRXZHLE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsVUFBb0IsRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRW5HLE9BQU8sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsQ0FBQztJQUNyRCxDQUFDO0NBQ0Y7QUE3SUQsd0NBNklDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBEZWNpZGVySGFuZGxlciDigJQgU2luZ2xlLWNob2ljZSBjb25kaXRpb25hbCBicmFuY2hpbmcuXG4gKlxuICogSGFuZGxlcyBzY29wZS1iYXNlZCBkZWNpZGVycyAoc3RhZ2UgSVMgdGhlIGRlY2lkZXIsIHJldHVybnMgYnJhbmNoIElEKS5cbiAqIExvZ3MgZmxvdyBjb250cm9sIGRlY2lzaW9ucyBhbmQgbmFycmF0aXZlIHNlbnRlbmNlcy5cbiAqXG4gKiBUd28gZW50cnkgcG9pbnRzOlxuICogLSBgcHJlcGFyZURpc3BhdGNoYCDigJQgcnVucyB0aGUgZGVjaWRlciBzdGFnZSwgY29tbWl0cywgcmVzb2x2ZXMgdGhlIGNob3NlblxuICogICBicmFuY2gsIGZpcmVzIG5hcnJhdGl2ZSwgYW5kIHJldHVybnMgdGhlIGNob3NlbiBub2RlICsgYnJhbmNoIGNvbnRleHRcbiAqICAgV0lUSE9VVCBleGVjdXRpbmcgaXQuIFRoZSB0cmF2ZXJzZXIncyB0cmFtcG9saW5lIGRyaXZlciB1c2VzIHRoaXMgc28gYVxuICogICBkZWNpZGVyIHdpdGggbm8gY29udGludWF0aW9uIG9mIGl0cyBvd24gY2FuIGhhbmQgdGhlIGJyYW5jaCB0byB0aGVcbiAqICAgZHJpdmVyIGFzIGEgZmxhdCBob3AgKGxvb3AtaGVhdnkgZGVjaWRlciBjaGFydHMgc3RheSBmbGF0LXN0YWNrZWQpLlxuICogLSBgaGFuZGxlU2NvcGVCYXNlZGAg4oCUIHByZXBhcmVEaXNwYXRjaCArIGltbWVkaWF0ZSBicmFuY2ggZXhlY3V0aW9uIHZpYVxuICogICB0aGUgcHJvdmlkZWQgYGV4ZWN1dGVOb2RlYCBjYWxsYmFjay4gS2VwdCBmb3IgZGlyZWN0L2FkdmFuY2VkIGNhbGxlcnNcbiAqICAgYW5kIGZvciBkZWNpZGVycyB3aG9zZSBvd24gYC5uZXh0YCBtdXN0IHJ1biBhZnRlciB0aGUgYnJhbmNoIGNvbXBsZXRlcy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IERlY2lzaW9uRXZpZGVuY2UgfSBmcm9tICcuLi8uLi9kZWNpZGUvdHlwZXMuanMnO1xuaW1wb3J0IHsgREVDSVNJT05fUkVTVUxUIH0gZnJvbSAnLi4vLi4vZGVjaWRlL3R5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgU3RhZ2VDb250ZXh0IH0gZnJvbSAnLi4vLi4vbWVtb3J5L1N0YWdlQ29udGV4dC5qcyc7XG5pbXBvcnQgeyBpc1BhdXNlU2lnbmFsIH0gZnJvbSAnLi4vLi4vcGF1c2UvdHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBTdGFnZU5vZGUgfSBmcm9tICcuLi9ncmFwaC9TdGFnZU5vZGUuanMnO1xuaW1wb3J0IHR5cGUgeyBUcmF2ZXJzYWxDb250ZXh0IH0gZnJvbSAnLi4vbmFycmF0aXZlL3R5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgSGFuZGxlckRlcHMsIFN0YWdlRnVuY3Rpb24gfSBmcm9tICcuLi90eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IEV4ZWN1dGVOb2RlRm4sIFJ1blN0YWdlRm4gfSBmcm9tICcuL3R5cGVzLmpzJztcblxuZXhwb3J0IHR5cGUgeyBFeGVjdXRlTm9kZUZuLCBSdW5TdGFnZUZuIH07XG5cbi8qKlxuICogUmVzdWx0IG9mIGBwcmVwYXJlRGlzcGF0Y2hgIOKAlCBlaXRoZXIgdGhlIGRlY2lkZXIgc3RhZ2UgYnJva2UgKG5vIGJyYW5jaFxuICogcnVuczsgYGJyYW5jaElkYCBpcyB0aGUgZGVjaWRlcidzIHJldHVybiB2YWx1ZSksIG9yIGEgYnJhbmNoIHdhcyBjaG9zZW5cbiAqIGFuZCBpcyByZWFkeSB0byBleGVjdXRlIGluIGBicmFuY2hDb250ZXh0YC5cbiAqL1xuZXhwb3J0IHR5cGUgRGVjaWRlckRpc3BhdGNoPFRPdXQgPSBhbnksIFRTY29wZSA9IGFueT4gPVxuICB8IHsga2luZDogJ2JyZWFrJzsgYnJhbmNoSWQ6IHN0cmluZyB9XG4gIHwgeyBraW5kOiAnZGlzcGF0Y2gnOyBjaG9zZW46IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+OyBicmFuY2hDb250ZXh0OiBTdGFnZUNvbnRleHQgfTtcblxuZXhwb3J0IGNsYXNzIERlY2lkZXJIYW5kbGVyPFRPdXQgPSBhbnksIFRTY29wZSA9IGFueT4ge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGRlcHM6IEhhbmRsZXJEZXBzPFRPdXQsIFRTY29wZT4pIHt9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBhIHNjb3BlLWJhc2VkIGRlY2lkZXIgKGNyZWF0ZWQgdmlhIGFkZERlY2lkZXJGdW5jdGlvbikuXG4gICAqIFRoZSBzdGFnZSBmdW5jdGlvbiBJUyB0aGUgZGVjaWRlciDigJQgaXRzIHJldHVybiB2YWx1ZSBpcyB0aGUgYnJhbmNoIElELlxuICAgKiBFeGVjdXRpb24gb3JkZXI6IHJ1blN0YWdlKGZuKSDihpIgY29tbWl0IOKGkiByZXNvbHZlIGNoaWxkIOKGkiBsb2cg4oaSIGV4ZWN1dGVOb2RlKGNoaWxkKS5cbiAgICovXG4gIGFzeW5jIGhhbmRsZVNjb3BlQmFzZWQoXG4gICAgbm9kZTogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT4sXG4gICAgc3RhZ2VGdW5jOiBTdGFnZUZ1bmN0aW9uPFRPdXQsIFRTY29wZT4sXG4gICAgY29udGV4dDogU3RhZ2VDb250ZXh0LFxuICAgIGJyZWFrRmxhZzogeyBzaG91bGRCcmVhazogYm9vbGVhbiB9LFxuICAgIGJyYW5jaFBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICBydW5TdGFnZTogUnVuU3RhZ2VGbjxUT3V0LCBUU2NvcGU+LFxuICAgIGV4ZWN1dGVOb2RlOiBFeGVjdXRlTm9kZUZuPFRPdXQsIFRTY29wZT4sXG4gICAgdHJhdmVyc2FsQ29udGV4dD86IFRyYXZlcnNhbENvbnRleHQsXG4gICk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3QgZGlzcGF0Y2ggPSBhd2FpdCB0aGlzLnByZXBhcmVEaXNwYXRjaChcbiAgICAgIG5vZGUsXG4gICAgICBzdGFnZUZ1bmMsXG4gICAgICBjb250ZXh0LFxuICAgICAgYnJlYWtGbGFnLFxuICAgICAgYnJhbmNoUGF0aCxcbiAgICAgIHJ1blN0YWdlLFxuICAgICAgdHJhdmVyc2FsQ29udGV4dCxcbiAgICApO1xuXG4gICAgaWYgKGRpc3BhdGNoLmtpbmQgPT09ICdicmVhaycpIHtcbiAgICAgIHJldHVybiBkaXNwYXRjaC5icmFuY2hJZDtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IGV4ZWN1dGVOb2RlKGRpc3BhdGNoLmNob3NlbiwgZGlzcGF0Y2guYnJhbmNoQ29udGV4dCwgYnJlYWtGbGFnLCBicmFuY2hQYXRoKTtcbiAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgLy8gU3RhbXAgaW52b2tlciBjb250ZXh0IG9uIFBhdXNlU2lnbmFsIGR1cmluZyBidWJibGUtdXAuXG4gICAgICAvLyBUaGUgZGVjaWRlciAobm9kZSkgaXMgdGhlIGludm9rZXI7IGl0cyAubmV4dCBpcyB0aGUgY29udGludWF0aW9uIHRhcmdldC5cbiAgICAgIGlmIChpc1BhdXNlU2lnbmFsKGVycm9yKSkge1xuICAgICAgICBlcnJvci5zZXRJbnZva2VyKG5vZGUuaWQhLCBub2RlLm5leHQ/LmlkKTtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUnVuIHRoZSBkZWNpZGVyIHN0YWdlIGFuZCByZXNvbHZlIHRoZSBjaG9zZW4gYnJhbmNoIFdJVEhPVVQgZXhlY3V0aW5nIGl0LlxuICAgKiBFdmVyeXRoaW5nIHVwIHRvIChhbmQgaW5jbHVkaW5nKSB0aGUgYG9uRGVjaXNpb25gL2BvblN0YWdlRXhlY3V0ZWRgXG4gICAqIG5hcnJhdGl2ZSBhbmQgdGhlIGJyYW5jaCBjb250ZXh0IGNyZWF0aW9uIGhhcHBlbnMgaGVyZSDigJQgb25seSB0aGVcbiAgICogYnJhbmNoIGV4ZWN1dGlvbiBpdHNlbGYgaXMgbGVmdCB0byB0aGUgY2FsbGVyLlxuICAgKi9cbiAgYXN5bmMgcHJlcGFyZURpc3BhdGNoKFxuICAgIG5vZGU6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+LFxuICAgIHN0YWdlRnVuYzogU3RhZ2VGdW5jdGlvbjxUT3V0LCBUU2NvcGU+LFxuICAgIGNvbnRleHQ6IFN0YWdlQ29udGV4dCxcbiAgICBicmVha0ZsYWc6IHsgc2hvdWxkQnJlYWs6IGJvb2xlYW4gfSxcbiAgICBicmFuY2hQYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICAgcnVuU3RhZ2U6IFJ1blN0YWdlRm48VE91dCwgVFNjb3BlPixcbiAgICB0cmF2ZXJzYWxDb250ZXh0PzogVHJhdmVyc2FsQ29udGV4dCxcbiAgKTogUHJvbWlzZTxEZWNpZGVyRGlzcGF0Y2g8VE91dCwgVFNjb3BlPj4ge1xuICAgIGNvbnN0IGJyZWFrRm4gPSAoKSA9PiAoYnJlYWtGbGFnLnNob3VsZEJyZWFrID0gdHJ1ZSk7XG5cbiAgICBsZXQgYnJhbmNoSWQ6IHN0cmluZztcbiAgICBsZXQgZGVjaXNpb25FdmlkZW5jZTogRGVjaXNpb25FdmlkZW5jZSB8IHVuZGVmaW5lZDtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc3RhZ2VPdXRwdXQgPSBhd2FpdCBydW5TdGFnZShub2RlLCBzdGFnZUZ1bmMsIGNvbnRleHQsIGJyZWFrRm4pO1xuICAgICAgLy8gRGV0ZWN0IERlY2lzaW9uUmVzdWx0IGZyb20gZGVjaWRlKCkgaGVscGVyIHZpYSBTeW1ib2wgYnJhbmRcbiAgICAgIGlmIChzdGFnZU91dHB1dCAmJiB0eXBlb2Ygc3RhZ2VPdXRwdXQgPT09ICdvYmplY3QnICYmIFJlZmxlY3QuaGFzKHN0YWdlT3V0cHV0IGFzIG9iamVjdCwgREVDSVNJT05fUkVTVUxUKSkge1xuICAgICAgICBicmFuY2hJZCA9IChzdGFnZU91dHB1dCBhcyBhbnkpLmJyYW5jaDtcbiAgICAgICAgZGVjaXNpb25FdmlkZW5jZSA9IChzdGFnZU91dHB1dCBhcyBhbnkpLmV2aWRlbmNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYnJhbmNoSWQgPSBTdHJpbmcoc3RhZ2VPdXRwdXQpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIC8vIFBhdXNlU2lnbmFsIGlzIGV4cGVjdGVkIGNvbnRyb2wgZmxvdyDigJQgY29tbWl0IGFuZCByZS10aHJvdyB3aXRob3V0IGVycm9yIGxvZ2dpbmcuXG4gICAgICBpZiAoaXNQYXVzZVNpZ25hbChlcnJvcikpIHtcbiAgICAgICAgY29udGV4dC5jb21taXQoKTtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgICBjb250ZXh0LmNvbW1pdCgpO1xuICAgICAgdGhpcy5kZXBzLmxvZ2dlci5lcnJvcihgRXJyb3IgaW4gcGlwZWxpbmUgKCR7YnJhbmNoUGF0aH0pIHN0YWdlIFske25vZGUubmFtZX1dOmAsIHsgZXJyb3IgfSk7XG4gICAgICBjb250ZXh0LmFkZEVycm9yKCdzdGFnZUV4ZWN1dGlvbkVycm9yJywgZXJyb3IudG9TdHJpbmcoKSk7XG4gICAgICB0aGlzLmRlcHMubmFycmF0aXZlR2VuZXJhdG9yLm9uRXJyb3Iobm9kZS5uYW1lLCBlcnJvci50b1N0cmluZygpLCBlcnJvciwgdHJhdmVyc2FsQ29udGV4dCk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG5cbiAgICBjb250ZXh0LmNvbW1pdCgpO1xuXG4gICAgaWYgKGJyZWFrRmxhZy5zaG91bGRCcmVhaykge1xuICAgICAgcmV0dXJuIHsga2luZDogJ2JyZWFrJywgYnJhbmNoSWQgfTtcbiAgICB9XG5cbiAgICAvLyBSZXNvbHZlIGNoaWxkIGJ5IG1hdGNoaW5nIGJyYW5jaCBJRCBhZ2FpbnN0IG5vZGUuY2hpbGRyZW4uXG4gICAgLy8gTWF0Y2ggYnJhbmNoSWQgZmlyc3QgKG9yaWdpbmFsIHVucHJlZml4ZWQgSUQpLCBmYWxsIGJhY2sgdG8gaWQgZm9yIGJhY2t3YXJkIGNvbXBhdC5cbiAgICBjb25zdCBjaGlsZHJlbiA9IG5vZGUuY2hpbGRyZW4gYXMgU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT5bXTtcbiAgICBsZXQgY2hvc2VuID0gY2hpbGRyZW4uZmluZCgoY2hpbGQpID0+IChjaGlsZC5icmFuY2hJZCA/PyBjaGlsZC5pZCkgPT09IGJyYW5jaElkKTtcblxuICAgIC8vIEZhbGwgYmFjayB0byBkZWZhdWx0IGJyYW5jaFxuICAgIGlmICghY2hvc2VuKSB7XG4gICAgICBjb25zdCBkZWZhdWx0Q2hpbGQgPSBjaGlsZHJlbi5maW5kKChjaGlsZCkgPT4gKGNoaWxkLmJyYW5jaElkID8/IGNoaWxkLmlkKSA9PT0gJ2RlZmF1bHQnKTtcbiAgICAgIGlmIChkZWZhdWx0Q2hpbGQpIHtcbiAgICAgICAgY2hvc2VuID0gZGVmYXVsdENoaWxkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gYFNjb3BlLWJhc2VkIGRlY2lkZXIgJyR7bm9kZS5uYW1lfScgcmV0dXJuZWQgYnJhbmNoIElEICcke2JyYW5jaElkfScgd2hpY2ggZG9lc24ndCBtYXRjaCBhbnkgY2hpbGQgYW5kIG5vIGRlZmF1bHQgYnJhbmNoIGlzIHNldGA7XG4gICAgICAgIGNvbnRleHQuYWRkRXJyb3IoJ2RlY2lkZXJFcnJvcicsIGVycm9yTWVzc2FnZSk7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvck1lc3NhZ2UpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGNob3Nlbk5hbWUgPSBjaG9zZW4ubmFtZTtcbiAgICBjb25zdCB3YXNEZWZhdWx0ID0gKGNob3Nlbi5icmFuY2hJZCA/PyBjaG9zZW4uaWQpICE9PSBicmFuY2hJZDtcbiAgICBjb25zdCByYXRpb25hbGUgPSBjb250ZXh0LmRlYnVnPy5sb2dDb250ZXh0Py5kZWNpZGVyUmF0aW9uYWxlIGFzIHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBsZXQgYnJhbmNoUmVhc29uOiBzdHJpbmc7XG4gICAgaWYgKHdhc0RlZmF1bHQpIHtcbiAgICAgIGJyYW5jaFJlYXNvbiA9IGBSZXR1cm5lZCAnJHticmFuY2hJZH0nIChubyBtYXRjaCksIGZlbGwgYmFjayB0byBkZWZhdWx0IOKGkiAke2Nob3Nlbk5hbWV9IHBhdGguYDtcbiAgICB9IGVsc2UgaWYgKHJhdGlvbmFsZSkge1xuICAgICAgYnJhbmNoUmVhc29uID0gYEJhc2VkIG9uOiAke3JhdGlvbmFsZX0g4oaSIGNob3NlICR7Y2hvc2VuTmFtZX0gcGF0aC5gO1xuICAgIH0gZWxzZSB7XG4gICAgICBicmFuY2hSZWFzb24gPSBgRXZhbHVhdGVkIHNjb3BlIGFuZCByZXR1cm5lZCAnJHticmFuY2hJZH0nIOKGkiBjaG9zZSAke2Nob3Nlbk5hbWV9IHBhdGguYDtcbiAgICB9XG4gICAgY29udGV4dC5hZGRGbG93RGVidWdNZXNzYWdlKCdicmFuY2gnLCBicmFuY2hSZWFzb24sIHtcbiAgICAgIHRhcmdldFN0YWdlOiBjaG9zZW4ubmFtZSxcbiAgICAgIHJhdGlvbmFsZTogcmF0aW9uYWxlIHx8IGByZXR1cm5lZCBicmFuY2hJZDogJHticmFuY2hJZH1gLFxuICAgIH0pO1xuXG4gICAgdGhpcy5kZXBzLm5hcnJhdGl2ZUdlbmVyYXRvci5vbkRlY2lzaW9uKFxuICAgICAgbm9kZS5uYW1lLFxuICAgICAgY2hvc2VuLm5hbWUsXG4gICAgICByYXRpb25hbGUsXG4gICAgICBub2RlLmRlc2NyaXB0aW9uLFxuICAgICAgdHJhdmVyc2FsQ29udGV4dCxcbiAgICAgIGRlY2lzaW9uRXZpZGVuY2UsXG4gICAgKTtcbiAgICAvLyBQcm9wb3NhbCAjMDAzOiBmaXJlIG9uU3RhZ2VFeGVjdXRlZCBBRlRFUiB0aGUgc3BlY2lhbGl6ZWQgZXZlbnRcbiAgICAvLyBzbyBjb25zdW1lcnMgdHJhY2tpbmcgXCJkaWQgdGhpcyBzdGFnZSBydW5cIiB3b3JrIHVuaWZvcm1seS5cbiAgICB0aGlzLmRlcHMubmFycmF0aXZlR2VuZXJhdG9yLm9uU3RhZ2VFeGVjdXRlZChub2RlLm5hbWUsIG5vZGUuZGVzY3JpcHRpb24sIHRyYXZlcnNhbENvbnRleHQsICdkZWNpZGVyJyk7XG5cbiAgICBjb25zdCBicmFuY2hDb250ZXh0ID0gY29udGV4dC5jcmVhdGVDaGlsZChicmFuY2hQYXRoIGFzIHN0cmluZywgY2hvc2VuLmlkLCBjaG9zZW4ubmFtZSwgY2hvc2VuLmlkKTtcblxuICAgIHJldHVybiB7IGtpbmQ6ICdkaXNwYXRjaCcsIGNob3NlbiwgYnJhbmNoQ29udGV4dCB9O1xuICB9XG59XG4iXX0=
|