footprintjs 9.0.0 → 9.2.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/README.md +2 -2
- package/dist/advanced.js +1 -1
- package/dist/esm/advanced.js +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/lib/decide/decide.js +12 -1
- package/dist/esm/lib/decide/evaluator.js +28 -2
- package/dist/esm/lib/engine/handlers/SubflowExecutor.js +14 -1
- package/dist/esm/lib/engine/narrative/FlowRecorderDispatcher.js +4 -4
- package/dist/esm/lib/engine/narrative/types.js +1 -1
- package/dist/esm/lib/memory/StageContext.js +201 -15
- package/dist/esm/lib/memory/TransactionBuffer.js +17 -7
- package/dist/esm/lib/memory/index.js +2 -1
- package/dist/esm/lib/memory/types.js +3 -2
- package/dist/esm/lib/recorder/CombinedRecorder.js +20 -10
- package/dist/esm/lib/runner/ExecutionRuntime.js +12 -1
- package/dist/esm/lib/runner/FlowChartExecutor.js +27 -4
- package/dist/esm/lib/scope/ScopeFacade.js +28 -1
- package/dist/esm/lib/scope/types.js +1 -1
- package/dist/index.js +1 -1
- package/dist/lib/decide/decide.js +12 -1
- package/dist/lib/decide/evaluator.js +28 -2
- package/dist/lib/engine/handlers/SubflowExecutor.js +14 -1
- package/dist/lib/engine/narrative/FlowRecorderDispatcher.js +4 -4
- package/dist/lib/engine/narrative/types.js +1 -1
- package/dist/lib/memory/StageContext.js +201 -15
- package/dist/lib/memory/TransactionBuffer.js +17 -7
- package/dist/lib/memory/index.js +4 -2
- package/dist/lib/memory/types.js +4 -1
- package/dist/lib/recorder/CombinedRecorder.js +20 -10
- package/dist/lib/runner/ExecutionRuntime.js +12 -1
- package/dist/lib/runner/FlowChartExecutor.js +27 -4
- package/dist/lib/scope/ScopeFacade.js +28 -1
- package/dist/lib/scope/types.js +1 -1
- package/dist/types/advanced.d.ts +1 -1
- package/dist/types/index.d.ts +10 -0
- package/dist/types/lib/decide/decide.d.ts +11 -0
- package/dist/types/lib/decide/evaluator.d.ts +17 -0
- package/dist/types/lib/engine/narrative/types.d.ts +11 -0
- package/dist/types/lib/memory/StageContext.d.ts +113 -5
- package/dist/types/lib/memory/TransactionBuffer.d.ts +16 -6
- package/dist/types/lib/memory/index.d.ts +2 -1
- package/dist/types/lib/memory/types.d.ts +45 -1
- package/dist/types/lib/recorder/CombinedRecorder.d.ts +15 -9
- package/dist/types/lib/runner/ExecutionRuntime.d.ts +10 -1
- package/dist/types/lib/runner/FlowChartExecutor.d.ts +25 -3
- package/dist/types/lib/scope/ScopeFacade.d.ts +24 -1
- package/dist/types/lib/scope/types.d.ts +11 -0
- package/package.json +1 -1
|
@@ -7,9 +7,44 @@
|
|
|
7
7
|
* - Links to parent/child/next contexts (call stack frames)
|
|
8
8
|
* - DiagnosticCollector for logs, errors, metrics
|
|
9
9
|
*/
|
|
10
|
+
import { isDevMode } from '../scope/detectCircular.js';
|
|
10
11
|
import { DiagnosticCollector } from './DiagnosticCollector.js';
|
|
12
|
+
import { nativeGet } from './pathOps.js';
|
|
11
13
|
import { TransactionBuffer } from './TransactionBuffer.js';
|
|
14
|
+
import { READ_PREVIEW_LENGTH } from './types.js';
|
|
12
15
|
import { redactPatch } from './utils.js';
|
|
16
|
+
/**
|
|
17
|
+
* Cheap summary of a read value for `readTracking: 'summary'` (#14).
|
|
18
|
+
*
|
|
19
|
+
* Deliberately avoids every O(value) operation: no clone, no serialization.
|
|
20
|
+
* `size` is a proxy (string length / array length / shallow key count) and
|
|
21
|
+
* `preview` exists only where producing it is O(preview) — primitives and
|
|
22
|
+
* strings. See {@link ReadSummaryMarker} for the honest-cost contract.
|
|
23
|
+
*/
|
|
24
|
+
function summarizeReadValue(value) {
|
|
25
|
+
if (value === null)
|
|
26
|
+
return { __readSummary: true, type: 'null' };
|
|
27
|
+
if (typeof value === 'string') {
|
|
28
|
+
return { __readSummary: true, type: 'string', size: value.length, preview: value.slice(0, READ_PREVIEW_LENGTH) };
|
|
29
|
+
}
|
|
30
|
+
if (Array.isArray(value))
|
|
31
|
+
return { __readSummary: true, type: 'array', size: value.length };
|
|
32
|
+
if (value instanceof Map || value instanceof Set) {
|
|
33
|
+
// Object.keys() on a Map/Set is always [] — report the real entry count.
|
|
34
|
+
return { __readSummary: true, type: 'object', size: value.size };
|
|
35
|
+
}
|
|
36
|
+
if (typeof value === 'object') {
|
|
37
|
+
return { __readSummary: true, type: 'object', size: Object.keys(value).length };
|
|
38
|
+
}
|
|
39
|
+
if (typeof value === 'function')
|
|
40
|
+
return { __readSummary: true, type: 'function' };
|
|
41
|
+
// number | boolean | bigint | symbol — String() is O(rendered length)
|
|
42
|
+
return {
|
|
43
|
+
__readSummary: true,
|
|
44
|
+
type: typeof value,
|
|
45
|
+
preview: String(value).slice(0, READ_PREVIEW_LENGTH),
|
|
46
|
+
};
|
|
47
|
+
}
|
|
13
48
|
export class StageContext {
|
|
14
49
|
sharedMemory;
|
|
15
50
|
/**
|
|
@@ -26,6 +61,13 @@ export class StageContext {
|
|
|
26
61
|
*/
|
|
27
62
|
redactedSharedMemory;
|
|
28
63
|
buffer;
|
|
64
|
+
/**
|
|
65
|
+
* Committed-state view captured at this stage's FIRST touch (first read OR
|
|
66
|
+
* first write) — held by REFERENCE, never cloned. See
|
|
67
|
+
* {@link firstTouchState} for the algorithm and the immutability invariant
|
|
68
|
+
* that makes a bare reference safe.
|
|
69
|
+
*/
|
|
70
|
+
stateView;
|
|
29
71
|
eventLog;
|
|
30
72
|
stageName = '';
|
|
31
73
|
/** Unique stage identifier from the builder (matches spec node id). */
|
|
@@ -48,6 +90,17 @@ export class StageContext {
|
|
|
48
90
|
_stageWrites = {};
|
|
49
91
|
/** Tracks user-level reads (pre-namespace) for the memory view. */
|
|
50
92
|
_stageReads = {};
|
|
93
|
+
/**
|
|
94
|
+
* How tracked reads are recorded into `_stageReads` (#14). Default `'full'`
|
|
95
|
+
* preserves the historical per-read `structuredClone`. Inherited by every
|
|
96
|
+
* context created via {@link createNext} / {@link createChild} (same
|
|
97
|
+
* propagation pattern as the redacted mirror), and pushed into subflow
|
|
98
|
+
* root contexts by `SubflowExecutor`. Affects ONLY the snapshot's
|
|
99
|
+
* `stageReads` payload — `ScopeRecorder.onRead` (and therefore narrative)
|
|
100
|
+
* is dispatched at the scope tier and never cloned, so it is identical in
|
|
101
|
+
* every mode.
|
|
102
|
+
*/
|
|
103
|
+
readTracking = 'full';
|
|
51
104
|
/** Observer called after commit() — used by ScopeFacade to fire ScopeRecorder.onCommit. */
|
|
52
105
|
_commitObserver;
|
|
53
106
|
constructor(runId, name, stageId, sharedMemory, branchId, eventLog, isDecider) {
|
|
@@ -79,12 +132,81 @@ export class StageContext {
|
|
|
79
132
|
getRedactedSharedMemory() {
|
|
80
133
|
return this.redactedSharedMemory;
|
|
81
134
|
}
|
|
82
|
-
/**
|
|
83
|
-
*
|
|
84
|
-
*
|
|
135
|
+
/**
|
|
136
|
+
* Set the read-tracking policy for this context (#14). Called at the root
|
|
137
|
+
* by `ExecutionRuntime.useReadTracking()` (plumbed from
|
|
138
|
+
* `FlowChartExecutor`); descendants inherit via `createNext`/`createChild`,
|
|
139
|
+
* and `SubflowExecutor` pushes the parent context's mode into each subflow
|
|
140
|
+
* root so nested charts inherit too.
|
|
141
|
+
*/
|
|
142
|
+
useReadTracking(mode) {
|
|
143
|
+
this.readTracking = mode;
|
|
144
|
+
}
|
|
145
|
+
/** Returns the active read-tracking policy (used for subflow propagation). */
|
|
146
|
+
getReadTracking() {
|
|
147
|
+
return this.readTracking;
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* ── The first-touch state view (#13) ────────────────────────────────────
|
|
151
|
+
*
|
|
152
|
+
* WHAT: returns the committed shared state as it was at this stage's FIRST
|
|
153
|
+
* touch (first read or first write), capturing the reference on first call.
|
|
154
|
+
* Serves two consumers: reads before the first write ({@link readState})
|
|
155
|
+
* and the transaction buffer's diff base ({@link getTransactionBuffer}).
|
|
156
|
+
*
|
|
157
|
+
* WHY A BARE REFERENCE IS SAFE — the invariant this rests on: committed
|
|
158
|
+
* state is immutable-after-swap. `SharedMemory.applyPatch` routes through
|
|
159
|
+
* `applySmartMerge`, which `structuredClone`s the current state, mutates
|
|
160
|
+
* only the clone, and swaps `SharedMemory.context` to it — the object a
|
|
161
|
+
* stage captured here is never edited afterwards. (`SharedMemory.setValue`/
|
|
162
|
+
* `updateValue` DO mutate in place, but have no callers during traversal;
|
|
163
|
+
* every runtime write reaches state through a stage commit's `applyPatch`.)
|
|
164
|
+
* Holding the reference therefore gives this stage a stable snapshot at
|
|
165
|
+
* zero cost — no clone, which is the entire point of #13.
|
|
166
|
+
*
|
|
167
|
+
* WHY FIRST TOUCH, not first write: the pre-#13 eager engine cloned the
|
|
168
|
+
* state into the buffer at the stage's first ACCESS, anchoring both its
|
|
169
|
+
* snapshot reads and its commit baseline (the net-change diff base) there.
|
|
170
|
+
* #13's first cut anchored the lazy buffer at first WRITE — observably
|
|
171
|
+
* different when something else commits in the gap between this stage's
|
|
172
|
+
* first read and its first write. That gap is REACHABLE: fork siblings are
|
|
173
|
+
* namespace-isolated for run-scoped keys (each child writes under
|
|
174
|
+
* `runs/<childId>/`), but ROOT-level keys are shared — written via
|
|
175
|
+
* `setGlobal` from consumer scope code and, critically, by
|
|
176
|
+
* `SubflowInputMapper`'s output mapping (`parentContext.setGlobal`), which
|
|
177
|
+
* is exactly what runs when a subflow is a fork branch. A sibling's
|
|
178
|
+
* root-key commit landing in the gap would shift this stage's diff base,
|
|
179
|
+
* making its CommitBundle record a phantom change (or swallow a real one)
|
|
180
|
+
* relative to the eager engine. Anchoring the view at first touch restores
|
|
181
|
+
* the EXACT eager semantics — sequential AND parallel — at zero clone cost.
|
|
182
|
+
*
|
|
183
|
+
* Read visibility is two-tier, matching eager byte-for-byte: keys present
|
|
184
|
+
* in the view at first touch read repeatably from it; keys ABSENT from it
|
|
185
|
+
* fall back to LIVE state (the eager engine's exact fallback — a
|
|
186
|
+
* mid-flight sibling root-key write was always visible to reads, and
|
|
187
|
+
* stays visible; only the DIFF BASE is pinned).
|
|
188
|
+
*/
|
|
189
|
+
firstTouchState() {
|
|
190
|
+
if (!this.stateView) {
|
|
191
|
+
this.stateView = this.sharedMemory.getState();
|
|
192
|
+
}
|
|
193
|
+
return this.stateView;
|
|
194
|
+
}
|
|
195
|
+
/** Lazily creates the transaction buffer on the stage's FIRST WRITE (#13).
|
|
196
|
+
*
|
|
197
|
+
* Reads NEVER construct it: read-your-writes only matters once a staged
|
|
198
|
+
* write exists, so before that {@link getValue}/{@link getValueDirect}
|
|
199
|
+
* serve from the first-touch state view and {@link commit} records an
|
|
200
|
+
* empty bundle — all with ZERO `structuredClone`s of the shared state.
|
|
201
|
+
*
|
|
202
|
+
* The buffer's base is the FIRST-TOUCH view, NOT the live state at write
|
|
203
|
+
* time: under parallel forks a sibling may have committed between this
|
|
204
|
+
* stage's first read and this write, and the net-change diff base must
|
|
205
|
+
* stay anchored at first touch to match the eager engine — see
|
|
206
|
+
* {@link firstTouchState}. */
|
|
85
207
|
getTransactionBuffer() {
|
|
86
208
|
if (!this.buffer) {
|
|
87
|
-
this.buffer = new TransactionBuffer(this.
|
|
209
|
+
this.buffer = new TransactionBuffer(this.firstTouchState());
|
|
88
210
|
}
|
|
89
211
|
return this.buffer;
|
|
90
212
|
}
|
|
@@ -155,14 +277,43 @@ export class StageContext {
|
|
|
155
277
|
this.setObject(path, key, merged, false, description);
|
|
156
278
|
}
|
|
157
279
|
// ── Read operations ────────────────────────────────────────────────────
|
|
280
|
+
/** Buffer-aware read, mirroring the eager engine's read order byte-for-byte:
|
|
281
|
+
*
|
|
282
|
+
* 1. staged writes + first-touch snapshot — `buffer.get` over its
|
|
283
|
+
* workingCopy when the buffer exists, else `nativeGet` over the
|
|
284
|
+
* zero-clone state view (the buffer's base IS that view, so the two
|
|
285
|
+
* tiers agree on content);
|
|
286
|
+
* 2. LIVE state via `sharedMemory.getValue` for keys absent from the
|
|
287
|
+
* snapshot — including its run→global namespace fallback. The eager
|
|
288
|
+
* engine had this exact live fallback for snapshot-missing keys;
|
|
289
|
+
* byte-identity over purity.
|
|
290
|
+
*
|
|
291
|
+
* Reads never construct the buffer (#13): a stage that never writes
|
|
292
|
+
* performs zero clones of the shared state. */
|
|
293
|
+
readState(path, key) {
|
|
294
|
+
const namespaced = this.withNamespace(path, key);
|
|
295
|
+
const fromSnapshot = this.buffer ? this.buffer.get(namespaced) : nativeGet(this.firstTouchState(), namespaced);
|
|
296
|
+
if (typeof fromSnapshot !== 'undefined')
|
|
297
|
+
return fromSnapshot;
|
|
298
|
+
return this.sharedMemory.getValue(this.runId, path, key);
|
|
299
|
+
}
|
|
300
|
+
/**
|
|
301
|
+
* Tracked read. The returned value is BORROWED — see the contract on
|
|
302
|
+
* `ScopeFacade.getValue`. Read-tracking cost is policy-gated (#14):
|
|
303
|
+
* `'full'` clones the value into `_stageReads` (historical default),
|
|
304
|
+
* `'summary'` records a cheap marker, `'off'` records nothing.
|
|
305
|
+
*/
|
|
158
306
|
getValue(path, key, description) {
|
|
159
|
-
const
|
|
160
|
-
const fromPatch = buf.get(this.withNamespace(path, key));
|
|
161
|
-
const value = typeof fromPatch !== 'undefined' ? fromPatch : this.sharedMemory.getValue(this.runId, path, key);
|
|
307
|
+
const value = this.readState(path, key);
|
|
162
308
|
// Track user-level read (pre-namespace) for memory view
|
|
163
|
-
if (key !== undefined) {
|
|
309
|
+
if (key !== undefined && this.readTracking !== 'off') {
|
|
164
310
|
const userKey = path.length > 0 ? [...path, key].join('.') : key;
|
|
165
|
-
this._stageReads[userKey] =
|
|
311
|
+
this._stageReads[userKey] =
|
|
312
|
+
value === undefined
|
|
313
|
+
? undefined
|
|
314
|
+
: this.readTracking === 'summary'
|
|
315
|
+
? summarizeReadValue(value)
|
|
316
|
+
: structuredClone(value);
|
|
166
317
|
}
|
|
167
318
|
if (description) {
|
|
168
319
|
this.debug.addLog('message', `[READ] ${description}`);
|
|
@@ -172,9 +323,7 @@ export class StageContext {
|
|
|
172
323
|
/** Read state without tracking in _stageReads or paying structuredClone cost.
|
|
173
324
|
* Used by ScopeFacade.getValueSilent() for array proxy internal operations. */
|
|
174
325
|
getValueDirect(path, key) {
|
|
175
|
-
|
|
176
|
-
const fromPatch = buf.get(this.withNamespace(path, key));
|
|
177
|
-
return typeof fromPatch !== 'undefined' ? fromPatch : this.sharedMemory.getValue(this.runId, path, key);
|
|
326
|
+
return this.readState(path, key);
|
|
178
327
|
}
|
|
179
328
|
getRoot(key) {
|
|
180
329
|
return this.sharedMemory.getValue(this.runId, [], key);
|
|
@@ -195,8 +344,27 @@ export class StageContext {
|
|
|
195
344
|
this._commitObserver = observer;
|
|
196
345
|
}
|
|
197
346
|
commit() {
|
|
198
|
-
|
|
199
|
-
|
|
347
|
+
if (!this.buffer) {
|
|
348
|
+
// Truly-lazy fast path (#13): no write ever constructed the buffer, so
|
|
349
|
+
// the stage's net change is empty BY CONSTRUCTION. Same observable
|
|
350
|
+
// outcome as an empty commit — the (empty) bundle is still recorded so
|
|
351
|
+
// every executed stage remains a time-travel cursor stop — but with
|
|
352
|
+
// ZERO clones: no buffer construction, no applyPatch replay.
|
|
353
|
+
this.eventLog?.record({
|
|
354
|
+
overwrite: {},
|
|
355
|
+
updates: {},
|
|
356
|
+
redactedPaths: [],
|
|
357
|
+
trace: [],
|
|
358
|
+
stage: this.stageName,
|
|
359
|
+
stageId: this.stageId,
|
|
360
|
+
runtimeStageId: this.runtimeStageId,
|
|
361
|
+
});
|
|
362
|
+
if (this._commitObserver) {
|
|
363
|
+
this._commitObserver({ ...this._stageWrites });
|
|
364
|
+
}
|
|
365
|
+
return;
|
|
366
|
+
}
|
|
367
|
+
const bundle = this.buffer.commit();
|
|
200
368
|
const commitBundle = {
|
|
201
369
|
...bundle,
|
|
202
370
|
stage: this.stageName,
|
|
@@ -224,6 +392,16 @@ export class StageContext {
|
|
|
224
392
|
}
|
|
225
393
|
}
|
|
226
394
|
// ── Tree navigation ────────────────────────────────────────────────────
|
|
395
|
+
/**
|
|
396
|
+
* Create (or return) this context's linked successor.
|
|
397
|
+
*
|
|
398
|
+
* MEMOIZED: the first call creates `this.next`; every later call returns
|
|
399
|
+
* that SAME context and IGNORES its arguments. In normal traversal each
|
|
400
|
+
* context advances exactly once, so the memo never bites — but a caller
|
|
401
|
+
* expecting a fresh context for different `stageName`/`stageId` args gets
|
|
402
|
+
* the old one silently. Dev mode (`enableDevMode()`) warns on that
|
|
403
|
+
* mismatch (backlog B4).
|
|
404
|
+
*/
|
|
227
405
|
createNext(path, stageName, stageId, isDecider = false) {
|
|
228
406
|
if (!this.next) {
|
|
229
407
|
this.next = new StageContext(path, stageName, stageId, this.sharedMemory, '', this.eventLog, isDecider);
|
|
@@ -232,6 +410,13 @@ export class StageContext {
|
|
|
232
410
|
// in the run writes to both views.
|
|
233
411
|
if (this.redactedSharedMemory)
|
|
234
412
|
this.next.redactedSharedMemory = this.redactedSharedMemory;
|
|
413
|
+
this.next.readTracking = this.readTracking;
|
|
414
|
+
}
|
|
415
|
+
else if (isDevMode() && (this.next.stageId !== stageId || this.next.stageName !== stageName)) {
|
|
416
|
+
// eslint-disable-next-line no-console
|
|
417
|
+
console.warn(`[footprint] StageContext.createNext: next context already exists as "${this.next.stageName}" ` +
|
|
418
|
+
`(id: "${this.next.stageId}") — arguments "${stageName}" (id: "${stageId}") are ignored ` +
|
|
419
|
+
'and the existing context is returned.');
|
|
235
420
|
}
|
|
236
421
|
return this.next;
|
|
237
422
|
}
|
|
@@ -243,6 +428,7 @@ export class StageContext {
|
|
|
243
428
|
child.parent = this;
|
|
244
429
|
if (this.redactedSharedMemory)
|
|
245
430
|
child.redactedSharedMemory = this.redactedSharedMemory;
|
|
431
|
+
child.readTracking = this.readTracking;
|
|
246
432
|
this.children.push(child);
|
|
247
433
|
return child;
|
|
248
434
|
}
|
|
@@ -351,4 +537,4 @@ export class StageContext {
|
|
|
351
537
|
return snapshot;
|
|
352
538
|
}
|
|
353
539
|
}
|
|
354
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3RhZ2VDb250ZXh0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9tZW1vcnkvU3RhZ2VDb250ZXh0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7OztHQVFHO0FBRUgsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFHL0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFM0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUV6QyxNQUFNLE9BQU8sWUFBWTtJQUNmLFlBQVksQ0FBZTtJQUNuQzs7Ozs7Ozs7Ozs7T0FXRztJQUNLLG9CQUFvQixDQUFnQjtJQUNwQyxNQUFNLENBQXFCO0lBQzNCLFFBQVEsQ0FBWTtJQUVyQixTQUFTLEdBQUcsRUFBRSxDQUFDO0lBQ3RCLHVFQUF1RTtJQUNoRSxPQUFPLENBQVM7SUFDdkIscUZBQXFGO0lBQzlFLGNBQWMsR0FBRyxFQUFFLENBQUM7SUFDcEIsS0FBSyxDQUFTO0lBQ2QsUUFBUSxDQUFVO0lBQ2xCLFNBQVMsQ0FBVTtJQUNuQixNQUFNLENBQVU7SUFDdkIsbUZBQW1GO0lBQzVFLFdBQVcsQ0FBVTtJQUM1QixnRkFBZ0Y7SUFDekUsU0FBUyxDQUFVO0lBRW5CLE1BQU0sQ0FBZ0I7SUFDdEIsSUFBSSxDQUFnQjtJQUNwQixRQUFRLENBQWtCO0lBRTFCLEtBQUssR0FBd0IsSUFBSSxtQkFBbUIsRUFBRSxDQUFDO0lBRTlELGlGQUFpRjtJQUN6RSxZQUFZLEdBQStFLEVBQUUsQ0FBQztJQUV0RyxtRUFBbUU7SUFDM0QsV0FBVyxHQUE0QixFQUFFLENBQUM7SUFFbEQsMkZBQTJGO0lBQ25GLGVBQWUsQ0FFYjtJQUVWLFlBQ0UsS0FBYSxFQUNiLElBQVksRUFDWixPQUFlLEVBQ2YsWUFBMEIsRUFDMUIsUUFBaUIsRUFDakIsUUFBbUIsRUFDbkIsU0FBbUI7UUFFbkIsSUFBSSxDQUFD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LElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN2QyxRQUFRLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDO1FBQ2xELENBQUM7UUFDRCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFN0YWdlQ29udGV4dCDigJQgRXhlY3V0aW9uIGNvbnRleHQgZm9yIGEgc2luZ2xlIHN0YWdlIGluIGEgZmxvd2NoYXJ0IHJ1blxuICpcbiAqIExpa2UgYSBzdGFjayBmcmFtZSBpbiBhIGNvbXBpbGVyL3J1bnRpbWU6XG4gKiAtIFJlZmVyZW5jZSB0byBTaGFyZWRNZW1vcnkgKGFjY2Vzc2luZyBoZWFwIG1lbW9yeSlcbiAqIC0gVHJhbnNhY3Rpb25CdWZmZXIgZm9yIHN0YWdpbmcgbXV0YXRpb25zICh0cmFuc2FjdGlvbiBidWZmZXIpXG4gKiAtIExpbmtzIHRvIHBhcmVudC9jaGlsZC9uZXh0IGNvbnRleHRzIChjYWxsIHN0YWNrIGZyYW1lcylcbiAqIC0gRGlhZ25vc3RpY0NvbGxlY3RvciBmb3IgbG9ncywgZXJyb3JzLCBtZXRyaWNzXG4gKi9cblxuaW1wb3J0IHsgRGlhZ25vc3RpY0NvbGxlY3RvciB9IGZyb20gJy4vRGlhZ25vc3RpY0NvbGxlY3Rvci5qcyc7XG5pbXBvcnQgeyBFdmVudExvZyB9IGZyb20gJy4vRXZlbnRMb2cuanMnO1xuaW1wb3J0IHsgU2hhcmVkTWVtb3J5IH0gZnJvbSAnLi9TaGFyZWRNZW1vcnkuanMnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25CdWZmZXIgfSBmcm9tICcuL1RyYW5zYWN0aW9uQnVmZmVyLmpzJztcbmltcG9ydCB0eXBlIHsgRmxvd0NvbnRyb2xUeXBlLCBGbG93TWVzc2FnZSwgU3RhZ2VTbmFwc2hvdCB9IGZyb20gJy4vdHlwZXMuanMnO1xuaW1wb3J0IHsgcmVkYWN0UGF0Y2ggfSBmcm9tICcuL3V0aWxzLmpzJztcblxuZXhwb3J0IGNsYXNzIFN0YWdlQ29udGV4dCB7XG4gIHByaXZhdGUgc2hhcmVkTWVtb3J5OiBTaGFyZWRNZW1vcnk7XG4gIC8qKlxuICAgKiBQYXJhbGxlbCByZWRhY3RlZCBtaXJyb3Igb2YgYHNoYXJlZE1lbW9yeWAuIFBvcHVsYXRlZCBpbiBgY29tbWl0KClgIHdpdGhcbiAgICogdGhlIGFscmVhZHktY29tcHV0ZWQgcmVkYWN0ZWQgcGF0Y2hlcyAodGhlIHNhbWUgb25lcyBmZWQgdG8gYGV2ZW50TG9nYCkuXG4gICAqIFByZXNlbnQgKipvbmx5Kiogd2hlbiB0aGUgZXhlY3V0b3IgaGFzIGJlZW4gdG9sZCB0byBtYWludGFpbiBhIHJlZGFjdGVkXG4gICAqIHZpZXcg4oCUIGkuZS4gd2hlbiBhIGBSZWRhY3Rpb25Qb2xpY3lgIGlzIGNvbmZpZ3VyZWQuIE90aGVyd2lzZSB1bmRlZmluZWQsXG4gICAqIHplcm8gZXh0cmEgd29yayBwZXIgY29tbWl0LlxuICAgKlxuICAgKiBUaGUgbWlycm9yIGlzIHJlYWQgdmlhIGBGbG93Q2hhcnRFeGVjdXRvci5nZXRTbmFwc2hvdCh7IHJlZGFjdDogdHJ1ZSB9KWBcbiAgICogYW5kIGlzIHRoZSBmb3VuZGF0aW9uIGZvciB0aGUgXCJleHBvcnQgdHJhY2VcIiAvIHBhc3RlLWludG8tdmlld2VyIGZlYXR1cmVcbiAgICog4oCUIGNvbnN1bWVycyBzaGFyZSB0aGUgcmVkYWN0ZWQgdmlldyBleHRlcm5hbGx5IHdpdGhvdXQgbGVha2luZyByYXcgUElJXG4gICAqIHRocm91Z2ggYHNoYXJlZFN0YXRlYC5cbiAgICovXG4gIHByaXZhdGUgcmVkYWN0ZWRTaGFyZWRNZW1vcnk/OiBTaGFyZWRNZW1vcnk7XG4gIHByaXZhdGUgYnVmZmVyPzogVHJhbnNhY3Rpb25CdWZmZXI7XG4gIHByaXZhdGUgZXZlbnRMb2c/OiBFdmVudExvZztcblxuICBwdWJsaWMgc3RhZ2VOYW1lID0gJyc7XG4gIC8qKiBVbmlxdWUgc3RhZ2UgaWRlbnRpZmllciBmcm9tIHRoZSBidWlsZGVyIChtYXRjaGVzIHNwZWMgbm9kZSBpZCkuICovXG4gIHB1YmxpYyBzdGFnZUlkOiBzdHJpbmc7XG4gIC8qKiBVbmlxdWUgcGVyLWV4ZWN1dGlvbi1zdGVwIGlkZW50aWZpZXIuIFNldCBieSB0cmF2ZXJzZXIgYmVmb3JlIHN0YWdlIGV4ZWN1dGlvbi4gKi9cbiAgcHVibGljIHJ1bnRpbWVTdGFnZUlkID0gJyc7XG4gIHB1YmxpYyBydW5JZDogc3RyaW5nO1xuICBwdWJsaWMgYnJhbmNoSWQ/OiBzdHJpbmc7XG4gIHB1YmxpYyBpc0RlY2lkZXI6IGJvb2xlYW47XG4gIHB1YmxpYyBpc0Zvcms6IGJvb2xlYW47XG4gIC8qKiBIdW1hbi1yZWFkYWJsZSBkZXNjcmlwdGlvbiBmcm9tIGJ1aWxkZXIgKHNldCBieSB0cmF2ZXJzZXIgYmVmb3JlIGV4ZWN1dGlvbikuICovXG4gIHB1YmxpYyBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgLyoqIFN1YmZsb3cgaWRlbnRpZmllciAoc2V0IGJ5IHRyYXZlcnNlciB3aGVuIHRoaXMgaXMgYSBzdWJmbG93IGVudHJ5IHBvaW50KS4gKi9cbiAgcHVibGljIHN1YmZsb3dJZD86IHN0cmluZztcblxuICBwdWJsaWMgcGFyZW50PzogU3RhZ2VDb250ZXh0O1xuICBwdWJsaWMgbmV4dD86IFN0YWdlQ29udGV4dDtcbiAgcHVibGljIGNoaWxkcmVuPzogU3RhZ2VDb250ZXh0W107XG5cbiAgcHVibGljIGRlYnVnOiBEaWFnbm9zdGljQ29sbGVjdG9yID0gbmV3IERpYWdub3N0aWNDb2xsZWN0b3IoKTtcblxuICAvKiogVHJhY2tzIHVzZXItbGV2ZWwgd3JpdGVzIChwcmUtbmFtZXNwYWNlKSBmb3IgdGhlIG1lbW9yeSB2aWV3IGFuZCBvbkNvbW1pdC4gKi9cbiAgcHJpdmF0ZSBfc3RhZ2VXcml0ZXM6IFJlY29yZDxzdHJpbmcsIHsgdmFsdWU6IHVua25vd247IG9wZXJhdGlvbjogJ3NldCcgfCAndXBkYXRlJyB8ICdkZWxldGUnIH0+ID0ge307XG5cbiAgLyoqIFRyYWNrcyB1c2VyLWxldmVsIHJlYWRzIChwcmUtbmFtZXNwYWNlKSBmb3IgdGhlIG1lbW9yeSB2aWV3LiAqL1xuICBwcml2YXRlIF9zdGFnZVJlYWRzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuXG4gIC8qKiBPYnNlcnZlciBjYWxsZWQgYWZ0ZXIgY29tbWl0KCkg4oCUIHVzZWQgYnkgU2NvcGVGYWNhZGUgdG8gZmlyZSBTY29wZVJlY29yZGVyLm9uQ29tbWl0LiAqL1xuICBwcml2YXRlIF9jb21taXRPYnNlcnZlcj86IChcbiAgICBtdXRhdGlvbnM6IFJlY29yZDxzdHJpbmcsIHsgdmFsdWU6IHVua25vd247IG9wZXJhdGlvbjogJ3NldCcgfCAndXBkYXRlJyB8ICdkZWxldGUnIH0+LFxuICApID0+IHZvaWQ7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcnVuSWQ6IHN0cmluZyxcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgc3RhZ2VJZDogc3RyaW5nLFxuICAgIHNoYXJlZE1lbW9yeTogU2hhcmVkTWVtb3J5LFxuICAgIGJyYW5jaElkPzogc3RyaW5nLFxuICAgIGV2ZW50TG9nPzogRXZlbnRMb2csXG4gICAgaXNEZWNpZGVyPzogYm9vbGVhbixcbiAgKSB7XG4gICAgdGhpcy5ydW5JZCA9IHJ1bklkO1xuICAgIHRoaXMuc3RhZ2VOYW1lID0gbmFtZTtcbiAgICB0aGlzLnN0YWdlSWQgPSBzdGFnZUlkO1xuICAgIHRoaXMuc2hhcmVkTWVtb3J5ID0gc2hhcmVkTWVtb3J5O1xuICAgIHRoaXMuYnJhbmNoSWQgPSBicmFuY2hJZDtcbiAgICB0aGlzLmV2ZW50TG9nID0gZXZlbnRMb2c7XG4gICAgdGhpcy5pc0RlY2lkZXIgPSAhIWlzRGVjaWRlcjtcbiAgICB0aGlzLmlzRm9yayA9IGZhbHNlO1xuICB9XG5cbiAgLyoqIFJldHVybnMgdGhlIFNoYXJlZE1lbW9yeSBpbnN0YW5jZSAobmVlZGVkIGJ5IHNjb3BlIGxheWVyKS4gKi9cbiAgZ2V0U2hhcmVkTWVtb3J5KCk6IFNoYXJlZE1lbW9yeSB7XG4gICAgcmV0dXJuIHRoaXMuc2hhcmVkTWVtb3J5O1xuICB9XG5cbiAgLyoqXG4gICAqIEluc3RhbGwgYSBwYXJhbGxlbCByZWRhY3RlZCBtaXJyb3IuIFN1YnNlcXVlbnQgYGNvbW1pdCgpYCBjYWxscyB3aWxsXG4gICAqIGFwcGx5IHRoZSBhbHJlYWR5LWNvbXB1dGVkIHJlZGFjdGVkIHBhdGNoZXMgdG8gdGhpcyBtaXJyb3IgaW4gYWRkaXRpb25cbiAgICogdG8gdGhlIHJhdyBgc2hhcmVkTWVtb3J5YCArIGBldmVudExvZ2AuIENoaWxkIC8gbmV4dCBjb250ZXh0cyBpbmhlcml0XG4gICAqIHRoZSBtaXJyb3IgdmlhIGBjcmVhdGVOZXh0YCAvIGBjcmVhdGVDaGlsZGAuXG4gICAqXG4gICAqIENhbGxlZCBvbmNlIGF0IHRoZSByb290IGNvbnRleHQgYnkgYEV4ZWN1dGlvblJ1bnRpbWUuZW5hYmxlUmVkYWN0ZWRNaXJyb3IoKWAuXG4gICAqL1xuICB1c2VSZWRhY3RlZE1pcnJvcihtaXJyb3I6IFNoYXJlZE1lbW9yeSk6IHZvaWQge1xuICAgIHRoaXMucmVkYWN0ZWRTaGFyZWRNZW1vcnkgPSBtaXJyb3I7XG4gIH1cblxuICAvKiogUmV0dXJucyB0aGUgcmVkYWN0ZWQgbWlycm9yIGlmIGluc3RhbGxlZCwgZWxzZSB1bmRlZmluZWQuICovXG4gIGdldFJlZGFjdGVkU2hhcmVkTWVtb3J5KCk6IFNoYXJlZE1lbW9yeSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMucmVkYWN0ZWRTaGFyZWRNZW1vcnk7XG4gIH1cblxuICAvKiogTGF6aWx5IGNyZWF0ZXMgdGhlIHRyYW5zYWN0aW9uIGJ1ZmZlciBvbiB0aGUgc3RhZ2UncyBGSVJTVCBzdGF0ZSBhY2Nlc3Mg4oCUXG4gICAqICByZWFkcyBpbmNsdWRlZCwgc28gcmVhZC1vbmx5IHN0YWdlcyBjdXJyZW50bHkgcGF5IHRoZSBjbG9uZSBjb3N0IHRvby5cbiAgICogIChUcnVseSBsYXp5LW9uLXdyaXRlIGlzIGJhY2tsb2cgUGhhc2UtMyAjMTMuKSAqL1xuICBnZXRUcmFuc2FjdGlvbkJ1ZmZlcigpOiBUcmFuc2FjdGlvbkJ1ZmZlciB7XG4gICAgaWYgKCF0aGlzLmJ1ZmZlcikge1xuICAgICAgdGhpcy5idWZmZXIgPSBuZXcgVHJhbnNhY3Rpb25CdWZmZXIodGhpcy5zaGFyZWRNZW1vcnkuZ2V0U3RhdGUoKSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmJ1ZmZlcjtcbiAgfVxuXG4gIC8qKiBCdWlsZHMgYW4gYWJzb2x1dGUgcGF0aCBpbnNpZGUgdGhlIHNoYXJlZCBtZW1vcnkgKHJ1biBuYW1lc3BhY2UpLiAqL1xuICBwcml2YXRlIHdpdGhOYW1lc3BhY2UocGF0aDogc3RyaW5nW10sIGtleTogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgIGlmICghdGhpcy5ydW5JZCB8fCB0aGlzLnJ1bklkID09PSAnJykge1xuICAgICAgcmV0dXJuIFsuLi5wYXRoLCBrZXldO1xuICAgIH1cbiAgICByZXR1cm4gWydydW5zJywgdGhpcy5ydW5JZCwgLi4ucGF0aCwga2V5XTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBXcml0ZSBvcGVyYXRpb25zIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIHBhdGNoKHBhdGg6IHN0cmluZ1tdLCBrZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24sIHNob3VsZFJlZGFjdCA9IGZhbHNlKSB7XG4gICAgdGhpcy5nZXRUcmFuc2FjdGlvbkJ1ZmZlcigpLnNldCh0aGlzLndpdGhOYW1lc3BhY2UocGF0aCwga2V5KSwgdmFsdWUsIHNob3VsZFJlZGFjdCk7XG4gIH1cblxuICBzZXQocGF0aDogc3RyaW5nW10sIGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93bikge1xuICAgIHRoaXMucGF0Y2gocGF0aCwga2V5LCB2YWx1ZSk7XG4gIH1cblxuICBtZXJnZShwYXRoOiBzdHJpbmdbXSwga2V5OiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKSB7XG4gICAgdGhpcy5nZXRUcmFuc2FjdGlvbkJ1ZmZlcigpLm1lcmdlKHRoaXMud2l0aE5hbWVzcGFjZShwYXRoLCBrZXkpLCB2YWx1ZSk7XG4gIH1cblxuICBzZXRPYmplY3QoXG4gICAgcGF0aDogc3RyaW5nW10sXG4gICAga2V5OiBzdHJpbmcsXG4gICAgdmFsdWU6IHVua25vd24sXG4gICAgc2hvdWxkUmVkYWN0PzogYm9vbGVhbixcbiAgICBkZXNjcmlwdGlvbj86IHN0cmluZyxcbiAgICBvcGVyYXRpb25PdmVycmlkZT86ICdzZXQnIHwgJ2RlbGV0ZScsXG4gICkge1xuICAgIHRoaXMucGF0Y2gocGF0aCwga2V5LCB2YWx1ZSwgc2hvdWxkUmVkYWN0ID8/IGZhbHNlKTtcbiAgICAvLyBUcmFjayB1c2VyLWxldmVsIHdyaXRlIChwcmUtbmFtZXNwYWNlKSBmb3IgbWVtb3J5IHZpZXcgKyBvbkNvbW1pdFxuICAgIGNvbnN0IHVzZXJLZXkgPSBwYXRoLmxlbmd0aCA+IDAgPyBbLi4ucGF0aCwga2V5XS5qb2luKCcuJykgOiBrZXk7XG4gICAgdGhpcy5fc3RhZ2VXcml0ZXNbdXNlcktleV0gPSB7XG4gICAgICB2YWx1ZTogc2hvdWxkUmVkYWN0ID8gJ1tSRURBQ1RFRF0nIDogc3RydWN0dXJlZENsb25lKHZhbHVlKSxcbiAgICAgIG9wZXJhdGlvbjogb3BlcmF0aW9uT3ZlcnJpZGUgPz8gJ3NldCcsXG4gICAgfTtcbiAgICBpZiAoZGVzY3JpcHRpb24pIHtcbiAgICAgIGNvbnN0IHRhZ2dlZCA9IGRlc2NyaXB0aW9uLnN0YXJ0c1dpdGgoJ1snKSA/IGRlc2NyaXB0aW9uIDogYFtXUklURV0gJHtkZXNjcmlwdGlvbn1gO1xuICAgICAgdGhpcy5kZWJ1Zy5hZGRMb2coJ21lc3NhZ2UnLCB0YWdnZWQpO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZU9iamVjdChwYXRoOiBzdHJpbmdbXSwga2V5OiBzdHJpbmcsIHZhbHVlOiB1bmtub3duLCBkZXNjcmlwdGlvbj86IHN0cmluZywgc2hvdWxkUmVkYWN0PzogYm9vbGVhbikge1xuICAgIHRoaXMubWVyZ2UocGF0aCwga2V5LCB2YWx1ZSk7XG4gICAgLy8gVHJhY2sgdXNlci1sZXZlbCB3cml0ZSAocHJlLW5hbWVzcGFjZSkgZm9yIG1lbW9yeSB2aWV3ICsgb25Db21taXRcbiAgICBjb25zdCB1c2VyS2V5ID0gcGF0aC5sZW5ndGggPiAwID8gWy4uLnBhdGgsIGtleV0uam9pbignLicpIDoga2V5O1xuICAgIHRoaXMuX3N0YWdlV3JpdGVzW3VzZXJLZXldID0ge1xuICAgICAgdmFsdWU6IHNob3VsZFJlZGFjdCA/ICdbUkVEQUNURURdJyA6IHN0cnVjdHVyZWRDbG9uZSh2YWx1ZSksXG4gICAgICBvcGVyYXRpb246ICd1cGRhdGUnLFxuICAgIH07XG4gICAgaWYgKGRlc2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLmRlYnVnLmFkZExvZygnbWVzc2FnZScsIGRlc2NyaXB0aW9uKTtcbiAgICB9XG4gIH1cblxuICBzZXRSb290KGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93bikge1xuICAgIHRoaXMucGF0Y2goW10sIGtleSwgdmFsdWUpO1xuICB9XG5cbiAgc2V0R2xvYmFsKGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93biwgZGVzY3JpcHRpb24/OiBzdHJpbmcpIHtcbiAgICB0aGlzLmdldFRyYW5zYWN0aW9uQnVmZmVyKCkuc2V0KFtrZXldLCB2YWx1ZSk7XG4gICAgaWYgKGRlc2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLmRlYnVnLmFkZExvZygnbWVzc2FnZScsIGRlc2NyaXB0aW9uKTtcbiAgICB9XG4gIH1cblxuICB1cGRhdGVHbG9iYWxDb250ZXh0KGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93bikge1xuICAgIHRoaXMuZ2V0VHJhbnNhY3Rpb25CdWZmZXIoKS5zZXQoW2tleV0sIHZhbHVlKTtcbiAgfVxuXG4gIGFwcGVuZFRvQXJyYXkocGF0aDogc3RyaW5nW10sIGtleTogc3RyaW5nLCBpdGVtczogdW5rbm93bltdLCBkZXNjcmlwdGlvbj86IHN0cmluZykge1xuICAgIGNvbnN0IGV4aXN0aW5nID0gdGhpcy5nZXRWYWx1ZShwYXRoLCBrZXkpO1xuICAgIGNvbnN0IG1lcmdlZCA9IEFycmF5LmlzQXJyYXkoZXhpc3RpbmcpID8gWy4uLmV4aXN0aW5nLCAuLi5pdGVtc10gOiBbLi4uaXRlbXNdO1xuICAgIHRoaXMuc2V0T2JqZWN0KHBhdGgsIGtleSwgbWVyZ2VkLCBmYWxzZSwgZGVzY3JpcHRpb24pO1xuICB9XG5cbiAgbWVyZ2VPYmplY3QocGF0aDogc3RyaW5nW10sIGtleTogc3RyaW5nLCBvYmo6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBkZXNjcmlwdGlvbj86IHN0cmluZykge1xuICAgIGNvbnN0IGV4aXN0aW5nID0gdGhpcy5nZXRWYWx1ZShwYXRoLCBrZXkpO1xuICAgIGNvbnN0IG1lcmdlZCA9XG4gICAgICBleGlzdGluZyAmJiB0eXBlb2YgZXhpc3RpbmcgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KGV4aXN0aW5nKVxuICAgICAgICA/IHsgLi4uKGV4aXN0aW5nIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KSwgLi4ub2JqIH1cbiAgICAgICAgOiB7IC4uLm9iaiB9O1xuICAgIHRoaXMuc2V0T2JqZWN0KHBhdGgsIGtleSwgbWVyZ2VkLCBmYWxzZSwgZGVzY3JpcHRpb24pO1xuICB9XG5cbiAgLy8g4pSA4pSAIFJlYWQgb3BlcmF0aW9ucyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICBnZXRWYWx1ZShwYXRoOiBzdHJpbmdbXSwga2V5Pzogc3RyaW5nLCBkZXNjcmlwdGlvbj86IHN0cmluZykge1xuICAgIGNvbnN0IGJ1ZiA9IHRoaXMuZ2V0VHJhbnNhY3Rpb25CdWZmZXIoKTtcbiAgICBjb25zdCBmcm9tUGF0Y2ggPSBidWYuZ2V0KHRoaXMud2l0aE5hbWVzcGFjZShwYXRoLCBrZXkgYXMgc3RyaW5nKSk7XG4gICAgY29uc3QgdmFsdWUgPSB0eXBlb2YgZnJvbVBhdGNoICE9PSAndW5kZWZpbmVkJyA/IGZyb21QYXRjaCA6IHRoaXMuc2hhcmVkTWVtb3J5LmdldFZhbHVlKHRoaXMucnVuSWQsIHBhdGgsIGtleSk7XG4gICAgLy8gVHJhY2sgdXNlci1sZXZlbCByZWFkIChwcmUtbmFtZXNwYWNlKSBmb3IgbWVtb3J5IHZpZXdcbiAgICBpZiAoa2V5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IHVzZXJLZXkgPSBwYXRoLmxlbmd0aCA+IDAgPyBbLi4ucGF0aCwga2V5XS5qb2luKCcuJykgOiBrZXk7XG4gICAgICB0aGlzLl9zdGFnZVJlYWRzW3VzZXJLZXldID0gdmFsdWUgIT09IHVuZGVmaW5lZCA/IHN0cnVjdHVyZWRDbG9uZSh2YWx1ZSkgOiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGlmIChkZXNjcmlwdGlvbikge1xuICAgICAgdGhpcy5kZWJ1Zy5hZGRMb2coJ21lc3NhZ2UnLCBgW1JFQURdICR7ZGVzY3JpcHRpb259YCk7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIC8qKiBSZWFkIHN0YXRlIHdpdGhvdXQgdHJhY2tpbmcgaW4gX3N0YWdlUmVhZHMgb3IgcGF5aW5nIHN0cnVjdHVyZWRDbG9uZSBjb3N0LlxuICAgKiAgVXNlZCBieSBTY29wZUZhY2FkZS5nZXRWYWx1ZVNpbGVudCgpIGZvciBhcnJheSBwcm94eSBpbnRlcm5hbCBvcGVyYXRpb25zLiAqL1xuICBnZXRWYWx1ZURpcmVjdChwYXRoOiBzdHJpbmdbXSwga2V5Pzogc3RyaW5nKTogdW5rbm93biB7XG4gICAgY29uc3QgYnVmID0gdGhpcy5nZXRUcmFuc2FjdGlvbkJ1ZmZlcigpO1xuICAgIGNvbnN0IGZyb21QYXRjaCA9IGJ1Zi5nZXQodGhpcy53aXRoTmFtZXNwYWNlKHBhdGgsIGtleSBhcyBzdHJpbmcpKTtcbiAgICByZXR1cm4gdHlwZW9mIGZyb21QYXRjaCAhPT0gJ3VuZGVmaW5lZCcgPyBmcm9tUGF0Y2ggOiB0aGlzLnNoYXJlZE1lbW9yeS5nZXRWYWx1ZSh0aGlzLnJ1bklkLCBwYXRoLCBrZXkpO1xuICB9XG5cbiAgZ2V0Um9vdChrZXk6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLnNoYXJlZE1lbW9yeS5nZXRWYWx1ZSh0aGlzLnJ1bklkLCBbXSwga2V5KTtcbiAgfVxuXG4gIGdldEdsb2JhbChrZXk6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLnNoYXJlZE1lbW9yeS5nZXRWYWx1ZSgnJywgW10sIGtleSk7XG4gIH1cblxuICBnZXRTY29wZSgpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gICAgcmV0dXJuIHRoaXMuc2hhcmVkTWVtb3J5LmdldFN0YXRlKCk7XG4gIH1cblxuICBnZXRSdW5JZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnJ1bklkO1xuICB9XG5cbiAgLy8g4pSA4pSAIENvbW1pdCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICAvKiogUmVnaXN0ZXIgYW4gb2JzZXJ2ZXIgdGhhdCBmaXJlcyBhZnRlciBjb21taXQoKSBhcHBsaWVzIHBhdGNoZXMuXG4gICAqICBVc2VkIGJ5IFNjb3BlRmFjYWRlIHRvIGRpc3BhdGNoIFNjb3BlUmVjb3JkZXIub25Db21taXQgZXZlbnRzLiAqL1xuICBzZXRDb21taXRPYnNlcnZlcihcbiAgICBvYnNlcnZlcjogKG11dGF0aW9uczogUmVjb3JkPHN0cmluZywgeyB2YWx1ZTogdW5rbm93bjsgb3BlcmF0aW9uOiAnc2V0JyB8ICd1cGRhdGUnIHwgJ2RlbGV0ZScgfT4pID0+IHZvaWQsXG4gICk6IHZvaWQge1xuICAgIHRoaXMuX2NvbW1pdE9ic2VydmVyID0gb2JzZXJ2ZXI7XG4gIH1cblxuICBjb21taXQoKTogdm9pZCB7XG4gICAgY29uc3QgYnVmID0gdGhpcy5nZXRUcmFuc2FjdGlvbkJ1ZmZlcigpO1xuICAgIGNvbnN0IGJ1bmRsZSA9IGJ1Zi5jb21taXQoKTtcbiAgICBjb25zdCBjb21taXRCdW5kbGUgPSB7XG4gICAgICAuLi5idW5kbGUsXG4gICAgICBzdGFnZTogdGhpcy5zdGFnZU5hbWUsXG4gICAgICBzdGFnZUlkOiB0aGlzLnN0YWdlSWQsXG4gICAgICBydW50aW1lU3RhZ2VJZDogdGhpcy5ydW50aW1lU3RhZ2VJZCxcbiAgICB9O1xuXG4gICAgdGhpcy5zaGFyZWRNZW1vcnkuYXBwbHlQYXRjaChjb21taXRCdW5kbGUub3ZlcndyaXRlLCBjb21taXRCdW5kbGUudXBkYXRlcywgY29tbWl0QnVuZGxlLnRyYWNlKTtcblxuICAgIC8vIEFscmVhZHktY29tcHV0ZWQgcmVkYWN0ZWQgcGF0Y2hlcyBmZWVkIHRocmVlIGNvbnN1bWVyczpcbiAgICAvLyAgIDEuIHRoZSBwYXJhbGxlbCByZWRhY3RlZCBtaXJyb3IgKGlmIGVuYWJsZWQpXG4gICAgLy8gICAyLiB0aGUgZXZlbnQgbG9nIChwZXJzaXN0ZWQgdHJhY2UpXG4gICAgLy8gICAzLiAoZnV0dXJlKSBhbnl0aGluZyBlbHNlIHRoYXQgd2FudHMgYSBzY3J1YmJlZCB2aWV3IGF0IGNvbW1pdCB0aW1lXG4gICAgLy8gQ29tcHV0aW5nIG9uY2Uga2VlcHMgY29zdCBsaW5lYXIgaW4gdGhlIGNvbW1pdCBzaXplOyBubyBwb3N0LXBhc3Mgd2Fsay5cbiAgICBjb25zdCByZWRhY3RlZE92ZXJ3cml0ZSA9IHJlZGFjdFBhdGNoKGNvbW1pdEJ1bmRsZS5vdmVyd3JpdGUsIGNvbW1pdEJ1bmRsZS5yZWRhY3RlZFBhdGhzKTtcbiAgICBjb25zdCByZWRhY3RlZFVwZGF0ZXMgPSByZWRhY3RQYXRjaChjb21taXRCdW5kbGUudXBkYXRlcywgY29tbWl0QnVuZGxlLnJlZGFjdGVkUGF0aHMpO1xuXG4gICAgdGhpcy5yZWRhY3RlZFNoYXJlZE1lbW9yeT8uYXBwbHlQYXRjaChyZWRhY3RlZE92ZXJ3cml0ZSwgcmVkYWN0ZWRVcGRhdGVzLCBjb21taXRCdW5kbGUudHJhY2UpO1xuXG4gICAgdGhpcy5ldmVudExvZz8ucmVjb3JkKHtcbiAgICAgIC4uLmNvbW1pdEJ1bmRsZSxcbiAgICAgIHJlZGFjdGVkUGF0aHM6IEFycmF5LmZyb20oY29tbWl0QnVuZGxlLnJlZGFjdGVkUGF0aHMudmFsdWVzKCkpLFxuICAgICAgb3ZlcndyaXRlOiByZWRhY3RlZE92ZXJ3cml0ZSxcbiAgICAgIHVwZGF0ZXM6IHJlZGFjdGVkVXBkYXRlcyxcbiAgICB9KTtcblxuICAgIC8vIE5vdGlmeSBvYnNlcnZlciAoU2NvcGVGYWNhZGUpIHdpdGggdHJhY2tlZCBtdXRhdGlvbnNcbiAgICBpZiAodGhpcy5fY29tbWl0T2JzZXJ2ZXIpIHtcbiAgICAgIHRoaXMuX2NvbW1pdE9ic2VydmVyKHsgLi4udGhpcy5fc3RhZ2VXcml0ZXMgfSk7XG4gICAgfVxuICB9XG5cbiAgLy8g4pSA4pSAIFRyZWUgbmF2aWdhdGlvbiDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICBjcmVhdGVOZXh0KHBhdGg6IHN0cmluZywgc3RhZ2VOYW1lOiBzdHJpbmcsIHN0YWdlSWQ6IHN0cmluZywgaXNEZWNpZGVyID0gZmFsc2UpOiBTdGFnZUNvbnRleHQge1xuICAgIGlmICghdGhpcy5uZXh0KSB7XG4gICAgICB0aGlzLm5leHQgPSBuZXcgU3RhZ2VDb250ZXh0KHBhdGgsIHN0YWdlTmFtZSwgc3RhZ2VJZCwgdGhpcy5zaGFyZWRNZW1vcnksICcnLCB0aGlzLmV2ZW50TG9nLCBpc0RlY2lkZXIpO1xuICAgICAgdGhpcy5uZXh0LnBhcmVudCA9IHRoaXM7XG4gICAgICAvLyBQcm9wYWdhdGUgdGhlIHJlZGFjdGVkIG1pcnJvciBkb3duIHRoZSBjb250ZXh0IHRyZWUgc28gZXZlcnkgY29tbWl0XG4gICAgICAvLyBpbiB0aGUgcnVuIHdyaXRlcyB0byBib3RoIHZpZXdzLlxuICAgICAgaWYgKHRoaXMucmVkYWN0ZWRTaGFyZWRNZW1vcnkpIHRoaXMubmV4dC5yZWRhY3RlZFNoYXJlZE1lbW9yeSA9IHRoaXMucmVkYWN0ZWRTaGFyZWRNZW1vcnk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLm5leHQ7XG4gIH1cblxuICBjcmVhdGVDaGlsZChydW5JZDogc3RyaW5nLCBicmFuY2hJZDogc3RyaW5nLCBzdGFnZU5hbWU6IHN0cmluZywgc3RhZ2VJZDogc3RyaW5nLCBpc0RlY2lkZXIgPSBmYWxzZSk6IFN0YWdlQ29udGV4dCB7XG4gICAgaWYgKCF0aGlzLmNoaWxkcmVuKSB7XG4gICAgICB0aGlzLmNoaWxkcmVuID0gW107XG4gICAgfVxuICAgIGNvbnN0IGNoaWxkID0gbmV3IFN0YWdlQ29udGV4dChydW5JZCwgc3RhZ2VOYW1lLCBzdGFnZUlkLCB0aGlzLnNoYXJlZE1lbW9yeSwgYnJhbmNoSWQsIHRoaXMuZXZlbnRMb2csIGlzRGVjaWRlcik7XG4gICAgY2hpbGQucGFyZW50ID0gdGhpcztcbiAgICBpZiAodGhpcy5yZWRhY3RlZFNoYXJlZE1lbW9yeSkgY2hpbGQucmVkYWN0ZWRTaGFyZWRNZW1vcnkgPSB0aGlzLnJlZGFjdGVkU2hhcmVkTWVtb3J5O1xuICAgIHRoaXMuY2hpbGRyZW4ucHVzaChjaGlsZCk7XG4gICAgcmV0dXJuIGNoaWxkO1xuICB9XG5cbiAgY3JlYXRlRGVjaWRlcihwYXRoOiBzdHJpbmcsIHN0YWdlTmFtZTogc3RyaW5nLCBzdGFnZUlkOiBzdHJpbmcpOiBTdGFnZUNvbnRleHQge1xuICAgIHJldHVybiB0aGlzLmNyZWF0ZU5leHQocGF0aCwgc3RhZ2VOYW1lLCBzdGFnZUlkLCB0cnVlKTtcbiAgfVxuXG4gIHNldEFzRGVjaWRlcigpOiBTdGFnZUNvbnRleHQge1xuICAgIHRoaXMuaXNEZWNpZGVyID0gdHJ1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHNldEFzRm9yaygpOiBTdGFnZUNvbnRleHQge1xuICAgIHRoaXMuaXNGb3JrID0gdHJ1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIOKUgOKUgCBEaWFnbm9zdGljcyBkZWxlZ2F0aW9uIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIGFkZExvZyhrZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24sIHBhdGg/OiBzdHJpbmdbXSkge1xuICAgIHRoaXMuZGVidWcuYWRkTG9nKGtleSwgdmFsdWUsIHBhdGgpO1xuICB9XG5cbiAgc2V0TG9nKGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93biwgcGF0aD86IHN0cmluZ1tdKSB7XG4gICAgdGhpcy5kZWJ1Zy5zZXRMb2coa2V5LCB2YWx1ZSwgcGF0aCk7XG4gIH1cblxuICBhZGRNZXRyaWMoa2V5OiBzdHJpbmcsIHZhbHVlOiB1bmtub3duLCBwYXRoPzogc3RyaW5nW10pIHtcbiAgICB0aGlzLmRlYnVnLmFkZE1ldHJpYyhrZXksIHZhbHVlLCBwYXRoKTtcbiAgfVxuXG4gIHNldE1ldHJpYyhrZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24sIHBhdGg/OiBzdHJpbmdbXSkge1xuICAgIHRoaXMuZGVidWcuc2V0TWV0cmljKGtleSwgdmFsdWUsIHBhdGgpO1xuICB9XG5cbiAgYWRkRXZhbChrZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24sIHBhdGg/OiBzdHJpbmdbXSkge1xuICAgIHRoaXMuZGVidWcuYWRkRXZhbChrZXksIHZhbHVlLCBwYXRoKTtcbiAgfVxuXG4gIHNldEV2YWwoa2V5OiBzdHJpbmcsIHZhbHVlOiB1bmtub3duLCBwYXRoPzogc3RyaW5nW10pIHtcbiAgICB0aGlzLmRlYnVnLnNldEV2YWwoa2V5LCB2YWx1ZSwgcGF0aCk7XG4gIH1cblxuICBhZGRFcnJvcihrZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24sIHBhdGg/OiBzdHJpbmdbXSkge1xuICAgIHRoaXMuZGVidWcuYWRkRXJyb3Ioa2V5LCB2YWx1ZSwgcGF0aCk7XG4gIH1cblxuICBhZGRGbG93RGVidWdNZXNzYWdlKFxuICAgIHR5cGU6IEZsb3dDb250cm9sVHlwZSxcbiAgICBkZXNjcmlwdGlvbjogc3RyaW5nLFxuICAgIG9wdGlvbnM/OiB7IHRhcmdldFN0YWdlPzogc3RyaW5nIHwgc3RyaW5nW107IHJhdGlvbmFsZT86IHN0cmluZzsgY291bnQ/OiBudW1iZXI7IGl0ZXJhdGlvbj86IG51bWJlciB9LFxuICApIHtcbiAgICBjb25zdCBmbG93TWVzc2FnZTogRmxvd01lc3NhZ2UgPSB7IHR5cGUsIGRlc2NyaXB0aW9uLCB0aW1lc3RhbXA6IERhdGUubm93KCksIC4uLm9wdGlvbnMgfTtcbiAgICB0aGlzLmRlYnVnLmFkZEZsb3dNZXNzYWdlKGZsb3dNZXNzYWdlKTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBTbmFwc2hvdCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICBnZXRTdGFnZUlkKCk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLnJ1bklkIHx8IHRoaXMucnVuSWQgPT09ICcnKSByZXR1cm4gdGhpcy5zdGFnZU5hbWU7XG4gICAgcmV0dXJuIGAke3RoaXMucnVuSWR9LiR7dGhpcy5zdGFnZU5hbWV9YDtcbiAgfVxuXG4gIGdldFNuYXBzaG90KCk6IFN0YWdlU25hcHNob3Qge1xuICAgIC8vIEl0ZXJhdGl2ZSB3YWxrIChleHBsaWNpdCB3b3JrIHN0YWNrKSwgTk9UIHJlY3Vyc2lvbjogdGhlIGV4ZWN1dGlvblxuICAgIC8vIHRyZWUgZGVlcGVucyBieSBvbmUgbGV2ZWwgcGVyIGV4ZWN1dGVkIHN0YWdlIGFsb25nIGBuZXh0YCBjaGFpbnMsIGFuZFxuICAgIC8vIHRoZSB0cmFtcG9saW5lZCB0cmF2ZXJzZXIgYWxsb3dzIGNoYWlucy9sb29wcyBvZiB0ZW5zIG9mIHRob3VzYW5kcyBvZlxuICAgIC8vIHN0YWdlcyDigJQgZmFyIGRlZXBlciB0aGFuIGEgcmVjdXJzaXZlIHNlcmlhbGl6ZXIgY2FuIHdhbGsgYmVmb3JlXG4gICAgLy8gXCJNYXhpbXVtIGNhbGwgc3RhY2sgc2l6ZSBleGNlZWRlZFwiLlxuICAgIGNvbnN0IHJvb3QgPSB0aGlzLnNuYXBzaG90U2VsZigpO1xuICAgIGNvbnN0IHdvcms6IEFycmF5PHsgY3R4OiBTdGFnZUNvbnRleHQ7IHNuYXA6IFN0YWdlU25hcHNob3QgfT4gPSBbeyBjdHg6IHRoaXMsIHNuYXA6IHJvb3QgfV07XG4gICAgd2hpbGUgKHdvcmsubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgeyBjdHgsIHNuYXAgfSA9IHdvcmsucG9wKCkhO1xuICAgICAgaWYgKGN0eC5uZXh0KSB7XG4gICAgICAgIGNvbnN0IG5leHRTbmFwID0gY3R4Lm5leHQuc25hcHNob3RTZWxmKCk7XG4gICAgICAgIHNuYXAubmV4dCA9IG5leHRTbmFwO1xuICAgICAgICB3b3JrLnB1c2goeyBjdHg6IGN0eC5uZXh0LCBzbmFwOiBuZXh0U25hcCB9KTtcbiAgICAgIH1cbiAgICAgIGlmIChjdHguY2hpbGRyZW4pIHtcbiAgICAgICAgc25hcC5jaGlsZHJlbiA9IGN0eC5jaGlsZHJlbi5tYXAoKGNoaWxkKSA9PiB7XG4gICAgICAgICAgY29uc3QgY2hpbGRTbmFwID0gY2hpbGQuc25hcHNob3RTZWxmKCk7XG4gICAgICAgICAgd29yay5wdXNoKHsgY3R4OiBjaGlsZCwgc25hcDogY2hpbGRTbmFwIH0pO1xuICAgICAgICAgIHJldHVybiBjaGlsZFNuYXA7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcm9vdDtcbiAgfVxuXG4gIC8qKiBTbmFwc2hvdCBvZiBUSElTIGNvbnRleHQncyBvd24gZmllbGRzIOKAlCBgbmV4dGAvYGNoaWxkcmVuYCBhcmUgZmlsbGVkXG4gICAqICBpbiBieSB0aGUgaXRlcmF0aXZlIHdhbGsgaW4gYGdldFNuYXBzaG90YC4gKi9cbiAgcHJpdmF0ZSBzbmFwc2hvdFNlbGYoKTogU3RhZ2VTbmFwc2hvdCB7XG4gICAgY29uc3Qgc25hcHNob3Q6IFN0YWdlU25hcHNob3QgPSB7XG4gICAgICBpZDogdGhpcy5zdGFnZUlkLFxuICAgICAgcnVudGltZVN0YWdlSWQ6IHRoaXMucnVudGltZVN0YWdlSWQgfHwgdW5kZWZpbmVkLFxuICAgICAgbmFtZTogdGhpcy5zdGFnZU5hbWUsXG4gICAgICBpc0RlY2lkZXI6IHRoaXMuaXNEZWNpZGVyLFxuICAgICAgaXNGb3JrOiB0aGlzLmlzRm9yayxcbiAgICAgIGxvZ3M6IHRoaXMuZGVidWcubG9nQ29udGV4dCxcbiAgICAgIGVycm9yczogdGhpcy5kZWJ1Zy5lcnJvckNvbnRleHQsXG4gICAgICBtZXRyaWNzOiB0aGlzLmRlYnVnLm1ldHJpY0NvbnRleHQsXG4gICAgICBldmFsczogdGhpcy5kZWJ1Zy5ldmFsQ29udGV4dCxcbiAgICB9O1xuICAgIGlmIChPYmplY3Qua2V5cyh0aGlzLl9zdGFnZVdyaXRlcykubGVuZ3RoID4gMCkge1xuICAgICAgLy8gRXh0cmFjdCB2YWx1ZXMgb25seSBmb3IgdGhlIHNuYXBzaG90IChzdHJpcCBvcGVyYXRpb24gbWV0YWRhdGEpXG4gICAgICBjb25zdCB3cml0ZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG4gICAgICBmb3IgKGNvbnN0IFtrLCBlbnRyeV0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5fc3RhZ2VXcml0ZXMpKSB7XG4gICAgICAgIHdyaXRlc1trXSA9IGVudHJ5LnZhbHVlO1xuICAgICAgfVxuICAgICAgc25hcHNob3Quc3RhZ2VXcml0ZXMgPSB3cml0ZXM7XG4gICAgfVxuICAgIGlmIChPYmplY3Qua2V5cyh0aGlzLl9zdGFnZVJlYWRzKS5sZW5ndGggPiAwKSB7XG4gICAgICBzbmFwc2hvdC5zdGFnZVJlYWRzID0gdGhpcy5fc3RhZ2VSZWFkcztcbiAgICB9XG4gICAgaWYgKHRoaXMuZGVzY3JpcHRpb24pIHtcbiAgICAgIHNuYXBzaG90LmRlc2NyaXB0aW9uID0gdGhpcy5kZXNjcmlwdGlvbjtcbiAgICB9XG4gICAgaWYgKHRoaXMuc3ViZmxvd0lkKSB7XG4gICAgICBzbmFwc2hvdC5zdWJmbG93SWQgPSB0aGlzLnN1YmZsb3dJZDtcbiAgICB9XG4gICAgaWYgKHRoaXMuZGVidWcuZmxvd01lc3NhZ2VzLmxlbmd0aCA+IDApIHtcbiAgICAgIHNuYXBzaG90LmZsb3dNZXNzYWdlcyA9IHRoaXMuZGVidWcuZmxvd01lc3NhZ2VzO1xuICAgIH1cbiAgICByZXR1cm4gc25hcHNob3Q7XG4gIH1cbn1cbiJdfQ==
|
|
540
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3RhZ2VDb250ZXh0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9tZW1vcnkvU3RhZ2VDb250ZXh0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7OztHQVFHO0FBRUgsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRS9ELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFekMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFM0QsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ2pELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFekM7Ozs7Ozs7R0FPRztBQUNILFNBQVMsa0JBQWtCLENBQUMsS0FBYztJQUN4QyxJQUFJLEtBQUssS0FBSyxJQUFJO1FBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDO0lBQ2pFLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDOUIsT0FBTyxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsbUJBQW1CLENBQUMsRUFBRSxDQUFDO0lBQ25ILENBQUM7SUFDRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO1FBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQzVGLElBQUksS0FBSyxZQUFZLEdBQUcsSUFBSSxL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QUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFN0YWdlQ29udGV4dCDigJQgRXhlY3V0aW9uIGNvbnRleHQgZm9yIGEgc2luZ2xlIHN0YWdlIGluIGEgZmxvd2NoYXJ0IHJ1blxuICpcbiAqIExpa2UgYSBzdGFjayBmcmFtZSBpbiBhIGNvbXBpbGVyL3J1bnRpbWU6XG4gKiAtIFJlZmVyZW5jZSB0byBTaGFyZWRNZW1vcnkgKGFjY2Vzc2luZyBoZWFwIG1lbW9yeSlcbiAqIC0gVHJhbnNhY3Rpb25CdWZmZXIgZm9yIHN0YWdpbmcgbXV0YXRpb25zICh0cmFuc2FjdGlvbiBidWZmZXIpXG4gKiAtIExpbmtzIHRvIHBhcmVudC9jaGlsZC9uZXh0IGNvbnRleHRzIChjYWxsIHN0YWNrIGZyYW1lcylcbiAqIC0gRGlhZ25vc3RpY0NvbGxlY3RvciBmb3IgbG9ncywgZXJyb3JzLCBtZXRyaWNzXG4gKi9cblxuaW1wb3J0IHsgaXNEZXZNb2RlIH0gZnJvbSAnLi4vc2NvcGUvZGV0ZWN0Q2lyY3VsYXIuanMnO1xuaW1wb3J0IHsgRGlhZ25vc3RpY0NvbGxlY3RvciB9IGZyb20gJy4vRGlhZ25vc3RpY0NvbGxlY3Rvci5qcyc7XG5pbXBvcnQgeyBFdmVudExvZyB9IGZyb20gJy4vRXZlbnRMb2cuanMnO1xuaW1wb3J0IHsgbmF0aXZlR2V0IH0gZnJvbSAnLi9wYXRoT3BzLmpzJztcbmltcG9ydCB7IFNoYXJlZE1lbW9yeSB9IGZyb20gJy4vU2hhcmVkTWVtb3J5LmpzJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uQnVmZmVyIH0gZnJvbSAnLi9UcmFuc2FjdGlvbkJ1ZmZlci5qcyc7XG5pbXBvcnQgdHlwZSB7IEZsb3dDb250cm9sVHlwZSwgRmxvd01lc3NhZ2UsIFJlYWRTdW1tYXJ5TWFya2VyLCBSZWFkVHJhY2tpbmdNb2RlLCBTdGFnZVNuYXBzaG90IH0gZnJvbSAnLi90eXBlcy5qcyc7XG5pbXBvcnQgeyBSRUFEX1BSRVZJRVdfTEVOR1RIIH0gZnJvbSAnLi90eXBlcy5qcyc7XG5pbXBvcnQgeyByZWRhY3RQYXRjaCB9IGZyb20gJy4vdXRpbHMuanMnO1xuXG4vKipcbiAqIENoZWFwIHN1bW1hcnkgb2YgYSByZWFkIHZhbHVlIGZvciBgcmVhZFRyYWNraW5nOiAnc3VtbWFyeSdgICgjMTQpLlxuICpcbiAqIERlbGliZXJhdGVseSBhdm9pZHMgZXZlcnkgTyh2YWx1ZSkgb3BlcmF0aW9uOiBubyBjbG9uZSwgbm8gc2VyaWFsaXphdGlvbi5cbiAqIGBzaXplYCBpcyBhIHByb3h5IChzdHJpbmcgbGVuZ3RoIC8gYXJyYXkgbGVuZ3RoIC8gc2hhbGxvdyBrZXkgY291bnQpIGFuZFxuICogYHByZXZpZXdgIGV4aXN0cyBvbmx5IHdoZXJlIHByb2R1Y2luZyBpdCBpcyBPKHByZXZpZXcpIOKAlCBwcmltaXRpdmVzIGFuZFxuICogc3RyaW5ncy4gU2VlIHtAbGluayBSZWFkU3VtbWFyeU1hcmtlcn0gZm9yIHRoZSBob25lc3QtY29zdCBjb250cmFjdC5cbiAqL1xuZnVuY3Rpb24gc3VtbWFyaXplUmVhZFZhbHVlKHZhbHVlOiB1bmtub3duKTogUmVhZFN1bW1hcnlNYXJrZXIge1xuICBpZiAodmFsdWUgPT09IG51bGwpIHJldHVybiB7IF9fcmVhZFN1bW1hcnk6IHRydWUsIHR5cGU6ICdudWxsJyB9O1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB7IF9fcmVhZFN1bW1hcnk6IHRydWUsIHR5cGU6ICdzdHJpbmcnLCBzaXplOiB2YWx1ZS5sZW5ndGgsIHByZXZpZXc6IHZhbHVlLnNsaWNlKDAsIFJFQURfUFJFVklFV19MRU5HVEgpIH07XG4gIH1cbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSByZXR1cm4geyBfX3JlYWRTdW1tYXJ5OiB0cnVlLCB0eXBlOiAnYXJyYXknLCBzaXplOiB2YWx1ZS5sZW5ndGggfTtcbiAgaWYgKHZhbHVlIGluc3RhbmNlb2YgTWFwIHx8IHZhbHVlIGluc3RhbmNlb2YgU2V0KSB7XG4gICAgLy8gT2JqZWN0LmtleXMoKSBvbiBhIE1hcC9TZXQgaXMgYWx3YXlzIFtdIOKAlCByZXBvcnQgdGhlIHJlYWwgZW50cnkgY291bnQuXG4gICAgcmV0dXJuIHsgX19yZWFkU3VtbWFyeTogdHJ1ZSwgdHlwZTogJ29iamVjdCcsIHNpemU6IHZhbHVlLnNpemUgfTtcbiAgfVxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiB7IF9fcmVhZFN1bW1hcnk6IHRydWUsIHR5cGU6ICdvYmplY3QnLCBzaXplOiBPYmplY3Qua2V5cyh2YWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikubGVuZ3RoIH07XG4gIH1cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJykgcmV0dXJuIHsgX19yZWFkU3VtbWFyeTogdHJ1ZSwgdHlwZTogJ2Z1bmN0aW9uJyB9O1xuICAvLyBudW1iZXIgfCBib29sZWFuIHwgYmlnaW50IHwgc3ltYm9sIOKAlCBTdHJpbmcoKSBpcyBPKHJlbmRlcmVkIGxlbmd0aClcbiAgcmV0dXJuIHtcbiAgICBfX3JlYWRTdW1tYXJ5OiB0cnVlLFxuICAgIHR5cGU6IHR5cGVvZiB2YWx1ZSBhcyBSZWFkU3VtbWFyeU1hcmtlclsndHlwZSddLFxuICAgIHByZXZpZXc6IFN0cmluZyh2YWx1ZSkuc2xpY2UoMCwgUkVBRF9QUkVWSUVXX0xFTkdUSCksXG4gIH07XG59XG5cbmV4cG9ydCBjbGFzcyBTdGFnZUNvbnRleHQge1xuICBwcml2YXRlIHNoYXJlZE1lbW9yeTogU2hhcmVkTWVtb3J5O1xuICAvKipcbiAgICogUGFyYWxsZWwgcmVkYWN0ZWQgbWlycm9yIG9mIGBzaGFyZWRNZW1vcnlgLiBQb3B1bGF0ZWQgaW4gYGNvbW1pdCgpYCB3aXRoXG4gICAqIHRoZSBhbHJlYWR5LWNvbXB1dGVkIHJlZGFjdGVkIHBhdGNoZXMgKHRoZSBzYW1lIG9uZXMgZmVkIHRvIGBldmVudExvZ2ApLlxuICAgKiBQcmVzZW50ICoqb25seSoqIHdoZW4gdGhlIGV4ZWN1dG9yIGhhcyBiZWVuIHRvbGQgdG8gbWFpbnRhaW4gYSByZWRhY3RlZFxuICAgKiB2aWV3IOKAlCBpLmUuIHdoZW4gYSBgUmVkYWN0aW9uUG9saWN5YCBpcyBjb25maWd1cmVkLiBPdGhlcndpc2UgdW5kZWZpbmVkLFxuICAgKiB6ZXJvIGV4dHJhIHdvcmsgcGVyIGNvbW1pdC5cbiAgICpcbiAgICogVGhlIG1pcnJvciBpcyByZWFkIHZpYSBgRmxvd0NoYXJ0RXhlY3V0b3IuZ2V0U25hcHNob3QoeyByZWRhY3Q6IHRydWUgfSlgXG4gICAqIGFuZCBpcyB0aGUgZm91bmRhdGlvbiBmb3IgdGhlIFwiZXhwb3J0IHRyYWNlXCIgLyBwYXN0ZS1pbnRvLXZpZXdlciBmZWF0dXJlXG4gICAqIOKAlCBjb25zdW1lcnMgc2hhcmUgdGhlIHJlZGFjdGVkIHZpZXcgZXh0ZXJuYWxseSB3aXRob3V0IGxlYWtpbmcgcmF3IFBJSVxuICAgKiB0aHJvdWdoIGBzaGFyZWRTdGF0ZWAuXG4gICAqL1xuICBwcml2YXRlIHJlZGFjdGVkU2hhcmVkTWVtb3J5PzogU2hhcmVkTWVtb3J5O1xuICBwcml2YXRlIGJ1ZmZlcj86IFRyYW5zYWN0aW9uQnVmZmVyO1xuICAvKipcbiAgICogQ29tbWl0dGVkLXN0YXRlIHZpZXcgY2FwdHVyZWQgYXQgdGhpcyBzdGFnZSdzIEZJUlNUIHRvdWNoIChmaXJzdCByZWFkIE9SXG4gICAqIGZpcnN0IHdyaXRlKSDigJQgaGVsZCBieSBSRUZFUkVOQ0UsIG5ldmVyIGNsb25lZC4gU2VlXG4gICAqIHtAbGluayBmaXJzdFRvdWNoU3RhdGV9IGZvciB0aGUgYWxnb3JpdGhtIGFuZCB0aGUgaW1tdXRhYmlsaXR5IGludmFyaWFudFxuICAgKiB0aGF0IG1ha2VzIGEgYmFyZSByZWZlcmVuY2Ugc2FmZS5cbiAgICovXG4gIHByaXZhdGUgc3RhdGVWaWV3PzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIHByaXZhdGUgZXZlbnRMb2c/OiBFdmVudExvZztcblxuICBwdWJsaWMgc3RhZ2VOYW1lID0gJyc7XG4gIC8qKiBVbmlxdWUgc3RhZ2UgaWRlbnRpZmllciBmcm9tIHRoZSBidWlsZGVyIChtYXRjaGVzIHNwZWMgbm9kZSBpZCkuICovXG4gIHB1YmxpYyBzdGFnZUlkOiBzdHJpbmc7XG4gIC8qKiBVbmlxdWUgcGVyLWV4ZWN1dGlvbi1zdGVwIGlkZW50aWZpZXIuIFNldCBieSB0cmF2ZXJzZXIgYmVmb3JlIHN0YWdlIGV4ZWN1dGlvbi4gKi9cbiAgcHVibGljIHJ1bnRpbWVTdGFnZUlkID0gJyc7XG4gIHB1YmxpYyBydW5JZDogc3RyaW5nO1xuICBwdWJsaWMgYnJhbmNoSWQ/OiBzdHJpbmc7XG4gIHB1YmxpYyBpc0RlY2lkZXI6IGJvb2xlYW47XG4gIHB1YmxpYyBpc0Zvcms6IGJvb2xlYW47XG4gIC8qKiBIdW1hbi1yZWFkYWJsZSBkZXNjcmlwdGlvbiBmcm9tIGJ1aWxkZXIgKHNldCBieSB0cmF2ZXJzZXIgYmVmb3JlIGV4ZWN1dGlvbikuICovXG4gIHB1YmxpYyBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgLyoqIFN1YmZsb3cgaWRlbnRpZmllciAoc2V0IGJ5IHRyYXZlcnNlciB3aGVuIHRoaXMgaXMgYSBzdWJmbG93IGVudHJ5IHBvaW50KS4gKi9cbiAgcHVibGljIHN1YmZsb3dJZD86IHN0cmluZztcblxuICBwdWJsaWMgcGFyZW50PzogU3RhZ2VDb250ZXh0O1xuICBwdWJsaWMgbmV4dD86IFN0YWdlQ29udGV4dDtcbiAgcHVibGljIGNoaWxkcmVuPzogU3RhZ2VDb250ZXh0W107XG5cbiAgcHVibGljIGRlYnVnOiBEaWFnbm9zdGljQ29sbGVjdG9yID0gbmV3IERpYWdub3N0aWNDb2xsZWN0b3IoKTtcblxuICAvKiogVHJhY2tzIHVzZXItbGV2ZWwgd3JpdGVzIChwcmUtbmFtZXNwYWNlKSBmb3IgdGhlIG1lbW9yeSB2aWV3IGFuZCBvbkNvbW1pdC4gKi9cbiAgcHJpdmF0ZSBfc3RhZ2VXcml0ZXM6IFJlY29yZDxzdHJpbmcsIHsgdmFsdWU6IHVua25vd247IG9wZXJhdGlvbjogJ3NldCcgfCAndXBkYXRlJyB8ICdkZWxldGUnIH0+ID0ge307XG5cbiAgLyoqIFRyYWNrcyB1c2VyLWxldmVsIHJlYWRzIChwcmUtbmFtZXNwYWNlKSBmb3IgdGhlIG1lbW9yeSB2aWV3LiAqL1xuICBwcml2YXRlIF9zdGFnZVJlYWRzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuXG4gIC8qKlxuICAgKiBIb3cgdHJhY2tlZCByZWFkcyBhcmUgcmVjb3JkZWQgaW50byBgX3N0YWdlUmVhZHNgICgjMTQpLiBEZWZhdWx0IGAnZnVsbCdgXG4gICAqIHByZXNlcnZlcyB0aGUgaGlzdG9yaWNhbCBwZXItcmVhZCBgc3RydWN0dXJlZENsb25lYC4gSW5oZXJpdGVkIGJ5IGV2ZXJ5XG4gICAqIGNvbnRleHQgY3JlYXRlZCB2aWEge0BsaW5rIGNyZWF0ZU5leHR9IC8ge0BsaW5rIGNyZWF0ZUNoaWxkfSAoc2FtZVxuICAgKiBwcm9wYWdhdGlvbiBwYXR0ZXJuIGFzIHRoZSByZWRhY3RlZCBtaXJyb3IpLCBhbmQgcHVzaGVkIGludG8gc3ViZmxvd1xuICAgKiByb290IGNvbnRleHRzIGJ5IGBTdWJmbG93RXhlY3V0b3JgLiBBZmZlY3RzIE9OTFkgdGhlIHNuYXBzaG90J3NcbiAgICogYHN0YWdlUmVhZHNgIHBheWxvYWQg4oCUIGBTY29wZVJlY29yZGVyLm9uUmVhZGAgKGFuZCB0aGVyZWZvcmUgbmFycmF0aXZlKVxuICAgKiBpcyBkaXNwYXRjaGVkIGF0IHRoZSBzY29wZSB0aWVyIGFuZCBuZXZlciBjbG9uZWQsIHNvIGl0IGlzIGlkZW50aWNhbCBpblxuICAgKiBldmVyeSBtb2RlLlxuICAgKi9cbiAgcHJpdmF0ZSByZWFkVHJhY2tpbmc6IFJlYWRUcmFja2luZ01vZGUgPSAnZnVsbCc7XG5cbiAgLyoqIE9ic2VydmVyIGNhbGxlZCBhZnRlciBjb21taXQoKSDigJQgdXNlZCBieSBTY29wZUZhY2FkZSB0byBmaXJlIFNjb3BlUmVjb3JkZXIub25Db21taXQuICovXG4gIHByaXZhdGUgX2NvbW1pdE9ic2VydmVyPzogKFxuICAgIG11dGF0aW9uczogUmVjb3JkPHN0cmluZywgeyB2YWx1ZTogdW5rbm93bjsgb3BlcmF0aW9uOiAnc2V0JyB8ICd1cGRhdGUnIHwgJ2RlbGV0ZScgfT4sXG4gICkgPT4gdm9pZDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBydW5JZDogc3RyaW5nLFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBzdGFnZUlkOiBzdHJpbmcsXG4gICAgc2hhcmVkTWVtb3J5OiBTaGFyZWRNZW1vcnksXG4gICAgYnJhbmNoSWQ/OiBzdHJpbmcsXG4gICAgZXZlbnRMb2c/OiBFdmVudExvZyxcbiAgICBpc0RlY2lkZXI/OiBib29sZWFuLFxuICApIHtcbiAgICB0aGlzLnJ1bklkID0gcnVuSWQ7XG4gICAgdGhpcy5zdGFnZU5hbWUgPSBuYW1lO1xuICAgIHRoaXMuc3RhZ2VJZCA9IHN0YWdlSWQ7XG4gICAgdGhpcy5zaGFyZWRNZW1vcnkgPSBzaGFyZWRNZW1vcnk7XG4gICAgdGhpcy5icmFuY2hJZCA9IGJyYW5jaElkO1xuICAgIHRoaXMuZXZlbnRMb2cgPSBldmVudExvZztcbiAgICB0aGlzLmlzRGVjaWRlciA9ICEhaXNEZWNpZGVyO1xuICAgIHRoaXMuaXNGb3JrID0gZmFsc2U7XG4gIH1cblxuICAvKiogUmV0dXJucyB0aGUgU2hhcmVkTWVtb3J5IGluc3RhbmNlIChuZWVkZWQgYnkgc2NvcGUgbGF5ZXIpLiAqL1xuICBnZXRTaGFyZWRNZW1vcnkoKTogU2hhcmVkTWVtb3J5IHtcbiAgICByZXR1cm4gdGhpcy5zaGFyZWRNZW1vcnk7XG4gIH1cblxuICAvKipcbiAgICogSW5zdGFsbCBhIHBhcmFsbGVsIHJlZGFjdGVkIG1pcnJvci4gU3Vic2VxdWVudCBgY29tbWl0KClgIGNhbGxzIHdpbGxcbiAgICogYXBwbHkgdGhlIGFscmVhZHktY29tcHV0ZWQgcmVkYWN0ZWQgcGF0Y2hlcyB0byB0aGlzIG1pcnJvciBpbiBhZGRpdGlvblxuICAgKiB0byB0aGUgcmF3IGBzaGFyZWRNZW1vcnlgICsgYGV2ZW50TG9nYC4gQ2hpbGQgLyBuZXh0IGNvbnRleHRzIGluaGVyaXRcbiAgICogdGhlIG1pcnJvciB2aWEgYGNyZWF0ZU5leHRgIC8gYGNyZWF0ZUNoaWxkYC5cbiAgICpcbiAgICogQ2FsbGVkIG9uY2UgYXQgdGhlIHJvb3QgY29udGV4dCBieSBgRXhlY3V0aW9uUnVudGltZS5lbmFibGVSZWRhY3RlZE1pcnJvcigpYC5cbiAgICovXG4gIHVzZVJlZGFjdGVkTWlycm9yKG1pcnJvcjogU2hhcmVkTWVtb3J5KTogdm9pZCB7XG4gICAgdGhpcy5yZWRhY3RlZFNoYXJlZE1lbW9yeSA9IG1pcnJvcjtcbiAgfVxuXG4gIC8qKiBSZXR1cm5zIHRoZSByZWRhY3RlZCBtaXJyb3IgaWYgaW5zdGFsbGVkLCBlbHNlIHVuZGVmaW5lZC4gKi9cbiAgZ2V0UmVkYWN0ZWRTaGFyZWRNZW1vcnkoKTogU2hhcmVkTWVtb3J5IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5yZWRhY3RlZFNoYXJlZE1lbW9yeTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIHJlYWQtdHJhY2tpbmcgcG9saWN5IGZvciB0aGlzIGNvbnRleHQgKCMxNCkuIENhbGxlZCBhdCB0aGUgcm9vdFxuICAgKiBieSBgRXhlY3V0aW9uUnVudGltZS51c2VSZWFkVHJhY2tpbmcoKWAgKHBsdW1iZWQgZnJvbVxuICAgKiBgRmxvd0NoYXJ0RXhlY3V0b3JgKTsgZGVzY2VuZGFudHMgaW5oZXJpdCB2aWEgYGNyZWF0ZU5leHRgL2BjcmVhdGVDaGlsZGAsXG4gICAqIGFuZCBgU3ViZmxvd0V4ZWN1dG9yYCBwdXNoZXMgdGhlIHBhcmVudCBjb250ZXh0J3MgbW9kZSBpbnRvIGVhY2ggc3ViZmxvd1xuICAgKiByb290IHNvIG5lc3RlZCBjaGFydHMgaW5oZXJpdCB0b28uXG4gICAqL1xuICB1c2VSZWFkVHJhY2tpbmcobW9kZTogUmVhZFRyYWNraW5nTW9kZSk6IHZvaWQge1xuICAgIHRoaXMucmVhZFRyYWNraW5nID0gbW9kZTtcbiAgfVxuXG4gIC8qKiBSZXR1cm5zIHRoZSBhY3RpdmUgcmVhZC10cmFja2luZyBwb2xpY3kgKHVzZWQgZm9yIHN1YmZsb3cgcHJvcGFnYXRpb24pLiAqL1xuICBnZXRSZWFkVHJhY2tpbmcoKTogUmVhZFRyYWNraW5nTW9kZSB7XG4gICAgcmV0dXJuIHRoaXMucmVhZFRyYWNraW5nO1xuICB9XG5cbiAgLyoqXG4gICAqIOKUgOKUgCBUaGUgZmlyc3QtdG91Y2ggc3RhdGUgdmlldyAoIzEzKSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgICpcbiAgICogV0hBVDogcmV0dXJucyB0aGUgY29tbWl0dGVkIHNoYXJlZCBzdGF0ZSBhcyBpdCB3YXMgYXQgdGhpcyBzdGFnZSdzIEZJUlNUXG4gICAqIHRvdWNoIChmaXJzdCByZWFkIG9yIGZpcnN0IHdyaXRlKSwgY2FwdHVyaW5nIHRoZSByZWZlcmVuY2Ugb24gZmlyc3QgY2FsbC5cbiAgICogU2VydmVzIHR3byBjb25zdW1lcnM6IHJlYWRzIGJlZm9yZSB0aGUgZmlyc3Qgd3JpdGUgKHtAbGluayByZWFkU3RhdGV9KVxuICAgKiBhbmQgdGhlIHRyYW5zYWN0aW9uIGJ1ZmZlcidzIGRpZmYgYmFzZSAoe0BsaW5rIGdldFRyYW5zYWN0aW9uQnVmZmVyfSkuXG4gICAqXG4gICAqIFdIWSBBIEJBUkUgUkVGRVJFTkNFIElTIFNBRkUg4oCUIHRoZSBpbnZhcmlhbnQgdGhpcyByZXN0cyBvbjogY29tbWl0dGVkXG4gICAqIHN0YXRlIGlzIGltbXV0YWJsZS1hZnRlci1zd2FwLiBgU2hhcmVkTWVtb3J5LmFwcGx5UGF0Y2hgIHJvdXRlcyB0aHJvdWdoXG4gICAqIGBhcHBseVNtYXJ0TWVyZ2VgLCB3aGljaCBgc3RydWN0dXJlZENsb25lYHMgdGhlIGN1cnJlbnQgc3RhdGUsIG11dGF0ZXNcbiAgICogb25seSB0aGUgY2xvbmUsIGFuZCBzd2FwcyBgU2hhcmVkTWVtb3J5LmNvbnRleHRgIHRvIGl0IOKAlCB0aGUgb2JqZWN0IGFcbiAgICogc3RhZ2UgY2FwdHVyZWQgaGVyZSBpcyBuZXZlciBlZGl0ZWQgYWZ0ZXJ3YXJkcy4gKGBTaGFyZWRNZW1vcnkuc2V0VmFsdWVgL1xuICAgKiBgdXBkYXRlVmFsdWVgIERPIG11dGF0ZSBpbiBwbGFjZSwgYnV0IGhhdmUgbm8gY2FsbGVycyBkdXJpbmcgdHJhdmVyc2FsO1xuICAgKiBldmVyeSBydW50aW1lIHdyaXRlIHJlYWNoZXMgc3RhdGUgdGhyb3VnaCBhIHN0YWdlIGNvbW1pdCdzIGBhcHBseVBhdGNoYC4pXG4gICAqIEhvbGRpbmcgdGhlIHJlZmVyZW5jZSB0aGVyZWZvcmUgZ2l2ZXMgdGhpcyBzdGFnZSBhIHN0YWJsZSBzbmFwc2hvdCBhdFxuICAgKiB6ZXJvIGNvc3Qg4oCUIG5vIGNsb25lLCB3aGljaCBpcyB0aGUgZW50aXJlIHBvaW50IG9mICMxMy5cbiAgICpcbiAgICogV0hZIEZJUlNUIFRPVUNILCBub3QgZmlyc3Qgd3JpdGU6IHRoZSBwcmUtIzEzIGVhZ2VyIGVuZ2luZSBjbG9uZWQgdGhlXG4gICAqIHN0YXRlIGludG8gdGhlIGJ1ZmZlciBhdCB0aGUgc3RhZ2UncyBmaXJzdCBBQ0NFU1MsIGFuY2hvcmluZyBib3RoIGl0c1xuICAgKiBzbmFwc2hvdCByZWFkcyBhbmQgaXRzIGNvbW1pdCBiYXNlbGluZSAodGhlIG5ldC1jaGFuZ2UgZGlmZiBiYXNlKSB0aGVyZS5cbiAgICogIzEzJ3MgZmlyc3QgY3V0IGFuY2hvcmVkIHRoZSBsYXp5IGJ1ZmZlciBhdCBmaXJzdCBXUklURSDigJQgb2JzZXJ2YWJseVxuICAgKiBkaWZmZXJlbnQgd2hlbiBzb21ldGhpbmcgZWxzZSBjb21taXRzIGluIHRoZSBnYXAgYmV0d2VlbiB0aGlzIHN0YWdlJ3NcbiAgICogZmlyc3QgcmVhZCBhbmQgaXRzIGZpcnN0IHdyaXRlLiBUaGF0IGdhcCBpcyBSRUFDSEFCTEU6IGZvcmsgc2libGluZ3MgYXJlXG4gICAqIG5hbWVzcGFjZS1pc29sYXRlZCBmb3IgcnVuLXNjb3BlZCBrZXlzIChlYWNoIGNoaWxkIHdyaXRlcyB1bmRlclxuICAgKiBgcnVucy88Y2hpbGRJZD4vYCksIGJ1dCBST09ULWxldmVsIGtleXMgYXJlIHNoYXJlZCDigJQgd3JpdHRlbiB2aWFcbiAgICogYHNldEdsb2JhbGAgZnJvbSBjb25zdW1lciBzY29wZSBjb2RlIGFuZCwgY3JpdGljYWxseSwgYnlcbiAgICogYFN1YmZsb3dJbnB1dE1hcHBlcmAncyBvdXRwdXQgbWFwcGluZyAoYHBhcmVudENvbnRleHQuc2V0R2xvYmFsYCksIHdoaWNoXG4gICAqIGlzIGV4YWN0bHkgd2hhdCBydW5zIHdoZW4gYSBzdWJmbG93IGlzIGEgZm9yayBicmFuY2guIEEgc2libGluZydzXG4gICAqIHJvb3Qta2V5IGNvbW1pdCBsYW5kaW5nIGluIHRoZSBnYXAgd291bGQgc2hpZnQgdGhpcyBzdGFnZSdzIGRpZmYgYmFzZSxcbiAgICogbWFraW5nIGl0cyBDb21taXRCdW5kbGUgcmVjb3JkIGEgcGhhbnRvbSBjaGFuZ2UgKG9yIHN3YWxsb3cgYSByZWFsIG9uZSlcbiAgICogcmVsYXRpdmUgdG8gdGhlIGVhZ2VyIGVuZ2luZS4gQW5jaG9yaW5nIHRoZSB2aWV3IGF0IGZpcnN0IHRvdWNoIHJlc3RvcmVzXG4gICAqIHRoZSBFWEFDVCBlYWdlciBzZW1hbnRpY3Mg4oCUIHNlcXVlbnRpYWwgQU5EIHBhcmFsbGVsIOKAlCBhdCB6ZXJvIGNsb25lIGNvc3QuXG4gICAqXG4gICAqIFJlYWQgdmlzaWJpbGl0eSBpcyB0d28tdGllciwgbWF0Y2hpbmcgZWFnZXIgYnl0ZS1mb3ItYnl0ZToga2V5cyBwcmVzZW50XG4gICAqIGluIHRoZSB2aWV3IGF0IGZpcnN0IHRvdWNoIHJlYWQgcmVwZWF0YWJseSBmcm9tIGl0OyBrZXlzIEFCU0VOVCBmcm9tIGl0XG4gICAqIGZhbGwgYmFjayB0byBMSVZFIHN0YXRlICh0aGUgZWFnZXIgZW5naW5lJ3MgZXhhY3QgZmFsbGJhY2sg4oCUIGFcbiAgICogbWlkLWZsaWdodCBzaWJsaW5nIHJvb3Qta2V5IHdyaXRlIHdhcyBhbHdheXMgdmlzaWJsZSB0byByZWFkcywgYW5kXG4gICAqIHN0YXlzIHZpc2libGU7IG9ubHkgdGhlIERJRkYgQkFTRSBpcyBwaW5uZWQpLlxuICAgKi9cbiAgcHJpdmF0ZSBmaXJzdFRvdWNoU3RhdGUoKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICAgIGlmICghdGhpcy5zdGF0ZVZpZXcpIHtcbiAgICAgIHRoaXMuc3RhdGVWaWV3ID0gdGhpcy5zaGFyZWRNZW1vcnkuZ2V0U3RhdGUoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuc3RhdGVWaWV3O1xuICB9XG5cbiAgLyoqIExhemlseSBjcmVhdGVzIHRoZSB0cmFuc2FjdGlvbiBidWZmZXIgb24gdGhlIHN0YWdlJ3MgRklSU1QgV1JJVEUgKCMxMykuXG4gICAqXG4gICAqICBSZWFkcyBORVZFUiBjb25zdHJ1Y3QgaXQ6IHJlYWQteW91ci13cml0ZXMgb25seSBtYXR0ZXJzIG9uY2UgYSBzdGFnZWRcbiAgICogIHdyaXRlIGV4aXN0cywgc28gYmVmb3JlIHRoYXQge0BsaW5rIGdldFZhbHVlfS97QGxpbmsgZ2V0VmFsdWVEaXJlY3R9XG4gICAqICBzZXJ2ZSBmcm9tIHRoZSBmaXJzdC10b3VjaCBzdGF0ZSB2aWV3IGFuZCB7QGxpbmsgY29tbWl0fSByZWNvcmRzIGFuXG4gICAqICBlbXB0eSBidW5kbGUg4oCUIGFsbCB3aXRoIFpFUk8gYHN0cnVjdHVyZWRDbG9uZWBzIG9mIHRoZSBzaGFyZWQgc3RhdGUuXG4gICAqXG4gICAqICBUaGUgYnVmZmVyJ3MgYmFzZSBpcyB0aGUgRklSU1QtVE9VQ0ggdmlldywgTk9UIHRoZSBsaXZlIHN0YXRlIGF0IHdyaXRlXG4gICAqICB0aW1lOiB1bmRlciBwYXJhbGxlbCBmb3JrcyBhIHNpYmxpbmcgbWF5IGhhdmUgY29tbWl0dGVkIGJldHdlZW4gdGhpc1xuICAgKiAgc3RhZ2UncyBmaXJzdCByZWFkIGFuZCB0aGlzIHdyaXRlLCBhbmQgdGhlIG5ldC1jaGFuZ2UgZGlmZiBiYXNlIG11c3RcbiAgICogIHN0YXkgYW5jaG9yZWQgYXQgZmlyc3QgdG91Y2ggdG8gbWF0Y2ggdGhlIGVhZ2VyIGVuZ2luZSDigJQgc2VlXG4gICAqICB7QGxpbmsgZmlyc3RUb3VjaFN0YXRlfS4gKi9cbiAgZ2V0VHJhbnNhY3Rpb25CdWZmZXIoKTogVHJhbnNhY3Rpb25CdWZmZXIge1xuICAgIGlmICghdGhpcy5idWZmZXIpIHtcbiAgICAgIHRoaXMuYnVmZmVyID0gbmV3IFRyYW5zYWN0aW9uQnVmZmVyKHRoaXMuZmlyc3RUb3VjaFN0YXRlKCkpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5idWZmZXI7XG4gIH1cblxuICAvKiogQnVpbGRzIGFuIGFic29sdXRlIHBhdGggaW5zaWRlIHRoZSBzaGFyZWQgbWVtb3J5IChydW4gbmFtZXNwYWNlKS4gKi9cbiAgcHJpdmF0ZSB3aXRoTmFtZXNwYWNlKHBhdGg6IHN0cmluZ1tdLCBrZXk6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICBpZiAoIXRoaXMucnVuSWQgfHwgdGhpcy5ydW5JZCA9PT0gJycpIHtcbiAgICAgIHJldHVybiBbLi4ucGF0aCwga2V5XTtcbiAgICB9XG4gICAgcmV0dXJuIFsncnVucycsIHRoaXMucnVuSWQsIC4uLnBhdGgsIGtleV07XG4gIH1cblxuICAvLyDilIDilIAgV3JpdGUgb3BlcmF0aW9ucyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICBwYXRjaChwYXRoOiBzdHJpbmdbXSwga2V5OiBzdHJpbmcsIHZhbHVlOiB1bmtub3duLCBzaG91bGRSZWRhY3QgPSBmYWxzZSkge1xuICAgIHRoaXMuZ2V0VHJhbnNhY3Rpb25CdWZmZXIoKS5zZXQodGhpcy53aXRoTmFtZXNwYWNlKHBhdGgsIGtleSksIHZhbHVlLCBzaG91bGRSZWRhY3QpO1xuICB9XG5cbiAgc2V0KHBhdGg6IHN0cmluZ1tdLCBrZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24pIHtcbiAgICB0aGlzLnBhdGNoKHBhdGgsIGtleSwgdmFsdWUpO1xuICB9XG5cbiAgbWVyZ2UocGF0aDogc3RyaW5nW10sIGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93bikge1xuICAgIHRoaXMuZ2V0VHJhbnNhY3Rpb25CdWZmZXIoKS5tZXJnZSh0aGlzLndpdGhOYW1lc3BhY2UocGF0aCwga2V5KSwgdmFsdWUpO1xuICB9XG5cbiAgc2V0T2JqZWN0KFxuICAgIHBhdGg6IHN0cmluZ1tdLFxuICAgIGtleTogc3RyaW5nLFxuICAgIHZhbHVlOiB1bmtub3duLFxuICAgIHNob3VsZFJlZGFjdD86IGJvb2xlYW4sXG4gICAgZGVzY3JpcHRpb24/OiBzdHJpbmcsXG4gICAgb3BlcmF0aW9uT3ZlcnJpZGU/OiAnc2V0JyB8ICdkZWxldGUnLFxuICApIHtcbiAgICB0aGlzLnBhdGNoKHBhdGgsIGtleSwgdmFsdWUsIHNob3VsZFJlZGFjdCA/PyBmYWxzZSk7XG4gICAgLy8gVHJhY2sgdXNlci1sZXZlbCB3cml0ZSAocHJlLW5hbWVzcGFjZSkgZm9yIG1lbW9yeSB2aWV3ICsgb25Db21taXRcbiAgICBjb25zdCB1c2VyS2V5ID0gcGF0aC5sZW5ndGggPiAwID8gWy4uLnBhdGgsIGtleV0uam9pbignLicpIDoga2V5O1xuICAgIHRoaXMuX3N0YWdlV3JpdGVzW3VzZXJLZXldID0ge1xuICAgICAgdmFsdWU6IHNob3VsZFJlZGFjdCA/ICdbUkVEQUNURURdJyA6IHN0cnVjdHVyZWRDbG9uZSh2YWx1ZSksXG4gICAgICBvcGVyYXRpb246IG9wZXJhdGlvbk92ZXJyaWRlID8/ICdzZXQnLFxuICAgIH07XG4gICAgaWYgKGRlc2NyaXB0aW9uKSB7XG4gICAgICBjb25zdCB0YWdnZWQgPSBkZXNjcmlwdGlvbi5zdGFydHNXaXRoKCdbJykgPyBkZXNjcmlwdGlvbiA6IGBbV1JJVEVdICR7ZGVzY3JpcHRpb259YDtcbiAgICAgIHRoaXMuZGVidWcuYWRkTG9nKCdtZXNzYWdlJywgdGFnZ2VkKTtcbiAgICB9XG4gIH1cblxuICB1cGRhdGVPYmplY3QocGF0aDogc3RyaW5nW10sIGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93biwgZGVzY3JpcHRpb24/OiBzdHJpbmcsIHNob3VsZFJlZGFjdD86IGJvb2xlYW4pIHtcbiAgICB0aGlzLm1lcmdlKHBhdGgsIGtleSwgdmFsdWUpO1xuICAgIC8vIFRyYWNrIHVzZXItbGV2ZWwgd3JpdGUgKHByZS1uYW1lc3BhY2UpIGZvciBtZW1vcnkgdmlldyArIG9uQ29tbWl0XG4gICAgY29uc3QgdXNlcktleSA9IHBhdGgubGVuZ3RoID4gMCA/IFsuLi5wYXRoLCBrZXldLmpvaW4oJy4nKSA6IGtleTtcbiAgICB0aGlzLl9zdGFnZVdyaXRlc1t1c2VyS2V5XSA9IHtcbiAgICAgIHZhbHVlOiBzaG91bGRSZWRhY3QgPyAnW1JFREFDVEVEXScgOiBzdHJ1Y3R1cmVkQ2xvbmUodmFsdWUpLFxuICAgICAgb3BlcmF0aW9uOiAndXBkYXRlJyxcbiAgICB9O1xuICAgIGlmIChkZXNjcmlwdGlvbikge1xuICAgICAgdGhpcy5kZWJ1Zy5hZGRMb2coJ21lc3NhZ2UnLCBkZXNjcmlwdGlvbik7XG4gICAgfVxuICB9XG5cbiAgc2V0Um9vdChrZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24pIHtcbiAgICB0aGlzLnBhdGNoKFtdLCBrZXksIHZhbHVlKTtcbiAgfVxuXG4gIHNldEdsb2JhbChrZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24sIGRlc2NyaXB0aW9uPzogc3RyaW5nKSB7XG4gICAgdGhpcy5nZXRUcmFuc2FjdGlvbkJ1ZmZlcigpLnNldChba2V5XSwgdmFsdWUpO1xuICAgIGlmIChkZXNjcmlwdGlvbikge1xuICAgICAgdGhpcy5kZWJ1Zy5hZGRMb2coJ21lc3NhZ2UnLCBkZXNjcmlwdGlvbik7XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlR2xvYmFsQ29udGV4dChrZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24pIHtcbiAgICB0aGlzLmdldFRyYW5zYWN0aW9uQnVmZmVyKCkuc2V0KFtrZXldLCB2YWx1ZSk7XG4gIH1cblxuICBhcHBlbmRUb0FycmF5KHBhdGg6IHN0cmluZ1tdLCBrZXk6IHN0cmluZywgaXRlbXM6IHVua25vd25bXSwgZGVzY3JpcHRpb24/OiBzdHJpbmcpIHtcbiAgICBjb25zdCBleGlzdGluZyA9IHRoaXMuZ2V0VmFsdWUocGF0aCwga2V5KTtcbiAgICBjb25zdCBtZXJnZWQgPSBBcnJheS5pc0FycmF5KGV4aXN0aW5nKSA/IFsuLi5leGlzdGluZywgLi4uaXRlbXNdIDogWy4uLml0ZW1zXTtcbiAgICB0aGlzLnNldE9iamVjdChwYXRoLCBrZXksIG1lcmdlZCwgZmFsc2UsIGRlc2NyaXB0aW9uKTtcbiAgfVxuXG4gIG1lcmdlT2JqZWN0KHBhdGg6IHN0cmluZ1tdLCBrZXk6IHN0cmluZywgb2JqOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgZGVzY3JpcHRpb24/OiBzdHJpbmcpIHtcbiAgICBjb25zdCBleGlzdGluZyA9IHRoaXMuZ2V0VmFsdWUocGF0aCwga2V5KTtcbiAgICBjb25zdCBtZXJnZWQgPVxuICAgICAgZXhpc3RpbmcgJiYgdHlwZW9mIGV4aXN0aW5nID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheShleGlzdGluZylcbiAgICAgICAgPyB7IC4uLihleGlzdGluZyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiksIC4uLm9iaiB9XG4gICAgICAgIDogeyAuLi5vYmogfTtcbiAgICB0aGlzLnNldE9iamVjdChwYXRoLCBrZXksIG1lcmdlZCwgZmFsc2UsIGRlc2NyaXB0aW9uKTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBSZWFkIG9wZXJhdGlvbnMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgLyoqIEJ1ZmZlci1hd2FyZSByZWFkLCBtaXJyb3JpbmcgdGhlIGVhZ2VyIGVuZ2luZSdzIHJlYWQgb3JkZXIgYnl0ZS1mb3ItYnl0ZTpcbiAgICpcbiAgICogICAgMS4gc3RhZ2VkIHdyaXRlcyArIGZpcnN0LXRvdWNoIHNuYXBzaG90IOKAlCBgYnVmZmVyLmdldGAgb3ZlciBpdHNcbiAgICogICAgICAgd29ya2luZ0NvcHkgd2hlbiB0aGUgYnVmZmVyIGV4aXN0cywgZWxzZSBgbmF0aXZlR2V0YCBvdmVyIHRoZVxuICAgKiAgICAgICB6ZXJvLWNsb25lIHN0YXRlIHZpZXcgKHRoZSBidWZmZXIncyBiYXNlIElTIHRoYXQgdmlldywgc28gdGhlIHR3b1xuICAgKiAgICAgICB0aWVycyBhZ3JlZSBvbiBjb250ZW50KTtcbiAgICogICAgMi4gTElWRSBzdGF0ZSB2aWEgYHNoYXJlZE1lbW9yeS5nZXRWYWx1ZWAgZm9yIGtleXMgYWJzZW50IGZyb20gdGhlXG4gICAqICAgICAgIHNuYXBzaG90IOKAlCBpbmNsdWRpbmcgaXRzIHJ1buKGkmdsb2JhbCBuYW1lc3BhY2UgZmFsbGJhY2suIFRoZSBlYWdlclxuICAgKiAgICAgICBlbmdpbmUgaGFkIHRoaXMgZXhhY3QgbGl2ZSBmYWxsYmFjayBmb3Igc25hcHNob3QtbWlzc2luZyBrZXlzO1xuICAgKiAgICAgICBieXRlLWlkZW50aXR5IG92ZXIgcHVyaXR5LlxuICAgKlxuICAgKiAgUmVhZHMgbmV2ZXIgY29uc3RydWN0IHRoZSBidWZmZXIgKCMxMyk6IGEgc3RhZ2UgdGhhdCBuZXZlciB3cml0ZXNcbiAgICogIHBlcmZvcm1zIHplcm8gY2xvbmVzIG9mIHRoZSBzaGFyZWQgc3RhdGUuICovXG4gIHByaXZhdGUgcmVhZFN0YXRlKHBhdGg6IHN0cmluZ1tdLCBrZXk/OiBzdHJpbmcpOiB1bmtub3duIHtcbiAgICBjb25zdCBuYW1lc3BhY2VkID0gdGhpcy53aXRoTmFtZXNwYWNlKHBhdGgsIGtleSBhcyBzdHJpbmcpO1xuICAgIGNvbnN0IGZyb21TbmFwc2hvdCA9IHRoaXMuYnVmZmVyID8gdGhpcy5idWZmZXIuZ2V0KG5hbWVzcGFjZWQpIDogbmF0aXZlR2V0KHRoaXMuZmlyc3RUb3VjaFN0YXRlKCksIG5hbWVzcGFjZWQpO1xuICAgIGlmICh0eXBlb2YgZnJvbVNuYXBzaG90ICE9PSAndW5kZWZpbmVkJykgcmV0dXJuIGZyb21TbmFwc2hvdDtcbiAgICByZXR1cm4gdGhpcy5zaGFyZWRNZW1vcnkuZ2V0VmFsdWUodGhpcy5ydW5JZCwgcGF0aCwga2V5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmFja2VkIHJlYWQuIFRoZSByZXR1cm5lZCB2YWx1ZSBpcyBCT1JST1dFRCDigJQgc2VlIHRoZSBjb250cmFjdCBvblxuICAgKiBgU2NvcGVGYWNhZGUuZ2V0VmFsdWVgLiBSZWFkLXRyYWNraW5nIGNvc3QgaXMgcG9saWN5LWdhdGVkICgjMTQpOlxuICAgKiBgJ2Z1bGwnYCBjbG9uZXMgdGhlIHZhbHVlIGludG8gYF9zdGFnZVJlYWRzYCAoaGlzdG9yaWNhbCBkZWZhdWx0KSxcbiAgICogYCdzdW1tYXJ5J2AgcmVjb3JkcyBhIGNoZWFwIG1hcmtlciwgYCdvZmYnYCByZWNvcmRzIG5vdGhpbmcuXG4gICAqL1xuICBnZXRWYWx1ZShwYXRoOiBzdHJpbmdbXSwga2V5Pzogc3RyaW5nLCBkZXNjcmlwdGlvbj86IHN0cmluZykge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5yZWFkU3RhdGUocGF0aCwga2V5KTtcbiAgICAvLyBUcmFjayB1c2VyLWxldmVsIHJlYWQgKHByZS1uYW1lc3BhY2UpIGZvciBtZW1vcnkgdmlld1xuICAgIGlmIChrZXkgIT09IHVuZGVmaW5lZCAmJiB0aGlzLnJlYWRUcmFja2luZyAhPT0gJ29mZicpIHtcbiAgICAgIGNvbnN0IHVzZXJLZXkgPSBwYXRoLmxlbmd0aCA+IDAgPyBbLi4ucGF0aCwga2V5XS5qb2luKCcuJykgOiBrZXk7XG4gICAgICB0aGlzLl9zdGFnZVJlYWRzW3VzZXJLZXldID1cbiAgICAgICAgdmFsdWUgPT09IHVuZGVmaW5lZFxuICAgICAgICAgID8gdW5kZWZpbmVkXG4gICAgICAgICAgOiB0aGlzLnJlYWRUcmFja2luZyA9PT0gJ3N1bW1hcnknXG4gICAgICAgICAgPyBzdW1tYXJpemVSZWFkVmFsdWUodmFsdWUpXG4gICAgICAgICAgOiBzdHJ1Y3R1cmVkQ2xvbmUodmFsdWUpO1xuICAgIH1cbiAgICBpZiAoZGVzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuZGVidWcuYWRkTG9nKCdtZXNzYWdlJywgYFtSRUFEXSAke2Rlc2NyaXB0aW9ufWApO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICAvKiogUmVhZCBzdGF0ZSB3aXRob3V0IHRyYWNraW5nIGluIF9zdGFnZVJlYWRzIG9yIHBheWluZyBzdHJ1Y3R1cmVkQ2xvbmUgY29zdC5cbiAgICogIFVzZWQgYnkgU2NvcGVGYWNhZGUuZ2V0VmFsdWVTaWxlbnQoKSBmb3IgYXJyYXkgcHJveHkgaW50ZXJuYWwgb3BlcmF0aW9ucy4gKi9cbiAgZ2V0VmFsdWVEaXJlY3QocGF0aDogc3RyaW5nW10sIGtleT86IHN0cmluZyk6IHVua25vd24ge1xuICAgIHJldHVybiB0aGlzLnJlYWRTdGF0ZShwYXRoLCBrZXkpO1xuICB9XG5cbiAgZ2V0Um9vdChrZXk6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLnNoYXJlZE1lbW9yeS5nZXRWYWx1ZSh0aGlzLnJ1bklkLCBbXSwga2V5KTtcbiAgfVxuXG4gIGdldEdsb2JhbChrZXk6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLnNoYXJlZE1lbW9yeS5nZXRWYWx1ZSgnJywgW10sIGtleSk7XG4gIH1cblxuICBnZXRTY29wZSgpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gICAgcmV0dXJuIHRoaXMuc2hhcmVkTWVtb3J5LmdldFN0YXRlKCk7XG4gIH1cblxuICBnZXRSdW5JZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnJ1bklkO1xuICB9XG5cbiAgLy8g4pSA4pSAIENvbW1pdCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICAvKiogUmVnaXN0ZXIgYW4gb2JzZXJ2ZXIgdGhhdCBmaXJlcyBhZnRlciBjb21taXQoKSBhcHBsaWVzIHBhdGNoZXMuXG4gICAqICBVc2VkIGJ5IFNjb3BlRmFjYWRlIHRvIGRpc3BhdGNoIFNjb3BlUmVjb3JkZXIub25Db21taXQgZXZlbnRzLiAqL1xuICBzZXRDb21taXRPYnNlcnZlcihcbiAgICBvYnNlcnZlcjogKG11dGF0aW9uczogUmVjb3JkPHN0cmluZywgeyB2YWx1ZTogdW5rbm93bjsgb3BlcmF0aW9uOiAnc2V0JyB8ICd1cGRhdGUnIHwgJ2RlbGV0ZScgfT4pID0+IHZvaWQsXG4gICk6IHZvaWQge1xuICAgIHRoaXMuX2NvbW1pdE9ic2VydmVyID0gb2JzZXJ2ZXI7XG4gIH1cblxuICBjb21taXQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmJ1ZmZlcikge1xuICAgICAgLy8gVHJ1bHktbGF6eSBmYXN0IHBhdGggKCMxMyk6IG5vIHdyaXRlIGV2ZXIgY29uc3RydWN0ZWQgdGhlIGJ1ZmZlciwgc29cbiAgICAgIC8vIHRoZSBzdGFnZSdzIG5ldCBjaGFuZ2UgaXMgZW1wdHkgQlkgQ09OU1RSVUNUSU9OLiBTYW1lIG9ic2VydmFibGVcbiAgICAgIC8vIG91dGNvbWUgYXMgYW4gZW1wdHkgY29tbWl0IOKAlCB0aGUgKGVtcHR5KSBidW5kbGUgaXMgc3RpbGwgcmVjb3JkZWQgc29cbiAgICAgIC8vIGV2ZXJ5IGV4ZWN1dGVkIHN0YWdlIHJlbWFpbnMgYSB0aW1lLXRyYXZlbCBjdXJzb3Igc3RvcCDigJQgYnV0IHdpdGhcbiAgICAgIC8vIFpFUk8gY2xvbmVzOiBubyBidWZmZXIgY29uc3RydWN0aW9uLCBubyBhcHBseVBhdGNoIHJlcGxheS5cbiAgICAgIHRoaXMuZXZlbnRMb2c/LnJlY29yZCh7XG4gICAgICAgIG92ZXJ3cml0ZToge30sXG4gICAgICAgIHVwZGF0ZXM6IHt9LFxuICAgICAgICByZWRhY3RlZFBhdGhzOiBbXSxcbiAgICAgICAgdHJhY2U6IFtdLFxuICAgICAgICBzdGFnZTogdGhpcy5zdGFnZU5hbWUsXG4gICAgICAgIHN0YWdlSWQ6IHRoaXMuc3RhZ2VJZCxcbiAgICAgICAgcnVudGltZVN0YWdlSWQ6IHRoaXMucnVudGltZVN0YWdlSWQsXG4gICAgICB9KTtcbiAgICAgIGlmICh0aGlzLl9jb21taXRPYnNlcnZlcikge1xuICAgICAgICB0aGlzLl9jb21taXRPYnNlcnZlcih7IC4uLnRoaXMuX3N0YWdlV3JpdGVzIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGJ1bmRsZSA9IHRoaXMuYnVmZmVyLmNvbW1pdCgpO1xuICAgIGNvbnN0IGNvbW1pdEJ1bmRsZSA9IHtcbiAgICAgIC4uLmJ1bmRsZSxcbiAgICAgIHN0YWdlOiB0aGlzLnN0YWdlTmFtZSxcbiAgICAgIHN0YWdlSWQ6IHRoaXMuc3RhZ2VJZCxcbiAgICAgIHJ1bnRpbWVTdGFnZUlkOiB0aGlzLnJ1bnRpbWVTdGFnZUlkLFxuICAgIH07XG5cbiAgICB0aGlzLnNoYXJlZE1lbW9yeS5hcHBseVBhdGNoKGNvbW1pdEJ1bmRsZS5vdmVyd3JpdGUsIGNvbW1pdEJ1bmRsZS51cGRhdGVzLCBjb21taXRCdW5kbGUudHJhY2UpO1xuXG4gICAgLy8gQWxyZWFkeS1jb21wdXRlZCByZWRhY3RlZCBwYXRjaGVzIGZlZWQgdGhyZWUgY29uc3VtZXJzOlxuICAgIC8vICAgMS4gdGhlIHBhcmFsbGVsIHJlZGFjdGVkIG1pcnJvciAoaWYgZW5hYmxlZClcbiAgICAvLyAgIDIuIHRoZSBldmVudCBsb2cgKHBlcnNpc3RlZCB0cmFjZSlcbiAgICAvLyAgIDMuIChmdXR1cmUpIGFueXRoaW5nIGVsc2UgdGhhdCB3YW50cyBhIHNjcnViYmVkIHZpZXcgYXQgY29tbWl0IHRpbWVcbiAgICAvLyBDb21wdXRpbmcgb25jZSBrZWVwcyBjb3N0IGxpbmVhciBpbiB0aGUgY29tbWl0IHNpemU7IG5vIHBvc3QtcGFzcyB3YWxrLlxuICAgIGNvbnN0IHJlZGFjdGVkT3ZlcndyaXRlID0gcmVkYWN0UGF0Y2goY29tbWl0QnVuZGxlLm92ZXJ3cml0ZSwgY29tbWl0QnVuZGxlLnJlZGFjdGVkUGF0aHMpO1xuICAgIGNvbnN0IHJlZGFjdGVkVXBkYXRlcyA9IHJlZGFjdFBhdGNoKGNvbW1pdEJ1bmRsZS51cGRhdGVzLCBjb21taXRCdW5kbGUucmVkYWN0ZWRQYXRocyk7XG5cbiAgICB0aGlzLnJlZGFjdGVkU2hhcmVkTWVtb3J5Py5hcHBseVBhdGNoKHJlZGFjdGVkT3ZlcndyaXRlLCByZWRhY3RlZFVwZGF0ZXMsIGNvbW1pdEJ1bmRsZS50cmFjZSk7XG5cbiAgICB0aGlzLmV2ZW50TG9nPy5yZWNvcmQoe1xuICAgICAgLi4uY29tbWl0QnVuZGxlLFxuICAgICAgcmVkYWN0ZWRQYXRoczogQXJyYXkuZnJvbShjb21taXRCdW5kbGUucmVkYWN0ZWRQYXRocy52YWx1ZXMoKSksXG4gICAgICBvdmVyd3JpdGU6IHJlZGFjdGVkT3ZlcndyaXRlLFxuICAgICAgdXBkYXRlczogcmVkYWN0ZWRVcGRhdGVzLFxuICAgIH0pO1xuXG4gICAgLy8gTm90aWZ5IG9ic2VydmVyIChTY29wZUZhY2FkZSkgd2l0aCB0cmFja2VkIG11dGF0aW9uc1xuICAgIGlmICh0aGlzLl9jb21taXRPYnNlcnZlcikge1xuICAgICAgdGhpcy5fY29tbWl0T2JzZXJ2ZXIoeyAuLi50aGlzLl9zdGFnZVdyaXRlcyB9KTtcbiAgICB9XG4gIH1cblxuICAvLyDilIDilIAgVHJlZSBuYXZpZ2F0aW9uIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIC8qKlxuICAgKiBDcmVhdGUgKG9yIHJldHVybikgdGhpcyBjb250ZXh0J3MgbGlua2VkIHN1Y2Nlc3Nvci5cbiAgICpcbiAgICogTUVNT0laRUQ6IHRoZSBmaXJzdCBjYWxsIGNyZWF0ZXMgYHRoaXMubmV4dGA7IGV2ZXJ5IGxhdGVyIGNhbGwgcmV0dXJuc1xuICAgKiB0aGF0IFNBTUUgY29udGV4dCBhbmQgSUdOT1JFUyBpdHMgYXJndW1lbnRzLiBJbiBub3JtYWwgdHJhdmVyc2FsIGVhY2hcbiAgICogY29udGV4dCBhZHZhbmNlcyBleGFjdGx5IG9uY2UsIHNvIHRoZSBtZW1vIG5ldmVyIGJpdGVzIOKAlCBidXQgYSBjYWxsZXJcbiAgICogZXhwZWN0aW5nIGEgZnJlc2ggY29udGV4dCBmb3IgZGlmZmVyZW50IGBzdGFnZU5hbWVgL2BzdGFnZUlkYCBhcmdzIGdldHNcbiAgICogdGhlIG9sZCBvbmUgc2lsZW50bHkuIERldiBtb2RlIChgZW5hYmxlRGV2TW9kZSgpYCkgd2FybnMgb24gdGhhdFxuICAgKiBtaXNtYXRjaCAoYmFja2xvZyBCNCkuXG4gICAqL1xuICBjcmVhdGVOZXh0KHBhdGg6IHN0cmluZywgc3RhZ2VOYW1lOiBzdHJpbmcsIHN0YWdlSWQ6IHN0cmluZywgaXNEZWNpZGVyID0gZmFsc2UpOiBTdGFnZUNvbnRleHQge1xuICAgIGlmICghdGhpcy5uZXh0KSB7XG4gICAgICB0aGlzLm5leHQgPSBuZXcgU3RhZ2VDb250ZXh0KHBhdGgsIHN0YWdlTmFtZSwgc3RhZ2VJZCwgdGhpcy5zaGFyZWRNZW1vcnksICcnLCB0aGlzLmV2ZW50TG9nLCBpc0RlY2lkZXIpO1xuICAgICAgdGhpcy5uZXh0LnBhcmVudCA9IHRoaXM7XG4gICAgICAvLyBQcm9wYWdhdGUgdGhlIHJlZGFjdGVkIG1pcnJvciBkb3duIHRoZSBjb250ZXh0IHRyZWUgc28gZXZlcnkgY29tbWl0XG4gICAgICAvLyBpbiB0aGUgcnVuIHdyaXRlcyB0byBib3RoIHZpZXdzLlxuICAgICAgaWYgKHRoaXMucmVkYWN0ZWRTaGFyZWRNZW1vcnkpIHRoaXMubmV4dC5yZWRhY3RlZFNoYXJlZE1lbW9yeSA9IHRoaXMucmVkYWN0ZWRTaGFyZWRNZW1vcnk7XG4gICAgICB0aGlzLm5leHQucmVhZFRyYWNraW5nID0gdGhpcy5yZWFkVHJhY2tpbmc7XG4gICAgfSBlbHNlIGlmIChpc0Rldk1vZGUoKSAmJiAodGhpcy5uZXh0LnN0YWdlSWQgIT09IHN0YWdlSWQgfHwgdGhpcy5uZXh0LnN0YWdlTmFtZSAhPT0gc3RhZ2VOYW1lKSkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgYFtmb290cHJpbnRdIFN0YWdlQ29udGV4dC5jcmVhdGVOZXh0OiBuZXh0IGNvbnRleHQgYWxyZWFkeSBleGlzdHMgYXMgXCIke3RoaXMubmV4dC5zdGFnZU5hbWV9XCIgYCArXG4gICAgICAgICAgYChpZDogXCIke3RoaXMubmV4dC5zdGFnZUlkfVwiKSDigJQgYXJndW1lbnRzIFwiJHtzdGFnZU5hbWV9XCIgKGlkOiBcIiR7c3RhZ2VJZH1cIikgYXJlIGlnbm9yZWQgYCArXG4gICAgICAgICAgJ2FuZCB0aGUgZXhpc3RpbmcgY29udGV4dCBpcyByZXR1cm5lZC4nLFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMubmV4dDtcbiAgfVxuXG4gIGNyZWF0ZUNoaWxkKHJ1bklkOiBzdHJpbmcsIGJyYW5jaElkOiBzdHJpbmcsIHN0YWdlTmFtZTogc3RyaW5nLCBzdGFnZUlkOiBzdHJpbmcsIGlzRGVjaWRlciA9IGZhbHNlKTogU3RhZ2VDb250ZXh0IHtcbiAgICBpZiAoIXRoaXMuY2hpbGRyZW4pIHtcbiAgICAgIHRoaXMuY2hpbGRyZW4gPSBbXTtcbiAgICB9XG4gICAgY29uc3QgY2hpbGQgPSBuZXcgU3RhZ2VDb250ZXh0KHJ1bklkLCBzdGFnZU5hbWUsIHN0YWdlSWQsIHRoaXMuc2hhcmVkTWVtb3J5LCBicmFuY2hJZCwgdGhpcy5ldmVudExvZywgaXNEZWNpZGVyKTtcbiAgICBjaGlsZC5wYXJlbnQgPSB0aGlzO1xuICAgIGlmICh0aGlzLnJlZGFjdGVkU2hhcmVkTWVtb3J5KSBjaGlsZC5yZWRhY3RlZFNoYXJlZE1lbW9yeSA9IHRoaXMucmVkYWN0ZWRTaGFyZWRNZW1vcnk7XG4gICAgY2hpbGQucmVhZFRyYWNraW5nID0gdGhpcy5yZWFkVHJhY2tpbmc7XG4gICAgdGhpcy5jaGlsZHJlbi5wdXNoKGNoaWxkKTtcbiAgICByZXR1cm4gY2hpbGQ7XG4gIH1cblxuICBjcmVhdGVEZWNpZGVyKHBhdGg6IHN0cmluZywgc3RhZ2VOYW1lOiBzdHJpbmcsIHN0YWdlSWQ6IHN0cmluZyk6IFN0YWdlQ29udGV4dCB7XG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlTmV4dChwYXRoLCBzdGFnZU5hbWUsIHN0YWdlSWQsIHRydWUpO1xuICB9XG5cbiAgc2V0QXNEZWNpZGVyKCk6IFN0YWdlQ29udGV4dCB7XG4gICAgdGhpcy5pc0RlY2lkZXIgPSB0cnVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgc2V0QXNGb3JrKCk6IFN0YWdlQ29udGV4dCB7XG4gICAgdGhpcy5pc0ZvcmsgPSB0cnVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8g4pSA4pSAIERpYWdub3N0aWNzIGRlbGVnYXRpb24g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgYWRkTG9nKGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93biwgcGF0aD86IHN0cmluZ1tdKSB7XG4gICAgdGhpcy5kZWJ1Zy5hZGRMb2coa2V5LCB2YWx1ZSwgcGF0aCk7XG4gIH1cblxuICBzZXRMb2coa2V5OiBzdHJpbmcsIHZhbHVlOiB1bmtub3duLCBwYXRoPzogc3RyaW5nW10pIHtcbiAgICB0aGlzLmRlYnVnLnNldExvZyhrZXksIHZhbHVlLCBwYXRoKTtcbiAgfVxuXG4gIGFkZE1ldHJpYyhrZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24sIHBhdGg/OiBzdHJpbmdbXSkge1xuICAgIHRoaXMuZGVidWcuYWRkTWV0cmljKGtleSwgdmFsdWUsIHBhdGgpO1xuICB9XG5cbiAgc2V0TWV0cmljKGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93biwgcGF0aD86IHN0cmluZ1tdKSB7XG4gICAgdGhpcy5kZWJ1Zy5zZXRNZXRyaWMoa2V5LCB2YWx1ZSwgcGF0aCk7XG4gIH1cblxuICBhZGRFdmFsKGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93biwgcGF0aD86IHN0cmluZ1tdKSB7XG4gICAgdGhpcy5kZWJ1Zy5hZGRFdmFsKGtleSwgdmFsdWUsIHBhdGgpO1xuICB9XG5cbiAgc2V0RXZhbChrZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24sIHBhdGg/OiBzdHJpbmdbXSkge1xuICAgIHRoaXMuZGVidWcuc2V0RXZhbChrZXksIHZhbHVlLCBwYXRoKTtcbiAgfVxuXG4gIGFkZEVycm9yKGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93biwgcGF0aD86IHN0cmluZ1tdKSB7XG4gICAgdGhpcy5kZWJ1Zy5hZGRFcnJvcihrZXksIHZhbHVlLCBwYXRoKTtcbiAgfVxuXG4gIGFkZEZsb3dEZWJ1Z01lc3NhZ2UoXG4gICAgdHlwZTogRmxvd0NvbnRyb2xUeXBlLFxuICAgIGRlc2NyaXB0aW9uOiBzdHJpbmcsXG4gICAgb3B0aW9ucz86IHsgdGFyZ2V0U3RhZ2U/OiBzdHJpbmcgfCBzdHJpbmdbXTsgcmF0aW9uYWxlPzogc3RyaW5nOyBjb3VudD86IG51bWJlcjsgaXRlcmF0aW9uPzogbnVtYmVyIH0sXG4gICkge1xuICAgIGNvbnN0IGZsb3dNZXNzYWdlOiBGbG93TWVzc2FnZSA9IHsgdHlwZSwgZGVzY3JpcHRpb24sIHRpbWVzdGFtcDogRGF0ZS5ub3coKSwgLi4ub3B0aW9ucyB9O1xuICAgIHRoaXMuZGVidWcuYWRkRmxvd01lc3NhZ2UoZmxvd01lc3NhZ2UpO1xuICB9XG5cbiAgLy8g4pSA4pSAIFNuYXBzaG90IOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIGdldFN0YWdlSWQoKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMucnVuSWQgfHwgdGhpcy5ydW5JZCA9PT0gJycpIHJldHVybiB0aGlzLnN0YWdlTmFtZTtcbiAgICByZXR1cm4gYCR7dGhpcy5ydW5JZH0uJHt0aGlzLnN0YWdlTmFtZX1gO1xuICB9XG5cbiAgZ2V0U25hcHNob3QoKTogU3RhZ2VTbmFwc2hvdCB7XG4gICAgLy8gSXRlcmF0aXZlIHdhbGsgKGV4cGxpY2l0IHdvcmsgc3RhY2spLCBOT1QgcmVjdXJzaW9uOiB0aGUgZXhlY3V0aW9uXG4gICAgLy8gdHJlZSBkZWVwZW5zIGJ5IG9uZSBsZXZlbCBwZXIgZXhlY3V0ZWQgc3RhZ2UgYWxvbmcgYG5leHRgIGNoYWlucywgYW5kXG4gICAgLy8gdGhlIHRyYW1wb2xpbmVkIHRyYXZlcnNlciBhbGxvd3MgY2hhaW5zL2xvb3BzIG9mIHRlbnMgb2YgdGhvdXNhbmRzIG9mXG4gICAgLy8gc3RhZ2VzIOKAlCBmYXIgZGVlcGVyIHRoYW4gYSByZWN1cnNpdmUgc2VyaWFsaXplciBjYW4gd2FsayBiZWZvcmVcbiAgICAvLyBcIk1heGltdW0gY2FsbCBzdGFjayBzaXplIGV4Y2VlZGVkXCIuXG4gICAgY29uc3Qgcm9vdCA9IHRoaXMuc25hcHNob3RTZWxmKCk7XG4gICAgY29uc3Qgd29yazogQXJyYXk8eyBjdHg6IFN0YWdlQ29udGV4dDsgc25hcDogU3RhZ2VTbmFwc2hvdCB9PiA9IFt7IGN0eDogdGhpcywgc25hcDogcm9vdCB9XTtcbiAgICB3aGlsZSAod29yay5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCB7IGN0eCwgc25hcCB9ID0gd29yay5wb3AoKSE7XG4gICAgICBpZiAoY3R4Lm5leHQpIHtcbiAgICAgICAgY29uc3QgbmV4dFNuYXAgPSBjdHgubmV4dC5zbmFwc2hvdFNlbGYoKTtcbiAgICAgICAgc25hcC5uZXh0ID0gbmV4dFNuYXA7XG4gICAgICAgIHdvcmsucHVzaCh7IGN0eDogY3R4Lm5leHQsIHNuYXA6IG5leHRTbmFwIH0pO1xuICAgICAgfVxuICAgICAgaWYgKGN0eC5jaGlsZHJlbikge1xuICAgICAgICBzbmFwLmNoaWxkcmVuID0gY3R4LmNoaWxkcmVuLm1hcCgoY2hpbGQpID0+IHtcbiAgICAgICAgICBjb25zdCBjaGlsZFNuYXAgPSBjaGlsZC5zbmFwc2hvdFNlbGYoKTtcbiAgICAgICAgICB3b3JrLnB1c2goeyBjdHg6IGNoaWxkLCBzbmFwOiBjaGlsZFNuYXAgfSk7XG4gICAgICAgICAgcmV0dXJuIGNoaWxkU25hcDtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByb290O1xuICB9XG5cbiAgLyoqIFNuYXBzaG90IG9mIFRISVMgY29udGV4dCdzIG93biBmaWVsZHMg4oCUIGBuZXh0YC9gY2hpbGRyZW5gIGFyZSBmaWxsZWRcbiAgICogIGluIGJ5IHRoZSBpdGVyYXRpdmUgd2FsayBpbiBgZ2V0U25hcHNob3RgLiAqL1xuICBwcml2YXRlIHNuYXBzaG90U2VsZigpOiBTdGFnZVNuYXBzaG90IHtcbiAgICBjb25zdCBzbmFwc2hvdDogU3RhZ2VTbmFwc2hvdCA9IHtcbiAgICAgIGlkOiB0aGlzLnN0YWdlSWQsXG4gICAgICBydW50aW1lU3RhZ2VJZDogdGhpcy5ydW50aW1lU3RhZ2VJZCB8fCB1bmRlZmluZWQsXG4gICAgICBuYW1lOiB0aGlzLnN0YWdlTmFtZSxcbiAgICAgIGlzRGVjaWRlcjogdGhpcy5pc0RlY2lkZXIsXG4gICAgICBpc0Zvcms6IHRoaXMuaXNGb3JrLFxuICAgICAgbG9nczogdGhpcy5kZWJ1Zy5sb2dDb250ZXh0LFxuICAgICAgZXJyb3JzOiB0aGlzLmRlYnVnLmVycm9yQ29udGV4dCxcbiAgICAgIG1ldHJpY3M6IHRoaXMuZGVidWcubWV0cmljQ29udGV4dCxcbiAgICAgIGV2YWxzOiB0aGlzLmRlYnVnLmV2YWxDb250ZXh0LFxuICAgIH07XG4gICAgaWYgKE9iamVjdC5rZXlzKHRoaXMuX3N0YWdlV3JpdGVzKS5sZW5ndGggPiAwKSB7XG4gICAgICAvLyBFeHRyYWN0IHZhbHVlcyBvbmx5IGZvciB0aGUgc25hcHNob3QgKHN0cmlwIG9wZXJhdGlvbiBtZXRhZGF0YSlcbiAgICAgIGNvbnN0IHdyaXRlczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcbiAgICAgIGZvciAoY29uc3QgW2ssIGVudHJ5XSBvZiBPYmplY3QuZW50cmllcyh0aGlzLl9zdGFnZVdyaXRlcykpIHtcbiAgICAgICAgd3JpdGVzW2tdID0gZW50cnkudmFsdWU7XG4gICAgICB9XG4gICAgICBzbmFwc2hvdC5zdGFnZVdyaXRlcyA9IHdyaXRlcztcbiAgICB9XG4gICAgaWYgKE9iamVjdC5rZXlzKHRoaXMuX3N0YWdlUmVhZHMpLmxlbmd0aCA+IDApIHtcbiAgICAgIHNuYXBzaG90LnN0YWdlUmVhZHMgPSB0aGlzLl9zdGFnZVJlYWRzO1xuICAgIH1cbiAgICBpZiAodGhpcy5kZXNjcmlwdGlvbikge1xuICAgICAgc25hcHNob3QuZGVzY3JpcHRpb24gPSB0aGlzLmRlc2NyaXB0aW9uO1xuICAgIH1cbiAgICBpZiAodGhpcy5zdWJmbG93SWQpIHtcbiAgICAgIHNuYXBzaG90LnN1YmZsb3dJZCA9IHRoaXMuc3ViZmxvd0lkO1xuICAgIH1cbiAgICBpZiAodGhpcy5kZWJ1Zy5mbG93TWVzc2FnZXMubGVuZ3RoID4gMCkge1xuICAgICAgc25hcHNob3QuZmxvd01lc3NhZ2VzID0gdGhpcy5kZWJ1Zy5mbG93TWVzc2FnZXM7XG4gICAgfVxuICAgIHJldHVybiBzbmFwc2hvdDtcbiAgfVxufVxuIl19
|
|
@@ -1,11 +1,21 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* TransactionBuffer —
|
|
2
|
+
* TransactionBuffer — Per-stage STAGING buffer for state mutations
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
* -
|
|
4
|
+
* What it IS: a staging buffer with read-your-writes and net-change commits.
|
|
5
|
+
* - Changes are staged here during stage execution and flushed to
|
|
6
|
+
* SharedMemory in ONE batch per stage (`commit()`) — other stages and
|
|
7
|
+
* parallel siblings never observe a stage's half-finished writes.
|
|
8
|
+
* - Read-after-write consistency within a stage — a stage sees its own
|
|
9
|
+
* staged writes immediately.
|
|
10
|
+
* - `commit()` records the stage's NET change (see {@link commit}), plus an
|
|
11
|
+
* operation trace for deterministic replay.
|
|
12
|
+
*
|
|
13
|
+
* What it is NOT: a rollback mechanism. Despite the name, there is no
|
|
14
|
+
* abort/rollback path — when a stage THROWS, the engine still commits
|
|
15
|
+
* everything staged so far before re-throwing (commit-on-error in
|
|
16
|
+
* `FlowchartTraverser`). That is deliberate: the audit trail must record
|
|
17
|
+
* what the failing stage changed. Do not rely on "stage failed → its
|
|
18
|
+
* writes vanished".
|
|
9
19
|
*/
|
|
10
20
|
import { nativeGet as _get, nativeSet as _set } from './pathOps.js';
|
|
11
21
|
import { deepEqual, deepSmartMerge, DELIM, normalisePath } from './utils.js';
|
|
@@ -146,4 +156,4 @@ export class TransactionBuffer {
|
|
|
146
156
|
return { overwrite, updates, redactedPaths, trace };
|
|
147
157
|
}
|
|
148
158
|
}
|
|
149
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVHJhbnNhY3Rpb25CdWZmZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL21lbW9yeS9UcmFuc2FjdGlvbkJ1ZmZlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7R0FRRztBQUVILE9BQU8sRUFBRSxTQUFTLElBQUksSUFBSSxFQUFFLFNBQVMsSUFBSSxJQUFJLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFcEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUU3RSxNQUFNLE9BQU8saUJBQWlCO0lBQ1gsWUFBWSxDQUFNO0lBQzNCLFdBQVcsQ0FBTTtJQUVqQixjQUFjLEdBQWdCLEVBQUUsQ0FBQztJQUNqQyxXQUFXLEdBQWdCLEVBQUUsQ0FBQztJQUM5QixPQUFPLEdBQThDLEVBQUUsQ0FBQztJQUN4RCxhQUFhLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztJQUUxQyxZQUFZLElBQVM7UUFDbkIsSUFBSSxDQUFDLFlBQVksR0FBRyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDMUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVELDRDQUE0QztJQUM1QyxHQUFHLENBQUMsSUFBeUIsRUFBRSxLQUFVLEVBQUUsWUFBWSxHQUFHLEtBQUs7UUFDN0QsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLElBQUksRUFBRSxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUN4RCxJQUFJLFlBQVksRUFBRSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQzlD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S0FBSyxLQUFLLEVBQUUsQ0FBQztnQkFDdEIsSUFBSSxDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNsRixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sSUFBSSxDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM3RSxDQUFDO1FBQ0gsQ0FBQztRQUVELE1BQU0sYUFBYSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsRyxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLENBQUM7SUFDdEQsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUcmFuc2FjdGlvbkJ1ZmZlciDigJQgVHJhbnNhY3Rpb25hbCB3cml0ZSBidWZmZXIgZm9yIHN0YWdlIG11dGF0aW9uc1xuICpcbiAqIENvbGxlY3RzIHdyaXRlcyBkdXJpbmcgZXhlY3V0aW9uIGFuZCBjb21taXRzIHRoZW0gYXRvbWljYWxseS5cbiAqIExpa2UgYSBkYXRhYmFzZSB0cmFuc2FjdGlvbiBidWZmZXI6XG4gKiAtIENoYW5nZXMgc3RhZ2VkIGhlcmUgYmVmb3JlIGJlaW5nIGNvbW1pdHRlZCB0byBTaGFyZWRNZW1vcnlcbiAqIC0gRW5hYmxlcyByZWFkLWFmdGVyLXdyaXRlIGNvbnNpc3RlbmN5IHdpdGhpbiBhIHN0YWdlXG4gKiAtIFJlY29yZHMgb3BlcmF0aW9uIHRyYWNlIGZvciBkZXRlcm1pbmlzdGljIHJlcGxheVxuICovXG5cbmltcG9ydCB7IG5hdGl2ZUdldCBhcyBfZ2V0LCBuYXRpdmVTZXQgYXMgX3NldCB9IGZyb20gJy4vcGF0aE9wcy5qcyc7XG5pbXBvcnQgdHlwZSB7IE1lbW9yeVBhdGNoIH0gZnJvbSAnLi90eXBlcy5qcyc7XG5pbXBvcnQgeyBkZWVwRXF1YWwsIGRlZXBTbWFydE1lcmdlLCBERUxJTSwgbm9ybWFsaXNlUGF0aCB9IGZyb20gJy4vdXRpbHMuanMnO1xuXG5leHBvcnQgY2xhc3MgVHJhbnNhY3Rpb25CdWZmZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IGJhc2VTbmFwc2hvdDogYW55O1xuICBwcml2YXRlIHdvcmtpbmdDb3B5OiBhbnk7XG5cbiAgcHJpdmF0ZSBvdmVyd3JpdGVQYXRjaDogTWVtb3J5UGF0Y2ggPSB7fTtcbiAgcHJpdmF0ZSB1cGRhdGVQYXRjaDogTWVtb3J5UGF0Y2ggPSB7fTtcbiAgcHJpdmF0ZSBvcFRyYWNlOiB7IHBhdGg6IHN0cmluZzsgdmVyYjogJ3NldCcgfCAnbWVyZ2UnIH1bXSA9IFtdO1xuICBwcml2YXRlIHJlZGFjdGVkUGF0aHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICBjb25zdHJ1Y3RvcihiYXNlOiBhbnkpIHtcbiAgICB0aGlzLmJhc2VTbmFwc2hvdCA9IHN0cnVjdHVyZWRDbG9uZShiYXNlKTtcbiAgICB0aGlzLndvcmtpbmdDb3B5ID0gc3RydWN0dXJlZENsb25lKGJhc2UpO1xuICB9XG5cbiAgLyoqIEhhcmQgb3ZlcndyaXRlIGF0IHRoZSBzcGVjaWZpZWQgcGF0aC4gKi9cbiAgc2V0KHBhdGg6IChzdHJpbmcgfCBudW1iZXIpW10sIHZhbHVlOiBhbnksIHNob3VsZFJlZGFjdCA9IGZhbHNlKTogdm9pZCB7XG4gICAgX3NldCh0aGlzLndvcmtpbmdDb3B5LCBwYXRoLCB2YWx1ZSk7XG4gICAgX3NldCh0aGlzLm92ZXJ3cml0ZVBhdGNoLCBwYXRoLCBzdHJ1Y3R1cmVkQ2xvbmUodmFsdWUpKTtcbiAgICBpZiAoc2hvdWxkUmVkYWN0KSB7XG4gICAgICB0aGlzLnJlZGFjdGVkUGF0aHMuYWRkKG5vcm1hbGlzZVBhdGgocGF0aCkpO1xuICAgIH1cbiAgICB0aGlzLm9wVHJhY2UucHVzaCh7IHBhdGg6IG5vcm1hbGlzZVBhdGgocGF0aCksIHZlcmI6ICdzZXQnIH0pO1xuICB9XG5cbiAgLyoqIERlZXAgdW5pb24gbWVyZ2UgYXQgdGhlIHNwZWNpZmllZCBwYXRoLiAqL1xuICBtZXJnZShwYXRoOiAoc3RyaW5nIHwgbnVtYmVyKVtdLCB2YWx1ZTogYW55LCBzaG91bGRSZWRhY3QgPSBmYWxzZSk6IHZvaWQge1xuICAgIGNvbnN0IGV4aXN0aW5nID0gX2dldCh0aGlzLndvcmtpbmdDb3B5LCBwYXRoKSA/PyB7fTtcbiAgICBjb25zdCBtZXJnZWQgPSBkZWVwU21hcnRNZXJnZShleGlzdGluZywgdmFsdWUpO1xuICAgIF9zZXQodGhpcy53b3JraW5nQ29weSwgcGF0aCwgbWVyZ2VkKTtcbiAgICBfc2V0KHRoaXMudXBkYXRlUGF0Y2gsIHBhdGgsIGRlZXBTbWFydE1lcmdlKF9nZXQodGhpcy51cGRhdGVQYXRjaCwgcGF0aCkgPz8ge30sIHZhbHVlKSk7XG4gICAgaWYgKHNob3VsZFJlZGFjdCkge1xuICAgICAgdGhpcy5yZWRhY3RlZFBhdGhzLmFkZChub3JtYWxpc2VQYXRoKHBhdGgpKTtcbiAgICB9XG4gICAgdGhpcy5vcFRyYWNlLnB1c2goeyBwYXRoOiBub3JtYWxpc2VQYXRoKHBhdGgpLCB2ZXJiOiAnbWVyZ2UnIH0pO1xuICB9XG5cbiAgLyoqIFJlYWQgY3VycmVudCB2YWx1ZSBhdCBwYXRoIChpbmNsdWRlcyB1bmNvbW1pdHRlZCBjaGFuZ2VzKS4gKi9cbiAgZ2V0KHBhdGg6IChzdHJpbmcgfCBudW1iZXIpW10sIGRlZmF1bHRWYWx1ZT86IGFueSkge1xuICAgIHJldHVybiBfZ2V0KHRoaXMud29ya2luZ0NvcHksIHBhdGgsIGRlZmF1bHRWYWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogRmx1c2ggYWxsIHN0YWdlZCBtdXRhdGlvbnMgYW5kIHJldHVybiB0aGUgY29tbWl0IGJ1bmRsZSDigJQgcmVjb3JkaW5nIHRoZVxuICAgKiBzdGFnZSdzIE5FVCBDSEFOR0UsIG5vdCBpdHMgcmF3IHdyaXRlIGxvZy5cbiAgICpcbiAgICog4pSA4pSAIFdIWSAodGhlIGRlZmVjdCB0aGlzIGZpeGVzKSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgICogUHJldmlvdXNseSBldmVyeSBgc2V0YC9gbWVyZ2VgIHdhcyByZWNvcmRlZCB2ZXJiYXRpbSwgc28gdGhlIGNvbW1pdCBidW5kbGVcbiAgICogd2FzIGEgbG9nIG9mICpvcGVyYXRpb25zKiByYXRoZXIgdGhhbiAqY2hhbmdlcyouIFR3byBvcGVyYXRpb25zIHByb2R1Y2Ugbm9cbiAgICogbmV0IGNoYW5nZSB5ZXQgd2VyZSBzdGlsbCBjb21taXR0ZWQgYXMgXCJtdXRhdGlvbnNcIjpcbiAgICpcbiAgICogICAxLiBOby1vcCB3cml0ZSAgIOKAlCB3cml0aW5nIGEga2V5IHRoZSB2YWx1ZSBpdCBhbHJlYWR5IGhvbGRzIChlLmcuIGFuXG4gICAqICAgICAgICAgICAgICAgICAgICAgIGFnZW50IGNvbnRleHQgc2xvdCByZS1lbWl0dGluZyBpZGVudGljYWwgY29udGVudCBldmVyeVxuICAgKiAgICAgICAgICAgICAgICAgICAgICB0dXJuKS4gYmFzZSBLPTEsIHN0YWdlIHdyaXRlcyBLPTEuXG4gICAqICAgMi4gV3JpdGUtcmV2ZXJ0ICDigJQgY2hhbmdpbmcgdGhlbiByZXN0b3JpbmcgYSBrZXkgd2l0aGluIG9uZSBzdGFnZS5cbiAgICogICAgICAgICAgICAgICAgICAgICAgYmFzZSBLPTEsIHN0YWdlIHdyaXRlcyBLPTIgdGhlbiBLPTEuXG4gICAqXG4gICAqIFJlY29yZGluZyB0aGVzZSBhcyBtdXRhdGlvbnMgKGEpIGJsb2F0ZWQgY2F1c2FsIHNsaWNpbmcgLyBiYWNrdHJhY2tpbmcgd2l0aFxuICAgKiBzcHVyaW91cyBkZXBlbmRlbmNpZXMgb24gaW50ZXJtZWRpYXRlIHZhbHVlcyB0aGF0IG5ldmVyIHJlYWNoIGZpbmFsIHN0YXRlLFxuICAgKiBhbmQgKGIpIG1hZGUgZG93bnN0cmVhbSBcIndoYXQgY2hhbmdlZCBoZXJlP1wiIGNvbnN1bWVycyBsaWdodCB1cCBzdGFnZXMgdGhhdFxuICAgKiBjaGFuZ2VkIG5vdGhpbmcg4oCUIG1vc3QgdmlzaWJseSB0aGUgbGVucyBoaWdobGlnaHQgZmxhZ2dpbmcgZXZlcnkgc2xvdC5cbiAgICpcbiAgICog4pSA4pSAIEhPVyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgICogQXQgY29tbWl0IHdlIGhvbGQgQk9USCBgYmFzZVNuYXBzaG90YCAoc3RhdGUgd2hlbiB0aGUgc3RhZ2UgYmVnYW4pIGFuZFxuICAgKiBgd29ya2luZ0NvcHlgIChzdGF0ZSBhZnRlciBhbGwgaXRzIHdyaXRlcykuIEZvciBlYWNoIHBhdGggdGhlIHN0YWdlIHRvdWNoZWRcbiAgICogd2Uga2VlcCBpdCBpbiB0aGUgYnVuZGxlIE9OTFkgaWYgaXRzIGZpbmFsIHZhbHVlIGRpZmZlcnMgZnJvbSB0aGUgYmFzZVxuICAgKiB2YWx1ZSAoe0BsaW5rIGRlZXBFcXVhbH0pLiBOby1vcCBBTkQgd3JpdGUtcmV2ZXJ0IHBhdGhzIGRyb3Agb3V0LCBiZWNhdXNlXG4gICAqIGJvdGggY29tcGFyZSBlcXVhbCB0byBiYXNlLiBUaGlzIGlzIGEgc2luZ2xlIG5ldC1kZWx0YSBkaWZmIGF0IGNvbW1pdCB0aW1lXG4gICAqIOKAlCBvbmUgZGVlcCBjb21wYXJlIHBlciB0b3VjaGVkIHBhdGgsIE8oY2hhbmdlZCBzdGF0ZSksIHBhaWQgb25jZSBwZXIgc3RhZ2VcbiAgICogKE5PVCBwZXIgd3JpdGUpLiBBIG5haXZlIHBlci13cml0ZSBkZWVwLWVxdWFsIHNraXAgd291bGQgYmUgbW9yZSBleHBlbnNpdmVcbiAgICogYW5kIHdvdWxkIHN0aWxsIG1pc3Mgd3JpdGUtcmV2ZXJ0ICh0aGUgaW50ZXJtZWRpYXRlIHdyaXRlIGRpZmZlcnMgZnJvbSB0aGVcbiAgICogdmFsdWUgcHJlc2VudCBhdCB0aGUgbW9tZW50IG9mIHdyaXRpbmcpLlxuICAgKlxuICAgKiDilIDilIAgVFdPIEhPTkVTVCBUSUVSUyAoYnkgZGVzaWduIOKAlCBkbyBub3QgXCJ1bmlmeVwiIHRoZW0pIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICAgKiAgIOKAoiBjb21taXQgKGhlcmUpICAgPSBDSEFOR0UtbGV2ZWwg4oCUIHRydXRoZnVsIG5ldCBkZWx0YS4gRmVlZHMgdGhlIGNvbW1pdFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgbG9nLCBjYXVzYWwgY2hhaW4sIG5hcnJhdGl2ZSwgYW5kIHRoZSBsZW5zIGhpZ2hsaWdodC5cbiAgICogICDigKIgYG9uV3JpdGVgIGV2ZW50ID0gT1AtbGV2ZWwg4oCUIGZpcmVzIG9uIEVWRVJZIHdyaXRlIGF0dGVtcHQgcmVnYXJkbGVzcyBvZlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgbmV0IGNoYW5nZS4gRmVlZHMgbWV0cmljcyAvIGJlaGF2aW91cmFsIG9ic2VydmFiaWxpdHlcbiAgICogICAgICAgICAgICAgICAgICAgICAgIChhIGRlYnVnZ2VyIHdhbnRzIHRvIHNlZSBcIndyb3RlIDIsIHRoZW4gcmV2ZXJ0ZWRcIikuXG4gICAqIGBvbldyaXRlYCBpcyB1bmNoYW5nZWQgYnkgdGhpcyBtZXRob2Q7IG9ubHkgdGhlIENPTU1JVCBiZWNvbWVzIGNoYW5nZS1vbmx5LlxuICAgKlxuICAgKiDilIDilIAgRU1QVFkgQ09NTUlUUyBBUkUgSU5URU5USU9OQUwg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gICAqIEEgc3RhZ2UgdGhhdCBuZXRzIG5vIGNoYW5nZSBjb21taXRzIGFuIEVNUFRZIHBhdGNoIOKAlCBOT1Qgbm90aGluZy5cbiAgICoge0BsaW5rIFN0YWdlQ29udGV4dC5jb21taXR9IHN0aWxsIHJlY29yZHMgdGhlIGJ1bmRsZSB1bmNvbmRpdGlvbmFsbHksIHNvXG4gICAqIGV2ZXJ5IGV4ZWN1dGVkIHN0YWdlIHJlbWFpbnMgYSB0aW1lLXRyYXZlbCBjdXJzb3Igc3RvcCAoaXRzIGBydW50aW1lU3RhZ2VJZGBcbiAgICogbWFya2VyIGlzIHByZXNlcnZlZCk7IG9ubHkgaXRzIFBBVENIIGlzIGVtcHR5LiBUaGlzIGlzIHdoYXQga2VlcHMgdGhlXG4gICAqIGNvbW1pdC1pbmRleGVkIHNsaWRlciBzdGFibGUgd2hpbGUgbWFraW5nIHRoZSBoaWdobGlnaHQgdHJ1dGhmdWwuXG4gICAqXG4gICAqIOKUgOKUgCBLTk9XTiBMSU1JVEFUSU9OUyAvIEZVVFVSRSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgICogICDigKIgRXhwbGljaXQga2V5IERFTEVUSU9OIGlzIHN0aWxsIHVucmVwcmVzZW50YWJsZSBpbiBNZW1vcnlQYXRjaCAoYSByZW1vdmVkXG4gICAqICAgICBrZXkgY2Fubm90IGJlIGV4cHJlc3NlZCkuIFNldHRpbmcgYSBrZXkgdG8gYHVuZGVmaW5lZGAgaXMgdHJlYXRlZCBhcyBhXG4gICAqICAgICBjaGFuZ2UgKHZhbHVlIGRpZmZlcnMgZnJvbSBiYXNlKSwgbm90IGEgZGVsZXRpb24uIFRyYWNrZWQgZm9yIGEgZnV0dXJlXG4gICAqICAgICBgZGVsZXRlYCB2ZXJiLlxuICAgKiAgIOKAoiBBcnJheS1tZXJnZSBkZWR1cCBpbiB7QGxpbmsgZGVlcFNtYXJ0TWVyZ2V9IHN0aWxsIHVzZXMgcmVmZXJlbmNlIGVxdWFsaXR5XG4gICAqICAgICAoYG5ldyBTZXRgKSwgc28gZGVlcC1lcXVhbCAqb2JqZWN0cyogaW4gYSBtZXJnZWQgYXJyYXkgYXJlIG5vdCBkZWR1cGVkLlxuICAgKiAgICAgT3J0aG9nb25hbCB0byB0aGlzIGNoYW5nZTsgdHJhY2tlZCBzZXBhcmF0ZWx5LlxuICAgKlxuICAgKiBSZXNldHMgdGhlIGJ1ZmZlciB0byBlbXB0eSBzdGF0ZSBhZnRlciBjb21taXQuXG4gICAqL1xuICBjb21taXQoKToge1xuICAgIG92ZXJ3cml0ZTogTWVtb3J5UGF0Y2g7XG4gICAgdXBkYXRlczogTWVtb3J5UGF0Y2g7XG4gICAgcmVkYWN0ZWRQYXRoczogU2V0PHN0cmluZz47XG4gICAgdHJhY2U6IHsgcGF0aDogc3RyaW5nOyB2ZXJiOiAnc2V0JyB8ICdtZXJnZScgfVtdO1xuICB9IHtcbiAgICBjb25zdCBwYXlsb2FkID0gdGhpcy50b0NoYW5nZU9ubHlQYXlsb2FkKCk7XG5cbiAgICB0aGlzLm92ZXJ3cml0ZVBhdGNoID0ge307XG4gICAgdGhpcy51cGRhdGVQYXRjaCA9IHt9O1xuICAgIHRoaXMub3BUcmFjZS5sZW5ndGggPSAwO1xuICAgIHRoaXMucmVkYWN0ZWRQYXRocy5jbGVhcigpO1xuICAgIHRoaXMud29ya2luZ0NvcHkgPSB7fTtcblxuICAgIHJldHVybiBwYXlsb2FkO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlYnVpbGQgb3ZlcndyaXRlIC8gdXBkYXRlcyAvIHRyYWNlIGtlZXBpbmcgT05MWSBwYXRocyB3aG9zZSBmaW5hbCB2YWx1ZVxuICAgKiBkaWZmZXJzIGZyb20gdGhlIGJhc2UgdmFsdWUg4oCUIGkuZS4gdGhlIHN0YWdlJ3MgbmV0IGNoYW5nZS4gU2VlXG4gICAqIHtAbGluayBUcmFuc2FjdGlvbkJ1ZmZlci5jb21taXR9IGZvciB0aGUgcmF0aW9uYWxlLlxuICAgKlxuICAgKiBQYXRocyBhcmUgY29tcGFyZWQgYXQgdGhlIGV4YWN0IGdyYW51bGFyaXR5IHRoZXkgd2VyZSB3cml0dGVuIChlYWNoIHRyYWNlXG4gICAqIGVudHJ5J3MgcGF0aCksIGFnYWluc3QgYHdvcmtpbmdDb3B5YCAoZmluYWwpIHZzIGBiYXNlU25hcHNob3RgIChzdGFydCkuXG4gICAqIFN1cnZpdmluZyBgc2V0YCBwYXRocyBjb3B5IHRoZWlyIGZpbmFsIHZhbHVlIGZyb20gYG92ZXJ3cml0ZVBhdGNoYDtcbiAgICogc3Vydml2aW5nIGBtZXJnZWAgcGF0aHMgY29weSB0aGVpciBhY2N1bXVsYXRlZCBkZWx0YSBmcm9tIGB1cGRhdGVQYXRjaGAg4oCUXG4gICAqIHByZXNlcnZpbmcgdGhlIHNldC12cy1tZXJnZSB2ZXJiIHNvIHJlcGxheSAoe0BsaW5rIGFwcGx5U21hcnRNZXJnZX0pIGlzXG4gICAqIGJ5dGUtZm9yLWJ5dGUgaWRlbnRpY2FsIHRvIHJlY29yZGluZyBvbmx5IHRoZSByZWFsIGNoYW5nZXMuXG4gICAqL1xuICBwcml2YXRlIHRvQ2hhbmdlT25seVBheWxvYWQoKToge1xuICAgIG92ZXJ3cml0ZTogTWVtb3J5UGF0Y2g7XG4gICAgdXBkYXRlczogTWVtb3J5UGF0Y2g7XG4gICAgcmVkYWN0ZWRQYXRoczogU2V0PHN0cmluZz47XG4gICAgdHJhY2U6IHsgcGF0aDogc3RyaW5nOyB2ZXJiOiAnc2V0JyB8ICdtZXJnZScgfVtdO1xuICB9IHtcbiAgICBjb25zdCBvdmVyd3JpdGU6IE1lbW9yeVBhdGNoID0ge307XG4gICAgY29uc3QgdXBkYXRlczogTWVtb3J5UGF0Y2ggPSB7fTtcbiAgICBjb25zdCB0cmFjZTogeyBwYXRoOiBzdHJpbmc7IHZlcmI6ICdzZXQnIHwgJ21lcmdlJyB9W10gPSBbXTtcbiAgICBjb25zdCBzdXJ2aXZpbmdQYXRocyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4gICAgZm9yIChjb25zdCBvcCBvZiB0aGlzLm9wVHJhY2UpIHtcbiAgICAgIGNvbnN0IHNlZ21lbnRzID0gb3AucGF0aC5zcGxpdChERUxJTSk7XG4gICAgICBjb25zdCBiZWZvcmUgPSBfZ2V0KHRoaXMuYmFzZVNuYXBzaG90LCBzZWdtZW50cyk7XG4gICAgICBjb25zdCBhZnRlciA9IF9nZXQodGhpcy53b3JraW5nQ29weSwgc2VnbWVudHMpO1xuICAgICAgaWYgKGRlZXBFcXVhbChiZWZvcmUsIGFmdGVyKSkgY29udGludWU7IC8vIG5vLW9wIG9yIHdyaXRlLXRoZW4tcmV2ZXJ0IOKGkiBubyBuZXQgY2hhbmdlXG5cbiAgICAgIHRyYWNlLnB1c2gob3ApO1xuICAgICAgc3Vydml2aW5nUGF0aHMuYWRkKG9wLnBhdGgpO1xuICAgICAgaWYgKG9wLnZlcmIgPT09ICdzZXQnKSB7XG4gICAgICAgIF9zZXQob3ZlcndyaXRlLCBzZWdtZW50cywgc3RydWN0dXJlZENsb25lKF9nZXQodGhpcy5vdmVyd3JpdGVQYXRjaCwgc2VnbWVudHMpKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBfc2V0KHVwZGF0ZXMsIHNlZ21lbnRzLCBzdHJ1Y3R1cmVkQ2xvbmUoX2dldCh0aGlzLnVwZGF0ZVBhdGNoLCBzZWdtZW50cykpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCByZWRhY3RlZFBhdGhzID0gbmV3IFNldChbLi4udGhpcy5yZWRhY3RlZFBhdGhzXS5maWx0ZXIoKHBhdGgpID0+IHN1cnZpdmluZ1BhdGhzLmhhcyhwYXRoKSkpO1xuICAgIHJldHVybiB7IG92ZXJ3cml0ZSwgdXBkYXRlcywgcmVkYWN0ZWRQYXRocywgdHJhY2UgfTtcbiAgfVxufVxuIl19
|
|
159
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVHJhbnNhY3Rpb25CdWZmZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL21lbW9yeS9UcmFuc2FjdGlvbkJ1ZmZlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0JHO0FBRUgsT0FBTyxFQUFFLFNBQVMsSUFBSSxJQUFJLEVBQUUsU0FBUyxJQUFJLElBQUksRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUVwRSxPQUFPLEVBQUUsU0FBUyxFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRTdFLE1BQU0sT0FBTyxpQkFBaUI7SUFDWCxZQUFZLENBQU07SUFDM0IsV0FBVyxDQUFNO0lBRWpCLGNBQWMsR0FBZ0IsRUFBRSxDQUFDO0lBQ2pDLFdBQVcsR0FBZ0IsRUFBRSxDQUFDO0lBQzlCLE9BQU8sR0FBOEMsRUFBRSxDQUFDO0lBQ3hELGFBQWEsR0FBRyxJQUFJLEdBQUcsRUFBVSxDQUFDO0lBRTFDLFlBQVksSUFBUztRQUNuQixJQUFJLENBQUMsWUFBWSxHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsV0FBVyxHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRUQsNENBQTRDO0lBQzVDLEdBQUcsQ0FBQyxJQUF5QixFQUFFLEtBQVUsRUFBRSxZQUFZLEdBQUcsS0FBSztRQUM3RCxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDcEMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsSUFBSSxFQUFFLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ3hELElBQUksWUFBWSxFQUFFLENBQUM7WUFDakIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFD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LENBQUMsSUFBSSxLQUFLLEtBQUssRUFBRSxDQUFDO2dCQUN0QixJQUFJLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2xGLENBQUM7aUJBQU0sQ0FBQztnQkFDTixJQUFJLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzdFLENBQUM7UUFDSCxDQUFDO1FBRUQsTUFBTSxhQUFhLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xHLE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsQ0FBQztJQUN0RCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRyYW5zYWN0aW9uQnVmZmVyIOKAlCBQZXItc3RhZ2UgU1RBR0lORyBidWZmZXIgZm9yIHN0YXRlIG11dGF0aW9uc1xuICpcbiAqIFdoYXQgaXQgSVM6IGEgc3RhZ2luZyBidWZmZXIgd2l0aCByZWFkLXlvdXItd3JpdGVzIGFuZCBuZXQtY2hhbmdlIGNvbW1pdHMuXG4gKiAtIENoYW5nZXMgYXJlIHN0YWdlZCBoZXJlIGR1cmluZyBzdGFnZSBleGVjdXRpb24gYW5kIGZsdXNoZWQgdG9cbiAqICAgU2hhcmVkTWVtb3J5IGluIE9ORSBiYXRjaCBwZXIgc3RhZ2UgKGBjb21taXQoKWApIOKAlCBvdGhlciBzdGFnZXMgYW5kXG4gKiAgIHBhcmFsbGVsIHNpYmxpbmdzIG5ldmVyIG9ic2VydmUgYSBzdGFnZSdzIGhhbGYtZmluaXNoZWQgd3JpdGVzLlxuICogLSBSZWFkLWFmdGVyLXdyaXRlIGNvbnNpc3RlbmN5IHdpdGhpbiBhIHN0YWdlIOKAlCBhIHN0YWdlIHNlZXMgaXRzIG93blxuICogICBzdGFnZWQgd3JpdGVzIGltbWVkaWF0ZWx5LlxuICogLSBgY29tbWl0KClgIHJlY29yZHMgdGhlIHN0YWdlJ3MgTkVUIGNoYW5nZSAoc2VlIHtAbGluayBjb21taXR9KSwgcGx1cyBhblxuICogICBvcGVyYXRpb24gdHJhY2UgZm9yIGRldGVybWluaXN0aWMgcmVwbGF5LlxuICpcbiAqIFdoYXQgaXQgaXMgTk9UOiBhIHJvbGxiYWNrIG1lY2hhbmlzbS4gRGVzcGl0ZSB0aGUgbmFtZSwgdGhlcmUgaXMgbm9cbiAqIGFib3J0L3JvbGxiYWNrIHBhdGgg4oCUIHdoZW4gYSBzdGFnZSBUSFJPV1MsIHRoZSBlbmdpbmUgc3RpbGwgY29tbWl0c1xuICogZXZlcnl0aGluZyBzdGFnZWQgc28gZmFyIGJlZm9yZSByZS10aHJvd2luZyAoY29tbWl0LW9uLWVycm9yIGluXG4gKiBgRmxvd2NoYXJ0VHJhdmVyc2VyYCkuIFRoYXQgaXMgZGVsaWJlcmF0ZTogdGhlIGF1ZGl0IHRyYWlsIG11c3QgcmVjb3JkXG4gKiB3aGF0IHRoZSBmYWlsaW5nIHN0YWdlIGNoYW5nZWQuIERvIG5vdCByZWx5IG9uIFwic3RhZ2UgZmFpbGVkIOKGkiBpdHNcbiAqIHdyaXRlcyB2YW5pc2hlZFwiLlxuICovXG5cbmltcG9ydCB7IG5hdGl2ZUdldCBhcyBfZ2V0LCBuYXRpdmVTZXQgYXMgX3NldCB9IGZyb20gJy4vcGF0aE9wcy5qcyc7XG5pbXBvcnQgdHlwZSB7IE1lbW9yeVBhdGNoIH0gZnJvbSAnLi90eXBlcy5qcyc7XG5pbXBvcnQgeyBkZWVwRXF1YWwsIGRlZXBTbWFydE1lcmdlLCBERUxJTSwgbm9ybWFsaXNlUGF0aCB9IGZyb20gJy4vdXRpbHMuanMnO1xuXG5leHBvcnQgY2xhc3MgVHJhbnNhY3Rpb25CdWZmZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IGJhc2VTbmFwc2hvdDogYW55O1xuICBwcml2YXRlIHdvcmtpbmdDb3B5OiBhbnk7XG5cbiAgcHJpdmF0ZSBvdmVyd3JpdGVQYXRjaDogTWVtb3J5UGF0Y2ggPSB7fTtcbiAgcHJpdmF0ZSB1cGRhdGVQYXRjaDogTWVtb3J5UGF0Y2ggPSB7fTtcbiAgcHJpdmF0ZSBvcFRyYWNlOiB7IHBhdGg6IHN0cmluZzsgdmVyYjogJ3NldCcgfCAnbWVyZ2UnIH1bXSA9IFtdO1xuICBwcml2YXRlIHJlZGFjdGVkUGF0aHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICBjb25zdHJ1Y3RvcihiYXNlOiBhbnkpIHtcbiAgICB0aGlzLmJhc2VTbmFwc2hvdCA9IHN0cnVjdHVyZWRDbG9uZShiYXNlKTtcbiAgICB0aGlzLndvcmtpbmdDb3B5ID0gc3RydWN0dXJlZENsb25lKGJhc2UpO1xuICB9XG5cbiAgLyoqIEhhcmQgb3ZlcndyaXRlIGF0IHRoZSBzcGVjaWZpZWQgcGF0aC4gKi9cbiAgc2V0KHBhdGg6IChzdHJpbmcgfCBudW1iZXIpW10sIHZhbHVlOiBhbnksIHNob3VsZFJlZGFjdCA9IGZhbHNlKTogdm9pZCB7XG4gICAgX3NldCh0aGlzLndvcmtpbmdDb3B5LCBwYXRoLCB2YWx1ZSk7XG4gICAgX3NldCh0aGlzLm92ZXJ3cml0ZVBhdGNoLCBwYXRoLCBzdHJ1Y3R1cmVkQ2xvbmUodmFsdWUpKTtcbiAgICBpZiAoc2hvdWxkUmVkYWN0KSB7XG4gICAgICB0aGlzLnJlZGFjdGVkUGF0aHMuYWRkKG5vcm1hbGlzZVBhdGgocGF0aCkpO1xuICAgIH1cbiAgICB0aGlzLm9wVHJhY2UucHVzaCh7IHBhdGg6IG5vcm1hbGlzZVBhdGgocGF0aCksIHZlcmI6ICdzZXQnIH0pO1xuICB9XG5cbiAgLyoqIERlZXAgdW5pb24gbWVyZ2UgYXQgdGhlIHNwZWNpZmllZCBwYXRoLiAqL1xuICBtZXJnZShwYXRoOiAoc3RyaW5nIHwgbnVtYmVyKVtdLCB2YWx1ZTogYW55LCBzaG91bGRSZWRhY3QgPSBmYWxzZSk6IHZvaWQge1xuICAgIGNvbnN0IGV4aXN0aW5nID0gX2dldCh0aGlzLndvcmtpbmdDb3B5LCBwYXRoKSA/PyB7fTtcbiAgICBjb25zdCBtZXJnZWQgPSBkZWVwU21hcnRNZXJnZShleGlzdGluZywgdmFsdWUpO1xuICAgIF9zZXQodGhpcy53b3JraW5nQ29weSwgcGF0aCwgbWVyZ2VkKTtcbiAgICBfc2V0KHRoaXMudXBkYXRlUGF0Y2gsIHBhdGgsIGRlZXBTbWFydE1lcmdlKF9nZXQodGhpcy51cGRhdGVQYXRjaCwgcGF0aCkgPz8ge30sIHZhbHVlKSk7XG4gICAgaWYgKHNob3VsZFJlZGFjdCkge1xuICAgICAgdGhpcy5yZWRhY3RlZFBhdGhzLmFkZChub3JtYWxpc2VQYXRoKHBhdGgpKTtcbiAgICB9XG4gICAgdGhpcy5vcFRyYWNlLnB1c2goeyBwYXRoOiBub3JtYWxpc2VQYXRoKHBhdGgpLCB2ZXJiOiAnbWVyZ2UnIH0pO1xuICB9XG5cbiAgLyoqIFJlYWQgY3VycmVudCB2YWx1ZSBhdCBwYXRoIChpbmNsdWRlcyB1bmNvbW1pdHRlZCBjaGFuZ2VzKS4gKi9cbiAgZ2V0KHBhdGg6IChzdHJpbmcgfCBudW1iZXIpW10sIGRlZmF1bHRWYWx1ZT86IGFueSkge1xuICAgIHJldHVybiBfZ2V0KHRoaXMud29ya2luZ0NvcHksIHBhdGgsIGRlZmF1bHRWYWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogRmx1c2ggYWxsIHN0YWdlZCBtdXRhdGlvbnMgYW5kIHJldHVybiB0aGUgY29tbWl0IGJ1bmRsZSDigJQgcmVjb3JkaW5nIHRoZVxuICAgKiBzdGFnZSdzIE5FVCBDSEFOR0UsIG5vdCBpdHMgcmF3IHdyaXRlIGxvZy5cbiAgICpcbiAgICog4pSA4pSAIFdIWSAodGhlIGRlZmVjdCB0aGlzIGZpeGVzKSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgICogUHJldmlvdXNseSBldmVyeSBgc2V0YC9gbWVyZ2VgIHdhcyByZWNvcmRlZCB2ZXJiYXRpbSwgc28gdGhlIGNvbW1pdCBidW5kbGVcbiAgICogd2FzIGEgbG9nIG9mICpvcGVyYXRpb25zKiByYXRoZXIgdGhhbiAqY2hhbmdlcyouIFR3byBvcGVyYXRpb25zIHByb2R1Y2Ugbm9cbiAgICogbmV0IGNoYW5nZSB5ZXQgd2VyZSBzdGlsbCBjb21taXR0ZWQgYXMgXCJtdXRhdGlvbnNcIjpcbiAgICpcbiAgICogICAxLiBOby1vcCB3cml0ZSAgIOKAlCB3cml0aW5nIGEga2V5IHRoZSB2YWx1ZSBpdCBhbHJlYWR5IGhvbGRzIChlLmcuIGFuXG4gICAqICAgICAgICAgICAgICAgICAgICAgIGFnZW50IGNvbnRleHQgc2xvdCByZS1lbWl0dGluZyBpZGVudGljYWwgY29udGVudCBldmVyeVxuICAgKiAgICAgICAgICAgICAgICAgICAgICB0dXJuKS4gYmFzZSBLPTEsIHN0YWdlIHdyaXRlcyBLPTEuXG4gICAqICAgMi4gV3JpdGUtcmV2ZXJ0ICDigJQgY2hhbmdpbmcgdGhlbiByZXN0b3JpbmcgYSBrZXkgd2l0aGluIG9uZSBzdGFnZS5cbiAgICogICAgICAgICAgICAgICAgICAgICAgYmFzZSBLPTEsIHN0YWdlIHdyaXRlcyBLPTIgdGhlbiBLPTEuXG4gICAqXG4gICAqIFJlY29yZGluZyB0aGVzZSBhcyBtdXRhdGlvbnMgKGEpIGJsb2F0ZWQgY2F1c2FsIHNsaWNpbmcgLyBiYWNrdHJhY2tpbmcgd2l0aFxuICAgKiBzcHVyaW91cyBkZXBlbmRlbmNpZXMgb24gaW50ZXJtZWRpYXRlIHZhbHVlcyB0aGF0IG5ldmVyIHJlYWNoIGZpbmFsIHN0YXRlLFxuICAgKiBhbmQgKGIpIG1hZGUgZG93bnN0cmVhbSBcIndoYXQgY2hhbmdlZCBoZXJlP1wiIGNvbnN1bWVycyBsaWdodCB1cCBzdGFnZXMgdGhhdFxuICAgKiBjaGFuZ2VkIG5vdGhpbmcg4oCUIG1vc3QgdmlzaWJseSB0aGUgbGVucyBoaWdobGlnaHQgZmxhZ2dpbmcgZXZlcnkgc2xvdC5cbiAgICpcbiAgICog4pSA4pSAIEhPVyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgICogQXQgY29tbWl0IHdlIGhvbGQgQk9USCBgYmFzZVNuYXBzaG90YCAoc3RhdGUgd2hlbiB0aGUgc3RhZ2UgYmVnYW4pIGFuZFxuICAgKiBgd29ya2luZ0NvcHlgIChzdGF0ZSBhZnRlciBhbGwgaXRzIHdyaXRlcykuIEZvciBlYWNoIHBhdGggdGhlIHN0YWdlIHRvdWNoZWRcbiAgICogd2Uga2VlcCBpdCBpbiB0aGUgYnVuZGxlIE9OTFkgaWYgaXRzIGZpbmFsIHZhbHVlIGRpZmZlcnMgZnJvbSB0aGUgYmFzZVxuICAgKiB2YWx1ZSAoe0BsaW5rIGRlZXBFcXVhbH0pLiBOby1vcCBBTkQgd3JpdGUtcmV2ZXJ0IHBhdGhzIGRyb3Agb3V0LCBiZWNhdXNlXG4gICAqIGJvdGggY29tcGFyZSBlcXVhbCB0byBiYXNlLiBUaGlzIGlzIGEgc2luZ2xlIG5ldC1kZWx0YSBkaWZmIGF0IGNvbW1pdCB0aW1lXG4gICAqIOKAlCBvbmUgZGVlcCBjb21wYXJlIHBlciB0b3VjaGVkIHBhdGgsIE8oY2hhbmdlZCBzdGF0ZSksIHBhaWQgb25jZSBwZXIgc3RhZ2VcbiAgICogKE5PVCBwZXIgd3JpdGUpLiBBIG5haXZlIHBlci13cml0ZSBkZWVwLWVxdWFsIHNraXAgd291bGQgYmUgbW9yZSBleHBlbnNpdmVcbiAgICogYW5kIHdvdWxkIHN0aWxsIG1pc3Mgd3JpdGUtcmV2ZXJ0ICh0aGUgaW50ZXJtZWRpYXRlIHdyaXRlIGRpZmZlcnMgZnJvbSB0aGVcbiAgICogdmFsdWUgcHJlc2VudCBhdCB0aGUgbW9tZW50IG9mIHdyaXRpbmcpLlxuICAgKlxuICAgKiDilIDilIAgVFdPIEhPTkVTVCBUSUVSUyAoYnkgZGVzaWduIOKAlCBkbyBub3QgXCJ1bmlmeVwiIHRoZW0pIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICAgKiAgIOKAoiBjb21taXQgKGhlcmUpICAgPSBDSEFOR0UtbGV2ZWwg4oCUIHRydXRoZnVsIG5ldCBkZWx0YS4gRmVlZHMgdGhlIGNvbW1pdFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgbG9nLCBjYXVzYWwgY2hhaW4sIG5hcnJhdGl2ZSwgYW5kIHRoZSBsZW5zIGhpZ2hsaWdodC5cbiAgICogICDigKIgYG9uV3JpdGVgIGV2ZW50ID0gT1AtbGV2ZWwg4oCUIGZpcmVzIG9uIEVWRVJZIHdyaXRlIGF0dGVtcHQgcmVnYXJkbGVzcyBvZlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgbmV0IGNoYW5nZS4gRmVlZHMgbWV0cmljcyAvIGJlaGF2aW91cmFsIG9ic2VydmFiaWxpdHlcbiAgICogICAgICAgICAgICAgICAgICAgICAgIChhIGRlYnVnZ2VyIHdhbnRzIHRvIHNlZSBcIndyb3RlIDIsIHRoZW4gcmV2ZXJ0ZWRcIikuXG4gICAqIGBvbldyaXRlYCBpcyB1bmNoYW5nZWQgYnkgdGhpcyBtZXRob2Q7IG9ubHkgdGhlIENPTU1JVCBiZWNvbWVzIGNoYW5nZS1vbmx5LlxuICAgKlxuICAgKiDilIDilIAgRU1QVFkgQ09NTUlUUyBBUkUgSU5URU5USU9OQUwg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gICAqIEEgc3RhZ2UgdGhhdCBuZXRzIG5vIGNoYW5nZSBjb21taXRzIGFuIEVNUFRZIHBhdGNoIOKAlCBOT1Qgbm90aGluZy5cbiAgICoge0BsaW5rIFN0YWdlQ29udGV4dC5jb21taXR9IHN0aWxsIHJlY29yZHMgdGhlIGJ1bmRsZSB1bmNvbmRpdGlvbmFsbHksIHNvXG4gICAqIGV2ZXJ5IGV4ZWN1dGVkIHN0YWdlIHJlbWFpbnMgYSB0aW1lLXRyYXZlbCBjdXJzb3Igc3RvcCAoaXRzIGBydW50aW1lU3RhZ2VJZGBcbiAgICogbWFya2VyIGlzIHByZXNlcnZlZCk7IG9ubHkgaXRzIFBBVENIIGlzIGVtcHR5LiBUaGlzIGlzIHdoYXQga2VlcHMgdGhlXG4gICAqIGNvbW1pdC1pbmRleGVkIHNsaWRlciBzdGFibGUgd2hpbGUgbWFraW5nIHRoZSBoaWdobGlnaHQgdHJ1dGhmdWwuXG4gICAqXG4gICAqIOKUgOKUgCBLTk9XTiBMSU1JVEFUSU9OUyAvIEZVVFVSRSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgICogICDigKIgRXhwbGljaXQga2V5IERFTEVUSU9OIGlzIHN0aWxsIHVucmVwcmVzZW50YWJsZSBpbiBNZW1vcnlQYXRjaCAoYSByZW1vdmVkXG4gICAqICAgICBrZXkgY2Fubm90IGJlIGV4cHJlc3NlZCkuIFNldHRpbmcgYSBrZXkgdG8gYHVuZGVmaW5lZGAgaXMgdHJlYXRlZCBhcyBhXG4gICAqICAgICBjaGFuZ2UgKHZhbHVlIGRpZmZlcnMgZnJvbSBiYXNlKSwgbm90IGEgZGVsZXRpb24uIFRyYWNrZWQgZm9yIGEgZnV0dXJlXG4gICAqICAgICBgZGVsZXRlYCB2ZXJiLlxuICAgKiAgIOKAoiBBcnJheS1tZXJnZSBkZWR1cCBpbiB7QGxpbmsgZGVlcFNtYXJ0TWVyZ2V9IHN0aWxsIHVzZXMgcmVmZXJlbmNlIGVxdWFsaXR5XG4gICAqICAgICAoYG5ldyBTZXRgKSwgc28gZGVlcC1lcXVhbCAqb2JqZWN0cyogaW4gYSBtZXJnZWQgYXJyYXkgYXJlIG5vdCBkZWR1cGVkLlxuICAgKiAgICAgT3J0aG9nb25hbCB0byB0aGlzIGNoYW5nZTsgdHJhY2tlZCBzZXBhcmF0ZWx5LlxuICAgKlxuICAgKiBSZXNldHMgdGhlIGJ1ZmZlciB0byBlbXB0eSBzdGF0ZSBhZnRlciBjb21taXQuXG4gICAqL1xuICBjb21taXQoKToge1xuICAgIG92ZXJ3cml0ZTogTWVtb3J5UGF0Y2g7XG4gICAgdXBkYXRlczogTWVtb3J5UGF0Y2g7XG4gICAgcmVkYWN0ZWRQYXRoczogU2V0PHN0cmluZz47XG4gICAgdHJhY2U6IHsgcGF0aDogc3RyaW5nOyB2ZXJiOiAnc2V0JyB8ICdtZXJnZScgfVtdO1xuICB9IHtcbiAgICBjb25zdCBwYXlsb2FkID0gdGhpcy50b0NoYW5nZU9ubHlQYXlsb2FkKCk7XG5cbiAgICB0aGlzLm92ZXJ3cml0ZVBhdGNoID0ge307XG4gICAgdGhpcy51cGRhdGVQYXRjaCA9IHt9O1xuICAgIHRoaXMub3BUcmFjZS5sZW5ndGggPSAwO1xuICAgIHRoaXMucmVkYWN0ZWRQYXRocy5jbGVhcigpO1xuICAgIHRoaXMud29ya2luZ0NvcHkgPSB7fTtcblxuICAgIHJldHVybiBwYXlsb2FkO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlYnVpbGQgb3ZlcndyaXRlIC8gdXBkYXRlcyAvIHRyYWNlIGtlZXBpbmcgT05MWSBwYXRocyB3aG9zZSBmaW5hbCB2YWx1ZVxuICAgKiBkaWZmZXJzIGZyb20gdGhlIGJhc2UgdmFsdWUg4oCUIGkuZS4gdGhlIHN0YWdlJ3MgbmV0IGNoYW5nZS4gU2VlXG4gICAqIHtAbGluayBUcmFuc2FjdGlvbkJ1ZmZlci5jb21taXR9IGZvciB0aGUgcmF0aW9uYWxlLlxuICAgKlxuICAgKiBQYXRocyBhcmUgY29tcGFyZWQgYXQgdGhlIGV4YWN0IGdyYW51bGFyaXR5IHRoZXkgd2VyZSB3cml0dGVuIChlYWNoIHRyYWNlXG4gICAqIGVudHJ5J3MgcGF0aCksIGFnYWluc3QgYHdvcmtpbmdDb3B5YCAoZmluYWwpIHZzIGBiYXNlU25hcHNob3RgIChzdGFydCkuXG4gICAqIFN1cnZpdmluZyBgc2V0YCBwYXRocyBjb3B5IHRoZWlyIGZpbmFsIHZhbHVlIGZyb20gYG92ZXJ3cml0ZVBhdGNoYDtcbiAgICogc3Vydml2aW5nIGBtZXJnZWAgcGF0aHMgY29weSB0aGVpciBhY2N1bXVsYXRlZCBkZWx0YSBmcm9tIGB1cGRhdGVQYXRjaGAg4oCUXG4gICAqIHByZXNlcnZpbmcgdGhlIHNldC12cy1tZXJnZSB2ZXJiIHNvIHJlcGxheSAoe0BsaW5rIGFwcGx5U21hcnRNZXJnZX0pIGlzXG4gICAqIGJ5dGUtZm9yLWJ5dGUgaWRlbnRpY2FsIHRvIHJlY29yZGluZyBvbmx5IHRoZSByZWFsIGNoYW5nZXMuXG4gICAqL1xuICBwcml2YXRlIHRvQ2hhbmdlT25seVBheWxvYWQoKToge1xuICAgIG92ZXJ3cml0ZTogTWVtb3J5UGF0Y2g7XG4gICAgdXBkYXRlczogTWVtb3J5UGF0Y2g7XG4gICAgcmVkYWN0ZWRQYXRoczogU2V0PHN0cmluZz47XG4gICAgdHJhY2U6IHsgcGF0aDogc3RyaW5nOyB2ZXJiOiAnc2V0JyB8ICdtZXJnZScgfVtdO1xuICB9IHtcbiAgICBjb25zdCBvdmVyd3JpdGU6IE1lbW9yeVBhdGNoID0ge307XG4gICAgY29uc3QgdXBkYXRlczogTWVtb3J5UGF0Y2ggPSB7fTtcbiAgICBjb25zdCB0cmFjZTogeyBwYXRoOiBzdHJpbmc7IHZlcmI6ICdzZXQnIHwgJ21lcmdlJyB9W10gPSBbXTtcbiAgICBjb25zdCBzdXJ2aXZpbmdQYXRocyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4gICAgZm9yIChjb25zdCBvcCBvZiB0aGlzLm9wVHJhY2UpIHtcbiAgICAgIGNvbnN0IHNlZ21lbnRzID0gb3AucGF0aC5zcGxpdChERUxJTSk7XG4gICAgICBjb25zdCBiZWZvcmUgPSBfZ2V0KHRoaXMuYmFzZVNuYXBzaG90LCBzZWdtZW50cyk7XG4gICAgICBjb25zdCBhZnRlciA9IF9nZXQodGhpcy53b3JraW5nQ29weSwgc2VnbWVudHMpO1xuICAgICAgaWYgKGRlZXBFcXVhbChiZWZvcmUsIGFmdGVyKSkgY29udGludWU7IC8vIG5vLW9wIG9yIHdyaXRlLXRoZW4tcmV2ZXJ0IOKGkiBubyBuZXQgY2hhbmdlXG5cbiAgICAgIHRyYWNlLnB1c2gob3ApO1xuICAgICAgc3Vydml2aW5nUGF0aHMuYWRkKG9wLnBhdGgpO1xuICAgICAgaWYgKG9wLnZlcmIgPT09ICdzZXQnKSB7XG4gICAgICAgIF9zZXQob3ZlcndyaXRlLCBzZWdtZW50cywgc3RydWN0dXJlZENsb25lKF9nZXQodGhpcy5vdmVyd3JpdGVQYXRjaCwgc2VnbWVudHMpKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBfc2V0KHVwZGF0ZXMsIHNlZ21lbnRzLCBzdHJ1Y3R1cmVkQ2xvbmUoX2dldCh0aGlzLnVwZGF0ZVBhdGNoLCBzZWdtZW50cykpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCByZWRhY3RlZFBhdGhzID0gbmV3IFNldChbLi4udGhpcy5yZWRhY3RlZFBhdGhzXS5maWx0ZXIoKHBhdGgpID0+IHN1cnZpdmluZ1BhdGhzLmhhcyhwYXRoKSkpO1xuICAgIHJldHVybiB7IG92ZXJ3cml0ZSwgdXBkYXRlcywgcmVkYWN0ZWRQYXRocywgdHJhY2UgfTtcbiAgfVxufVxuIl19
|
|
@@ -11,6 +11,7 @@ export { EventLog } from './EventLog.js';
|
|
|
11
11
|
export { SharedMemory } from './SharedMemory.js';
|
|
12
12
|
export { StageContext } from './StageContext.js';
|
|
13
13
|
export { TransactionBuffer } from './TransactionBuffer.js';
|
|
14
|
+
export { READ_PREVIEW_LENGTH } from './types.js';
|
|
14
15
|
// Utilities
|
|
15
16
|
export { applySmartMerge, deepSmartMerge, DELIM, getNestedValue, getRunAndGlobalPaths, normalisePath, redactPatch, setNestedValue, updateNestedValue, updateValue, } from './utils.js';
|
|
16
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
17
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL21lbW9yeS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwwQkFBMEI7QUFDMUI7Ozs7O0dBS0c7QUFFSCxVQUFVO0FBQ1YsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDL0QsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDakQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBYzNELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUVqRCxZQUFZO0FBQ1osT0FBTyxFQUNMLGVBQWUsRUFDZixjQUFjLEVBQ2QsS0FBSyxFQUNMLGNBQWMsRUFDZCxvQkFBb0IsRUFDcEIsYUFBYSxFQUNiLFdBQVcsRUFDWCxjQUFjLEVBQ2QsaUJBQWlCLEVBQ2pCLFdBQVcsR0FDWixNQUFNLFlBQVksQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGlzdGFuYnVsIGlnbm9yZSBmaWxlICovXG4vKipcbiAqIG1lbW9yeS8g4oCUIEZvdW5kYXRpb24gbGlicmFyeSAoemVybyBleHRlcm5hbCBkZXBzKVxuICpcbiAqIFRyYW5zYWN0aW9uYWwgc3RhdGUgbWFuYWdlbWVudCB3aXRoIG5hbWVzcGFjZSBpc29sYXRpb24sXG4gKiBhdG9taWMgY29tbWl0cywgYW5kIGV2ZW50LXNvdXJjZWQgdGltZS10cmF2ZWwuXG4gKi9cblxuLy8gQ2xhc3Nlc1xuZXhwb3J0IHsgRGlhZ25vc3RpY0NvbGxlY3RvciB9IGZyb20gJy4vRGlhZ25vc3RpY0NvbGxlY3Rvci5qcyc7XG5leHBvcnQgeyBFdmVudExvZyB9IGZyb20gJy4vRXZlbnRMb2cuanMnO1xuZXhwb3J0IHsgU2hhcmVkTWVtb3J5IH0gZnJvbSAnLi9TaGFyZWRNZW1vcnkuanMnO1xuZXhwb3J0IHsgU3RhZ2VDb250ZXh0IH0gZnJvbSAnLi9TdGFnZUNvbnRleHQuanMnO1xuZXhwb3J0IHsgVHJhbnNhY3Rpb25CdWZmZXIgfSBmcm9tICcuL1RyYW5zYWN0aW9uQnVmZmVyLmpzJztcblxuLy8gVHlwZXNcbmV4cG9ydCB0eXBlIHtcbiAgQ29tbWl0QnVuZGxlLFxuICBGbG93Q29udHJvbFR5cGUsXG4gIEZsb3dNZXNzYWdlLFxuICBNZW1vcnlQYXRjaCxcbiAgUmVhZFN1bW1hcnlNYXJrZXIsXG4gIFJlYWRUcmFja2luZ01vZGUsXG4gIFNjb3BlRmFjdG9yeSxcbiAgU3RhZ2VTbmFwc2hvdCxcbiAgVHJhY2VFbnRyeSxcbn0gZnJvbSAnLi90eXBlcy5qcyc7XG5leHBvcnQgeyBSRUFEX1BSRVZJRVdfTEVOR1RIIH0gZnJvbSAnLi90eXBlcy5qcyc7XG5cbi8vIFV0aWxpdGllc1xuZXhwb3J0IHtcbiAgYXBwbHlTbWFydE1lcmdlLFxuICBkZWVwU21hcnRNZXJnZSxcbiAgREVMSU0sXG4gIGdldE5lc3RlZFZhbHVlLFxuICBnZXRSdW5BbmRHbG9iYWxQYXRocyxcbiAgbm9ybWFsaXNlUGF0aCxcbiAgcmVkYWN0UGF0Y2gsXG4gIHNldE5lc3RlZFZhbHVlLFxuICB1cGRhdGVOZXN0ZWRWYWx1ZSxcbiAgdXBkYXRlVmFsdWUsXG59IGZyb20gJy4vdXRpbHMuanMnO1xuIl19
|