footprintjs 4.17.2 → 5.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/CLAUDE.md +39 -1
- package/dist/advanced.js +1 -1
- package/dist/esm/advanced.js +1 -1
- package/dist/esm/index.js +3 -3
- package/dist/esm/lib/builder/FlowChartBuilder.js +32 -7
- package/dist/esm/lib/decide/decide.js +9 -9
- package/dist/esm/lib/decide/evidence.js +2 -2
- package/dist/esm/lib/engine/narrative/CombinedNarrativeRecorder.js +3 -3
- package/dist/esm/lib/engine/narrative/FlowRecorderDispatcher.js +3 -3
- package/dist/esm/lib/engine/narrative/types.js +1 -1
- package/dist/esm/lib/engine/traversal/FlowchartTraverser.js +20 -3
- package/dist/esm/lib/memory/StageContext.js +3 -3
- package/dist/esm/lib/memory/backtrack.js +1 -1
- package/dist/esm/lib/reactive/createTypedScope.js +5 -5
- package/dist/esm/lib/reactive/types.js +7 -7
- package/dist/esm/lib/recorder/BoundaryStateStore.js +167 -0
- package/dist/esm/lib/recorder/BoundaryStateTracker.js +4 -4
- package/dist/esm/lib/recorder/CombinedRecorder.js +9 -9
- package/dist/esm/lib/recorder/CommitRangeIndex.js +207 -0
- package/dist/esm/lib/recorder/CompositeRecorder.js +6 -6
- package/dist/esm/lib/recorder/EmitRecorder.js +3 -3
- package/dist/esm/lib/recorder/InOutRecorder.js +1 -1
- package/dist/esm/lib/recorder/KeyedStore.js +113 -0
- package/dist/esm/lib/recorder/QualityRecorder.js +2 -2
- package/dist/esm/lib/recorder/SequenceRecorder.js +2 -2
- package/dist/esm/lib/recorder/SequenceStore.js +195 -0
- package/dist/esm/lib/recorder/TopologyRecorder.js +1 -1
- package/dist/esm/lib/recorder/index.js +13 -3
- package/dist/esm/lib/runner/ExecutionRuntime.js +1 -1
- package/dist/esm/lib/runner/FlowChartExecutor.js +72 -28
- package/dist/esm/lib/runner/RunContext.js +2 -2
- package/dist/esm/lib/runner/RunnableChart.js +1 -1
- package/dist/esm/lib/runner/runId.js +65 -0
- package/dist/esm/lib/scope/ScopeFacade.js +6 -6
- package/dist/esm/lib/scope/index.js +1 -1
- package/dist/esm/lib/scope/recorders/DebugRecorder.js +4 -4
- package/dist/esm/lib/scope/recorders/MetricRecorder.js +2 -2
- package/dist/esm/lib/scope/recorders/index.js +1 -1
- package/dist/esm/lib/scope/types.js +1 -1
- package/dist/esm/recorders.js +1 -1
- package/dist/esm/trace.js +13 -1
- package/dist/index.js +3 -3
- package/dist/lib/builder/FlowChartBuilder.js +32 -7
- package/dist/lib/decide/decide.js +9 -9
- package/dist/lib/decide/evidence.js +2 -2
- package/dist/lib/engine/narrative/CombinedNarrativeRecorder.js +3 -3
- package/dist/lib/engine/narrative/FlowRecorderDispatcher.js +3 -3
- package/dist/lib/engine/narrative/types.js +1 -1
- package/dist/lib/engine/traversal/FlowchartTraverser.js +20 -3
- package/dist/lib/memory/StageContext.js +3 -3
- package/dist/lib/memory/backtrack.js +1 -1
- package/dist/lib/reactive/createTypedScope.js +5 -5
- package/dist/lib/reactive/types.js +7 -7
- package/dist/lib/recorder/BoundaryStateStore.js +171 -0
- package/dist/lib/recorder/BoundaryStateTracker.js +4 -4
- package/dist/lib/recorder/CombinedRecorder.js +9 -9
- package/dist/lib/recorder/CommitRangeIndex.js +211 -0
- package/dist/lib/recorder/CompositeRecorder.js +6 -6
- package/dist/lib/recorder/EmitRecorder.js +3 -3
- package/dist/lib/recorder/InOutRecorder.js +1 -1
- package/dist/lib/recorder/KeyedStore.js +117 -0
- package/dist/lib/recorder/QualityRecorder.js +2 -2
- package/dist/lib/recorder/SequenceRecorder.js +2 -2
- package/dist/lib/recorder/SequenceStore.js +199 -0
- package/dist/lib/recorder/TopologyRecorder.js +1 -1
- package/dist/lib/recorder/index.js +19 -6
- package/dist/lib/runner/ExecutionRuntime.js +1 -1
- package/dist/lib/runner/FlowChartExecutor.js +72 -28
- package/dist/lib/runner/RunContext.js +2 -2
- package/dist/lib/runner/RunnableChart.js +1 -1
- package/dist/lib/runner/runId.js +70 -0
- package/dist/lib/scope/ScopeFacade.js +6 -6
- package/dist/lib/scope/index.js +1 -1
- package/dist/lib/scope/recorders/DebugRecorder.js +4 -4
- package/dist/lib/scope/recorders/MetricRecorder.js +2 -2
- package/dist/lib/scope/recorders/index.js +1 -1
- package/dist/lib/scope/types.js +1 -1
- package/dist/recorders.js +1 -1
- package/dist/trace.js +18 -2
- package/dist/types/index.d.ts +4 -4
- package/dist/types/lib/decide/evidence.d.ts +3 -3
- package/dist/types/lib/engine/narrative/CombinedNarrativeRecorder.d.ts +1 -1
- package/dist/types/lib/engine/narrative/FlowRecorderDispatcher.d.ts +2 -2
- package/dist/types/lib/engine/narrative/types.d.ts +19 -2
- package/dist/types/lib/engine/traversal/FlowchartTraverser.d.ts +11 -0
- package/dist/types/lib/memory/StageContext.d.ts +2 -2
- package/dist/types/lib/memory/backtrack.d.ts +1 -1
- package/dist/types/lib/reactive/types.d.ts +7 -7
- package/dist/types/lib/recorder/BoundaryStateStore.d.ts +115 -0
- package/dist/types/lib/recorder/BoundaryStateTracker.d.ts +3 -3
- package/dist/types/lib/recorder/CombinedRecorder.d.ts +11 -11
- package/dist/types/lib/recorder/CommitRangeIndex.d.ts +147 -0
- package/dist/types/lib/recorder/CompositeRecorder.d.ts +8 -8
- package/dist/types/lib/recorder/EmitRecorder.d.ts +2 -2
- package/dist/types/lib/recorder/InOutRecorder.d.ts +1 -1
- package/dist/types/lib/recorder/KeyedStore.d.ts +70 -0
- package/dist/types/lib/recorder/QualityRecorder.d.ts +4 -4
- package/dist/types/lib/recorder/SequenceRecorder.d.ts +1 -1
- package/dist/types/lib/recorder/SequenceStore.d.ts +120 -0
- package/dist/types/lib/recorder/TopologyRecorder.d.ts +1 -1
- package/dist/types/lib/recorder/index.d.ts +5 -2
- package/dist/types/lib/runner/ExecutionRuntime.d.ts +1 -1
- package/dist/types/lib/runner/FlowChartExecutor.d.ts +36 -14
- package/dist/types/lib/runner/RunContext.d.ts +2 -2
- package/dist/types/lib/runner/RunnableChart.d.ts +2 -2
- package/dist/types/lib/runner/runId.d.ts +45 -0
- package/dist/types/lib/scope/ScopeFacade.d.ts +4 -4
- package/dist/types/lib/scope/index.d.ts +1 -1
- package/dist/types/lib/scope/recorders/DebugRecorder.d.ts +4 -4
- package/dist/types/lib/scope/recorders/MetricRecorder.d.ts +4 -4
- package/dist/types/lib/scope/recorders/index.d.ts +1 -1
- package/dist/types/lib/scope/types.d.ts +1 -1
- package/dist/types/recorders.d.ts +1 -1
- package/dist/types/trace.d.ts +5 -0
- package/package.json +1 -1
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* CommitRangeIndex<TLabel> — interval index over commit indices.
|
|
4
|
+
*
|
|
5
|
+
* Built incrementally during traversal: `open(label, startIdx)` when a
|
|
6
|
+
* boundary begins, `close(token, endIdx)` when it ends. Query at any
|
|
7
|
+
* commit position with `enclosing(idx)` (returns ranges containing
|
|
8
|
+
* that index, ordered outer→inner) or `overlapping(start, end)`
|
|
9
|
+
* (returns ranges intersecting a slice).
|
|
10
|
+
*
|
|
11
|
+
* See `docs/design/commit-range-index.md` for the full contract. In
|
|
12
|
+
* one paragraph: this is a generic interval data structure for
|
|
13
|
+
* commit-range queries. footprintjs owns ZERO knowledge of what
|
|
14
|
+
* labels mean — consumers (agentfootprint, lens, OTel exporters)
|
|
15
|
+
* pick their own `TLabel` type. Open ranges (mid-run, no end yet)
|
|
16
|
+
* are first-class — query results carry `endIdx: undefined` for them.
|
|
17
|
+
*
|
|
18
|
+
* Pattern: incremental builder + interval query. Same "collect during
|
|
19
|
+
* traversal, never post-process" rule footprintjs's CLAUDE.md
|
|
20
|
+
* requires of every observer.
|
|
21
|
+
* Role: structural primitive for time-travel UIs and per-boundary
|
|
22
|
+
* aggregation.
|
|
23
|
+
* Channel: consumer-driven (no engine subscription).
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* ```typescript
|
|
27
|
+
* import { CommitRangeIndex } from 'footprintjs/trace';
|
|
28
|
+
*
|
|
29
|
+
* const idx = new CommitRangeIndex<string>();
|
|
30
|
+
* const t = idx.open('LLMCall', executor.getCommitCount());
|
|
31
|
+
* // ... LLM call runs, scope writes happen ...
|
|
32
|
+
* idx.close(t, executor.getCommitCount());
|
|
33
|
+
*
|
|
34
|
+
* idx.enclosing(50); // → ranges containing commit 50, outer→inner
|
|
35
|
+
* idx.overlapping(40, 60); // → ranges sharing the slice [40,60]
|
|
36
|
+
* idx.clear(); // wipe (e.g., on new run)
|
|
37
|
+
* ```
|
|
38
|
+
*
|
|
39
|
+
* REDACTION NOTE: labels are stored verbatim and returned verbatim in
|
|
40
|
+
* query results — the index does NOT redact `TLabel` content. If a
|
|
41
|
+
* consumer attaches a label containing PII (user email, scope reads
|
|
42
|
+
* with sensitive keys, etc.) and then serializes the index for
|
|
43
|
+
* logging or telemetry, that data leaves the trust boundary. Use
|
|
44
|
+
* `RedactionPolicy` (or your own scrubbing) on the consumer side
|
|
45
|
+
* BEFORE attaching labels. The index follows the same contract as
|
|
46
|
+
* other footprintjs storage primitives (SequenceStore, KeyedStore):
|
|
47
|
+
* storage is verbatim; redaction is the caller's responsibility.
|
|
48
|
+
*/
|
|
49
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
50
|
+
exports.CommitRangeIndex = void 0;
|
|
51
|
+
class CommitRangeIndex {
|
|
52
|
+
entries = [];
|
|
53
|
+
byId = new Map();
|
|
54
|
+
nextId = 0;
|
|
55
|
+
/** Identity for token scoping — each index gets a fresh symbol so
|
|
56
|
+
* tokens from one index can't accidentally close ranges in another.
|
|
57
|
+
* ROTATED on `clear()` to invalidate stale tokens that survived a
|
|
58
|
+
* run reset (would otherwise hit a recycled id and silently mutate
|
|
59
|
+
* a different range — see DS+logic panel review RED #1). */
|
|
60
|
+
owner = Symbol('CommitRangeIndex');
|
|
61
|
+
/**
|
|
62
|
+
* Open a new range. Returns a token the caller MUST hold and pass
|
|
63
|
+
* to `close()` later. Each `open()` gets a fresh token; tokens
|
|
64
|
+
* cannot be reused or shared across indices (silent no-op if
|
|
65
|
+
* misused — see Law 2 in the design doc). Tokens from BEFORE
|
|
66
|
+
* the most recent `clear()` are also invalid (owner symbol
|
|
67
|
+
* rotates on clear).
|
|
68
|
+
*/
|
|
69
|
+
open(label, startIdx) {
|
|
70
|
+
const id = this.nextId++;
|
|
71
|
+
const entry = {
|
|
72
|
+
label,
|
|
73
|
+
startIdx,
|
|
74
|
+
endIdx: undefined,
|
|
75
|
+
id,
|
|
76
|
+
closed: false,
|
|
77
|
+
};
|
|
78
|
+
this.entries.push(entry);
|
|
79
|
+
this.byId.set(id, entry);
|
|
80
|
+
return { _id: id, _owner: this.owner };
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Close an open range at `endIdx` (inclusive). After close, the
|
|
84
|
+
* range is queryable with both bounds. Closing an already-closed
|
|
85
|
+
* token is a no-op. Closing an unknown token (from another index,
|
|
86
|
+
* or fabricated) is a no-op.
|
|
87
|
+
*/
|
|
88
|
+
close(token, endIdx) {
|
|
89
|
+
if (token._owner !== this.owner)
|
|
90
|
+
return; // cross-index misuse — silent no-op
|
|
91
|
+
const entry = this.findById(token._id);
|
|
92
|
+
if (!entry || entry.closed)
|
|
93
|
+
return;
|
|
94
|
+
entry.endIdx = endIdx;
|
|
95
|
+
entry.closed = true;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Returns ALL ranges enclosing `commitIdx`, ordered outer→inner.
|
|
99
|
+
* Includes both closed and open ranges. For a closed range to
|
|
100
|
+
* enclose: `startIdx <= commitIdx <= endIdx`. For an open range:
|
|
101
|
+
* `startIdx <= commitIdx` (no upper bound check).
|
|
102
|
+
*
|
|
103
|
+
* Ordering rule: ascending by `startIdx`, with TIES BROKEN BY
|
|
104
|
+
* descending `endIdx` (wider range = outer). Open ranges (endIdx
|
|
105
|
+
* undefined) are treated as `+Infinity` for tie-break — they
|
|
106
|
+
* always sort outer of any closed range starting at the same idx.
|
|
107
|
+
* This is the only deterministic outer→inner ordering when two
|
|
108
|
+
* boundaries open at the same commit (e.g., Parallel root +
|
|
109
|
+
* its first branch).
|
|
110
|
+
*
|
|
111
|
+
* Returns a SHALLOW IMMUTABLE COPY — caller mutations don't affect
|
|
112
|
+
* internal state.
|
|
113
|
+
*/
|
|
114
|
+
enclosing(commitIdx) {
|
|
115
|
+
const matches = [];
|
|
116
|
+
for (const e of this.entries) {
|
|
117
|
+
if (e.startIdx > commitIdx)
|
|
118
|
+
continue;
|
|
119
|
+
if (e.endIdx === undefined || e.endIdx >= commitIdx) {
|
|
120
|
+
matches.push(toEntry(e));
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
matches.sort(outerToInnerComparator);
|
|
124
|
+
return matches;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Returns all ranges OVERLAPPING the slice `[startIdx, endIdx]`. A
|
|
128
|
+
* range overlaps if it shares at least one commit position with the
|
|
129
|
+
* slice. Use for parallel-branch detection, time-window queries,
|
|
130
|
+
* or "what boundaries fired during this slice."
|
|
131
|
+
*
|
|
132
|
+
* Sorted by the SAME outer→inner comparator as `enclosing()`:
|
|
133
|
+
* ascending by `startIdx`, ties broken by descending `endIdx`
|
|
134
|
+
* (wider = outer; open ranges treated as +Infinity).
|
|
135
|
+
*
|
|
136
|
+
* Returns a SHALLOW IMMUTABLE COPY.
|
|
137
|
+
*/
|
|
138
|
+
overlapping(startIdx, endIdx) {
|
|
139
|
+
const matches = [];
|
|
140
|
+
for (const e of this.entries) {
|
|
141
|
+
// Overlap test:
|
|
142
|
+
// range starts after slice ends → no overlap
|
|
143
|
+
// range ends (closed) before slice starts → no overlap
|
|
144
|
+
// otherwise → overlap (open ranges always overlap if they start <= endIdx)
|
|
145
|
+
if (e.startIdx > endIdx)
|
|
146
|
+
continue;
|
|
147
|
+
if (e.endIdx !== undefined && e.endIdx < startIdx)
|
|
148
|
+
continue;
|
|
149
|
+
matches.push(toEntry(e));
|
|
150
|
+
}
|
|
151
|
+
matches.sort(outerToInnerComparator);
|
|
152
|
+
return matches;
|
|
153
|
+
}
|
|
154
|
+
/** Total range count (open + closed). */
|
|
155
|
+
get size() {
|
|
156
|
+
return this.entries.length;
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Wipe all ranges + reset the token counter AND rotate the owner
|
|
160
|
+
* symbol so any token from before this clear becomes invalid.
|
|
161
|
+
* Critical: without rotating the owner, a stale token whose `_id`
|
|
162
|
+
* happens to match a recycled id after clear would silently mutate
|
|
163
|
+
* the wrong entry. Owner rotation makes stale-token close a no-op
|
|
164
|
+
* via the `_owner !== this.owner` guard.
|
|
165
|
+
*
|
|
166
|
+
* Call from a consumer's runId guard when a new run starts (e.g.,
|
|
167
|
+
* agentfootprint's `observeRunId(onNewRun)` from Phase 2).
|
|
168
|
+
*/
|
|
169
|
+
clear() {
|
|
170
|
+
this.entries.length = 0;
|
|
171
|
+
this.byId.clear();
|
|
172
|
+
this.nextId = 0;
|
|
173
|
+
this.owner = Symbol('CommitRangeIndex');
|
|
174
|
+
}
|
|
175
|
+
// ─── Internals ────────────────────────────────────────────────────
|
|
176
|
+
/** O(1) lookup by token id. Always returns the entry that the token
|
|
177
|
+
* references (or undefined if the id was never opened in this index). */
|
|
178
|
+
findById(id) {
|
|
179
|
+
return this.byId.get(id);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
exports.CommitRangeIndex = CommitRangeIndex;
|
|
183
|
+
/** Project the internal mutable shape into the public readonly entry.
|
|
184
|
+
* The OUTER object is a fresh allocation per query (so caller array
|
|
185
|
+
* mutations don't leak). The `label` field is a REFERENCE COPY —
|
|
186
|
+
* if `TLabel` is an object, mutating its fields will affect the
|
|
187
|
+
* internal entry too. Consumers MUST treat labels as immutable
|
|
188
|
+
* (or pass primitives). Documented in the class JSDoc as the
|
|
189
|
+
* "labels are stored verbatim" contract. */
|
|
190
|
+
function toEntry(e) {
|
|
191
|
+
return e.endIdx === undefined
|
|
192
|
+
? { label: e.label, startIdx: e.startIdx }
|
|
193
|
+
: { label: e.label, startIdx: e.startIdx, endIdx: e.endIdx };
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Shared outer→inner comparator for both `enclosing()` and
|
|
197
|
+
* `overlapping()`. Primary key: `startIdx` ascending. Tie-break:
|
|
198
|
+
* `endIdx` descending (wider range is outer). Open ranges (undefined
|
|
199
|
+
* `endIdx`) sort as +Infinity → outermost when tied. Deterministic
|
|
200
|
+
* ordering required so consumers (Lens breadcrumb, time-travel UIs)
|
|
201
|
+
* never see flicker on equal-start boundaries (e.g., a Parallel
|
|
202
|
+
* root and its first branch opening at the same commit).
|
|
203
|
+
*/
|
|
204
|
+
function outerToInnerComparator(a, b) {
|
|
205
|
+
if (a.startIdx !== b.startIdx)
|
|
206
|
+
return a.startIdx - b.startIdx;
|
|
207
|
+
const ae = a.endIdx ?? Number.POSITIVE_INFINITY;
|
|
208
|
+
const be = b.endIdx ?? Number.POSITIVE_INFINITY;
|
|
209
|
+
return be - ae;
|
|
210
|
+
}
|
|
211
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29tbWl0UmFuZ2VJbmRleC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvcmVjb3JkZXIvQ29tbWl0UmFuZ2VJbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E4Q0c7OztBQTRDSCxNQUFhLGdCQUFnQjtJQUNuQixPQUFPLEdBQTRCLEVBQUUsQ0FBQztJQUN0QyxJQUFJLEdBQUcsSUFBSSxHQUFHLEVBQWlDLENBQUM7SUFDaEQsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUNuQjs7OztpRUFJNkQ7SUFDckQsS0FBSyxHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBRTNDOzs7Ozs7O09BT0c7SUFDSCxJQUFJLENBQUMsS0FBYSxFQUFFLFFBQWdCO1FBQ2xDLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUN6QixNQUFNLEtBQUssR0FBMEI7WUFDbkMsS0FBSztZQUNMLFFBQVE7WUFDUixNQUFNLEVBQUUsU0FBUztZQUNqQixFQUFFO1lBQ0YsTUFBTSxFQUFFLEtBQUs7U0FDZCxDQUFDO1FBQ0YsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekIsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3pCLE9BQU8sRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDekMsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsS0FBSyxDQUFDLEtBQWlCLEVBQUUsTUFBYztRQUNyQyxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLEtBQUs7WUFBRSxPQUFPLENBQUMsb0NBQW9DO1FBQzdFLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FB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RixJQUFJLENBQUMsQ0FBQyxRQUFRLEtBQUssQ0FBQyxDQUFDLFFBQVE7UUFBRSxPQUFPLENBQUMsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQztJQUM5RCxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQztJQUNoRCxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQztJQUNoRCxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDakIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29tbWl0UmFuZ2VJbmRleDxUTGFiZWw+IOKAlCBpbnRlcnZhbCBpbmRleCBvdmVyIGNvbW1pdCBpbmRpY2VzLlxuICpcbiAqIEJ1aWx0IGluY3JlbWVudGFsbHkgZHVyaW5nIHRyYXZlcnNhbDogYG9wZW4obGFiZWwsIHN0YXJ0SWR4KWAgd2hlbiBhXG4gKiBib3VuZGFyeSBiZWdpbnMsIGBjbG9zZSh0b2tlbiwgZW5kSWR4KWAgd2hlbiBpdCBlbmRzLiBRdWVyeSBhdCBhbnlcbiAqIGNvbW1pdCBwb3NpdGlvbiB3aXRoIGBlbmNsb3NpbmcoaWR4KWAgKHJldHVybnMgcmFuZ2VzIGNvbnRhaW5pbmdcbiAqIHRoYXQgaW5kZXgsIG9yZGVyZWQgb3V0ZXLihpJpbm5lcikgb3IgYG92ZXJsYXBwaW5nKHN0YXJ0LCBlbmQpYFxuICogKHJldHVybnMgcmFuZ2VzIGludGVyc2VjdGluZyBhIHNsaWNlKS5cbiAqXG4gKiBTZWUgYGRvY3MvZGVzaWduL2NvbW1pdC1yYW5nZS1pbmRleC5tZGAgZm9yIHRoZSBmdWxsIGNvbnRyYWN0LiBJblxuICogb25lIHBhcmFncmFwaDogdGhpcyBpcyBhIGdlbmVyaWMgaW50ZXJ2YWwgZGF0YSBzdHJ1Y3R1cmUgZm9yXG4gKiBjb21taXQtcmFuZ2UgcXVlcmllcy4gZm9vdHByaW50anMgb3ducyBaRVJPIGtub3dsZWRnZSBvZiB3aGF0XG4gKiBsYWJlbHMgbWVhbiDigJQgY29uc3VtZXJzIChhZ2VudGZvb3RwcmludCwgbGVucywgT1RlbCBleHBvcnRlcnMpXG4gKiBwaWNrIHRoZWlyIG93biBgVExhYmVsYCB0eXBlLiBPcGVuIHJhbmdlcyAobWlkLXJ1biwgbm8gZW5kIHlldClcbiAqIGFyZSBmaXJzdC1jbGFzcyDigJQgcXVlcnkgcmVzdWx0cyBjYXJyeSBgZW5kSWR4OiB1bmRlZmluZWRgIGZvciB0aGVtLlxuICpcbiAqIFBhdHRlcm46IGluY3JlbWVudGFsIGJ1aWxkZXIgKyBpbnRlcnZhbCBxdWVyeS4gU2FtZSBcImNvbGxlY3QgZHVyaW5nXG4gKiAgICAgICAgICB0cmF2ZXJzYWwsIG5ldmVyIHBvc3QtcHJvY2Vzc1wiIHJ1bGUgZm9vdHByaW50anMncyBDTEFVREUubWRcbiAqICAgICAgICAgIHJlcXVpcmVzIG9mIGV2ZXJ5IG9ic2VydmVyLlxuICogUm9sZTogICAgc3RydWN0dXJhbCBwcmltaXRpdmUgZm9yIHRpbWUtdHJhdmVsIFVJcyBhbmQgcGVyLWJvdW5kYXJ5XG4gKiAgICAgICAgICBhZ2dyZWdhdGlvbi5cbiAqIENoYW5uZWw6IGNvbnN1bWVyLWRyaXZlbiAobm8gZW5naW5lIHN1YnNjcmlwdGlvbikuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGltcG9ydCB7IENvbW1pdFJhbmdlSW5kZXggfSBmcm9tICdmb290cHJpbnRqcy90cmFjZSc7XG4gKlxuICogY29uc3QgaWR4ID0gbmV3IENvbW1pdFJhbmdlSW5kZXg8c3RyaW5nPigpO1xuICogY29uc3QgdCA9IGlkeC5vcGVuKCdMTE1DYWxsJywgZXhlY3V0b3IuZ2V0Q29tbWl0Q291bnQoKSk7XG4gKiAvLyAuLi4gTExNIGNhbGwgcnVucywgc2NvcGUgd3JpdGVzIGhhcHBlbiAuLi5cbiAqIGlkeC5jbG9zZSh0LCBleGVjdXRvci5nZXRDb21taXRDb3VudCgpKTtcbiAqXG4gKiBpZHguZW5jbG9zaW5nKDUwKTsgIC8vIOKGkiByYW5nZXMgY29udGFpbmluZyBjb21taXQgNTAsIG91dGVy4oaSaW5uZXJcbiAqIGlkeC5vdmVybGFwcGluZyg0MCwgNjApOyAgLy8g4oaSIHJhbmdlcyBzaGFyaW5nIHRoZSBzbGljZSBbNDAsNjBdXG4gKiBpZHguY2xlYXIoKTsgICAgICAgIC8vIHdpcGUgKGUuZy4sIG9uIG5ldyBydW4pXG4gKiBgYGBcbiAqXG4gKiBSRURBQ1RJT04gTk9URTogbGFiZWxzIGFyZSBzdG9yZWQgdmVyYmF0aW0gYW5kIHJldHVybmVkIHZlcmJhdGltIGluXG4gKiBxdWVyeSByZXN1bHRzIOKAlCB0aGUgaW5kZXggZG9lcyBOT1QgcmVkYWN0IGBUTGFiZWxgIGNvbnRlbnQuIElmIGFcbiAqIGNvbnN1bWVyIGF0dGFjaGVzIGEgbGFiZWwgY29udGFpbmluZyBQSUkgKHVzZXIgZW1haWwsIHNjb3BlIHJlYWRzXG4gKiB3aXRoIHNlbnNpdGl2ZSBrZXlzLCBldGMuKSBhbmQgdGhlbiBzZXJpYWxpemVzIHRoZSBpbmRleCBmb3JcbiAqIGxvZ2dpbmcgb3IgdGVsZW1ldHJ5LCB0aGF0IGRhdGEgbGVhdmVzIHRoZSB0cnVzdCBib3VuZGFyeS4gVXNlXG4gKiBgUmVkYWN0aW9uUG9saWN5YCAob3IgeW91ciBvd24gc2NydWJiaW5nKSBvbiB0aGUgY29uc3VtZXIgc2lkZVxuICogQkVGT1JFIGF0dGFjaGluZyBsYWJlbHMuIFRoZSBpbmRleCBmb2xsb3dzIHRoZSBzYW1lIGNvbnRyYWN0IGFzXG4gKiBvdGhlciBmb290cHJpbnRqcyBzdG9yYWdlIHByaW1pdGl2ZXMgKFNlcXVlbmNlU3RvcmUsIEtleWVkU3RvcmUpOlxuICogc3RvcmFnZSBpcyB2ZXJiYXRpbTsgcmVkYWN0aW9uIGlzIHRoZSBjYWxsZXIncyByZXNwb25zaWJpbGl0eS5cbiAqL1xuXG4vKiogT3BhcXVlIHRva2VuIGlkZW50aWZ5aW5nIGFuIG9wZW4gcmFuZ2UuIEhvbGQgb250byBpdDsgcGFzcyB0byBgY2xvc2UoKWAuXG4gKiAgSW5kZXgtc2NvcGVkIOKAlCB1c2luZyBhIHRva2VuIGZyb20gb25lIENvbW1pdFJhbmdlSW5kZXggb24gYW5vdGhlciBpc1xuICogIGEgc2lsZW50IG5vLW9wICh2ZXJpZmllZCBieSB0aGUgcGVyLWluZGV4IGBfb3duZXJgIHN5bWJvbCkuXG4gKlxuICogIFNFQ1VSSVRZIE5PVEU6IHRoZSBgX293bmVyYCBzeW1ib2wgaXMgZW51bWVyYWJsZSBvbiB0aGUgdG9rZW4gb2JqZWN0XG4gKiAgdmlhIGBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHRva2VuKWAuIFRoaXMgbWVhbnMgdG9rZW5zIGFyZSBOT1RcbiAqICBhZHZlcnNhcnktc2FmZSDigJQgYSBtYWxpY2lvdXMgY2FsbGVyIHdpdGggYWNjZXNzIHRvIEFOWSB0b2tlbiBmcm9tXG4gKiAgdGhpcyBpbmRleCBjYW4gcmVjb3ZlciB0aGUgb3duZXIgc3ltYm9sIGFuZCBmb3JnZSBuZXcgdG9rZW5zLiBUaGVcbiAqICBpbmRleCBpcyBkZXNpZ25lZCBmb3IgaW4tcHJvY2VzcyB0cnVzdCBib3VuZGFyaWVzIChjb29wZXJhdGl2ZVxuICogIHJlY29yZGVycyBzaGFyaW5nIG9uZSBydW5uZXIpLCBub3QgZm9yIGhvc3RpbGUtaW5wdXQgc2NlbmFyaW9zLlxuICogIElmIGFkdmVyc2FyeS1zYWZldHkgYmVjb21lcyBhIHJlcXVpcmVtZW50LCBzd2l0Y2ggdG8gYSBXZWFrTWFwLVxuICogIHNjb3BlZCB0b2tlbiBtb2RlbCAoc2VlIHNlY3VyaXR5IHBhbmVsIHJldmlldyBZMikuICovXG5leHBvcnQgaW50ZXJmYWNlIFJhbmdlVG9rZW4ge1xuICAvKiogUGVyLWluZGV4IHNlcXVlbnRpYWwgaWQuIE9wYXF1ZSB0byBjb25zdW1lcnMg4oCUIHRoZXkgc2hvdWxkbid0IHJlYWQgaXQuICovXG4gIHJlYWRvbmx5IF9pZDogbnVtYmVyO1xuICAvKiogUGVyLWluZGV4IGlkZW50aXR5IOKAlCBwcmV2ZW50cyBhY2NpZGVudGFsIGNyb3NzLWluZGV4IHRva2VuIG1pc3VzZS4gKi9cbiAgcmVhZG9ubHkgX293bmVyOiBzeW1ib2w7XG59XG5cbi8qKiBBIHNpbmdsZSByYW5nZSBhcyByZXR1cm5lZCBieSBxdWVyeSBtZXRob2RzLiBGcm96ZW4tc2hhcGUg4oCUIHJlYWRvbmx5IGZpZWxkcy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmFuZ2VFbnRyeTxUTGFiZWw+IHtcbiAgcmVhZG9ubHkgbGFiZWw6IFRMYWJlbDtcbiAgcmVhZG9ubHkgc3RhcnRJZHg6IG51bWJlcjtcbiAgLyoqIFVuZGVmaW5lZCB3aGlsZSB0aGUgcmFuZ2UgaXMgc3RpbGwgb3BlbiAobWlkLXJ1biBib3VuZGFyeSkuICovXG4gIHJlYWRvbmx5IGVuZElkeD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBJbnRlcm5hbCBzdG9yYWdlIHNoYXBlLiBNdXRhYmxlIHdoaWxlIHRoZSByYW5nZSBpcyBvcGVuOyBvbmNlXG4gKiBjbG9zZWQsIGBlbmRJZHhgIGlzIHNldCBhbmQgbmV2ZXIgY2hhbmdlcy4gVG9rZW5zIHJlZmVyZW5jZSB0aGVzZVxuICogYnkgdGhlaXIgcG9zaXRpb24gaW4gdGhlIGBlbnRyaWVzYCBhcnJheSAodGhlIGBfaWRgKS5cbiAqL1xuaW50ZXJmYWNlIEludGVybmFsRW50cnk8VExhYmVsPiB7XG4gIGxhYmVsOiBUTGFiZWw7XG4gIHN0YXJ0SWR4OiBudW1iZXI7XG4gIGVuZElkeDogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICAvKiogSW50ZXJuYWwgY3Vyc29yIOKAlCBhc3NpZ25lZCBvbiBgb3BlbigpYCwgdXNlZCB0byBpZGVudGlmeSBieSB0b2tlbi4gKi9cbiAgaWQ6IG51bWJlcjtcbiAgLyoqIFRydWUgYWZ0ZXIgYGNsb3NlKClgIHJ1bnMuIFByZXZlbnRzIGRvdWJsZS1jbG9zZSBtdXRhdGlvbi4gKi9cbiAgY2xvc2VkOiBib29sZWFuO1xufVxuXG5leHBvcnQgY2xhc3MgQ29tbWl0UmFuZ2VJbmRleDxUTGFiZWw+IHtcbiAgcHJpdmF0ZSBlbnRyaWVzOiBJbnRlcm5hbEVudHJ5PFRMYWJlbD5bXSA9IFtdO1xuICBwcml2YXRlIGJ5SWQgPSBuZXcgTWFwPG51bWJlciwgSW50ZXJuYWxFbnRyeTxUTGFiZWw+PigpO1xuICBwcml2YXRlIG5leHRJZCA9IDA7XG4gIC8qKiBJZGVudGl0eSBmb3IgdG9rZW4gc2NvcGluZyDigJQgZWFjaCBpbmRleCBnZXRzIGEgZnJlc2ggc3ltYm9sIHNvXG4gICAqICB0b2tlbnMgZnJvbSBvbmUgaW5kZXggY2FuJ3QgYWNjaWRlbnRhbGx5IGNsb3NlIHJhbmdlcyBpbiBhbm90aGVyLlxuICAgKiAgUk9UQVRFRCBvbiBgY2xlYXIoKWAgdG8gaW52YWxpZGF0ZSBzdGFsZSB0b2tlbnMgdGhhdCBzdXJ2aXZlZCBhXG4gICAqICBydW4gcmVzZXQgKHdvdWxkIG90aGVyd2lzZSBoaXQgYSByZWN5Y2xlZCBpZCBhbmQgc2lsZW50bHkgbXV0YXRlXG4gICAqICBhIGRpZmZlcmVudCByYW5nZSDigJQgc2VlIERTK2xvZ2ljIHBhbmVsIHJldmlldyBSRUQgIzEpLiAqL1xuICBwcml2YXRlIG93bmVyID0gU3ltYm9sKCdDb21taXRSYW5nZUluZGV4Jyk7XG5cbiAgLyoqXG4gICAqIE9wZW4gYSBuZXcgcmFuZ2UuIFJldHVybnMgYSB0b2tlbiB0aGUgY2FsbGVyIE1VU1QgaG9sZCBhbmQgcGFzc1xuICAgKiB0byBgY2xvc2UoKWAgbGF0ZXIuIEVhY2ggYG9wZW4oKWAgZ2V0cyBhIGZyZXNoIHRva2VuOyB0b2tlbnNcbiAgICogY2Fubm90IGJlIHJldXNlZCBvciBzaGFyZWQgYWNyb3NzIGluZGljZXMgKHNpbGVudCBuby1vcCBpZlxuICAgKiBtaXN1c2VkIOKAlCBzZWUgTGF3IDIgaW4gdGhlIGRlc2lnbiBkb2MpLiBUb2tlbnMgZnJvbSBCRUZPUkVcbiAgICogdGhlIG1vc3QgcmVjZW50IGBjbGVhcigpYCBhcmUgYWxzbyBpbnZhbGlkIChvd25lciBzeW1ib2xcbiAgICogcm90YXRlcyBvbiBjbGVhcikuXG4gICAqL1xuICBvcGVuKGxhYmVsOiBUTGFiZWwsIHN0YXJ0SWR4OiBudW1iZXIpOiBSYW5nZVRva2VuIHtcbiAgICBjb25zdCBpZCA9IHRoaXMubmV4dElkKys7XG4gICAgY29uc3QgZW50cnk6IEludGVybmFsRW50cnk8VExhYmVsPiA9IHtcbiAgICAgIGxhYmVsLFxuICAgICAgc3RhcnRJZHgsXG4gICAgICBlbmRJZHg6IHVuZGVmaW5lZCxcbiAgICAgIGlkLFxuICAgICAgY2xvc2VkOiBmYWxzZSxcbiAgICB9O1xuICAgIHRoaXMuZW50cmllcy5wdXNoKGVudHJ5KTtcbiAgICB0aGlzLmJ5SWQuc2V0KGlkLCBlbnRyeSk7XG4gICAgcmV0dXJuIHsgX2lkOiBpZCwgX293bmVyOiB0aGlzLm93bmVyIH07XG4gIH1cblxuICAvKipcbiAgICogQ2xvc2UgYW4gb3BlbiByYW5nZSBhdCBgZW5kSWR4YCAoaW5jbHVzaXZlKS4gQWZ0ZXIgY2xvc2UsIHRoZVxuICAgKiByYW5nZSBpcyBxdWVyeWFibGUgd2l0aCBib3RoIGJvdW5kcy4gQ2xvc2luZyBhbiBhbHJlYWR5LWNsb3NlZFxuICAgKiB0b2tlbiBpcyBhIG5vLW9wLiBDbG9zaW5nIGFuIHVua25vd24gdG9rZW4gKGZyb20gYW5vdGhlciBpbmRleCxcbiAgICogb3IgZmFicmljYXRlZCkgaXMgYSBuby1vcC5cbiAgICovXG4gIGNsb3NlKHRva2VuOiBSYW5nZVRva2VuLCBlbmRJZHg6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICh0b2tlbi5fb3duZXIgIT09IHRoaXMub3duZXIpIHJldHVybjsgLy8gY3Jvc3MtaW5kZXggbWlzdXNlIOKAlCBzaWxlbnQgbm8tb3BcbiAgICBjb25zdCBlbnRyeSA9IHRoaXMuZmluZEJ5SWQodG9rZW4uX2lkKTtcbiAgICBpZiAoIWVudHJ5IHx8IGVudHJ5LmNsb3NlZCkgcmV0dXJuO1xuICAgIGVudHJ5LmVuZElkeCA9IGVuZElkeDtcbiAgICBlbnRyeS5jbG9zZWQgPSB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgQUxMIHJhbmdlcyBlbmNsb3NpbmcgYGNvbW1pdElkeGAsIG9yZGVyZWQgb3V0ZXLihpJpbm5lci5cbiAgICogSW5jbHVkZXMgYm90aCBjbG9zZWQgYW5kIG9wZW4gcmFuZ2VzLiBGb3IgYSBjbG9zZWQgcmFuZ2UgdG9cbiAgICogZW5jbG9zZTogYHN0YXJ0SWR4IDw9IGNvbW1pdElkeCA8PSBlbmRJZHhgLiBGb3IgYW4gb3BlbiByYW5nZTpcbiAgICogYHN0YXJ0SWR4IDw9IGNvbW1pdElkeGAgKG5vIHVwcGVyIGJvdW5kIGNoZWNrKS5cbiAgICpcbiAgICogT3JkZXJpbmcgcnVsZTogYXNjZW5kaW5nIGJ5IGBzdGFydElkeGAsIHdpdGggVElFUyBCUk9LRU4gQllcbiAgICogZGVzY2VuZGluZyBgZW5kSWR4YCAod2lkZXIgcmFuZ2UgPSBvdXRlcikuIE9wZW4gcmFuZ2VzIChlbmRJZHhcbiAgICogdW5kZWZpbmVkKSBhcmUgdHJlYXRlZCBhcyBgK0luZmluaXR5YCBmb3IgdGllLWJyZWFrIOKAlCB0aGV5XG4gICAqIGFsd2F5cyBzb3J0IG91dGVyIG9mIGFueSBjbG9zZWQgcmFuZ2Ugc3RhcnRpbmcgYXQgdGhlIHNhbWUgaWR4LlxuICAgKiBUaGlzIGlzIHRoZSBvbmx5IGRldGVybWluaXN0aWMgb3V0ZXLihpJpbm5lciBvcmRlcmluZyB3aGVuIHR3b1xuICAgKiBib3VuZGFyaWVzIG9wZW4gYXQgdGhlIHNhbWUgY29tbWl0IChlLmcuLCBQYXJhbGxlbCByb290ICtcbiAgICogaXRzIGZpcnN0IGJyYW5jaCkuXG4gICAqXG4gICAqIFJldHVybnMgYSBTSEFMTE9XIElNTVVUQUJMRSBDT1BZIOKAlCBjYWxsZXIgbXV0YXRpb25zIGRvbid0IGFmZmVjdFxuICAgKiBpbnRlcm5hbCBzdGF0ZS5cbiAgICovXG4gIGVuY2xvc2luZyhjb21taXRJZHg6IG51bWJlcik6IHJlYWRvbmx5IFJhbmdlRW50cnk8VExhYmVsPltdIHtcbiAgICBjb25zdCBtYXRjaGVzOiBSYW5nZUVudHJ5PFRMYWJlbD5bXSA9IFtdO1xuICAgIGZvciAoY29uc3QgZSBvZiB0aGlzLmVudHJpZXMpIHtcbiAgICAgIGlmIChlLnN0YXJ0SWR4ID4gY29tbWl0SWR4KSBjb250aW51ZTtcbiAgICAgIGlmIChlLmVuZElkeCA9PT0gdW5kZWZpbmVkIHx8IGUuZW5kSWR4ID49IGNvbW1pdElkeCkge1xuICAgICAgICBtYXRjaGVzLnB1c2godG9FbnRyeShlKSk7XG4gICAgICB9XG4gICAgfVxuICAgIG1hdGNoZXMuc29ydChvdXRlclRvSW5uZXJDb21wYXJhdG9yKTtcbiAgICByZXR1cm4gbWF0Y2hlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFsbCByYW5nZXMgT1ZFUkxBUFBJTkcgdGhlIHNsaWNlIGBbc3RhcnRJZHgsIGVuZElkeF1gLiBBXG4gICAqIHJhbmdlIG92ZXJsYXBzIGlmIGl0IHNoYXJlcyBhdCBsZWFzdCBvbmUgY29tbWl0IHBvc2l0aW9uIHdpdGggdGhlXG4gICAqIHNsaWNlLiBVc2UgZm9yIHBhcmFsbGVsLWJyYW5jaCBkZXRlY3Rpb24sIHRpbWUtd2luZG93IHF1ZXJpZXMsXG4gICAqIG9yIFwid2hhdCBib3VuZGFyaWVzIGZpcmVkIGR1cmluZyB0aGlzIHNsaWNlLlwiXG4gICAqXG4gICAqIFNvcnRlZCBieSB0aGUgU0FNRSBvdXRlcuKGkmlubmVyIGNvbXBhcmF0b3IgYXMgYGVuY2xvc2luZygpYDpcbiAgICogYXNjZW5kaW5nIGJ5IGBzdGFydElkeGAsIHRpZXMgYnJva2VuIGJ5IGRlc2NlbmRpbmcgYGVuZElkeGBcbiAgICogKHdpZGVyID0gb3V0ZXI7IG9wZW4gcmFuZ2VzIHRyZWF0ZWQgYXMgK0luZmluaXR5KS5cbiAgICpcbiAgICogUmV0dXJucyBhIFNIQUxMT1cgSU1NVVRBQkxFIENPUFkuXG4gICAqL1xuICBvdmVybGFwcGluZyhzdGFydElkeDogbnVtYmVyLCBlbmRJZHg6IG51bWJlcik6IHJlYWRvbmx5IFJhbmdlRW50cnk8VExhYmVsPltdIHtcbiAgICBjb25zdCBtYXRjaGVzOiBSYW5nZUVudHJ5PFRMYWJlbD5bXSA9IFtdO1xuICAgIGZvciAoY29uc3QgZSBvZiB0aGlzLmVudHJpZXMpIHtcbiAgICAgIC8vIE92ZXJsYXAgdGVzdDpcbiAgICAgIC8vICAgcmFuZ2Ugc3RhcnRzIGFmdGVyIHNsaWNlIGVuZHMg4oaSIG5vIG92ZXJsYXBcbiAgICAgIC8vICAgcmFuZ2UgZW5kcyAoY2xvc2VkKSBiZWZvcmUgc2xpY2Ugc3RhcnRzIOKGkiBubyBvdmVybGFwXG4gICAgICAvLyAgIG90aGVyd2lzZSDihpIgb3ZlcmxhcCAob3BlbiByYW5nZXMgYWx3YXlzIG92ZXJsYXAgaWYgdGhleSBzdGFydCA8PSBlbmRJZHgpXG4gICAgICBpZiAoZS5zdGFydElkeCA+IGVuZElkeCkgY29udGludWU7XG4gICAgICBpZiAoZS5lbmRJZHggIT09IHVuZGVmaW5lZCAmJiBlLmVuZElkeCA8IHN0YXJ0SWR4KSBjb250aW51ZTtcbiAgICAgIG1hdGNoZXMucHVzaCh0b0VudHJ5KGUpKTtcbiAgICB9XG4gICAgbWF0Y2hlcy5zb3J0KG91dGVyVG9Jbm5lckNvbXBhcmF0b3IpO1xuICAgIHJldHVybiBtYXRjaGVzO1xuICB9XG5cbiAgLyoqIFRvdGFsIHJhbmdlIGNvdW50IChvcGVuICsgY2xvc2VkKS4gKi9cbiAgZ2V0IHNpemUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5lbnRyaWVzLmxlbmd0aDtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaXBlIGFsbCByYW5nZXMgKyByZXNldCB0aGUgdG9rZW4gY291bnRlciBBTkQgcm90YXRlIHRoZSBvd25lclxuICAgKiBzeW1ib2wgc28gYW55IHRva2VuIGZyb20gYmVmb3JlIHRoaXMgY2xlYXIgYmVjb21lcyBpbnZhbGlkLlxuICAgKiBDcml0aWNhbDogd2l0aG91dCByb3RhdGluZyB0aGUgb3duZXIsIGEgc3RhbGUgdG9rZW4gd2hvc2UgYF9pZGBcbiAgICogaGFwcGVucyB0byBtYXRjaCBhIHJlY3ljbGVkIGlkIGFmdGVyIGNsZWFyIHdvdWxkIHNpbGVudGx5IG11dGF0ZVxuICAgKiB0aGUgd3JvbmcgZW50cnkuIE93bmVyIHJvdGF0aW9uIG1ha2VzIHN0YWxlLXRva2VuIGNsb3NlIGEgbm8tb3BcbiAgICogdmlhIHRoZSBgX293bmVyICE9PSB0aGlzLm93bmVyYCBndWFyZC5cbiAgICpcbiAgICogQ2FsbCBmcm9tIGEgY29uc3VtZXIncyBydW5JZCBndWFyZCB3aGVuIGEgbmV3IHJ1biBzdGFydHMgKGUuZy4sXG4gICAqIGFnZW50Zm9vdHByaW50J3MgYG9ic2VydmVSdW5JZChvbk5ld1J1bilgIGZyb20gUGhhc2UgMikuXG4gICAqL1xuICBjbGVhcigpOiB2b2lkIHtcbiAgICB0aGlzLmVudHJpZXMubGVuZ3RoID0gMDtcbiAgICB0aGlzLmJ5SWQuY2xlYXIoKTtcbiAgICB0aGlzLm5leHRJZCA9IDA7XG4gICAgdGhpcy5vd25lciA9IFN5bWJvbCgnQ29tbWl0UmFuZ2VJbmRleCcpO1xuICB9XG5cbiAgLy8g4pSA4pSA4pSAIEludGVybmFscyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICAvKiogTygxKSBsb29rdXAgYnkgdG9rZW4gaWQuIEFsd2F5cyByZXR1cm5zIHRoZSBlbnRyeSB0aGF0IHRoZSB0b2tlblxuICAgKiAgcmVmZXJlbmNlcyAob3IgdW5kZWZpbmVkIGlmIHRoZSBpZCB3YXMgbmV2ZXIgb3BlbmVkIGluIHRoaXMgaW5kZXgpLiAqL1xuICBwcml2YXRlIGZpbmRCeUlkKGlkOiBudW1iZXIpOiBJbnRlcm5hbEVudHJ5PFRMYWJlbD4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmJ5SWQuZ2V0KGlkKTtcbiAgfVxufVxuXG4vKiogUHJvamVjdCB0aGUgaW50ZXJuYWwgbXV0YWJsZSBzaGFwZSBpbnRvIHRoZSBwdWJsaWMgcmVhZG9ubHkgZW50cnkuXG4gKiAgVGhlIE9VVEVSIG9iamVjdCBpcyBhIGZyZXNoIGFsbG9jYXRpb24gcGVyIHF1ZXJ5IChzbyBjYWxsZXIgYXJyYXlcbiAqICBtdXRhdGlvbnMgZG9uJ3QgbGVhaykuIFRoZSBgbGFiZWxgIGZpZWxkIGlzIGEgUkVGRVJFTkNFIENPUFkg4oCUXG4gKiAgaWYgYFRMYWJlbGAgaXMgYW4gb2JqZWN0LCBtdXRhdGluZyBpdHMgZmllbGRzIHdpbGwgYWZmZWN0IHRoZVxuICogIGludGVybmFsIGVudHJ5IHRvby4gQ29uc3VtZXJzIE1VU1QgdHJlYXQgbGFiZWxzIGFzIGltbXV0YWJsZVxuICogIChvciBwYXNzIHByaW1pdGl2ZXMpLiBEb2N1bWVudGVkIGluIHRoZSBjbGFzcyBKU0RvYyBhcyB0aGVcbiAqICBcImxhYmVscyBhcmUgc3RvcmVkIHZlcmJhdGltXCIgY29udHJhY3QuICovXG5mdW5jdGlvbiB0b0VudHJ5PFRMYWJlbD4oZTogSW50ZXJuYWxFbnRyeTxUTGFiZWw+KTogUmFuZ2VFbnRyeTxUTGFiZWw+IHtcbiAgcmV0dXJuIGUuZW5kSWR4ID09PSB1bmRlZmluZWRcbiAgICA/IHsgbGFiZWw6IGUubGFiZWwsIHN0YXJ0SWR4OiBlLnN0YXJ0SWR4IH1cbiAgICA6IHsgbGFiZWw6IGUubGFiZWwsIHN0YXJ0SWR4OiBlLnN0YXJ0SWR4LCBlbmRJZHg6IGUuZW5kSWR4IH07XG59XG5cbi8qKlxuICogU2hhcmVkIG91dGVy4oaSaW5uZXIgY29tcGFyYXRvciBmb3IgYm90aCBgZW5jbG9zaW5nKClgIGFuZFxuICogYG92ZXJsYXBwaW5nKClgLiBQcmltYXJ5IGtleTogYHN0YXJ0SWR4YCBhc2NlbmRpbmcuIFRpZS1icmVhazpcbiAqIGBlbmRJZHhgIGRlc2NlbmRpbmcgKHdpZGVyIHJhbmdlIGlzIG91dGVyKS4gT3BlbiByYW5nZXMgKHVuZGVmaW5lZFxuICogYGVuZElkeGApIHNvcnQgYXMgK0luZmluaXR5IOKGkiBvdXRlcm1vc3Qgd2hlbiB0aWVkLiBEZXRlcm1pbmlzdGljXG4gKiBvcmRlcmluZyByZXF1aXJlZCBzbyBjb25zdW1lcnMgKExlbnMgYnJlYWRjcnVtYiwgdGltZS10cmF2ZWwgVUlzKVxuICogbmV2ZXIgc2VlIGZsaWNrZXIgb24gZXF1YWwtc3RhcnQgYm91bmRhcmllcyAoZS5nLiwgYSBQYXJhbGxlbFxuICogcm9vdCBhbmQgaXRzIGZpcnN0IGJyYW5jaCBvcGVuaW5nIGF0IHRoZSBzYW1lIGNvbW1pdCkuXG4gKi9cbmZ1bmN0aW9uIG91dGVyVG9Jbm5lckNvbXBhcmF0b3I8VExhYmVsPihhOiBSYW5nZUVudHJ5PFRMYWJlbD4sIGI6IFJhbmdlRW50cnk8VExhYmVsPik6IG51bWJlciB7XG4gIGlmIChhLnN0YXJ0SWR4ICE9PSBiLnN0YXJ0SWR4KSByZXR1cm4gYS5zdGFydElkeCAtIGIuc3RhcnRJZHg7XG4gIGNvbnN0IGFlID0gYS5lbmRJZHggPz8gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO1xuICBjb25zdCBiZSA9IGIuZW5kSWR4ID8/IE51bWJlci5QT1NJVElWRV9JTkZJTklUWTtcbiAgcmV0dXJuIGJlIC0gYWU7XG59XG4iXX0=
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* CompositeRecorder — fan-out a single recorder attachment to multiple child recorders.
|
|
4
4
|
*
|
|
5
|
-
* Implements both
|
|
6
|
-
* so it works with both `executor.
|
|
5
|
+
* Implements both ScopeRecorder (scope data ops) and FlowRecorder (control flow events)
|
|
6
|
+
* so it works with both `executor.attachScopeRecorder()` and `executor.attachFlowRecorder()`.
|
|
7
7
|
*
|
|
8
8
|
* The composite has a single ID for idempotent attach/detach. Child recorders
|
|
9
9
|
* keep their own IDs internally but are not individually visible to the executor.
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
* new DebugRecorder({ verbosity: 'minimal' }),
|
|
22
22
|
* ]);
|
|
23
23
|
*
|
|
24
|
-
* executor.
|
|
24
|
+
* executor.attachScopeRecorder(observability);
|
|
25
25
|
*
|
|
26
26
|
* // Access child recorders by type
|
|
27
27
|
* const metrics = observability.get(MetricRecorder);
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
* }
|
|
41
41
|
*
|
|
42
42
|
* // Consumer
|
|
43
|
-
* executor.
|
|
43
|
+
* executor.attachScopeRecorder(agentObservability());
|
|
44
44
|
* ```
|
|
45
45
|
*/
|
|
46
46
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
@@ -68,7 +68,7 @@ class CompositeRecorder {
|
|
|
68
68
|
getChildren() {
|
|
69
69
|
return this.children;
|
|
70
70
|
}
|
|
71
|
-
// ── Scope
|
|
71
|
+
// ── Scope ScopeRecorder hooks (fan-out to children that implement ScopeRecorder) ─
|
|
72
72
|
onRead(event) {
|
|
73
73
|
for (const c of this.children)
|
|
74
74
|
if (c.onRead)
|
|
@@ -175,4 +175,4 @@ class CompositeRecorder {
|
|
|
175
175
|
}
|
|
176
176
|
}
|
|
177
177
|
exports.CompositeRecorder = CompositeRecorder;
|
|
178
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29tcG9zaXRlUmVjb3JkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3JlY29yZGVyL0NvbXBvc2l0ZVJlY29yZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTJDRzs7O0FBeUJILE1BQWEsaUJBQWlCO0lBQ25CLEVBQUUsQ0FBUztJQUNILFFBQVEsQ0FBaUM7SUFFMUQsWUFBWSxFQUFVLEVBQUUsUUFBd0M7UUFDOUQsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7UUFDYixJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQseUVBQXlFO0lBRXpFOzs7Ozs7O09BT0c7SUFDSCxHQUFHLENBQUksSUFBK0I7UUFDcEMsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxZQUFZLElBQUksQ0FBa0IsQ0FBQztJQUN2RSxDQUFDO0lBRUQsK0JBQStCO0lBQy9CLFdBQVc7UUFDVCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQztJQUVELDBFQUEwRTtJQUUxRSxNQUFNLENBQUMsS0FBZ0I7UUFDckIsS0FBSyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUTtZQUFFLElBQUssQ0FBYyxDQUFDLE1BQU07Z0JBQUcsQ0FBYyxDQUFDLE1BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM1RixDQUFDO0lBRUQsT0FBTyxDQUFDLEtBQWlCO1FBQ3ZCLEtBQUssTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVE7WUFBRSxJQUFLLENBQWMsQ0FBQyxPQUFPO2dCQUFHLENBQWMsQ0FBQyxPQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUYsQ0FBQztJQUVELFFBQVEsQ0FBQyxLQUFrQjtRQUN6QixLQUFLLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRO1lBQUUsSUFBSyxDQUFjLENBQUMsUUFBUTtnQkFBRyxDQUFjLENBQUMsUUFBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2hHLENBQUM7SUFFRCxPQUFPLENBQUMsS0FBa0M7UUFDeEMsS0FBSyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUTtZQUFFLElBQUssQ0FBYyxDQUFDLE9BQU87Z0JBQUcsQ0FBYyxDQUFDLE9BQVEsQ0FBQyxLQUFZLENBQUMsQ0FBQztJQUNyRyxDQUFDO0lBRUQsWUFBWSxDQUFDLEtBQWlCO1FBQzVCLEtBQUssTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVE7WUFBRSxJQUFLLENBQWMsQ0FBQyxZQUFZO2dCQUFHLENBQWMsQ0FBQyxZQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDeEcsQ0FBQztJQUVELFVBQVUsQ0FBQyxLQUFpQjtRQUMxQixLQUFLLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRO1lBQUUsSUFBSyxDQUFjLENBQUMsVUFBVTtnQkFBRyxDQUFjLENBQUMsVUFBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3BHLENBQUM7SUFFRCw0RUFBNEU7SUFFNUUsZUFBZSxDQUFDLEtBQXFCO1FBQ25DLEtBQUssTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVE7WUFBRSxJQUFLLENBQWtCLENBQUMsZUFBZTtnQkFBRyxDQUFrQixDQUFDLGVBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdEgsQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUFvQjtRQUN6QixLQUFLLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRO1lBQUUsSUFBSyxDQUFrQixDQUFDLE1BQU07Z0JBQUcsQ0FBa0IsQ0FBQyxNQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDcEcsQ0FBQztJQUVELFVBQVUsQ0FBQyxLQUF3QjtRQUNqQyxLQUFLLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRO1lBQUUsSUFBSyxDQUFrQixDQUFDLFVBQVU7Z0JBQUcsQ0FBa0IsQ0FBQyxVQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDNUcsQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUFvQjtRQUN6QixLQUFLLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRO1lBQUUsSUFBSyxDQUFrQixDQUFDLE1BQU07Z0JBQUcsQ0FBa0IsQ0FBQyxNQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDcEcsQ0FBQztJQUVELFVBQVUsQ0FBQyxLQUF3QjtRQUNqQyxLQUFLLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRO1lBQUUsSUFBSyxDQUFrQixDQUFDLFVBQVU7Z0JBQUcsQ0FBa0IsQ0FBQyxVQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDNUcsQ0FBQztJQUVELGNBQWMsQ0FBQyxLQUF1QjtRQUNwQyxLQUFLLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRO1lBQUUsSUFBSyxDQUFrQixDQUFDLGNBQWM7Z0JBQUcsQ0FBa0IsQ0FBQyxjQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDcEgsQ0FBQztJQUVELGFBQWEsQ0FBQyxLQUF1QjtRQUNuQyxLQUFLLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRO1lBQUUsSUFBSyxDQUFrQixDQUFDLGFBQWE7Z0JBQUcsQ0FBa0IsQ0FBQyxhQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbEgsQ0FBQztJQUVELG1CQUFtQixDQUFDLEtBQWlDO1FBQ25ELEtBQUssTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVE7WUFDM0IsSUFBSyxDQUFrQixDQUFDLG1CQUFtQjtnQkFBRyxDQUFrQixDQUFDLG1CQUFvQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2pHLENBQUM7SUFFRCxNQUFNLENBQUMsS0FBb0I7UUFDekIsS0FBSyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUTtZQUFFLElBQUssQ0FBa0IsQ0FBQyxNQUFNO2dCQUFHLENBQWtCLENBQUMsTUFBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3BHLENBQUM7SUFFRCxPQUFPLENBQUMsS0FBcUI7UUFDM0IsS0FBSyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUTtZQUFFLElBQUssQ0FBa0IsQ0FBQyxPQUFPO2dCQUFHLENBQWtCLENBQUMsT0FBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3RHLENBQUM7SUFFRCx5RUFBeUU7SUFFekUsS0FBSztRQUNILEtBQUssTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVE7WUFBRSxJQUFJLENBQUMsQ0FBQyxLQUFLO2dCQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUN4RCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsVUFBVTtRQUNSLE1BQU0sY0FBYyxHQUF1RCxFQUFFLENBQUM7UUFDOUUsS0FBSyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDOUIsSUFBSSxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUM7Z0JBQ2pCLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUN0QyxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7WUFDaEQsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPO1lBQ0wsSUFBSSxFQUFFLFdBQVc7WUFDakIsSUFBSSxFQUFFLEVBQUUsUUFBUSxFQUFFLGNBQWMsRUFBRTtTQUNuQyxDQUFDO0lBQ0osQ0FBQztDQUNGO0FBeEhELDhDQXdIQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29tcG9zaXRlUmVjb3JkZXIg4oCUIGZhbi1vdXQgYSBzaW5nbGUgcmVjb3JkZXIgYXR0YWNobWVudCB0byBtdWx0aXBsZSBjaGlsZCByZWNvcmRlcnMuXG4gKlxuICogSW1wbGVtZW50cyBib3RoIFJlY29yZGVyIChzY29wZSBkYXRhIG9wcykgYW5kIEZsb3dSZWNvcmRlciAoY29udHJvbCBmbG93IGV2ZW50cylcbiAqIHNvIGl0IHdvcmtzIHdpdGggYm90aCBgZXhlY3V0b3IuYXR0YWNoUmVjb3JkZXIoKWAgYW5kIGBleGVjdXRvci5hdHRhY2hGbG93UmVjb3JkZXIoKWAuXG4gKlxuICogVGhlIGNvbXBvc2l0ZSBoYXMgYSBzaW5nbGUgSUQgZm9yIGlkZW1wb3RlbnQgYXR0YWNoL2RldGFjaC4gQ2hpbGQgcmVjb3JkZXJzXG4gKiBrZWVwIHRoZWlyIG93biBJRHMgaW50ZXJuYWxseSBidXQgYXJlIG5vdCBpbmRpdmlkdWFsbHkgdmlzaWJsZSB0byB0aGUgZXhlY3V0b3IuXG4gKlxuICogRG9tYWluIGxpYnJhcmllcyAoZS5nLiwgYWdlbnRmb290cHJpbnQpIHVzZSB0aGlzIHRvIGJ1bmRsZSBtdWx0aXBsZSByZWNvcmRlcnNcbiAqIGludG8gYSBzaW5nbGUgcHJlc2V0IOKAlCB0aGUgY29uc3VtZXIgY2FsbHMgb25lIGZ1bmN0aW9uLCBnZXRzIGZ1bGwgb2JzZXJ2YWJpbGl0eS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0IHsgQ29tcG9zaXRlUmVjb3JkZXIsIE1ldHJpY1JlY29yZGVyLCBEZWJ1Z1JlY29yZGVyIH0gZnJvbSAnZm9vdHByaW50anMnO1xuICpcbiAqIC8vIEJ1bmRsZSBtZXRyaWNzICsgZGVidWcgaW50byBhIHNpbmdsZSByZWNvcmRlclxuICogY29uc3Qgb2JzZXJ2YWJpbGl0eSA9IG5ldyBDb21wb3NpdGVSZWNvcmRlcignb2JzZXJ2YWJpbGl0eScsIFtcbiAqICAgbmV3IE1ldHJpY1JlY29yZGVyKHsgc3RhZ2VGaWx0ZXI6IChuYW1lKSA9PiBuYW1lID09PSAnQ2FsbExMTScgfSksXG4gKiAgIG5ldyBEZWJ1Z1JlY29yZGVyKHsgdmVyYm9zaXR5OiAnbWluaW1hbCcgfSksXG4gKiBdKTtcbiAqXG4gKiBleGVjdXRvci5hdHRhY2hSZWNvcmRlcihvYnNlcnZhYmlsaXR5KTtcbiAqXG4gKiAvLyBBY2Nlc3MgY2hpbGQgcmVjb3JkZXJzIGJ5IHR5cGVcbiAqIGNvbnN0IG1ldHJpY3MgPSBvYnNlcnZhYmlsaXR5LmdldChNZXRyaWNSZWNvcmRlcik7XG4gKiBtZXRyaWNzPy5nZXRNZXRyaWNzKCk7IC8vIHRpbWluZyBkYXRhXG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogLy8gRG9tYWluIGxpYnJhcnkgcHJlc2V0IChlLmcuLCBhZ2VudGZvb3RwcmludClcbiAqIGV4cG9ydCBmdW5jdGlvbiBhZ2VudE9ic2VydmFiaWxpdHkob3B0aW9ucz86IEFnZW50T2JzZXJ2YWJpbGl0eU9wdGlvbnMpIHtcbiAqICAgcmV0dXJuIG5ldyBDb21wb3NpdGVSZWNvcmRlcignYWdlbnQtb2JzZXJ2YWJpbGl0eScsIFtcbiAqICAgICBuZXcgTWV0cmljUmVjb3JkZXIob3B0aW9ucz8uc3RhZ2VGaWx0ZXIgPyB7IHN0YWdlRmlsdGVyOiBvcHRpb25zLnN0YWdlRmlsdGVyIH0gOiB1bmRlZmluZWQpLFxuICogICAgIG5ldyBUb2tlblJlY29yZGVyKCksXG4gKiAgICAgbmV3IFRvb2xVc2FnZVJlY29yZGVyKCksXG4gKiAgIF0pO1xuICogfVxuICpcbiAqIC8vIENvbnN1bWVyXG4gKiBleGVjdXRvci5hdHRhY2hSZWNvcmRlcihhZ2VudE9ic2VydmFiaWxpdHkoKSk7XG4gKiBgYGBcbiAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIEZsb3dCcmVha0V2ZW50LFxuICBGbG93RGVjaXNpb25FdmVudCxcbiAgRmxvd0Vycm9yRXZlbnQsXG4gIEZsb3dGb3JrRXZlbnQsXG4gIEZsb3dMb29wRXZlbnQsXG4gIEZsb3dOZXh0RXZlbnQsXG4gIEZsb3dSZWNvcmRlcixcbiAgRmxvd1NlbGVjdGVkRXZlbnQsXG4gIEZsb3dTdGFnZUV2ZW50LFxuICBGbG93U3ViZmxvd0V2ZW50LFxuICBGbG93U3ViZmxvd1JlZ2lzdGVyZWRFdmVudCxcbn0gZnJvbSAnLi4vZW5naW5lL25hcnJhdGl2ZS90eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IENvbW1pdEV2ZW50LCBFcnJvckV2ZW50LCBSZWFkRXZlbnQsIFJlY29yZGVyLCBTdGFnZUV2ZW50LCBXcml0ZUV2ZW50IH0gZnJvbSAnLi4vc2NvcGUvdHlwZXMuanMnO1xuXG4vKiogU25hcHNob3QgZm9ybWF0IGZvciBjb21wb3NpdGUgcmVjb3JkZXJzIOKAlCB3cmFwcyBjaGlsZCBzbmFwc2hvdHMuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbXBvc2l0ZVNuYXBzaG90IHtcbiAgbmFtZTogc3RyaW5nO1xuICBkYXRhOiB7XG4gICAgY2hpbGRyZW46IEFycmF5PHsgaWQ6IHN0cmluZzsgbmFtZTogc3RyaW5nOyBkYXRhOiB1bmtub3duIH0+O1xuICB9O1xufVxuXG5leHBvcnQgY2xhc3MgQ29tcG9zaXRlUmVjb3JkZXIgaW1wbGVtZW50cyBSZWNvcmRlciwgRmxvd1JlY29yZGVyIHtcbiAgcmVhZG9ubHkgaWQ6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBjaGlsZHJlbjogQXJyYXk8UmVjb3JkZXIgfCBGbG93UmVjb3JkZXI+O1xuXG4gIGNvbnN0cnVjdG9yKGlkOiBzdHJpbmcsIGNoaWxkcmVuOiBBcnJheTxSZWNvcmRlciB8IEZsb3dSZWNvcmRlcj4pIHtcbiAgICB0aGlzLmlkID0gaWQ7XG4gICAgdGhpcy5jaGlsZHJlbiA9IFsuLi5jaGlsZHJlbl07XG4gIH1cblxuICAvLyDilIDilIAgQ2hpbGQgYWNjZXNzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIC8qKlxuICAgKiBHZXQgYSBjaGlsZCByZWNvcmRlciBieSBjbGFzcyB0eXBlLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IG1ldHJpY3MgPSBjb21wb3NpdGUuZ2V0KE1ldHJpY1JlY29yZGVyKTtcbiAgICogYGBgXG4gICAqL1xuICBnZXQ8VD4odHlwZTogbmV3ICguLi5hcmdzOiBhbnlbXSkgPT4gVCk6IFQgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmNoaWxkcmVuLmZpbmQoKGMpID0+IGMgaW5zdGFuY2VvZiB0eXBlKSBhcyBUIHwgdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqIEdldCBhbGwgY2hpbGQgcmVjb3JkZXJzLiAqL1xuICBnZXRDaGlsZHJlbigpOiBSZWFkb25seUFycmF5PFJlY29yZGVyIHwgRmxvd1JlY29yZGVyPiB7XG4gICAgcmV0dXJuIHRoaXMuY2hpbGRyZW47XG4gIH1cblxuICAvLyDilIDilIAgU2NvcGUgUmVjb3JkZXIgaG9va3MgKGZhbi1vdXQgdG8gY2hpbGRyZW4gdGhhdCBpbXBsZW1lbnQgUmVjb3JkZXIpIOKUgFxuXG4gIG9uUmVhZChldmVudDogUmVhZEV2ZW50KTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBjIG9mIHRoaXMuY2hpbGRyZW4pIGlmICgoYyBhcyBSZWNvcmRlcikub25SZWFkKSAoYyBhcyBSZWNvcmRlcikub25SZWFkIShldmVudCk7XG4gIH1cblxuICBvbldyaXRlKGV2ZW50OiBXcml0ZUV2ZW50KTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBjIG9mIHRoaXMuY2hpbGRyZW4pIGlmICgoYyBhcyBSZWNvcmRlcikub25Xcml0ZSkgKGMgYXMgUmVjb3JkZXIpLm9uV3JpdGUhKGV2ZW50KTtcbiAgfVxuXG4gIG9uQ29tbWl0KGV2ZW50OiBDb21taXRFdmVudCk6IHZvaWQge1xuICAgIGZvciAoY29uc3QgYyBvZiB0aGlzLmNoaWxkcmVuKSBpZiAoKGMgYXMgUmVjb3JkZXIpLm9uQ29tbWl0KSAoYyBhcyBSZWNvcmRlcikub25Db21taXQhKGV2ZW50KTtcbiAgfVxuXG4gIG9uRXJyb3IoZXZlbnQ6IEVycm9yRXZlbnQgfCBGbG93RXJyb3JFdmVudCk6IHZvaWQge1xuICAgIGZvciAoY29uc3QgYyBvZiB0aGlzLmNoaWxkcmVuKSBpZiAoKGMgYXMgUmVjb3JkZXIpLm9uRXJyb3IpIChjIGFzIFJlY29yZGVyKS5vbkVycm9yIShldmVudCBhcyBhbnkpO1xuICB9XG5cbiAgb25TdGFnZVN0YXJ0KGV2ZW50OiBTdGFnZUV2ZW50KTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBjIG9mIHRoaXMuY2hpbGRyZW4pIGlmICgoYyBhcyBSZWNvcmRlcikub25TdGFnZVN0YXJ0KSAoYyBhcyBSZWNvcmRlcikub25TdGFnZVN0YXJ0IShldmVudCk7XG4gIH1cblxuICBvblN0YWdlRW5kKGV2ZW50OiBTdGFnZUV2ZW50KTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBjIG9mIHRoaXMuY2hpbGRyZW4pIGlmICgoYyBhcyBSZWNvcmRlcikub25TdGFnZUVuZCkgKGMgYXMgUmVjb3JkZXIpLm9uU3RhZ2VFbmQhKGV2ZW50KTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBGbG93UmVjb3JkZXIgaG9va3MgKGZhbi1vdXQgdG8gY2hpbGRyZW4gdGhhdCBpbXBsZW1lbnQgRmxvd1JlY29yZGVyKSDilIBcblxuICBvblN0YWdlRXhlY3V0ZWQoZXZlbnQ6IEZsb3dTdGFnZUV2ZW50KTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBjIG9mIHRoaXMuY2hpbGRyZW4pIGlmICgoYyBhcyBGbG93UmVjb3JkZXIpLm9uU3RhZ2VFeGVjdXRlZCkgKGMgYXMgRmxvd1JlY29yZGVyKS5vblN0YWdlRXhlY3V0ZWQhKGV2ZW50KTtcbiAgfVxuXG4gIG9uTmV4dChldmVudDogRmxvd05leHRFdmVudCk6IHZvaWQge1xuICAgIGZvciAoY29uc3QgYyBvZiB0aGlzLmNoaWxkcmVuKSBpZiAoKGMgYXMgRmxvd1JlY29yZGVyKS5vbk5leHQpIChjIGFzIEZsb3dSZWNvcmRlcikub25OZXh0IShldmVudCk7XG4gIH1cblxuICBvbkRlY2lzaW9uKGV2ZW50OiBGbG93RGVjaXNpb25FdmVudCk6IHZvaWQge1xuICAgIGZvciAoY29uc3QgYyBvZiB0aGlzLmNoaWxkcmVuKSBpZiAoKGMgYXMgRmxvd1JlY29yZGVyKS5vbkRlY2lzaW9uKSAoYyBhcyBGbG93UmVjb3JkZXIpLm9uRGVjaXNpb24hKGV2ZW50KTtcbiAgfVxuXG4gIG9uRm9yayhldmVudDogRmxvd0ZvcmtFdmVudCk6IHZvaWQge1xuICAgIGZvciAoY29uc3QgYyBvZiB0aGlzLmNoaWxkcmVuKSBpZiAoKGMgYXMgRmxvd1JlY29yZGVyKS5vbkZvcmspIChjIGFzIEZsb3dSZWNvcmRlcikub25Gb3JrIShldmVudCk7XG4gIH1cblxuICBvblNlbGVjdGVkKGV2ZW50OiBGbG93U2VsZWN0ZWRFdmVudCk6IHZvaWQge1xuICAgIGZvciAoY29uc3QgYyBvZiB0aGlzLmNoaWxkcmVuKSBpZiAoKGMgYXMgRmxvd1JlY29yZGVyKS5vblNlbGVjdGVkKSAoYyBhcyBGbG93UmVjb3JkZXIpLm9uU2VsZWN0ZWQhKGV2ZW50KTtcbiAgfVxuXG4gIG9uU3ViZmxvd0VudHJ5KGV2ZW50OiBGbG93U3ViZmxvd0V2ZW50KTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBjIG9mIHRoaXMuY2hpbGRyZW4pIGlmICgoYyBhcyBGbG93UmVjb3JkZXIpLm9uU3ViZmxvd0VudHJ5KSAoYyBhcyBGbG93UmVjb3JkZXIpLm9uU3ViZmxvd0VudHJ5IShldmVudCk7XG4gIH1cblxuICBvblN1YmZsb3dFeGl0KGV2ZW50OiBGbG93U3ViZmxvd0V2ZW50KTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBjIG9mIHRoaXMuY2hpbGRyZW4pIGlmICgoYyBhcyBGbG93UmVjb3JkZXIpLm9uU3ViZmxvd0V4aXQpIChjIGFzIEZsb3dSZWNvcmRlcikub25TdWJmbG93RXhpdCEoZXZlbnQpO1xuICB9XG5cbiAgb25TdWJmbG93UmVnaXN0ZXJlZChldmVudDogRmxvd1N1YmZsb3dSZWdpc3RlcmVkRXZlbnQpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGMgb2YgdGhpcy5jaGlsZHJlbilcbiAgICAgIGlmICgoYyBhcyBGbG93UmVjb3JkZXIpLm9uU3ViZmxvd1JlZ2lzdGVyZWQpIChjIGFzIEZsb3dSZWNvcmRlcikub25TdWJmbG93UmVnaXN0ZXJlZCEoZXZlbnQpO1xuICB9XG5cbiAgb25Mb29wKGV2ZW50OiBGbG93TG9vcEV2ZW50KTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBjIG9mIHRoaXMuY2hpbGRyZW4pIGlmICgoYyBhcyBGbG93UmVjb3JkZXIpLm9uTG9vcCkgKGMgYXMgRmxvd1JlY29yZGVyKS5vbkxvb3AhKGV2ZW50KTtcbiAgfVxuXG4gIG9uQnJlYWsoZXZlbnQ6IEZsb3dCcmVha0V2ZW50KTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBjIG9mIHRoaXMuY2hpbGRyZW4pIGlmICgoYyBhcyBGbG93UmVjb3JkZXIpLm9uQnJlYWspIChjIGFzIEZsb3dSZWNvcmRlcikub25CcmVhayEoZXZlbnQpO1xuICB9XG5cbiAgLy8g4pSA4pSAIExpZmVjeWNsZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICBjbGVhcigpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGMgb2YgdGhpcy5jaGlsZHJlbikgaWYgKGMuY2xlYXIpIGMuY2xlYXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTbmFwc2hvdCBtZXJnZXMgYWxsIGNoaWxkIHNuYXBzaG90cyBpbnRvIGEgc2luZ2xlIGNvbXBvc2l0ZSBlbnRyeS5cbiAgICogRWFjaCBjaGlsZCdzIHNuYXBzaG90IGlzIHByZXNlcnZlZCB3aXRoIGl0cyBvd24gaWQvbmFtZS9kYXRhLlxuICAgKi9cbiAgdG9TbmFwc2hvdCgpOiBDb21wb3NpdGVTbmFwc2hvdCB7XG4gICAgY29uc3QgY2hpbGRTbmFwc2hvdHM6IEFycmF5PHsgaWQ6IHN0cmluZzsgbmFtZTogc3RyaW5nOyBkYXRhOiB1bmtub3duIH0+ID0gW107XG4gICAgZm9yIChjb25zdCBjIG9mIHRoaXMuY2hpbGRyZW4pIHtcbiAgICAgIGlmIChjLnRvU25hcHNob3QpIHtcbiAgICAgICAgY29uc3QgeyBuYW1lLCBkYXRhIH0gPSBjLnRvU25hcHNob3QoKTtcbiAgICAgICAgY2hpbGRTbmFwc2hvdHMucHVzaCh7IGlkOiBjLmlkLCBuYW1lLCBkYXRhIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgbmFtZTogJ0NvbXBvc2l0ZScsXG4gICAgICBkYXRhOiB7IGNoaWxkcmVuOiBjaGlsZFNuYXBzaG90cyB9LFxuICAgIH07XG4gIH1cbn1cbiJdfQ==
|
|
178
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29tcG9zaXRlUmVjb3JkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3JlY29yZGVyL0NvbXBvc2l0ZVJlY29yZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTJDRzs7O0FBeUJILE1BQWEsaUJBQWlCO0lBQ25CLEVBQUUsQ0FBUztJQUNILFFBQVEsQ0FBc0M7SUFFL0QsWUFBWSxFQUFVLEVBQUUsUUFBNkM7UUFDbkUsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7UUFDYixJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQseUVBQXlFO0lBRXpFOzs7Ozs7O09BT0c7SUFDSCxHQUFHLENBQUksSUFBK0I7UUFDcEMsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxZQUFZLElBQUksQ0FBa0IsQ0FBQztJQUN2RSxDQUFDO0lBRUQsK0JBQStCO0lBQy9CLFdBQVc7UUFDVCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQztJQUVELG9GQUFvRjtJQUVwRixNQUFNLENBQUMsS0FBZ0I7UUFDckIsS0FBSyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUTtZQUFFLElBQUssQ0FBbUIsQ0FBQyxNQUFNO2dCQUFHLENBQW1CLENBQUMsTUFBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3RHLENBQUM7SUFFRCxPQUFPLENBQUMsS0FBaUI7UUFDdkIsS0FBSyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUTtZQUFFLElBQUssQ0FBbUIsQ0FBQyxPQUFPO2dCQUFHLENBQW1CLENBQUMsT0FBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3hHLENBQUM7SUFFRCxRQUFRLENBQUMs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QUMsTUFBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3BHLENBQUM7SUFFRCxPQUFPLENBQUMsS0FBcUI7UUFDM0IsS0FBSyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUTtZQUFFLElBQUssQ0FBa0IsQ0FBQyxPQUFPO2dCQUFHLENBQWtCLENBQUMsT0FBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3RHLENBQUM7SUFFRCx5RUFBeUU7SUFFekUsS0FBSztRQUNILEtBQUssTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVE7WUFBRSxJQUFJLENBQUMsQ0FBQyxLQUFLO2dCQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUN4RCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsVUFBVTtRQUNSLE1BQU0sY0FBYyxHQUF1RCxFQUFFLENBQUM7UUFDOUUsS0FBSyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDOUIsSUFBSSxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUM7Z0JBQ2pCLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUN0QyxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7WUFDaEQsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPO1lBQ0wsSUFBSSxFQUFFLFdBQVc7WUFDakIsSUFBSSxFQUFFLEVBQUUsUUFBUSxFQUFFLGNBQWMsRUFBRTtTQUNuQyxDQUFDO0lBQ0osQ0FBQztDQUNGO0FBeEhELDhDQXdIQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29tcG9zaXRlUmVjb3JkZXIg4oCUIGZhbi1vdXQgYSBzaW5nbGUgcmVjb3JkZXIgYXR0YWNobWVudCB0byBtdWx0aXBsZSBjaGlsZCByZWNvcmRlcnMuXG4gKlxuICogSW1wbGVtZW50cyBib3RoIFNjb3BlUmVjb3JkZXIgKHNjb3BlIGRhdGEgb3BzKSBhbmQgRmxvd1JlY29yZGVyIChjb250cm9sIGZsb3cgZXZlbnRzKVxuICogc28gaXQgd29ya3Mgd2l0aCBib3RoIGBleGVjdXRvci5hdHRhY2hTY29wZVJlY29yZGVyKClgIGFuZCBgZXhlY3V0b3IuYXR0YWNoRmxvd1JlY29yZGVyKClgLlxuICpcbiAqIFRoZSBjb21wb3NpdGUgaGFzIGEgc2luZ2xlIElEIGZvciBpZGVtcG90ZW50IGF0dGFjaC9kZXRhY2guIENoaWxkIHJlY29yZGVyc1xuICoga2VlcCB0aGVpciBvd24gSURzIGludGVybmFsbHkgYnV0IGFyZSBub3QgaW5kaXZpZHVhbGx5IHZpc2libGUgdG8gdGhlIGV4ZWN1dG9yLlxuICpcbiAqIERvbWFpbiBsaWJyYXJpZXMgKGUuZy4sIGFnZW50Zm9vdHByaW50KSB1c2UgdGhpcyB0byBidW5kbGUgbXVsdGlwbGUgcmVjb3JkZXJzXG4gKiBpbnRvIGEgc2luZ2xlIHByZXNldCDigJQgdGhlIGNvbnN1bWVyIGNhbGxzIG9uZSBmdW5jdGlvbiwgZ2V0cyBmdWxsIG9ic2VydmFiaWxpdHkuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGltcG9ydCB7IENvbXBvc2l0ZVJlY29yZGVyLCBNZXRyaWNSZWNvcmRlciwgRGVidWdSZWNvcmRlciB9IGZyb20gJ2Zvb3RwcmludGpzJztcbiAqXG4gKiAvLyBCdW5kbGUgbWV0cmljcyArIGRlYnVnIGludG8gYSBzaW5nbGUgcmVjb3JkZXJcbiAqIGNvbnN0IG9ic2VydmFiaWxpdHkgPSBuZXcgQ29tcG9zaXRlUmVjb3JkZXIoJ29ic2VydmFiaWxpdHknLCBbXG4gKiAgIG5ldyBNZXRyaWNSZWNvcmRlcih7IHN0YWdlRmlsdGVyOiAobmFtZSkgPT4gbmFtZSA9PT0gJ0NhbGxMTE0nIH0pLFxuICogICBuZXcgRGVidWdSZWNvcmRlcih7IHZlcmJvc2l0eTogJ21pbmltYWwnIH0pLFxuICogXSk7XG4gKlxuICogZXhlY3V0b3IuYXR0YWNoU2NvcGVSZWNvcmRlcihvYnNlcnZhYmlsaXR5KTtcbiAqXG4gKiAvLyBBY2Nlc3MgY2hpbGQgcmVjb3JkZXJzIGJ5IHR5cGVcbiAqIGNvbnN0IG1ldHJpY3MgPSBvYnNlcnZhYmlsaXR5LmdldChNZXRyaWNSZWNvcmRlcik7XG4gKiBtZXRyaWNzPy5nZXRNZXRyaWNzKCk7IC8vIHRpbWluZyBkYXRhXG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogLy8gRG9tYWluIGxpYnJhcnkgcHJlc2V0IChlLmcuLCBhZ2VudGZvb3RwcmludClcbiAqIGV4cG9ydCBmdW5jdGlvbiBhZ2VudE9ic2VydmFiaWxpdHkob3B0aW9ucz86IEFnZW50T2JzZXJ2YWJpbGl0eU9wdGlvbnMpIHtcbiAqICAgcmV0dXJuIG5ldyBDb21wb3NpdGVSZWNvcmRlcignYWdlbnQtb2JzZXJ2YWJpbGl0eScsIFtcbiAqICAgICBuZXcgTWV0cmljUmVjb3JkZXIob3B0aW9ucz8uc3RhZ2VGaWx0ZXIgPyB7IHN0YWdlRmlsdGVyOiBvcHRpb25zLnN0YWdlRmlsdGVyIH0gOiB1bmRlZmluZWQpLFxuICogICAgIG5ldyBUb2tlblJlY29yZGVyKCksXG4gKiAgICAgbmV3IFRvb2xVc2FnZVJlY29yZGVyKCksXG4gKiAgIF0pO1xuICogfVxuICpcbiAqIC8vIENvbnN1bWVyXG4gKiBleGVjdXRvci5hdHRhY2hTY29wZVJlY29yZGVyKGFnZW50T2JzZXJ2YWJpbGl0eSgpKTtcbiAqIGBgYFxuICovXG5cbmltcG9ydCB0eXBlIHtcbiAgRmxvd0JyZWFrRXZlbnQsXG4gIEZsb3dEZWNpc2lvbkV2ZW50LFxuICBGbG93RXJyb3JFdmVudCxcbiAgRmxvd0ZvcmtFdmVudCxcbiAgRmxvd0xvb3BFdmVudCxcbiAgRmxvd05leHRFdmVudCxcbiAgRmxvd1JlY29yZGVyLFxuICBGbG93U2VsZWN0ZWRFdmVudCxcbiAgRmxvd1N0YWdlRXZlbnQsXG4gIEZsb3dTdWJmbG93RXZlbnQsXG4gIEZsb3dTdWJmbG93UmVnaXN0ZXJlZEV2ZW50LFxufSBmcm9tICcuLi9lbmdpbmUvbmFycmF0aXZlL3R5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgQ29tbWl0RXZlbnQsIEVycm9yRXZlbnQsIFJlYWRFdmVudCwgU2NvcGVSZWNvcmRlciwgU3RhZ2VFdmVudCwgV3JpdGVFdmVudCB9IGZyb20gJy4uL3Njb3BlL3R5cGVzLmpzJztcblxuLyoqIFNuYXBzaG90IGZvcm1hdCBmb3IgY29tcG9zaXRlIHJlY29yZGVycyDigJQgd3JhcHMgY2hpbGQgc25hcHNob3RzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb21wb3NpdGVTbmFwc2hvdCB7XG4gIG5hbWU6IHN0cmluZztcbiAgZGF0YToge1xuICAgIGNoaWxkcmVuOiBBcnJheTx7IGlkOiBzdHJpbmc7IG5hbWU6IHN0cmluZzsgZGF0YTogdW5rbm93biB9PjtcbiAgfTtcbn1cblxuZXhwb3J0IGNsYXNzIENvbXBvc2l0ZVJlY29yZGVyIGltcGxlbWVudHMgU2NvcGVSZWNvcmRlciwgRmxvd1JlY29yZGVyIHtcbiAgcmVhZG9ubHkgaWQ6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBjaGlsZHJlbjogQXJyYXk8U2NvcGVSZWNvcmRlciB8IEZsb3dSZWNvcmRlcj47XG5cbiAgY29uc3RydWN0b3IoaWQ6IHN0cmluZywgY2hpbGRyZW46IEFycmF5PFNjb3BlUmVjb3JkZXIgfCBGbG93UmVjb3JkZXI+KSB7XG4gICAgdGhpcy5pZCA9IGlkO1xuICAgIHRoaXMuY2hpbGRyZW4gPSBbLi4uY2hpbGRyZW5dO1xuICB9XG5cbiAgLy8g4pSA4pSAIENoaWxkIGFjY2VzcyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICAvKipcbiAgICogR2V0IGEgY2hpbGQgcmVjb3JkZXIgYnkgY2xhc3MgdHlwZS5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCBtZXRyaWNzID0gY29tcG9zaXRlLmdldChNZXRyaWNSZWNvcmRlcik7XG4gICAqIGBgYFxuICAgKi9cbiAgZ2V0PFQ+KHR5cGU6IG5ldyAoLi4uYXJnczogYW55W10pID0+IFQpOiBUIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5jaGlsZHJlbi5maW5kKChjKSA9PiBjIGluc3RhbmNlb2YgdHlwZSkgYXMgVCB8IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKiBHZXQgYWxsIGNoaWxkIHJlY29yZGVycy4gKi9cbiAgZ2V0Q2hpbGRyZW4oKTogUmVhZG9ubHlBcnJheTxTY29wZVJlY29yZGVyIHwgRmxvd1JlY29yZGVyPiB7XG4gICAgcmV0dXJuIHRoaXMuY2hpbGRyZW47XG4gIH1cblxuICAvLyDilIDilIAgU2NvcGUgU2NvcGVSZWNvcmRlciBob29rcyAoZmFuLW91dCB0byBjaGlsZHJlbiB0aGF0IGltcGxlbWVudCBTY29wZVJlY29yZGVyKSDilIBcblxuICBvblJlYWQoZXZlbnQ6IFJlYWRFdmVudCk6IHZvaWQge1xuICAgIGZvciAoY29uc3QgYyBvZiB0aGlzLmNoaWxkcmVuKSBpZiAoKGMgYXMgU2NvcGVSZWNvcmRlcikub25SZWFkKSAoYyBhcyBTY29wZVJlY29yZGVyKS5vblJlYWQhKGV2ZW50KTtcbiAgfVxuXG4gIG9uV3JpdGUoZXZlbnQ6IFdyaXRlRXZlbnQpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGMgb2YgdGhpcy5jaGlsZHJlbikgaWYgKChjIGFzIFNjb3BlUmVjb3JkZXIpLm9uV3JpdGUpIChjIGFzIFNjb3BlUmVjb3JkZXIpLm9uV3JpdGUhKGV2ZW50KTtcbiAgfVxuXG4gIG9uQ29tbWl0KGV2ZW50OiBDb21taXRFdmVudCk6IHZvaWQge1xuICAgIGZvciAoY29uc3QgYyBvZiB0aGlzLmNoaWxkcmVuKSBpZiAoKGMgYXMgU2NvcGVSZWNvcmRlcikub25Db21taXQpIChjIGFzIFNjb3BlUmVjb3JkZXIpLm9uQ29tbWl0IShldmVudCk7XG4gIH1cblxuICBvbkVycm9yKGV2ZW50OiBFcnJvckV2ZW50IHwgRmxvd0Vycm9yRXZlbnQpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGMgb2YgdGhpcy5jaGlsZHJlbikgaWYgKChjIGFzIFNjb3BlUmVjb3JkZXIpLm9uRXJyb3IpIChjIGFzIFNjb3BlUmVjb3JkZXIpLm9uRXJyb3IhKGV2ZW50IGFzIGFueSk7XG4gIH1cblxuICBvblN0YWdlU3RhcnQoZXZlbnQ6IFN0YWdlRXZlbnQpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGMgb2YgdGhpcy5jaGlsZHJlbikgaWYgKChjIGFzIFNjb3BlUmVjb3JkZXIpLm9uU3RhZ2VTdGFydCkgKGMgYXMgU2NvcGVSZWNvcmRlcikub25TdGFnZVN0YXJ0IShldmVudCk7XG4gIH1cblxuICBvblN0YWdlRW5kKGV2ZW50OiBTdGFnZUV2ZW50KTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBjIG9mIHRoaXMuY2hpbGRyZW4pIGlmICgoYyBhcyBTY29wZVJlY29yZGVyKS5vblN0YWdlRW5kKSAoYyBhcyBTY29wZVJlY29yZGVyKS5vblN0YWdlRW5kIShldmVudCk7XG4gIH1cblxuICAvLyDilIDilIAgRmxvd1JlY29yZGVyIGhvb2tzIChmYW4tb3V0IHRvIGNoaWxkcmVuIHRoYXQgaW1wbGVtZW50IEZsb3dSZWNvcmRlcikg4pSAXG5cbiAgb25TdGFnZUV4ZWN1dGVkKGV2ZW50OiBGbG93U3RhZ2VFdmVudCk6IHZvaWQge1xuICAgIGZvciAoY29uc3QgYyBvZiB0aGlzLmNoaWxkcmVuKSBpZiAoKGMgYXMgRmxvd1JlY29yZGVyKS5vblN0YWdlRXhlY3V0ZWQpIChjIGFzIEZsb3dSZWNvcmRlcikub25TdGFnZUV4ZWN1dGVkIShldmVudCk7XG4gIH1cblxuICBvbk5leHQoZXZlbnQ6IEZsb3dOZXh0RXZlbnQpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGMgb2YgdGhpcy5jaGlsZHJlbikgaWYgKChjIGFzIEZsb3dSZWNvcmRlcikub25OZXh0KSAoYyBhcyBGbG93UmVjb3JkZXIpLm9uTmV4dCEoZXZlbnQpO1xuICB9XG5cbiAgb25EZWNpc2lvbihldmVudDogRmxvd0RlY2lzaW9uRXZlbnQpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGMgb2YgdGhpcy5jaGlsZHJlbikgaWYgKChjIGFzIEZsb3dSZWNvcmRlcikub25EZWNpc2lvbikgKGMgYXMgRmxvd1JlY29yZGVyKS5vbkRlY2lzaW9uIShldmVudCk7XG4gIH1cblxuICBvbkZvcmsoZXZlbnQ6IEZsb3dGb3JrRXZlbnQpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGMgb2YgdGhpcy5jaGlsZHJlbikgaWYgKChjIGFzIEZsb3dSZWNvcmRlcikub25Gb3JrKSAoYyBhcyBGbG93UmVjb3JkZXIpLm9uRm9yayEoZXZlbnQpO1xuICB9XG5cbiAgb25TZWxlY3RlZChldmVudDogRmxvd1NlbGVjdGVkRXZlbnQpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGMgb2YgdGhpcy5jaGlsZHJlbikgaWYgKChjIGFzIEZsb3dSZWNvcmRlcikub25TZWxlY3RlZCkgKGMgYXMgRmxvd1JlY29yZGVyKS5vblNlbGVjdGVkIShldmVudCk7XG4gIH1cblxuICBvblN1YmZsb3dFbnRyeShldmVudDogRmxvd1N1YmZsb3dFdmVudCk6IHZvaWQge1xuICAgIGZvciAoY29uc3QgYyBvZiB0aGlzLmNoaWxkcmVuKSBpZiAoKGMgYXMgRmxvd1JlY29yZGVyKS5vblN1YmZsb3dFbnRyeSkgKGMgYXMgRmxvd1JlY29yZGVyKS5vblN1YmZsb3dFbnRyeSEoZXZlbnQpO1xuICB9XG5cbiAgb25TdWJmbG93RXhpdChldmVudDogRmxvd1N1YmZsb3dFdmVudCk6IHZvaWQge1xuICAgIGZvciAoY29uc3QgYyBvZiB0aGlzLmNoaWxkcmVuKSBpZiAoKGMgYXMgRmxvd1JlY29yZGVyKS5vblN1YmZsb3dFeGl0KSAoYyBhcyBGbG93UmVjb3JkZXIpLm9uU3ViZmxvd0V4aXQhKGV2ZW50KTtcbiAgfVxuXG4gIG9uU3ViZmxvd1JlZ2lzdGVyZWQoZXZlbnQ6IEZsb3dTdWJmbG93UmVnaXN0ZXJlZEV2ZW50KTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBjIG9mIHRoaXMuY2hpbGRyZW4pXG4gICAgICBpZiAoKGMgYXMgRmxvd1JlY29yZGVyKS5vblN1YmZsb3dSZWdpc3RlcmVkKSAoYyBhcyBGbG93UmVjb3JkZXIpLm9uU3ViZmxvd1JlZ2lzdGVyZWQhKGV2ZW50KTtcbiAgfVxuXG4gIG9uTG9vcChldmVudDogRmxvd0xvb3BFdmVudCk6IHZvaWQge1xuICAgIGZvciAoY29uc3QgYyBvZiB0aGlzLmNoaWxkcmVuKSBpZiAoKGMgYXMgRmxvd1JlY29yZGVyKS5vbkxvb3ApIChjIGFzIEZsb3dSZWNvcmRlcikub25Mb29wIShldmVudCk7XG4gIH1cblxuICBvbkJyZWFrKGV2ZW50OiBGbG93QnJlYWtFdmVudCk6IHZvaWQge1xuICAgIGZvciAoY29uc3QgYyBvZiB0aGlzLmNoaWxkcmVuKSBpZiAoKGMgYXMgRmxvd1JlY29yZGVyKS5vbkJyZWFrKSAoYyBhcyBGbG93UmVjb3JkZXIpLm9uQnJlYWshKGV2ZW50KTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBMaWZlY3ljbGUg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgY2xlYXIoKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBjIG9mIHRoaXMuY2hpbGRyZW4pIGlmIChjLmNsZWFyKSBjLmNsZWFyKCk7XG4gIH1cblxuICAvKipcbiAgICogU25hcHNob3QgbWVyZ2VzIGFsbCBjaGlsZCBzbmFwc2hvdHMgaW50byBhIHNpbmdsZSBjb21wb3NpdGUgZW50cnkuXG4gICAqIEVhY2ggY2hpbGQncyBzbmFwc2hvdCBpcyBwcmVzZXJ2ZWQgd2l0aCBpdHMgb3duIGlkL25hbWUvZGF0YS5cbiAgICovXG4gIHRvU25hcHNob3QoKTogQ29tcG9zaXRlU25hcHNob3Qge1xuICAgIGNvbnN0IGNoaWxkU25hcHNob3RzOiBBcnJheTx7IGlkOiBzdHJpbmc7IG5hbWU6IHN0cmluZzsgZGF0YTogdW5rbm93biB9PiA9IFtdO1xuICAgIGZvciAoY29uc3QgYyBvZiB0aGlzLmNoaWxkcmVuKSB7XG4gICAgICBpZiAoYy50b1NuYXBzaG90KSB7XG4gICAgICAgIGNvbnN0IHsgbmFtZSwgZGF0YSB9ID0gYy50b1NuYXBzaG90KCk7XG4gICAgICAgIGNoaWxkU25hcHNob3RzLnB1c2goeyBpZDogYy5pZCwgbmFtZSwgZGF0YSB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6ICdDb21wb3NpdGUnLFxuICAgICAgZGF0YTogeyBjaGlsZHJlbjogY2hpbGRTbmFwc2hvdHMgfSxcbiAgICB9O1xuICB9XG59XG4iXX0=
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/**
|
|
3
|
-
* EmitRecorder — the third observer channel, alongside `
|
|
3
|
+
* EmitRecorder — the third observer channel, alongside `ScopeRecorder`
|
|
4
4
|
* (scope data-flow) and `FlowRecorder` (control-flow).
|
|
5
5
|
*
|
|
6
6
|
* ## Why this exists
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
*
|
|
36
36
|
* | Channel | Fires when | Built-in consumers |
|
|
37
37
|
* |-----------------|------------------------------------|------------------------|
|
|
38
|
-
* | `
|
|
38
|
+
* | `ScopeRecorder` | scope read/write/commit | DebugRecorder, MetricRecorder |
|
|
39
39
|
* | `FlowRecorder` | traversal transitions | NarrativeFlowRecorder, etc. |
|
|
40
40
|
* | `EmitRecorder` | consumer calls `scope.$emit(...)` | (none ships today; Phase 3.X adds MemoryEmitRecorder) |
|
|
41
41
|
*
|
|
@@ -60,4 +60,4 @@
|
|
|
60
60
|
* ```
|
|
61
61
|
*/
|
|
62
62
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
63
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
63
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRW1pdFJlY29yZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9yZWNvcmRlci9FbWl0UmVjb3JkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTJERyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRW1pdFJlY29yZGVyIOKAlCB0aGUgdGhpcmQgb2JzZXJ2ZXIgY2hhbm5lbCwgYWxvbmdzaWRlIGBTY29wZVJlY29yZGVyYFxuICogKHNjb3BlIGRhdGEtZmxvdykgYW5kIGBGbG93UmVjb3JkZXJgIChjb250cm9sLWZsb3cpLlxuICpcbiAqICMjIFdoeSB0aGlzIGV4aXN0c1xuICpcbiAqIFRoZSBmaXJzdCB0d28gY2hhbm5lbHMgY2FwdHVyZSB3aGF0IHRoZSBMSUJSQVJZIGtub3dzIGFib3V0IOKAlCBzY29wZVxuICogcmVhZHMvd3JpdGVzIGZpcmVkIGJ5IGBzZXRWYWx1ZWAsIGFuZCBjb250cm9sLWZsb3cgZXZlbnRzIGZpcmVkIGJ5IHRoZVxuICogdHJhdmVyc2VyLiBCdXQgKip1c2VyLWVtaXR0ZWQgc3RydWN0dXJlZCBldmVudHMqKiDigJQgdGhpbmdzIGEgc3RhZ2VcbiAqIGZ1bmN0aW9uIHdhbnRzIHRvIHN1cmZhY2UgZm9yIG9ic2VydmFiaWxpdHkgKExMTSB0b2tlbnMsIGJpbGxpbmcgbWV0cmljcyxcbiAqIGF1dGggZGVjaXNpb25zLCBkb21haW4gbWlsZXN0b25lcykg4oCUIGhhdmUgbm93aGVyZSB0byBnbyB0b2RheS4gVGhleSBsYW5kXG4gKiBpbiB1bm9ic2VydmVkIGBEaWFnbm9zdGljQ29sbGVjdG9yYCBzaWRlIGJhZ3MgdGhhdCBubyByZWNvcmRlciB3YXRjaGVzLlxuICpcbiAqIFRoaXMgY2hhbm5lbCBjbG9zZXMgdGhhdCBnYXAuIENvbnN1bWVyIGNhbGxzIGBzY29wZS4kZW1pdChuYW1lLCBwYXlsb2FkKWBcbiAqIGZyb20gaW5zaWRlIGEgc3RhZ2U7IHRoZSBsaWJyYXJ5IGVucmljaGVzIHRoZSBldmVudCB3aXRoIHN0YWdlIGNvbnRleHRcbiAqIGFuZCBkaXNwYXRjaGVzIGl0IHN5bmNocm9ub3VzbHkgdG8gZXZlcnkgYXR0YWNoZWQgYEVtaXRSZWNvcmRlcmAuXG4gKlxuICogIyMgRGVzaWduIHByb3BlcnRpZXNcbiAqXG4gKiAtICoqUGFzcy10aHJvdWdoLCBub3QgYnVmZmVyZWQuKiogWmVybyBhbGxvY2F0aW9uIHdoZW4gbm8gcmVjb3JkZXIgaXNcbiAqICAgYXR0YWNoZWQuIEV2ZW50cyBkZWxpdmVyZWQgc3luY2hyb25vdXNseSwgaW4tb3JkZXIsIGF0IGNhbGwgdGltZS5cbiAqICAgU2FtZSBzZW1hbnRpY3MgYXMgYG9uUmVhZGAvYG9uV3JpdGVgIGFscmVhZHkgdXNlLlxuICogLSAqKkxpYnJhcnktYWdub3N0aWMgdm9jYWJ1bGFyeS4qKiBFdmVudCBuYW1lcyBhcmUgY29uc3VtZXItY2hvc2VuIHN0cmluZ3MuXG4gKiAgIENvbnZlbnRpb246IGhpZXJhcmNoaWNhbCBkb3R0ZWQgbmFtZXMsIGUuZy4gYCdhZ2VudGZvb3RwcmludC5sbG0udG9rZW5zJ2AsXG4gKiAgIGAnbXlhcHAuYmlsbGluZy5zcGVuZCdgLiBMaWJyYXJ5IGVuZm9yY2VzIG5vIHJlZ2lzdHJ5LlxuICogLSAqKkF1dG8tZW5yaWNoZWQgY29udGV4dC4qKiBFdmVyeSBldmVudCBjYXJyaWVzIGBzdGFnZU5hbWVgLFxuICogICBgcnVudGltZVN0YWdlSWRgLCBgc3ViZmxvd1BhdGhgLCBgcGlwZWxpbmVJZGAsIGB0aW1lc3RhbXBgLiBDb25zdW1lcnNcbiAqICAgbmV2ZXIgbmVlZCB0byB0aHJlYWQgZXhlY3V0aW9uIGNvbnRleHQgdGhyb3VnaCB0aGVpciBlbWl0IHBheWxvYWRzLlxuICogLSAqKlJlZGFjdGlvbi1hd2FyZS4qKiBgUmVkYWN0aW9uUG9saWN5LmVtaXRQYXR0ZXJuc2AgbWF0Y2hlcyBldmVudCBuYW1lc1xuICogICBiZWZvcmUgZGlzcGF0Y2gg4oCUIG1hdGNoZWQgZXZlbnRzIGhhdmUgdGhlaXIgcGF5bG9hZCByZXBsYWNlZCB3aXRoXG4gKiAgIGAnW1JFREFDVEVEXSdgIHNvIHNlY3JldHMgY2FuJ3QgbGVhayB2aWEgZW1pdC5cbiAqXG4gKiAjIyBSZWxhdGlvbnNoaXAgdG8gZXhpc3RpbmcgY2hhbm5lbHNcbiAqXG4gKiB8IENoYW5uZWwgICAgICAgICB8IEZpcmVzIHdoZW4gICAgICAgICAgICAgICAgICAgICAgICAgfCBCdWlsdC1pbiBjb25zdW1lcnMgICAgIHxcbiAqIHwtLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfFxuICogfCBgU2NvcGVSZWNvcmRlcmAgICAgICB8IHNjb3BlIHJlYWQvd3JpdGUvY29tbWl0ICAgICAgICAgICAgfCBEZWJ1Z1JlY29yZGVyLCBNZXRyaWNSZWNvcmRlciB8XG4gKiB8IGBGbG93UmVjb3JkZXJgICB8IHRyYXZlcnNhbCB0cmFuc2l0aW9ucyAgICAgICAgICAgICAgfCBOYXJyYXRpdmVGbG93UmVjb3JkZXIsIGV0Yy4gfFxuICogfCBgRW1pdFJlY29yZGVyYCAgfCBjb25zdW1lciBjYWxscyBgc2NvcGUuJGVtaXQoLi4uKWAgIHwgKG5vbmUgc2hpcHMgdG9kYXk7IFBoYXNlIDMuWCBhZGRzIE1lbW9yeUVtaXRSZWNvcmRlcikgfFxuICpcbiAqIGBDb21iaW5lZFJlY29yZGVyYCAoZnJvbSBgLi9Db21iaW5lZFJlY29yZGVyLnRzYCkgaW50ZXJzZWN0cyBhbGwgdGhyZWVcbiAqIHZpYSBgUGFydGlhbDwuLi4+YC4gQSBjb25zdW1lciBjYW4gd3JpdGUgT05FIG9iamVjdCBpbXBsZW1lbnRpbmcgYW55XG4gKiBjb21iaW5hdGlvbjsgYGV4ZWN1dG9yLmF0dGFjaENvbWJpbmVkUmVjb3JkZXIocilgIGR1Y2stdHlwZXMgYW5kIHJvdXRlc1xuICogdG8gdGhlIHJpZ2h0IGNoYW5uZWwocykuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHRva2VuTWV0ZXI6IEVtaXRSZWNvcmRlciA9IHtcbiAqICAgaWQ6ICd0b2tlbi1tZXRlcicsXG4gKiAgIG9uRW1pdChldmVudCkge1xuICogICAgIGlmIChldmVudC5uYW1lID09PSAnYWdlbnRmb290cHJpbnQubGxtLnRva2VucycpIHtcbiAqICAgICAgIHRoaXMudG90YWwgKz0gKGV2ZW50LnBheWxvYWQgYXMgeyBpbnB1dDogbnVtYmVyOyBvdXRwdXQ6IG51bWJlciB9KS5pbnB1dDtcbiAqICAgICB9XG4gKiAgIH0sXG4gKiAgIHRvdGFsOiAwLFxuICogfSBhcyBhbnk7XG4gKlxuICogZXhlY3V0b3IuYXR0YWNoRW1pdFJlY29yZGVyKHRva2VuTWV0ZXIpO1xuICogYGBgXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBSZWNvcmRlck9wZXJhdGlvbiB9IGZyb20gJy4vUmVjb3JkZXJPcGVyYXRpb24uanMnO1xuXG4vKipcbiAqIEV2ZW50IGRlbGl2ZXJlZCB0byBgRW1pdFJlY29yZGVyLm9uRW1pdGAuXG4gKlxuICogTmFtZSArIHBheWxvYWQgYXJlIGNvbnN1bWVyLXN1cHBsaWVkIHZpYSBgc2NvcGUuJGVtaXQobmFtZSwgcGF5bG9hZClgLlxuICogRXZlcnl0aGluZyBlbHNlIGlzIGxpYnJhcnktZW5yaWNoZWQgYXQgZGlzcGF0Y2ggdGltZSBmcm9tIHRoZSBjdXJyZW50XG4gKiBzdGFnZSdzIGV4ZWN1dGlvbiBjb250ZXh0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVtaXRFdmVudCB7XG4gIC8qKlxuICAgKiBDb25zdW1lci1zdXBwbGllZCBldmVudCBuYW1lLiBDb252ZW50aW9uOiBoaWVyYXJjaGljYWwgZG90dGVkIG5hbWVzcGFjZVxuICAgKiAoZS5nLiBgJ2FnZW50Zm9vdHByaW50LmxsbS50b2tlbnMnYCwgYCdteWFwcC5iaWxsaW5nLnNwZW5kJ2ApLiBLZWVwc1xuICAgKiB2b2NhYnVsYXJpZXMgY29sbGlzaW9uLWZyZWUgYWNyb3NzIGxpYnJhcmllcy9hcHBzIHdpdGhvdXQgcmVxdWlyaW5nIGFcbiAgICogY2VudHJhbCByZWdpc3RyeS5cbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogQ29uc3VtZXItc3VwcGxpZWQgcGF5bG9hZC4gU2hhcGUgaXMgdXAgdG8gdGhlIGNvbnN1bWVyIGFuZCB0aGVpclxuICAgKiBjb252ZW50aW9uOyBsaWJyYXJ5IHRyZWF0cyBpdCBhcyBvcGFxdWUgYW5kIHBhc3NlcyB0aHJvdWdoIHVuY2hhbmdlZFxuICAgKiAobW9kdWxvIHJlZGFjdGlvbiDigJQgc2VlIGBSZWRhY3Rpb25Qb2xpY3kuZW1pdFBhdHRlcm5zYCkuXG4gICAqXG4gICAqIFdoZW4gcmVkYWN0ZWQsIHJlcGxhY2VkIHdpdGggdGhlIHN0cmluZyBgJ1tSRURBQ1RFRF0nYC5cbiAgICovXG4gIHJlYWRvbmx5IHBheWxvYWQ6IHVua25vd247XG5cbiAgLyoqIE5hbWUgb2YgdGhlIHN0YWdlIHRoYXQgZW1pdHRlZCB0aGlzIGV2ZW50LiAqL1xuICByZWFkb25seSBzdGFnZU5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVW5pcXVlIHBlci1leGVjdXRpb24tc3RlcCBpZGVudGlmaWVyIOKAlCB0aGUgc2FtZSB2YWx1ZSByZWNvcmRlciBldmVudHNcbiAgICogYW5kIGNvbW1pdC1sb2cgZW50cmllcyBjYXJyeS4gU2VlIGBydW50aW1lU3RhZ2VJZC50c2AgZm9yIGZvcm1hdC5cbiAgICovXG4gIHJlYWRvbmx5IHJ1bnRpbWVTdGFnZUlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFN1YmZsb3cgcGF0aCBmcm9tIHRoZSBvdXRlcm1vc3QgcGFyZW50IGRvd24gdG8gdGhlIHN1YmZsb3cgdGhhdCBlbWl0dGVkXG4gICAqIHRoaXMgZXZlbnQuIEVtcHR5IGFycmF5IHdoZW4gdGhlIGVtaXQgY2FtZSBmcm9tIHRoZSByb290IGZsb3djaGFydC5cbiAgICogTWF0Y2hlcyB0aGUgY29udmVudGlvbiB1c2VkIGJ5IGBGbG93UGF1c2VFdmVudC5zdWJmbG93UGF0aGAsXG4gICAqIGBGbG93Y2hhcnRDaGVja3BvaW50LnN1YmZsb3dQYXRoYCwgZXRjLlxuICAgKi9cbiAgcmVhZG9ubHkgc3ViZmxvd1BhdGg6IHJlYWRvbmx5IHN0cmluZ1tdO1xuXG4gIC8qKiBQaXBlbGluZS9ydW4gaWRlbnRpZmllciAobWF0Y2hlcyBgUmVjb3JkZXJDb250ZXh0LnBpcGVsaW5lSWRgKS4gKi9cbiAgcmVhZG9ubHkgcGlwZWxpbmVJZDogc3RyaW5nO1xuXG4gIC8qKiBFbWlzc2lvbiB0aW1lc3RhbXAgaW4gbWlsbGlzZWNvbmRzIHNpbmNlIGVwb2NoIChgRGF0ZS5ub3coKWApLiAqL1xuICByZWFkb25seSB0aW1lc3RhbXA6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBQbHVnZ2FibGUgb2JzZXJ2ZXIgZm9yIGNvbnN1bWVyLWVtaXR0ZWQgc3RydWN0dXJlZCBldmVudHMuXG4gKlxuICogQWxsIG1ldGhvZHMgYXJlIG9wdGlvbmFsOyBpbXBsZW1lbnQgb25seSB3aGF0IHlvdSBjYXJlIGFib3V0LiBSZWNvcmRlcnNcbiAqIGFyZSBpbnZva2VkIHN5bmNocm9ub3VzbHkgaW4gYXR0YWNobWVudCBvcmRlci4gSWYgYSByZWNvcmRlciB0aHJvd3MsIHRoZVxuICogZXJyb3IgaXMgY2F1Z2h0IGFuZCBpc29sYXRlZCDigJQgb3RoZXIgcmVjb3JkZXJzIGNvbnRpbnVlIHRvIHJlY2VpdmUgdGhlXG4gKiBldmVudCBhbmQgdGhlIGVtaXR0aW5nIHN0YWdlIGlzIHVuYWZmZWN0ZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW1pdFJlY29yZGVyIHtcbiAgLyoqXG4gICAqIFN0YWJsZSBpZGVudGlmaWVyIGZvciBpZGVtcG90ZW50IGF0dGFjaC9kZXRhY2guIFJlLWF0dGFjaGluZyB3aXRoIHRoZVxuICAgKiBzYW1lIGlkIHJlcGxhY2VzIHRoZSBwcmV2aW91cyByZWdpc3RyYXRpb24gb24gdGhlIGV4ZWN1dG9yLlxuICAgKi9cbiAgcmVhZG9ubHkgaWQ6IHN0cmluZztcblxuICAvKiogQ2FsbGVkIGZvciBldmVyeSBgc2NvcGUuJGVtaXQobmFtZSwgcGF5bG9hZClgIGNhbGwgaW4gYW55IHN0YWdlLiAqL1xuICBvbkVtaXQ/KGV2ZW50OiBFbWl0RXZlbnQpOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbDogcmVzZXQgcmVjb3JkZXItaW50ZXJuYWwgc3RhdGUgYmV0d2VlbiBydW5zLiBDYWxsZWQgYnkgdGhlXG4gICAqIGV4ZWN1dG9yIGJlZm9yZSBlYWNoIGBydW4oKWAuXG4gICAqL1xuICBjbGVhcj8oKTogdm9pZDtcblxuICAvKipcbiAgICogT3B0aW9uYWw6IGV4cG9zZSBjb2xsZWN0ZWQgZGF0YSBmb3IgaW5jbHVzaW9uIGluXG4gICAqIGBleGVjdXRvci5nZXRTbmFwc2hvdCgpLnJlY29yZGVyc2AuXG4gICAqL1xuICB0b1NuYXBzaG90PygpOiB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICAgIHByZWZlcnJlZE9wZXJhdGlvbj86IFJlY29yZGVyT3BlcmF0aW9uO1xuICAgIGRhdGE6IHVua25vd247XG4gIH07XG59XG4iXX0=
|
|
@@ -207,4 +207,4 @@ function buildSubflowEntry(event, phase) {
|
|
|
207
207
|
isRoot: false,
|
|
208
208
|
};
|
|
209
209
|
}
|
|
210
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW5PdXRSZWNvcmRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvcmVjb3JkZXIvSW5PdXRSZWNvcmRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E2REc7OztBQUdILCtEQUF5RDtBQU16RCwwREFBMEQ7QUFDN0MsUUFBQSxlQUFlLEdBQUcsVUFBVSxDQUFDO0FBRTFDLG9FQUFvRTtBQUN2RCxRQUFBLHFCQUFxQixHQUFHLFlBQVksQ0FBQztBQW1EbEQsSUFBSSxRQUFRLEdBQUcsQ0FBQyxDQUFDO0FBRWpCOztHQUVHO0FBQ0gsU0FBZ0IsYUFBYSxDQUFDLFVBQWdDLEVBQUU7SUFDOUQsT0FBTyxJQUFJLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNwQyxDQUFDO0FBRkQsc0NBRUM7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsTUFBYSxhQUFjLFNBQVEsc0NBQTRCO0lBQ3BELEVBQUUsQ0FBUztJQUVwQixZQUFZLFVBQWdDLEVBQUU7UUFDNUMsS0FBSyxFQUFFLENBQUM7UUFDUixJQUFJLENBQUMsRUFBRSxHQUFHLE9BQU8sQ0FBQyxFQUFFLElBQUksU0FBUyxFQUFFLFFBQVEsRUFBRSxDQUFDO0lBQ2hELENBQUM7SUFFRCx5RUFBeUU7SUFFekUsVUFBVSxDQUFDLEtBQW1CO1FBQzVCLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRUQsUUFBUSxDQUFDLEtBQW1CO1FBQzFCLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRUQsY0FBYyxDQUFDLEtBQXVCO1FBQ3BDLE1BQU0sS0FBSyxH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TSxLQUFLLEdBQUcsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDckMsTUFBTSxjQUFjLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLElBQUksU0FBUyxDQUFDO0lBQ2xFLE1BQU0sT0FBTyxHQUFHLEtBQUssS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUM7SUFFMUUsT0FBTztRQUNMLGNBQWM7UUFDZCxTQUFTO1FBQ1QsY0FBYztRQUNkLFdBQVcsRUFBRSxLQUFLLENBQUMsSUFBSTtRQUN2QixXQUFXLEVBQUUsS0FBSyxDQUFDLFdBQVc7UUFDOUIsV0FBVztRQUNYLEtBQUs7UUFDTCxLQUFLO1FBQ0wsT0FBTztRQUNQLE1BQU0sRUFBRSxLQUFLO0tBQ2QsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEluT3V0UmVjb3JkZXIg4oCUIGNhcHR1cmVzIGV2ZXJ5IGNoYXJ0J3MgaW5wdXQvb3V0cHV0IGFzIGVudHJ5L2V4aXQgcGFpcnMuXG4gKlxuICogVGhlIGdhcCB0aGlzIGZpbGxzOlxuICogICBFdmVyeSBjaGFydCBpbiBmb290cHJpbnRqcyBoYXMgdHdvIG5hdHVyYWwgZGF0YSBib3VuZGFyaWVzOlxuICogICAgIC0gdGhlICoqaW5wdXQqKiB0aGF0IGZsb3dlZCBpbiAodG9wLWxldmVsOiBgcnVuKHtpbnB1dH0pYDtcbiAqICAgICAgIHN1YmZsb3c6IGBpbnB1dE1hcHBlcmAgcmVzdWx0KVxuICogICAgIC0gdGhlICoqb3V0cHV0KiogdGhhdCBmbG93ZWQgb3V0ICh0b3AtbGV2ZWw6IGNoYXJ0IHJldHVybiB2YWx1ZTtcbiAqICAgICAgIHN1YmZsb3c6IHNoYXJlZCBzdGF0ZSBhdCBleGl0IC8gYG91dHB1dE1hcHBlcmAgcmVzdWx0KVxuICpcbiAqICAgVG9nZXRoZXIgd2l0aCBgVG9wb2xvZ3lSZWNvcmRlcmAgKGNvbXBvc2l0aW9uIHNoYXBlKSB0aGlzIGlzIHRoZVxuICogICB1bml2ZXJzYWwgXCJzdGVwXCIgcHJpbWl0aXZlIHRoYXQgZG93bnN0cmVhbSBsYXllcnMgcHJvamVjdCDigJQgYSBMZW5zXG4gKiAgIFN0ZXBHcmFwaCwgYSBUcmFjZSB2aWV3LCBjdXN0b20gZGFzaGJvYXJkcy4gQWxsIGJpbmQgYnkgYHJ1bnRpbWVTdGFnZUlkYC5cbiAqXG4gKiAgIFRoZSByb290IGNoYXJ0IGlzIHRyZWF0ZWQgaWRlbnRpY2FsbHkgdG8gYW55IHN1YmZsb3c6IGFuIGBlbnRyeWBcbiAqICAgYm91bmRhcnkgb24gYG9uUnVuU3RhcnRgIGFuZCBhbiBgZXhpdGAgYm91bmRhcnkgb24gYG9uUnVuRW5kYCwgd2l0aFxuICogICBgc3ViZmxvd0lkOiAnX19yb290X18nYC4gU28gY29uc3VtZXJzIGJ1aWxkaW5nIFwiZXZlcnkgc3RlcCBoYXMgYW5cbiAqICAgaW4vb3V0IGFycm93XCIgdmlld3MgY2FuIGNsb3NlIHRoZSBjaGFpbiBhdCB0aGUgdG9wIGxldmVsIOKAlCBub1xuICogICBzcGVjaWFsLWNhc2UgcmVuZGVyaW5nIHJlcXVpcmVkLlxuICpcbiAqIFR3byBib3VuZGFyeSBwaGFzZXMgcGVyIGNoYXJ0IGV4ZWN1dGlvbjpcbiAqICAgMS4gYHBoYXNlOiAnZW50cnknYCDigJQgcGF5bG9hZCA9IHRoZSBpbnB1dCBjcm9zc2luZyB0aGUgYm91bmRhcnkgSU5cbiAqICAgMi4gYHBoYXNlOiAnZXhpdCdgICDigJQgcGF5bG9hZCA9IHRoZSBvdXRwdXQgY3Jvc3NpbmcgdGhlIGJvdW5kYXJ5IE9VVFxuICpcbiAqICAgTG9vcHMgcmUtZW50ZXJpbmcgdGhlIHNhbWUgc3ViZmxvdyBnZXQgZGlzdGluY3QgYHJ1bnRpbWVTdGFnZUlkYHNcbiAqICAgYXV0b21hdGljYWxseSAocGFyZW50IHN0YWdlJ3MgZXhlY3V0aW9uSW5kZXggaW5jcmVtZW50cyBwZXIgaXRlcmF0aW9uKS5cbiAqXG4gKiBQYXVzZSBzZW1hbnRpY3M6XG4gKiAgIFdoZW4gYSBzdGFnZSBwYXVzZXMgaW5zaWRlIGEgc3ViZmxvdywgdGhlIGVuZ2luZSByZS10aHJvd3MgdGhlIHBhdXNlXG4gKiAgIHNpZ25hbCB3aXRob3V0IGZpcmluZyBgb25TdWJmbG93RXhpdGAgKG9yIGBvblJ1bkVuZGApLiBUaGUgc3ViZmxvd1xuICogICBoYXMgYW4gYGVudHJ5YCB3aXRoIG5vIG1hdGNoaW5nIGBleGl0YCB1bnRpbCB0aGUgcnVuIHJlc3VtZXMgYW5kXG4gKiAgIGV4aXRzIGNsZWFubHkuIENvbnN1bWVycyBzaG91bGQgaGFuZGxlIGVudHJ5LXdpdGhvdXQtZXhpdCBncmFjZWZ1bGx5XG4gKiAgIChpdCBtZWFucyBcImluIHByb2dyZXNzXCIgb3IgXCJwYXVzZWRcIikuIFRoZSBgZ2V0Qm91bmRhcnkoKWAgaGVscGVyXG4gKiAgIHJldHVybnMgYHsgZW50cnksIGV4aXQ6IHVuZGVmaW5lZCB9YCBpbiB0aGF0IGNhc2UuXG4gKlxuICogUmVkYWN0aW9uOlxuICogICBQYXlsb2FkIHJlZGFjdGlvbiBpcyB0aGUgZW5naW5lJ3MgcmVzcG9uc2liaWxpdHkgKGBSZWRhY3Rpb25Qb2xpY3lgKS5cbiAqICAgQnkgdGhlIHRpbWUgcGF5bG9hZHMgcmVhY2ggdGhpcyByZWNvcmRlciB2aWEgYEZsb3dTdWJmbG93RXZlbnRgIG9yXG4gKiAgIGBGbG93UnVuRXZlbnRgLCByZWRhY3RhYmxlIHZhbHVlcyBhcmUgYWxyZWFkeSBzY3J1YmJlZC4gVGhlIHJlY29yZGVyXG4gKiAgIGRvZXMgbm90IChhbmQgc2hvdWxkIG5vdCkgcmUtcmVkYWN0LlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQgeyBpbk91dFJlY29yZGVyIH0gZnJvbSAnZm9vdHByaW50anMvdHJhY2UnO1xuICpcbiAqIGNvbnN0IGluT3V0ID0gaW5PdXRSZWNvcmRlcigpO1xuICogZXhlY3V0b3IuYXR0YWNoQ29tYmluZWRSZWNvcmRlcihpbk91dCk7XG4gKiBhd2FpdCBleGVjdXRvci5ydW4oeyBpbnB1dCB9KTtcbiAqXG4gKiBpbk91dC5nZXRTdGVwcygpOyAgICAgICAgICAgICAgICAgICAgLy8gZW50cnkgYm91bmRhcmllcyDigJQgdGltZWxpbmUgcHJvamVjdGlvblxuICogaW5PdXQuZ2V0Qm91bmRhcnkocnVudGltZVN0YWdlSWQpOyAgIC8vIHsgZW50cnksIGV4aXQgfSBwYWlyIGZvciBvbmUgZXhlY3V0aW9uXG4gKiBpbk91dC5nZXRCb3VuZGFyaWVzKCk7ICAgICAgICAgICAgICAgLy8gZmxhdCBsaXN0IChlbnRyeStleGl0IGludGVybGVhdmVkKVxuICogaW5PdXQuZ2V0Um9vdEJvdW5kYXJ5KCk7ICAgICAgICAgICAgIC8vIHsgZW50cnksIGV4aXQgfSBmb3IgdGhlIHRvcC1sZXZlbCBydW5cbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlIEZpbHRlcmluZyBieSBzdWJmbG93IHBhdGhcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IGFnZW50U3RlcHMgPSBpbk91dFxuICogICAuZ2V0U3RlcHMoKVxuICogICAuZmlsdGVyKChiKSA9PiBiLnN1YmZsb3dQYXRoWzFdID09PSAnc2YtYWdlbnQnKTsgIC8vIHBhdGhbMF0gaXMgdGhlIHJvb3RcbiAqIGBgYFxuICovXG5cbmltcG9ydCB0eXBlIHsgRmxvd1JlY29yZGVyLCBGbG93UnVuRXZlbnQsIEZsb3dTdWJmbG93RXZlbnQgfSBmcm9tICcuLi9lbmdpbmUvbmFycmF0aXZlL3R5cGVzLmpzJztcbmltcG9ydCB7IFNlcXVlbmNlUmVjb3JkZXIgfSBmcm9tICcuL1NlcXVlbmNlUmVjb3JkZXIuanMnO1xuXG4vLyDilIDilIAgVHlwZXMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmV4cG9ydCB0eXBlIEluT3V0UGhhc2UgPSAnZW50cnknIHwgJ2V4aXQnO1xuXG4vKiogU3ludGhldGljIGlkIGZvciB0aGUgdG9wLWxldmVsIHJ1bidzIGJvdW5kYXJ5IHBhaXIuICovXG5leHBvcnQgY29uc3QgUk9PVF9TVUJGTE9XX0lEID0gJ19fcm9vdF9fJztcblxuLyoqIFN5bnRoZXRpYyBydW50aW1lU3RhZ2VJZCBmb3IgdGhlIHRvcC1sZXZlbCBydW4gYm91bmRhcnkgcGFpci4gKi9cbmV4cG9ydCBjb25zdCBST09UX1JVTlRJTUVfU1RBR0VfSUQgPSAnX19yb290X18jMCc7XG5cbi8qKlxuICogT25lIGhhbGYgb2YgYSBjaGFydCBleGVjdXRpb24gYm91bmRhcnkuIEVudHJ5L2V4aXQgcGFpcnMgc2hhcmUgYHJ1bnRpbWVTdGFnZUlkYC5cbiAqXG4gKiBOYW1pbmcgZm9sbG93cyB0aGUgZW5naW5lOiBgc3ViZmxvd0lkYCBpcyB0aGUgcGF0aC1wcmVmaXhlZCBpZGVudGlmaWVyIHRoZVxuICogZW5naW5lIGVtaXRzIChlLmcuIGAnc2Ytb3V0ZXIvc2YtaW5uZXInYCBmb3IgbmVzdGVkIHN1YmZsb3dzKS4gRm9yIHRoZVxuICogdG9wLWxldmVsIHJ1biwgaXQncyB0aGUgc3ludGhldGljIGAnX19yb290X18nYC4gYHN1YmZsb3dQYXRoYCBpcyB0aGVcbiAqIGRlY29tcG9zaXRpb24gaW50byBzZWdtZW50cyDigJQgcHJvdmlkZWQgYXMgYSBjb252ZW5pZW5jZSBiZWNhdXNlIGNvbnN1bWVyc1xuICogb2Z0ZW4gcXVlcnkgLyBncm91cCBieSB0aGUgcGF0aCB0cmVlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEluT3V0RW50cnkge1xuICAvKiogcnVudGltZVN0YWdlSWQg4oCUIHNhbWUgdmFsdWUgZm9yIHRoZSBlbnRyeS9leGl0IHBhaXIgb2Ygb25lIGV4ZWN1dGlvbi5cbiAgICogIFRvcC1sZXZlbCBydW4gdXNlcyB0aGUgc3ludGhldGljIGBST09UX1JVTlRJTUVfU1RBR0VfSURgLiAqL1xuICByZWFkb25seSBydW50aW1lU3RhZ2VJZDogc3RyaW5nO1xuICAvKiogUGF0aC1wcmVmaXhlZCBzdWJmbG93IGlkZW50aWZpZXIgKG1hdGNoZXMgdGhlIGVuZ2luZSdzIGBGbG93U3ViZmxvd0V2ZW50LnN1YmZsb3dJZGApLlxuICAgKiAgVG9wLWxldmVsIOKGkiBgJ19fcm9vdF9fJ2AuIFN1YmZsb3cg4oaSIGAnc2Ytb3V0ZXInYCBvciBgJ3NmLW91dGVyL3NmLWlubmVyJ2AuICovXG4gIHJlYWRvbmx5IHN1YmZsb3dJZDogc3RyaW5nO1xuICAvKiogTGFzdCBzZWdtZW50IG9mIGBzdWJmbG93SWRgIOKAlCBjb252ZW5pZW5jZSBmb3IgY29uc3VtZXJzIHRoYXQgZ3JvdXAgYnkgbGVhZiBuYW1lLlxuICAgKiAgVG9wLWxldmVsIOKGkiBgJ19fcm9vdF9fJ2AuICovXG4gIHJlYWRvbmx5IGxvY2FsU3ViZmxvd0lkOiBzdHJpbmc7XG4gIC8qKiBIdW1hbi1yZWFkYWJsZSBkaXNwbGF5IG5hbWUgKGZyb20gdGhlIGJ1aWxkZXI7IGAnUnVuJ2AgZm9yIHRoZSB0b3AtbGV2ZWwgcnVuKS4gKi9cbiAgcmVhZG9ubHkgc3ViZmxvd05hbWU6IHN0cmluZztcbiAgLyoqIEJ1aWxkLXRpbWUgZGVzY3JpcHRpb24gZnJvbSB0aGUgc3ViZmxvdydzIHJvb3Qgc3RhZ2UuXG4gICAqICBDYXJyaWVzIHRheG9ub215IG1hcmtlcnMgKGUuZy4gYCdBZ2VudDogUmVBY3QgbG9vcCdgKS4gVW5kZWZpbmVkIGZvciByb290LiAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgLyoqIERlY29tcG9zaXRpb24gb2YgYHN1YmZsb3dJZGAgaW50byBzZWdtZW50cy4gVG9wLWxldmVsIOKGkiBgWydfX3Jvb3RfXyddYC5cbiAgICogIFN1YmZsb3dzIGxpdmUgVU5ERVIgdGhlIHJvb3Q6IGEgdG9wLWxldmVsIHN1YmZsb3cgaGFzIHBhdGggYFsnX19yb290X18nLCAnc2YteCddYC4gKi9cbiAgcmVhZG9ubHkgc3ViZmxvd1BhdGg6IHJlYWRvbmx5IHN0cmluZ1tdO1xuICAvKiogRGVwdGggaW4gdGhlIHN1YmZsb3cgdHJlZS4gUm9vdCDihpIgMC4gRmlyc3QtbGV2ZWwgc3ViZmxvdyDihpIgMS4gKi9cbiAgcmVhZG9ubHkgZGVwdGg6IG51bWJlcjtcbiAgLyoqIFdoaWNoIHNpZGUgb2YgdGhlIGJvdW5kYXJ5IHRoaXMgZW50cnkgcmVwcmVzZW50cy4gKi9cbiAgcmVhZG9ubHkgcGhhc2U6IEluT3V0UGhhc2U7XG4gIC8qKiBEYXRhIGNyb3NzaW5nIHRoZSBib3VuZGFyeS5cbiAgICogIC0gYHBoYXNlOiAnZW50cnknYCDihpIgYGlucHV0TWFwcGVyYCByZXN1bHQgKHN1YmZsb3cpIG9yIGBydW4oe2lucHV0fSlgIChyb290KVxuICAgKiAgLSBgcGhhc2U6ICdleGl0J2AgIOKGkiBzdWJmbG93IHNoYXJlZCBzdGF0ZSBhdCBleGl0IChzdWJmbG93KSBvciBjaGFydCByZXR1cm4gdmFsdWUgKHJvb3QpXG4gICAqXG4gICAqICBVbmRlZmluZWQgd2hlbiBubyBtYXBwZXIgLyBubyBpbnB1dCB3YXMgcHJvdmlkZWQuICovXG4gIHJlYWRvbmx5IHBheWxvYWQ/OiB1bmtub3duO1xuICAvKiogVHJ1ZSB3aGVuIHRoaXMgZW50cnkgY2FtZSBmcm9tIHRoZSB0b3AtbGV2ZWwgcnVuIChgb25SdW5TdGFydGAgLyBgb25SdW5FbmRgKVxuICAgKiAgcmF0aGVyIHRoYW4gZnJvbSBhIHN1YmZsb3cgKGBvblN1YmZsb3dFbnRyeWAgLyBgb25TdWJmbG93RXhpdGApLlxuICAgKiAgTGVucyB1c2VzIHRoaXMgdG8gcmVuZGVyIHRoZSByb290IHBhaXIgYXMgYHVzZXIg4oaSIHJ1biDihpIgdXNlcmAgaW5zdGVhZCBvZlxuICAgKiAgdGhlIHJlZ3VsYXIgc3ViZmxvdyBzaGFwZS4gKi9cbiAgcmVhZG9ubHkgaXNSb290OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEluT3V0UmVjb3JkZXJPcHRpb25zIHtcbiAgLyoqIFJlY29yZGVyIGlkLiBEZWZhdWx0cyB0byBgaW5vdXQtTmAgKGF1dG8taW5jcmVtZW50ZWQpLiAqL1xuICBpZD86IHN0cmluZztcbn1cblxubGV0IF9jb3VudGVyID0gMDtcblxuLyoqXG4gKiBGYWN0b3J5IOKAlCBtYXRjaGVzIHRoZSBgdG9wb2xvZ3lSZWNvcmRlcigpYCAvIGBuYXJyYXRpdmUoKWAgc3R5bGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbk91dFJlY29yZGVyKG9wdGlvbnM6IEluT3V0UmVjb3JkZXJPcHRpb25zID0ge30pOiBJbk91dFJlY29yZGVyIHtcbiAgcmV0dXJuIG5ldyBJbk91dFJlY29yZGVyKG9wdGlvbnMpO1xufVxuXG4vKipcbiAqIFN0YXRlZnVsIGFjY3VtdWxhdG9yIHRoYXQgd2F0Y2hlcyBgRmxvd1JlY29yZGVyYCBjaGFydC1ib3VuZGFyeSBldmVudHNcbiAqIChydW4gc3RhcnQvZW5kICsgc3ViZmxvdyBlbnRyeS9leGl0KSBhbmQgZW1pdHMgYEluT3V0RW50cnlgIHJlY29yZHMgdG9cbiAqIGl0cyB1bmRlcmx5aW5nIGBTZXF1ZW5jZVJlY29yZGVyYCBzdG9yYWdlLlxuICpcbiAqIEF0dGFjaCB2aWEgYGV4ZWN1dG9yLmF0dGFjaENvbWJpbmVkUmVjb3JkZXIocmVjb3JkZXIpYCDigJQgZm9vdHByaW50anNcbiAqIGRldGVjdHMgdGhlIGBGbG93UmVjb3JkZXJgIG1ldGhvZCBzaGFwZSBhbmQgcm91dGVzIGV2ZW50cy5cbiAqL1xuZXhwb3J0IGNsYXNzIEluT3V0UmVjb3JkZXIgZXh0ZW5kcyBTZXF1ZW5jZVJlY29yZGVyPEluT3V0RW50cnk+IGltcGxlbWVudHMgRmxvd1JlY29yZGVyIHtcbiAgcmVhZG9ubHkgaWQ6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBJbk91dFJlY29yZGVyT3B0aW9ucyA9IHt9KSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmlkID0gb3B0aW9ucy5pZCA/PyBgaW5vdXQtJHsrK19jb3VudGVyfWA7XG4gIH1cblxuICAvLyDilIDilIAgRmxvd1JlY29yZGVyIGhvb2tzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIG9uUnVuU3RhcnQoZXZlbnQ6IEZsb3dSdW5FdmVudCk6IHZvaWQge1xuICAgIHRoaXMuZW1pdChidWlsZFJvb3RFbnRyeSgnZW50cnknLCBldmVudC5wYXlsb2FkKSk7XG4gIH1cblxuICBvblJ1bkVuZChldmVudDogRmxvd1J1bkV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5lbWl0KGJ1aWxkUm9vdEVudHJ5KCdleGl0JywgZXZlbnQucGF5bG9hZCkpO1xuICB9XG5cbiAgb25TdWJmbG93RW50cnkoZXZlbnQ6IEZsb3dTdWJmbG93RXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBlbnRyeSA9IGJ1aWxkU3ViZmxvd0VudHJ5KGV2ZW50LCAnZW50cnknKTtcbiAgICBpZiAoZW50cnkpIHRoaXMuZW1pdChlbnRyeSk7XG4gIH1cblxuICBvblN1YmZsb3dFeGl0KGV2ZW50OiBGbG93U3ViZmxvd0V2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgZW50cnkgPSBidWlsZFN1YmZsb3dFbnRyeShldmVudCwgJ2V4aXQnKTtcbiAgICBpZiAoZW50cnkpIHRoaXMuZW1pdChlbnRyeSk7XG4gIH1cblxuICAvLyDilIDilIAgUXVlcnkgQVBJIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIC8qKiBBbGwgZW50cmllcyBpbiBleGVjdXRpb24gb3JkZXIgKGVudHJ5K2V4aXQgaW50ZXJsZWF2ZWQpLlxuICAgKiAgQWxpYXMgZm9yIGBnZXRFbnRyaWVzKClgIHdpdGggZG9tYWluLWNsZWFyZXIgbmFtaW5nLiAqL1xuICBnZXRCb3VuZGFyaWVzKCk6IEluT3V0RW50cnlbXSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0RW50cmllcygpO1xuICB9XG5cbiAgLyoqIEVudHJ5L2V4aXQgcGFpciBmb3Igb25lIGNoYXJ0IGV4ZWN1dGlvbi5cbiAgICogIFJldHVybnMgYHsgZW50cnksIGV4aXQgfWAg4oCUIGBleGl0YCBpcyBgdW5kZWZpbmVkYCBmb3IgaW4tcHJvZ3Jlc3MgLyBwYXVzZWRcbiAgICogIGNoYXJ0cyBvciBpZiBgcnVudGltZVN0YWdlSWRgIGlzIHVua25vd24uICovXG4gIGdldEJvdW5kYXJ5KHJ1bnRpbWVTdGFnZUlkOiBzdHJpbmcpOiB7IGVudHJ5PzogSW5PdXRFbnRyeTsgZXhpdD86IEluT3V0RW50cnkgfSB7XG4gICAgY29uc3QgZW50cmllcyA9IHRoaXMuZ2V0RW50cmllc0ZvclN0ZXAocnVudGltZVN0YWdlSWQpO1xuICAgIHJldHVybiB7XG4gICAgICBlbnRyeTogZW50cmllcy5maW5kKChlKSA9PiBlLnBoYXNlID09PSAnZW50cnknKSxcbiAgICAgIGV4aXQ6IGVudHJpZXMuZmluZCgoZSkgPT4gZS5waGFzZSA9PT0gJ2V4aXQnKSxcbiAgICB9O1xuICB9XG5cbiAgLyoqIEp1c3QgdGhlIGBlbnRyeWAtcGhhc2UgYm91bmRhcmllcyDigJQgdGhlIFwic3RlcCBsaXN0XCIgcHJvamVjdGlvbiBpblxuICAgKiAgZXhlY3V0aW9uIG9yZGVyLiBUaGlzIGlzIHRoZSBuYXR1cmFsIHRpbWVsaW5lIG9mIGNoYXJ0IGV4ZWN1dGlvbnNcbiAgICogIGZvciBzbGlkZXIgLyBzY3J1YmJpbmcgVUlzLiBUaGUgdG9wLWxldmVsIHJ1bidzIGVudHJ5IGlzIHRoZSBmaXJzdFxuICAgKiAgc3RlcCAoZGVwdGggMCkuICovXG4gIGdldFN0ZXBzKCk6IEluT3V0RW50cnlbXSB7XG4gICAgY29uc3Qgc3RlcHM6IEluT3V0RW50cnlbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgYiBvZiB0aGlzLmdldEVudHJpZXMoKSkge1xuICAgICAgaWYgKGIucGhhc2UgPT09ICdlbnRyeScpIHN0ZXBzLnB1c2goYik7XG4gICAgfVxuICAgIHJldHVybiBzdGVwcztcbiAgfVxuXG4gIC8qKiBUaGUgcm9vdCBydW4ncyBlbnRyeS9leGl0IHBhaXIsIGlmIHRoZSBydW4gaGFzIHN0YXJ0ZWQuXG4gICAqICBDb252ZW5pZW5jZSBmb3IgY29uc3VtZXJzIHRoYXQgd2FudCB0byBicmFja2V0IHRoZSB0aW1lbGluZSBieSB0aGVcbiAgICogIG91dGVybW9zdCBpbi9vdXQuICovXG4gIGdldFJvb3RCb3VuZGFyeSgpOiB7IGVudHJ5PzogSW5PdXRFbnRyeTsgZXhpdD86IEluT3V0RW50cnkgfSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Qm91bmRhcnkoUk9PVF9SVU5USU1FX1NUQUdFX0lEKTtcbiAgfVxuXG4gIC8qKiBTbmFwc2hvdCBidW5kbGUgZm9yIGluY2x1c2lvbiBpbiBgZXhlY3V0b3IuZ2V0U25hcHNob3QoKWAuICovXG4gIHRvU25hcHNob3QoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6ICdJbk91dCcsXG4gICAgICBkZXNjcmlwdGlvbjogJ0NoYXJ0IGluL291dCBzdHJlYW0g4oCUIGVudHJ5L2V4aXQgcGFpcnMgYXQgZXZlcnkgY2hhcnQgYm91bmRhcnkgKHJvb3QgKyBzdWJmbG93cyknLFxuICAgICAgcHJlZmVycmVkT3BlcmF0aW9uOiAndHJhbnNsYXRlJyBhcyBjb25zdCxcbiAgICAgIGRhdGE6IHRoaXMuZ2V0Qm91bmRhcmllcygpLFxuICAgIH07XG4gIH1cbn1cblxuLy8g4pSA4pSAIEludGVybmFsIGhlbHBlcnMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKlxuICogQnVpbGQgdGhlIHN5bnRoZXRpYyByb290IGVudHJ5L2V4aXQuIERlcHRoIGlzIGAwYCBhbmQgdGhlIHBhdGggaXNcbiAqIGBbUk9PVF9TVUJGTE9XX0lEXWAgc28gY29uc3VtZXJzIGdyb3VwaW5nIGJ5IHBhdGggc2VlIHRoZSByb290IGFzIGFcbiAqIHJlZ3VsYXIgdG9wLWxldmVsIGNvbnRhaW5lci5cbiAqL1xuZnVuY3Rpb24gYnVpbGRSb290RW50cnkocGhhc2U6IEluT3V0UGhhc2UsIHBheWxvYWQ6IHVua25vd24pOiBJbk91dEVudHJ5IHtcbiAgcmV0dXJuIHtcbiAgICBydW50aW1lU3RhZ2VJZDogUk9PVF9SVU5USU1FX1NUQUdFX0lELFxuICAgIHN1YmZsb3dJZDogUk9PVF9TVUJGTE9XX0lELFxuICAgIGxvY2FsU3ViZmxvd0lkOiBST09UX1NVQkZMT1dfSUQsXG4gICAgc3ViZmxvd05hbWU6ICdSdW4nLFxuICAgIHN1YmZsb3dQYXRoOiBbUk9PVF9TVUJGTE9XX0lEXSxcbiAgICBkZXB0aDogMCxcbiAgICBwaGFzZSxcbiAgICBwYXlsb2FkLFxuICAgIGlzUm9vdDogdHJ1ZSxcbiAgfTtcbn1cblxuLyoqXG4gKiBCdWlsZCBhIHN1YmZsb3cgYEluT3V0RW50cnlgIGZyb20gYSBgRmxvd1N1YmZsb3dFdmVudGAuXG4gKlxuICogUmV0dXJucyBgdW5kZWZpbmVkYCB3aGVuIHRoZSBldmVudCBsYWNrcyBhIGBzdWJmbG93SWRgIChhbm9ueW1vdXMgL1xuICogbWFsZm9ybWVkIHN1YmZsb3cgZXZlbnRzIOKAlCBzYW1lIGRlZmVuc2l2ZSBwb2xpY3kgYXMgYFRvcG9sb2d5UmVjb3JkZXJgKS5cbiAqXG4gKiBQYXRoIGRlcml2YXRpb246IHRoZSBlbmdpbmUgZW1pdHMgYHN1YmZsb3dJZGAgYWxyZWFkeSBwcmVmaXhlZCB3aXRoIHRoZVxuICogZnVsbCBwYXRoIG9mIHBhcmVudCBzdWJmbG93cyAoZS5nLiBgJ3NmLW91dGVyL3NmLWlubmVyJ2ApLiBXZSBkZWNvbXBvc2VcbiAqIHRoYXQgaW50byBzZWdtZW50cyB0byBwb3B1bGF0ZSBgc3ViZmxvd1BhdGhgIGFuZCBjb21wdXRlIGBkZXB0aGAuXG4gKlxuICogU3ViZmxvd3MgbmVzdCBVTkRFUiB0aGUgc3ludGhldGljIHJvb3QgaW4gYHN1YmZsb3dQYXRoYCBzbyB0aGUgdHJlZSBpc1xuICogY29tcGxldGU6IGEgdG9wLWxldmVsIHN1YmZsb3cgaGFzIHBhdGggYFsnX19yb290X18nLCAnc2YteCddYCBhbmQgZGVwdGggMS5cbiAqL1xuZnVuY3Rpb24gYnVpbGRTdWJmbG93RW50cnkoZXZlbnQ6IEZsb3dTdWJmbG93RXZlbnQsIHBoYXNlOiBJbk91dFBoYXNlKTogSW5PdXRFbnRyeSB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHN1YmZsb3dJZCA9IGV2ZW50LnN1YmZsb3dJZDtcbiAgaWYgKCFzdWJmbG93SWQpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgY29uc3QgcnVudGltZVN0YWdlSWQgPSBldmVudC50cmF2ZXJzYWxDb250ZXh0Py5ydW50aW1lU3RhZ2VJZCA/PyAnJztcbiAgY29uc3Qgc2VnbWVudHMgPSBzdWJmbG93SWQuc3BsaXQoJy8nKS5maWx0ZXIoKHMpID0+IHMubGVuZ3RoID4gMCk7XG4gIGNvbnN0IHN1YmZsb3dQYXRoOiByZWFkb25seSBzdHJpbmdbXSA9IFtST09UX1NVQkZMT1dfSUQsIC4uLnNlZ21lbnRzXTtcbiAgY29uc3QgZGVwdGggPSBzdWJmbG93UGF0aC5sZW5ndGggLSAxO1xuICBjb25zdCBsb2NhbFN1YmZsb3dJZCA9IHNlZ21lbnRzW3NlZ21lbnRzLmxlbmd0aCAtIDFdID8/IHN1YmZsb3dJZDtcbiAgY29uc3QgcGF5bG9hZCA9IHBoYXNlID09PSAnZW50cnknID8gZXZlbnQubWFwcGVkSW5wdXQgOiBldmVudC5vdXRwdXRTdGF0ZTtcblxuICByZXR1cm4ge1xuICAgIHJ1bnRpbWVTdGFnZUlkLFxuICAgIHN1YmZsb3dJZCxcbiAgICBsb2NhbFN1YmZsb3dJZCxcbiAgICBzdWJmbG93TmFtZTogZXZlbnQubmFtZSxcbiAgICBkZXNjcmlwdGlvbjogZXZlbnQuZGVzY3JpcHRpb24sXG4gICAgc3ViZmxvd1BhdGgsXG4gICAgZGVwdGgsXG4gICAgcGhhc2UsXG4gICAgcGF5bG9hZCxcbiAgICBpc1Jvb3Q6IGZhbHNlLFxuICB9O1xufVxuIl19
|
|
210
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW5PdXRSZWNvcmRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvcmVjb3JkZXIvSW5PdXRSZWNvcmRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E2REc7OztBQUdILCtEQUF5RDtBQU16RCwwREFBMEQ7QUFDN0MsUUFBQSxlQUFlLEdBQUcsVUFBVSxDQUFDO0FBRTFDLG9FQUFvRTtBQUN2RCxRQUFBLHFCQUFxQixHQUFHLFlBQVksQ0FBQztBQW1EbEQsSUFBSSxRQUFRLEdBQUcsQ0FBQyxDQUFDO0FBRWpCOztHQUVHO0FBQ0gsU0FBZ0IsYUFBYSxDQUFDLFVBQWdDLEVBQUU7SUFDOUQsT0FBTyxJQUFJLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNwQyxDQUFDO0FBRkQsc0NBRUM7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsTUFBYSxhQUFjLFNBQVEsc0NBQTRCO0lBQ3BELEVBQUUsQ0FBUztJQUVwQixZQUFZLFVBQWdDLEVBQUU7UUFDNUMsS0FBSyxFQUFFLENBQUM7UUFDUixJQUFJLENBQUMsRUFBRSxHQUFHLE9BQU8sQ0FBQyxFQUFFLElBQUksU0FBUyxFQUFFLFFBQVEsRUFBRSxDQUFDO0lBQ2hELENBQUM7SUFFRCx5RUFBeUU7SUFFekUsVUFBVSxDQUFDLEtBQW1CO1FBQzVCLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRUQsUUFBUSxDQUFDLEtBQW1CO1FBQzFCLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRUQsY0FBYyxDQUFDLEtBQXVCO1FBQ3BDLE1BQU0sS0FBSyxH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TSxLQUFLLEdBQUcsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDckMsTUFBTSxjQUFjLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLElBQUksU0FBUyxDQUFDO0lBQ2xFLE1BQU0sT0FBTyxHQUFHLEtBQUssS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUM7SUFFMUUsT0FBTztRQUNMLGNBQWM7UUFDZCxTQUFTO1FBQ1QsY0FBYztRQUNkLFdBQVcsRUFBRSxLQUFLLENBQUMsSUFBSTtRQUN2QixXQUFXLEVBQUUsS0FBSyxDQUFDLFdBQVc7UUFDOUIsV0FBVztRQUNYLEtBQUs7UUFDTCxLQUFLO1FBQ0wsT0FBTztRQUNQLE1BQU0sRUFBRSxLQUFLO0tBQ2QsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEluT3V0UmVjb3JkZXIg4oCUIGNhcHR1cmVzIGV2ZXJ5IGNoYXJ0J3MgaW5wdXQvb3V0cHV0IGFzIGVudHJ5L2V4aXQgcGFpcnMuXG4gKlxuICogVGhlIGdhcCB0aGlzIGZpbGxzOlxuICogICBFdmVyeSBjaGFydCBpbiBmb290cHJpbnRqcyBoYXMgdHdvIG5hdHVyYWwgZGF0YSBib3VuZGFyaWVzOlxuICogICAgIC0gdGhlICoqaW5wdXQqKiB0aGF0IGZsb3dlZCBpbiAodG9wLWxldmVsOiBgcnVuKHtpbnB1dH0pYDtcbiAqICAgICAgIHN1YmZsb3c6IGBpbnB1dE1hcHBlcmAgcmVzdWx0KVxuICogICAgIC0gdGhlICoqb3V0cHV0KiogdGhhdCBmbG93ZWQgb3V0ICh0b3AtbGV2ZWw6IGNoYXJ0IHJldHVybiB2YWx1ZTtcbiAqICAgICAgIHN1YmZsb3c6IHNoYXJlZCBzdGF0ZSBhdCBleGl0IC8gYG91dHB1dE1hcHBlcmAgcmVzdWx0KVxuICpcbiAqICAgVG9nZXRoZXIgd2l0aCBgVG9wb2xvZ3lSZWNvcmRlcmAgKGNvbXBvc2l0aW9uIHNoYXBlKSB0aGlzIGlzIHRoZVxuICogICB1bml2ZXJzYWwgXCJzdGVwXCIgcHJpbWl0aXZlIHRoYXQgZG93bnN0cmVhbSBsYXllcnMgcHJvamVjdCDigJQgYSBMZW5zXG4gKiAgIFN0ZXBHcmFwaCwgYSBUcmFjZSB2aWV3LCBjdXN0b20gZGFzaGJvYXJkcy4gQWxsIGJpbmQgYnkgYHJ1bnRpbWVTdGFnZUlkYC5cbiAqXG4gKiAgIFRoZSByb290IGNoYXJ0IGlzIHRyZWF0ZWQgaWRlbnRpY2FsbHkgdG8gYW55IHN1YmZsb3c6IGFuIGBlbnRyeWBcbiAqICAgYm91bmRhcnkgb24gYG9uUnVuU3RhcnRgIGFuZCBhbiBgZXhpdGAgYm91bmRhcnkgb24gYG9uUnVuRW5kYCwgd2l0aFxuICogICBgc3ViZmxvd0lkOiAnX19yb290X18nYC4gU28gY29uc3VtZXJzIGJ1aWxkaW5nIFwiZXZlcnkgc3RlcCBoYXMgYW5cbiAqICAgaW4vb3V0IGFycm93XCIgdmlld3MgY2FuIGNsb3NlIHRoZSBjaGFpbiBhdCB0aGUgdG9wIGxldmVsIOKAlCBub1xuICogICBzcGVjaWFsLWNhc2UgcmVuZGVyaW5nIHJlcXVpcmVkLlxuICpcbiAqIFR3byBib3VuZGFyeSBwaGFzZXMgcGVyIGNoYXJ0IGV4ZWN1dGlvbjpcbiAqICAgMS4gYHBoYXNlOiAnZW50cnknYCDigJQgcGF5bG9hZCA9IHRoZSBpbnB1dCBjcm9zc2luZyB0aGUgYm91bmRhcnkgSU5cbiAqICAgMi4gYHBoYXNlOiAnZXhpdCdgICDigJQgcGF5bG9hZCA9IHRoZSBvdXRwdXQgY3Jvc3NpbmcgdGhlIGJvdW5kYXJ5IE9VVFxuICpcbiAqICAgTG9vcHMgcmUtZW50ZXJpbmcgdGhlIHNhbWUgc3ViZmxvdyBnZXQgZGlzdGluY3QgYHJ1bnRpbWVTdGFnZUlkYHNcbiAqICAgYXV0b21hdGljYWxseSAocGFyZW50IHN0YWdlJ3MgZXhlY3V0aW9uSW5kZXggaW5jcmVtZW50cyBwZXIgaXRlcmF0aW9uKS5cbiAqXG4gKiBQYXVzZSBzZW1hbnRpY3M6XG4gKiAgIFdoZW4gYSBzdGFnZSBwYXVzZXMgaW5zaWRlIGEgc3ViZmxvdywgdGhlIGVuZ2luZSByZS10aHJvd3MgdGhlIHBhdXNlXG4gKiAgIHNpZ25hbCB3aXRob3V0IGZpcmluZyBgb25TdWJmbG93RXhpdGAgKG9yIGBvblJ1bkVuZGApLiBUaGUgc3ViZmxvd1xuICogICBoYXMgYW4gYGVudHJ5YCB3aXRoIG5vIG1hdGNoaW5nIGBleGl0YCB1bnRpbCB0aGUgcnVuIHJlc3VtZXMgYW5kXG4gKiAgIGV4aXRzIGNsZWFubHkuIENvbnN1bWVycyBzaG91bGQgaGFuZGxlIGVudHJ5LXdpdGhvdXQtZXhpdCBncmFjZWZ1bGx5XG4gKiAgIChpdCBtZWFucyBcImluIHByb2dyZXNzXCIgb3IgXCJwYXVzZWRcIikuIFRoZSBgZ2V0Qm91bmRhcnkoKWAgaGVscGVyXG4gKiAgIHJldHVybnMgYHsgZW50cnksIGV4aXQ6IHVuZGVmaW5lZCB9YCBpbiB0aGF0IGNhc2UuXG4gKlxuICogUmVkYWN0aW9uOlxuICogICBQYXlsb2FkIHJlZGFjdGlvbiBpcyB0aGUgZW5naW5lJ3MgcmVzcG9uc2liaWxpdHkgKGBSZWRhY3Rpb25Qb2xpY3lgKS5cbiAqICAgQnkgdGhlIHRpbWUgcGF5bG9hZHMgcmVhY2ggdGhpcyByZWNvcmRlciB2aWEgYEZsb3dTdWJmbG93RXZlbnRgIG9yXG4gKiAgIGBGbG93UnVuRXZlbnRgLCByZWRhY3RhYmxlIHZhbHVlcyBhcmUgYWxyZWFkeSBzY3J1YmJlZC4gVGhlIHJlY29yZGVyXG4gKiAgIGRvZXMgbm90IChhbmQgc2hvdWxkIG5vdCkgcmUtcmVkYWN0LlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQgeyBpbk91dFJlY29yZGVyIH0gZnJvbSAnZm9vdHByaW50anMvdHJhY2UnO1xuICpcbiAqIGNvbnN0IGluT3V0ID0gaW5PdXRSZWNvcmRlcigpO1xuICogZXhlY3V0b3IuYXR0YWNoQ29tYmluZWRSZWNvcmRlcihpbk91dCk7XG4gKiBhd2FpdCBleGVjdXRvci5ydW4oeyBpbnB1dCB9KTtcbiAqXG4gKiBpbk91dC5nZXRTdGVwcygpOyAgICAgICAgICAgICAgICAgICAgLy8gZW50cnkgYm91bmRhcmllcyDigJQgdGltZWxpbmUgcHJvamVjdGlvblxuICogaW5PdXQuZ2V0Qm91bmRhcnkocnVudGltZVN0YWdlSWQpOyAgIC8vIHsgZW50cnksIGV4aXQgfSBwYWlyIGZvciBvbmUgZXhlY3V0aW9uXG4gKiBpbk91dC5nZXRCb3VuZGFyaWVzKCk7ICAgICAgICAgICAgICAgLy8gZmxhdCBsaXN0IChlbnRyeStleGl0IGludGVybGVhdmVkKVxuICogaW5PdXQuZ2V0Um9vdEJvdW5kYXJ5KCk7ICAgICAgICAgICAgIC8vIHsgZW50cnksIGV4aXQgfSBmb3IgdGhlIHRvcC1sZXZlbCBydW5cbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlIEZpbHRlcmluZyBieSBzdWJmbG93IHBhdGhcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IGFnZW50U3RlcHMgPSBpbk91dFxuICogICAuZ2V0U3RlcHMoKVxuICogICAuZmlsdGVyKChiKSA9PiBiLnN1YmZsb3dQYXRoWzFdID09PSAnc2YtYWdlbnQnKTsgIC8vIHBhdGhbMF0gaXMgdGhlIHJvb3RcbiAqIGBgYFxuICovXG5cbmltcG9ydCB0eXBlIHsgRmxvd1JlY29yZGVyLCBGbG93UnVuRXZlbnQsIEZsb3dTdWJmbG93RXZlbnQgfSBmcm9tICcuLi9lbmdpbmUvbmFycmF0aXZlL3R5cGVzLmpzJztcbmltcG9ydCB7IFNlcXVlbmNlUmVjb3JkZXIgfSBmcm9tICcuL1NlcXVlbmNlUmVjb3JkZXIuanMnO1xuXG4vLyDilIDilIAgVHlwZXMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmV4cG9ydCB0eXBlIEluT3V0UGhhc2UgPSAnZW50cnknIHwgJ2V4aXQnO1xuXG4vKiogU3ludGhldGljIGlkIGZvciB0aGUgdG9wLWxldmVsIHJ1bidzIGJvdW5kYXJ5IHBhaXIuICovXG5leHBvcnQgY29uc3QgUk9PVF9TVUJGTE9XX0lEID0gJ19fcm9vdF9fJztcblxuLyoqIFN5bnRoZXRpYyBydW50aW1lU3RhZ2VJZCBmb3IgdGhlIHRvcC1sZXZlbCBydW4gYm91bmRhcnkgcGFpci4gKi9cbmV4cG9ydCBjb25zdCBST09UX1JVTlRJTUVfU1RBR0VfSUQgPSAnX19yb290X18jMCc7XG5cbi8qKlxuICogT25lIGhhbGYgb2YgYSBjaGFydCBleGVjdXRpb24gYm91bmRhcnkuIEVudHJ5L2V4aXQgcGFpcnMgc2hhcmUgYHJ1bnRpbWVTdGFnZUlkYC5cbiAqXG4gKiBOYW1pbmcgZm9sbG93cyB0aGUgZW5naW5lOiBgc3ViZmxvd0lkYCBpcyB0aGUgcGF0aC1wcmVmaXhlZCBpZGVudGlmaWVyIHRoZVxuICogZW5naW5lIGVtaXRzIChlLmcuIGAnc2Ytb3V0ZXIvc2YtaW5uZXInYCBmb3IgbmVzdGVkIHN1YmZsb3dzKS4gRm9yIHRoZVxuICogdG9wLWxldmVsIHJ1biwgaXQncyB0aGUgc3ludGhldGljIGAnX19yb290X18nYC4gYHN1YmZsb3dQYXRoYCBpcyB0aGVcbiAqIGRlY29tcG9zaXRpb24gaW50byBzZWdtZW50cyDigJQgcHJvdmlkZWQgYXMgYSBjb252ZW5pZW5jZSBiZWNhdXNlIGNvbnN1bWVyc1xuICogb2Z0ZW4gcXVlcnkgLyBncm91cCBieSB0aGUgcGF0aCB0cmVlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEluT3V0RW50cnkge1xuICAvKiogcnVudGltZVN0YWdlSWQg4oCUIHNhbWUgdmFsdWUgZm9yIHRoZSBlbnRyeS9leGl0IHBhaXIgb2Ygb25lIGV4ZWN1dGlvbi5cbiAgICogIFRvcC1sZXZlbCBydW4gdXNlcyB0aGUgc3ludGhldGljIGBST09UX1JVTlRJTUVfU1RBR0VfSURgLiAqL1xuICByZWFkb25seSBydW50aW1lU3RhZ2VJZDogc3RyaW5nO1xuICAvKiogUGF0aC1wcmVmaXhlZCBzdWJmbG93IGlkZW50aWZpZXIgKG1hdGNoZXMgdGhlIGVuZ2luZSdzIGBGbG93U3ViZmxvd0V2ZW50LnN1YmZsb3dJZGApLlxuICAgKiAgVG9wLWxldmVsIOKGkiBgJ19fcm9vdF9fJ2AuIFN1YmZsb3cg4oaSIGAnc2Ytb3V0ZXInYCBvciBgJ3NmLW91dGVyL3NmLWlubmVyJ2AuICovXG4gIHJlYWRvbmx5IHN1YmZsb3dJZDogc3RyaW5nO1xuICAvKiogTGFzdCBzZWdtZW50IG9mIGBzdWJmbG93SWRgIOKAlCBjb252ZW5pZW5jZSBmb3IgY29uc3VtZXJzIHRoYXQgZ3JvdXAgYnkgbGVhZiBuYW1lLlxuICAgKiAgVG9wLWxldmVsIOKGkiBgJ19fcm9vdF9fJ2AuICovXG4gIHJlYWRvbmx5IGxvY2FsU3ViZmxvd0lkOiBzdHJpbmc7XG4gIC8qKiBIdW1hbi1yZWFkYWJsZSBkaXNwbGF5IG5hbWUgKGZyb20gdGhlIGJ1aWxkZXI7IGAnUnVuJ2AgZm9yIHRoZSB0b3AtbGV2ZWwgcnVuKS4gKi9cbiAgcmVhZG9ubHkgc3ViZmxvd05hbWU6IHN0cmluZztcbiAgLyoqIEJ1aWxkLXRpbWUgZGVzY3JpcHRpb24gZnJvbSB0aGUgc3ViZmxvdydzIHJvb3Qgc3RhZ2UuXG4gICAqICBDYXJyaWVzIHRheG9ub215IG1hcmtlcnMgKGUuZy4gYCdBZ2VudDogUmVBY3QgbG9vcCdgKS4gVW5kZWZpbmVkIGZvciByb290LiAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgLyoqIERlY29tcG9zaXRpb24gb2YgYHN1YmZsb3dJZGAgaW50byBzZWdtZW50cy4gVG9wLWxldmVsIOKGkiBgWydfX3Jvb3RfXyddYC5cbiAgICogIFN1YmZsb3dzIGxpdmUgVU5ERVIgdGhlIHJvb3Q6IGEgdG9wLWxldmVsIHN1YmZsb3cgaGFzIHBhdGggYFsnX19yb290X18nLCAnc2YteCddYC4gKi9cbiAgcmVhZG9ubHkgc3ViZmxvd1BhdGg6IHJlYWRvbmx5IHN0cmluZ1tdO1xuICAvKiogRGVwdGggaW4gdGhlIHN1YmZsb3cgdHJlZS4gUm9vdCDihpIgMC4gRmlyc3QtbGV2ZWwgc3ViZmxvdyDihpIgMS4gKi9cbiAgcmVhZG9ubHkgZGVwdGg6IG51bWJlcjtcbiAgLyoqIFdoaWNoIHNpZGUgb2YgdGhlIGJvdW5kYXJ5IHRoaXMgZW50cnkgcmVwcmVzZW50cy4gKi9cbiAgcmVhZG9ubHkgcGhhc2U6IEluT3V0UGhhc2U7XG4gIC8qKiBEYXRhIGNyb3NzaW5nIHRoZSBib3VuZGFyeS5cbiAgICogIC0gYHBoYXNlOiAnZW50cnknYCDihpIgYGlucHV0TWFwcGVyYCByZXN1bHQgKHN1YmZsb3cpIG9yIGBydW4oe2lucHV0fSlgIChyb290KVxuICAgKiAgLSBgcGhhc2U6ICdleGl0J2AgIOKGkiBzdWJmbG93IHNoYXJlZCBzdGF0ZSBhdCBleGl0IChzdWJmbG93KSBvciBjaGFydCByZXR1cm4gdmFsdWUgKHJvb3QpXG4gICAqXG4gICAqICBVbmRlZmluZWQgd2hlbiBubyBtYXBwZXIgLyBubyBpbnB1dCB3YXMgcHJvdmlkZWQuICovXG4gIHJlYWRvbmx5IHBheWxvYWQ/OiB1bmtub3duO1xuICAvKiogVHJ1ZSB3aGVuIHRoaXMgZW50cnkgY2FtZSBmcm9tIHRoZSB0b3AtbGV2ZWwgcnVuIChgb25SdW5TdGFydGAgLyBgb25SdW5FbmRgKVxuICAgKiAgcmF0aGVyIHRoYW4gZnJvbSBhIHN1YmZsb3cgKGBvblN1YmZsb3dFbnRyeWAgLyBgb25TdWJmbG93RXhpdGApLlxuICAgKiAgTGVucyB1c2VzIHRoaXMgdG8gcmVuZGVyIHRoZSByb290IHBhaXIgYXMgYHVzZXIg4oaSIHJ1biDihpIgdXNlcmAgaW5zdGVhZCBvZlxuICAgKiAgdGhlIHJlZ3VsYXIgc3ViZmxvdyBzaGFwZS4gKi9cbiAgcmVhZG9ubHkgaXNSb290OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEluT3V0UmVjb3JkZXJPcHRpb25zIHtcbiAgLyoqIFNjb3BlUmVjb3JkZXIgaWQuIERlZmF1bHRzIHRvIGBpbm91dC1OYCAoYXV0by1pbmNyZW1lbnRlZCkuICovXG4gIGlkPzogc3RyaW5nO1xufVxuXG5sZXQgX2NvdW50ZXIgPSAwO1xuXG4vKipcbiAqIEZhY3Rvcnkg4oCUIG1hdGNoZXMgdGhlIGB0b3BvbG9neVJlY29yZGVyKClgIC8gYG5hcnJhdGl2ZSgpYCBzdHlsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluT3V0UmVjb3JkZXIob3B0aW9uczogSW5PdXRSZWNvcmRlck9wdGlvbnMgPSB7fSk6IEluT3V0UmVjb3JkZXIge1xuICByZXR1cm4gbmV3IEluT3V0UmVjb3JkZXIob3B0aW9ucyk7XG59XG5cbi8qKlxuICogU3RhdGVmdWwgYWNjdW11bGF0b3IgdGhhdCB3YXRjaGVzIGBGbG93UmVjb3JkZXJgIGNoYXJ0LWJvdW5kYXJ5IGV2ZW50c1xuICogKHJ1biBzdGFydC9lbmQgKyBzdWJmbG93IGVudHJ5L2V4aXQpIGFuZCBlbWl0cyBgSW5PdXRFbnRyeWAgcmVjb3JkcyB0b1xuICogaXRzIHVuZGVybHlpbmcgYFNlcXVlbmNlUmVjb3JkZXJgIHN0b3JhZ2UuXG4gKlxuICogQXR0YWNoIHZpYSBgZXhlY3V0b3IuYXR0YWNoQ29tYmluZWRSZWNvcmRlcihyZWNvcmRlcilgIOKAlCBmb290cHJpbnRqc1xuICogZGV0ZWN0cyB0aGUgYEZsb3dSZWNvcmRlcmAgbWV0aG9kIHNoYXBlIGFuZCByb3V0ZXMgZXZlbnRzLlxuICovXG5leHBvcnQgY2xhc3MgSW5PdXRSZWNvcmRlciBleHRlbmRzIFNlcXVlbmNlUmVjb3JkZXI8SW5PdXRFbnRyeT4gaW1wbGVtZW50cyBGbG93UmVjb3JkZXIge1xuICByZWFkb25seSBpZDogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IEluT3V0UmVjb3JkZXJPcHRpb25zID0ge30pIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuaWQgPSBvcHRpb25zLmlkID8/IGBpbm91dC0keysrX2NvdW50ZXJ9YDtcbiAgfVxuXG4gIC8vIOKUgOKUgCBGbG93UmVjb3JkZXIgaG9va3Mg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgb25SdW5TdGFydChldmVudDogRmxvd1J1bkV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5lbWl0KGJ1aWxkUm9vdEVudHJ5KCdlbnRyeScsIGV2ZW50LnBheWxvYWQpKTtcbiAgfVxuXG4gIG9uUnVuRW5kKGV2ZW50OiBGbG93UnVuRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLmVtaXQoYnVpbGRSb290RW50cnkoJ2V4aXQnLCBldmVudC5wYXlsb2FkKSk7XG4gIH1cblxuICBvblN1YmZsb3dFbnRyeShldmVudDogRmxvd1N1YmZsb3dFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGVudHJ5ID0gYnVpbGRTdWJmbG93RW50cnkoZXZlbnQsICdlbnRyeScpO1xuICAgIGlmIChlbnRyeSkgdGhpcy5lbWl0KGVudHJ5KTtcbiAgfVxuXG4gIG9uU3ViZmxvd0V4aXQoZXZlbnQ6IEZsb3dTdWJmbG93RXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBlbnRyeSA9IGJ1aWxkU3ViZmxvd0VudHJ5KGV2ZW50LCAnZXhpdCcpO1xuICAgIGlmIChlbnRyeSkgdGhpcy5lbWl0KGVudHJ5KTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBRdWVyeSBBUEkg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgLyoqIEFsbCBlbnRyaWVzIGluIGV4ZWN1dGlvbiBvcmRlciAoZW50cnkrZXhpdCBpbnRlcmxlYXZlZCkuXG4gICAqICBBbGlhcyBmb3IgYGdldEVudHJpZXMoKWAgd2l0aCBkb21haW4tY2xlYXJlciBuYW1pbmcuICovXG4gIGdldEJvdW5kYXJpZXMoKTogSW5PdXRFbnRyeVtdIHtcbiAgICByZXR1cm4gdGhpcy5nZXRFbnRyaWVzKCk7XG4gIH1cblxuICAvKiogRW50cnkvZXhpdCBwYWlyIGZvciBvbmUgY2hhcnQgZXhlY3V0aW9uLlxuICAgKiAgUmV0dXJucyBgeyBlbnRyeSwgZXhpdCB9YCDigJQgYGV4aXRgIGlzIGB1bmRlZmluZWRgIGZvciBpbi1wcm9ncmVzcyAvIHBhdXNlZFxuICAgKiAgY2hhcnRzIG9yIGlmIGBydW50aW1lU3RhZ2VJZGAgaXMgdW5rbm93bi4gKi9cbiAgZ2V0Qm91bmRhcnkocnVudGltZVN0YWdlSWQ6IHN0cmluZyk6IHsgZW50cnk/OiBJbk91dEVudHJ5OyBleGl0PzogSW5PdXRFbnRyeSB9IHtcbiAgICBjb25zdCBlbnRyaWVzID0gdGhpcy5nZXRFbnRyaWVzRm9yU3RlcChydW50aW1lU3RhZ2VJZCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVudHJ5OiBlbnRyaWVzLmZpbmQoKGUpID0+IGUucGhhc2UgPT09ICdlbnRyeScpLFxuICAgICAgZXhpdDogZW50cmllcy5maW5kKChlKSA9PiBlLnBoYXNlID09PSAnZXhpdCcpLFxuICAgIH07XG4gIH1cblxuICAvKiogSnVzdCB0aGUgYGVudHJ5YC1waGFzZSBib3VuZGFyaWVzIOKAlCB0aGUgXCJzdGVwIGxpc3RcIiBwcm9qZWN0aW9uIGluXG4gICAqICBleGVjdXRpb24gb3JkZXIuIFRoaXMgaXMgdGhlIG5hdHVyYWwgdGltZWxpbmUgb2YgY2hhcnQgZXhlY3V0aW9uc1xuICAgKiAgZm9yIHNsaWRlciAvIHNjcnViYmluZyBVSXMuIFRoZSB0b3AtbGV2ZWwgcnVuJ3MgZW50cnkgaXMgdGhlIGZpcnN0XG4gICAqICBzdGVwIChkZXB0aCAwKS4gKi9cbiAgZ2V0U3RlcHMoKTogSW5PdXRFbnRyeVtdIHtcbiAgICBjb25zdCBzdGVwczogSW5PdXRFbnRyeVtdID0gW107XG4gICAgZm9yIChjb25zdCBiIG9mIHRoaXMuZ2V0RW50cmllcygpKSB7XG4gICAgICBpZiAoYi5waGFzZSA9PT0gJ2VudHJ5Jykgc3RlcHMucHVzaChiKTtcbiAgICB9XG4gICAgcmV0dXJuIHN0ZXBzO1xuICB9XG5cbiAgLyoqIFRoZSByb290IHJ1bidzIGVudHJ5L2V4aXQgcGFpciwgaWYgdGhlIHJ1biBoYXMgc3RhcnRlZC5cbiAgICogIENvbnZlbmllbmNlIGZvciBjb25zdW1lcnMgdGhhdCB3YW50IHRvIGJyYWNrZXQgdGhlIHRpbWVsaW5lIGJ5IHRoZVxuICAgKiAgb3V0ZXJtb3N0IGluL291dC4gKi9cbiAgZ2V0Um9vdEJvdW5kYXJ5KCk6IHsgZW50cnk/OiBJbk91dEVudHJ5OyBleGl0PzogSW5PdXRFbnRyeSB9IHtcbiAgICByZXR1cm4gdGhpcy5nZXRCb3VuZGFyeShST09UX1JVTlRJTUVfU1RBR0VfSUQpO1xuICB9XG5cbiAgLyoqIFNuYXBzaG90IGJ1bmRsZSBmb3IgaW5jbHVzaW9uIGluIGBleGVjdXRvci5nZXRTbmFwc2hvdCgpYC4gKi9cbiAgdG9TbmFwc2hvdCgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZTogJ0luT3V0JyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnQ2hhcnQgaW4vb3V0IHN0cmVhbSDigJQgZW50cnkvZXhpdCBwYWlycyBhdCBldmVyeSBjaGFydCBib3VuZGFyeSAocm9vdCArIHN1YmZsb3dzKScsXG4gICAgICBwcmVmZXJyZWRPcGVyYXRpb246ICd0cmFuc2xhdGUnIGFzIGNvbnN0LFxuICAgICAgZGF0YTogdGhpcy5nZXRCb3VuZGFyaWVzKCksXG4gICAgfTtcbiAgfVxufVxuXG4vLyDilIDilIAgSW50ZXJuYWwgaGVscGVycyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqXG4gKiBCdWlsZCB0aGUgc3ludGhldGljIHJvb3QgZW50cnkvZXhpdC4gRGVwdGggaXMgYDBgIGFuZCB0aGUgcGF0aCBpc1xuICogYFtST09UX1NVQkZMT1dfSURdYCBzbyBjb25zdW1lcnMgZ3JvdXBpbmcgYnkgcGF0aCBzZWUgdGhlIHJvb3QgYXMgYVxuICogcmVndWxhciB0b3AtbGV2ZWwgY29udGFpbmVyLlxuICovXG5mdW5jdGlvbiBidWlsZFJvb3RFbnRyeShwaGFzZTogSW5PdXRQaGFzZSwgcGF5bG9hZDogdW5rbm93bik6IEluT3V0RW50cnkge1xuICByZXR1cm4ge1xuICAgIHJ1bnRpbWVTdGFnZUlkOiBST09UX1JVTlRJTUVfU1RBR0VfSUQsXG4gICAgc3ViZmxvd0lkOiBST09UX1NVQkZMT1dfSUQsXG4gICAgbG9jYWxTdWJmbG93SWQ6IFJPT1RfU1VCRkxPV19JRCxcbiAgICBzdWJmbG93TmFtZTogJ1J1bicsXG4gICAgc3ViZmxvd1BhdGg6IFtST09UX1NVQkZMT1dfSURdLFxuICAgIGRlcHRoOiAwLFxuICAgIHBoYXNlLFxuICAgIHBheWxvYWQsXG4gICAgaXNSb290OiB0cnVlLFxuICB9O1xufVxuXG4vKipcbiAqIEJ1aWxkIGEgc3ViZmxvdyBgSW5PdXRFbnRyeWAgZnJvbSBhIGBGbG93U3ViZmxvd0V2ZW50YC5cbiAqXG4gKiBSZXR1cm5zIGB1bmRlZmluZWRgIHdoZW4gdGhlIGV2ZW50IGxhY2tzIGEgYHN1YmZsb3dJZGAgKGFub255bW91cyAvXG4gKiBtYWxmb3JtZWQgc3ViZmxvdyBldmVudHMg4oCUIHNhbWUgZGVmZW5zaXZlIHBvbGljeSBhcyBgVG9wb2xvZ3lSZWNvcmRlcmApLlxuICpcbiAqIFBhdGggZGVyaXZhdGlvbjogdGhlIGVuZ2luZSBlbWl0cyBgc3ViZmxvd0lkYCBhbHJlYWR5IHByZWZpeGVkIHdpdGggdGhlXG4gKiBmdWxsIHBhdGggb2YgcGFyZW50IHN1YmZsb3dzIChlLmcuIGAnc2Ytb3V0ZXIvc2YtaW5uZXInYCkuIFdlIGRlY29tcG9zZVxuICogdGhhdCBpbnRvIHNlZ21lbnRzIHRvIHBvcHVsYXRlIGBzdWJmbG93UGF0aGAgYW5kIGNvbXB1dGUgYGRlcHRoYC5cbiAqXG4gKiBTdWJmbG93cyBuZXN0IFVOREVSIHRoZSBzeW50aGV0aWMgcm9vdCBpbiBgc3ViZmxvd1BhdGhgIHNvIHRoZSB0cmVlIGlzXG4gKiBjb21wbGV0ZTogYSB0b3AtbGV2ZWwgc3ViZmxvdyBoYXMgcGF0aCBgWydfX3Jvb3RfXycsICdzZi14J11gIGFuZCBkZXB0aCAxLlxuICovXG5mdW5jdGlvbiBidWlsZFN1YmZsb3dFbnRyeShldmVudDogRmxvd1N1YmZsb3dFdmVudCwgcGhhc2U6IEluT3V0UGhhc2UpOiBJbk91dEVudHJ5IHwgdW5kZWZpbmVkIHtcbiAgY29uc3Qgc3ViZmxvd0lkID0gZXZlbnQuc3ViZmxvd0lkO1xuICBpZiAoIXN1YmZsb3dJZCkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICBjb25zdCBydW50aW1lU3RhZ2VJZCA9IGV2ZW50LnRyYXZlcnNhbENvbnRleHQ/LnJ1bnRpbWVTdGFnZUlkID8/ICcnO1xuICBjb25zdCBzZWdtZW50cyA9IHN1YmZsb3dJZC5zcGxpdCgnLycpLmZpbHRlcigocykgPT4gcy5sZW5ndGggPiAwKTtcbiAgY29uc3Qgc3ViZmxvd1BhdGg6IHJlYWRvbmx5IHN0cmluZ1tdID0gW1JPT1RfU1VCRkxPV19JRCwgLi4uc2VnbWVudHNdO1xuICBjb25zdCBkZXB0aCA9IHN1YmZsb3dQYXRoLmxlbmd0aCAtIDE7XG4gIGNvbnN0IGxvY2FsU3ViZmxvd0lkID0gc2VnbWVudHNbc2VnbWVudHMubGVuZ3RoIC0gMV0gPz8gc3ViZmxvd0lkO1xuICBjb25zdCBwYXlsb2FkID0gcGhhc2UgPT09ICdlbnRyeScgPyBldmVudC5tYXBwZWRJbnB1dCA6IGV2ZW50Lm91dHB1dFN0YXRlO1xuXG4gIHJldHVybiB7XG4gICAgcnVudGltZVN0YWdlSWQsXG4gICAgc3ViZmxvd0lkLFxuICAgIGxvY2FsU3ViZmxvd0lkLFxuICAgIHN1YmZsb3dOYW1lOiBldmVudC5uYW1lLFxuICAgIGRlc2NyaXB0aW9uOiBldmVudC5kZXNjcmlwdGlvbixcbiAgICBzdWJmbG93UGF0aCxcbiAgICBkZXB0aCxcbiAgICBwaGFzZSxcbiAgICBwYXlsb2FkLFxuICAgIGlzUm9vdDogZmFsc2UsXG4gIH07XG59XG4iXX0=
|