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,207 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CommitRangeIndex<TLabel> — interval index over commit indices.
|
|
3
|
+
*
|
|
4
|
+
* Built incrementally during traversal: `open(label, startIdx)` when a
|
|
5
|
+
* boundary begins, `close(token, endIdx)` when it ends. Query at any
|
|
6
|
+
* commit position with `enclosing(idx)` (returns ranges containing
|
|
7
|
+
* that index, ordered outer→inner) or `overlapping(start, end)`
|
|
8
|
+
* (returns ranges intersecting a slice).
|
|
9
|
+
*
|
|
10
|
+
* See `docs/design/commit-range-index.md` for the full contract. In
|
|
11
|
+
* one paragraph: this is a generic interval data structure for
|
|
12
|
+
* commit-range queries. footprintjs owns ZERO knowledge of what
|
|
13
|
+
* labels mean — consumers (agentfootprint, lens, OTel exporters)
|
|
14
|
+
* pick their own `TLabel` type. Open ranges (mid-run, no end yet)
|
|
15
|
+
* are first-class — query results carry `endIdx: undefined` for them.
|
|
16
|
+
*
|
|
17
|
+
* Pattern: incremental builder + interval query. Same "collect during
|
|
18
|
+
* traversal, never post-process" rule footprintjs's CLAUDE.md
|
|
19
|
+
* requires of every observer.
|
|
20
|
+
* Role: structural primitive for time-travel UIs and per-boundary
|
|
21
|
+
* aggregation.
|
|
22
|
+
* Channel: consumer-driven (no engine subscription).
|
|
23
|
+
*
|
|
24
|
+
* @example
|
|
25
|
+
* ```typescript
|
|
26
|
+
* import { CommitRangeIndex } from 'footprintjs/trace';
|
|
27
|
+
*
|
|
28
|
+
* const idx = new CommitRangeIndex<string>();
|
|
29
|
+
* const t = idx.open('LLMCall', executor.getCommitCount());
|
|
30
|
+
* // ... LLM call runs, scope writes happen ...
|
|
31
|
+
* idx.close(t, executor.getCommitCount());
|
|
32
|
+
*
|
|
33
|
+
* idx.enclosing(50); // → ranges containing commit 50, outer→inner
|
|
34
|
+
* idx.overlapping(40, 60); // → ranges sharing the slice [40,60]
|
|
35
|
+
* idx.clear(); // wipe (e.g., on new run)
|
|
36
|
+
* ```
|
|
37
|
+
*
|
|
38
|
+
* REDACTION NOTE: labels are stored verbatim and returned verbatim in
|
|
39
|
+
* query results — the index does NOT redact `TLabel` content. If a
|
|
40
|
+
* consumer attaches a label containing PII (user email, scope reads
|
|
41
|
+
* with sensitive keys, etc.) and then serializes the index for
|
|
42
|
+
* logging or telemetry, that data leaves the trust boundary. Use
|
|
43
|
+
* `RedactionPolicy` (or your own scrubbing) on the consumer side
|
|
44
|
+
* BEFORE attaching labels. The index follows the same contract as
|
|
45
|
+
* other footprintjs storage primitives (SequenceStore, KeyedStore):
|
|
46
|
+
* storage is verbatim; redaction is the caller's responsibility.
|
|
47
|
+
*/
|
|
48
|
+
export class CommitRangeIndex {
|
|
49
|
+
entries = [];
|
|
50
|
+
byId = new Map();
|
|
51
|
+
nextId = 0;
|
|
52
|
+
/** Identity for token scoping — each index gets a fresh symbol so
|
|
53
|
+
* tokens from one index can't accidentally close ranges in another.
|
|
54
|
+
* ROTATED on `clear()` to invalidate stale tokens that survived a
|
|
55
|
+
* run reset (would otherwise hit a recycled id and silently mutate
|
|
56
|
+
* a different range — see DS+logic panel review RED #1). */
|
|
57
|
+
owner = Symbol('CommitRangeIndex');
|
|
58
|
+
/**
|
|
59
|
+
* Open a new range. Returns a token the caller MUST hold and pass
|
|
60
|
+
* to `close()` later. Each `open()` gets a fresh token; tokens
|
|
61
|
+
* cannot be reused or shared across indices (silent no-op if
|
|
62
|
+
* misused — see Law 2 in the design doc). Tokens from BEFORE
|
|
63
|
+
* the most recent `clear()` are also invalid (owner symbol
|
|
64
|
+
* rotates on clear).
|
|
65
|
+
*/
|
|
66
|
+
open(label, startIdx) {
|
|
67
|
+
const id = this.nextId++;
|
|
68
|
+
const entry = {
|
|
69
|
+
label,
|
|
70
|
+
startIdx,
|
|
71
|
+
endIdx: undefined,
|
|
72
|
+
id,
|
|
73
|
+
closed: false,
|
|
74
|
+
};
|
|
75
|
+
this.entries.push(entry);
|
|
76
|
+
this.byId.set(id, entry);
|
|
77
|
+
return { _id: id, _owner: this.owner };
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Close an open range at `endIdx` (inclusive). After close, the
|
|
81
|
+
* range is queryable with both bounds. Closing an already-closed
|
|
82
|
+
* token is a no-op. Closing an unknown token (from another index,
|
|
83
|
+
* or fabricated) is a no-op.
|
|
84
|
+
*/
|
|
85
|
+
close(token, endIdx) {
|
|
86
|
+
if (token._owner !== this.owner)
|
|
87
|
+
return; // cross-index misuse — silent no-op
|
|
88
|
+
const entry = this.findById(token._id);
|
|
89
|
+
if (!entry || entry.closed)
|
|
90
|
+
return;
|
|
91
|
+
entry.endIdx = endIdx;
|
|
92
|
+
entry.closed = true;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Returns ALL ranges enclosing `commitIdx`, ordered outer→inner.
|
|
96
|
+
* Includes both closed and open ranges. For a closed range to
|
|
97
|
+
* enclose: `startIdx <= commitIdx <= endIdx`. For an open range:
|
|
98
|
+
* `startIdx <= commitIdx` (no upper bound check).
|
|
99
|
+
*
|
|
100
|
+
* Ordering rule: ascending by `startIdx`, with TIES BROKEN BY
|
|
101
|
+
* descending `endIdx` (wider range = outer). Open ranges (endIdx
|
|
102
|
+
* undefined) are treated as `+Infinity` for tie-break — they
|
|
103
|
+
* always sort outer of any closed range starting at the same idx.
|
|
104
|
+
* This is the only deterministic outer→inner ordering when two
|
|
105
|
+
* boundaries open at the same commit (e.g., Parallel root +
|
|
106
|
+
* its first branch).
|
|
107
|
+
*
|
|
108
|
+
* Returns a SHALLOW IMMUTABLE COPY — caller mutations don't affect
|
|
109
|
+
* internal state.
|
|
110
|
+
*/
|
|
111
|
+
enclosing(commitIdx) {
|
|
112
|
+
const matches = [];
|
|
113
|
+
for (const e of this.entries) {
|
|
114
|
+
if (e.startIdx > commitIdx)
|
|
115
|
+
continue;
|
|
116
|
+
if (e.endIdx === undefined || e.endIdx >= commitIdx) {
|
|
117
|
+
matches.push(toEntry(e));
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
matches.sort(outerToInnerComparator);
|
|
121
|
+
return matches;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Returns all ranges OVERLAPPING the slice `[startIdx, endIdx]`. A
|
|
125
|
+
* range overlaps if it shares at least one commit position with the
|
|
126
|
+
* slice. Use for parallel-branch detection, time-window queries,
|
|
127
|
+
* or "what boundaries fired during this slice."
|
|
128
|
+
*
|
|
129
|
+
* Sorted by the SAME outer→inner comparator as `enclosing()`:
|
|
130
|
+
* ascending by `startIdx`, ties broken by descending `endIdx`
|
|
131
|
+
* (wider = outer; open ranges treated as +Infinity).
|
|
132
|
+
*
|
|
133
|
+
* Returns a SHALLOW IMMUTABLE COPY.
|
|
134
|
+
*/
|
|
135
|
+
overlapping(startIdx, endIdx) {
|
|
136
|
+
const matches = [];
|
|
137
|
+
for (const e of this.entries) {
|
|
138
|
+
// Overlap test:
|
|
139
|
+
// range starts after slice ends → no overlap
|
|
140
|
+
// range ends (closed) before slice starts → no overlap
|
|
141
|
+
// otherwise → overlap (open ranges always overlap if they start <= endIdx)
|
|
142
|
+
if (e.startIdx > endIdx)
|
|
143
|
+
continue;
|
|
144
|
+
if (e.endIdx !== undefined && e.endIdx < startIdx)
|
|
145
|
+
continue;
|
|
146
|
+
matches.push(toEntry(e));
|
|
147
|
+
}
|
|
148
|
+
matches.sort(outerToInnerComparator);
|
|
149
|
+
return matches;
|
|
150
|
+
}
|
|
151
|
+
/** Total range count (open + closed). */
|
|
152
|
+
get size() {
|
|
153
|
+
return this.entries.length;
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Wipe all ranges + reset the token counter AND rotate the owner
|
|
157
|
+
* symbol so any token from before this clear becomes invalid.
|
|
158
|
+
* Critical: without rotating the owner, a stale token whose `_id`
|
|
159
|
+
* happens to match a recycled id after clear would silently mutate
|
|
160
|
+
* the wrong entry. Owner rotation makes stale-token close a no-op
|
|
161
|
+
* via the `_owner !== this.owner` guard.
|
|
162
|
+
*
|
|
163
|
+
* Call from a consumer's runId guard when a new run starts (e.g.,
|
|
164
|
+
* agentfootprint's `observeRunId(onNewRun)` from Phase 2).
|
|
165
|
+
*/
|
|
166
|
+
clear() {
|
|
167
|
+
this.entries.length = 0;
|
|
168
|
+
this.byId.clear();
|
|
169
|
+
this.nextId = 0;
|
|
170
|
+
this.owner = Symbol('CommitRangeIndex');
|
|
171
|
+
}
|
|
172
|
+
// ─── Internals ────────────────────────────────────────────────────
|
|
173
|
+
/** O(1) lookup by token id. Always returns the entry that the token
|
|
174
|
+
* references (or undefined if the id was never opened in this index). */
|
|
175
|
+
findById(id) {
|
|
176
|
+
return this.byId.get(id);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
/** Project the internal mutable shape into the public readonly entry.
|
|
180
|
+
* The OUTER object is a fresh allocation per query (so caller array
|
|
181
|
+
* mutations don't leak). The `label` field is a REFERENCE COPY —
|
|
182
|
+
* if `TLabel` is an object, mutating its fields will affect the
|
|
183
|
+
* internal entry too. Consumers MUST treat labels as immutable
|
|
184
|
+
* (or pass primitives). Documented in the class JSDoc as the
|
|
185
|
+
* "labels are stored verbatim" contract. */
|
|
186
|
+
function toEntry(e) {
|
|
187
|
+
return e.endIdx === undefined
|
|
188
|
+
? { label: e.label, startIdx: e.startIdx }
|
|
189
|
+
: { label: e.label, startIdx: e.startIdx, endIdx: e.endIdx };
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Shared outer→inner comparator for both `enclosing()` and
|
|
193
|
+
* `overlapping()`. Primary key: `startIdx` ascending. Tie-break:
|
|
194
|
+
* `endIdx` descending (wider range is outer). Open ranges (undefined
|
|
195
|
+
* `endIdx`) sort as +Infinity → outermost when tied. Deterministic
|
|
196
|
+
* ordering required so consumers (Lens breadcrumb, time-travel UIs)
|
|
197
|
+
* never see flicker on equal-start boundaries (e.g., a Parallel
|
|
198
|
+
* root and its first branch opening at the same commit).
|
|
199
|
+
*/
|
|
200
|
+
function outerToInnerComparator(a, b) {
|
|
201
|
+
if (a.startIdx !== b.startIdx)
|
|
202
|
+
return a.startIdx - b.startIdx;
|
|
203
|
+
const ae = a.endIdx ?? Number.POSITIVE_INFINITY;
|
|
204
|
+
const be = b.endIdx ?? Number.POSITIVE_INFINITY;
|
|
205
|
+
return be - ae;
|
|
206
|
+
}
|
|
207
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29tbWl0UmFuZ2VJbmRleC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvcmVjb3JkZXIvQ29tbWl0UmFuZ2VJbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQThDRztBQTRDSCxNQUFNLE9BQU8sZ0JBQWdCO0lBQ25CLE9BQU8sR0FBNEIsRUFBRSxDQUFDO0lBQ3RDLElBQUksR0FBRyxJQUFJLEdBQUcsRUFBaUMsQ0FBQztJQUNoRCxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQ25COzs7O2lFQUk2RDtJQUNyRCxLQUFLLEdBQUcsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFFM0M7Ozs7Ozs7T0FPRztJQUNILElBQUksQ0FBQyxLQUFhLEVBQUUsUUFBZ0I7UUFDbEMsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3pCLE1BQU0sS0FBSyxHQUEwQjtZQUNuQyxLQUFLO1lBQ0wsUUFBUTtZQUNSLE1BQU0sRUFBRSxTQUFTO1lBQ2pCLEVBQUU7WUFDRixNQUFNLEVBQUUsS0FBSztTQUNkLENBQUM7UUFDRixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6QixJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDekIsT0FBTyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUN6QyxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxLQUFLLENBQUMsS0FBaUIsRUFBRSxNQUFjO1FBQ3JDLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUMsS0FBSztZQUFFLE9BQU8sQ0FBQyxvQ0FBb0M7UUFDN0UsTUFBTSxLQUFLLEdBQUcsSUFB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QUFDLENBQUMsUUFBUSxLQUFLLENBQUMsQ0FBQyxRQUFRO1FBQUUsT0FBTyxDQUFDLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUM7SUFDOUQsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxNQUFNLENBQUMsaUJBQWlCLENBQUM7SUFDaEQsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxNQUFNLENBQUMsaUJBQWlCLENBQUM7SUFDaEQsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ2pCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvbW1pdFJhbmdlSW5kZXg8VExhYmVsPiDigJQgaW50ZXJ2YWwgaW5kZXggb3ZlciBjb21taXQgaW5kaWNlcy5cbiAqXG4gKiBCdWlsdCBpbmNyZW1lbnRhbGx5IGR1cmluZyB0cmF2ZXJzYWw6IGBvcGVuKGxhYmVsLCBzdGFydElkeClgIHdoZW4gYVxuICogYm91bmRhcnkgYmVnaW5zLCBgY2xvc2UodG9rZW4sIGVuZElkeClgIHdoZW4gaXQgZW5kcy4gUXVlcnkgYXQgYW55XG4gKiBjb21taXQgcG9zaXRpb24gd2l0aCBgZW5jbG9zaW5nKGlkeClgIChyZXR1cm5zIHJhbmdlcyBjb250YWluaW5nXG4gKiB0aGF0IGluZGV4LCBvcmRlcmVkIG91dGVy4oaSaW5uZXIpIG9yIGBvdmVybGFwcGluZyhzdGFydCwgZW5kKWBcbiAqIChyZXR1cm5zIHJhbmdlcyBpbnRlcnNlY3RpbmcgYSBzbGljZSkuXG4gKlxuICogU2VlIGBkb2NzL2Rlc2lnbi9jb21taXQtcmFuZ2UtaW5kZXgubWRgIGZvciB0aGUgZnVsbCBjb250cmFjdC4gSW5cbiAqIG9uZSBwYXJhZ3JhcGg6IHRoaXMgaXMgYSBnZW5lcmljIGludGVydmFsIGRhdGEgc3RydWN0dXJlIGZvclxuICogY29tbWl0LXJhbmdlIHF1ZXJpZXMuIGZvb3RwcmludGpzIG93bnMgWkVSTyBrbm93bGVkZ2Ugb2Ygd2hhdFxuICogbGFiZWxzIG1lYW4g4oCUIGNvbnN1bWVycyAoYWdlbnRmb290cHJpbnQsIGxlbnMsIE9UZWwgZXhwb3J0ZXJzKVxuICogcGljayB0aGVpciBvd24gYFRMYWJlbGAgdHlwZS4gT3BlbiByYW5nZXMgKG1pZC1ydW4sIG5vIGVuZCB5ZXQpXG4gKiBhcmUgZmlyc3QtY2xhc3Mg4oCUIHF1ZXJ5IHJlc3VsdHMgY2FycnkgYGVuZElkeDogdW5kZWZpbmVkYCBmb3IgdGhlbS5cbiAqXG4gKiBQYXR0ZXJuOiBpbmNyZW1lbnRhbCBidWlsZGVyICsgaW50ZXJ2YWwgcXVlcnkuIFNhbWUgXCJjb2xsZWN0IGR1cmluZ1xuICogICAgICAgICAgdHJhdmVyc2FsLCBuZXZlciBwb3N0LXByb2Nlc3NcIiBydWxlIGZvb3RwcmludGpzJ3MgQ0xBVURFLm1kXG4gKiAgICAgICAgICByZXF1aXJlcyBvZiBldmVyeSBvYnNlcnZlci5cbiAqIFJvbGU6ICAgIHN0cnVjdHVyYWwgcHJpbWl0aXZlIGZvciB0aW1lLXRyYXZlbCBVSXMgYW5kIHBlci1ib3VuZGFyeVxuICogICAgICAgICAgYWdncmVnYXRpb24uXG4gKiBDaGFubmVsOiBjb25zdW1lci1kcml2ZW4gKG5vIGVuZ2luZSBzdWJzY3JpcHRpb24pLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQgeyBDb21taXRSYW5nZUluZGV4IH0gZnJvbSAnZm9vdHByaW50anMvdHJhY2UnO1xuICpcbiAqIGNvbnN0IGlkeCA9IG5ldyBDb21taXRSYW5nZUluZGV4PHN0cmluZz4oKTtcbiAqIGNvbnN0IHQgPSBpZHgub3BlbignTExNQ2FsbCcsIGV4ZWN1dG9yLmdldENvbW1pdENvdW50KCkpO1xuICogLy8gLi4uIExMTSBjYWxsIHJ1bnMsIHNjb3BlIHdyaXRlcyBoYXBwZW4gLi4uXG4gKiBpZHguY2xvc2UodCwgZXhlY3V0b3IuZ2V0Q29tbWl0Q291bnQoKSk7XG4gKlxuICogaWR4LmVuY2xvc2luZyg1MCk7ICAvLyDihpIgcmFuZ2VzIGNvbnRhaW5pbmcgY29tbWl0IDUwLCBvdXRlcuKGkmlubmVyXG4gKiBpZHgub3ZlcmxhcHBpbmcoNDAsIDYwKTsgIC8vIOKGkiByYW5nZXMgc2hhcmluZyB0aGUgc2xpY2UgWzQwLDYwXVxuICogaWR4LmNsZWFyKCk7ICAgICAgICAvLyB3aXBlIChlLmcuLCBvbiBuZXcgcnVuKVxuICogYGBgXG4gKlxuICogUkVEQUNUSU9OIE5PVEU6IGxhYmVscyBhcmUgc3RvcmVkIHZlcmJhdGltIGFuZCByZXR1cm5lZCB2ZXJiYXRpbSBpblxuICogcXVlcnkgcmVzdWx0cyDigJQgdGhlIGluZGV4IGRvZXMgTk9UIHJlZGFjdCBgVExhYmVsYCBjb250ZW50LiBJZiBhXG4gKiBjb25zdW1lciBhdHRhY2hlcyBhIGxhYmVsIGNvbnRhaW5pbmcgUElJICh1c2VyIGVtYWlsLCBzY29wZSByZWFkc1xuICogd2l0aCBzZW5zaXRpdmUga2V5cywgZXRjLikgYW5kIHRoZW4gc2VyaWFsaXplcyB0aGUgaW5kZXggZm9yXG4gKiBsb2dnaW5nIG9yIHRlbGVtZXRyeSwgdGhhdCBkYXRhIGxlYXZlcyB0aGUgdHJ1c3QgYm91bmRhcnkuIFVzZVxuICogYFJlZGFjdGlvblBvbGljeWAgKG9yIHlvdXIgb3duIHNjcnViYmluZykgb24gdGhlIGNvbnN1bWVyIHNpZGVcbiAqIEJFRk9SRSBhdHRhY2hpbmcgbGFiZWxzLiBUaGUgaW5kZXggZm9sbG93cyB0aGUgc2FtZSBjb250cmFjdCBhc1xuICogb3RoZXIgZm9vdHByaW50anMgc3RvcmFnZSBwcmltaXRpdmVzIChTZXF1ZW5jZVN0b3JlLCBLZXllZFN0b3JlKTpcbiAqIHN0b3JhZ2UgaXMgdmVyYmF0aW07IHJlZGFjdGlvbiBpcyB0aGUgY2FsbGVyJ3MgcmVzcG9uc2liaWxpdHkuXG4gKi9cblxuLyoqIE9wYXF1ZSB0b2tlbiBpZGVudGlmeWluZyBhbiBvcGVuIHJhbmdlLiBIb2xkIG9udG8gaXQ7IHBhc3MgdG8gYGNsb3NlKClgLlxuICogIEluZGV4LXNjb3BlZCDigJQgdXNpbmcgYSB0b2tlbiBmcm9tIG9uZSBDb21taXRSYW5nZUluZGV4IG9uIGFub3RoZXIgaXNcbiAqICBhIHNpbGVudCBuby1vcCAodmVyaWZpZWQgYnkgdGhlIHBlci1pbmRleCBgX293bmVyYCBzeW1ib2wpLlxuICpcbiAqICBTRUNVUklUWSBOT1RFOiB0aGUgYF9vd25lcmAgc3ltYm9sIGlzIGVudW1lcmFibGUgb24gdGhlIHRva2VuIG9iamVjdFxuICogIHZpYSBgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0b2tlbilgLiBUaGlzIG1lYW5zIHRva2VucyBhcmUgTk9UXG4gKiAgYWR2ZXJzYXJ5LXNhZmUg4oCUIGEgbWFsaWNpb3VzIGNhbGxlciB3aXRoIGFjY2VzcyB0byBBTlkgdG9rZW4gZnJvbVxuICogIHRoaXMgaW5kZXggY2FuIHJlY292ZXIgdGhlIG93bmVyIHN5bWJvbCBhbmQgZm9yZ2UgbmV3IHRva2Vucy4gVGhlXG4gKiAgaW5kZXggaXMgZGVzaWduZWQgZm9yIGluLXByb2Nlc3MgdHJ1c3QgYm91bmRhcmllcyAoY29vcGVyYXRpdmVcbiAqICByZWNvcmRlcnMgc2hhcmluZyBvbmUgcnVubmVyKSwgbm90IGZvciBob3N0aWxlLWlucHV0IHNjZW5hcmlvcy5cbiAqICBJZiBhZHZlcnNhcnktc2FmZXR5IGJlY29tZXMgYSByZXF1aXJlbWVudCwgc3dpdGNoIHRvIGEgV2Vha01hcC1cbiAqICBzY29wZWQgdG9rZW4gbW9kZWwgKHNlZSBzZWN1cml0eSBwYW5lbCByZXZpZXcgWTIpLiAqL1xuZXhwb3J0IGludGVyZmFjZSBSYW5nZVRva2VuIHtcbiAgLyoqIFBlci1pbmRleCBzZXF1ZW50aWFsIGlkLiBPcGFxdWUgdG8gY29uc3VtZXJzIOKAlCB0aGV5IHNob3VsZG4ndCByZWFkIGl0LiAqL1xuICByZWFkb25seSBfaWQ6IG51bWJlcjtcbiAgLyoqIFBlci1pbmRleCBpZGVudGl0eSDigJQgcHJldmVudHMgYWNjaWRlbnRhbCBjcm9zcy1pbmRleCB0b2tlbiBtaXN1c2UuICovXG4gIHJlYWRvbmx5IF9vd25lcjogc3ltYm9sO1xufVxuXG4vKiogQSBzaW5nbGUgcmFuZ2UgYXMgcmV0dXJuZWQgYnkgcXVlcnkgbWV0aG9kcy4gRnJvemVuLXNoYXBlIOKAlCByZWFkb25seSBmaWVsZHMuICovXG5leHBvcnQgaW50ZXJmYWNlIFJhbmdlRW50cnk8VExhYmVsPiB7XG4gIHJlYWRvbmx5IGxhYmVsOiBUTGFiZWw7XG4gIHJlYWRvbmx5IHN0YXJ0SWR4OiBudW1iZXI7XG4gIC8qKiBVbmRlZmluZWQgd2hpbGUgdGhlIHJhbmdlIGlzIHN0aWxsIG9wZW4gKG1pZC1ydW4gYm91bmRhcnkpLiAqL1xuICByZWFkb25seSBlbmRJZHg/OiBudW1iZXI7XG59XG5cbi8qKlxuICogSW50ZXJuYWwgc3RvcmFnZSBzaGFwZS4gTXV0YWJsZSB3aGlsZSB0aGUgcmFuZ2UgaXMgb3Blbjsgb25jZVxuICogY2xvc2VkLCBgZW5kSWR4YCBpcyBzZXQgYW5kIG5ldmVyIGNoYW5nZXMuIFRva2VucyByZWZlcmVuY2UgdGhlc2VcbiAqIGJ5IHRoZWlyIHBvc2l0aW9uIGluIHRoZSBgZW50cmllc2AgYXJyYXkgKHRoZSBgX2lkYCkuXG4gKi9cbmludGVyZmFjZSBJbnRlcm5hbEVudHJ5PFRMYWJlbD4ge1xuICBsYWJlbDogVExhYmVsO1xuICBzdGFydElkeDogbnVtYmVyO1xuICBlbmRJZHg6IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgLyoqIEludGVybmFsIGN1cnNvciDigJQgYXNzaWduZWQgb24gYG9wZW4oKWAsIHVzZWQgdG8gaWRlbnRpZnkgYnkgdG9rZW4uICovXG4gIGlkOiBudW1iZXI7XG4gIC8qKiBUcnVlIGFmdGVyIGBjbG9zZSgpYCBydW5zLiBQcmV2ZW50cyBkb3VibGUtY2xvc2UgbXV0YXRpb24uICovXG4gIGNsb3NlZDogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNsYXNzIENvbW1pdFJhbmdlSW5kZXg8VExhYmVsPiB7XG4gIHByaXZhdGUgZW50cmllczogSW50ZXJuYWxFbnRyeTxUTGFiZWw+W10gPSBbXTtcbiAgcHJpdmF0ZSBieUlkID0gbmV3IE1hcDxudW1iZXIsIEludGVybmFsRW50cnk8VExhYmVsPj4oKTtcbiAgcHJpdmF0ZSBuZXh0SWQgPSAwO1xuICAvKiogSWRlbnRpdHkgZm9yIHRva2VuIHNjb3Bpbmcg4oCUIGVhY2ggaW5kZXggZ2V0cyBhIGZyZXNoIHN5bWJvbCBzb1xuICAgKiAgdG9rZW5zIGZyb20gb25lIGluZGV4IGNhbid0IGFjY2lkZW50YWxseSBjbG9zZSByYW5nZXMgaW4gYW5vdGhlci5cbiAgICogIFJPVEFURUQgb24gYGNsZWFyKClgIHRvIGludmFsaWRhdGUgc3RhbGUgdG9rZW5zIHRoYXQgc3Vydml2ZWQgYVxuICAgKiAgcnVuIHJlc2V0ICh3b3VsZCBvdGhlcndpc2UgaGl0IGEgcmVjeWNsZWQgaWQgYW5kIHNpbGVudGx5IG11dGF0ZVxuICAgKiAgYSBkaWZmZXJlbnQgcmFuZ2Ug4oCUIHNlZSBEUytsb2dpYyBwYW5lbCByZXZpZXcgUkVEICMxKS4gKi9cbiAgcHJpdmF0ZSBvd25lciA9IFN5bWJvbCgnQ29tbWl0UmFuZ2VJbmRleCcpO1xuXG4gIC8qKlxuICAgKiBPcGVuIGEgbmV3IHJhbmdlLiBSZXR1cm5zIGEgdG9rZW4gdGhlIGNhbGxlciBNVVNUIGhvbGQgYW5kIHBhc3NcbiAgICogdG8gYGNsb3NlKClgIGxhdGVyLiBFYWNoIGBvcGVuKClgIGdldHMgYSBmcmVzaCB0b2tlbjsgdG9rZW5zXG4gICAqIGNhbm5vdCBiZSByZXVzZWQgb3Igc2hhcmVkIGFjcm9zcyBpbmRpY2VzIChzaWxlbnQgbm8tb3AgaWZcbiAgICogbWlzdXNlZCDigJQgc2VlIExhdyAyIGluIHRoZSBkZXNpZ24gZG9jKS4gVG9rZW5zIGZyb20gQkVGT1JFXG4gICAqIHRoZSBtb3N0IHJlY2VudCBgY2xlYXIoKWAgYXJlIGFsc28gaW52YWxpZCAob3duZXIgc3ltYm9sXG4gICAqIHJvdGF0ZXMgb24gY2xlYXIpLlxuICAgKi9cbiAgb3BlbihsYWJlbDogVExhYmVsLCBzdGFydElkeDogbnVtYmVyKTogUmFuZ2VUb2tlbiB7XG4gICAgY29uc3QgaWQgPSB0aGlzLm5leHRJZCsrO1xuICAgIGNvbnN0IGVudHJ5OiBJbnRlcm5hbEVudHJ5PFRMYWJlbD4gPSB7XG4gICAgICBsYWJlbCxcbiAgICAgIHN0YXJ0SWR4LFxuICAgICAgZW5kSWR4OiB1bmRlZmluZWQsXG4gICAgICBpZCxcbiAgICAgIGNsb3NlZDogZmFsc2UsXG4gICAgfTtcbiAgICB0aGlzLmVudHJpZXMucHVzaChlbnRyeSk7XG4gICAgdGhpcy5ieUlkLnNldChpZCwgZW50cnkpO1xuICAgIHJldHVybiB7IF9pZDogaWQsIF9vd25lcjogdGhpcy5vd25lciB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENsb3NlIGFuIG9wZW4gcmFuZ2UgYXQgYGVuZElkeGAgKGluY2x1c2l2ZSkuIEFmdGVyIGNsb3NlLCB0aGVcbiAgICogcmFuZ2UgaXMgcXVlcnlhYmxlIHdpdGggYm90aCBib3VuZHMuIENsb3NpbmcgYW4gYWxyZWFkeS1jbG9zZWRcbiAgICogdG9rZW4gaXMgYSBuby1vcC4gQ2xvc2luZyBhbiB1bmtub3duIHRva2VuIChmcm9tIGFub3RoZXIgaW5kZXgsXG4gICAqIG9yIGZhYnJpY2F0ZWQpIGlzIGEgbm8tb3AuXG4gICAqL1xuICBjbG9zZSh0b2tlbjogUmFuZ2VUb2tlbiwgZW5kSWR4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAodG9rZW4uX293bmVyICE9PSB0aGlzLm93bmVyKSByZXR1cm47IC8vIGNyb3NzLWluZGV4IG1pc3VzZSDigJQgc2lsZW50IG5vLW9wXG4gICAgY29uc3QgZW50cnkgPSB0aGlzLmZpbmRCeUlkKHRva2VuLl9pZCk7XG4gICAgaWYgKCFlbnRyeSB8fCBlbnRyeS5jbG9zZWQpIHJldHVybjtcbiAgICBlbnRyeS5lbmRJZHggPSBlbmRJZHg7XG4gICAgZW50cnkuY2xvc2VkID0gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIEFMTCByYW5nZXMgZW5jbG9zaW5nIGBjb21taXRJZHhgLCBvcmRlcmVkIG91dGVy4oaSaW5uZXIuXG4gICAqIEluY2x1ZGVzIGJvdGggY2xvc2VkIGFuZCBvcGVuIHJhbmdlcy4gRm9yIGEgY2xvc2VkIHJhbmdlIHRvXG4gICAqIGVuY2xvc2U6IGBzdGFydElkeCA8PSBjb21taXRJZHggPD0gZW5kSWR4YC4gRm9yIGFuIG9wZW4gcmFuZ2U6XG4gICAqIGBzdGFydElkeCA8PSBjb21taXRJZHhgIChubyB1cHBlciBib3VuZCBjaGVjaykuXG4gICAqXG4gICAqIE9yZGVyaW5nIHJ1bGU6IGFzY2VuZGluZyBieSBgc3RhcnRJZHhgLCB3aXRoIFRJRVMgQlJPS0VOIEJZXG4gICAqIGRlc2NlbmRpbmcgYGVuZElkeGAgKHdpZGVyIHJhbmdlID0gb3V0ZXIpLiBPcGVuIHJhbmdlcyAoZW5kSWR4XG4gICAqIHVuZGVmaW5lZCkgYXJlIHRyZWF0ZWQgYXMgYCtJbmZpbml0eWAgZm9yIHRpZS1icmVhayDigJQgdGhleVxuICAgKiBhbHdheXMgc29ydCBvdXRlciBvZiBhbnkgY2xvc2VkIHJhbmdlIHN0YXJ0aW5nIGF0IHRoZSBzYW1lIGlkeC5cbiAgICogVGhpcyBpcyB0aGUgb25seSBkZXRlcm1pbmlzdGljIG91dGVy4oaSaW5uZXIgb3JkZXJpbmcgd2hlbiB0d29cbiAgICogYm91bmRhcmllcyBvcGVuIGF0IHRoZSBzYW1lIGNvbW1pdCAoZS5nLiwgUGFyYWxsZWwgcm9vdCArXG4gICAqIGl0cyBmaXJzdCBicmFuY2gpLlxuICAgKlxuICAgKiBSZXR1cm5zIGEgU0hBTExPVyBJTU1VVEFCTEUgQ09QWSDigJQgY2FsbGVyIG11dGF0aW9ucyBkb24ndCBhZmZlY3RcbiAgICogaW50ZXJuYWwgc3RhdGUuXG4gICAqL1xuICBlbmNsb3NpbmcoY29tbWl0SWR4OiBudW1iZXIpOiByZWFkb25seSBSYW5nZUVudHJ5PFRMYWJlbD5bXSB7XG4gICAgY29uc3QgbWF0Y2hlczogUmFuZ2VFbnRyeTxUTGFiZWw+W10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IGUgb2YgdGhpcy5lbnRyaWVzKSB7XG4gICAgICBpZiAoZS5zdGFydElkeCA+IGNvbW1pdElkeCkgY29udGludWU7XG4gICAgICBpZiAoZS5lbmRJZHggPT09IHVuZGVmaW5lZCB8fCBlLmVuZElkeCA+PSBjb21taXRJZHgpIHtcbiAgICAgICAgbWF0Y2hlcy5wdXNoKHRvRW50cnkoZSkpO1xuICAgICAgfVxuICAgIH1cbiAgICBtYXRjaGVzLnNvcnQob3V0ZXJUb0lubmVyQ29tcGFyYXRvcik7XG4gICAgcmV0dXJuIG1hdGNoZXM7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbGwgcmFuZ2VzIE9WRVJMQVBQSU5HIHRoZSBzbGljZSBgW3N0YXJ0SWR4LCBlbmRJZHhdYC4gQVxuICAgKiByYW5nZSBvdmVybGFwcyBpZiBpdCBzaGFyZXMgYXQgbGVhc3Qgb25lIGNvbW1pdCBwb3NpdGlvbiB3aXRoIHRoZVxuICAgKiBzbGljZS4gVXNlIGZvciBwYXJhbGxlbC1icmFuY2ggZGV0ZWN0aW9uLCB0aW1lLXdpbmRvdyBxdWVyaWVzLFxuICAgKiBvciBcIndoYXQgYm91bmRhcmllcyBmaXJlZCBkdXJpbmcgdGhpcyBzbGljZS5cIlxuICAgKlxuICAgKiBTb3J0ZWQgYnkgdGhlIFNBTUUgb3V0ZXLihpJpbm5lciBjb21wYXJhdG9yIGFzIGBlbmNsb3NpbmcoKWA6XG4gICAqIGFzY2VuZGluZyBieSBgc3RhcnRJZHhgLCB0aWVzIGJyb2tlbiBieSBkZXNjZW5kaW5nIGBlbmRJZHhgXG4gICAqICh3aWRlciA9IG91dGVyOyBvcGVuIHJhbmdlcyB0cmVhdGVkIGFzICtJbmZpbml0eSkuXG4gICAqXG4gICAqIFJldHVybnMgYSBTSEFMTE9XIElNTVVUQUJMRSBDT1BZLlxuICAgKi9cbiAgb3ZlcmxhcHBpbmcoc3RhcnRJZHg6IG51bWJlciwgZW5kSWR4OiBudW1iZXIpOiByZWFkb25seSBSYW5nZUVudHJ5PFRMYWJlbD5bXSB7XG4gICAgY29uc3QgbWF0Y2hlczogUmFuZ2VFbnRyeTxUTGFiZWw+W10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IGUgb2YgdGhpcy5lbnRyaWVzKSB7XG4gICAgICAvLyBPdmVybGFwIHRlc3Q6XG4gICAgICAvLyAgIHJhbmdlIHN0YXJ0cyBhZnRlciBzbGljZSBlbmRzIOKGkiBubyBvdmVybGFwXG4gICAgICAvLyAgIHJhbmdlIGVuZHMgKGNsb3NlZCkgYmVmb3JlIHNsaWNlIHN0YXJ0cyDihpIgbm8gb3ZlcmxhcFxuICAgICAgLy8gICBvdGhlcndpc2Ug4oaSIG92ZXJsYXAgKG9wZW4gcmFuZ2VzIGFsd2F5cyBvdmVybGFwIGlmIHRoZXkgc3RhcnQgPD0gZW5kSWR4KVxuICAgICAgaWYgKGUuc3RhcnRJZHggPiBlbmRJZHgpIGNvbnRpbnVlO1xuICAgICAgaWYgKGUuZW5kSWR4ICE9PSB1bmRlZmluZWQgJiYgZS5lbmRJZHggPCBzdGFydElkeCkgY29udGludWU7XG4gICAgICBtYXRjaGVzLnB1c2godG9FbnRyeShlKSk7XG4gICAgfVxuICAgIG1hdGNoZXMuc29ydChvdXRlclRvSW5uZXJDb21wYXJhdG9yKTtcbiAgICByZXR1cm4gbWF0Y2hlcztcbiAgfVxuXG4gIC8qKiBUb3RhbCByYW5nZSBjb3VudCAob3BlbiArIGNsb3NlZCkuICovXG4gIGdldCBzaXplKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZW50cmllcy5sZW5ndGg7XG4gIH1cblxuICAvKipcbiAgICogV2lwZSBhbGwgcmFuZ2VzICsgcmVzZXQgdGhlIHRva2VuIGNvdW50ZXIgQU5EIHJvdGF0ZSB0aGUgb3duZXJcbiAgICogc3ltYm9sIHNvIGFueSB0b2tlbiBmcm9tIGJlZm9yZSB0aGlzIGNsZWFyIGJlY29tZXMgaW52YWxpZC5cbiAgICogQ3JpdGljYWw6IHdpdGhvdXQgcm90YXRpbmcgdGhlIG93bmVyLCBhIHN0YWxlIHRva2VuIHdob3NlIGBfaWRgXG4gICAqIGhhcHBlbnMgdG8gbWF0Y2ggYSByZWN5Y2xlZCBpZCBhZnRlciBjbGVhciB3b3VsZCBzaWxlbnRseSBtdXRhdGVcbiAgICogdGhlIHdyb25nIGVudHJ5LiBPd25lciByb3RhdGlvbiBtYWtlcyBzdGFsZS10b2tlbiBjbG9zZSBhIG5vLW9wXG4gICAqIHZpYSB0aGUgYF9vd25lciAhPT0gdGhpcy5vd25lcmAgZ3VhcmQuXG4gICAqXG4gICAqIENhbGwgZnJvbSBhIGNvbnN1bWVyJ3MgcnVuSWQgZ3VhcmQgd2hlbiBhIG5ldyBydW4gc3RhcnRzIChlLmcuLFxuICAgKiBhZ2VudGZvb3RwcmludCdzIGBvYnNlcnZlUnVuSWQob25OZXdSdW4pYCBmcm9tIFBoYXNlIDIpLlxuICAgKi9cbiAgY2xlYXIoKTogdm9pZCB7XG4gICAgdGhpcy5lbnRyaWVzLmxlbmd0aCA9IDA7XG4gICAgdGhpcy5ieUlkLmNsZWFyKCk7XG4gICAgdGhpcy5uZXh0SWQgPSAwO1xuICAgIHRoaXMub3duZXIgPSBTeW1ib2woJ0NvbW1pdFJhbmdlSW5kZXgnKTtcbiAgfVxuXG4gIC8vIOKUgOKUgOKUgCBJbnRlcm5hbHMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgLyoqIE8oMSkgbG9va3VwIGJ5IHRva2VuIGlkLiBBbHdheXMgcmV0dXJucyB0aGUgZW50cnkgdGhhdCB0aGUgdG9rZW5cbiAgICogIHJlZmVyZW5jZXMgKG9yIHVuZGVmaW5lZCBpZiB0aGUgaWQgd2FzIG5ldmVyIG9wZW5lZCBpbiB0aGlzIGluZGV4KS4gKi9cbiAgcHJpdmF0ZSBmaW5kQnlJZChpZDogbnVtYmVyKTogSW50ZXJuYWxFbnRyeTxUTGFiZWw+IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5ieUlkLmdldChpZCk7XG4gIH1cbn1cblxuLyoqIFByb2plY3QgdGhlIGludGVybmFsIG11dGFibGUgc2hhcGUgaW50byB0aGUgcHVibGljIHJlYWRvbmx5IGVudHJ5LlxuICogIFRoZSBPVVRFUiBvYmplY3QgaXMgYSBmcmVzaCBhbGxvY2F0aW9uIHBlciBxdWVyeSAoc28gY2FsbGVyIGFycmF5XG4gKiAgbXV0YXRpb25zIGRvbid0IGxlYWspLiBUaGUgYGxhYmVsYCBmaWVsZCBpcyBhIFJFRkVSRU5DRSBDT1BZIOKAlFxuICogIGlmIGBUTGFiZWxgIGlzIGFuIG9iamVjdCwgbXV0YXRpbmcgaXRzIGZpZWxkcyB3aWxsIGFmZmVjdCB0aGVcbiAqICBpbnRlcm5hbCBlbnRyeSB0b28uIENvbnN1bWVycyBNVVNUIHRyZWF0IGxhYmVscyBhcyBpbW11dGFibGVcbiAqICAob3IgcGFzcyBwcmltaXRpdmVzKS4gRG9jdW1lbnRlZCBpbiB0aGUgY2xhc3MgSlNEb2MgYXMgdGhlXG4gKiAgXCJsYWJlbHMgYXJlIHN0b3JlZCB2ZXJiYXRpbVwiIGNvbnRyYWN0LiAqL1xuZnVuY3Rpb24gdG9FbnRyeTxUTGFiZWw+KGU6IEludGVybmFsRW50cnk8VExhYmVsPik6IFJhbmdlRW50cnk8VExhYmVsPiB7XG4gIHJldHVybiBlLmVuZElkeCA9PT0gdW5kZWZpbmVkXG4gICAgPyB7IGxhYmVsOiBlLmxhYmVsLCBzdGFydElkeDogZS5zdGFydElkeCB9XG4gICAgOiB7IGxhYmVsOiBlLmxhYmVsLCBzdGFydElkeDogZS5zdGFydElkeCwgZW5kSWR4OiBlLmVuZElkeCB9O1xufVxuXG4vKipcbiAqIFNoYXJlZCBvdXRlcuKGkmlubmVyIGNvbXBhcmF0b3IgZm9yIGJvdGggYGVuY2xvc2luZygpYCBhbmRcbiAqIGBvdmVybGFwcGluZygpYC4gUHJpbWFyeSBrZXk6IGBzdGFydElkeGAgYXNjZW5kaW5nLiBUaWUtYnJlYWs6XG4gKiBgZW5kSWR4YCBkZXNjZW5kaW5nICh3aWRlciByYW5nZSBpcyBvdXRlcikuIE9wZW4gcmFuZ2VzICh1bmRlZmluZWRcbiAqIGBlbmRJZHhgKSBzb3J0IGFzICtJbmZpbml0eSDihpIgb3V0ZXJtb3N0IHdoZW4gdGllZC4gRGV0ZXJtaW5pc3RpY1xuICogb3JkZXJpbmcgcmVxdWlyZWQgc28gY29uc3VtZXJzIChMZW5zIGJyZWFkY3J1bWIsIHRpbWUtdHJhdmVsIFVJcylcbiAqIG5ldmVyIHNlZSBmbGlja2VyIG9uIGVxdWFsLXN0YXJ0IGJvdW5kYXJpZXMgKGUuZy4sIGEgUGFyYWxsZWxcbiAqIHJvb3QgYW5kIGl0cyBmaXJzdCBicmFuY2ggb3BlbmluZyBhdCB0aGUgc2FtZSBjb21taXQpLlxuICovXG5mdW5jdGlvbiBvdXRlclRvSW5uZXJDb21wYXJhdG9yPFRMYWJlbD4oYTogUmFuZ2VFbnRyeTxUTGFiZWw+LCBiOiBSYW5nZUVudHJ5PFRMYWJlbD4pOiBudW1iZXIge1xuICBpZiAoYS5zdGFydElkeCAhPT0gYi5zdGFydElkeCkgcmV0dXJuIGEuc3RhcnRJZHggLSBiLnN0YXJ0SWR4O1xuICBjb25zdCBhZSA9IGEuZW5kSWR4ID8/IE51bWJlci5QT1NJVElWRV9JTkZJTklUWTtcbiAgY29uc3QgYmUgPSBiLmVuZElkeCA/PyBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7XG4gIHJldHVybiBiZSAtIGFlO1xufVxuIl19
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* CompositeRecorder — fan-out a single recorder attachment to multiple child recorders.
|
|
3
3
|
*
|
|
4
|
-
* Implements both
|
|
5
|
-
* so it works with both `executor.
|
|
4
|
+
* Implements both ScopeRecorder (scope data ops) and FlowRecorder (control flow events)
|
|
5
|
+
* so it works with both `executor.attachScopeRecorder()` and `executor.attachFlowRecorder()`.
|
|
6
6
|
*
|
|
7
7
|
* The composite has a single ID for idempotent attach/detach. Child recorders
|
|
8
8
|
* keep their own IDs internally but are not individually visible to the executor.
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
* new DebugRecorder({ verbosity: 'minimal' }),
|
|
21
21
|
* ]);
|
|
22
22
|
*
|
|
23
|
-
* executor.
|
|
23
|
+
* executor.attachScopeRecorder(observability);
|
|
24
24
|
*
|
|
25
25
|
* // Access child recorders by type
|
|
26
26
|
* const metrics = observability.get(MetricRecorder);
|
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
* }
|
|
40
40
|
*
|
|
41
41
|
* // Consumer
|
|
42
|
-
* executor.
|
|
42
|
+
* executor.attachScopeRecorder(agentObservability());
|
|
43
43
|
* ```
|
|
44
44
|
*/
|
|
45
45
|
export class CompositeRecorder {
|
|
@@ -65,7 +65,7 @@ export class CompositeRecorder {
|
|
|
65
65
|
getChildren() {
|
|
66
66
|
return this.children;
|
|
67
67
|
}
|
|
68
|
-
// ── Scope
|
|
68
|
+
// ── Scope ScopeRecorder hooks (fan-out to children that implement ScopeRecorder) ─
|
|
69
69
|
onRead(event) {
|
|
70
70
|
for (const c of this.children)
|
|
71
71
|
if (c.onRead)
|
|
@@ -171,4 +171,4 @@ export class CompositeRecorder {
|
|
|
171
171
|
};
|
|
172
172
|
}
|
|
173
173
|
}
|
|
174
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29tcG9zaXRlUmVjb3JkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3JlY29yZGVyL0NvbXBvc2l0ZVJlY29yZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMkNHO0FBeUJILE1BQU0sT0FBTyxpQkFBaUI7SUFDbkIsRUFBRSxDQUFTO0lBQ0gsUUFBUSxDQUFpQztJQUUxRCxZQUFZLEVBQVUsRUFBRSxRQUF3QztRQUM5RCxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztRQUNiLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCx5RUFBeUU7SUFFekU7Ozs7Ozs7T0FPRztJQUNILEdBQUcsQ0FBSSxJQUErQjtRQUNwQyxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFlBQVksSUFBSSxDQUFrQixDQUFDO0lBQ3ZFLENBQUM7SUFFRCwrQkFBK0I7SUFDL0IsV0FBVztRQUNULE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN2QixDQUFDO0lBRUQsMEVBQTBFO0lBRTFFLE1BQU0sQ0FBQyxLQUFnQjtRQUNyQixLQUFLLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRO1lBQUUsSUFBSyxDQUFjLENBQUMsTUFBTTtnQkFBRyxDQUFjLENBQUMsTUFBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzVGLENBQUM7SUFFRCxPQUFPLENBQUMsS0FBaUI7UUFDdkIsS0FBSyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUTtZQUFFLElBQUssQ0FBYyxDQUFDLE9BQU87Z0JBQUcsQ0FBYyxDQUFDLE9BQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM5RixDQUFDO0lBRUQsUUFBUSxDQUFD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LENBQUMsS0FBSyxDQUFDLENBQUM7SUFDcEcsQ0FBQztJQUVELE9BQU8sQ0FBQyxLQUFxQjtRQUMzQixLQUFLLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRO1lBQUUsSUFBSyxDQUFrQixDQUFDLE9BQU87Z0JBQUcsQ0FBa0IsQ0FBQyxPQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdEcsQ0FBQztJQUVELHlFQUF5RTtJQUV6RSxLQUFLO1FBQ0gsS0FBSyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUTtZQUFFLElBQUksQ0FBQyxDQUFDLEtBQUs7Z0JBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3hELENBQUM7SUFFRDs7O09BR0c7SUFDSCxVQUFVO1FBQ1IsTUFBTSxjQUFjLEdBQXVELEVBQUUsQ0FBQztRQUM5RSxLQUFLLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUM5QixJQUFJLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDakIsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUM7Z0JBQ3RDLGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUNoRCxDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU87WUFDTCxJQUFJLEVBQUUsV0FBVztZQUNqQixJQUFJLEVBQUUsRUFBRSxRQUFRLEVBQUUsY0FBYyxFQUFFO1NBQ25DLENBQUM7SUFDSixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvbXBvc2l0ZVJlY29yZGVyIOKAlCBmYW4tb3V0IGEgc2luZ2xlIHJlY29yZGVyIGF0dGFjaG1lbnQgdG8gbXVsdGlwbGUgY2hpbGQgcmVjb3JkZXJzLlxuICpcbiAqIEltcGxlbWVudHMgYm90aCBSZWNvcmRlciAoc2NvcGUgZGF0YSBvcHMpIGFuZCBGbG93UmVjb3JkZXIgKGNvbnRyb2wgZmxvdyBldmVudHMpXG4gKiBzbyBpdCB3b3JrcyB3aXRoIGJvdGggYGV4ZWN1dG9yLmF0dGFjaFJlY29yZGVyKClgIGFuZCBgZXhlY3V0b3IuYXR0YWNoRmxvd1JlY29yZGVyKClgLlxuICpcbiAqIFRoZSBjb21wb3NpdGUgaGFzIGEgc2luZ2xlIElEIGZvciBpZGVtcG90ZW50IGF0dGFjaC9kZXRhY2guIENoaWxkIHJlY29yZGVyc1xuICoga2VlcCB0aGVpciBvd24gSURzIGludGVybmFsbHkgYnV0IGFyZSBub3QgaW5kaXZpZHVhbGx5IHZpc2libGUgdG8gdGhlIGV4ZWN1dG9yLlxuICpcbiAqIERvbWFpbiBsaWJyYXJpZXMgKGUuZy4sIGFnZW50Zm9vdHByaW50KSB1c2UgdGhpcyB0byBidW5kbGUgbXVsdGlwbGUgcmVjb3JkZXJzXG4gKiBpbnRvIGEgc2luZ2xlIHByZXNldCDigJQgdGhlIGNvbnN1bWVyIGNhbGxzIG9uZSBmdW5jdGlvbiwgZ2V0cyBmdWxsIG9ic2VydmFiaWxpdHkuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGltcG9ydCB7IENvbXBvc2l0ZVJlY29yZGVyLCBNZXRyaWNSZWNvcmRlciwgRGVidWdSZWNvcmRlciB9IGZyb20gJ2Zvb3RwcmludGpzJztcbiAqXG4gKiAvLyBCdW5kbGUgbWV0cmljcyArIGRlYnVnIGludG8gYSBzaW5nbGUgcmVjb3JkZXJcbiAqIGNvbnN0IG9ic2VydmFiaWxpdHkgPSBuZXcgQ29tcG9zaXRlUmVjb3JkZXIoJ29ic2VydmFiaWxpdHknLCBbXG4gKiAgIG5ldyBNZXRyaWNSZWNvcmRlcih7IHN0YWdlRmlsdGVyOiAobmFtZSkgPT4gbmFtZSA9PT0gJ0NhbGxMTE0nIH0pLFxuICogICBuZXcgRGVidWdSZWNvcmRlcih7IHZlcmJvc2l0eTogJ21pbmltYWwnIH0pLFxuICogXSk7XG4gKlxuICogZXhlY3V0b3IuYXR0YWNoUmVjb3JkZXIob2JzZXJ2YWJpbGl0eSk7XG4gKlxuICogLy8gQWNjZXNzIGNoaWxkIHJlY29yZGVycyBieSB0eXBlXG4gKiBjb25zdCBtZXRyaWNzID0gb2JzZXJ2YWJpbGl0eS5nZXQoTWV0cmljUmVjb3JkZXIpO1xuICogbWV0cmljcz8uZ2V0TWV0cmljcygpOyAvLyB0aW1pbmcgZGF0YVxuICogYGBgXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC8vIERvbWFpbiBsaWJyYXJ5IHByZXNldCAoZS5nLiwgYWdlbnRmb290cHJpbnQpXG4gKiBleHBvcnQgZnVuY3Rpb24gYWdlbnRPYnNlcnZhYmlsaXR5KG9wdGlvbnM/OiBBZ2VudE9ic2VydmFiaWxpdHlPcHRpb25zKSB7XG4gKiAgIHJldHVybiBuZXcgQ29tcG9zaXRlUmVjb3JkZXIoJ2FnZW50LW9ic2VydmFiaWxpdHknLCBbXG4gKiAgICAgbmV3IE1ldHJpY1JlY29yZGVyKG9wdGlvbnM/LnN0YWdlRmlsdGVyID8geyBzdGFnZUZpbHRlcjogb3B0aW9ucy5zdGFnZUZpbHRlciB9IDogdW5kZWZpbmVkKSxcbiAqICAgICBuZXcgVG9rZW5SZWNvcmRlcigpLFxuICogICAgIG5ldyBUb29sVXNhZ2VSZWNvcmRlcigpLFxuICogICBdKTtcbiAqIH1cbiAqXG4gKiAvLyBDb25zdW1lclxuICogZXhlY3V0b3IuYXR0YWNoUmVjb3JkZXIoYWdlbnRPYnNlcnZhYmlsaXR5KCkpO1xuICogYGBgXG4gKi9cblxuaW1wb3J0IHR5cGUge1xuICBGbG93QnJlYWtFdmVudCxcbiAgRmxvd0RlY2lzaW9uRXZlbnQsXG4gIEZsb3dFcnJvckV2ZW50LFxuICBGbG93Rm9ya0V2ZW50LFxuICBGbG93TG9vcEV2ZW50LFxuICBGbG93TmV4dEV2ZW50LFxuICBGbG93UmVjb3JkZXIsXG4gIEZsb3dTZWxlY3RlZEV2ZW50LFxuICBGbG93U3RhZ2VFdmVudCxcbiAgRmxvd1N1YmZsb3dFdmVudCxcbiAgRmxvd1N1YmZsb3dSZWdpc3RlcmVkRXZlbnQsXG59IGZyb20gJy4uL2VuZ2luZS9uYXJyYXRpdmUvdHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBDb21taXRFdmVudCwgRXJyb3JFdmVudCwgUmVhZEV2ZW50LCBSZWNvcmRlciwgU3RhZ2VFdmVudCwgV3JpdGVFdmVudCB9IGZyb20gJy4uL3Njb3BlL3R5cGVzLmpzJztcblxuLyoqIFNuYXBzaG90IGZvcm1hdCBmb3IgY29tcG9zaXRlIHJlY29yZGVycyDigJQgd3JhcHMgY2hpbGQgc25hcHNob3RzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb21wb3NpdGVTbmFwc2hvdCB7XG4gIG5hbWU6IHN0cmluZztcbiAgZGF0YToge1xuICAgIGNoaWxkcmVuOiBBcnJheTx7IGlkOiBzdHJpbmc7IG5hbWU6IHN0cmluZzsgZGF0YTogdW5rbm93biB9PjtcbiAgfTtcbn1cblxuZXhwb3J0IGNsYXNzIENvbXBvc2l0ZVJlY29yZGVyIGltcGxlbWVudHMgUmVjb3JkZXIsIEZsb3dSZWNvcmRlciB7XG4gIHJlYWRvbmx5IGlkOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgY2hpbGRyZW46IEFycmF5PFJlY29yZGVyIHwgRmxvd1JlY29yZGVyPjtcblxuICBjb25zdHJ1Y3RvcihpZDogc3RyaW5nLCBjaGlsZHJlbjogQXJyYXk8UmVjb3JkZXIgfCBGbG93UmVjb3JkZXI+KSB7XG4gICAgdGhpcy5pZCA9IGlkO1xuICAgIHRoaXMuY2hpbGRyZW4gPSBbLi4uY2hpbGRyZW5dO1xuICB9XG5cbiAgLy8g4pSA4pSAIENoaWxkIGFjY2VzcyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICAvKipcbiAgICogR2V0IGEgY2hpbGQgcmVjb3JkZXIgYnkgY2xhc3MgdHlwZS5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCBtZXRyaWNzID0gY29tcG9zaXRlLmdldChNZXRyaWNSZWNvcmRlcik7XG4gICAqIGBgYFxuICAgKi9cbiAgZ2V0PFQ+KHR5cGU6IG5ldyAoLi4uYXJnczogYW55W10pID0+IFQpOiBUIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5jaGlsZHJlbi5maW5kKChjKSA9PiBjIGluc3RhbmNlb2YgdHlwZSkgYXMgVCB8IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKiBHZXQgYWxsIGNoaWxkIHJlY29yZGVycy4gKi9cbiAgZ2V0Q2hpbGRyZW4oKTogUmVhZG9ubHlBcnJheTxSZWNvcmRlciB8IEZsb3dSZWNvcmRlcj4ge1xuICAgIHJldHVybiB0aGlzLmNoaWxkcmVuO1xuICB9XG5cbiAgLy8g4pSA4pSAIFNjb3BlIFJlY29yZGVyIGhvb2tzIChmYW4tb3V0IHRvIGNoaWxkcmVuIHRoYXQgaW1wbGVtZW50IFJlY29yZGVyKSDilIBcblxuICBvblJlYWQoZXZlbnQ6IFJlYWRFdmVudCk6IHZvaWQge1xuICAgIGZvciAoY29uc3QgYyBvZiB0aGlzLmNoaWxkcmVuKSBpZiAoKGMgYXMgUmVjb3JkZXIpLm9uUmVhZCkgKGMgYXMgUmVjb3JkZXIpLm9uUmVhZCEoZXZlbnQpO1xuICB9XG5cbiAgb25Xcml0ZShldmVudDogV3JpdGVFdmVudCk6IHZvaWQge1xuICAgIGZvciAoY29uc3QgYyBvZiB0aGlzLmNoaWxkcmVuKSBpZiAoKGMgYXMgUmVjb3JkZXIpLm9uV3JpdGUpIChjIGFzIFJlY29yZGVyKS5vbldyaXRlIShldmVudCk7XG4gIH1cblxuICBvbkNvbW1pdChldmVudDogQ29tbWl0RXZlbnQpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGMgb2YgdGhpcy5jaGlsZHJlbikgaWYgKChjIGFzIFJlY29yZGVyKS5vbkNvbW1pdCkgKGMgYXMgUmVjb3JkZXIpLm9uQ29tbWl0IShldmVudCk7XG4gIH1cblxuICBvbkVycm9yKGV2ZW50OiBFcnJvckV2ZW50IHwgRmxvd0Vycm9yRXZlbnQpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGMgb2YgdGhpcy5jaGlsZHJlbikgaWYgKChjIGFzIFJlY29yZGVyKS5vbkVycm9yKSAoYyBhcyBSZWNvcmRlcikub25FcnJvciEoZXZlbnQgYXMgYW55KTtcbiAgfVxuXG4gIG9uU3RhZ2VTdGFydChldmVudDogU3RhZ2VFdmVudCk6IHZvaWQge1xuICAgIGZvciAoY29uc3QgYyBvZiB0aGlzLmNoaWxkcmVuKSBpZiAoKGMgYXMgUmVjb3JkZXIpLm9uU3RhZ2VTdGFydCkgKGMgYXMgUmVjb3JkZXIpLm9uU3RhZ2VTdGFydCEoZXZlbnQpO1xuICB9XG5cbiAgb25TdGFnZUVuZChldmVudDogU3RhZ2VFdmVudCk6IHZvaWQge1xuICAgIGZvciAoY29uc3QgYyBvZiB0aGlzLmNoaWxkcmVuKSBpZiAoKGMgYXMgUmVjb3JkZXIpLm9uU3RhZ2VFbmQpIChjIGFzIFJlY29yZGVyKS5vblN0YWdlRW5kIShldmVudCk7XG4gIH1cblxuICAvLyDilIDilIAgRmxvd1JlY29yZGVyIGhvb2tzIChmYW4tb3V0IHRvIGNoaWxkcmVuIHRoYXQgaW1wbGVtZW50IEZsb3dSZWNvcmRlcikg4pSAXG5cbiAgb25TdGFnZUV4ZWN1dGVkKGV2ZW50OiBGbG93U3RhZ2VFdmVudCk6IHZvaWQge1xuICAgIGZvciAoY29uc3QgYyBvZiB0aGlzLmNoaWxkcmVuKSBpZiAoKGMgYXMgRmxvd1JlY29yZGVyKS5vblN0YWdlRXhlY3V0ZWQpIChjIGFzIEZsb3dSZWNvcmRlcikub25TdGFnZUV4ZWN1dGVkIShldmVudCk7XG4gIH1cblxuICBvbk5leHQoZXZlbnQ6IEZsb3dOZXh0RXZlbnQpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGMgb2YgdGhpcy5jaGlsZHJlbikgaWYgKChjIGFzIEZsb3dSZWNvcmRlcikub25OZXh0KSAoYyBhcyBGbG93UmVjb3JkZXIpLm9uTmV4dCEoZXZlbnQpO1xuICB9XG5cbiAgb25EZWNpc2lvbihldmVudDogRmxvd0RlY2lzaW9uRXZlbnQpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGMgb2YgdGhpcy5jaGlsZHJlbikgaWYgKChjIGFzIEZsb3dSZWNvcmRlcikub25EZWNpc2lvbikgKGMgYXMgRmxvd1JlY29yZGVyKS5vbkRlY2lzaW9uIShldmVudCk7XG4gIH1cblxuICBvbkZvcmsoZXZlbnQ6IEZsb3dGb3JrRXZlbnQpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGMgb2YgdGhpcy5jaGlsZHJlbikgaWYgKChjIGFzIEZsb3dSZWNvcmRlcikub25Gb3JrKSAoYyBhcyBGbG93UmVjb3JkZXIpLm9uRm9yayEoZXZlbnQpO1xuICB9XG5cbiAgb25TZWxlY3RlZChldmVudDogRmxvd1NlbGVjdGVkRXZlbnQpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGMgb2YgdGhpcy5jaGlsZHJlbikgaWYgKChjIGFzIEZsb3dSZWNvcmRlcikub25TZWxlY3RlZCkgKGMgYXMgRmxvd1JlY29yZGVyKS5vblNlbGVjdGVkIShldmVudCk7XG4gIH1cblxuICBvblN1YmZsb3dFbnRyeShldmVudDogRmxvd1N1YmZsb3dFdmVudCk6IHZvaWQge1xuICAgIGZvciAoY29uc3QgYyBvZiB0aGlzLmNoaWxkcmVuKSBpZiAoKGMgYXMgRmxvd1JlY29yZGVyKS5vblN1YmZsb3dFbnRyeSkgKGMgYXMgRmxvd1JlY29yZGVyKS5vblN1YmZsb3dFbnRyeSEoZXZlbnQpO1xuICB9XG5cbiAgb25TdWJmbG93RXhpdChldmVudDogRmxvd1N1YmZsb3dFdmVudCk6IHZvaWQge1xuICAgIGZvciAoY29uc3QgYyBvZiB0aGlzLmNoaWxkcmVuKSBpZiAoKGMgYXMgRmxvd1JlY29yZGVyKS5vblN1YmZsb3dFeGl0KSAoYyBhcyBGbG93UmVjb3JkZXIpLm9uU3ViZmxvd0V4aXQhKGV2ZW50KTtcbiAgfVxuXG4gIG9uU3ViZmxvd1JlZ2lzdGVyZWQoZXZlbnQ6IEZsb3dTdWJmbG93UmVnaXN0ZXJlZEV2ZW50KTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBjIG9mIHRoaXMuY2hpbGRyZW4pXG4gICAgICBpZiAoKGMgYXMgRmxvd1JlY29yZGVyKS5vblN1YmZsb3dSZWdpc3RlcmVkKSAoYyBhcyBGbG93UmVjb3JkZXIpLm9uU3ViZmxvd1JlZ2lzdGVyZWQhKGV2ZW50KTtcbiAgfVxuXG4gIG9uTG9vcChldmVudDogRmxvd0xvb3BFdmVudCk6IHZvaWQge1xuICAgIGZvciAoY29uc3QgYyBvZiB0aGlzLmNoaWxkcmVuKSBpZiAoKGMgYXMgRmxvd1JlY29yZGVyKS5vbkxvb3ApIChjIGFzIEZsb3dSZWNvcmRlcikub25Mb29wIShldmVudCk7XG4gIH1cblxuICBvbkJyZWFrKGV2ZW50OiBGbG93QnJlYWtFdmVudCk6IHZvaWQge1xuICAgIGZvciAoY29uc3QgYyBvZiB0aGlzLmNoaWxkcmVuKSBpZiAoKGMgYXMgRmxvd1JlY29yZGVyKS5vbkJyZWFrKSAoYyBhcyBGbG93UmVjb3JkZXIpLm9uQnJlYWshKGV2ZW50KTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBMaWZlY3ljbGUg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgY2xlYXIoKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBjIG9mIHRoaXMuY2hpbGRyZW4pIGlmIChjLmNsZWFyKSBjLmNsZWFyKCk7XG4gIH1cblxuICAvKipcbiAgICogU25hcHNob3QgbWVyZ2VzIGFsbCBjaGlsZCBzbmFwc2hvdHMgaW50byBhIHNpbmdsZSBjb21wb3NpdGUgZW50cnkuXG4gICAqIEVhY2ggY2hpbGQncyBzbmFwc2hvdCBpcyBwcmVzZXJ2ZWQgd2l0aCBpdHMgb3duIGlkL25hbWUvZGF0YS5cbiAgICovXG4gIHRvU25hcHNob3QoKTogQ29tcG9zaXRlU25hcHNob3Qge1xuICAgIGNvbnN0IGNoaWxkU25hcHNob3RzOiBBcnJheTx7IGlkOiBzdHJpbmc7IG5hbWU6IHN0cmluZzsgZGF0YTogdW5rbm93biB9PiA9IFtdO1xuICAgIGZvciAoY29uc3QgYyBvZiB0aGlzLmNoaWxkcmVuKSB7XG4gICAgICBpZiAoYy50b1NuYXBzaG90KSB7XG4gICAgICAgIGNvbnN0IHsgbmFtZSwgZGF0YSB9ID0gYy50b1NuYXBzaG90KCk7XG4gICAgICAgIGNoaWxkU25hcHNob3RzLnB1c2goeyBpZDogYy5pZCwgbmFtZSwgZGF0YSB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6ICdDb21wb3NpdGUnLFxuICAgICAgZGF0YTogeyBjaGlsZHJlbjogY2hpbGRTbmFwc2hvdHMgfSxcbiAgICB9O1xuICB9XG59XG4iXX0=
|
|
174
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29tcG9zaXRlUmVjb3JkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3JlY29yZGVyL0NvbXBvc2l0ZVJlY29yZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMkNHO0FBeUJILE1BQU0sT0FBTyxpQkFBaUI7SUFDbkIsRUFBRSxDQUFTO0lBQ0gsUUFBUSxDQUFzQztJQUUvRCxZQUFZLEVBQVUsRUFBRSxRQUE2QztRQUNuRSxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztRQUNiLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCx5RUFBeUU7SUFFekU7Ozs7Ozs7T0FPRztJQUNILEdBQUcsQ0FBSSxJQUErQjtRQUNwQyxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFlBQVksSUFBSSxDQUFrQixDQUFDO0lBQ3ZFLENBQUM7SUFFRCwrQkFBK0I7SUFDL0IsV0FBVztRQUNULE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN2QixDQUFDO0lBRUQsb0ZBQW9GO0lBRXBGLE1BQU0sQ0FBQyxLQUFnQjtRQUNyQixLQUFLLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRO1lBQUUsSUFBSyxDQUFtQixDQUFDLE1BQU07Z0JBQUcsQ0FBbUIsQ0FBQyxNQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdEcsQ0FBQztJQUVELE9BQU8sQ0FBQyxLQUFpQjtRQUN2QixLQUFLLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRO1lBQUUsSUFBSyxDQUFtQixDQUFDLE9BQU87Z0JBQUcsQ0FBbUIsQ0FBQyxPQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDeEcsQ0FBQztJQUVELFFBQVEs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a0IsQ0FBQyxNQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDcEcsQ0FBQztJQUVELE9BQU8sQ0FBQyxLQUFxQjtRQUMzQixLQUFLLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRO1lBQUUsSUFBSyxDQUFrQixDQUFDLE9BQU87Z0JBQUcsQ0FBa0IsQ0FBQyxPQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdEcsQ0FBQztJQUVELHlFQUF5RTtJQUV6RSxLQUFLO1FBQ0gsS0FBSyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUTtZQUFFLElBQUksQ0FBQyxDQUFDLEtBQUs7Z0JBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3hELENBQUM7SUFFRDs7O09BR0c7SUFDSCxVQUFVO1FBQ1IsTUFBTSxjQUFjLEdBQXVELEVBQUUsQ0FBQztRQUM5RSxLQUFLLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUM5QixJQUFJLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDakIsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUM7Z0JBQ3RDLGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUNoRCxDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU87WUFDTCxJQUFJLEVBQUUsV0FBVztZQUNqQixJQUFJLEVBQUUsRUFBRSxRQUFRLEVBQUUsY0FBYyxFQUFFO1NBQ25DLENBQUM7SUFDSixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvbXBvc2l0ZVJlY29yZGVyIOKAlCBmYW4tb3V0IGEgc2luZ2xlIHJlY29yZGVyIGF0dGFjaG1lbnQgdG8gbXVsdGlwbGUgY2hpbGQgcmVjb3JkZXJzLlxuICpcbiAqIEltcGxlbWVudHMgYm90aCBTY29wZVJlY29yZGVyIChzY29wZSBkYXRhIG9wcykgYW5kIEZsb3dSZWNvcmRlciAoY29udHJvbCBmbG93IGV2ZW50cylcbiAqIHNvIGl0IHdvcmtzIHdpdGggYm90aCBgZXhlY3V0b3IuYXR0YWNoU2NvcGVSZWNvcmRlcigpYCBhbmQgYGV4ZWN1dG9yLmF0dGFjaEZsb3dSZWNvcmRlcigpYC5cbiAqXG4gKiBUaGUgY29tcG9zaXRlIGhhcyBhIHNpbmdsZSBJRCBmb3IgaWRlbXBvdGVudCBhdHRhY2gvZGV0YWNoLiBDaGlsZCByZWNvcmRlcnNcbiAqIGtlZXAgdGhlaXIgb3duIElEcyBpbnRlcm5hbGx5IGJ1dCBhcmUgbm90IGluZGl2aWR1YWxseSB2aXNpYmxlIHRvIHRoZSBleGVjdXRvci5cbiAqXG4gKiBEb21haW4gbGlicmFyaWVzIChlLmcuLCBhZ2VudGZvb3RwcmludCkgdXNlIHRoaXMgdG8gYnVuZGxlIG11bHRpcGxlIHJlY29yZGVyc1xuICogaW50byBhIHNpbmdsZSBwcmVzZXQg4oCUIHRoZSBjb25zdW1lciBjYWxscyBvbmUgZnVuY3Rpb24sIGdldHMgZnVsbCBvYnNlcnZhYmlsaXR5LlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQgeyBDb21wb3NpdGVSZWNvcmRlciwgTWV0cmljUmVjb3JkZXIsIERlYnVnUmVjb3JkZXIgfSBmcm9tICdmb290cHJpbnRqcyc7XG4gKlxuICogLy8gQnVuZGxlIG1ldHJpY3MgKyBkZWJ1ZyBpbnRvIGEgc2luZ2xlIHJlY29yZGVyXG4gKiBjb25zdCBvYnNlcnZhYmlsaXR5ID0gbmV3IENvbXBvc2l0ZVJlY29yZGVyKCdvYnNlcnZhYmlsaXR5JywgW1xuICogICBuZXcgTWV0cmljUmVjb3JkZXIoeyBzdGFnZUZpbHRlcjogKG5hbWUpID0+IG5hbWUgPT09ICdDYWxsTExNJyB9KSxcbiAqICAgbmV3IERlYnVnUmVjb3JkZXIoeyB2ZXJib3NpdHk6ICdtaW5pbWFsJyB9KSxcbiAqIF0pO1xuICpcbiAqIGV4ZWN1dG9yLmF0dGFjaFNjb3BlUmVjb3JkZXIob2JzZXJ2YWJpbGl0eSk7XG4gKlxuICogLy8gQWNjZXNzIGNoaWxkIHJlY29yZGVycyBieSB0eXBlXG4gKiBjb25zdCBtZXRyaWNzID0gb2JzZXJ2YWJpbGl0eS5nZXQoTWV0cmljUmVjb3JkZXIpO1xuICogbWV0cmljcz8uZ2V0TWV0cmljcygpOyAvLyB0aW1pbmcgZGF0YVxuICogYGBgXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC8vIERvbWFpbiBsaWJyYXJ5IHByZXNldCAoZS5nLiwgYWdlbnRmb290cHJpbnQpXG4gKiBleHBvcnQgZnVuY3Rpb24gYWdlbnRPYnNlcnZhYmlsaXR5KG9wdGlvbnM/OiBBZ2VudE9ic2VydmFiaWxpdHlPcHRpb25zKSB7XG4gKiAgIHJldHVybiBuZXcgQ29tcG9zaXRlUmVjb3JkZXIoJ2FnZW50LW9ic2VydmFiaWxpdHknLCBbXG4gKiAgICAgbmV3IE1ldHJpY1JlY29yZGVyKG9wdGlvbnM/LnN0YWdlRmlsdGVyID8geyBzdGFnZUZpbHRlcjogb3B0aW9ucy5zdGFnZUZpbHRlciB9IDogdW5kZWZpbmVkKSxcbiAqICAgICBuZXcgVG9rZW5SZWNvcmRlcigpLFxuICogICAgIG5ldyBUb29sVXNhZ2VSZWNvcmRlcigpLFxuICogICBdKTtcbiAqIH1cbiAqXG4gKiAvLyBDb25zdW1lclxuICogZXhlY3V0b3IuYXR0YWNoU2NvcGVSZWNvcmRlcihhZ2VudE9ic2VydmFiaWxpdHkoKSk7XG4gKiBgYGBcbiAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIEZsb3dCcmVha0V2ZW50LFxuICBGbG93RGVjaXNpb25FdmVudCxcbiAgRmxvd0Vycm9yRXZlbnQsXG4gIEZsb3dGb3JrRXZlbnQsXG4gIEZsb3dMb29wRXZlbnQsXG4gIEZsb3dOZXh0RXZlbnQsXG4gIEZsb3dSZWNvcmRlcixcbiAgRmxvd1NlbGVjdGVkRXZlbnQsXG4gIEZsb3dTdGFnZUV2ZW50LFxuICBGbG93U3ViZmxvd0V2ZW50LFxuICBGbG93U3ViZmxvd1JlZ2lzdGVyZWRFdmVudCxcbn0gZnJvbSAnLi4vZW5naW5lL25hcnJhdGl2ZS90eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IENvbW1pdEV2ZW50LCBFcnJvckV2ZW50LCBSZWFkRXZlbnQsIFNjb3BlUmVjb3JkZXIsIFN0YWdlRXZlbnQsIFdyaXRlRXZlbnQgfSBmcm9tICcuLi9zY29wZS90eXBlcy5qcyc7XG5cbi8qKiBTbmFwc2hvdCBmb3JtYXQgZm9yIGNvbXBvc2l0ZSByZWNvcmRlcnMg4oCUIHdyYXBzIGNoaWxkIHNuYXBzaG90cy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcG9zaXRlU25hcHNob3Qge1xuICBuYW1lOiBzdHJpbmc7XG4gIGRhdGE6IHtcbiAgICBjaGlsZHJlbjogQXJyYXk8eyBpZDogc3RyaW5nOyBuYW1lOiBzdHJpbmc7IGRhdGE6IHVua25vd24gfT47XG4gIH07XG59XG5cbmV4cG9ydCBjbGFzcyBDb21wb3NpdGVSZWNvcmRlciBpbXBsZW1lbnRzIFNjb3BlUmVjb3JkZXIsIEZsb3dSZWNvcmRlciB7XG4gIHJlYWRvbmx5IGlkOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgY2hpbGRyZW46IEFycmF5PFNjb3BlUmVjb3JkZXIgfCBGbG93UmVjb3JkZXI+O1xuXG4gIGNvbnN0cnVjdG9yKGlkOiBzdHJpbmcsIGNoaWxkcmVuOiBBcnJheTxTY29wZVJlY29yZGVyIHwgRmxvd1JlY29yZGVyPikge1xuICAgIHRoaXMuaWQgPSBpZDtcbiAgICB0aGlzLmNoaWxkcmVuID0gWy4uLmNoaWxkcmVuXTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBDaGlsZCBhY2Nlc3Mg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgLyoqXG4gICAqIEdldCBhIGNoaWxkIHJlY29yZGVyIGJ5IGNsYXNzIHR5cGUuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY29uc3QgbWV0cmljcyA9IGNvbXBvc2l0ZS5nZXQoTWV0cmljUmVjb3JkZXIpO1xuICAgKiBgYGBcbiAgICovXG4gIGdldDxUPih0eXBlOiBuZXcgKC4uLmFyZ3M6IGFueVtdKSA9PiBUKTogVCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuY2hpbGRyZW4uZmluZCgoYykgPT4gYyBpbnN0YW5jZW9mIHR5cGUpIGFzIFQgfCB1bmRlZmluZWQ7XG4gIH1cblxuICAvKiogR2V0IGFsbCBjaGlsZCByZWNvcmRlcnMuICovXG4gIGdldENoaWxkcmVuKCk6IFJlYWRvbmx5QXJyYXk8U2NvcGVSZWNvcmRlciB8IEZsb3dSZWNvcmRlcj4ge1xuICAgIHJldHVybiB0aGlzLmNoaWxkcmVuO1xuICB9XG5cbiAgLy8g4pSA4pSAIFNjb3BlIFNjb3BlUmVjb3JkZXIgaG9va3MgKGZhbi1vdXQgdG8gY2hpbGRyZW4gdGhhdCBpbXBsZW1lbnQgU2NvcGVSZWNvcmRlcikg4pSAXG5cbiAgb25SZWFkKGV2ZW50OiBSZWFkRXZlbnQpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGMgb2YgdGhpcy5jaGlsZHJlbikgaWYgKChjIGFzIFNjb3BlUmVjb3JkZXIpLm9uUmVhZCkgKGMgYXMgU2NvcGVSZWNvcmRlcikub25SZWFkIShldmVudCk7XG4gIH1cblxuICBvbldyaXRlKGV2ZW50OiBXcml0ZUV2ZW50KTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBjIG9mIHRoaXMuY2hpbGRyZW4pIGlmICgoYyBhcyBTY29wZVJlY29yZGVyKS5vbldyaXRlKSAoYyBhcyBTY29wZVJlY29yZGVyKS5vbldyaXRlIShldmVudCk7XG4gIH1cblxuICBvbkNvbW1pdChldmVudDogQ29tbWl0RXZlbnQpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGMgb2YgdGhpcy5jaGlsZHJlbikgaWYgKChjIGFzIFNjb3BlUmVjb3JkZXIpLm9uQ29tbWl0KSAoYyBhcyBTY29wZVJlY29yZGVyKS5vbkNvbW1pdCEoZXZlbnQpO1xuICB9XG5cbiAgb25FcnJvcihldmVudDogRXJyb3JFdmVudCB8IEZsb3dFcnJvckV2ZW50KTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBjIG9mIHRoaXMuY2hpbGRyZW4pIGlmICgoYyBhcyBTY29wZVJlY29yZGVyKS5vbkVycm9yKSAoYyBhcyBTY29wZVJlY29yZGVyKS5vbkVycm9yIShldmVudCBhcyBhbnkpO1xuICB9XG5cbiAgb25TdGFnZVN0YXJ0KGV2ZW50OiBTdGFnZUV2ZW50KTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBjIG9mIHRoaXMuY2hpbGRyZW4pIGlmICgoYyBhcyBTY29wZVJlY29yZGVyKS5vblN0YWdlU3RhcnQpIChjIGFzIFNjb3BlUmVjb3JkZXIpLm9uU3RhZ2VTdGFydCEoZXZlbnQpO1xuICB9XG5cbiAgb25TdGFnZUVuZChldmVudDogU3RhZ2VFdmVudCk6IHZvaWQge1xuICAgIGZvciAoY29uc3QgYyBvZiB0aGlzLmNoaWxkcmVuKSBpZiAoKGMgYXMgU2NvcGVSZWNvcmRlcikub25TdGFnZUVuZCkgKGMgYXMgU2NvcGVSZWNvcmRlcikub25TdGFnZUVuZCEoZXZlbnQpO1xuICB9XG5cbiAgLy8g4pSA4pSAIEZsb3dSZWNvcmRlciBob29rcyAoZmFuLW91dCB0byBjaGlsZHJlbiB0aGF0IGltcGxlbWVudCBGbG93UmVjb3JkZXIpIOKUgFxuXG4gIG9uU3RhZ2VFeGVjdXRlZChldmVudDogRmxvd1N0YWdlRXZlbnQpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGMgb2YgdGhpcy5jaGlsZHJlbikgaWYgKChjIGFzIEZsb3dSZWNvcmRlcikub25TdGFnZUV4ZWN1dGVkKSAoYyBhcyBGbG93UmVjb3JkZXIpLm9uU3RhZ2VFeGVjdXRlZCEoZXZlbnQpO1xuICB9XG5cbiAgb25OZXh0KGV2ZW50OiBGbG93TmV4dEV2ZW50KTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBjIG9mIHRoaXMuY2hpbGRyZW4pIGlmICgoYyBhcyBGbG93UmVjb3JkZXIpLm9uTmV4dCkgKGMgYXMgRmxvd1JlY29yZGVyKS5vbk5leHQhKGV2ZW50KTtcbiAgfVxuXG4gIG9uRGVjaXNpb24oZXZlbnQ6IEZsb3dEZWNpc2lvbkV2ZW50KTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBjIG9mIHRoaXMuY2hpbGRyZW4pIGlmICgoYyBhcyBGbG93UmVjb3JkZXIpLm9uRGVjaXNpb24pIChjIGFzIEZsb3dSZWNvcmRlcikub25EZWNpc2lvbiEoZXZlbnQpO1xuICB9XG5cbiAgb25Gb3JrKGV2ZW50OiBGbG93Rm9ya0V2ZW50KTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBjIG9mIHRoaXMuY2hpbGRyZW4pIGlmICgoYyBhcyBGbG93UmVjb3JkZXIpLm9uRm9yaykgKGMgYXMgRmxvd1JlY29yZGVyKS5vbkZvcmshKGV2ZW50KTtcbiAgfVxuXG4gIG9uU2VsZWN0ZWQoZXZlbnQ6IEZsb3dTZWxlY3RlZEV2ZW50KTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBjIG9mIHRoaXMuY2hpbGRyZW4pIGlmICgoYyBhcyBGbG93UmVjb3JkZXIpLm9uU2VsZWN0ZWQpIChjIGFzIEZsb3dSZWNvcmRlcikub25TZWxlY3RlZCEoZXZlbnQpO1xuICB9XG5cbiAgb25TdWJmbG93RW50cnkoZXZlbnQ6IEZsb3dTdWJmbG93RXZlbnQpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGMgb2YgdGhpcy5jaGlsZHJlbikgaWYgKChjIGFzIEZsb3dSZWNvcmRlcikub25TdWJmbG93RW50cnkpIChjIGFzIEZsb3dSZWNvcmRlcikub25TdWJmbG93RW50cnkhKGV2ZW50KTtcbiAgfVxuXG4gIG9uU3ViZmxvd0V4aXQoZXZlbnQ6IEZsb3dTdWJmbG93RXZlbnQpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGMgb2YgdGhpcy5jaGlsZHJlbikgaWYgKChjIGFzIEZsb3dSZWNvcmRlcikub25TdWJmbG93RXhpdCkgKGMgYXMgRmxvd1JlY29yZGVyKS5vblN1YmZsb3dFeGl0IShldmVudCk7XG4gIH1cblxuICBvblN1YmZsb3dSZWdpc3RlcmVkKGV2ZW50OiBGbG93U3ViZmxvd1JlZ2lzdGVyZWRFdmVudCk6IHZvaWQge1xuICAgIGZvciAoY29uc3QgYyBvZiB0aGlzLmNoaWxkcmVuKVxuICAgICAgaWYgKChjIGFzIEZsb3dSZWNvcmRlcikub25TdWJmbG93UmVnaXN0ZXJlZCkgKGMgYXMgRmxvd1JlY29yZGVyKS5vblN1YmZsb3dSZWdpc3RlcmVkIShldmVudCk7XG4gIH1cblxuICBvbkxvb3AoZXZlbnQ6IEZsb3dMb29wRXZlbnQpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGMgb2YgdGhpcy5jaGlsZHJlbikgaWYgKChjIGFzIEZsb3dSZWNvcmRlcikub25Mb29wKSAoYyBhcyBGbG93UmVjb3JkZXIpLm9uTG9vcCEoZXZlbnQpO1xuICB9XG5cbiAgb25CcmVhayhldmVudDogRmxvd0JyZWFrRXZlbnQpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGMgb2YgdGhpcy5jaGlsZHJlbikgaWYgKChjIGFzIEZsb3dSZWNvcmRlcikub25CcmVhaykgKGMgYXMgRmxvd1JlY29yZGVyKS5vbkJyZWFrIShldmVudCk7XG4gIH1cblxuICAvLyDilIDilIAgTGlmZWN5Y2xlIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIGNsZWFyKCk6IHZvaWQge1xuICAgIGZvciAoY29uc3QgYyBvZiB0aGlzLmNoaWxkcmVuKSBpZiAoYy5jbGVhcikgYy5jbGVhcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNuYXBzaG90IG1lcmdlcyBhbGwgY2hpbGQgc25hcHNob3RzIGludG8gYSBzaW5nbGUgY29tcG9zaXRlIGVudHJ5LlxuICAgKiBFYWNoIGNoaWxkJ3Mgc25hcHNob3QgaXMgcHJlc2VydmVkIHdpdGggaXRzIG93biBpZC9uYW1lL2RhdGEuXG4gICAqL1xuICB0b1NuYXBzaG90KCk6IENvbXBvc2l0ZVNuYXBzaG90IHtcbiAgICBjb25zdCBjaGlsZFNuYXBzaG90czogQXJyYXk8eyBpZDogc3RyaW5nOyBuYW1lOiBzdHJpbmc7IGRhdGE6IHVua25vd24gfT4gPSBbXTtcbiAgICBmb3IgKGNvbnN0IGMgb2YgdGhpcy5jaGlsZHJlbikge1xuICAgICAgaWYgKGMudG9TbmFwc2hvdCkge1xuICAgICAgICBjb25zdCB7IG5hbWUsIGRhdGEgfSA9IGMudG9TbmFwc2hvdCgpO1xuICAgICAgICBjaGlsZFNuYXBzaG90cy5wdXNoKHsgaWQ6IGMuaWQsIG5hbWUsIGRhdGEgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBuYW1lOiAnQ29tcG9zaXRlJyxcbiAgICAgIGRhdGE6IHsgY2hpbGRyZW46IGNoaWxkU25hcHNob3RzIH0sXG4gICAgfTtcbiAgfVxufVxuIl19
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* EmitRecorder — the third observer channel, alongside `
|
|
2
|
+
* EmitRecorder — the third observer channel, alongside `ScopeRecorder`
|
|
3
3
|
* (scope data-flow) and `FlowRecorder` (control-flow).
|
|
4
4
|
*
|
|
5
5
|
* ## Why this exists
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
*
|
|
35
35
|
* | Channel | Fires when | Built-in consumers |
|
|
36
36
|
* |-----------------|------------------------------------|------------------------|
|
|
37
|
-
* | `
|
|
37
|
+
* | `ScopeRecorder` | scope read/write/commit | DebugRecorder, MetricRecorder |
|
|
38
38
|
* | `FlowRecorder` | traversal transitions | NarrativeFlowRecorder, etc. |
|
|
39
39
|
* | `EmitRecorder` | consumer calls `scope.$emit(...)` | (none ships today; Phase 3.X adds MemoryEmitRecorder) |
|
|
40
40
|
*
|
|
@@ -59,4 +59,4 @@
|
|
|
59
59
|
* ```
|
|
60
60
|
*/
|
|
61
61
|
export {};
|
|
62
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
62
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRW1pdFJlY29yZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9yZWNvcmRlci9FbWl0UmVjb3JkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMkRHIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBFbWl0UmVjb3JkZXIg4oCUIHRoZSB0aGlyZCBvYnNlcnZlciBjaGFubmVsLCBhbG9uZ3NpZGUgYFNjb3BlUmVjb3JkZXJgXG4gKiAoc2NvcGUgZGF0YS1mbG93KSBhbmQgYEZsb3dSZWNvcmRlcmAgKGNvbnRyb2wtZmxvdykuXG4gKlxuICogIyMgV2h5IHRoaXMgZXhpc3RzXG4gKlxuICogVGhlIGZpcnN0IHR3byBjaGFubmVscyBjYXB0dXJlIHdoYXQgdGhlIExJQlJBUlkga25vd3MgYWJvdXQg4oCUIHNjb3BlXG4gKiByZWFkcy93cml0ZXMgZmlyZWQgYnkgYHNldFZhbHVlYCwgYW5kIGNvbnRyb2wtZmxvdyBldmVudHMgZmlyZWQgYnkgdGhlXG4gKiB0cmF2ZXJzZXIuIEJ1dCAqKnVzZXItZW1pdHRlZCBzdHJ1Y3R1cmVkIGV2ZW50cyoqIOKAlCB0aGluZ3MgYSBzdGFnZVxuICogZnVuY3Rpb24gd2FudHMgdG8gc3VyZmFjZSBmb3Igb2JzZXJ2YWJpbGl0eSAoTExNIHRva2VucywgYmlsbGluZyBtZXRyaWNzLFxuICogYXV0aCBkZWNpc2lvbnMsIGRvbWFpbiBtaWxlc3RvbmVzKSDigJQgaGF2ZSBub3doZXJlIHRvIGdvIHRvZGF5LiBUaGV5IGxhbmRcbiAqIGluIHVub2JzZXJ2ZWQgYERpYWdub3N0aWNDb2xsZWN0b3JgIHNpZGUgYmFncyB0aGF0IG5vIHJlY29yZGVyIHdhdGNoZXMuXG4gKlxuICogVGhpcyBjaGFubmVsIGNsb3NlcyB0aGF0IGdhcC4gQ29uc3VtZXIgY2FsbHMgYHNjb3BlLiRlbWl0KG5hbWUsIHBheWxvYWQpYFxuICogZnJvbSBpbnNpZGUgYSBzdGFnZTsgdGhlIGxpYnJhcnkgZW5yaWNoZXMgdGhlIGV2ZW50IHdpdGggc3RhZ2UgY29udGV4dFxuICogYW5kIGRpc3BhdGNoZXMgaXQgc3luY2hyb25vdXNseSB0byBldmVyeSBhdHRhY2hlZCBgRW1pdFJlY29yZGVyYC5cbiAqXG4gKiAjIyBEZXNpZ24gcHJvcGVydGllc1xuICpcbiAqIC0gKipQYXNzLXRocm91Z2gsIG5vdCBidWZmZXJlZC4qKiBaZXJvIGFsbG9jYXRpb24gd2hlbiBubyByZWNvcmRlciBpc1xuICogICBhdHRhY2hlZC4gRXZlbnRzIGRlbGl2ZXJlZCBzeW5jaHJvbm91c2x5LCBpbi1vcmRlciwgYXQgY2FsbCB0aW1lLlxuICogICBTYW1lIHNlbWFudGljcyBhcyBgb25SZWFkYC9gb25Xcml0ZWAgYWxyZWFkeSB1c2UuXG4gKiAtICoqTGlicmFyeS1hZ25vc3RpYyB2b2NhYnVsYXJ5LioqIEV2ZW50IG5hbWVzIGFyZSBjb25zdW1lci1jaG9zZW4gc3RyaW5ncy5cbiAqICAgQ29udmVudGlvbjogaGllcmFyY2hpY2FsIGRvdHRlZCBuYW1lcywgZS5nLiBgJ2FnZW50Zm9vdHByaW50LmxsbS50b2tlbnMnYCxcbiAqICAgYCdteWFwcC5iaWxsaW5nLnNwZW5kJ2AuIExpYnJhcnkgZW5mb3JjZXMgbm8gcmVnaXN0cnkuXG4gKiAtICoqQXV0by1lbnJpY2hlZCBjb250ZXh0LioqIEV2ZXJ5IGV2ZW50IGNhcnJpZXMgYHN0YWdlTmFtZWAsXG4gKiAgIGBydW50aW1lU3RhZ2VJZGAsIGBzdWJmbG93UGF0aGAsIGBwaXBlbGluZUlkYCwgYHRpbWVzdGFtcGAuIENvbnN1bWVyc1xuICogICBuZXZlciBuZWVkIHRvIHRocmVhZCBleGVjdXRpb24gY29udGV4dCB0aHJvdWdoIHRoZWlyIGVtaXQgcGF5bG9hZHMuXG4gKiAtICoqUmVkYWN0aW9uLWF3YXJlLioqIGBSZWRhY3Rpb25Qb2xpY3kuZW1pdFBhdHRlcm5zYCBtYXRjaGVzIGV2ZW50IG5hbWVzXG4gKiAgIGJlZm9yZSBkaXNwYXRjaCDigJQgbWF0Y2hlZCBldmVudHMgaGF2ZSB0aGVpciBwYXlsb2FkIHJlcGxhY2VkIHdpdGhcbiAqICAgYCdbUkVEQUNURURdJ2Agc28gc2VjcmV0cyBjYW4ndCBsZWFrIHZpYSBlbWl0LlxuICpcbiAqICMjIFJlbGF0aW9uc2hpcCB0byBleGlzdGluZyBjaGFubmVsc1xuICpcbiAqIHwgQ2hhbm5lbCAgICAgICAgIHwgRmlyZXMgd2hlbiAgICAgICAgICAgICAgICAgICAgICAgICB8IEJ1aWx0LWluIGNvbnN1bWVycyAgICAgfFxuICogfC0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18XG4gKiB8IGBTY29wZVJlY29yZGVyYCAgICAgIHwgc2NvcGUgcmVhZC93cml0ZS9jb21taXQgICAgICAgICAgICB8IERlYnVnUmVjb3JkZXIsIE1ldHJpY1JlY29yZGVyIHxcbiAqIHwgYEZsb3dSZWNvcmRlcmAgIHwgdHJhdmVyc2FsIHRyYW5zaXRpb25zICAgICAgICAgICAgICB8IE5hcnJhdGl2ZUZsb3dSZWNvcmRlciwgZXRjLiB8XG4gKiB8IGBFbWl0UmVjb3JkZXJgICB8IGNvbnN1bWVyIGNhbGxzIGBzY29wZS4kZW1pdCguLi4pYCAgfCAobm9uZSBzaGlwcyB0b2RheTsgUGhhc2UgMy5YIGFkZHMgTWVtb3J5RW1pdFJlY29yZGVyKSB8XG4gKlxuICogYENvbWJpbmVkUmVjb3JkZXJgIChmcm9tIGAuL0NvbWJpbmVkUmVjb3JkZXIudHNgKSBpbnRlcnNlY3RzIGFsbCB0aHJlZVxuICogdmlhIGBQYXJ0aWFsPC4uLj5gLiBBIGNvbnN1bWVyIGNhbiB3cml0ZSBPTkUgb2JqZWN0IGltcGxlbWVudGluZyBhbnlcbiAqIGNvbWJpbmF0aW9uOyBgZXhlY3V0b3IuYXR0YWNoQ29tYmluZWRSZWNvcmRlcihyKWAgZHVjay10eXBlcyBhbmQgcm91dGVzXG4gKiB0byB0aGUgcmlnaHQgY2hhbm5lbChzKS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgdG9rZW5NZXRlcjogRW1pdFJlY29yZGVyID0ge1xuICogICBpZDogJ3Rva2VuLW1ldGVyJyxcbiAqICAgb25FbWl0KGV2ZW50KSB7XG4gKiAgICAgaWYgKGV2ZW50Lm5hbWUgPT09ICdhZ2VudGZvb3RwcmludC5sbG0udG9rZW5zJykge1xuICogICAgICAgdGhpcy50b3RhbCArPSAoZXZlbnQucGF5bG9hZCBhcyB7IGlucHV0OiBudW1iZXI7IG91dHB1dDogbnVtYmVyIH0pLmlucHV0O1xuICogICAgIH1cbiAqICAgfSxcbiAqICAgdG90YWw6IDAsXG4gKiB9IGFzIGFueTtcbiAqXG4gKiBleGVjdXRvci5hdHRhY2hFbWl0UmVjb3JkZXIodG9rZW5NZXRlcik7XG4gKiBgYGBcbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFJlY29yZGVyT3BlcmF0aW9uIH0gZnJvbSAnLi9SZWNvcmRlck9wZXJhdGlvbi5qcyc7XG5cbi8qKlxuICogRXZlbnQgZGVsaXZlcmVkIHRvIGBFbWl0UmVjb3JkZXIub25FbWl0YC5cbiAqXG4gKiBOYW1lICsgcGF5bG9hZCBhcmUgY29uc3VtZXItc3VwcGxpZWQgdmlhIGBzY29wZS4kZW1pdChuYW1lLCBwYXlsb2FkKWAuXG4gKiBFdmVyeXRoaW5nIGVsc2UgaXMgbGlicmFyeS1lbnJpY2hlZCBhdCBkaXNwYXRjaCB0aW1lIGZyb20gdGhlIGN1cnJlbnRcbiAqIHN0YWdlJ3MgZXhlY3V0aW9uIGNvbnRleHQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW1pdEV2ZW50IHtcbiAgLyoqXG4gICAqIENvbnN1bWVyLXN1cHBsaWVkIGV2ZW50IG5hbWUuIENvbnZlbnRpb246IGhpZXJhcmNoaWNhbCBkb3R0ZWQgbmFtZXNwYWNlXG4gICAqIChlLmcuIGAnYWdlbnRmb290cHJpbnQubGxtLnRva2VucydgLCBgJ215YXBwLmJpbGxpbmcuc3BlbmQnYCkuIEtlZXBzXG4gICAqIHZvY2FidWxhcmllcyBjb2xsaXNpb24tZnJlZSBhY3Jvc3MgbGlicmFyaWVzL2FwcHMgd2l0aG91dCByZXF1aXJpbmcgYVxuICAgKiBjZW50cmFsIHJlZ2lzdHJ5LlxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDb25zdW1lci1zdXBwbGllZCBwYXlsb2FkLiBTaGFwZSBpcyB1cCB0byB0aGUgY29uc3VtZXIgYW5kIHRoZWlyXG4gICAqIGNvbnZlbnRpb247IGxpYnJhcnkgdHJlYXRzIGl0IGFzIG9wYXF1ZSBhbmQgcGFzc2VzIHRocm91Z2ggdW5jaGFuZ2VkXG4gICAqIChtb2R1bG8gcmVkYWN0aW9uIOKAlCBzZWUgYFJlZGFjdGlvblBvbGljeS5lbWl0UGF0dGVybnNgKS5cbiAgICpcbiAgICogV2hlbiByZWRhY3RlZCwgcmVwbGFjZWQgd2l0aCB0aGUgc3RyaW5nIGAnW1JFREFDVEVEXSdgLlxuICAgKi9cbiAgcmVhZG9ubHkgcGF5bG9hZDogdW5rbm93bjtcblxuICAvKiogTmFtZSBvZiB0aGUgc3RhZ2UgdGhhdCBlbWl0dGVkIHRoaXMgZXZlbnQuICovXG4gIHJlYWRvbmx5IHN0YWdlTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBVbmlxdWUgcGVyLWV4ZWN1dGlvbi1zdGVwIGlkZW50aWZpZXIg4oCUIHRoZSBzYW1lIHZhbHVlIHJlY29yZGVyIGV2ZW50c1xuICAgKiBhbmQgY29tbWl0LWxvZyBlbnRyaWVzIGNhcnJ5LiBTZWUgYHJ1bnRpbWVTdGFnZUlkLnRzYCBmb3IgZm9ybWF0LlxuICAgKi9cbiAgcmVhZG9ubHkgcnVudGltZVN0YWdlSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogU3ViZmxvdyBwYXRoIGZyb20gdGhlIG91dGVybW9zdCBwYXJlbnQgZG93biB0byB0aGUgc3ViZmxvdyB0aGF0IGVtaXR0ZWRcbiAgICogdGhpcyBldmVudC4gRW1wdHkgYXJyYXkgd2hlbiB0aGUgZW1pdCBjYW1lIGZyb20gdGhlIHJvb3QgZmxvd2NoYXJ0LlxuICAgKiBNYXRjaGVzIHRoZSBjb252ZW50aW9uIHVzZWQgYnkgYEZsb3dQYXVzZUV2ZW50LnN1YmZsb3dQYXRoYCxcbiAgICogYEZsb3djaGFydENoZWNrcG9pbnQuc3ViZmxvd1BhdGhgLCBldGMuXG4gICAqL1xuICByZWFkb25seSBzdWJmbG93UGF0aDogcmVhZG9ubHkgc3RyaW5nW107XG5cbiAgLyoqIFBpcGVsaW5lL3J1biBpZGVudGlmaWVyIChtYXRjaGVzIGBSZWNvcmRlckNvbnRleHQucGlwZWxpbmVJZGApLiAqL1xuICByZWFkb25seSBwaXBlbGluZUlkOiBzdHJpbmc7XG5cbiAgLyoqIEVtaXNzaW9uIHRpbWVzdGFtcCBpbiBtaWxsaXNlY29uZHMgc2luY2UgZXBvY2ggKGBEYXRlLm5vdygpYCkuICovXG4gIHJlYWRvbmx5IHRpbWVzdGFtcDogbnVtYmVyO1xufVxuXG4vKipcbiAqIFBsdWdnYWJsZSBvYnNlcnZlciBmb3IgY29uc3VtZXItZW1pdHRlZCBzdHJ1Y3R1cmVkIGV2ZW50cy5cbiAqXG4gKiBBbGwgbWV0aG9kcyBhcmUgb3B0aW9uYWw7IGltcGxlbWVudCBvbmx5IHdoYXQgeW91IGNhcmUgYWJvdXQuIFJlY29yZGVyc1xuICogYXJlIGludm9rZWQgc3luY2hyb25vdXNseSBpbiBhdHRhY2htZW50IG9yZGVyLiBJZiBhIHJlY29yZGVyIHRocm93cywgdGhlXG4gKiBlcnJvciBpcyBjYXVnaHQgYW5kIGlzb2xhdGVkIOKAlCBvdGhlciByZWNvcmRlcnMgY29udGludWUgdG8gcmVjZWl2ZSB0aGVcbiAqIGV2ZW50IGFuZCB0aGUgZW1pdHRpbmcgc3RhZ2UgaXMgdW5hZmZlY3RlZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbWl0UmVjb3JkZXIge1xuICAvKipcbiAgICogU3RhYmxlIGlkZW50aWZpZXIgZm9yIGlkZW1wb3RlbnQgYXR0YWNoL2RldGFjaC4gUmUtYXR0YWNoaW5nIHdpdGggdGhlXG4gICAqIHNhbWUgaWQgcmVwbGFjZXMgdGhlIHByZXZpb3VzIHJlZ2lzdHJhdGlvbiBvbiB0aGUgZXhlY3V0b3IuXG4gICAqL1xuICByZWFkb25seSBpZDogc3RyaW5nO1xuXG4gIC8qKiBDYWxsZWQgZm9yIGV2ZXJ5IGBzY29wZS4kZW1pdChuYW1lLCBwYXlsb2FkKWAgY2FsbCBpbiBhbnkgc3RhZ2UuICovXG4gIG9uRW1pdD8oZXZlbnQ6IEVtaXRFdmVudCk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsOiByZXNldCByZWNvcmRlci1pbnRlcm5hbCBzdGF0ZSBiZXR3ZWVuIHJ1bnMuIENhbGxlZCBieSB0aGVcbiAgICogZXhlY3V0b3IgYmVmb3JlIGVhY2ggYHJ1bigpYC5cbiAgICovXG4gIGNsZWFyPygpOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbDogZXhwb3NlIGNvbGxlY3RlZCBkYXRhIGZvciBpbmNsdXNpb24gaW5cbiAgICogYGV4ZWN1dG9yLmdldFNuYXBzaG90KCkucmVjb3JkZXJzYC5cbiAgICovXG4gIHRvU25hcHNob3Q/KCk6IHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gICAgcHJlZmVycmVkT3BlcmF0aW9uPzogUmVjb3JkZXJPcGVyYXRpb247XG4gICAgZGF0YTogdW5rbm93bjtcbiAgfTtcbn1cbiJdfQ==
|
|
@@ -202,4 +202,4 @@ function buildSubflowEntry(event, phase) {
|
|
|
202
202
|
isRoot: false,
|
|
203
203
|
};
|
|
204
204
|
}
|
|
205
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW5PdXRSZWNvcmRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvcmVjb3JkZXIvSW5PdXRSZWNvcmRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTZERztBQUdILE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBTXpELDBEQUEwRDtBQUMxRCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsVUFBVSxDQUFDO0FBRTFDLG9FQUFvRTtBQUNwRSxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxZQUFZLENBQUM7QUFtRGxELElBQUksUUFBUSxHQUFHLENBQUMsQ0FBQztBQUVqQjs7R0FFRztBQUNILE1BQU0sVUFBVSxhQUFhLENBQUMsVUFBZ0MsRUFBRTtJQUM5RCxPQUFPLElBQUksYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ3BDLENBQUM7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxPQUFPLGFBQWMsU0FBUSxnQkFBNEI7SUFDcEQsRUFBRSxDQUFTO0lBRXBCLFlBQVksVUFBZ0MsRUFBRTtRQUM1QyxLQUFLLEVBQUUsQ0FBQztRQUNSLElBQUksQ0FBQyxFQUFFLEdBQUcsT0FBTyxDQUFDLEVBQUUsSUFBSSxTQUFTLEVBQUUsUUFBUSxFQUFFLENBQUM7SUFDaEQsQ0FBQztJQUVELHlFQUF5RTtJQUV6RSxVQUFVLENBQUMsS0FBbUI7UUFDNUIsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFRCxRQUFRLENBQUMsS0FBbUI7UUFDMUIsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFD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QUFFLEdBQUcsUUFBUSxDQUFDLENBQUM7SUFDdEUsTUFBTSxLQUFLLEdBQUcsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDckMsTUFBTSxjQUFjLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLElBQUksU0FBUyxDQUFDO0lBQ2xFLE1BQU0sT0FBTyxHQUFHLEtBQUssS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUM7SUFFMUUsT0FBTztRQUNMLGNBQWM7UUFDZCxTQUFTO1FBQ1QsY0FBYztRQUNkLFdBQVcsRUFBRSxLQUFLLENBQUMsSUFBSTtRQUN2QixXQUFXLEVBQUUsS0FBSyxDQUFDLFdBQVc7UUFDOUIsV0FBVztRQUNYLEtBQUs7UUFDTCxLQUFLO1FBQ0wsT0FBTztRQUNQLE1BQU0sRUFBRSxLQUFLO0tBQ2QsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEluT3V0UmVjb3JkZXIg4oCUIGNhcHR1cmVzIGV2ZXJ5IGNoYXJ0J3MgaW5wdXQvb3V0cHV0IGFzIGVudHJ5L2V4aXQgcGFpcnMuXG4gKlxuICogVGhlIGdhcCB0aGlzIGZpbGxzOlxuICogICBFdmVyeSBjaGFydCBpbiBmb290cHJpbnRqcyBoYXMgdHdvIG5hdHVyYWwgZGF0YSBib3VuZGFyaWVzOlxuICogICAgIC0gdGhlICoqaW5wdXQqKiB0aGF0IGZsb3dlZCBpbiAodG9wLWxldmVsOiBgcnVuKHtpbnB1dH0pYDtcbiAqICAgICAgIHN1YmZsb3c6IGBpbnB1dE1hcHBlcmAgcmVzdWx0KVxuICogICAgIC0gdGhlICoqb3V0cHV0KiogdGhhdCBmbG93ZWQgb3V0ICh0b3AtbGV2ZWw6IGNoYXJ0IHJldHVybiB2YWx1ZTtcbiAqICAgICAgIHN1YmZsb3c6IHNoYXJlZCBzdGF0ZSBhdCBleGl0IC8gYG91dHB1dE1hcHBlcmAgcmVzdWx0KVxuICpcbiAqICAgVG9nZXRoZXIgd2l0aCBgVG9wb2xvZ3lSZWNvcmRlcmAgKGNvbXBvc2l0aW9uIHNoYXBlKSB0aGlzIGlzIHRoZVxuICogICB1bml2ZXJzYWwgXCJzdGVwXCIgcHJpbWl0aXZlIHRoYXQgZG93bnN0cmVhbSBsYXllcnMgcHJvamVjdCDigJQgYSBMZW5zXG4gKiAgIFN0ZXBHcmFwaCwgYSBUcmFjZSB2aWV3LCBjdXN0b20gZGFzaGJvYXJkcy4gQWxsIGJpbmQgYnkgYHJ1bnRpbWVTdGFnZUlkYC5cbiAqXG4gKiAgIFRoZSByb290IGNoYXJ0IGlzIHRyZWF0ZWQgaWRlbnRpY2FsbHkgdG8gYW55IHN1YmZsb3c6IGFuIGBlbnRyeWBcbiAqICAgYm91bmRhcnkgb24gYG9uUnVuU3RhcnRgIGFuZCBhbiBgZXhpdGAgYm91bmRhcnkgb24gYG9uUnVuRW5kYCwgd2l0aFxuICogICBgc3ViZmxvd0lkOiAnX19yb290X18nYC4gU28gY29uc3VtZXJzIGJ1aWxkaW5nIFwiZXZlcnkgc3RlcCBoYXMgYW5cbiAqICAgaW4vb3V0IGFycm93XCIgdmlld3MgY2FuIGNsb3NlIHRoZSBjaGFpbiBhdCB0aGUgdG9wIGxldmVsIOKAlCBub1xuICogICBzcGVjaWFsLWNhc2UgcmVuZGVyaW5nIHJlcXVpcmVkLlxuICpcbiAqIFR3byBib3VuZGFyeSBwaGFzZXMgcGVyIGNoYXJ0IGV4ZWN1dGlvbjpcbiAqICAgMS4gYHBoYXNlOiAnZW50cnknYCDigJQgcGF5bG9hZCA9IHRoZSBpbnB1dCBjcm9zc2luZyB0aGUgYm91bmRhcnkgSU5cbiAqICAgMi4gYHBoYXNlOiAnZXhpdCdgICDigJQgcGF5bG9hZCA9IHRoZSBvdXRwdXQgY3Jvc3NpbmcgdGhlIGJvdW5kYXJ5IE9VVFxuICpcbiAqICAgTG9vcHMgcmUtZW50ZXJpbmcgdGhlIHNhbWUgc3ViZmxvdyBnZXQgZGlzdGluY3QgYHJ1bnRpbWVTdGFnZUlkYHNcbiAqICAgYXV0b21hdGljYWxseSAocGFyZW50IHN0YWdlJ3MgZXhlY3V0aW9uSW5kZXggaW5jcmVtZW50cyBwZXIgaXRlcmF0aW9uKS5cbiAqXG4gKiBQYXVzZSBzZW1hbnRpY3M6XG4gKiAgIFdoZW4gYSBzdGFnZSBwYXVzZXMgaW5zaWRlIGEgc3ViZmxvdywgdGhlIGVuZ2luZSByZS10aHJvd3MgdGhlIHBhdXNlXG4gKiAgIHNpZ25hbCB3aXRob3V0IGZpcmluZyBgb25TdWJmbG93RXhpdGAgKG9yIGBvblJ1bkVuZGApLiBUaGUgc3ViZmxvd1xuICogICBoYXMgYW4gYGVudHJ5YCB3aXRoIG5vIG1hdGNoaW5nIGBleGl0YCB1bnRpbCB0aGUgcnVuIHJlc3VtZXMgYW5kXG4gKiAgIGV4aXRzIGNsZWFubHkuIENvbnN1bWVycyBzaG91bGQgaGFuZGxlIGVudHJ5LXdpdGhvdXQtZXhpdCBncmFjZWZ1bGx5XG4gKiAgIChpdCBtZWFucyBcImluIHByb2dyZXNzXCIgb3IgXCJwYXVzZWRcIikuIFRoZSBgZ2V0Qm91bmRhcnkoKWAgaGVscGVyXG4gKiAgIHJldHVybnMgYHsgZW50cnksIGV4aXQ6IHVuZGVmaW5lZCB9YCBpbiB0aGF0IGNhc2UuXG4gKlxuICogUmVkYWN0aW9uOlxuICogICBQYXlsb2FkIHJlZGFjdGlvbiBpcyB0aGUgZW5naW5lJ3MgcmVzcG9uc2liaWxpdHkgKGBSZWRhY3Rpb25Qb2xpY3lgKS5cbiAqICAgQnkgdGhlIHRpbWUgcGF5bG9hZHMgcmVhY2ggdGhpcyByZWNvcmRlciB2aWEgYEZsb3dTdWJmbG93RXZlbnRgIG9yXG4gKiAgIGBGbG93UnVuRXZlbnRgLCByZWRhY3RhYmxlIHZhbHVlcyBhcmUgYWxyZWFkeSBzY3J1YmJlZC4gVGhlIHJlY29yZGVyXG4gKiAgIGRvZXMgbm90IChhbmQgc2hvdWxkIG5vdCkgcmUtcmVkYWN0LlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQgeyBpbk91dFJlY29yZGVyIH0gZnJvbSAnZm9vdHByaW50anMvdHJhY2UnO1xuICpcbiAqIGNvbnN0IGluT3V0ID0gaW5PdXRSZWNvcmRlcigpO1xuICogZXhlY3V0b3IuYXR0YWNoQ29tYmluZWRSZWNvcmRlcihpbk91dCk7XG4gKiBhd2FpdCBleGVjdXRvci5ydW4oeyBpbnB1dCB9KTtcbiAqXG4gKiBpbk91dC5nZXRTdGVwcygpOyAgICAgICAgICAgICAgICAgICAgLy8gZW50cnkgYm91bmRhcmllcyDigJQgdGltZWxpbmUgcHJvamVjdGlvblxuICogaW5PdXQuZ2V0Qm91bmRhcnkocnVudGltZVN0YWdlSWQpOyAgIC8vIHsgZW50cnksIGV4aXQgfSBwYWlyIGZvciBvbmUgZXhlY3V0aW9uXG4gKiBpbk91dC5nZXRCb3VuZGFyaWVzKCk7ICAgICAgICAgICAgICAgLy8gZmxhdCBsaXN0IChlbnRyeStleGl0IGludGVybGVhdmVkKVxuICogaW5PdXQuZ2V0Um9vdEJvdW5kYXJ5KCk7ICAgICAgICAgICAgIC8vIHsgZW50cnksIGV4aXQgfSBmb3IgdGhlIHRvcC1sZXZlbCBydW5cbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlIEZpbHRlcmluZyBieSBzdWJmbG93IHBhdGhcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IGFnZW50U3RlcHMgPSBpbk91dFxuICogICAuZ2V0U3RlcHMoKVxuICogICAuZmlsdGVyKChiKSA9PiBiLnN1YmZsb3dQYXRoWzFdID09PSAnc2YtYWdlbnQnKTsgIC8vIHBhdGhbMF0gaXMgdGhlIHJvb3RcbiAqIGBgYFxuICovXG5cbmltcG9ydCB0eXBlIHsgRmxvd1JlY29yZGVyLCBGbG93UnVuRXZlbnQsIEZsb3dTdWJmbG93RXZlbnQgfSBmcm9tICcuLi9lbmdpbmUvbmFycmF0aXZlL3R5cGVzLmpzJztcbmltcG9ydCB7IFNlcXVlbmNlUmVjb3JkZXIgfSBmcm9tICcuL1NlcXVlbmNlUmVjb3JkZXIuanMnO1xuXG4vLyDilIDilIAgVHlwZXMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmV4cG9ydCB0eXBlIEluT3V0UGhhc2UgPSAnZW50cnknIHwgJ2V4aXQnO1xuXG4vKiogU3ludGhldGljIGlkIGZvciB0aGUgdG9wLWxldmVsIHJ1bidzIGJvdW5kYXJ5IHBhaXIuICovXG5leHBvcnQgY29uc3QgUk9PVF9TVUJGTE9XX0lEID0gJ19fcm9vdF9fJztcblxuLyoqIFN5bnRoZXRpYyBydW50aW1lU3RhZ2VJZCBmb3IgdGhlIHRvcC1sZXZlbCBydW4gYm91bmRhcnkgcGFpci4gKi9cbmV4cG9ydCBjb25zdCBST09UX1JVTlRJTUVfU1RBR0VfSUQgPSAnX19yb290X18jMCc7XG5cbi8qKlxuICogT25lIGhhbGYgb2YgYSBjaGFydCBleGVjdXRpb24gYm91bmRhcnkuIEVudHJ5L2V4aXQgcGFpcnMgc2hhcmUgYHJ1bnRpbWVTdGFnZUlkYC5cbiAqXG4gKiBOYW1pbmcgZm9sbG93cyB0aGUgZW5naW5lOiBgc3ViZmxvd0lkYCBpcyB0aGUgcGF0aC1wcmVmaXhlZCBpZGVudGlmaWVyIHRoZVxuICogZW5naW5lIGVtaXRzIChlLmcuIGAnc2Ytb3V0ZXIvc2YtaW5uZXInYCBmb3IgbmVzdGVkIHN1YmZsb3dzKS4gRm9yIHRoZVxuICogdG9wLWxldmVsIHJ1biwgaXQncyB0aGUgc3ludGhldGljIGAnX19yb290X18nYC4gYHN1YmZsb3dQYXRoYCBpcyB0aGVcbiAqIGRlY29tcG9zaXRpb24gaW50byBzZWdtZW50cyDigJQgcHJvdmlkZWQgYXMgYSBjb252ZW5pZW5jZSBiZWNhdXNlIGNvbnN1bWVyc1xuICogb2Z0ZW4gcXVlcnkgLyBncm91cCBieSB0aGUgcGF0aCB0cmVlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEluT3V0RW50cnkge1xuICAvKiogcnVudGltZVN0YWdlSWQg4oCUIHNhbWUgdmFsdWUgZm9yIHRoZSBlbnRyeS9leGl0IHBhaXIgb2Ygb25lIGV4ZWN1dGlvbi5cbiAgICogIFRvcC1sZXZlbCBydW4gdXNlcyB0aGUgc3ludGhldGljIGBST09UX1JVTlRJTUVfU1RBR0VfSURgLiAqL1xuICByZWFkb25seSBydW50aW1lU3RhZ2VJZDogc3RyaW5nO1xuICAvKiogUGF0aC1wcmVmaXhlZCBzdWJmbG93IGlkZW50aWZpZXIgKG1hdGNoZXMgdGhlIGVuZ2luZSdzIGBGbG93U3ViZmxvd0V2ZW50LnN1YmZsb3dJZGApLlxuICAgKiAgVG9wLWxldmVsIOKGkiBgJ19fcm9vdF9fJ2AuIFN1YmZsb3cg4oaSIGAnc2Ytb3V0ZXInYCBvciBgJ3NmLW91dGVyL3NmLWlubmVyJ2AuICovXG4gIHJlYWRvbmx5IHN1YmZsb3dJZDogc3RyaW5nO1xuICAvKiogTGFzdCBzZWdtZW50IG9mIGBzdWJmbG93SWRgIOKAlCBjb252ZW5pZW5jZSBmb3IgY29uc3VtZXJzIHRoYXQgZ3JvdXAgYnkgbGVhZiBuYW1lLlxuICAgKiAgVG9wLWxldmVsIOKGkiBgJ19fcm9vdF9fJ2AuICovXG4gIHJlYWRvbmx5IGxvY2FsU3ViZmxvd0lkOiBzdHJpbmc7XG4gIC8qKiBIdW1hbi1yZWFkYWJsZSBkaXNwbGF5IG5hbWUgKGZyb20gdGhlIGJ1aWxkZXI7IGAnUnVuJ2AgZm9yIHRoZSB0b3AtbGV2ZWwgcnVuKS4gKi9cbiAgcmVhZG9ubHkgc3ViZmxvd05hbWU6IHN0cmluZztcbiAgLyoqIEJ1aWxkLXRpbWUgZGVzY3JpcHRpb24gZnJvbSB0aGUgc3ViZmxvdydzIHJvb3Qgc3RhZ2UuXG4gICAqICBDYXJyaWVzIHRheG9ub215IG1hcmtlcnMgKGUuZy4gYCdBZ2VudDogUmVBY3QgbG9vcCdgKS4gVW5kZWZpbmVkIGZvciByb290LiAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgLyoqIERlY29tcG9zaXRpb24gb2YgYHN1YmZsb3dJZGAgaW50byBzZWdtZW50cy4gVG9wLWxldmVsIOKGkiBgWydfX3Jvb3RfXyddYC5cbiAgICogIFN1YmZsb3dzIGxpdmUgVU5ERVIgdGhlIHJvb3Q6IGEgdG9wLWxldmVsIHN1YmZsb3cgaGFzIHBhdGggYFsnX19yb290X18nLCAnc2YteCddYC4gKi9cbiAgcmVhZG9ubHkgc3ViZmxvd1BhdGg6IHJlYWRvbmx5IHN0cmluZ1tdO1xuICAvKiogRGVwdGggaW4gdGhlIHN1YmZsb3cgdHJlZS4gUm9vdCDihpIgMC4gRmlyc3QtbGV2ZWwgc3ViZmxvdyDihpIgMS4gKi9cbiAgcmVhZG9ubHkgZGVwdGg6IG51bWJlcjtcbiAgLyoqIFdoaWNoIHNpZGUgb2YgdGhlIGJvdW5kYXJ5IHRoaXMgZW50cnkgcmVwcmVzZW50cy4gKi9cbiAgcmVhZG9ubHkgcGhhc2U6IEluT3V0UGhhc2U7XG4gIC8qKiBEYXRhIGNyb3NzaW5nIHRoZSBib3VuZGFyeS5cbiAgICogIC0gYHBoYXNlOiAnZW50cnknYCDihpIgYGlucHV0TWFwcGVyYCByZXN1bHQgKHN1YmZsb3cpIG9yIGBydW4oe2lucHV0fSlgIChyb290KVxuICAgKiAgLSBgcGhhc2U6ICdleGl0J2AgIOKGkiBzdWJmbG93IHNoYXJlZCBzdGF0ZSBhdCBleGl0IChzdWJmbG93KSBvciBjaGFydCByZXR1cm4gdmFsdWUgKHJvb3QpXG4gICAqXG4gICAqICBVbmRlZmluZWQgd2hlbiBubyBtYXBwZXIgLyBubyBpbnB1dCB3YXMgcHJvdmlkZWQuICovXG4gIHJlYWRvbmx5IHBheWxvYWQ/OiB1bmtub3duO1xuICAvKiogVHJ1ZSB3aGVuIHRoaXMgZW50cnkgY2FtZSBmcm9tIHRoZSB0b3AtbGV2ZWwgcnVuIChgb25SdW5TdGFydGAgLyBgb25SdW5FbmRgKVxuICAgKiAgcmF0aGVyIHRoYW4gZnJvbSBhIHN1YmZsb3cgKGBvblN1YmZsb3dFbnRyeWAgLyBgb25TdWJmbG93RXhpdGApLlxuICAgKiAgTGVucyB1c2VzIHRoaXMgdG8gcmVuZGVyIHRoZSByb290IHBhaXIgYXMgYHVzZXIg4oaSIHJ1biDihpIgdXNlcmAgaW5zdGVhZCBvZlxuICAgKiAgdGhlIHJlZ3VsYXIgc3ViZmxvdyBzaGFwZS4gKi9cbiAgcmVhZG9ubHkgaXNSb290OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEluT3V0UmVjb3JkZXJPcHRpb25zIHtcbiAgLyoqIFJlY29yZGVyIGlkLiBEZWZhdWx0cyB0byBgaW5vdXQtTmAgKGF1dG8taW5jcmVtZW50ZWQpLiAqL1xuICBpZD86IHN0cmluZztcbn1cblxubGV0IF9jb3VudGVyID0gMDtcblxuLyoqXG4gKiBGYWN0b3J5IOKAlCBtYXRjaGVzIHRoZSBgdG9wb2xvZ3lSZWNvcmRlcigpYCAvIGBuYXJyYXRpdmUoKWAgc3R5bGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbk91dFJlY29yZGVyKG9wdGlvbnM6IEluT3V0UmVjb3JkZXJPcHRpb25zID0ge30pOiBJbk91dFJlY29yZGVyIHtcbiAgcmV0dXJuIG5ldyBJbk91dFJlY29yZGVyKG9wdGlvbnMpO1xufVxuXG4vKipcbiAqIFN0YXRlZnVsIGFjY3VtdWxhdG9yIHRoYXQgd2F0Y2hlcyBgRmxvd1JlY29yZGVyYCBjaGFydC1ib3VuZGFyeSBldmVudHNcbiAqIChydW4gc3RhcnQvZW5kICsgc3ViZmxvdyBlbnRyeS9leGl0KSBhbmQgZW1pdHMgYEluT3V0RW50cnlgIHJlY29yZHMgdG9cbiAqIGl0cyB1bmRlcmx5aW5nIGBTZXF1ZW5jZVJlY29yZGVyYCBzdG9yYWdlLlxuICpcbiAqIEF0dGFjaCB2aWEgYGV4ZWN1dG9yLmF0dGFjaENvbWJpbmVkUmVjb3JkZXIocmVjb3JkZXIpYCDigJQgZm9vdHByaW50anNcbiAqIGRldGVjdHMgdGhlIGBGbG93UmVjb3JkZXJgIG1ldGhvZCBzaGFwZSBhbmQgcm91dGVzIGV2ZW50cy5cbiAqL1xuZXhwb3J0IGNsYXNzIEluT3V0UmVjb3JkZXIgZXh0ZW5kcyBTZXF1ZW5jZVJlY29yZGVyPEluT3V0RW50cnk+IGltcGxlbWVudHMgRmxvd1JlY29yZGVyIHtcbiAgcmVhZG9ubHkgaWQ6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBJbk91dFJlY29yZGVyT3B0aW9ucyA9IHt9KSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmlkID0gb3B0aW9ucy5pZCA/PyBgaW5vdXQtJHsrK19jb3VudGVyfWA7XG4gIH1cblxuICAvLyDilIDilIAgRmxvd1JlY29yZGVyIGhvb2tzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIG9uUnVuU3RhcnQoZXZlbnQ6IEZsb3dSdW5FdmVudCk6IHZvaWQge1xuICAgIHRoaXMuZW1pdChidWlsZFJvb3RFbnRyeSgnZW50cnknLCBldmVudC5wYXlsb2FkKSk7XG4gIH1cblxuICBvblJ1bkVuZChldmVudDogRmxvd1J1bkV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5lbWl0KGJ1aWxkUm9vdEVudHJ5KCdleGl0JywgZXZlbnQucGF5bG9hZCkpO1xuICB9XG5cbiAgb25TdWJmbG93RW50cnkoZXZlbnQ6IEZsb3dTdWJmbG93RXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBlbnRyeSA9IGJ1aWxkU3ViZmxvd0VudHJ5KGV2ZW50LCAnZW50cnknKTtcbiAgICBpZiAoZW50cnkpIHRoaXMuZW1pdChlbnRyeSk7XG4gIH1cblxuICBvblN1YmZsb3dFeGl0KGV2ZW50OiBGbG93U3ViZmxvd0V2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgZW50cnkgPSBidWlsZFN1YmZsb3dFbnRyeShldmVudCwgJ2V4aXQnKTtcbiAgICBpZiAoZW50cnkpIHRoaXMuZW1pdChlbnRyeSk7XG4gIH1cblxuICAvLyDilIDilIAgUXVlcnkgQVBJIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIC8qKiBBbGwgZW50cmllcyBpbiBleGVjdXRpb24gb3JkZXIgKGVudHJ5K2V4aXQgaW50ZXJsZWF2ZWQpLlxuICAgKiAgQWxpYXMgZm9yIGBnZXRFbnRyaWVzKClgIHdpdGggZG9tYWluLWNsZWFyZXIgbmFtaW5nLiAqL1xuICBnZXRCb3VuZGFyaWVzKCk6IEluT3V0RW50cnlbXSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0RW50cmllcygpO1xuICB9XG5cbiAgLyoqIEVudHJ5L2V4aXQgcGFpciBmb3Igb25lIGNoYXJ0IGV4ZWN1dGlvbi5cbiAgICogIFJldHVybnMgYHsgZW50cnksIGV4aXQgfWAg4oCUIGBleGl0YCBpcyBgdW5kZWZpbmVkYCBmb3IgaW4tcHJvZ3Jlc3MgLyBwYXVzZWRcbiAgICogIGNoYXJ0cyBvciBpZiBgcnVudGltZVN0YWdlSWRgIGlzIHVua25vd24uICovXG4gIGdldEJvdW5kYXJ5KHJ1bnRpbWVTdGFnZUlkOiBzdHJpbmcpOiB7IGVudHJ5PzogSW5PdXRFbnRyeTsgZXhpdD86IEluT3V0RW50cnkgfSB7XG4gICAgY29uc3QgZW50cmllcyA9IHRoaXMuZ2V0RW50cmllc0ZvclN0ZXAocnVudGltZVN0YWdlSWQpO1xuICAgIHJldHVybiB7XG4gICAgICBlbnRyeTogZW50cmllcy5maW5kKChlKSA9PiBlLnBoYXNlID09PSAnZW50cnknKSxcbiAgICAgIGV4aXQ6IGVudHJpZXMuZmluZCgoZSkgPT4gZS5waGFzZSA9PT0gJ2V4aXQnKSxcbiAgICB9O1xuICB9XG5cbiAgLyoqIEp1c3QgdGhlIGBlbnRyeWAtcGhhc2UgYm91bmRhcmllcyDigJQgdGhlIFwic3RlcCBsaXN0XCIgcHJvamVjdGlvbiBpblxuICAgKiAgZXhlY3V0aW9uIG9yZGVyLiBUaGlzIGlzIHRoZSBuYXR1cmFsIHRpbWVsaW5lIG9mIGNoYXJ0IGV4ZWN1dGlvbnNcbiAgICogIGZvciBzbGlkZXIgLyBzY3J1YmJpbmcgVUlzLiBUaGUgdG9wLWxldmVsIHJ1bidzIGVudHJ5IGlzIHRoZSBmaXJzdFxuICAgKiAgc3RlcCAoZGVwdGggMCkuICovXG4gIGdldFN0ZXBzKCk6IEluT3V0RW50cnlbXSB7XG4gICAgY29uc3Qgc3RlcHM6IEluT3V0RW50cnlbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgYiBvZiB0aGlzLmdldEVudHJpZXMoKSkge1xuICAgICAgaWYgKGIucGhhc2UgPT09ICdlbnRyeScpIHN0ZXBzLnB1c2goYik7XG4gICAgfVxuICAgIHJldHVybiBzdGVwcztcbiAgfVxuXG4gIC8qKiBUaGUgcm9vdCBydW4ncyBlbnRyeS9leGl0IHBhaXIsIGlmIHRoZSBydW4gaGFzIHN0YXJ0ZWQuXG4gICAqICBDb252ZW5pZW5jZSBmb3IgY29uc3VtZXJzIHRoYXQgd2FudCB0byBicmFja2V0IHRoZSB0aW1lbGluZSBieSB0aGVcbiAgICogIG91dGVybW9zdCBpbi9vdXQuICovXG4gIGdldFJvb3RCb3VuZGFyeSgpOiB7IGVudHJ5PzogSW5PdXRFbnRyeTsgZXhpdD86IEluT3V0RW50cnkgfSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Qm91bmRhcnkoUk9PVF9SVU5USU1FX1NUQUdFX0lEKTtcbiAgfVxuXG4gIC8qKiBTbmFwc2hvdCBidW5kbGUgZm9yIGluY2x1c2lvbiBpbiBgZXhlY3V0b3IuZ2V0U25hcHNob3QoKWAuICovXG4gIHRvU25hcHNob3QoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6ICdJbk91dCcsXG4gICAgICBkZXNjcmlwdGlvbjogJ0NoYXJ0IGluL291dCBzdHJlYW0g4oCUIGVudHJ5L2V4aXQgcGFpcnMgYXQgZXZlcnkgY2hhcnQgYm91bmRhcnkgKHJvb3QgKyBzdWJmbG93cyknLFxuICAgICAgcHJlZmVycmVkT3BlcmF0aW9uOiAndHJhbnNsYXRlJyBhcyBjb25zdCxcbiAgICAgIGRhdGE6IHRoaXMuZ2V0Qm91bmRhcmllcygpLFxuICAgIH07XG4gIH1cbn1cblxuLy8g4pSA4pSAIEludGVybmFsIGhlbHBlcnMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKlxuICogQnVpbGQgdGhlIHN5bnRoZXRpYyByb290IGVudHJ5L2V4aXQuIERlcHRoIGlzIGAwYCBhbmQgdGhlIHBhdGggaXNcbiAqIGBbUk9PVF9TVUJGTE9XX0lEXWAgc28gY29uc3VtZXJzIGdyb3VwaW5nIGJ5IHBhdGggc2VlIHRoZSByb290IGFzIGFcbiAqIHJlZ3VsYXIgdG9wLWxldmVsIGNvbnRhaW5lci5cbiAqL1xuZnVuY3Rpb24gYnVpbGRSb290RW50cnkocGhhc2U6IEluT3V0UGhhc2UsIHBheWxvYWQ6IHVua25vd24pOiBJbk91dEVudHJ5IHtcbiAgcmV0dXJuIHtcbiAgICBydW50aW1lU3RhZ2VJZDogUk9PVF9SVU5USU1FX1NUQUdFX0lELFxuICAgIHN1YmZsb3dJZDogUk9PVF9TVUJGTE9XX0lELFxuICAgIGxvY2FsU3ViZmxvd0lkOiBST09UX1NVQkZMT1dfSUQsXG4gICAgc3ViZmxvd05hbWU6ICdSdW4nLFxuICAgIHN1YmZsb3dQYXRoOiBbUk9PVF9TVUJGTE9XX0lEXSxcbiAgICBkZXB0aDogMCxcbiAgICBwaGFzZSxcbiAgICBwYXlsb2FkLFxuICAgIGlzUm9vdDogdHJ1ZSxcbiAgfTtcbn1cblxuLyoqXG4gKiBCdWlsZCBhIHN1YmZsb3cgYEluT3V0RW50cnlgIGZyb20gYSBgRmxvd1N1YmZsb3dFdmVudGAuXG4gKlxuICogUmV0dXJucyBgdW5kZWZpbmVkYCB3aGVuIHRoZSBldmVudCBsYWNrcyBhIGBzdWJmbG93SWRgIChhbm9ueW1vdXMgL1xuICogbWFsZm9ybWVkIHN1YmZsb3cgZXZlbnRzIOKAlCBzYW1lIGRlZmVuc2l2ZSBwb2xpY3kgYXMgYFRvcG9sb2d5UmVjb3JkZXJgKS5cbiAqXG4gKiBQYXRoIGRlcml2YXRpb246IHRoZSBlbmdpbmUgZW1pdHMgYHN1YmZsb3dJZGAgYWxyZWFkeSBwcmVmaXhlZCB3aXRoIHRoZVxuICogZnVsbCBwYXRoIG9mIHBhcmVudCBzdWJmbG93cyAoZS5nLiBgJ3NmLW91dGVyL3NmLWlubmVyJ2ApLiBXZSBkZWNvbXBvc2VcbiAqIHRoYXQgaW50byBzZWdtZW50cyB0byBwb3B1bGF0ZSBgc3ViZmxvd1BhdGhgIGFuZCBjb21wdXRlIGBkZXB0aGAuXG4gKlxuICogU3ViZmxvd3MgbmVzdCBVTkRFUiB0aGUgc3ludGhldGljIHJvb3QgaW4gYHN1YmZsb3dQYXRoYCBzbyB0aGUgdHJlZSBpc1xuICogY29tcGxldGU6IGEgdG9wLWxldmVsIHN1YmZsb3cgaGFzIHBhdGggYFsnX19yb290X18nLCAnc2YteCddYCBhbmQgZGVwdGggMS5cbiAqL1xuZnVuY3Rpb24gYnVpbGRTdWJmbG93RW50cnkoZXZlbnQ6IEZsb3dTdWJmbG93RXZlbnQsIHBoYXNlOiBJbk91dFBoYXNlKTogSW5PdXRFbnRyeSB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHN1YmZsb3dJZCA9IGV2ZW50LnN1YmZsb3dJZDtcbiAgaWYgKCFzdWJmbG93SWQpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgY29uc3QgcnVudGltZVN0YWdlSWQgPSBldmVudC50cmF2ZXJzYWxDb250ZXh0Py5ydW50aW1lU3RhZ2VJZCA/PyAnJztcbiAgY29uc3Qgc2VnbWVudHMgPSBzdWJmbG93SWQuc3BsaXQoJy8nKS5maWx0ZXIoKHMpID0+IHMubGVuZ3RoID4gMCk7XG4gIGNvbnN0IHN1YmZsb3dQYXRoOiByZWFkb25seSBzdHJpbmdbXSA9IFtST09UX1NVQkZMT1dfSUQsIC4uLnNlZ21lbnRzXTtcbiAgY29uc3QgZGVwdGggPSBzdWJmbG93UGF0aC5sZW5ndGggLSAxO1xuICBjb25zdCBsb2NhbFN1YmZsb3dJZCA9IHNlZ21lbnRzW3NlZ21lbnRzLmxlbmd0aCAtIDFdID8/IHN1YmZsb3dJZDtcbiAgY29uc3QgcGF5bG9hZCA9IHBoYXNlID09PSAnZW50cnknID8gZXZlbnQubWFwcGVkSW5wdXQgOiBldmVudC5vdXRwdXRTdGF0ZTtcblxuICByZXR1cm4ge1xuICAgIHJ1bnRpbWVTdGFnZUlkLFxuICAgIHN1YmZsb3dJZCxcbiAgICBsb2NhbFN1YmZsb3dJZCxcbiAgICBzdWJmbG93TmFtZTogZXZlbnQubmFtZSxcbiAgICBkZXNjcmlwdGlvbjogZXZlbnQuZGVzY3JpcHRpb24sXG4gICAgc3ViZmxvd1BhdGgsXG4gICAgZGVwdGgsXG4gICAgcGhhc2UsXG4gICAgcGF5bG9hZCxcbiAgICBpc1Jvb3Q6IGZhbHNlLFxuICB9O1xufVxuIl19
|
|
205
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW5PdXRSZWNvcmRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvcmVjb3JkZXIvSW5PdXRSZWNvcmRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTZERztBQUdILE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBTXpELDBEQUEwRDtBQUMxRCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsVUFBVSxDQUFDO0FBRTFDLG9FQUFvRTtBQUNwRSxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxZQUFZLENBQUM7QUFtRGxELElBQUksUUFBUSxHQUFHLENBQUMsQ0FBQztBQUVqQjs7R0FFRztBQUNILE1BQU0sVUFBVSxhQUFhLENBQUMsVUFBZ0MsRUFBRTtJQUM5RCxPQUFPLElBQUksYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ3BDLENBQUM7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxPQUFPLGFBQWMsU0FBUSxnQkFBNEI7SUFDcEQsRUFBRSxDQUFTO0lBRXBCLFlBQVksVUFBZ0MsRUFBRTtRQUM1QyxLQUFLLEVBQUUsQ0FBQztRQUNSLElBQUksQ0FBQyxFQUFFLEdBQUcsT0FBTyxDQUFDLEVBQUUsSUFBSSxTQUFTLEVBQUUsUUFBUSxFQUFFLENBQUM7SUFDaEQsQ0FBQztJQUVELHlFQUF5RTtJQUV6RSxVQUFVLENBQUMsS0FBbUI7UUFDNUIsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFRCxRQUFRLENBQUMsS0FBbUI7UUFDMUIsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFD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QUFFLEdBQUcsUUFBUSxDQUFDLENBQUM7SUFDdEUsTUFBTSxLQUFLLEdBQUcsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDckMsTUFBTSxjQUFjLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLElBQUksU0FBUyxDQUFDO0lBQ2xFLE1BQU0sT0FBTyxHQUFHLEtBQUssS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUM7SUFFMUUsT0FBTztRQUNMLGNBQWM7UUFDZCxTQUFTO1FBQ1QsY0FBYztRQUNkLFdBQVcsRUFBRSxLQUFLLENBQUMsSUFBSTtRQUN2QixXQUFXLEVBQUUsS0FBSyxDQUFDLFdBQVc7UUFDOUIsV0FBVztRQUNYLEtBQUs7UUFDTCxLQUFLO1FBQ0wsT0FBTztRQUNQLE1BQU0sRUFBRSxLQUFLO0tBQ2QsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEluT3V0UmVjb3JkZXIg4oCUIGNhcHR1cmVzIGV2ZXJ5IGNoYXJ0J3MgaW5wdXQvb3V0cHV0IGFzIGVudHJ5L2V4aXQgcGFpcnMuXG4gKlxuICogVGhlIGdhcCB0aGlzIGZpbGxzOlxuICogICBFdmVyeSBjaGFydCBpbiBmb290cHJpbnRqcyBoYXMgdHdvIG5hdHVyYWwgZGF0YSBib3VuZGFyaWVzOlxuICogICAgIC0gdGhlICoqaW5wdXQqKiB0aGF0IGZsb3dlZCBpbiAodG9wLWxldmVsOiBgcnVuKHtpbnB1dH0pYDtcbiAqICAgICAgIHN1YmZsb3c6IGBpbnB1dE1hcHBlcmAgcmVzdWx0KVxuICogICAgIC0gdGhlICoqb3V0cHV0KiogdGhhdCBmbG93ZWQgb3V0ICh0b3AtbGV2ZWw6IGNoYXJ0IHJldHVybiB2YWx1ZTtcbiAqICAgICAgIHN1YmZsb3c6IHNoYXJlZCBzdGF0ZSBhdCBleGl0IC8gYG91dHB1dE1hcHBlcmAgcmVzdWx0KVxuICpcbiAqICAgVG9nZXRoZXIgd2l0aCBgVG9wb2xvZ3lSZWNvcmRlcmAgKGNvbXBvc2l0aW9uIHNoYXBlKSB0aGlzIGlzIHRoZVxuICogICB1bml2ZXJzYWwgXCJzdGVwXCIgcHJpbWl0aXZlIHRoYXQgZG93bnN0cmVhbSBsYXllcnMgcHJvamVjdCDigJQgYSBMZW5zXG4gKiAgIFN0ZXBHcmFwaCwgYSBUcmFjZSB2aWV3LCBjdXN0b20gZGFzaGJvYXJkcy4gQWxsIGJpbmQgYnkgYHJ1bnRpbWVTdGFnZUlkYC5cbiAqXG4gKiAgIFRoZSByb290IGNoYXJ0IGlzIHRyZWF0ZWQgaWRlbnRpY2FsbHkgdG8gYW55IHN1YmZsb3c6IGFuIGBlbnRyeWBcbiAqICAgYm91bmRhcnkgb24gYG9uUnVuU3RhcnRgIGFuZCBhbiBgZXhpdGAgYm91bmRhcnkgb24gYG9uUnVuRW5kYCwgd2l0aFxuICogICBgc3ViZmxvd0lkOiAnX19yb290X18nYC4gU28gY29uc3VtZXJzIGJ1aWxkaW5nIFwiZXZlcnkgc3RlcCBoYXMgYW5cbiAqICAgaW4vb3V0IGFycm93XCIgdmlld3MgY2FuIGNsb3NlIHRoZSBjaGFpbiBhdCB0aGUgdG9wIGxldmVsIOKAlCBub1xuICogICBzcGVjaWFsLWNhc2UgcmVuZGVyaW5nIHJlcXVpcmVkLlxuICpcbiAqIFR3byBib3VuZGFyeSBwaGFzZXMgcGVyIGNoYXJ0IGV4ZWN1dGlvbjpcbiAqICAgMS4gYHBoYXNlOiAnZW50cnknYCDigJQgcGF5bG9hZCA9IHRoZSBpbnB1dCBjcm9zc2luZyB0aGUgYm91bmRhcnkgSU5cbiAqICAgMi4gYHBoYXNlOiAnZXhpdCdgICDigJQgcGF5bG9hZCA9IHRoZSBvdXRwdXQgY3Jvc3NpbmcgdGhlIGJvdW5kYXJ5IE9VVFxuICpcbiAqICAgTG9vcHMgcmUtZW50ZXJpbmcgdGhlIHNhbWUgc3ViZmxvdyBnZXQgZGlzdGluY3QgYHJ1bnRpbWVTdGFnZUlkYHNcbiAqICAgYXV0b21hdGljYWxseSAocGFyZW50IHN0YWdlJ3MgZXhlY3V0aW9uSW5kZXggaW5jcmVtZW50cyBwZXIgaXRlcmF0aW9uKS5cbiAqXG4gKiBQYXVzZSBzZW1hbnRpY3M6XG4gKiAgIFdoZW4gYSBzdGFnZSBwYXVzZXMgaW5zaWRlIGEgc3ViZmxvdywgdGhlIGVuZ2luZSByZS10aHJvd3MgdGhlIHBhdXNlXG4gKiAgIHNpZ25hbCB3aXRob3V0IGZpcmluZyBgb25TdWJmbG93RXhpdGAgKG9yIGBvblJ1bkVuZGApLiBUaGUgc3ViZmxvd1xuICogICBoYXMgYW4gYGVudHJ5YCB3aXRoIG5vIG1hdGNoaW5nIGBleGl0YCB1bnRpbCB0aGUgcnVuIHJlc3VtZXMgYW5kXG4gKiAgIGV4aXRzIGNsZWFubHkuIENvbnN1bWVycyBzaG91bGQgaGFuZGxlIGVudHJ5LXdpdGhvdXQtZXhpdCBncmFjZWZ1bGx5XG4gKiAgIChpdCBtZWFucyBcImluIHByb2dyZXNzXCIgb3IgXCJwYXVzZWRcIikuIFRoZSBgZ2V0Qm91bmRhcnkoKWAgaGVscGVyXG4gKiAgIHJldHVybnMgYHsgZW50cnksIGV4aXQ6IHVuZGVmaW5lZCB9YCBpbiB0aGF0IGNhc2UuXG4gKlxuICogUmVkYWN0aW9uOlxuICogICBQYXlsb2FkIHJlZGFjdGlvbiBpcyB0aGUgZW5naW5lJ3MgcmVzcG9uc2liaWxpdHkgKGBSZWRhY3Rpb25Qb2xpY3lgKS5cbiAqICAgQnkgdGhlIHRpbWUgcGF5bG9hZHMgcmVhY2ggdGhpcyByZWNvcmRlciB2aWEgYEZsb3dTdWJmbG93RXZlbnRgIG9yXG4gKiAgIGBGbG93UnVuRXZlbnRgLCByZWRhY3RhYmxlIHZhbHVlcyBhcmUgYWxyZWFkeSBzY3J1YmJlZC4gVGhlIHJlY29yZGVyXG4gKiAgIGRvZXMgbm90IChhbmQgc2hvdWxkIG5vdCkgcmUtcmVkYWN0LlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQgeyBpbk91dFJlY29yZGVyIH0gZnJvbSAnZm9vdHByaW50anMvdHJhY2UnO1xuICpcbiAqIGNvbnN0IGluT3V0ID0gaW5PdXRSZWNvcmRlcigpO1xuICogZXhlY3V0b3IuYXR0YWNoQ29tYmluZWRSZWNvcmRlcihpbk91dCk7XG4gKiBhd2FpdCBleGVjdXRvci5ydW4oeyBpbnB1dCB9KTtcbiAqXG4gKiBpbk91dC5nZXRTdGVwcygpOyAgICAgICAgICAgICAgICAgICAgLy8gZW50cnkgYm91bmRhcmllcyDigJQgdGltZWxpbmUgcHJvamVjdGlvblxuICogaW5PdXQuZ2V0Qm91bmRhcnkocnVudGltZVN0YWdlSWQpOyAgIC8vIHsgZW50cnksIGV4aXQgfSBwYWlyIGZvciBvbmUgZXhlY3V0aW9uXG4gKiBpbk91dC5nZXRCb3VuZGFyaWVzKCk7ICAgICAgICAgICAgICAgLy8gZmxhdCBsaXN0IChlbnRyeStleGl0IGludGVybGVhdmVkKVxuICogaW5PdXQuZ2V0Um9vdEJvdW5kYXJ5KCk7ICAgICAgICAgICAgIC8vIHsgZW50cnksIGV4aXQgfSBmb3IgdGhlIHRvcC1sZXZlbCBydW5cbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlIEZpbHRlcmluZyBieSBzdWJmbG93IHBhdGhcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IGFnZW50U3RlcHMgPSBpbk91dFxuICogICAuZ2V0U3RlcHMoKVxuICogICAuZmlsdGVyKChiKSA9PiBiLnN1YmZsb3dQYXRoWzFdID09PSAnc2YtYWdlbnQnKTsgIC8vIHBhdGhbMF0gaXMgdGhlIHJvb3RcbiAqIGBgYFxuICovXG5cbmltcG9ydCB0eXBlIHsgRmxvd1JlY29yZGVyLCBGbG93UnVuRXZlbnQsIEZsb3dTdWJmbG93RXZlbnQgfSBmcm9tICcuLi9lbmdpbmUvbmFycmF0aXZlL3R5cGVzLmpzJztcbmltcG9ydCB7IFNlcXVlbmNlUmVjb3JkZXIgfSBmcm9tICcuL1NlcXVlbmNlUmVjb3JkZXIuanMnO1xuXG4vLyDilIDilIAgVHlwZXMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmV4cG9ydCB0eXBlIEluT3V0UGhhc2UgPSAnZW50cnknIHwgJ2V4aXQnO1xuXG4vKiogU3ludGhldGljIGlkIGZvciB0aGUgdG9wLWxldmVsIHJ1bidzIGJvdW5kYXJ5IHBhaXIuICovXG5leHBvcnQgY29uc3QgUk9PVF9TVUJGTE9XX0lEID0gJ19fcm9vdF9fJztcblxuLyoqIFN5bnRoZXRpYyBydW50aW1lU3RhZ2VJZCBmb3IgdGhlIHRvcC1sZXZlbCBydW4gYm91bmRhcnkgcGFpci4gKi9cbmV4cG9ydCBjb25zdCBST09UX1JVTlRJTUVfU1RBR0VfSUQgPSAnX19yb290X18jMCc7XG5cbi8qKlxuICogT25lIGhhbGYgb2YgYSBjaGFydCBleGVjdXRpb24gYm91bmRhcnkuIEVudHJ5L2V4aXQgcGFpcnMgc2hhcmUgYHJ1bnRpbWVTdGFnZUlkYC5cbiAqXG4gKiBOYW1pbmcgZm9sbG93cyB0aGUgZW5naW5lOiBgc3ViZmxvd0lkYCBpcyB0aGUgcGF0aC1wcmVmaXhlZCBpZGVudGlmaWVyIHRoZVxuICogZW5naW5lIGVtaXRzIChlLmcuIGAnc2Ytb3V0ZXIvc2YtaW5uZXInYCBmb3IgbmVzdGVkIHN1YmZsb3dzKS4gRm9yIHRoZVxuICogdG9wLWxldmVsIHJ1biwgaXQncyB0aGUgc3ludGhldGljIGAnX19yb290X18nYC4gYHN1YmZsb3dQYXRoYCBpcyB0aGVcbiAqIGRlY29tcG9zaXRpb24gaW50byBzZWdtZW50cyDigJQgcHJvdmlkZWQgYXMgYSBjb252ZW5pZW5jZSBiZWNhdXNlIGNvbnN1bWVyc1xuICogb2Z0ZW4gcXVlcnkgLyBncm91cCBieSB0aGUgcGF0aCB0cmVlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEluT3V0RW50cnkge1xuICAvKiogcnVudGltZVN0YWdlSWQg4oCUIHNhbWUgdmFsdWUgZm9yIHRoZSBlbnRyeS9leGl0IHBhaXIgb2Ygb25lIGV4ZWN1dGlvbi5cbiAgICogIFRvcC1sZXZlbCBydW4gdXNlcyB0aGUgc3ludGhldGljIGBST09UX1JVTlRJTUVfU1RBR0VfSURgLiAqL1xuICByZWFkb25seSBydW50aW1lU3RhZ2VJZDogc3RyaW5nO1xuICAvKiogUGF0aC1wcmVmaXhlZCBzdWJmbG93IGlkZW50aWZpZXIgKG1hdGNoZXMgdGhlIGVuZ2luZSdzIGBGbG93U3ViZmxvd0V2ZW50LnN1YmZsb3dJZGApLlxuICAgKiAgVG9wLWxldmVsIOKGkiBgJ19fcm9vdF9fJ2AuIFN1YmZsb3cg4oaSIGAnc2Ytb3V0ZXInYCBvciBgJ3NmLW91dGVyL3NmLWlubmVyJ2AuICovXG4gIHJlYWRvbmx5IHN1YmZsb3dJZDogc3RyaW5nO1xuICAvKiogTGFzdCBzZWdtZW50IG9mIGBzdWJmbG93SWRgIOKAlCBjb252ZW5pZW5jZSBmb3IgY29uc3VtZXJzIHRoYXQgZ3JvdXAgYnkgbGVhZiBuYW1lLlxuICAgKiAgVG9wLWxldmVsIOKGkiBgJ19fcm9vdF9fJ2AuICovXG4gIHJlYWRvbmx5IGxvY2FsU3ViZmxvd0lkOiBzdHJpbmc7XG4gIC8qKiBIdW1hbi1yZWFkYWJsZSBkaXNwbGF5IG5hbWUgKGZyb20gdGhlIGJ1aWxkZXI7IGAnUnVuJ2AgZm9yIHRoZSB0b3AtbGV2ZWwgcnVuKS4gKi9cbiAgcmVhZG9ubHkgc3ViZmxvd05hbWU6IHN0cmluZztcbiAgLyoqIEJ1aWxkLXRpbWUgZGVzY3JpcHRpb24gZnJvbSB0aGUgc3ViZmxvdydzIHJvb3Qgc3RhZ2UuXG4gICAqICBDYXJyaWVzIHRheG9ub215IG1hcmtlcnMgKGUuZy4gYCdBZ2VudDogUmVBY3QgbG9vcCdgKS4gVW5kZWZpbmVkIGZvciByb290LiAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgLyoqIERlY29tcG9zaXRpb24gb2YgYHN1YmZsb3dJZGAgaW50byBzZWdtZW50cy4gVG9wLWxldmVsIOKGkiBgWydfX3Jvb3RfXyddYC5cbiAgICogIFN1YmZsb3dzIGxpdmUgVU5ERVIgdGhlIHJvb3Q6IGEgdG9wLWxldmVsIHN1YmZsb3cgaGFzIHBhdGggYFsnX19yb290X18nLCAnc2YteCddYC4gKi9cbiAgcmVhZG9ubHkgc3ViZmxvd1BhdGg6IHJlYWRvbmx5IHN0cmluZ1tdO1xuICAvKiogRGVwdGggaW4gdGhlIHN1YmZsb3cgdHJlZS4gUm9vdCDihpIgMC4gRmlyc3QtbGV2ZWwgc3ViZmxvdyDihpIgMS4gKi9cbiAgcmVhZG9ubHkgZGVwdGg6IG51bWJlcjtcbiAgLyoqIFdoaWNoIHNpZGUgb2YgdGhlIGJvdW5kYXJ5IHRoaXMgZW50cnkgcmVwcmVzZW50cy4gKi9cbiAgcmVhZG9ubHkgcGhhc2U6IEluT3V0UGhhc2U7XG4gIC8qKiBEYXRhIGNyb3NzaW5nIHRoZSBib3VuZGFyeS5cbiAgICogIC0gYHBoYXNlOiAnZW50cnknYCDihpIgYGlucHV0TWFwcGVyYCByZXN1bHQgKHN1YmZsb3cpIG9yIGBydW4oe2lucHV0fSlgIChyb290KVxuICAgKiAgLSBgcGhhc2U6ICdleGl0J2AgIOKGkiBzdWJmbG93IHNoYXJlZCBzdGF0ZSBhdCBleGl0IChzdWJmbG93KSBvciBjaGFydCByZXR1cm4gdmFsdWUgKHJvb3QpXG4gICAqXG4gICAqICBVbmRlZmluZWQgd2hlbiBubyBtYXBwZXIgLyBubyBpbnB1dCB3YXMgcHJvdmlkZWQuICovXG4gIHJlYWRvbmx5IHBheWxvYWQ/OiB1bmtub3duO1xuICAvKiogVHJ1ZSB3aGVuIHRoaXMgZW50cnkgY2FtZSBmcm9tIHRoZSB0b3AtbGV2ZWwgcnVuIChgb25SdW5TdGFydGAgLyBgb25SdW5FbmRgKVxuICAgKiAgcmF0aGVyIHRoYW4gZnJvbSBhIHN1YmZsb3cgKGBvblN1YmZsb3dFbnRyeWAgLyBgb25TdWJmbG93RXhpdGApLlxuICAgKiAgTGVucyB1c2VzIHRoaXMgdG8gcmVuZGVyIHRoZSByb290IHBhaXIgYXMgYHVzZXIg4oaSIHJ1biDihpIgdXNlcmAgaW5zdGVhZCBvZlxuICAgKiAgdGhlIHJlZ3VsYXIgc3ViZmxvdyBzaGFwZS4gKi9cbiAgcmVhZG9ubHkgaXNSb290OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEluT3V0UmVjb3JkZXJPcHRpb25zIHtcbiAgLyoqIFNjb3BlUmVjb3JkZXIgaWQuIERlZmF1bHRzIHRvIGBpbm91dC1OYCAoYXV0by1pbmNyZW1lbnRlZCkuICovXG4gIGlkPzogc3RyaW5nO1xufVxuXG5sZXQgX2NvdW50ZXIgPSAwO1xuXG4vKipcbiAqIEZhY3Rvcnkg4oCUIG1hdGNoZXMgdGhlIGB0b3BvbG9neVJlY29yZGVyKClgIC8gYG5hcnJhdGl2ZSgpYCBzdHlsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluT3V0UmVjb3JkZXIob3B0aW9uczogSW5PdXRSZWNvcmRlck9wdGlvbnMgPSB7fSk6IEluT3V0UmVjb3JkZXIge1xuICByZXR1cm4gbmV3IEluT3V0UmVjb3JkZXIob3B0aW9ucyk7XG59XG5cbi8qKlxuICogU3RhdGVmdWwgYWNjdW11bGF0b3IgdGhhdCB3YXRjaGVzIGBGbG93UmVjb3JkZXJgIGNoYXJ0LWJvdW5kYXJ5IGV2ZW50c1xuICogKHJ1biBzdGFydC9lbmQgKyBzdWJmbG93IGVudHJ5L2V4aXQpIGFuZCBlbWl0cyBgSW5PdXRFbnRyeWAgcmVjb3JkcyB0b1xuICogaXRzIHVuZGVybHlpbmcgYFNlcXVlbmNlUmVjb3JkZXJgIHN0b3JhZ2UuXG4gKlxuICogQXR0YWNoIHZpYSBgZXhlY3V0b3IuYXR0YWNoQ29tYmluZWRSZWNvcmRlcihyZWNvcmRlcilgIOKAlCBmb290cHJpbnRqc1xuICogZGV0ZWN0cyB0aGUgYEZsb3dSZWNvcmRlcmAgbWV0aG9kIHNoYXBlIGFuZCByb3V0ZXMgZXZlbnRzLlxuICovXG5leHBvcnQgY2xhc3MgSW5PdXRSZWNvcmRlciBleHRlbmRzIFNlcXVlbmNlUmVjb3JkZXI8SW5PdXRFbnRyeT4gaW1wbGVtZW50cyBGbG93UmVjb3JkZXIge1xuICByZWFkb25seSBpZDogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IEluT3V0UmVjb3JkZXJPcHRpb25zID0ge30pIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuaWQgPSBvcHRpb25zLmlkID8/IGBpbm91dC0keysrX2NvdW50ZXJ9YDtcbiAgfVxuXG4gIC8vIOKUgOKUgCBGbG93UmVjb3JkZXIgaG9va3Mg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgb25SdW5TdGFydChldmVudDogRmxvd1J1bkV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5lbWl0KGJ1aWxkUm9vdEVudHJ5KCdlbnRyeScsIGV2ZW50LnBheWxvYWQpKTtcbiAgfVxuXG4gIG9uUnVuRW5kKGV2ZW50OiBGbG93UnVuRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLmVtaXQoYnVpbGRSb290RW50cnkoJ2V4aXQnLCBldmVudC5wYXlsb2FkKSk7XG4gIH1cblxuICBvblN1YmZsb3dFbnRyeShldmVudDogRmxvd1N1YmZsb3dFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGVudHJ5ID0gYnVpbGRTdWJmbG93RW50cnkoZXZlbnQsICdlbnRyeScpO1xuICAgIGlmIChlbnRyeSkgdGhpcy5lbWl0KGVudHJ5KTtcbiAgfVxuXG4gIG9uU3ViZmxvd0V4aXQoZXZlbnQ6IEZsb3dTdWJmbG93RXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBlbnRyeSA9IGJ1aWxkU3ViZmxvd0VudHJ5KGV2ZW50LCAnZXhpdCcpO1xuICAgIGlmIChlbnRyeSkgdGhpcy5lbWl0KGVudHJ5KTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBRdWVyeSBBUEkg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgLyoqIEFsbCBlbnRyaWVzIGluIGV4ZWN1dGlvbiBvcmRlciAoZW50cnkrZXhpdCBpbnRlcmxlYXZlZCkuXG4gICAqICBBbGlhcyBmb3IgYGdldEVudHJpZXMoKWAgd2l0aCBkb21haW4tY2xlYXJlciBuYW1pbmcuICovXG4gIGdldEJvdW5kYXJpZXMoKTogSW5PdXRFbnRyeVtdIHtcbiAgICByZXR1cm4gdGhpcy5nZXRFbnRyaWVzKCk7XG4gIH1cblxuICAvKiogRW50cnkvZXhpdCBwYWlyIGZvciBvbmUgY2hhcnQgZXhlY3V0aW9uLlxuICAgKiAgUmV0dXJucyBgeyBlbnRyeSwgZXhpdCB9YCDigJQgYGV4aXRgIGlzIGB1bmRlZmluZWRgIGZvciBpbi1wcm9ncmVzcyAvIHBhdXNlZFxuICAgKiAgY2hhcnRzIG9yIGlmIGBydW50aW1lU3RhZ2VJZGAgaXMgdW5rbm93bi4gKi9cbiAgZ2V0Qm91bmRhcnkocnVudGltZVN0YWdlSWQ6IHN0cmluZyk6IHsgZW50cnk/OiBJbk91dEVudHJ5OyBleGl0PzogSW5PdXRFbnRyeSB9IHtcbiAgICBjb25zdCBlbnRyaWVzID0gdGhpcy5nZXRFbnRyaWVzRm9yU3RlcChydW50aW1lU3RhZ2VJZCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVudHJ5OiBlbnRyaWVzLmZpbmQoKGUpID0+IGUucGhhc2UgPT09ICdlbnRyeScpLFxuICAgICAgZXhpdDogZW50cmllcy5maW5kKChlKSA9PiBlLnBoYXNlID09PSAnZXhpdCcpLFxuICAgIH07XG4gIH1cblxuICAvKiogSnVzdCB0aGUgYGVudHJ5YC1waGFzZSBib3VuZGFyaWVzIOKAlCB0aGUgXCJzdGVwIGxpc3RcIiBwcm9qZWN0aW9uIGluXG4gICAqICBleGVjdXRpb24gb3JkZXIuIFRoaXMgaXMgdGhlIG5hdHVyYWwgdGltZWxpbmUgb2YgY2hhcnQgZXhlY3V0aW9uc1xuICAgKiAgZm9yIHNsaWRlciAvIHNjcnViYmluZyBVSXMuIFRoZSB0b3AtbGV2ZWwgcnVuJ3MgZW50cnkgaXMgdGhlIGZpcnN0XG4gICAqICBzdGVwIChkZXB0aCAwKS4gKi9cbiAgZ2V0U3RlcHMoKTogSW5PdXRFbnRyeVtdIHtcbiAgICBjb25zdCBzdGVwczogSW5PdXRFbnRyeVtdID0gW107XG4gICAgZm9yIChjb25zdCBiIG9mIHRoaXMuZ2V0RW50cmllcygpKSB7XG4gICAgICBpZiAoYi5waGFzZSA9PT0gJ2VudHJ5Jykgc3RlcHMucHVzaChiKTtcbiAgICB9XG4gICAgcmV0dXJuIHN0ZXBzO1xuICB9XG5cbiAgLyoqIFRoZSByb290IHJ1bidzIGVudHJ5L2V4aXQgcGFpciwgaWYgdGhlIHJ1biBoYXMgc3RhcnRlZC5cbiAgICogIENvbnZlbmllbmNlIGZvciBjb25zdW1lcnMgdGhhdCB3YW50IHRvIGJyYWNrZXQgdGhlIHRpbWVsaW5lIGJ5IHRoZVxuICAgKiAgb3V0ZXJtb3N0IGluL291dC4gKi9cbiAgZ2V0Um9vdEJvdW5kYXJ5KCk6IHsgZW50cnk/OiBJbk91dEVudHJ5OyBleGl0PzogSW5PdXRFbnRyeSB9IHtcbiAgICByZXR1cm4gdGhpcy5nZXRCb3VuZGFyeShST09UX1JVTlRJTUVfU1RBR0VfSUQpO1xuICB9XG5cbiAgLyoqIFNuYXBzaG90IGJ1bmRsZSBmb3IgaW5jbHVzaW9uIGluIGBleGVjdXRvci5nZXRTbmFwc2hvdCgpYC4gKi9cbiAgdG9TbmFwc2hvdCgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZTogJ0luT3V0JyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnQ2hhcnQgaW4vb3V0IHN0cmVhbSDigJQgZW50cnkvZXhpdCBwYWlycyBhdCBldmVyeSBjaGFydCBib3VuZGFyeSAocm9vdCArIHN1YmZsb3dzKScsXG4gICAgICBwcmVmZXJyZWRPcGVyYXRpb246ICd0cmFuc2xhdGUnIGFzIGNvbnN0LFxuICAgICAgZGF0YTogdGhpcy5nZXRCb3VuZGFyaWVzKCksXG4gICAgfTtcbiAgfVxufVxuXG4vLyDilIDilIAgSW50ZXJuYWwgaGVscGVycyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqXG4gKiBCdWlsZCB0aGUgc3ludGhldGljIHJvb3QgZW50cnkvZXhpdC4gRGVwdGggaXMgYDBgIGFuZCB0aGUgcGF0aCBpc1xuICogYFtST09UX1NVQkZMT1dfSURdYCBzbyBjb25zdW1lcnMgZ3JvdXBpbmcgYnkgcGF0aCBzZWUgdGhlIHJvb3QgYXMgYVxuICogcmVndWxhciB0b3AtbGV2ZWwgY29udGFpbmVyLlxuICovXG5mdW5jdGlvbiBidWlsZFJvb3RFbnRyeShwaGFzZTogSW5PdXRQaGFzZSwgcGF5bG9hZDogdW5rbm93bik6IEluT3V0RW50cnkge1xuICByZXR1cm4ge1xuICAgIHJ1bnRpbWVTdGFnZUlkOiBST09UX1JVTlRJTUVfU1RBR0VfSUQsXG4gICAgc3ViZmxvd0lkOiBST09UX1NVQkZMT1dfSUQsXG4gICAgbG9jYWxTdWJmbG93SWQ6IFJPT1RfU1VCRkxPV19JRCxcbiAgICBzdWJmbG93TmFtZTogJ1J1bicsXG4gICAgc3ViZmxvd1BhdGg6IFtST09UX1NVQkZMT1dfSURdLFxuICAgIGRlcHRoOiAwLFxuICAgIHBoYXNlLFxuICAgIHBheWxvYWQsXG4gICAgaXNSb290OiB0cnVlLFxuICB9O1xufVxuXG4vKipcbiAqIEJ1aWxkIGEgc3ViZmxvdyBgSW5PdXRFbnRyeWAgZnJvbSBhIGBGbG93U3ViZmxvd0V2ZW50YC5cbiAqXG4gKiBSZXR1cm5zIGB1bmRlZmluZWRgIHdoZW4gdGhlIGV2ZW50IGxhY2tzIGEgYHN1YmZsb3dJZGAgKGFub255bW91cyAvXG4gKiBtYWxmb3JtZWQgc3ViZmxvdyBldmVudHMg4oCUIHNhbWUgZGVmZW5zaXZlIHBvbGljeSBhcyBgVG9wb2xvZ3lSZWNvcmRlcmApLlxuICpcbiAqIFBhdGggZGVyaXZhdGlvbjogdGhlIGVuZ2luZSBlbWl0cyBgc3ViZmxvd0lkYCBhbHJlYWR5IHByZWZpeGVkIHdpdGggdGhlXG4gKiBmdWxsIHBhdGggb2YgcGFyZW50IHN1YmZsb3dzIChlLmcuIGAnc2Ytb3V0ZXIvc2YtaW5uZXInYCkuIFdlIGRlY29tcG9zZVxuICogdGhhdCBpbnRvIHNlZ21lbnRzIHRvIHBvcHVsYXRlIGBzdWJmbG93UGF0aGAgYW5kIGNvbXB1dGUgYGRlcHRoYC5cbiAqXG4gKiBTdWJmbG93cyBuZXN0IFVOREVSIHRoZSBzeW50aGV0aWMgcm9vdCBpbiBgc3ViZmxvd1BhdGhgIHNvIHRoZSB0cmVlIGlzXG4gKiBjb21wbGV0ZTogYSB0b3AtbGV2ZWwgc3ViZmxvdyBoYXMgcGF0aCBgWydfX3Jvb3RfXycsICdzZi14J11gIGFuZCBkZXB0aCAxLlxuICovXG5mdW5jdGlvbiBidWlsZFN1YmZsb3dFbnRyeShldmVudDogRmxvd1N1YmZsb3dFdmVudCwgcGhhc2U6IEluT3V0UGhhc2UpOiBJbk91dEVudHJ5IHwgdW5kZWZpbmVkIHtcbiAgY29uc3Qgc3ViZmxvd0lkID0gZXZlbnQuc3ViZmxvd0lkO1xuICBpZiAoIXN1YmZsb3dJZCkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICBjb25zdCBydW50aW1lU3RhZ2VJZCA9IGV2ZW50LnRyYXZlcnNhbENvbnRleHQ/LnJ1bnRpbWVTdGFnZUlkID8/ICcnO1xuICBjb25zdCBzZWdtZW50cyA9IHN1YmZsb3dJZC5zcGxpdCgnLycpLmZpbHRlcigocykgPT4gcy5sZW5ndGggPiAwKTtcbiAgY29uc3Qgc3ViZmxvd1BhdGg6IHJlYWRvbmx5IHN0cmluZ1tdID0gW1JPT1RfU1VCRkxPV19JRCwgLi4uc2VnbWVudHNdO1xuICBjb25zdCBkZXB0aCA9IHN1YmZsb3dQYXRoLmxlbmd0aCAtIDE7XG4gIGNvbnN0IGxvY2FsU3ViZmxvd0lkID0gc2VnbWVudHNbc2VnbWVudHMubGVuZ3RoIC0gMV0gPz8gc3ViZmxvd0lkO1xuICBjb25zdCBwYXlsb2FkID0gcGhhc2UgPT09ICdlbnRyeScgPyBldmVudC5tYXBwZWRJbnB1dCA6IGV2ZW50Lm91dHB1dFN0YXRlO1xuXG4gIHJldHVybiB7XG4gICAgcnVudGltZVN0YWdlSWQsXG4gICAgc3ViZmxvd0lkLFxuICAgIGxvY2FsU3ViZmxvd0lkLFxuICAgIHN1YmZsb3dOYW1lOiBldmVudC5uYW1lLFxuICAgIGRlc2NyaXB0aW9uOiBldmVudC5kZXNjcmlwdGlvbixcbiAgICBzdWJmbG93UGF0aCxcbiAgICBkZXB0aCxcbiAgICBwaGFzZSxcbiAgICBwYXlsb2FkLFxuICAgIGlzUm9vdDogZmFsc2UsXG4gIH07XG59XG4iXX0=
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* KeyedStore<T> — concrete, composable 1:1 storage keyed by string id.
|
|
3
|
+
*
|
|
4
|
+
* Pattern: COMPOSITION primitive. Concrete class — instantiate with
|
|
5
|
+
* `new KeyedStore<T>()` and own it as a field on your
|
|
6
|
+
* recorder. Replaces the abstract `KeyedRecorder<T>` base
|
|
7
|
+
* class for the v5 "one purpose per recorder" rule.
|
|
8
|
+
* Role: 1:1 Map keyed by `runtimeStageId` (or any string).
|
|
9
|
+
* Insertion-ordered iteration.
|
|
10
|
+
*
|
|
11
|
+
* **Contrast with `SequenceStore<T>`:** KeyedStore is 1:1 — one entry
|
|
12
|
+
* per key. Use SequenceStore for 1:N (multiple entries per
|
|
13
|
+
* runtimeStageId, ordering matters).
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```typescript
|
|
17
|
+
* import { KeyedStore } from 'footprintjs/trace';
|
|
18
|
+
*
|
|
19
|
+
* interface TokenEntry { input: number; output: number; }
|
|
20
|
+
*
|
|
21
|
+
* // ONE PURPOSE: typed-event handler. Storage is composed in.
|
|
22
|
+
* class TokenRecorder {
|
|
23
|
+
* readonly id = 'tokens';
|
|
24
|
+
* private readonly store = new KeyedStore<TokenEntry>();
|
|
25
|
+
*
|
|
26
|
+
* onLLMCall(event: LLMCallEvent) {
|
|
27
|
+
* this.store.set(event.runtimeStageId, event.usage);
|
|
28
|
+
* }
|
|
29
|
+
*
|
|
30
|
+
* getForStep(id: string) { return this.store.get(id); }
|
|
31
|
+
* getTotalTokens() { return this.store.aggregate((s, e) => s + e.input + e.output, 0); }
|
|
32
|
+
* getTokensUpTo(keys: Set<string>) {
|
|
33
|
+
* return this.store.accumulate((s, e) => s + e.input + e.output, 0, keys);
|
|
34
|
+
* }
|
|
35
|
+
*
|
|
36
|
+
* clear() { this.store.clear(); }
|
|
37
|
+
* }
|
|
38
|
+
* ```
|
|
39
|
+
*/
|
|
40
|
+
export class KeyedStore {
|
|
41
|
+
data = new Map();
|
|
42
|
+
// ── Write ────────────────────────────────────────────────────────────
|
|
43
|
+
/** Store a single entry. Replaces any existing entry for the same key. */
|
|
44
|
+
set(key, entry) {
|
|
45
|
+
this.data.set(key, entry);
|
|
46
|
+
}
|
|
47
|
+
/** Remove an entry. Returns true if the key existed, false otherwise. */
|
|
48
|
+
delete(key) {
|
|
49
|
+
return this.data.delete(key);
|
|
50
|
+
}
|
|
51
|
+
// ── Translate (raw per-key) ──────────────────────────────────────────
|
|
52
|
+
/** O(1) lookup. */
|
|
53
|
+
get(key) {
|
|
54
|
+
return this.data.get(key);
|
|
55
|
+
}
|
|
56
|
+
/** True if a value exists for the key. */
|
|
57
|
+
has(key) {
|
|
58
|
+
return this.data.has(key);
|
|
59
|
+
}
|
|
60
|
+
/** All entries as a read-only Map (insertion-ordered). */
|
|
61
|
+
getMap() {
|
|
62
|
+
return this.data;
|
|
63
|
+
}
|
|
64
|
+
/** All values as an array (insertion-ordered). */
|
|
65
|
+
values() {
|
|
66
|
+
return [...this.data.values()];
|
|
67
|
+
}
|
|
68
|
+
/** Number of entries stored. */
|
|
69
|
+
get size() {
|
|
70
|
+
return this.data.size;
|
|
71
|
+
}
|
|
72
|
+
// ── Aggregate (reduce all entries) ───────────────────────────────────
|
|
73
|
+
/** Reduce ALL entries to a single value. For dashboards, totals, summaries. */
|
|
74
|
+
aggregate(fn, initial) {
|
|
75
|
+
let acc = initial;
|
|
76
|
+
for (const [key, entry] of this.data)
|
|
77
|
+
acc = fn(acc, entry, key);
|
|
78
|
+
return acc;
|
|
79
|
+
}
|
|
80
|
+
// ── Accumulate (progressive reduce) ──────────────────────────────────
|
|
81
|
+
/**
|
|
82
|
+
* Reduce entries, optionally filtered by a set of keys.
|
|
83
|
+
* For time-travel progressive view: pass the keys visible at the
|
|
84
|
+
* current slider position. Without keys, reduces all entries (same
|
|
85
|
+
* as `aggregate`).
|
|
86
|
+
*/
|
|
87
|
+
accumulate(fn, initial, keys) {
|
|
88
|
+
let acc = initial;
|
|
89
|
+
for (const [key, entry] of this.data) {
|
|
90
|
+
if (keys && !keys.has(key))
|
|
91
|
+
continue;
|
|
92
|
+
acc = fn(acc, entry, key);
|
|
93
|
+
}
|
|
94
|
+
return acc;
|
|
95
|
+
}
|
|
96
|
+
// ── Filter (subset by keys) ──────────────────────────────────────────
|
|
97
|
+
/** Return entries whose keys are in the set, preserving insertion order. */
|
|
98
|
+
filterByKeys(keys) {
|
|
99
|
+
const result = [];
|
|
100
|
+
for (const [key, entry] of this.data) {
|
|
101
|
+
if (keys.has(key))
|
|
102
|
+
result.push(entry);
|
|
103
|
+
}
|
|
104
|
+
return result;
|
|
105
|
+
}
|
|
106
|
+
// ── Lifecycle ────────────────────────────────────────────────────────
|
|
107
|
+
/** Clear all stored data. Recorders typically call this from their own
|
|
108
|
+
* `clear()` method, which the executor invokes before each run. */
|
|
109
|
+
clear() {
|
|
110
|
+
this.data.clear();
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiS2V5ZWRTdG9yZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvcmVjb3JkZXIvS2V5ZWRTdG9yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQ0c7QUFDSCxNQUFNLE9BQU8sVUFBVTtJQUNKLElBQUksR0FBRyxJQUFJLEdBQUcsRUFBYSxDQUFDO0lBRTdDLHdFQUF3RTtJQUV4RSwwRUFBMEU7SUFDMUUsR0FBRyxDQUFDLEdBQVcsRUFBRSxLQUFRO1FBQ3ZCLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRUQseUVBQXlFO0lBQ3pFLE1BQU0sQ0FBQyxHQUFXO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVELHdFQUF3RTtJQUV4RSxtQkFBbUI7SUFDbkIsR0FBRyxDQUFDLEdBQVc7UUFDYixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFFRCwwQ0FBMEM7SUFDMUMsR0FBRyxDQUFDLEdBQVc7UUFDYixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFFRCwwREFBMEQ7SUFDMUQsTUFBTTtRQUNKLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQztJQUNuQixDQUFDO0lBRUQsa0RBQWtEO0lBQ2xELE1BQU07UUFDSixPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVELGdDQUFnQztJQUNoQyxJQUFJLElBQUk7UUFDTixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQ3hCLENBQUM7SUFFRCx3RUFBd0U7SUFFeEUsK0VBQStFO0lBQy9FLFNBQVMsQ0FBSSxFQUF3QyxFQUFFLE9BQVU7UUFDL0QsSUFBSSxHQUFHLEdBQUcsT0FBTyxDQUFDO1FBQ2xCLEtBQUssTUFBTSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSTtZQUFFLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNoRSxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFRCx3RUFBd0U7SUFFeEU7Ozs7O09BS0c7SUFDSCxVQUFVLENBQUksRUFBd0MsRUFBRSxPQUFVLEVBQUUsSUFBMEI7UUFDNUYsSUFBSSxHQUFHLEdBQUcsT0FBTyxDQUFDO1FBQ2xCLEtBQUssTUFBTSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDckMsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQztnQkFBRSxTQUFTO1lBQ3JDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztRQUM1QixDQUFDO1FBQ0QsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRUQsd0VBQXdFO0lBRXhFLDRFQUE0RTtJQUM1RSxZQUFZLENBQUMsSUFBeUI7UUFDcEMsTUFBTSxNQUFNLEdBQVEsRUFBRSxDQUFDO1FBQ3ZCLEtBQUssTUFBTSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDckMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQztnQkFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3hDLENBQUM7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQsd0VBQXdFO0lBRXhFO3dFQUNvRTtJQUNwRSxLQUFLO1FBQ0gsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNwQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEtleWVkU3RvcmU8VD4g4oCUIGNvbmNyZXRlLCBjb21wb3NhYmxlIDE6MSBzdG9yYWdlIGtleWVkIGJ5IHN0cmluZyBpZC5cbiAqXG4gKiBQYXR0ZXJuOiBDT01QT1NJVElPTiBwcmltaXRpdmUuIENvbmNyZXRlIGNsYXNzIOKAlCBpbnN0YW50aWF0ZSB3aXRoXG4gKiAgICAgICAgICBgbmV3IEtleWVkU3RvcmU8VD4oKWAgYW5kIG93biBpdCBhcyBhIGZpZWxkIG9uIHlvdXJcbiAqICAgICAgICAgIHJlY29yZGVyLiBSZXBsYWNlcyB0aGUgYWJzdHJhY3QgYEtleWVkUmVjb3JkZXI8VD5gIGJhc2VcbiAqICAgICAgICAgIGNsYXNzIGZvciB0aGUgdjUgXCJvbmUgcHVycG9zZSBwZXIgcmVjb3JkZXJcIiBydWxlLlxuICogUm9sZTogICAgMToxIE1hcCBrZXllZCBieSBgcnVudGltZVN0YWdlSWRgIChvciBhbnkgc3RyaW5nKS5cbiAqICAgICAgICAgIEluc2VydGlvbi1vcmRlcmVkIGl0ZXJhdGlvbi5cbiAqXG4gKiAqKkNvbnRyYXN0IHdpdGggYFNlcXVlbmNlU3RvcmU8VD5gOioqIEtleWVkU3RvcmUgaXMgMToxIOKAlCBvbmUgZW50cnlcbiAqIHBlciBrZXkuIFVzZSBTZXF1ZW5jZVN0b3JlIGZvciAxOk4gKG11bHRpcGxlIGVudHJpZXMgcGVyXG4gKiBydW50aW1lU3RhZ2VJZCwgb3JkZXJpbmcgbWF0dGVycykuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGltcG9ydCB7IEtleWVkU3RvcmUgfSBmcm9tICdmb290cHJpbnRqcy90cmFjZSc7XG4gKlxuICogaW50ZXJmYWNlIFRva2VuRW50cnkgeyBpbnB1dDogbnVtYmVyOyBvdXRwdXQ6IG51bWJlcjsgfVxuICpcbiAqIC8vIE9ORSBQVVJQT1NFOiB0eXBlZC1ldmVudCBoYW5kbGVyLiBTdG9yYWdlIGlzIGNvbXBvc2VkIGluLlxuICogY2xhc3MgVG9rZW5SZWNvcmRlciB7XG4gKiAgIHJlYWRvbmx5IGlkID0gJ3Rva2Vucyc7XG4gKiAgIHByaXZhdGUgcmVhZG9ubHkgc3RvcmUgPSBuZXcgS2V5ZWRTdG9yZTxUb2tlbkVudHJ5PigpO1xuICpcbiAqICAgb25MTE1DYWxsKGV2ZW50OiBMTE1DYWxsRXZlbnQpIHtcbiAqICAgICB0aGlzLnN0b3JlLnNldChldmVudC5ydW50aW1lU3RhZ2VJZCwgZXZlbnQudXNhZ2UpO1xuICogICB9XG4gKlxuICogICBnZXRGb3JTdGVwKGlkOiBzdHJpbmcpICAgIHsgcmV0dXJuIHRoaXMuc3RvcmUuZ2V0KGlkKTsgfVxuICogICBnZXRUb3RhbFRva2VucygpICAgICAgICAgICB7IHJldHVybiB0aGlzLnN0b3JlLmFnZ3JlZ2F0ZSgocywgZSkgPT4gcyArIGUuaW5wdXQgKyBlLm91dHB1dCwgMCk7IH1cbiAqICAgZ2V0VG9rZW5zVXBUbyhrZXlzOiBTZXQ8c3RyaW5nPikge1xuICogICAgIHJldHVybiB0aGlzLnN0b3JlLmFjY3VtdWxhdGUoKHMsIGUpID0+IHMgKyBlLmlucHV0ICsgZS5vdXRwdXQsIDAsIGtleXMpO1xuICogICB9XG4gKlxuICogICBjbGVhcigpIHsgdGhpcy5zdG9yZS5jbGVhcigpOyB9XG4gKiB9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNsYXNzIEtleWVkU3RvcmU8VD4ge1xuICBwcml2YXRlIHJlYWRvbmx5IGRhdGEgPSBuZXcgTWFwPHN0cmluZywgVD4oKTtcblxuICAvLyDilIDilIAgV3JpdGUg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgLyoqIFN0b3JlIGEgc2luZ2xlIGVudHJ5LiBSZXBsYWNlcyBhbnkgZXhpc3RpbmcgZW50cnkgZm9yIHRoZSBzYW1lIGtleS4gKi9cbiAgc2V0KGtleTogc3RyaW5nLCBlbnRyeTogVCk6IHZvaWQge1xuICAgIHRoaXMuZGF0YS5zZXQoa2V5LCBlbnRyeSk7XG4gIH1cblxuICAvKiogUmVtb3ZlIGFuIGVudHJ5LiBSZXR1cm5zIHRydWUgaWYgdGhlIGtleSBleGlzdGVkLCBmYWxzZSBvdGhlcndpc2UuICovXG4gIGRlbGV0ZShrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmRhdGEuZGVsZXRlKGtleSk7XG4gIH1cblxuICAvLyDilIDilIAgVHJhbnNsYXRlIChyYXcgcGVyLWtleSkg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgLyoqIE8oMSkgbG9va3VwLiAqL1xuICBnZXQoa2V5OiBzdHJpbmcpOiBUIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhLmdldChrZXkpO1xuICB9XG5cbiAgLyoqIFRydWUgaWYgYSB2YWx1ZSBleGlzdHMgZm9yIHRoZSBrZXkuICovXG4gIGhhcyhrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmRhdGEuaGFzKGtleSk7XG4gIH1cblxuICAvKiogQWxsIGVudHJpZXMgYXMgYSByZWFkLW9ubHkgTWFwIChpbnNlcnRpb24tb3JkZXJlZCkuICovXG4gIGdldE1hcCgpOiBSZWFkb25seU1hcDxzdHJpbmcsIFQ+IHtcbiAgICByZXR1cm4gdGhpcy5kYXRhO1xuICB9XG5cbiAgLyoqIEFsbCB2YWx1ZXMgYXMgYW4gYXJyYXkgKGluc2VydGlvbi1vcmRlcmVkKS4gKi9cbiAgdmFsdWVzKCk6IFRbXSB7XG4gICAgcmV0dXJuIFsuLi50aGlzLmRhdGEudmFsdWVzKCldO1xuICB9XG5cbiAgLyoqIE51bWJlciBvZiBlbnRyaWVzIHN0b3JlZC4gKi9cbiAgZ2V0IHNpemUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhLnNpemU7XG4gIH1cblxuICAvLyDilIDilIAgQWdncmVnYXRlIChyZWR1Y2UgYWxsIGVudHJpZXMpIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIC8qKiBSZWR1Y2UgQUxMIGVudHJpZXMgdG8gYSBzaW5nbGUgdmFsdWUuIEZvciBkYXNoYm9hcmRzLCB0b3RhbHMsIHN1bW1hcmllcy4gKi9cbiAgYWdncmVnYXRlPFI+KGZuOiAoYWNjOiBSLCBlbnRyeTogVCwga2V5OiBzdHJpbmcpID0+IFIsIGluaXRpYWw6IFIpOiBSIHtcbiAgICBsZXQgYWNjID0gaW5pdGlhbDtcbiAgICBmb3IgKGNvbnN0IFtrZXksIGVudHJ5XSBvZiB0aGlzLmRhdGEpIGFjYyA9IGZuKGFjYywgZW50cnksIGtleSk7XG4gICAgcmV0dXJuIGFjYztcbiAgfVxuXG4gIC8vIOKUgOKUgCBBY2N1bXVsYXRlIChwcm9ncmVzc2l2ZSByZWR1Y2UpIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIC8qKlxuICAgKiBSZWR1Y2UgZW50cmllcywgb3B0aW9uYWxseSBmaWx0ZXJlZCBieSBhIHNldCBvZiBrZXlzLlxuICAgKiBGb3IgdGltZS10cmF2ZWwgcHJvZ3Jlc3NpdmUgdmlldzogcGFzcyB0aGUga2V5cyB2aXNpYmxlIGF0IHRoZVxuICAgKiBjdXJyZW50IHNsaWRlciBwb3NpdGlvbi4gV2l0aG91dCBrZXlzLCByZWR1Y2VzIGFsbCBlbnRyaWVzIChzYW1lXG4gICAqIGFzIGBhZ2dyZWdhdGVgKS5cbiAgICovXG4gIGFjY3VtdWxhdGU8Uj4oZm46IChhY2M6IFIsIGVudHJ5OiBULCBrZXk6IHN0cmluZykgPT4gUiwgaW5pdGlhbDogUiwga2V5cz86IFJlYWRvbmx5U2V0PHN0cmluZz4pOiBSIHtcbiAgICBsZXQgYWNjID0gaW5pdGlhbDtcbiAgICBmb3IgKGNvbnN0IFtrZXksIGVudHJ5XSBvZiB0aGlzLmRhdGEpIHtcbiAgICAgIGlmIChrZXlzICYmICFrZXlzLmhhcyhrZXkpKSBjb250aW51ZTtcbiAgICAgIGFjYyA9IGZuKGFjYywgZW50cnksIGtleSk7XG4gICAgfVxuICAgIHJldHVybiBhY2M7XG4gIH1cblxuICAvLyDilIDilIAgRmlsdGVyIChzdWJzZXQgYnkga2V5cykg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgLyoqIFJldHVybiBlbnRyaWVzIHdob3NlIGtleXMgYXJlIGluIHRoZSBzZXQsIHByZXNlcnZpbmcgaW5zZXJ0aW9uIG9yZGVyLiAqL1xuICBmaWx0ZXJCeUtleXMoa2V5czogUmVhZG9ubHlTZXQ8c3RyaW5nPik6IFRbXSB7XG4gICAgY29uc3QgcmVzdWx0OiBUW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IFtrZXksIGVudHJ5XSBvZiB0aGlzLmRhdGEpIHtcbiAgICAgIGlmIChrZXlzLmhhcyhrZXkpKSByZXN1bHQucHVzaChlbnRyeSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvLyDilIDilIAgTGlmZWN5Y2xlIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIC8qKiBDbGVhciBhbGwgc3RvcmVkIGRhdGEuIFJlY29yZGVycyB0eXBpY2FsbHkgY2FsbCB0aGlzIGZyb20gdGhlaXIgb3duXG4gICAqICBgY2xlYXIoKWAgbWV0aG9kLCB3aGljaCB0aGUgZXhlY3V0b3IgaW52b2tlcyBiZWZvcmUgZWFjaCBydW4uICovXG4gIGNsZWFyKCk6IHZvaWQge1xuICAgIHRoaXMuZGF0YS5jbGVhcigpO1xuICB9XG59XG4iXX0=
|