footprintjs 10.3.0 → 10.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/esm/index.d.ts +2 -0
- package/dist/esm/index.js +1 -1
- package/dist/esm/lib/capture/absentEntries.d.ts +7 -0
- package/dist/esm/lib/capture/absentEntries.js +81 -0
- package/dist/esm/lib/capture/checkpointCapture.d.ts +11 -0
- package/dist/esm/lib/capture/checkpointCapture.js +104 -0
- package/dist/esm/lib/capture/historyData.d.ts +9 -0
- package/dist/esm/lib/capture/historyData.js +79 -0
- package/dist/esm/lib/capture/historyNote.d.ts +4 -0
- package/dist/esm/lib/capture/historyNote.js +52 -0
- package/dist/esm/lib/capture/historyTarget.d.ts +5 -0
- package/dist/esm/lib/capture/historyTarget.js +35 -0
- package/dist/esm/lib/capture/historyTypes.d.ts +39 -0
- package/dist/esm/lib/capture/historyTypes.js +4 -0
- package/dist/esm/lib/capture/nativeCoverage.d.ts +20 -7
- package/dist/esm/lib/capture/nativeCoverage.js +50 -12
- package/dist/esm/lib/capture/noteShape.d.ts +10 -0
- package/dist/esm/lib/capture/noteShape.js +93 -0
- package/dist/esm/lib/capture/readSources.d.ts +43 -0
- package/dist/esm/lib/capture/readSources.js +78 -0
- package/dist/esm/lib/engine/handlers/SubflowExecutor.js +5 -2
- package/dist/esm/lib/engine/traversal/FlowchartTraverser.d.ts +1 -0
- package/dist/esm/lib/engine/types.d.ts +3 -0
- package/dist/esm/lib/engine/types.js +1 -1
- package/dist/esm/lib/memory/StageContext.d.ts +8 -0
- package/dist/esm/lib/memory/StageContext.js +84 -9
- package/dist/esm/lib/memory/runPolicy.d.ts +5 -1
- package/dist/esm/lib/memory/runPolicy.js +2 -1
- package/dist/esm/lib/pause/record.js +8 -2
- package/dist/esm/lib/pause/types.d.ts +2 -0
- package/dist/esm/lib/pause/types.js +1 -1
- package/dist/esm/lib/runner/ExecutionRuntime.d.ts +17 -3
- package/dist/esm/lib/runner/ExecutionRuntime.js +33 -4
- package/dist/esm/lib/runner/FlowChartExecutor.d.ts +3 -0
- package/dist/esm/lib/runner/FlowChartExecutor.js +48 -10
- package/dist/esm/lib/runner/attach.js +3 -1
- package/dist/esm/lib/runner/captureHistory.d.ts +8 -0
- package/dist/esm/lib/runner/captureHistory.js +106 -0
- package/dist/esm/lib/runner/checkpoint.d.ts +2 -0
- package/dist/esm/lib/runner/checkpoint.js +3 -1
- package/dist/esm/lib/runner/index.d.ts +1 -0
- package/dist/esm/lib/runner/index.js +1 -1
- package/dist/esm/lib/runner/options.js +42 -3
- package/dist/esm/lib/runner/readStoredCapture.d.ts +39 -0
- package/dist/esm/lib/runner/readStoredCapture.js +36 -0
- package/dist/esm/lib/runner/recordSink.d.ts +11 -0
- package/dist/esm/lib/runner/recordSink.js +47 -4
- package/dist/esm/lib/runner/snapshot.js +2 -2
- package/dist/esm/lib/runner/storedCaptureAdmission.d.ts +4 -0
- package/dist/esm/lib/runner/storedCaptureAdmission.js +97 -0
- package/dist/esm/lib/sinks/fileSink.d.ts +2 -1
- package/dist/esm/lib/sinks/fileSink.js +8 -2
- package/dist/esm/trace.d.ts +2 -0
- package/dist/esm/trace.js +2 -1
- package/dist/index.js +1 -1
- package/dist/lib/capture/absentEntries.js +86 -0
- package/dist/lib/capture/checkpointCapture.js +110 -0
- package/dist/lib/capture/historyData.js +85 -0
- package/dist/lib/capture/historyNote.js +56 -0
- package/dist/lib/capture/historyTarget.js +40 -0
- package/dist/lib/capture/historyTypes.js +7 -0
- package/dist/lib/capture/nativeCoverage.js +52 -13
- package/dist/lib/capture/noteShape.js +103 -0
- package/dist/lib/capture/readSources.js +83 -0
- package/dist/lib/engine/handlers/SubflowExecutor.js +5 -2
- package/dist/lib/engine/types.js +1 -1
- package/dist/lib/memory/StageContext.js +84 -9
- package/dist/lib/memory/runPolicy.js +2 -1
- package/dist/lib/pause/record.js +8 -2
- package/dist/lib/pause/types.js +1 -1
- package/dist/lib/runner/ExecutionRuntime.js +32 -3
- package/dist/lib/runner/FlowChartExecutor.js +48 -10
- package/dist/lib/runner/attach.js +3 -1
- package/dist/lib/runner/captureHistory.js +110 -0
- package/dist/lib/runner/checkpoint.js +3 -1
- package/dist/lib/runner/index.js +1 -1
- package/dist/lib/runner/options.js +42 -3
- package/dist/lib/runner/readStoredCapture.js +40 -0
- package/dist/lib/runner/recordSink.js +47 -4
- package/dist/lib/runner/snapshot.js +2 -2
- package/dist/lib/runner/storedCaptureAdmission.js +101 -0
- package/dist/lib/sinks/fileSink.js +8 -2
- package/dist/trace.js +4 -2
- package/dist/types/index.d.ts +2 -0
- package/dist/types/lib/capture/absentEntries.d.ts +7 -0
- package/dist/types/lib/capture/checkpointCapture.d.ts +11 -0
- package/dist/types/lib/capture/historyData.d.ts +9 -0
- package/dist/types/lib/capture/historyNote.d.ts +4 -0
- package/dist/types/lib/capture/historyTarget.d.ts +5 -0
- package/dist/types/lib/capture/historyTypes.d.ts +39 -0
- package/dist/types/lib/capture/nativeCoverage.d.ts +20 -7
- package/dist/types/lib/capture/noteShape.d.ts +10 -0
- package/dist/types/lib/capture/readSources.d.ts +43 -0
- package/dist/types/lib/engine/traversal/FlowchartTraverser.d.ts +1 -0
- package/dist/types/lib/engine/types.d.ts +3 -0
- package/dist/types/lib/memory/StageContext.d.ts +8 -0
- package/dist/types/lib/memory/runPolicy.d.ts +5 -1
- package/dist/types/lib/pause/types.d.ts +2 -0
- package/dist/types/lib/runner/ExecutionRuntime.d.ts +17 -3
- package/dist/types/lib/runner/FlowChartExecutor.d.ts +3 -0
- package/dist/types/lib/runner/captureHistory.d.ts +8 -0
- package/dist/types/lib/runner/checkpoint.d.ts +2 -0
- package/dist/types/lib/runner/index.d.ts +1 -0
- package/dist/types/lib/runner/readStoredCapture.d.ts +39 -0
- package/dist/types/lib/runner/recordSink.d.ts +11 -0
- package/dist/types/lib/runner/storedCaptureAdmission.d.ts +4 -0
- package/dist/types/lib/sinks/fileSink.d.ts +2 -1
- package/dist/types/trace.d.ts +2 -0
- package/package.json +2 -2
|
@@ -57,7 +57,7 @@ function resolveRecordSink(option) {
|
|
|
57
57
|
if (isAdapter(option))
|
|
58
58
|
return { adapter: option, onFailure: 'report', flush: 'auto' };
|
|
59
59
|
if (option !== null && typeof option === 'object' && Object.hasOwn(option, 'adapter')) {
|
|
60
|
-
const { adapter, onFailure = 'report', flush = 'auto' } = option;
|
|
60
|
+
const { adapter, onFailure = 'report', flush = 'auto', capture } = option;
|
|
61
61
|
if (!isAdapter(adapter)) {
|
|
62
62
|
throw new TypeError('FlowChartExecutor: sink.adapter must be a RecordSink (opened, commit, note, closed)');
|
|
63
63
|
}
|
|
@@ -67,7 +67,25 @@ function resolveRecordSink(option) {
|
|
|
67
67
|
if (flush !== 'auto' && flush !== 'manual') {
|
|
68
68
|
throw new TypeError("FlowChartExecutor: sink.flush must be 'auto' or 'manual'");
|
|
69
69
|
}
|
|
70
|
-
|
|
70
|
+
if (capture !== undefined) {
|
|
71
|
+
if (!capture || typeof capture.acknowledge !== 'function')
|
|
72
|
+
throw new TypeError('sink.capture requires acknowledge');
|
|
73
|
+
for (const [key, max] of [
|
|
74
|
+
['maxBytes', 8 * 1024 * 1024],
|
|
75
|
+
['timeoutMs', 30_000],
|
|
76
|
+
]) {
|
|
77
|
+
const value = capture[key];
|
|
78
|
+
if (value !== undefined && (!Number.isSafeInteger(value) || value < 1 || value > max))
|
|
79
|
+
throw new RangeError(`sink.capture.${key} must be a positive whole number at most ${max}`);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
const fixedCapture = capture &&
|
|
83
|
+
Object.freeze({
|
|
84
|
+
acknowledge: capture.acknowledge.bind(capture),
|
|
85
|
+
...(capture.maxBytes !== undefined && { maxBytes: capture.maxBytes }),
|
|
86
|
+
...(capture.timeoutMs !== undefined && { timeoutMs: capture.timeoutMs }),
|
|
87
|
+
});
|
|
88
|
+
return { adapter, onFailure, flush, ...(fixedCapture && { capture: fixedCapture }) };
|
|
71
89
|
}
|
|
72
90
|
throw new TypeError('FlowChartExecutor: sink must be a RecordSink (opened, commit, note, closed) or { adapter, onFailure?, flush? }');
|
|
73
91
|
}
|
|
@@ -88,6 +106,8 @@ class RunRecord {
|
|
|
88
106
|
/** Aborted at the first loss under `'fail'` — composed into the leg's signal; fresh per leg ({@link beginLeg}). */
|
|
89
107
|
stopper;
|
|
90
108
|
failure;
|
|
109
|
+
capturePending = 0;
|
|
110
|
+
captureStatus;
|
|
91
111
|
/** Opaque error identities only: no raw entry or adapter error is enumerable on the transport error. */
|
|
92
112
|
invocationFailures = new WeakMap();
|
|
93
113
|
constructor(resolved) {
|
|
@@ -148,7 +168,15 @@ class RunRecord {
|
|
|
148
168
|
// observes native promises through Promise.prototype.then and guards hostile thenables too.
|
|
149
169
|
if (returned === null || (typeof returned !== 'object' && typeof returned !== 'function'))
|
|
150
170
|
return returned;
|
|
151
|
-
|
|
171
|
+
if (!this.resolved.capture)
|
|
172
|
+
return settleOnce(returned, () => undefined, failed);
|
|
173
|
+
this.capturePending++;
|
|
174
|
+
return settleOnce(returned, () => {
|
|
175
|
+
this.capturePending--;
|
|
176
|
+
}, (cause) => {
|
|
177
|
+
this.capturePending--;
|
|
178
|
+
return failed(cause);
|
|
179
|
+
});
|
|
152
180
|
}
|
|
153
181
|
catch (cause) {
|
|
154
182
|
return failed(cause);
|
|
@@ -179,6 +207,7 @@ class RunRecord {
|
|
|
179
207
|
this.stopper = new AbortController();
|
|
180
208
|
this.failure = undefined;
|
|
181
209
|
this.warned = false;
|
|
210
|
+
this.captureStatus = undefined;
|
|
182
211
|
}
|
|
183
212
|
/** The leg's redaction rule — a resume builds a new one; the next `opened` / `closed` is served under it. */
|
|
184
213
|
useRule(rule) {
|
|
@@ -200,8 +229,22 @@ class RunRecord {
|
|
|
200
229
|
entries: this.entries,
|
|
201
230
|
failed: this.failed,
|
|
202
231
|
...(this.lastError === undefined ? {} : { lastError: this.lastError }),
|
|
232
|
+
...(this.captureStatus && { capture: this.captureStatus }),
|
|
203
233
|
};
|
|
204
234
|
}
|
|
235
|
+
get captureOptions() {
|
|
236
|
+
return this.resolved.capture;
|
|
237
|
+
}
|
|
238
|
+
get pendingCaptureDeliveries() {
|
|
239
|
+
return this.capturePending;
|
|
240
|
+
}
|
|
241
|
+
captureResult(result) {
|
|
242
|
+
this.captureStatus = Object.freeze(result);
|
|
243
|
+
}
|
|
244
|
+
/** Same served seed as opened; a history digest never sees a seeded policy secret. */
|
|
245
|
+
captureInitialState(state) {
|
|
246
|
+
return this.rule ? this.rule.retainState(state, write_1.LOG_PLACEHOLDER) : state;
|
|
247
|
+
}
|
|
205
248
|
/**
|
|
206
249
|
* Await the adapter's `flush()`, at most `timeoutMs` when given. A flush that throws or rejects is a loss
|
|
207
250
|
* (counted, and fatal under `'fail'`); one still running at the deadline is `pending` and keeps running — and,
|
|
@@ -299,4 +342,4 @@ function settleOnce(value, onValue, onError) {
|
|
|
299
342
|
const adopted = value instanceof Promise ? value : new Promise((resolve) => resolve(value));
|
|
300
343
|
return Promise.prototype.then.call(adopted, onValue, onError);
|
|
301
344
|
}
|
|
302
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb3JkU2luay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvcnVubmVyL3JlY29yZFNpbmsudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBc0JHOzs7QUFJSCwyQ0FBa0Q7QUFFbEQsOENBQTBDO0FBQzFDLHlEQUFzRTtBQUV0RSx5REFBMkQ7QUF1QzNEOzs7R0FHRztBQUNILE1BQWEsZUFBZ0IsU0FBUSxLQUFLO0lBRUY7SUFEcEIsSUFBSSxHQUFHLGlCQUFpQixDQUFDO0lBQzNDLFlBQVksT0FBZSxFQUFXLEtBQWM7UUFDbEQsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRHFCLFVBQUssR0FBTCxLQUFLLENBQVM7SUFFcEQsQ0FBQztDQUNGO0FBTEQsMENBS0M7QUFTRCxNQUFNLE9BQU8sR0FBRyxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFFBQVEsQ0FBVSxDQUFDO0FBZWhFLFNBQVMsU0FBUyxDQUFDLEtBQWM7SUFDL0IsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVE7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUM5RCxPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQVEsS0FBaUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxVQUFVLENBQUMsQ0FBQztBQUMzRixDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBZ0IsaUJBQWlCLENBQUMsTUFBZTtJQUMvQyxJQUFJLE1BQU0sS0FBSyxTQUFTO1FBQUUsT0FBTyxTQUFTLENBQUM7SUFDM0MsSUFBSSxTQUFTLENBQUMsTUFBTSxDQUFDO1FBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUM7SUFDdEYsSUFBSSxNQUFNLEtBQUssSUFBSSxJ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QUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNuQyxDQUFDO1FBQ0QsSUFBSSxLQUFLLEtBQUssU0FBUztZQUFFLFdBQVcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDNUYsQ0FBQztDQUNGO0FBaE5ELDhCQWdOQztBQUVELGdIQUFnSDtBQUNoSCxTQUFTLFdBQVcsQ0FBQyxPQUFtQixFQUFFLE9BQWlFO0lBQ3pHLElBQUksQ0FBQztRQUNILE1BQU0sUUFBUSxHQUFZLE9BQU8sQ0FBQyxTQUFTLENBQUM7UUFDNUMsSUFBSSxPQUFPLFFBQVEsS0FBSyxVQUFVO1lBQUUsT0FBTztRQUMzQyxVQUFVLENBQ1IsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLEVBQy9CLEdBQUcsRUFBRSxDQUFDLFNBQVMsRUFDZixHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQ2hCLENBQUM7SUFDSixDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1Asb0ZBQW9GO0lBQ3RGLENBQUM7QUFDSCxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQVMsVUFBVSxDQUFJLEtBQWMsRUFBRSxPQUFnQixFQUFFLE9BQThCO0lBQ3JGLE1BQU0sT0FBTyxHQUFxQixLQUFLLFlBQVksT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUM5RyxPQUFPLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBZSxDQUFDO0FBQzlFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIHJ1bm5lci9yZWNvcmRTaW5rLnRzIOKAlCB0aGUgcnVuJ3Mgc2lkZSBvZiB0aGUgY3Jhc2gtc2FmZSByZWNvcmQgKGRlc2lnbiDCpzMuNSwgcGFja2V0IFA2KS5cbiAqXG4gKiBmb290dHJhY2Ugb3ducyB0aGUgcG9ydCAoYFJlY29yZFNpbmtgLCBgZm9vdHRyYWNlL3dyaXRlYCk6IGEgbG9nIGJ1aWx0IHdpdGggYSBzaW5rIGhhbmRzIGl0IGV2ZXJ5IGVudHJ5IEFTIElUXG4gKiBMQU5EUyDigJQgYG9wZW5lZGAsIGBjb21taXRgLCBgbm90ZWAsIGBjbG9zZWRgIOKAlCBhbmQgY291bnRzIHdoYXQgdGhlIHNpbmsgZGlkIG5vdCB0YWtlLiBUaGlzIGZpbGUgaXMgd2hhdCB0aGVcbiAqIEVYRUNVVE9SIGFkZHMgYXJvdW5kIGFuIGFwcCdzIGFkYXB0ZXIsIG9uZSB7QGxpbmsgUnVuUmVjb3JkfSBwZXIgcnVuOlxuICpcbiAqICAgLSBUSEUgT05FIExBVywgYmVmb3JlIGFueSBieXRlIGxlYXZlczogdGhlIGBvcGVuZWRgIGJhc2UgaXMgdGhlIHJ1bidzIHNlcnZlZCBmb3JtIG9mIGl0ICh0aGUgcmVkYWN0aW9uIHJ1bGUnc1xuICogICAgIGByZXRhaW5TdGF0ZWAsIHRoZSBtaXJyb3IncyBzZWVkIOKAlCBzbyBhIHBvbGljeSBrZXkgc2VlZGVkIGJ5IGBpbml0aWFsQ29udGV4dGAgb3IgYSBjaGVja3BvaW50IG5ldmVyIHJlYWNoZXNcbiAqICAgICB0aGUgc2luayksIGFuZCB0aGUgYG9wZW5lZGAgLyBgY2xvc2VkYCBtZXRhIGFyZSBib3VuZGFyeSByZWNvcmRzIChgcmV0YWluQm91bmRhcnlgKS4gQSBjb21taXQgaXMgdGhlIGxvZydzIG93blxuICogICAgIGJ1bmRsZSwgYWxyZWFkeSBzY3J1YmJlZCBhdCBjb21taXQ7IGFuIGF0dGVtcHQgbm90ZSBjYXJyaWVzIHRoZSBzZXJ2ZWQgYEF0dGVtcHRSZWNvcmRgIChubyBgcmF3YCkuXG4gKiAgIC0gQUNDT1VOVElORzogZXZlcnkgZW50cnkgaGFuZGVkIHRvIHRoZSBhZGFwdGVyIGlzIGNvdW50ZWQsIGV2ZXJ5IGxvc3MgdG9vIChgZ2V0U25hcHNob3QoKS5zaW5rYCksIHdpdGggYVxuICogICAgIGRldi1tb2RlIHdhcm5pbmcgb24gdGhlIGZpcnN0IGxvc3Mgb2YgYSBydW4uIFRoZSBhZGFwdGVyJ3Mgb3duIGBvbkZhaWx1cmVgIGhlYXJzIGEgZGlzcGF0Y2hlZCBlbnRyeSdzIGxvc3NcbiAqICAgICB3aXRoIHRoYXQgc2FtZSBzZXJ2ZWQgZW50cnkgYW5kIGEgc2VydmVkIGVycm9yLCBpc29sYXRlZC4gQSByZWZ1c2FsIGJlZm9yZSBkaXNwYXRjaCBpcyBjb3VudGVkIHdpdGhvdXRcbiAqICAgICBmb3J3YXJkaW5nIEZvb3R0cmFjZSdzIHVuc2VydmVkIGVudHJ5LlxuICogICAtIFRIRSBGQUlMVVJFIE1PREUgKG93bmVyIHJ1bGluZyBRMyk6IGAncmVwb3J0J2AgKGRlZmF1bHQpIOKAlCB0aGUgcnVuIGdvZXMgb247IGAnZmFpbCdgIOKAlCB0aGUgZmlyc3QgbG9zdCBlbnRyeVxuICogICAgIGFib3J0cyB0aGUgcnVuJ3Mgc2lnbmFsIHdpdGggYSB7QGxpbmsgUmVjb3JkU2lua0Vycm9yfSwgYW5kIGEgcnVuIHRoYXQgZmluaXNoZWQgd2l0aCBhIGxvc3MgcmVqZWN0cyB3aXRoIGl0LlxuICogICAtIEZMVVNIOiBgJ2F1dG8nYCAoZGVmYXVsdCkg4oCUIGBydW4oKWAgLyBgcmVzdW1lKClgIGF3YWl0IHRoZSBhZGFwdGVyJ3MgYGZsdXNoKClgIGFmdGVyIHRoZSBjbG9zaW5nIGVudHJ5O1xuICogICAgIGAnbWFudWFsJ2Ag4oCUIHRoZSBhcHAgY2FsbHMgYGV4ZWN1dG9yLmZsdXNoUmVjb3JkKClgLlxuICpcbiAqIEV2ZXJ5IGFkYXB0ZXIgbWV0aG9kIGlzIGNhbGxlZCBzeW5jaHJvbm91c2x5IGZyb20gdGhlIGxvZzsgd2hhdGV2ZXIgdGhlIGFkYXB0ZXIgdGhyb3dzIG9yIHJlamVjdHMgd2l0aCBpcyB0aGVcbiAqIGxvZydzIHRvIGNvdW50IChgRXZlbnRMb2cgwrcgc2lua0ZhaWx1cmVzYCksIG5ldmVyIHRoZSBydW4ncyDigJQgc28gbm90aGluZyBoZXJlIHRocm93cyB0byB0aGUgZW5naW5lLlxuICovXG5cbmltcG9ydCB0eXBlIHsgTWV0YSB9IGZyb20gJ2Zvb3R0cmFjZSc7XG5pbXBvcnQgdHlwZSB7IFJlY29yZEVudHJ5LCBSZWNvcmRTaW5rIH0gZnJvbSAnZm9vdHRyYWNlL3dyaXRlJztcbmltcG9ydCB7IExPR19QTEFDRUhPTERFUiB9IGZyb20gJ2Zvb3R0cmFjZS93cml0ZSc7XG5cbmltcG9ydCB7IGlzRGV2TW9kZSB9IGZyb20gJy4uL2Rldk1vZGUuanMnO1xuaW1wb3J0IHsgZXh0cmFjdEVycm9ySW5mbywgdGhyb3duVGV4dCB9IGZyb20gJy4uL2Vycm9ycy9lcnJvckluZm8uanMnO1xuaW1wb3J0IHR5cGUgeyBSZWRhY3Rpb25SdWxlIH0gZnJvbSAnLi4vbWVtb3J5L3JlZGFjdGlvbi5qcyc7XG5pbXBvcnQgeyBTQ09QRV9QTEFDRUhPTERFUiB9IGZyb20gJy4uL21lbW9yeS9yZWRhY3Rpb24uanMnO1xuaW1wb3J0IHR5cGUgeyBSZWNvcmRTaW5rU3RhdHMgfSBmcm9tICcuL0V4ZWN1dGlvblJ1bnRpbWUuanMnO1xuXG4vKiogV2hhdCBhIGxvc3QgZW50cnkgZG9lcyB0byB0aGUgcnVuOiBgJ3JlcG9ydCdgIGNvdW50cyBpdCBhbmQgZ29lcyBvbjsgYCdmYWlsJ2AgZmFpbHMgdGhlIHJ1bi4gKi9cbmV4cG9ydCB0eXBlIFJlY29yZFNpbmtGYWlsdXJlTW9kZSA9ICdyZXBvcnQnIHwgJ2ZhaWwnO1xuXG4vKiogV2hlbiB0aGUgYWRhcHRlcidzIGBmbHVzaCgpYCBydW5zOiBhZnRlciBlYWNoIHJ1bidzIGNsb3NpbmcgZW50cnkgKGAnYXV0bydgKSwgb3Igd2hlbiB0aGUgYXBwIGFza3MuICovXG5leHBvcnQgdHlwZSBSZWNvcmRTaW5rRmx1c2hNb2RlID0gJ2F1dG8nIHwgJ21hbnVhbCc7XG5cbi8qKlxuICogVGhlIGV4ZWN1dG9yJ3MgYHNpbmtgIG9wdGlvbiBpbiBpdHMgbG9uZyBmb3JtLiBUaGUgc2hvcnQgZm9ybSBpcyB0aGUgYWRhcHRlciBpdHNlbGYuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIG5ldyBGbG93Q2hhcnRFeGVjdXRvcihjaGFydCwgeyBzaW5rOiB7IGFkYXB0ZXI6IGZpbGVTaW5rKCcvdmFyL2Zvb3RwcmludC9ydW4uanNvbmwnKSwgb25GYWlsdXJlOiAnZmFpbCcgfSB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlY29yZFNpbmtPcHRpb25zIHtcbiAgLyoqIFdoZXJlIHRoZSBlbnRyaWVzIGdvIOKAlCBgZmlsZVNpbmsocGF0aClgIChgZm9vdHByaW50anMvc2lua3NgKSwgYG1lbW9yeVNpbmsoKWAgKGBmb290dHJhY2Uvd3JpdGVgKSwgb3IgeW91cnMuICovXG4gIHJlYWRvbmx5IGFkYXB0ZXI6IFJlY29yZFNpbms7XG4gIC8qKiBgJ3JlcG9ydCdgIChkZWZhdWx0KTogYSBsb3N0IGVudHJ5IGlzIGNvdW50ZWQgYW5kIHRoZSBydW4gZ29lcyBvbi4gYCdmYWlsJ2A6IHRoZSBmaXJzdCBvbmUgZmFpbHMgdGhlIHJ1bi4gKi9cbiAgcmVhZG9ubHkgb25GYWlsdXJlPzogUmVjb3JkU2lua0ZhaWx1cmVNb2RlO1xuICAvKiogYCdhdXRvJ2AgKGRlZmF1bHQpOiBgcnVuKClgIGF3YWl0cyB0aGUgYWRhcHRlcidzIGBmbHVzaCgpYCBhZnRlciB0aGUgY2xvc2luZyBlbnRyeS4gYCdtYW51YWwnYDogYGZsdXNoUmVjb3JkKClgLiAqL1xuICByZWFkb25seSBmbHVzaD86IFJlY29yZFNpbmtGbHVzaE1vZGU7XG59XG5cbi8qKiBUaGUgZXhlY3V0b3IncyBgc2lua2Agb3B0aW9uOiBhbiBhZGFwdGVyLCBvciB7QGxpbmsgUmVjb3JkU2lua09wdGlvbnN9LiAqL1xuZXhwb3J0IHR5cGUgUmVjb3JkU2lua09wdGlvbiA9IFJlY29yZFNpbmsgfCBSZWNvcmRTaW5rT3B0aW9ucztcblxuLyoqIFdoYXQgYGV4ZWN1dG9yLmZsdXNoUmVjb3JkKClgIHJlc29sdmVzIHdpdGgg4oCUIHRoZSBgZHJhaW5PYnNlcnZlcnNgIHNoYXBlLiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWNvcmRGbHVzaFJlc3VsdCB7XG4gIC8qKiBUaGUgYWRhcHRlcidzIGZsdXNoIGZpbmlzaGVkIChvciB0aGVyZSB3YXMgbm90aGluZyB0byBmbHVzaCkuICovXG4gIHJlYWRvbmx5IGRvbmU6IGJvb2xlYW47XG4gIC8qKiBUaGUgYWRhcHRlcidzIGZsdXNoIHRocmV3IG9yIHJlamVjdGVkIOKAlCBjb3VudGVkIG9uIGBnZXRTbmFwc2hvdCgpLnNpbmtgLiAqL1xuICByZWFkb25seSBmYWlsZWQ6IGJvb2xlYW47XG4gIC8qKiBUaGUgZmx1c2ggaGFkIG5vdCBzZXR0bGVkIHdoZW4gYHRpbWVvdXRNc2AgcmFuIG91dC4gKi9cbiAgcmVhZG9ubHkgcGVuZGluZzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBBIHJ1biB3aXRoIGBzaW5rOiB7IG9uRmFpbHVyZTogJ2ZhaWwnIH1gIGxvc3QgYW4gZW50cnk6IHRoZSByZWNvcmQgdGhlIGFwcCBhc2tlZCB0byBiZSBrZXB0IGlzIG5vdCB3aG9sZS5cbiAqIGBjYXVzZWAgaXMgdGhlIGFkYXB0ZXIncyBvd24gZXJyb3IuXG4gKi9cbmV4cG9ydCBjbGFzcyBSZWNvcmRTaW5rRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIG92ZXJyaWRlIHJlYWRvbmx5IG5hbWUgPSAnUmVjb3JkU2lua0Vycm9yJztcbiAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nLCByZWFkb25seSBjYXVzZTogdW5rbm93bikge1xuICAgIHN1cGVyKG1lc3NhZ2UpO1xuICB9XG59XG5cbi8qKiBUaGUgb3B0aW9uIHJlc29sdmVkIG9uY2UsIGF0IGNvbnN0cnVjdGlvbi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb2x2ZWRSZWNvcmRTaW5rIHtcbiAgcmVhZG9ubHkgYWRhcHRlcjogUmVjb3JkU2luaztcbiAgcmVhZG9ubHkgb25GYWlsdXJlOiBSZWNvcmRTaW5rRmFpbHVyZU1vZGU7XG4gIHJlYWRvbmx5IGZsdXNoOiBSZWNvcmRTaW5rRmx1c2hNb2RlO1xufVxuXG5jb25zdCBNRVRIT0RTID0gWydvcGVuZWQnLCAnY29tbWl0JywgJ25vdGUnLCAnY2xvc2VkJ10gYXMgY29uc3Q7XG5cbmludGVyZmFjZSBTaW5rRXJyb3JWaWV3IHtcbiAgcmVhZG9ubHkgdGV4dDogc3RyaW5nO1xuICByZWFkb25seSBlcnJvcjogdW5rbm93bjtcbiAgcmVhZG9ubHkgbWFza2VkOiBib29sZWFuO1xuICByZWFkb25seSBydWxlPzogUmVkYWN0aW9uUnVsZTtcbn1cblxuaW50ZXJmYWNlIEludm9jYXRpb25GYWlsdXJlIHtcbiAgcmVhZG9ubHkgZW50cnk6IFJlY29yZEVudHJ5O1xuICByZWFkb25seSBjYXVzZTogdW5rbm93bjtcbiAgcmVhZG9ubHkgdmlldzogU2lua0Vycm9yVmlldztcbn1cblxuZnVuY3Rpb24gaXNBZGFwdGVyKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgUmVjb3JkU2luayB7XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiBNRVRIT0RTLmV2ZXJ5KChtKSA9PiB0eXBlb2YgKHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVttXSA9PT0gJ2Z1bmN0aW9uJyk7XG59XG5cbi8qKlxuICogUmVzb2x2ZSB0aGUgZXhlY3V0b3IncyBgc2lua2Agb3B0aW9uLCBvciByZWZ1c2UgaXQgd2l0aCBhIGBUeXBlRXJyb3JgIG5hbWluZyB3aGF0IGlzIHdyb25nIOKAlCBhIHdpcmluZyBtaXN0YWtlXG4gKiB0aGUgYXBwIG1ha2VzIG9uY2UsIHNvIGl0IGZhaWxzIGF0IGNvbnN0cnVjdGlvbiwgbmV2ZXIgbWlkLXJ1bi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVSZWNvcmRTaW5rKG9wdGlvbjogdW5rbm93bik6IFJlc29sdmVkUmVjb3JkU2luayB8IHVuZGVmaW5lZCB7XG4gIGlmIChvcHRpb24gPT09IHVuZGVmaW5lZCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgaWYgKGlzQWRhcHRlcihvcHRpb24pKSByZXR1cm4geyBhZGFwdGVyOiBvcHRpb24sIG9uRmFpbHVyZTogJ3JlcG9ydCcsIGZsdXNoOiAnYXV0bycgfTtcbiAgaWYgKG9wdGlvbiAhPT0gbnVsbCAmJiB0eXBlb2Ygb3B0aW9uID09PSAnb2JqZWN0JyAmJiBPYmplY3QuaGFzT3duKG9wdGlvbiwgJ2FkYXB0ZXInKSkge1xuICAgIGNvbnN0IHsgYWRhcHRlciwgb25GYWlsdXJlID0gJ3JlcG9ydCcsIGZsdXNoID0gJ2F1dG8nIH0gPSBvcHRpb24gYXMgUGFydGlhbDxSZWNvcmRTaW5rT3B0aW9ucz47XG4gICAgaWYgKCFpc0FkYXB0ZXIoYWRhcHRlcikpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0Zsb3dDaGFydEV4ZWN1dG9yOiBzaW5rLmFkYXB0ZXIgbXVzdCBiZSBhIFJlY29yZFNpbmsgKG9wZW5lZCwgY29tbWl0LCBub3RlLCBjbG9zZWQpJyk7XG4gICAgfVxuICAgIGlmIChvbkZhaWx1cmUgIT09ICdyZXBvcnQnICYmIG9uRmFpbHVyZSAhPT0gJ2ZhaWwnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmxvd0NoYXJ0RXhlY3V0b3I6IHNpbmsub25GYWlsdXJlIG11c3QgYmUgJ3JlcG9ydCcgb3IgJ2ZhaWwnXCIpO1xuICAgIH1cbiAgICBpZiAoZmx1c2ggIT09ICdhdXRvJyAmJiBmbHVzaCAhPT0gJ21hbnVhbCcpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGbG93Q2hhcnRFeGVjdXRvcjogc2luay5mbHVzaCBtdXN0IGJlICdhdXRvJyBvciAnbWFudWFsJ1wiKTtcbiAgICB9XG4gICAgcmV0dXJuIHsgYWRhcHRlciwgb25GYWlsdXJlLCBmbHVzaCB9O1xuICB9XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgJ0Zsb3dDaGFydEV4ZWN1dG9yOiBzaW5rIG11c3QgYmUgYSBSZWNvcmRTaW5rIChvcGVuZWQsIGNvbW1pdCwgbm90ZSwgY2xvc2VkKSBvciB7IGFkYXB0ZXIsIG9uRmFpbHVyZT8sIGZsdXNoPyB9JyxcbiAgKTtcbn1cblxuLyoqXG4gKiBPbmUgcnVuJ3MgcmVjb3JkIHNpbms6IHRoZSBzaW5rIGV2ZXJ5IGxvZyBvZiB0aGUgcnVuIHdyaXRlcyB0byAocm9vdCBhbmQgbW91bnRzKSwgaXRzIGFjY291bnRpbmcgYW5kIGl0c1xuICogZmFpbHVyZSBtb2RlLiBBIHNhbWUtZXhlY3V0b3IgcmVzdW1lIGtlZXBzIGl0ICh0aGUgcm9vdCBsb2cgZ29lcyBvbik7IGEgZnJlc2ggcnVuIG1ha2VzIGEgbmV3IG9uZS5cbiAqL1xuZXhwb3J0IGNsYXNzIFJ1blJlY29yZCB7XG4gIC8qKiBIYW5kIHRoaXMgdG8gZXZlcnkgYEV2ZW50TG9nYCBvZiB0aGUgcnVuLiAqL1xuICByZWFkb25seSBzaW5rOiBSZWNvcmRTaW5rO1xuICBwcml2YXRlIGVudHJpZXMgPSAwO1xuICBwcml2YXRlIGZhaWxlZCA9IDA7XG4gIHByaXZhdGUgbGFzdEVycm9yPzogc3RyaW5nO1xuICBwcml2YXRlIHdhcm5lZCA9IGZhbHNlO1xuICBwcml2YXRlIHJ1bGU/OiBSZWRhY3Rpb25SdWxlO1xuICAvKiogQWJvcnRlZCBhdCB0aGUgZmlyc3QgbG9zcyB1bmRlciBgJ2ZhaWwnYCDigJQgY29tcG9zZWQgaW50byB0aGUgbGVnJ3Mgc2lnbmFsOyBmcmVzaCBwZXIgbGVnICh7QGxpbmsgYmVnaW5MZWd9KS4gKi9cbiAgcHJpdmF0ZSBzdG9wcGVyPzogQWJvcnRDb250cm9sbGVyO1xuICBwcml2YXRlIGZhaWx1cmU/OiBSZWNvcmRTaW5rRXJyb3I7XG4gIC8qKiBPcGFxdWUgZXJyb3IgaWRlbnRpdGllcyBvbmx5OiBubyByYXcgZW50cnkgb3IgYWRhcHRlciBlcnJvciBpcyBlbnVtZXJhYmxlIG9uIHRoZSB0cmFuc3BvcnQgZXJyb3IuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgaW52b2NhdGlvbkZhaWx1cmVzID0gbmV3IFdlYWtNYXA8b2JqZWN0LCBJbnZvY2F0aW9uRmFpbHVyZT4oKTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IHJlc29sdmVkOiBSZXNvbHZlZFJlY29yZFNpbmspIHtcbiAgICBpZiAocmVzb2x2ZWQub25GYWlsdXJlID09PSAnZmFpbCcpIHRoaXMuc3RvcHBlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgICBjb25zdCBhZGFwdGVyID0gcmVzb2x2ZWQuYWRhcHRlcjtcbiAgICBjb25zdCBoYW5kZWQgPSAoKTogdm9pZCA9PiB7XG4gICAgICB0aGlzLmVudHJpZXMgKz0gMTtcbiAgICB9O1xuICAgIHRoaXMuc2luayA9IHtcbiAgICAgIG9wZW5lZDogKGVudHJ5KSA9PiB7XG4gICAgICAgIGhhbmRlZCgpO1xuICAgICAgICBjb25zdCBydWxlID0gdGhpcy5ydWxlO1xuICAgICAgICBjb25zdCBzZXJ2ZWQgPSB7XG4gICAgICAgICAgLi4uZW50cnksXG4gICAgICAgICAgaW5pdGlhbFN0YXRlOiBydWxlID8gcnVsZS5yZXRhaW5TdGF0ZShlbnRyeS5pbml0aWFsU3RhdGUsIExPR19QTEFDRUhPTERFUikgOiBlbnRyeS5pbml0aWFsU3RhdGUsXG4gICAgICAgICAgLi4uKGVudHJ5Lm1ldGEgPT09IHVuZGVmaW5lZCA/IHt9IDogeyBtZXRhOiB0aGlzLnNlcnZlKGVudHJ5Lm1ldGEpIH0pLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gdGhpcy5pbnZva2UoeyAuLi5zZXJ2ZWQsIGtpbmQ6ICdvcGVuZWQnIH0sICgpID0+IGFkYXB0ZXIub3BlbmVkKHNlcnZlZCksIHJ1bGUpO1xuICAgICAgfSxcbiAgICAgIGNvbW1pdDogKGVudHJ5KSA9PiB7XG4gICAgICAgIGhhbmRlZCgpO1xuICAgICAgICByZXR1cm4gdGhpcy5pbnZva2UoeyAuLi5lbnRyeSwga2luZDogJ2NvbW1pdCcgfSwgKCkgPT4gYWRhcHRlci5jb21taXQoZW50cnkpLCB0aGlzLnJ1bGUpO1xuICAgICAgfSxcbiAgICAgIG5vdGU6IChlbnRyeSkgPT4ge1xuICAgICAgICBoYW5kZWQoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW52b2tlKFxuICAgICAgICAgIHsgYWRkcmVzczogZW50cnkuYWRkcmVzcywgYXQ6IGVudHJ5LmF0LCBraW5kOiAnbm90ZScsIG5vdGU6IGVudHJ5LmtpbmQsIGRhdGE6IGVudHJ5LmRhdGEgfSxcbiAgICAgICAgICAoKSA9PiBhZGFwdGVyLm5vdGUoZW50cnkpLFxuICAgICAgICAgIHRoaXMucnVsZSxcbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgICBjbG9zZWQ6IChlbnRyeSkgPT4ge1xuICAgICAgICBoYW5kZWQoKTtcbiAgICAgICAgY29uc3Qgc2VydmVkID0geyAuLi5lbnRyeSwgLi4uKGVudHJ5Lm1ldGEgPT09IHVuZGVmaW5lZCA/IHt9IDogeyBtZXRhOiB0aGlzLnNlcnZlKGVudHJ5Lm1ldGEpIH0pIH07XG4gICAgICAgIHJldHVybiB0aGlzLmludm9rZSh7IC4uLnNlcnZlZCwga2luZDogJ2Nsb3NlZCcgfSwgKCkgPT4gYWRhcHRlci5jbG9zZWQoc2VydmVkKSwgdGhpcy5ydWxlKTtcbiAgICAgIH0sXG4gICAgICBvbkZhaWx1cmU6IChmYWlsdXJlKSA9PiB7XG4gICAgICAgIGNvbnN0IGludm9jYXRpb24gPVxuICAgICAgICAgIGZhaWx1cmUuZXJyb3IgIT09IG51bGwgJiYgKHR5cGVvZiBmYWlsdXJlLmVycm9yID09PSAnb2JqZWN0JyB8fCB0eXBlb2YgZmFpbHVyZS5lcnJvciA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgICAgID8gdGhpcy5pbnZvY2F0aW9uRmFpbHVyZXMuZ2V0KGZhaWx1cmUuZXJyb3IpXG4gICAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgICAgLy8gQmVmb3JlIGFkbWlzc2lvbiAoZS5nLiBhIG1ldGEtY29weSByZWZ1c2FsKSwgbm8gZGlzcGF0Y2hlZCBzZXJ2ZWQgZW50cnkgZXhpc3RzLiBDb3VudCB0aGUgbG9zcyBhbmRcbiAgICAgICAgLy8gYXBwbHkgdGhlIGZhaWx1cmUgbW9kZSwgYnV0IG5ldmVyIGhhbmQgdGhlIGFkYXB0ZXIgRm9vdHRyYWNlJ3Mgb3JpZ2luYWwsIHVuc2VydmVkIGVudHJ5LlxuICAgICAgICBpZiAoaW52b2NhdGlvbiA9PT0gdW5kZWZpbmVkKSB0aGlzLmxvc3QoZmFpbHVyZS5lcnJvciwgdW5kZWZpbmVkLCB0aGlzLmVycm9yVmlldyhmYWlsdXJlLmVycm9yLCB0aGlzLnJ1bGUpKTtcbiAgICAgICAgZWxzZSB0aGlzLmxvc3QoaW52b2NhdGlvbi5jYXVzZSwgaW52b2NhdGlvbi5lbnRyeSwgaW52b2NhdGlvbi52aWV3KTtcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIC8qKiBDYXB0dXJlIHRoZSBzZXJ2ZWQgZW50cnkgbm93OyBhbiBhc3luY2hyb25vdXMgZmFpbHVyZSBrZWVwcyB0aGlzIGxlZydzIHJ1bGUsIG5vdCBhIGxhdGVyIHJlc3VtZSdzIHJ1bGUuICovXG4gIHByaXZhdGUgaW52b2tlKGVudHJ5OiBSZWNvcmRFbnRyeSwgY2FsbDogKCkgPT4gdW5rbm93biwgcnVsZTogUmVkYWN0aW9uUnVsZSB8IHVuZGVmaW5lZCk6IHVua25vd24ge1xuICAgIGNvbnN0IGZhaWxlZCA9IChjYXVzZTogdW5rbm93bik6IG5ldmVyID0+IHtcbiAgICAgIGNvbnN0IGVudmVsb3BlID0gbmV3IEVycm9yKCdyZWNvcmQgc2luazogYWRhcHRlciBpbnZvY2F0aW9uIGZhaWxlZCcpO1xuICAgICAgdGhpcy5pbnZvY2F0aW9uRmFpbHVyZXMuc2V0KGVudmVsb3BlLCB7IGVudHJ5LCBjYXVzZSwgdmlldzogdGhpcy5lcnJvclZpZXcoY2F1c2UsIHJ1bGUpIH0pO1xuICAgICAgdGhyb3cgZW52ZWxvcGU7XG4gICAgfTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmV0dXJuZWQgPSBjYWxsKCk7XG4gICAgICAvLyBWb2lkIGFkYXB0ZXJzIGtlZXAgdGhlaXIgc3luY2hyb25vdXMgcGF0aDsgb25seSBhbiBvYmplY3QvZnVuY3Rpb24gY2FuIGJlIGEgdGhlbmFibGUuIHNldHRsZU9uY2VcbiAgICAgIC8vIG9ic2VydmVzIG5hdGl2ZSBwcm9taXNlcyB0aHJvdWdoIFByb21pc2UucHJvdG90eXBlLnRoZW4gYW5kIGd1YXJkcyBob3N0aWxlIHRoZW5hYmxlcyB0b28uXG4gICAgICBpZiAocmV0dXJuZWQgPT09IG51bGwgfHwgKHR5cGVvZiByZXR1cm5lZCAhPT0gJ29iamVjdCcgJiYgdHlwZW9mIHJldHVybmVkICE9PSAnZnVuY3Rpb24nKSkgcmV0dXJuIHJldHVybmVkO1xuICAgICAgcmV0dXJuIHNldHRsZU9uY2UocmV0dXJuZWQsICgpID0+IHVuZGVmaW5lZCwgZmFpbGVkKTtcbiAgICB9IGNhdGNoIChjYXVzZSkge1xuICAgICAgcmV0dXJuIGZhaWxlZChjYXVzZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEEgc2luayBlcnJvciBpcyB0aGUgZGlhZ25vc3RpYyBlcnJvcnMucmVjb3JkU2lua0Vycm9yOyByYXcgY2F1c2VzIGJlbG9uZyBvbmx5IHRvIHRoZSBjYWxsZXIncyBleGNlcHRpb24uICovXG4gIHByaXZhdGUgZXJyb3JWaWV3KGVycm9yOiB1bmtub3duLCBydWxlOiBSZWRhY3Rpb25SdWxlIHwgdW5kZWZpbmVkKTogU2lua0Vycm9yVmlldyB7XG4gICAgY29uc3QgdGV4dCA9IHRocm93blRleHQoZXJyb3IpO1xuICAgIGNvbnN0IHJldGFpbmVkID0gcnVsZVxuICAgICAgPyBydWxlLnJldGFpblN0YWdlRXJyb3IoZXJyb3IsIHRleHQsIHJ1bGUucmV0YWluRGlhZ25vc3RpYyhbJ2Vycm9ycycsICdyZWNvcmRTaW5rRXJyb3InXSwgdGV4dCkpXG4gICAgICA6IHsgbWVzc2FnZTogdGV4dCwgc3RydWN0dXJlZEVycm9yOiBleHRyYWN0RXJyb3JJbmZvKGVycm9yKSB9O1xuICAgIGNvbnN0IHNlcnZlZCA9IHsgLi4ucmV0YWluZWQuc3RydWN0dXJlZEVycm9yIH07XG4gICAgUmVmbGVjdC5kZWxldGVQcm9wZXJ0eShzZXJ2ZWQsICdyYXcnKTtcbiAgICByZXR1cm4ge1xuICAgICAgdGV4dDogcmV0YWluZWQubWVzc2FnZSxcbiAgICAgIGVycm9yOiBzZXJ2ZWQsXG4gICAgICBtYXNrZWQ6IHJldGFpbmVkLm1lc3NhZ2UgIT09IHRleHQgfHwgcmV0YWluZWQuc3RydWN0dXJlZEVycm9yLnJhdyAhPT0gZXJyb3IsXG4gICAgICBydWxlLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQSBzYW1lLWV4ZWN1dG9yIHJlc3VtZSBzdGFydHMgYSBuZXcgbGVnIG9uIHRoZSBzYW1lIHJlY29yZDogdGhlIGNvdW50cyBnbyBvbiAob25lIGxvZywgb25lIHJlY29yZCksIGJ1dCB0aGVcbiAgICogZmFpbHVyZSBtb2RlIGlzIHRoZSBMRUcncyDigJQgYSBsb3NzIGluIGFuIGVhcmxpZXIgbGVnICh3aGljaCBhbHJlYWR5IGZhaWxlZCB0aGF0IGxlZykgZG9lcyBub3Qgc3RvcCB0aGlzIG9uZSDigJRcbiAgICogYW5kIHRoZSBkZXYtbW9kZSB3YXJuaW5nIG1heSBmaXJlIGFnYWluLlxuICAgKi9cbiAgYmVnaW5MZWcoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmVzb2x2ZWQub25GYWlsdXJlID09PSAnZmFpbCcpIHRoaXMuc3RvcHBlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgICB0aGlzLmZhaWx1cmUgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy53YXJuZWQgPSBmYWxzZTtcbiAgfVxuXG4gIC8qKiBUaGUgbGVnJ3MgcmVkYWN0aW9uIHJ1bGUg4oCUIGEgcmVzdW1lIGJ1aWxkcyBhIG5ldyBvbmU7IHRoZSBuZXh0IGBvcGVuZWRgIC8gYGNsb3NlZGAgaXMgc2VydmVkIHVuZGVyIGl0LiAqL1xuICB1c2VSdWxlKHJ1bGU6IFJlZGFjdGlvblJ1bGUgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICB0aGlzLnJ1bGUgPSBydWxlO1xuICB9XG5cbiAgLyoqIEFib3J0cyBhdCB0aGUgZmlyc3QgbG9zcyB1bmRlciBgb25GYWlsdXJlOiAnZmFpbCdgOyBhYnNlbnQgb3RoZXJ3aXNlLiAqL1xuICBnZXQgc3RvcFNpZ25hbCgpOiBBYm9ydFNpZ25hbCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuc3RvcHBlcj8uc2lnbmFsO1xuICB9XG5cbiAgZ2V0IGZsdXNoTW9kZSgpOiBSZWNvcmRTaW5rRmx1c2hNb2RlIHtcbiAgICByZXR1cm4gdGhpcy5yZXNvbHZlZC5mbHVzaDtcbiAgfVxuXG4gIC8qKiBUaGUgbG9zcyB0aGF0IGZhaWxzIHRoZSBydW4gdW5kZXIgYCdmYWlsJ2A7IGFic2VudCB3aGlsZSBub3RoaW5nIHdhcyBsb3N0IChhbmQgYWx3YXlzIHVuZGVyIGAncmVwb3J0J2ApLiAqL1xuICBnZXQgZmF0YWwoKTogUmVjb3JkU2lua0Vycm9yIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5mYWlsdXJlO1xuICB9XG5cbiAgc3RhdHMoKTogUmVjb3JkU2lua1N0YXRzIHtcbiAgICByZXR1cm4ge1xuICAgICAgZW50cmllczogdGhpcy5lbnRyaWVzLFxuICAgICAgZmFpbGVkOiB0aGlzLmZhaWxlZCxcbiAgICAgIC4uLih0aGlzLmxhc3RFcnJvciA9PT0gdW5kZWZpbmVkID8ge30gOiB7IGxhc3RFcnJvcjogdGhpcy5sYXN0RXJyb3IgfSksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBd2FpdCB0aGUgYWRhcHRlcidzIGBmbHVzaCgpYCwgYXQgbW9zdCBgdGltZW91dE1zYCB3aGVuIGdpdmVuLiBBIGZsdXNoIHRoYXQgdGhyb3dzIG9yIHJlamVjdHMgaXMgYSBsb3NzXG4gICAqIChjb3VudGVkLCBhbmQgZmF0YWwgdW5kZXIgYCdmYWlsJ2ApOyBvbmUgc3RpbGwgcnVubmluZyBhdCB0aGUgZGVhZGxpbmUgaXMgYHBlbmRpbmdgIGFuZCBrZWVwcyBydW5uaW5nIOKAlCBhbmQsXG4gICAqIHdpdGggYHBlbmRpbmdJc0xvc3NgICh0aGUgcnVuJ3Mgb3duIGZsdXNoKSwgY291bnRlZCBhcyBhIGxvc3MgdG9vLCBzbyBhIGZsdXNoIHRoYXQgbmV2ZXIgc2V0dGxlcyBjYW5ub3QgaG9sZCBhXG4gICAqIHJ1biBvcGVuLCBhbmQgY2Fubm90IHBhc3MgZm9yIG9uZSB0aGF0IGxhbmRlZC4gTm90aGluZyBoZXJlIHRocm93czogYSBob3N0aWxlIGFkYXB0ZXIgKGEgdGhyb3dpbmcgYGZsdXNoYFxuICAgKiBnZXR0ZXIsIGEgcHJvbWlzZSB3aXRoIGl0cyBvd24gYHRoZW5gKSBpcyBhIGxvc3MsIG5ldmVyIHRoZSBydW4ncyBlcnJvci5cbiAgICovXG4gIGFzeW5jIGZsdXNoKHRpbWVvdXRNcz86IG51bWJlciwgcGVuZGluZ0lzTG9zcyA9IGZhbHNlKTogUHJvbWlzZTxSZWNvcmRGbHVzaFJlc3VsdD4ge1xuICAgIGNvbnN0IGFkYXB0ZXIgPSB0aGlzLnJlc29sdmVkLmFkYXB0ZXI7XG4gICAgY29uc3QgcnVsZSA9IHRoaXMucnVsZTtcbiAgICBsZXQgc2V0dGxlZDogUHJvbWlzZTxSZWNvcmRGbHVzaFJlc3VsdD47XG4gICAgbGV0IGdpdmVuVXAgPSBmYWxzZTsgLy8gYSBmbHVzaCBhbHJlYWR5IGNvdW50ZWQgYXMgYSBsb3NzIGF0IHRoZSBkZWFkbGluZSBpcyBub3QgY291bnRlZCBhZ2FpbiB3aGVuIGl0IHJlamVjdHNcbiAgICB0cnkge1xuICAgICAgY29uc3QgZmx1c2g6IHVua25vd24gPSBhZGFwdGVyLmZsdXNoOyAvLyByZWFkIG9uY2U6IGEgZ2V0dGVyIHJ1bnMgb25jZSwgaW5zaWRlIHRoZSBndWFyZFxuICAgICAgaWYgKHR5cGVvZiBmbHVzaCAhPT0gJ2Z1bmN0aW9uJykgcmV0dXJuIHsgZG9uZTogdHJ1ZSwgZmFpbGVkOiBmYWxzZSwgcGVuZGluZzogZmFsc2UgfTtcbiAgICAgIHNldHRsZWQgPSBzZXR0bGVPbmNlKFxuICAgICAgICBmbHVzaC5jYWxsKGFkYXB0ZXIpLFxuICAgICAgICAoKTogUmVjb3JkRmx1c2hSZXN1bHQgPT4gKHsgZG9uZTogdHJ1ZSwgZmFpbGVkOiBmYWxzZSwgcGVuZGluZzogZmFsc2UgfSksXG4gICAgICAgIChlcnJvcik6IFJlY29yZEZsdXNoUmVzdWx0ID0+IHtcbiAgICAgICAgICBpZiAoIWdpdmVuVXApIHRoaXMubG9zdChlcnJvciwgdW5kZWZpbmVkLCB0aGlzLmVycm9yVmlldyhlcnJvciwgcnVsZSkpO1xuICAgICAgICAgIHJldHVybiB7IGRvbmU6IGZhbHNlLCBmYWlsZWQ6IHRydWUsIHBlbmRpbmc6IGZhbHNlIH07XG4gICAgICAgIH0sXG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLmxvc3QoZXJyb3IsIHVuZGVmaW5lZCwgdGhpcy5lcnJvclZpZXcoZXJyb3IsIHJ1bGUpKTtcbiAgICAgIHJldHVybiB7IGRvbmU6IGZhbHNlLCBmYWlsZWQ6IHRydWUsIHBlbmRpbmc6IGZhbHNlIH07XG4gICAgfVxuICAgIGlmICh0aW1lb3V0TXMgPT09IHVuZGVmaW5lZCB8fCAhTnVtYmVyLmlzRmluaXRlKHRpbWVvdXRNcykpIHJldHVybiBzZXR0bGVkO1xuICAgIGxldCB0aW1lcjogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4gfCB1bmRlZmluZWQ7XG4gICAgY29uc3QgcGVuZGluZyA9IG5ldyBQcm9taXNlPFJlY29yZEZsdXNoUmVzdWx0PigocmVzb2x2ZSkgPT4ge1xuICAgICAgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHJlc29sdmUoeyBkb25lOiBmYWxzZSwgZmFpbGVkOiBmYWxzZSwgcGVuZGluZzogdHJ1ZSB9KSwgTWF0aC5tYXgoMCwgdGltZW91dE1zKSk7XG4gICAgfSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IFByb21pc2UucmFjZShbc2V0dGxlZCwgcGVuZGluZ10pO1xuICAgICAgaWYgKHJlc3VsdC5wZW5kaW5nICYmIHBlbmRpbmdJc0xvc3MpIHtcbiAgICAgICAgZ2l2ZW5VcCA9IHRydWU7XG4gICAgICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKGByZWNvcmQgc2luazogZmx1c2goKSBkaWQgbm90IHNldHRsZSB3aXRoaW4gJHtNYXRoLm1heCgwLCB0aW1lb3V0TXMpfW1zYCk7XG4gICAgICAgIHRoaXMubG9zdChlcnJvciwgdW5kZWZpbmVkLCB0aGlzLmVycm9yVmlldyhlcnJvciwgcnVsZSkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICB9XG4gIH1cblxuICAvKiogVGhlIG1ldGEgYXMgc2VydmVkOiBhIGJvdW5kYXJ5IHJlY29yZCwgc2NydWJiZWQgYnkga2V5IG5hbWUgYXQgZXZlcnkgZGVwdGggKGFuIGluZXJ0IHJ1bGUgY29waWVzIG5vdGhpbmcpLiAqL1xuICBzZXJ2ZShtZXRhOiBNZXRhKTogTWV0YSB7XG4gICAgcmV0dXJuIHRoaXMucnVsZSA/IHRoaXMucnVsZS5yZXRhaW5Cb3VuZGFyeShtZXRhLCBMT0dfUExBQ0VIT0xERVIpIDogbWV0YTtcbiAgfVxuXG4gIC8qKiBPbmUgbG9zczogY291bnRlZCwgd2FybmVkIG9uY2UgcGVyIHJ1biwgdG9sZCB3aXRoIGEgc2FmZSBkaXNwYXRjaGVkIGVudHJ5IHdoZW4gYXZhaWxhYmxlLCBmYXRhbCB1bmRlciAnZmFpbCcuICovXG4gIHByaXZhdGUgbG9zdChlcnJvcjogdW5rbm93biwgZW50cnk6IFJlY29yZEVudHJ5IHwgdW5kZWZpbmVkLCB2aWV3OiBTaW5rRXJyb3JWaWV3KTogdm9pZCB7XG4gICAgdGhpcy5mYWlsZWQgKz0gMTtcbiAgICBjb25zdCB0ZXh0ID0gdmlldy50ZXh0O1xuICAgIHRoaXMubGFzdEVycm9yID0gdGV4dDtcbiAgICBpZiAoaXNEZXZNb2RlKCkgJiYgIXRoaXMud2FybmVkKSB7XG4gICAgICB0aGlzLndhcm5lZCA9IHRydWU7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBgW2Zvb3RwcmludF0gcmVjb3JkIHNpbms6IGFuIGVudHJ5IHdhcyBub3Qgc3RvcmVkICgke3RleHR9KS4gVGhlIHJ1biBnb2VzIG9uOyBgICtcbiAgICAgICAgICAnZ2V0U25hcHNob3QoKS5zaW5rIGNvdW50cyBldmVyeSBsb3NzLicsXG4gICAgICApO1xuICAgIH1cbiAgICAvLyBUaGUgZmFpbHVyZSBtb2RlIGZpcnN0OiBub3RoaW5nIHRoZSBhZGFwdGVyJ3Mgb3duIGxpc3RlbmVyIGRvZXMgY2FuIHNraXAgaXQuXG4gICAgaWYgKHRoaXMuc3RvcHBlciAhPT0gdW5kZWZpbmVkICYmIHRoaXMuZmFpbHVyZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmZhaWx1cmUgPSBuZXcgUmVjb3JkU2lua0Vycm9yKGByZWNvcmQgc2luazogYW4gZW50cnkgd2FzIG5vdCBzdG9yZWQg4oCUICR7dGV4dH1gLCBlcnJvcik7XG4gICAgICBpZiAodmlldy5tYXNrZWQpIHtcbiAgICAgICAgLy8gVGhlIGNhbGxlciBrZWVwcyB0aGUgcmVhbCBjYXVzZSwgYnV0IG9ic2VydmVycyBvZiB0aGlzIG5ldyB3cmFwcGVyIG11c3QgaW5oZXJpdCBpdHMgcmVtZW1iZXJlZCBtYXNrLlxuICAgICAgICB2aWV3LnJ1bGU/LnJldGFpblN0YWdlRXJyb3IodGhpcy5mYWlsdXJlLCB0aGlzLmZhaWx1cmUubWVzc2FnZSwgU0NPUEVfUExBQ0VIT0xERVIpO1xuICAgICAgICBpZiAodGhpcy5ydWxlICE9PSB2aWV3LnJ1bGUpIHRoaXMucnVsZT8ucmV0YWluU3RhZ2VFcnJvcih0aGlzLmZhaWx1cmUsIHRoaXMuZmFpbHVyZS5tZXNzYWdlLCBTQ09QRV9QTEFDRUhPTERFUik7XG4gICAgICB9XG4gICAgICB0aGlzLnN0b3BwZXIuYWJvcnQodGhpcy5mYWlsdXJlKTtcbiAgICB9XG4gICAgaWYgKGVudHJ5ICE9PSB1bmRlZmluZWQpIHRlbGxBZGFwdGVyKHRoaXMucmVzb2x2ZWQuYWRhcHRlciwgeyBlbnRyeSwgZXJyb3I6IHZpZXcuZXJyb3IgfSk7XG4gIH1cbn1cblxuLyoqIFRoZSBhZGFwdGVyJ3Mgb3duIGBvbkZhaWx1cmVgLCBpc29sYXRlZDogYSB0aHJvd2luZyBnZXR0ZXIsIGEgdGhyb3cgb3IgYSByZWplY3Rpb24gdGhlcmUgY2hhbmdlcyBub3RoaW5nLiAqL1xuZnVuY3Rpb24gdGVsbEFkYXB0ZXIoYWRhcHRlcjogUmVjb3JkU2luaywgZmFpbHVyZTogeyByZWFkb25seSBlbnRyeTogUmVjb3JkRW50cnk7IHJlYWRvbmx5IGVycm9yOiB1bmtub3duIH0pOiB2b2lkIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBsaXN0ZW5lcjogdW5rbm93biA9IGFkYXB0ZXIub25GYWlsdXJlO1xuICAgIGlmICh0eXBlb2YgbGlzdGVuZXIgIT09ICdmdW5jdGlvbicpIHJldHVybjtcbiAgICBzZXR0bGVPbmNlKFxuICAgICAgbGlzdGVuZXIuY2FsbChhZGFwdGVyLCBmYWlsdXJlKSxcbiAgICAgICgpID0+IHVuZGVmaW5lZCxcbiAgICAgICgpID0+IHVuZGVmaW5lZCxcbiAgICApO1xuICB9IGNhdGNoIHtcbiAgICAvLyBBIGxpc3RlbmVyIHRoYXQgZmFpbHMgaXMgdGhlIGFkYXB0ZXIncyBvd24gYnVzaW5lc3M6IHRoZSBsb3NzIGlzIGFscmVhZHkgY291bnRlZC5cbiAgfVxufVxuXG4vKipcbiAqIGB2YWx1ZWAsIHNldHRsZWQgT05DRSBpbnRvIGBvblZhbHVlYCAvIGBvbkVycm9yYCDigJQgbmV2ZXIgdGhyb3VnaCB0aGUgdmFsdWUncyBvd24gYHRoZW5gOiBhIG5hdGl2ZSBwcm9taXNlIGlzXG4gKiB3YXRjaGVkIHRocm91Z2ggdGhlIHJlYWwgYFByb21pc2UucHJvdG90eXBlLnRoZW5gIChhbiBvd24gYHRoZW5gIG9uIGl0IGlzIG5vdCB0cnVzdGVkLCBzbyBpdHMgcmVqZWN0aW9uIGlzIGFsd2F5c1xuICogaGFuZGxlZCksIGFueSBvdGhlciB0aGVuYWJsZSBhZG9wdGVkIGludG8gYSBmcmVzaCBwcm9taXNlLiBBIHBsYWluIHZhbHVlIGlzIGEgZnVsZmlsbWVudC5cbiAqL1xuZnVuY3Rpb24gc2V0dGxlT25jZTxUPih2YWx1ZTogdW5rbm93biwgb25WYWx1ZTogKCkgPT4gVCwgb25FcnJvcjogKGVycm9yOiB1bmtub3duKSA9PiBUKTogUHJvbWlzZTxUPiB7XG4gIGNvbnN0IGFkb3B0ZWQ6IFByb21pc2U8dW5rbm93bj4gPSB2YWx1ZSBpbnN0YW5jZW9mIFByb21pc2UgPyB2YWx1ZSA6IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiByZXNvbHZlKHZhbHVlKSk7XG4gIHJldHVybiBQcm9taXNlLnByb3RvdHlwZS50aGVuLmNhbGwoYWRvcHRlZCwgb25WYWx1ZSwgb25FcnJvcikgYXMgUHJvbWlzZTxUPjtcbn1cbiJdfQ==
|
|
345
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb3JkU2luay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvcnVubmVyL3JlY29yZFNpbmsudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBc0JHOzs7QUFJSCwyQ0FBa0Q7QUFHbEQsOENBQTBDO0FBQzFDLHlEQUFzRTtBQUV0RSx5REFBMkQ7QUF5QzNEOzs7R0FHRztBQUNILE1BQWEsZUFBZ0IsU0FBUSxLQUFLO0lBRUY7SUFEcEIsSUFBSSxHQUFHLGlCQUFpQixDQUFDO0lBQzNDLFlBQVksT0FBZSxFQUFXLEtBQWM7UUFDbEQsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRHFCLFVBQUssR0FBTCxLQUFLLENBQVM7SUFFcEQsQ0FBQztDQUNGO0FBTEQsMENBS0M7QUFVRCxNQUFNLE9BQU8sR0FBRyxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFFBQVEsQ0FBVSxDQUFDO0FBZWhFLFNBQVMsU0FBUyxDQUFDLEtBQWM7SUFDL0IsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVE7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUM5RCxPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQVEsS0FBaUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxVQUFVLENBQUMsQ0FBQztBQUMzRixDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBZ0IsaUJBQWlCLENBQUMsTUFBZTtJQUMvQyxJQUFJLE1BQU0sS0FBSyxTQUFTO1FBQUUsT0FBTyxTQUFTLENBQUM7SUFDM0MsSUFBSSxTQUFTLENBQUMsTUFBTSxDQUFDO1FBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUM7SUFDdEYsSUFBSSxNQUFNLEtBQUssSUFBSSxJ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QUFRLENBQUMsT0FBTyxFQUFFLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUM1RixDQUFDO0NBQ0Y7QUFoUEQsOEJBZ1BDO0FBRUQsZ0hBQWdIO0FBQ2hILFNBQVMsV0FBVyxDQUFDLE9BQW1CLEVBQUUsT0FBaUU7SUFDekcsSUFBSSxDQUFDO1FBQ0gsTUFBTSxRQUFRLEdBQVksT0FBTyxDQUFDLFNBQVMsQ0FBQztRQUM1QyxJQUFJLE9BQU8sUUFBUSxLQUFLLFVBQVU7WUFBRSxPQUFPO1FBQzNDLFVBQVUsQ0FDUixRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsRUFDL0IsR0FBRyxFQUFFLENBQUMsU0FBUyxFQUNmLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FDaEIsQ0FBQztJQUNKLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxvRkFBb0Y7SUFDdEYsQ0FBQztBQUNILENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBUyxVQUFVLENBQUksS0FBYyxFQUFFLE9BQWdCLEVBQUUsT0FBOEI7SUFDckYsTUFBTSxPQUFPLEdBQXFCLEtBQUssWUFBWSxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQzlHLE9BQU8sT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFlLENBQUM7QUFDOUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogcnVubmVyL3JlY29yZFNpbmsudHMg4oCUIHRoZSBydW4ncyBzaWRlIG9mIHRoZSBjcmFzaC1zYWZlIHJlY29yZCAoZGVzaWduIMKnMy41LCBwYWNrZXQgUDYpLlxuICpcbiAqIGZvb3R0cmFjZSBvd25zIHRoZSBwb3J0IChgUmVjb3JkU2lua2AsIGBmb290dHJhY2Uvd3JpdGVgKTogYSBsb2cgYnVpbHQgd2l0aCBhIHNpbmsgaGFuZHMgaXQgZXZlcnkgZW50cnkgQVMgSVRcbiAqIExBTkRTIOKAlCBgb3BlbmVkYCwgYGNvbW1pdGAsIGBub3RlYCwgYGNsb3NlZGAg4oCUIGFuZCBjb3VudHMgd2hhdCB0aGUgc2luayBkaWQgbm90IHRha2UuIFRoaXMgZmlsZSBpcyB3aGF0IHRoZVxuICogRVhFQ1VUT1IgYWRkcyBhcm91bmQgYW4gYXBwJ3MgYWRhcHRlciwgb25lIHtAbGluayBSdW5SZWNvcmR9IHBlciBydW46XG4gKlxuICogICAtIFRIRSBPTkUgTEFXLCBiZWZvcmUgYW55IGJ5dGUgbGVhdmVzOiB0aGUgYG9wZW5lZGAgYmFzZSBpcyB0aGUgcnVuJ3Mgc2VydmVkIGZvcm0gb2YgaXQgKHRoZSByZWRhY3Rpb24gcnVsZSdzXG4gKiAgICAgYHJldGFpblN0YXRlYCwgdGhlIG1pcnJvcidzIHNlZWQg4oCUIHNvIGEgcG9saWN5IGtleSBzZWVkZWQgYnkgYGluaXRpYWxDb250ZXh0YCBvciBhIGNoZWNrcG9pbnQgbmV2ZXIgcmVhY2hlc1xuICogICAgIHRoZSBzaW5rKSwgYW5kIHRoZSBgb3BlbmVkYCAvIGBjbG9zZWRgIG1ldGEgYXJlIGJvdW5kYXJ5IHJlY29yZHMgKGByZXRhaW5Cb3VuZGFyeWApLiBBIGNvbW1pdCBpcyB0aGUgbG9nJ3Mgb3duXG4gKiAgICAgYnVuZGxlLCBhbHJlYWR5IHNjcnViYmVkIGF0IGNvbW1pdDsgYW4gYXR0ZW1wdCBub3RlIGNhcnJpZXMgdGhlIHNlcnZlZCBgQXR0ZW1wdFJlY29yZGAgKG5vIGByYXdgKS5cbiAqICAgLSBBQ0NPVU5USU5HOiBldmVyeSBlbnRyeSBoYW5kZWQgdG8gdGhlIGFkYXB0ZXIgaXMgY291bnRlZCwgZXZlcnkgbG9zcyB0b28gKGBnZXRTbmFwc2hvdCgpLnNpbmtgKSwgd2l0aCBhXG4gKiAgICAgZGV2LW1vZGUgd2FybmluZyBvbiB0aGUgZmlyc3QgbG9zcyBvZiBhIHJ1bi4gVGhlIGFkYXB0ZXIncyBvd24gYG9uRmFpbHVyZWAgaGVhcnMgYSBkaXNwYXRjaGVkIGVudHJ5J3MgbG9zc1xuICogICAgIHdpdGggdGhhdCBzYW1lIHNlcnZlZCBlbnRyeSBhbmQgYSBzZXJ2ZWQgZXJyb3IsIGlzb2xhdGVkLiBBIHJlZnVzYWwgYmVmb3JlIGRpc3BhdGNoIGlzIGNvdW50ZWQgd2l0aG91dFxuICogICAgIGZvcndhcmRpbmcgRm9vdHRyYWNlJ3MgdW5zZXJ2ZWQgZW50cnkuXG4gKiAgIC0gVEhFIEZBSUxVUkUgTU9ERSAob3duZXIgcnVsaW5nIFEzKTogYCdyZXBvcnQnYCAoZGVmYXVsdCkg4oCUIHRoZSBydW4gZ29lcyBvbjsgYCdmYWlsJ2Ag4oCUIHRoZSBmaXJzdCBsb3N0IGVudHJ5XG4gKiAgICAgYWJvcnRzIHRoZSBydW4ncyBzaWduYWwgd2l0aCBhIHtAbGluayBSZWNvcmRTaW5rRXJyb3J9LCBhbmQgYSBydW4gdGhhdCBmaW5pc2hlZCB3aXRoIGEgbG9zcyByZWplY3RzIHdpdGggaXQuXG4gKiAgIC0gRkxVU0g6IGAnYXV0bydgIChkZWZhdWx0KSDigJQgYHJ1bigpYCAvIGByZXN1bWUoKWAgYXdhaXQgdGhlIGFkYXB0ZXIncyBgZmx1c2goKWAgYWZ0ZXIgdGhlIGNsb3NpbmcgZW50cnk7XG4gKiAgICAgYCdtYW51YWwnYCDigJQgdGhlIGFwcCBjYWxscyBgZXhlY3V0b3IuZmx1c2hSZWNvcmQoKWAuXG4gKlxuICogRXZlcnkgYWRhcHRlciBtZXRob2QgaXMgY2FsbGVkIHN5bmNocm9ub3VzbHkgZnJvbSB0aGUgbG9nOyB3aGF0ZXZlciB0aGUgYWRhcHRlciB0aHJvd3Mgb3IgcmVqZWN0cyB3aXRoIGlzIHRoZVxuICogbG9nJ3MgdG8gY291bnQgKGBFdmVudExvZyDCtyBzaW5rRmFpbHVyZXNgKSwgbmV2ZXIgdGhlIHJ1bidzIOKAlCBzbyBub3RoaW5nIGhlcmUgdGhyb3dzIHRvIHRoZSBlbmdpbmUuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBNZXRhIH0gZnJvbSAnZm9vdHRyYWNlJztcbmltcG9ydCB0eXBlIHsgUmVjb3JkRW50cnksIFJlY29yZFNpbmsgfSBmcm9tICdmb290dHJhY2Uvd3JpdGUnO1xuaW1wb3J0IHsgTE9HX1BMQUNFSE9MREVSIH0gZnJvbSAnZm9vdHRyYWNlL3dyaXRlJztcblxuaW1wb3J0IHR5cGUgeyBDYXB0dXJlSGlzdG9yeU9wdGlvbnMsIENhcHR1cmVIaXN0b3J5U3RhdHVzIH0gZnJvbSAnLi4vY2FwdHVyZS9oaXN0b3J5VHlwZXMuanMnO1xuaW1wb3J0IHsgaXNEZXZNb2RlIH0gZnJvbSAnLi4vZGV2TW9kZS5qcyc7XG5pbXBvcnQgeyBleHRyYWN0RXJyb3JJbmZvLCB0aHJvd25UZXh0IH0gZnJvbSAnLi4vZXJyb3JzL2Vycm9ySW5mby5qcyc7XG5pbXBvcnQgdHlwZSB7IFJlZGFjdGlvblJ1bGUgfSBmcm9tICcuLi9tZW1vcnkvcmVkYWN0aW9uLmpzJztcbmltcG9ydCB7IFNDT1BFX1BMQUNFSE9MREVSIH0gZnJvbSAnLi4vbWVtb3J5L3JlZGFjdGlvbi5qcyc7XG5pbXBvcnQgdHlwZSB7IFJlY29yZFNpbmtTdGF0cyB9IGZyb20gJy4vRXhlY3V0aW9uUnVudGltZS5qcyc7XG5cbi8qKiBXaGF0IGEgbG9zdCBlbnRyeSBkb2VzIHRvIHRoZSBydW46IGAncmVwb3J0J2AgY291bnRzIGl0IGFuZCBnb2VzIG9uOyBgJ2ZhaWwnYCBmYWlscyB0aGUgcnVuLiAqL1xuZXhwb3J0IHR5cGUgUmVjb3JkU2lua0ZhaWx1cmVNb2RlID0gJ3JlcG9ydCcgfCAnZmFpbCc7XG5cbi8qKiBXaGVuIHRoZSBhZGFwdGVyJ3MgYGZsdXNoKClgIHJ1bnM6IGFmdGVyIGVhY2ggcnVuJ3MgY2xvc2luZyBlbnRyeSAoYCdhdXRvJ2ApLCBvciB3aGVuIHRoZSBhcHAgYXNrcy4gKi9cbmV4cG9ydCB0eXBlIFJlY29yZFNpbmtGbHVzaE1vZGUgPSAnYXV0bycgfCAnbWFudWFsJztcblxuLyoqXG4gKiBUaGUgZXhlY3V0b3IncyBgc2lua2Agb3B0aW9uIGluIGl0cyBsb25nIGZvcm0uIFRoZSBzaG9ydCBmb3JtIGlzIHRoZSBhZGFwdGVyIGl0c2VsZi5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogbmV3IEZsb3dDaGFydEV4ZWN1dG9yKGNoYXJ0LCB7IHNpbms6IHsgYWRhcHRlcjogZmlsZVNpbmsoJy92YXIvZm9vdHByaW50L3J1bi5qc29ubCcpLCBvbkZhaWx1cmU6ICdmYWlsJyB9IH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVjb3JkU2lua09wdGlvbnMge1xuICAvKiogV2hlcmUgdGhlIGVudHJpZXMgZ28g4oCUIGBmaWxlU2luayhwYXRoKWAgKGBmb290cHJpbnRqcy9zaW5rc2ApLCBgbWVtb3J5U2luaygpYCAoYGZvb3R0cmFjZS93cml0ZWApLCBvciB5b3Vycy4gKi9cbiAgcmVhZG9ubHkgYWRhcHRlcjogUmVjb3JkU2luaztcbiAgLyoqIGAncmVwb3J0J2AgKGRlZmF1bHQpOiBhIGxvc3QgZW50cnkgaXMgY291bnRlZCBhbmQgdGhlIHJ1biBnb2VzIG9uLiBgJ2ZhaWwnYDogdGhlIGZpcnN0IG9uZSBmYWlscyB0aGUgcnVuLiAqL1xuICByZWFkb25seSBvbkZhaWx1cmU/OiBSZWNvcmRTaW5rRmFpbHVyZU1vZGU7XG4gIC8qKiBgJ2F1dG8nYCAoZGVmYXVsdCk6IGBydW4oKWAgYXdhaXRzIHRoZSBhZGFwdGVyJ3MgYGZsdXNoKClgIGFmdGVyIHRoZSBjbG9zaW5nIGVudHJ5LiBgJ21hbnVhbCdgOiBgZmx1c2hSZWNvcmQoKWAuICovXG4gIHJlYWRvbmx5IGZsdXNoPzogUmVjb3JkU2lua0ZsdXNoTW9kZTtcbiAgLyoqIE9wdC1pbiBjYXB0dXJlIGV2aWRlbmNlIGFuZCBleHBsaWNpdCBob3N0IGFja25vd2xlZGdlbWVudDsgb3JkaW5hcnkgZmx1c2ggbmV2ZXIgaW1wbGllcyBkdXJhYmlsaXR5LiAqL1xuICByZWFkb25seSBjYXB0dXJlPzogQ2FwdHVyZUhpc3RvcnlPcHRpb25zO1xufVxuXG4vKiogVGhlIGV4ZWN1dG9yJ3MgYHNpbmtgIG9wdGlvbjogYW4gYWRhcHRlciwgb3Ige0BsaW5rIFJlY29yZFNpbmtPcHRpb25zfS4gKi9cbmV4cG9ydCB0eXBlIFJlY29yZFNpbmtPcHRpb24gPSBSZWNvcmRTaW5rIHwgUmVjb3JkU2lua09wdGlvbnM7XG5cbi8qKiBXaGF0IGBleGVjdXRvci5mbHVzaFJlY29yZCgpYCByZXNvbHZlcyB3aXRoIOKAlCB0aGUgYGRyYWluT2JzZXJ2ZXJzYCBzaGFwZS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVjb3JkRmx1c2hSZXN1bHQge1xuICAvKiogVGhlIGFkYXB0ZXIncyBmbHVzaCBmaW5pc2hlZCAob3IgdGhlcmUgd2FzIG5vdGhpbmcgdG8gZmx1c2gpLiAqL1xuICByZWFkb25seSBkb25lOiBib29sZWFuO1xuICAvKiogVGhlIGFkYXB0ZXIncyBmbHVzaCB0aHJldyBvciByZWplY3RlZCDigJQgY291bnRlZCBvbiBgZ2V0U25hcHNob3QoKS5zaW5rYC4gKi9cbiAgcmVhZG9ubHkgZmFpbGVkOiBib29sZWFuO1xuICAvKiogVGhlIGZsdXNoIGhhZCBub3Qgc2V0dGxlZCB3aGVuIGB0aW1lb3V0TXNgIHJhbiBvdXQuICovXG4gIHJlYWRvbmx5IHBlbmRpbmc6IGJvb2xlYW47XG59XG5cbi8qKlxuICogQSBydW4gd2l0aCBgc2luazogeyBvbkZhaWx1cmU6ICdmYWlsJyB9YCBsb3N0IGFuIGVudHJ5OiB0aGUgcmVjb3JkIHRoZSBhcHAgYXNrZWQgdG8gYmUga2VwdCBpcyBub3Qgd2hvbGUuXG4gKiBgY2F1c2VgIGlzIHRoZSBhZGFwdGVyJ3Mgb3duIGVycm9yLlxuICovXG5leHBvcnQgY2xhc3MgUmVjb3JkU2lua0Vycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBvdmVycmlkZSByZWFkb25seSBuYW1lID0gJ1JlY29yZFNpbmtFcnJvcic7XG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZywgcmVhZG9ubHkgY2F1c2U6IHVua25vd24pIHtcbiAgICBzdXBlcihtZXNzYWdlKTtcbiAgfVxufVxuXG4vKiogVGhlIG9wdGlvbiByZXNvbHZlZCBvbmNlLCBhdCBjb25zdHJ1Y3Rpb24uICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc29sdmVkUmVjb3JkU2luayB7XG4gIHJlYWRvbmx5IGFkYXB0ZXI6IFJlY29yZFNpbms7XG4gIHJlYWRvbmx5IG9uRmFpbHVyZTogUmVjb3JkU2lua0ZhaWx1cmVNb2RlO1xuICByZWFkb25seSBmbHVzaDogUmVjb3JkU2lua0ZsdXNoTW9kZTtcbiAgcmVhZG9ubHkgY2FwdHVyZT86IENhcHR1cmVIaXN0b3J5T3B0aW9ucztcbn1cblxuY29uc3QgTUVUSE9EUyA9IFsnb3BlbmVkJywgJ2NvbW1pdCcsICdub3RlJywgJ2Nsb3NlZCddIGFzIGNvbnN0O1xuXG5pbnRlcmZhY2UgU2lua0Vycm9yVmlldyB7XG4gIHJlYWRvbmx5IHRleHQ6IHN0cmluZztcbiAgcmVhZG9ubHkgZXJyb3I6IHVua25vd247XG4gIHJlYWRvbmx5IG1hc2tlZDogYm9vbGVhbjtcbiAgcmVhZG9ubHkgcnVsZT86IFJlZGFjdGlvblJ1bGU7XG59XG5cbmludGVyZmFjZSBJbnZvY2F0aW9uRmFpbHVyZSB7XG4gIHJlYWRvbmx5IGVudHJ5OiBSZWNvcmRFbnRyeTtcbiAgcmVhZG9ubHkgY2F1c2U6IHVua25vd247XG4gIHJlYWRvbmx5IHZpZXc6IFNpbmtFcnJvclZpZXc7XG59XG5cbmZ1bmN0aW9uIGlzQWRhcHRlcih2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIFJlY29yZFNpbmsge1xuICBpZiAodmFsdWUgPT09IG51bGwgfHwgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JykgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gTUVUSE9EUy5ldmVyeSgobSkgPT4gdHlwZW9mICh2YWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilbbV0gPT09ICdmdW5jdGlvbicpO1xufVxuXG4vKipcbiAqIFJlc29sdmUgdGhlIGV4ZWN1dG9yJ3MgYHNpbmtgIG9wdGlvbiwgb3IgcmVmdXNlIGl0IHdpdGggYSBgVHlwZUVycm9yYCBuYW1pbmcgd2hhdCBpcyB3cm9uZyDigJQgYSB3aXJpbmcgbWlzdGFrZVxuICogdGhlIGFwcCBtYWtlcyBvbmNlLCBzbyBpdCBmYWlscyBhdCBjb25zdHJ1Y3Rpb24sIG5ldmVyIG1pZC1ydW4uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlUmVjb3JkU2luayhvcHRpb246IHVua25vd24pOiBSZXNvbHZlZFJlY29yZFNpbmsgfCB1bmRlZmluZWQge1xuICBpZiAob3B0aW9uID09PSB1bmRlZmluZWQpIHJldHVybiB1bmRlZmluZWQ7XG4gIGlmIChpc0FkYXB0ZXIob3B0aW9uKSkgcmV0dXJuIHsgYWRhcHRlcjogb3B0aW9uLCBvbkZhaWx1cmU6ICdyZXBvcnQnLCBmbHVzaDogJ2F1dG8nIH07XG4gIGlmIChvcHRpb24gIT09IG51bGwgJiYgdHlwZW9mIG9wdGlvbiA9PT0gJ29iamVjdCcgJiYgT2JqZWN0Lmhhc093bihvcHRpb24sICdhZGFwdGVyJykpIHtcbiAgICBjb25zdCB7IGFkYXB0ZXIsIG9uRmFpbHVyZSA9ICdyZXBvcnQnLCBmbHVzaCA9ICdhdXRvJywgY2FwdHVyZSB9ID0gb3B0aW9uIGFzIFBhcnRpYWw8UmVjb3JkU2lua09wdGlvbnM+O1xuICAgIGlmICghaXNBZGFwdGVyKGFkYXB0ZXIpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdGbG93Q2hhcnRFeGVjdXRvcjogc2luay5hZGFwdGVyIG11c3QgYmUgYSBSZWNvcmRTaW5rIChvcGVuZWQsIGNvbW1pdCwgbm90ZSwgY2xvc2VkKScpO1xuICAgIH1cbiAgICBpZiAob25GYWlsdXJlICE9PSAncmVwb3J0JyAmJiBvbkZhaWx1cmUgIT09ICdmYWlsJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZsb3dDaGFydEV4ZWN1dG9yOiBzaW5rLm9uRmFpbHVyZSBtdXN0IGJlICdyZXBvcnQnIG9yICdmYWlsJ1wiKTtcbiAgICB9XG4gICAgaWYgKGZsdXNoICE9PSAnYXV0bycgJiYgZmx1c2ggIT09ICdtYW51YWwnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmxvd0NoYXJ0RXhlY3V0b3I6IHNpbmsuZmx1c2ggbXVzdCBiZSAnYXV0bycgb3IgJ21hbnVhbCdcIik7XG4gICAgfVxuICAgIGlmIChjYXB0dXJlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICghY2FwdHVyZSB8fCB0eXBlb2YgY2FwdHVyZS5hY2tub3dsZWRnZSAhPT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignc2luay5jYXB0dXJlIHJlcXVpcmVzIGFja25vd2xlZGdlJyk7XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIG1heF0gb2YgW1xuICAgICAgICBbJ21heEJ5dGVzJywgOCAqIDEwMjQgKiAxMDI0XSxcbiAgICAgICAgWyd0aW1lb3V0TXMnLCAzMF8wMDBdLFxuICAgICAgXSBhcyBjb25zdCkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGNhcHR1cmVba2V5XTtcbiAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQgJiYgKCFOdW1iZXIuaXNTYWZlSW50ZWdlcih2YWx1ZSkgfHwgdmFsdWUgPCAxIHx8IHZhbHVlID4gbWF4KSlcbiAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihgc2luay5jYXB0dXJlLiR7a2V5fSBtdXN0IGJlIGEgcG9zaXRpdmUgd2hvbGUgbnVtYmVyIGF0IG1vc3QgJHttYXh9YCk7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGZpeGVkQ2FwdHVyZSA9XG4gICAgICBjYXB0dXJlICYmXG4gICAgICBPYmplY3QuZnJlZXplKHtcbiAgICAgICAgYWNrbm93bGVkZ2U6IGNhcHR1cmUuYWNrbm93bGVkZ2UuYmluZChjYXB0dXJlKSxcbiAgICAgICAgLi4uKGNhcHR1cmUubWF4Qnl0ZXMgIT09IHVuZGVmaW5lZCAmJiB7IG1heEJ5dGVzOiBjYXB0dXJlLm1heEJ5dGVzIH0pLFxuICAgICAgICAuLi4oY2FwdHVyZS50aW1lb3V0TXMgIT09IHVuZGVmaW5lZCAmJiB7IHRpbWVvdXRNczogY2FwdHVyZS50aW1lb3V0TXMgfSksXG4gICAgICB9KTtcbiAgICByZXR1cm4geyBhZGFwdGVyLCBvbkZhaWx1cmUsIGZsdXNoLCAuLi4oZml4ZWRDYXB0dXJlICYmIHsgY2FwdHVyZTogZml4ZWRDYXB0dXJlIH0pIH07XG4gIH1cbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAnRmxvd0NoYXJ0RXhlY3V0b3I6IHNpbmsgbXVzdCBiZSBhIFJlY29yZFNpbmsgKG9wZW5lZCwgY29tbWl0LCBub3RlLCBjbG9zZWQpIG9yIHsgYWRhcHRlciwgb25GYWlsdXJlPywgZmx1c2g/IH0nLFxuICApO1xufVxuXG4vKipcbiAqIE9uZSBydW4ncyByZWNvcmQgc2luazogdGhlIHNpbmsgZXZlcnkgbG9nIG9mIHRoZSBydW4gd3JpdGVzIHRvIChyb290IGFuZCBtb3VudHMpLCBpdHMgYWNjb3VudGluZyBhbmQgaXRzXG4gKiBmYWlsdXJlIG1vZGUuIEEgc2FtZS1leGVjdXRvciByZXN1bWUga2VlcHMgaXQgKHRoZSByb290IGxvZyBnb2VzIG9uKTsgYSBmcmVzaCBydW4gbWFrZXMgYSBuZXcgb25lLlxuICovXG5leHBvcnQgY2xhc3MgUnVuUmVjb3JkIHtcbiAgLyoqIEhhbmQgdGhpcyB0byBldmVyeSBgRXZlbnRMb2dgIG9mIHRoZSBydW4uICovXG4gIHJlYWRvbmx5IHNpbms6IFJlY29yZFNpbms7XG4gIHByaXZhdGUgZW50cmllcyA9IDA7XG4gIHByaXZhdGUgZmFpbGVkID0gMDtcbiAgcHJpdmF0ZSBsYXN0RXJyb3I/OiBzdHJpbmc7XG4gIHByaXZhdGUgd2FybmVkID0gZmFsc2U7XG4gIHByaXZhdGUgcnVsZT86IFJlZGFjdGlvblJ1bGU7XG4gIC8qKiBBYm9ydGVkIGF0IHRoZSBmaXJzdCBsb3NzIHVuZGVyIGAnZmFpbCdgIOKAlCBjb21wb3NlZCBpbnRvIHRoZSBsZWcncyBzaWduYWw7IGZyZXNoIHBlciBsZWcgKHtAbGluayBiZWdpbkxlZ30pLiAqL1xuICBwcml2YXRlIHN0b3BwZXI/OiBBYm9ydENvbnRyb2xsZXI7XG4gIHByaXZhdGUgZmFpbHVyZT86IFJlY29yZFNpbmtFcnJvcjtcbiAgcHJpdmF0ZSBjYXB0dXJlUGVuZGluZyA9IDA7XG4gIHByaXZhdGUgY2FwdHVyZVN0YXR1cz86IENhcHR1cmVIaXN0b3J5U3RhdHVzO1xuICAvKiogT3BhcXVlIGVycm9yIGlkZW50aXRpZXMgb25seTogbm8gcmF3IGVudHJ5IG9yIGFkYXB0ZXIgZXJyb3IgaXMgZW51bWVyYWJsZSBvbiB0aGUgdHJhbnNwb3J0IGVycm9yLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGludm9jYXRpb25GYWlsdXJlcyA9IG5ldyBXZWFrTWFwPG9iamVjdCwgSW52b2NhdGlvbkZhaWx1cmU+KCk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSByZXNvbHZlZDogUmVzb2x2ZWRSZWNvcmRTaW5rKSB7XG4gICAgaWYgKHJlc29sdmVkLm9uRmFpbHVyZSA9PT0gJ2ZhaWwnKSB0aGlzLnN0b3BwZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gICAgY29uc3QgYWRhcHRlciA9IHJlc29sdmVkLmFkYXB0ZXI7XG4gICAgY29uc3QgaGFuZGVkID0gKCk6IHZvaWQgPT4ge1xuICAgICAgdGhpcy5lbnRyaWVzICs9IDE7XG4gICAgfTtcbiAgICB0aGlzLnNpbmsgPSB7XG4gICAgICBvcGVuZWQ6IChlbnRyeSkgPT4ge1xuICAgICAgICBoYW5kZWQoKTtcbiAgICAgICAgY29uc3QgcnVsZSA9IHRoaXMucnVsZTtcbiAgICAgICAgY29uc3Qgc2VydmVkID0ge1xuICAgICAgICAgIC4uLmVudHJ5LFxuICAgICAgICAgIGluaXRpYWxTdGF0ZTogcnVsZSA/IHJ1bGUucmV0YWluU3RhdGUoZW50cnkuaW5pdGlhbFN0YXRlLCBMT0dfUExBQ0VIT0xERVIpIDogZW50cnkuaW5pdGlhbFN0YXRlLFxuICAgICAgICAgIC4uLihlbnRyeS5tZXRhID09PSB1bmRlZmluZWQgPyB7fSA6IHsgbWV0YTogdGhpcy5zZXJ2ZShlbnRyeS5tZXRhKSB9KSxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW52b2tlKHsgLi4uc2VydmVkLCBraW5kOiAnb3BlbmVkJyB9LCAoKSA9PiBhZGFwdGVyLm9wZW5lZChzZXJ2ZWQpLCBydWxlKTtcbiAgICAgIH0sXG4gICAgICBjb21taXQ6IChlbnRyeSkgPT4ge1xuICAgICAgICBoYW5kZWQoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW52b2tlKHsgLi4uZW50cnksIGtpbmQ6ICdjb21taXQnIH0sICgpID0+IGFkYXB0ZXIuY29tbWl0KGVudHJ5KSwgdGhpcy5ydWxlKTtcbiAgICAgIH0sXG4gICAgICBub3RlOiAoZW50cnkpID0+IHtcbiAgICAgICAgaGFuZGVkKCk7XG4gICAgICAgIHJldHVybiB0aGlzLmludm9rZShcbiAgICAgICAgICB7IGFkZHJlc3M6IGVudHJ5LmFkZHJlc3MsIGF0OiBlbnRyeS5hdCwga2luZDogJ25vdGUnLCBub3RlOiBlbnRyeS5raW5kLCBkYXRhOiBlbnRyeS5kYXRhIH0sXG4gICAgICAgICAgKCkgPT4gYWRhcHRlci5ub3RlKGVudHJ5KSxcbiAgICAgICAgICB0aGlzLnJ1bGUsXG4gICAgICAgICk7XG4gICAgICB9LFxuICAgICAgY2xvc2VkOiAoZW50cnkpID0+IHtcbiAgICAgICAgaGFuZGVkKCk7XG4gICAgICAgIGNvbnN0IHNlcnZlZCA9IHsgLi4uZW50cnksIC4uLihlbnRyeS5tZXRhID09PSB1bmRlZmluZWQgPyB7fSA6IHsgbWV0YTogdGhpcy5zZXJ2ZShlbnRyeS5tZXRhKSB9KSB9O1xuICAgICAgICByZXR1cm4gdGhpcy5pbnZva2UoeyAuLi5zZXJ2ZWQsIGtpbmQ6ICdjbG9zZWQnIH0sICgpID0+IGFkYXB0ZXIuY2xvc2VkKHNlcnZlZCksIHRoaXMucnVsZSk7XG4gICAgICB9LFxuICAgICAgb25GYWlsdXJlOiAoZmFpbHVyZSkgPT4ge1xuICAgICAgICBjb25zdCBpbnZvY2F0aW9uID1cbiAgICAgICAgICBmYWlsdXJlLmVycm9yICE9PSBudWxsICYmICh0eXBlb2YgZmFpbHVyZS5lcnJvciA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIGZhaWx1cmUuZXJyb3IgPT09ICdmdW5jdGlvbicpXG4gICAgICAgICAgICA/IHRoaXMuaW52b2NhdGlvbkZhaWx1cmVzLmdldChmYWlsdXJlLmVycm9yKVxuICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICAgIC8vIEJlZm9yZSBhZG1pc3Npb24gKGUuZy4gYSBtZXRhLWNvcHkgcmVmdXNhbCksIG5vIGRpc3BhdGNoZWQgc2VydmVkIGVudHJ5IGV4aXN0cy4gQ291bnQgdGhlIGxvc3MgYW5kXG4gICAgICAgIC8vIGFwcGx5IHRoZSBmYWlsdXJlIG1vZGUsIGJ1dCBuZXZlciBoYW5kIHRoZSBhZGFwdGVyIEZvb3R0cmFjZSdzIG9yaWdpbmFsLCB1bnNlcnZlZCBlbnRyeS5cbiAgICAgICAgaWYgKGludm9jYXRpb24gPT09IHVuZGVmaW5lZCkgdGhpcy5sb3N0KGZhaWx1cmUuZXJyb3IsIHVuZGVmaW5lZCwgdGhpcy5lcnJvclZpZXcoZmFpbHVyZS5lcnJvciwgdGhpcy5ydWxlKSk7XG4gICAgICAgIGVsc2UgdGhpcy5sb3N0KGludm9jYXRpb24uY2F1c2UsIGludm9jYXRpb24uZW50cnksIGludm9jYXRpb24udmlldyk7XG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICAvKiogQ2FwdHVyZSB0aGUgc2VydmVkIGVudHJ5IG5vdzsgYW4gYXN5bmNocm9ub3VzIGZhaWx1cmUga2VlcHMgdGhpcyBsZWcncyBydWxlLCBub3QgYSBsYXRlciByZXN1bWUncyBydWxlLiAqL1xuICBwcml2YXRlIGludm9rZShlbnRyeTogUmVjb3JkRW50cnksIGNhbGw6ICgpID0+IHVua25vd24sIHJ1bGU6IFJlZGFjdGlvblJ1bGUgfCB1bmRlZmluZWQpOiB1bmtub3duIHtcbiAgICBjb25zdCBmYWlsZWQgPSAoY2F1c2U6IHVua25vd24pOiBuZXZlciA9PiB7XG4gICAgICBjb25zdCBlbnZlbG9wZSA9IG5ldyBFcnJvcigncmVjb3JkIHNpbms6IGFkYXB0ZXIgaW52b2NhdGlvbiBmYWlsZWQnKTtcbiAgICAgIHRoaXMuaW52b2NhdGlvbkZhaWx1cmVzLnNldChlbnZlbG9wZSwgeyBlbnRyeSwgY2F1c2UsIHZpZXc6IHRoaXMuZXJyb3JWaWV3KGNhdXNlLCBydWxlKSB9KTtcbiAgICAgIHRocm93IGVudmVsb3BlO1xuICAgIH07XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJldHVybmVkID0gY2FsbCgpO1xuICAgICAgLy8gVm9pZCBhZGFwdGVycyBrZWVwIHRoZWlyIHN5bmNocm9ub3VzIHBhdGg7IG9ubHkgYW4gb2JqZWN0L2Z1bmN0aW9uIGNhbiBiZSBhIHRoZW5hYmxlLiBzZXR0bGVPbmNlXG4gICAgICAvLyBvYnNlcnZlcyBuYXRpdmUgcHJvbWlzZXMgdGhyb3VnaCBQcm9taXNlLnByb3RvdHlwZS50aGVuIGFuZCBndWFyZHMgaG9zdGlsZSB0aGVuYWJsZXMgdG9vLlxuICAgICAgaWYgKHJldHVybmVkID09PSBudWxsIHx8ICh0eXBlb2YgcmV0dXJuZWQgIT09ICdvYmplY3QnICYmIHR5cGVvZiByZXR1cm5lZCAhPT0gJ2Z1bmN0aW9uJykpIHJldHVybiByZXR1cm5lZDtcbiAgICAgIGlmICghdGhpcy5yZXNvbHZlZC5jYXB0dXJlKSByZXR1cm4gc2V0dGxlT25jZShyZXR1cm5lZCwgKCkgPT4gdW5kZWZpbmVkLCBmYWlsZWQpO1xuICAgICAgdGhpcy5jYXB0dXJlUGVuZGluZysrO1xuICAgICAgcmV0dXJuIHNldHRsZU9uY2UoXG4gICAgICAgIHJldHVybmVkLFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5jYXB0dXJlUGVuZGluZy0tO1xuICAgICAgICB9LFxuICAgICAgICAoY2F1c2UpID0+IHtcbiAgICAgICAgICB0aGlzLmNhcHR1cmVQZW5kaW5nLS07XG4gICAgICAgICAgcmV0dXJuIGZhaWxlZChjYXVzZSk7XG4gICAgICAgIH0sXG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGNhdXNlKSB7XG4gICAgICByZXR1cm4gZmFpbGVkKGNhdXNlKTtcbiAgICB9XG4gIH1cblxuICAvKiogQSBzaW5rIGVycm9yIGlzIHRoZSBkaWFnbm9zdGljIGVycm9ycy5yZWNvcmRTaW5rRXJyb3I7IHJhdyBjYXVzZXMgYmVsb25nIG9ubHkgdG8gdGhlIGNhbGxlcidzIGV4Y2VwdGlvbi4gKi9cbiAgcHJpdmF0ZSBlcnJvclZpZXcoZXJyb3I6IHVua25vd24sIHJ1bGU6IFJlZGFjdGlvblJ1bGUgfCB1bmRlZmluZWQpOiBTaW5rRXJyb3JWaWV3IHtcbiAgICBjb25zdCB0ZXh0ID0gdGhyb3duVGV4dChlcnJvcik7XG4gICAgY29uc3QgcmV0YWluZWQgPSBydWxlXG4gICAgICA/IHJ1bGUucmV0YWluU3RhZ2VFcnJvcihlcnJvciwgdGV4dCwgcnVsZS5yZXRhaW5EaWFnbm9zdGljKFsnZXJyb3JzJywgJ3JlY29yZFNpbmtFcnJvciddLCB0ZXh0KSlcbiAgICAgIDogeyBtZXNzYWdlOiB0ZXh0LCBzdHJ1Y3R1cmVkRXJyb3I6IGV4dHJhY3RFcnJvckluZm8oZXJyb3IpIH07XG4gICAgY29uc3Qgc2VydmVkID0geyAuLi5yZXRhaW5lZC5zdHJ1Y3R1cmVkRXJyb3IgfTtcbiAgICBSZWZsZWN0LmRlbGV0ZVByb3BlcnR5KHNlcnZlZCwgJ3JhdycpO1xuICAgIHJldHVybiB7XG4gICAgICB0ZXh0OiByZXRhaW5lZC5tZXNzYWdlLFxuICAgICAgZXJyb3I6IHNlcnZlZCxcbiAgICAgIG1hc2tlZDogcmV0YWluZWQubWVzc2FnZSAhPT0gdGV4dCB8fCByZXRhaW5lZC5zdHJ1Y3R1cmVkRXJyb3IucmF3ICE9PSBlcnJvcixcbiAgICAgIHJ1bGUsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBIHNhbWUtZXhlY3V0b3IgcmVzdW1lIHN0YXJ0cyBhIG5ldyBsZWcgb24gdGhlIHNhbWUgcmVjb3JkOiB0aGUgY291bnRzIGdvIG9uIChvbmUgbG9nLCBvbmUgcmVjb3JkKSwgYnV0IHRoZVxuICAgKiBmYWlsdXJlIG1vZGUgaXMgdGhlIExFRydzIOKAlCBhIGxvc3MgaW4gYW4gZWFybGllciBsZWcgKHdoaWNoIGFscmVhZHkgZmFpbGVkIHRoYXQgbGVnKSBkb2VzIG5vdCBzdG9wIHRoaXMgb25lIOKAlFxuICAgKiBhbmQgdGhlIGRldi1tb2RlIHdhcm5pbmcgbWF5IGZpcmUgYWdhaW4uXG4gICAqL1xuICBiZWdpbkxlZygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZXNvbHZlZC5vbkZhaWx1cmUgPT09ICdmYWlsJykgdGhpcy5zdG9wcGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICAgIHRoaXMuZmFpbHVyZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLndhcm5lZCA9IGZhbHNlO1xuICAgIHRoaXMuY2FwdHVyZVN0YXR1cyA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKiBUaGUgbGVnJ3MgcmVkYWN0aW9uIHJ1bGUg4oCUIGEgcmVzdW1lIGJ1aWxkcyBhIG5ldyBvbmU7IHRoZSBuZXh0IGBvcGVuZWRgIC8gYGNsb3NlZGAgaXMgc2VydmVkIHVuZGVyIGl0LiAqL1xuICB1c2VSdWxlKHJ1bGU6IFJlZGFjdGlvblJ1bGUgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICB0aGlzLnJ1bGUgPSBydWxlO1xuICB9XG5cbiAgLyoqIEFib3J0cyBhdCB0aGUgZmlyc3QgbG9zcyB1bmRlciBgb25GYWlsdXJlOiAnZmFpbCdgOyBhYnNlbnQgb3RoZXJ3aXNlLiAqL1xuICBnZXQgc3RvcFNpZ25hbCgpOiBBYm9ydFNpZ25hbCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuc3RvcHBlcj8uc2lnbmFsO1xuICB9XG5cbiAgZ2V0IGZsdXNoTW9kZSgpOiBSZWNvcmRTaW5rRmx1c2hNb2RlIHtcbiAgICByZXR1cm4gdGhpcy5yZXNvbHZlZC5mbHVzaDtcbiAgfVxuXG4gIC8qKiBUaGUgbG9zcyB0aGF0IGZhaWxzIHRoZSBydW4gdW5kZXIgYCdmYWlsJ2A7IGFic2VudCB3aGlsZSBub3RoaW5nIHdhcyBsb3N0IChhbmQgYWx3YXlzIHVuZGVyIGAncmVwb3J0J2ApLiAqL1xuICBnZXQgZmF0YWwoKTogUmVjb3JkU2lua0Vycm9yIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5mYWlsdXJlO1xuICB9XG5cbiAgc3RhdHMoKTogUmVjb3JkU2lua1N0YXRzIHtcbiAgICByZXR1cm4ge1xuICAgICAgZW50cmllczogdGhpcy5lbnRyaWVzLFxuICAgICAgZmFpbGVkOiB0aGlzLmZhaWxlZCxcbiAgICAgIC4uLih0aGlzLmxhc3RFcnJvciA9PT0gdW5kZWZpbmVkID8ge30gOiB7IGxhc3RFcnJvcjogdGhpcy5sYXN0RXJyb3IgfSksXG4gICAgICAuLi4odGhpcy5jYXB0dXJlU3RhdHVzICYmIHsgY2FwdHVyZTogdGhpcy5jYXB0dXJlU3RhdHVzIH0pLFxuICAgIH07XG4gIH1cblxuICBnZXQgY2FwdHVyZU9wdGlvbnMoKTogQ2FwdHVyZUhpc3RvcnlPcHRpb25zIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5yZXNvbHZlZC5jYXB0dXJlO1xuICB9XG5cbiAgZ2V0IHBlbmRpbmdDYXB0dXJlRGVsaXZlcmllcygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmNhcHR1cmVQZW5kaW5nO1xuICB9XG5cbiAgY2FwdHVyZVJlc3VsdChyZXN1bHQ6IENhcHR1cmVIaXN0b3J5U3RhdHVzKTogdm9pZCB7XG4gICAgdGhpcy5jYXB0dXJlU3RhdHVzID0gT2JqZWN0LmZyZWV6ZShyZXN1bHQpO1xuICB9XG5cbiAgLyoqIFNhbWUgc2VydmVkIHNlZWQgYXMgb3BlbmVkOyBhIGhpc3RvcnkgZGlnZXN0IG5ldmVyIHNlZXMgYSBzZWVkZWQgcG9saWN5IHNlY3JldC4gKi9cbiAgY2FwdHVyZUluaXRpYWxTdGF0ZShzdGF0ZTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gICAgcmV0dXJuIHRoaXMucnVsZSA/ICh0aGlzLnJ1bGUucmV0YWluU3RhdGUoc3RhdGUsIExPR19QTEFDRUhPTERFUikgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pIDogc3RhdGU7XG4gIH1cblxuICAvKipcbiAgICogQXdhaXQgdGhlIGFkYXB0ZXIncyBgZmx1c2goKWAsIGF0IG1vc3QgYHRpbWVvdXRNc2Agd2hlbiBnaXZlbi4gQSBmbHVzaCB0aGF0IHRocm93cyBvciByZWplY3RzIGlzIGEgbG9zc1xuICAgKiAoY291bnRlZCwgYW5kIGZhdGFsIHVuZGVyIGAnZmFpbCdgKTsgb25lIHN0aWxsIHJ1bm5pbmcgYXQgdGhlIGRlYWRsaW5lIGlzIGBwZW5kaW5nYCBhbmQga2VlcHMgcnVubmluZyDigJQgYW5kLFxuICAgKiB3aXRoIGBwZW5kaW5nSXNMb3NzYCAodGhlIHJ1bidzIG93biBmbHVzaCksIGNvdW50ZWQgYXMgYSBsb3NzIHRvbywgc28gYSBmbHVzaCB0aGF0IG5ldmVyIHNldHRsZXMgY2Fubm90IGhvbGQgYVxuICAgKiBydW4gb3BlbiwgYW5kIGNhbm5vdCBwYXNzIGZvciBvbmUgdGhhdCBsYW5kZWQuIE5vdGhpbmcgaGVyZSB0aHJvd3M6IGEgaG9zdGlsZSBhZGFwdGVyIChhIHRocm93aW5nIGBmbHVzaGBcbiAgICogZ2V0dGVyLCBhIHByb21pc2Ugd2l0aCBpdHMgb3duIGB0aGVuYCkgaXMgYSBsb3NzLCBuZXZlciB0aGUgcnVuJ3MgZXJyb3IuXG4gICAqL1xuICBhc3luYyBmbHVzaCh0aW1lb3V0TXM/OiBudW1iZXIsIHBlbmRpbmdJc0xvc3MgPSBmYWxzZSk6IFByb21pc2U8UmVjb3JkRmx1c2hSZXN1bHQ+IHtcbiAgICBjb25zdCBhZGFwdGVyID0gdGhpcy5yZXNvbHZlZC5hZGFwdGVyO1xuICAgIGNvbnN0IHJ1bGUgPSB0aGlzLnJ1bGU7XG4gICAgbGV0IHNldHRsZWQ6IFByb21pc2U8UmVjb3JkRmx1c2hSZXN1bHQ+O1xuICAgIGxldCBnaXZlblVwID0gZmFsc2U7IC8vIGEgZmx1c2ggYWxyZWFkeSBjb3VudGVkIGFzIGEgbG9zcyBhdCB0aGUgZGVhZGxpbmUgaXMgbm90IGNvdW50ZWQgYWdhaW4gd2hlbiBpdCByZWplY3RzXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGZsdXNoOiB1bmtub3duID0gYWRhcHRlci5mbHVzaDsgLy8gcmVhZCBvbmNlOiBhIGdldHRlciBydW5zIG9uY2UsIGluc2lkZSB0aGUgZ3VhcmRcbiAgICAgIGlmICh0eXBlb2YgZmx1c2ggIT09ICdmdW5jdGlvbicpIHJldHVybiB7IGRvbmU6IHRydWUsIGZhaWxlZDogZmFsc2UsIHBlbmRpbmc6IGZhbHNlIH07XG4gICAgICBzZXR0bGVkID0gc2V0dGxlT25jZShcbiAgICAgICAgZmx1c2guY2FsbChhZGFwdGVyKSxcbiAgICAgICAgKCk6IFJlY29yZEZsdXNoUmVzdWx0ID0+ICh7IGRvbmU6IHRydWUsIGZhaWxlZDogZmFsc2UsIHBlbmRpbmc6IGZhbHNlIH0pLFxuICAgICAgICAoZXJyb3IpOiBSZWNvcmRGbHVzaFJlc3VsdCA9PiB7XG4gICAgICAgICAgaWYgKCFnaXZlblVwKSB0aGlzLmxvc3QoZXJyb3IsIHVuZGVmaW5lZCwgdGhpcy5lcnJvclZpZXcoZXJyb3IsIHJ1bGUpKTtcbiAgICAgICAgICByZXR1cm4geyBkb25lOiBmYWxzZSwgZmFpbGVkOiB0cnVlLCBwZW5kaW5nOiBmYWxzZSB9O1xuICAgICAgICB9LFxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhpcy5sb3N0KGVycm9yLCB1bmRlZmluZWQsIHRoaXMuZXJyb3JWaWV3KGVycm9yLCBydWxlKSk7XG4gICAgICByZXR1cm4geyBkb25lOiBmYWxzZSwgZmFpbGVkOiB0cnVlLCBwZW5kaW5nOiBmYWxzZSB9O1xuICAgIH1cbiAgICBpZiAodGltZW91dE1zID09PSB1bmRlZmluZWQgfHwgIU51bWJlci5pc0Zpbml0ZSh0aW1lb3V0TXMpKSByZXR1cm4gc2V0dGxlZDtcbiAgICBsZXQgdGltZXI6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0IHBlbmRpbmcgPSBuZXcgUHJvbWlzZTxSZWNvcmRGbHVzaFJlc3VsdD4oKHJlc29sdmUpID0+IHtcbiAgICAgIHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiByZXNvbHZlKHsgZG9uZTogZmFsc2UsIGZhaWxlZDogZmFsc2UsIHBlbmRpbmc6IHRydWUgfSksIE1hdGgubWF4KDAsIHRpbWVvdXRNcykpO1xuICAgIH0pO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBQcm9taXNlLnJhY2UoW3NldHRsZWQsIHBlbmRpbmddKTtcbiAgICAgIGlmIChyZXN1bHQucGVuZGluZyAmJiBwZW5kaW5nSXNMb3NzKSB7XG4gICAgICAgIGdpdmVuVXAgPSB0cnVlO1xuICAgICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcihgcmVjb3JkIHNpbms6IGZsdXNoKCkgZGlkIG5vdCBzZXR0bGUgd2l0aGluICR7TWF0aC5tYXgoMCwgdGltZW91dE1zKX1tc2ApO1xuICAgICAgICB0aGlzLmxvc3QoZXJyb3IsIHVuZGVmaW5lZCwgdGhpcy5lcnJvclZpZXcoZXJyb3IsIHJ1bGUpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgfVxuICB9XG5cbiAgLyoqIFRoZSBtZXRhIGFzIHNlcnZlZDogYSBib3VuZGFyeSByZWNvcmQsIHNjcnViYmVkIGJ5IGtleSBuYW1lIGF0IGV2ZXJ5IGRlcHRoIChhbiBpbmVydCBydWxlIGNvcGllcyBub3RoaW5nKS4gKi9cbiAgc2VydmUobWV0YTogTWV0YSk6IE1ldGEge1xuICAgIHJldHVybiB0aGlzLnJ1bGUgPyB0aGlzLnJ1bGUucmV0YWluQm91bmRhcnkobWV0YSwgTE9HX1BMQUNFSE9MREVSKSA6IG1ldGE7XG4gIH1cblxuICAvKiogT25lIGxvc3M6IGNvdW50ZWQsIHdhcm5lZCBvbmNlIHBlciBydW4sIHRvbGQgd2l0aCBhIHNhZmUgZGlzcGF0Y2hlZCBlbnRyeSB3aGVuIGF2YWlsYWJsZSwgZmF0YWwgdW5kZXIgJ2ZhaWwnLiAqL1xuICBwcml2YXRlIGxvc3QoZXJyb3I6IHVua25vd24sIGVudHJ5OiBSZWNvcmRFbnRyeSB8IHVuZGVmaW5lZCwgdmlldzogU2lua0Vycm9yVmlldyk6IHZvaWQge1xuICAgIHRoaXMuZmFpbGVkICs9IDE7XG4gICAgY29uc3QgdGV4dCA9IHZpZXcudGV4dDtcbiAgICB0aGlzLmxhc3RFcnJvciA9IHRleHQ7XG4gICAgaWYgKGlzRGV2TW9kZSgpICYmICF0aGlzLndhcm5lZCkge1xuICAgICAgdGhpcy53YXJuZWQgPSB0cnVlO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgYFtmb290cHJpbnRdIHJlY29yZCBzaW5rOiBhbiBlbnRyeSB3YXMgbm90IHN0b3JlZCAoJHt0ZXh0fSkuIFRoZSBydW4gZ29lcyBvbjsgYCArXG4gICAgICAgICAgJ2dldFNuYXBzaG90KCkuc2luayBjb3VudHMgZXZlcnkgbG9zcy4nLFxuICAgICAgKTtcbiAgICB9XG4gICAgLy8gVGhlIGZhaWx1cmUgbW9kZSBmaXJzdDogbm90aGluZyB0aGUgYWRhcHRlcidzIG93biBsaXN0ZW5lciBkb2VzIGNhbiBza2lwIGl0LlxuICAgIGlmICh0aGlzLnN0b3BwZXIgIT09IHVuZGVmaW5lZCAmJiB0aGlzLmZhaWx1cmUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5mYWlsdXJlID0gbmV3IFJlY29yZFNpbmtFcnJvcihgcmVjb3JkIHNpbms6IGFuIGVudHJ5IHdhcyBub3Qgc3RvcmVkIOKAlCAke3RleHR9YCwgZXJyb3IpO1xuICAgICAgaWYgKHZpZXcubWFza2VkKSB7XG4gICAgICAgIC8vIFRoZSBjYWxsZXIga2VlcHMgdGhlIHJlYWwgY2F1c2UsIGJ1dCBvYnNlcnZlcnMgb2YgdGhpcyBuZXcgd3JhcHBlciBtdXN0IGluaGVyaXQgaXRzIHJlbWVtYmVyZWQgbWFzay5cbiAgICAgICAgdmlldy5ydWxlPy5yZXRhaW5TdGFnZUVycm9yKHRoaXMuZmFpbHVyZSwgdGhpcy5mYWlsdXJlLm1lc3NhZ2UsIFNDT1BFX1BMQUNFSE9MREVSKTtcbiAgICAgICAgaWYgKHRoaXMucnVsZSAhPT0gdmlldy5ydWxlKSB0aGlzLnJ1bGU/LnJldGFpblN0YWdlRXJyb3IodGhpcy5mYWlsdXJlLCB0aGlzLmZhaWx1cmUubWVzc2FnZSwgU0NPUEVfUExBQ0VIT0xERVIpO1xuICAgICAgfVxuICAgICAgdGhpcy5zdG9wcGVyLmFib3J0KHRoaXMuZmFpbHVyZSk7XG4gICAgfVxuICAgIGlmIChlbnRyeSAhPT0gdW5kZWZpbmVkKSB0ZWxsQWRhcHRlcih0aGlzLnJlc29sdmVkLmFkYXB0ZXIsIHsgZW50cnksIGVycm9yOiB2aWV3LmVycm9yIH0pO1xuICB9XG59XG5cbi8qKiBUaGUgYWRhcHRlcidzIG93biBgb25GYWlsdXJlYCwgaXNvbGF0ZWQ6IGEgdGhyb3dpbmcgZ2V0dGVyLCBhIHRocm93IG9yIGEgcmVqZWN0aW9uIHRoZXJlIGNoYW5nZXMgbm90aGluZy4gKi9cbmZ1bmN0aW9uIHRlbGxBZGFwdGVyKGFkYXB0ZXI6IFJlY29yZFNpbmssIGZhaWx1cmU6IHsgcmVhZG9ubHkgZW50cnk6IFJlY29yZEVudHJ5OyByZWFkb25seSBlcnJvcjogdW5rbm93biB9KTogdm9pZCB7XG4gIHRyeSB7XG4gICAgY29uc3QgbGlzdGVuZXI6IHVua25vd24gPSBhZGFwdGVyLm9uRmFpbHVyZTtcbiAgICBpZiAodHlwZW9mIGxpc3RlbmVyICE9PSAnZnVuY3Rpb24nKSByZXR1cm47XG4gICAgc2V0dGxlT25jZShcbiAgICAgIGxpc3RlbmVyLmNhbGwoYWRhcHRlciwgZmFpbHVyZSksXG4gICAgICAoKSA9PiB1bmRlZmluZWQsXG4gICAgICAoKSA9PiB1bmRlZmluZWQsXG4gICAgKTtcbiAgfSBjYXRjaCB7XG4gICAgLy8gQSBsaXN0ZW5lciB0aGF0IGZhaWxzIGlzIHRoZSBhZGFwdGVyJ3Mgb3duIGJ1c2luZXNzOiB0aGUgbG9zcyBpcyBhbHJlYWR5IGNvdW50ZWQuXG4gIH1cbn1cblxuLyoqXG4gKiBgdmFsdWVgLCBzZXR0bGVkIE9OQ0UgaW50byBgb25WYWx1ZWAgLyBgb25FcnJvcmAg4oCUIG5ldmVyIHRocm91Z2ggdGhlIHZhbHVlJ3Mgb3duIGB0aGVuYDogYSBuYXRpdmUgcHJvbWlzZSBpc1xuICogd2F0Y2hlZCB0aHJvdWdoIHRoZSByZWFsIGBQcm9taXNlLnByb3RvdHlwZS50aGVuYCAoYW4gb3duIGB0aGVuYCBvbiBpdCBpcyBub3QgdHJ1c3RlZCwgc28gaXRzIHJlamVjdGlvbiBpcyBhbHdheXNcbiAqIGhhbmRsZWQpLCBhbnkgb3RoZXIgdGhlbmFibGUgYWRvcHRlZCBpbnRvIGEgZnJlc2ggcHJvbWlzZS4gQSBwbGFpbiB2YWx1ZSBpcyBhIGZ1bGZpbG1lbnQuXG4gKi9cbmZ1bmN0aW9uIHNldHRsZU9uY2U8VD4odmFsdWU6IHVua25vd24sIG9uVmFsdWU6ICgpID0+IFQsIG9uRXJyb3I6IChlcnJvcjogdW5rbm93bikgPT4gVCk6IFByb21pc2U8VD4ge1xuICBjb25zdCBhZG9wdGVkOiBQcm9taXNlPHVua25vd24+ID0gdmFsdWUgaW5zdGFuY2VvZiBQcm9taXNlID8gdmFsdWUgOiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gcmVzb2x2ZSh2YWx1ZSkpO1xuICByZXR1cm4gUHJvbWlzZS5wcm90b3R5cGUudGhlbi5jYWxsKGFkb3B0ZWQsIG9uVmFsdWUsIG9uRXJyb3IpIGFzIFByb21pc2U8VD47XG59XG4iXX0=
|
|
@@ -79,7 +79,7 @@ function servedSnapshot(traverser, observers, options, sink) {
|
|
|
79
79
|
runtime.capture.limit('redaction-active');
|
|
80
80
|
return {
|
|
81
81
|
...snapshot,
|
|
82
|
-
capture: runtime.
|
|
82
|
+
capture: runtime.captureSnapshot(snapshot.commitLog.length, control, options?.redact === true),
|
|
83
83
|
};
|
|
84
84
|
}
|
|
85
85
|
return snapshot;
|
|
@@ -145,4 +145,4 @@ function collectRecorderSnapshots(observers, collected, includeCapture = false)
|
|
|
145
145
|
return out;
|
|
146
146
|
}
|
|
147
147
|
exports.collectRecorderSnapshots = collectRecorderSnapshots;
|
|
148
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic25hcHNob3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3J1bm5lci9zbmFwc2hvdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7OztHQU1HOzs7QUFHSCx5Q0FBd0M7QUFDeEMsMkNBQTZDO0FBRzdDLDhDQUEwQztBQUMxQyx3RkFBa0Y7QUFHbEYseURBQXFEO0FBS3JEOzs7O0dBSUc7QUFDSCxTQUFnQixjQUFjLENBQzVCLFNBQXVDLEVBQ3ZDLFNBQXVCLEVBQ3ZCLE9BQThCLEVBQzlCLElBQXNCO0lBRXRCLE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBb0IsQ0FBQyxDQUFDO0lBQzlFLElBQUksSUFBQSxzQkFBUyxHQUFFLEVBQUUsQ0FBQztRQUNoQixpRUFBaUU7UUFDakUsdUVBQXVFO1FBQ3ZFLHlEQUF5RDtRQUN6RCwyQkFBMkI7UUFDM0Isa0VBQWtFO1FBQ2xFLDhEQUE4RDtRQUM5RCxtRUFBbUU7UUFDbkUsc0VBQXNFO1FBQ3RFLDJEQUEyRDtRQUMzRCxRQUFRLENBQUMsV0FBVyxHQUFHLElBQUEsa0JBQVUsRUFBQyxlQUFlLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7SUFDM0UsQ0FBQztJQUNELE1BQU0sU0FBUyxHQUFHLFNBQVMsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0lBQ2hELElBQUksU0FBUyxDQUFDLElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUN2Qix3RUFBd0U7UUFDeEUsd0RBQXdEO1FBQ3hELDRFQUE0RTtRQUM1RSxRQUFRLENBQUMsY0FBYyxHQUFHLElBQUEsOENBQW9CLEVBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLEtBQUssSUFBSSxDQUFDLENBQUM7SUFDdEYsQ0FBQztJQUVELElBQUksaUJBQXFDLENBQUM7SUFDMUMsTUFBTSxZQUFZLEdBQXFDLEVBQUUsQ0FBQztJQUMxRCxNQUFNLE9B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QyxDQUFDLENBQUMsQ0FBQztRQUN4RSxLQUFLLE1BQU0sQ0FBQyxJQUFJLFNBQVMsQ0FBQyxZQUFZLENBQUMsaUJBQWlCLEVBQUU7WUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDekUsQ0FBQztJQUNELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQXJCRCw0REFxQkMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIHNuYXBzaG90IOKAlCB3aGF0IGBGbG93Q2hhcnRFeGVjdXRvci5nZXRTbmFwc2hvdCgpYCBzZXJ2ZXMgKEY5KS5cbiAqXG4gKiBUaGUgdHJhdmVyc2VyJ3MgcnVudGltZSBzbmFwc2hvdCwgcGx1cyB3aGF0IG9ubHkgdGhlIGV4ZWN1dG9yIGtub3dzOiB0aGVcbiAqIHNlcnZlZCBzdWJmbG93IHJlc3VsdHMgKGVhY2ggc3ViZmxvdydzIG93biBtaXJyb3IgdW5kZXIgYHJlZGFjdDogdHJ1ZWApLCBvbmVcbiAqIHJlY29yZGVyIHJvdyBwZXIgcmVjb3JkZXIgaWQsIGFuZCB0aGUgZGVmZXJyZWQgdGllcidzIGFjY291bnRpbmcuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBDb21taXRCdW5kbGUgfSBmcm9tICdmb290dHJhY2UnO1xuaW1wb3J0IHsgc2VydmVSZWNvcmQgfSBmcm9tICdmb290dHJhY2UnO1xuaW1wb3J0IHsgZGVlcEZyZWV6ZSB9IGZyb20gJ2Zvb3R0cmFjZS93cml0ZSc7XG5cbmltcG9ydCB0eXBlIHsgUmVjb3JkZXJDYXB0dXJlQWNrbm93bGVkZ2VtZW50IH0gZnJvbSAnLi4vY2FwdHVyZS9uYXRpdmVDb3ZlcmFnZS5qcyc7XG5pbXBvcnQgeyBpc0Rldk1vZGUgfSBmcm9tICcuLi9kZXZNb2RlLmpzJztcbmltcG9ydCB7IHNlcnZlZFN1YmZsb3dSZXN1bHRzIH0gZnJvbSAnLi4vZW5naW5lL2hhbmRsZXJzL3NlcnZlZFN1YmZsb3dSZXN1bHRzLmpzJztcbmltcG9ydCB0eXBlIHsgRmxvd1JlY29yZGVyIH0gZnJvbSAnLi4vZW5naW5lL25hcnJhdGl2ZS90eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IEZsb3djaGFydFRyYXZlcnNlciB9IGZyb20gJy4uL2VuZ2luZS90cmF2ZXJzYWwvRmxvd2NoYXJ0VHJhdmVyc2VyLmpzJztcbmltcG9ydCB7IGNvcHlCdW5kbGUgfSBmcm9tICcuLi9yZWNvcmRlci9zbmFwc2hvdC5qcyc7XG5pbXBvcnQgdHlwZSB7IFNjb3BlUmVjb3JkZXIgfSBmcm9tICcuLi9zY29wZS90eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IFJ1bk9ic2VydmVycyB9IGZyb20gJy4vYXR0YWNoLmpzJztcbmltcG9ydCB0eXBlIHsgUmVjb3JkZXJTbmFwc2hvdCwgUmVjb3JkU2lua1N0YXRzLCBSdW50aW1lU25hcHNob3QgfSBmcm9tICcuL0V4ZWN1dGlvblJ1bnRpbWUuanMnO1xuXG4vKipcbiAqIFRoZSBzZXJ2ZWQgc25hcHNob3QuIGBzaGFyZWRTdGF0ZWAgaXMgdGhlIExJVkUgdmlldyBpbiBwcm9kdWN0aW9uICh6ZXJvXG4gKiBjb3B5KTsgaW4gZGV2IG1vZGUgaXQgaXMgYSBkZWVwLWZyb3plbiBDTE9ORSwgc28gYSBjb25zdW1lciBtdXRhdGlvbiB0aHJvd3NcbiAqIGluc3RlYWQgb2YgY29ycnVwdGluZyBlbmdpbmUgc3RhdGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXJ2ZWRTbmFwc2hvdChcbiAgdHJhdmVyc2VyOiBGbG93Y2hhcnRUcmF2ZXJzZXI8YW55LCBhbnk+LFxuICBvYnNlcnZlcnM6IFJ1bk9ic2VydmVycyxcbiAgb3B0aW9ucz86IHsgcmVkYWN0PzogYm9vbGVhbiB9LFxuICBzaW5rPzogUmVjb3JkU2lua1N0YXRzLFxuKTogUnVudGltZVNuYXBzaG90IHtcbiAgY29uc3Qgc25hcHNob3QgPSBzZXJ2ZWRMb2codHJhdmVyc2VyLmdldFNuYXBzaG90KG9wdGlvbnMpIGFzIFJ1bnRpbWVTbmFwc2hvdCk7XG4gIGlmIChpc0Rldk1vZGUoKSkge1xuICAgIC8vIERldi1tb2RlIG11dGF0aW9uIGd1YXJkOiBmcmVlemUgYSBDTE9ORSwgbmV2ZXIgdGhlIGxpdmUgZW5naW5lXG4gICAgLy8gc3RhdGUg4oCUIGBzbmFwc2hvdC5zaGFyZWRTdGF0ZWAgSVMgU2hhcmVkTWVtb3J5J3MgY3VycmVudCBnZW5lcmF0aW9uLFxuICAgIC8vIHdob3NlIHVuY2hhbmdlZCBzdWJ0cmVlcyBldmVyeSBsYXRlciBnZW5lcmF0aW9uIHNoYXJlc1xuICAgIC8vIChjb3B5LW9uLXdyaXRlLCA5LjI5LjApLlxuICAgIC8vIFByb2R1Y3Rpb24gc3RheXMgemVyby1jb3B5OyBjbG9uZS1hbHdheXMgaXMgYSBtZWFzdXJlZCBkZWNpc2lvblxuICAgIC8vIGRlZmVycmVkIHVudGlsIHRoZSBiZW5jaCBzYXlzIGl0J3MgYWZmb3JkYWJsZSAoQkFDS0xPRyAjOCkuXG4gICAgLy8gTk9URTogZGVlcEZyZWV6ZSAoY2FwdHVyZS9mcmVlemUudHMg4oCUIHRoZSBvbmUgd2FsaykgY2Fubm90IHJlYWNoXG4gICAgLy8gTWFwL1NldCBJTlRFUk5BTFMgKGBtYXAuc2V0KClgIG9uIHRoZSBmcm96ZW4gY2xvbmUgd29uJ3QgdGhyb3cpIGFuZFxuICAgIC8vIHNraXBzIHR5cGVkIGFycmF5cy4gVGhlIENMT05FIHN0aWxsIGlzb2xhdGVzIHRoZSBlbmdpbmUuXG4gICAgc25hcHNob3Quc2hhcmVkU3RhdGUgPSBkZWVwRnJlZXplKHN0cnVjdHVyZWRDbG9uZShzbmFwc2hvdC5zaGFyZWRTdGF0ZSkpO1xuICB9XG4gIGNvbnN0IHNmUmVzdWx0cyA9IHRyYXZlcnNlci5nZXRTdWJmbG93UmVzdWx0cygpO1xuICBpZiAoc2ZSZXN1bHRzLnNpemUgPiAwKSB7XG4gICAgLy8gVW5kZXIgYHJlZGFjdDogdHJ1ZWAgZWFjaCBzdWJmbG93J3MgYGdsb2JhbENvbnRleHRgIGlzIGl0cyBvd24gbWlycm9yXG4gICAgLy8gKDkuMjAuMCkg4oCUIHNlcnZlZCwgbmV2ZXIgd3JpdHRlbiBpbnRvIHRoZSByZWNvcmQgKHNlZVxuICAgIC8vIGVuZ2luZS9oYW5kbGVycy9zZXJ2ZWRTdWJmbG93UmVzdWx0cy50cykuIFBsYWluOiB0aGUgcmVjb3JkcyBhcyB0aGV5IGFyZS5cbiAgICBzbmFwc2hvdC5zdWJmbG93UmVzdWx0cyA9IHNlcnZlZFN1YmZsb3dSZXN1bHRzKHNmUmVzdWx0cywgb3B0aW9ucz8ucmVkYWN0ID09PSB0cnVlKTtcbiAgfVxuXG4gIGxldCByZWNvcmRlclNuYXBzaG90czogUmVjb3JkZXJTbmFwc2hvdFtdO1xuICBjb25zdCBhY2tub3dsZWRnZWQ6IFJlY29yZGVyQ2FwdHVyZUFja25vd2xlZGdlbWVudFtdID0gW107XG4gIGNvbnN0IHJ1bnRpbWUgPSB0cmF2ZXJzZXIuZ2V0UnVudGltZSgpIGFzIGltcG9ydCgnLi9FeGVjdXRpb25SdW50aW1lLmpzJykuRXhlY3V0aW9uUnVudGltZTtcbiAgY29uc3QgaW5saW5lRmxvdyA9IHJ1bnRpbWUuY2FwdHVyZSA/IG5ldyBTZXQob2JzZXJ2ZXJzLmZsb3dSZWNvcmRlcnMpIDogdW5kZWZpbmVkO1xuICB0cnkge1xuICAgIHJlY29yZGVyU25hcHNob3RzID0gY29sbGVjdFJlY29yZGVyU25hcHNob3RzKFxuICAgICAgb2JzZXJ2ZXJzLFxuICAgICAgaW5saW5lRmxvdyAmJlxuICAgICAgICAoKHJlY29yZGVyLCByb3cpID0+IHtcbiAgICAgICAgICBpZiAoaW5saW5lRmxvdy5oYXMocmVjb3JkZXIgYXMgRmxvd1JlY29yZGVyKSAmJiByb3cuY2FwdHVyZT8ucnVuSWQgPT09IHNuYXBzaG90LnJ1bklkKVxuICAgICAgICAgICAgYWNrbm93bGVkZ2VkLnB1c2gocm93LmNhcHR1cmUpO1xuICAgICAgICB9KSxcbiAgICAgIHJ1bnRpbWUuY2FwdHVyZSAhPT0gdW5kZWZpbmVkLFxuICAgICk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcnVudGltZS5jYXB0dXJlPy5saW1pdCgncmVjb3JkZXItc25hcHNob3QtZmFpbGVkJyk7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbiAgaWYgKHJlY29yZGVyU25hcHNob3RzLmxlbmd0aCA+IDApIHtcbiAgICBzbmFwc2hvdC5yZWNvcmRlcnMgPSByZWNvcmRlclNuYXBzaG90cztcbiAgfVxuXG4gIC8vIFJGQy0wMDEgQmxvY2sgOTogdGhlIGRlZmVycmVkLW9ic2VydmVyIGFjY291bnRpbmcgc3VyZmFjZS4gUHJlc2VudFxuICAvLyBPTkxZIHdoZW4gYSBkZWZlcnJlZCBvYnNlcnZlciB3YXMgYXR0YWNoZWQgb24gdGhpcyBleGVjdXRvciDigJRcbiAgLy8gemVyby1jb3N0IGRpc2NpcGxpbmUgZm9yIGV2ZXJ5b25lIGVsc2UuXG4gIGlmIChvYnNlcnZlcnMuZGVmZXJyZWRUaWVyKSB7XG4gICAgc25hcHNob3Qub2JzZXJ2ZXJTdGF0cyA9IG9ic2VydmVycy5kZWZlcnJlZFRpZXIuZ2V0U3RhdHMoKTtcbiAgfVxuXG4gIC8vIFRoZSBjcmFzaC1zYWZlIHJlY29yZCdzIGFjY291bnRpbmcgKDEwLjEsIFA2KTogcHJlc2VudCBPTkxZIGZvciBhbiBleGVjdXRvciBidWlsdCB3aXRoIGEgYHNpbmtgLCBvbmNlIGEgcnVuXG4gIC8vIHN0YXJ0ZWQuXG4gIGlmIChzaW5rICE9PSB1bmRlZmluZWQpIHNuYXBzaG90LnNpbmsgPSBzaW5rO1xuXG4gIGlmIChydW50aW1lLmNhcHR1cmUpIHtcbiAgICBjb25zdCBjb250cm9sID1cbiAgICAgIGFja25vd2xlZGdlZC5sZW5ndGggPT09IDBcbiAgICAgICAgPyAndW5rbm93bidcbiAgICAgICAgOiBhY2tub3dsZWRnZWQuZXZlcnkoKGFjaykgPT4gYWNrLmNvbnRyb2wgPT09ICdjYXB0dXJlZCcpXG4gICAgICAgID8gJ2NhcHR1cmVkJ1xuICAgICAgICA6IGFja25vd2xlZGdlZC5zb21lKChhY2spID0+IGFjay5jb250cm9sID09PSAncGFydGlhbCcpXG4gICAgICAgID8gJ3BhcnRpYWwnXG4gICAgICAgIDogJ3Vua25vd24nO1xuICAgIGlmIChydW50aW1lLnJvb3RTdGFnZUNvbnRleHQuZ2V0UG9saWN5KCkucmVkYWN0aW9uPy5pc0luZXJ0KCkgPT09IGZhbHNlKSBydW50aW1lLmNhcHR1cmUubGltaXQoJ3JlZGFjdGlvbi1hY3RpdmUnKTtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc25hcHNob3QsXG4gICAgICBjYXB0dXJlOiBydW50aW1lLmNhcHR1cmUuc25hcHNob3Qoc25hcHNob3QuY29tbWl0TG9nLmxlbmd0aCwgY29udHJvbCwgb3B0aW9ucz8ucmVkYWN0ID09PSB0cnVlKSxcbiAgICB9O1xuICB9XG4gIHJldHVybiBzbmFwc2hvdDtcbn1cblxuLyoqXG4gKiBUaGUgY29tbWl0IGxvZyBhbmQgdGhlIGZvbGQgYmFzZSBhcyBhIHJlYWRlciBtYXkgaG9sZCB0aGVtICg5LjQ0LjIpOiBhIHJlY29yZCBmcmVlemluZyBzZWFsZWQgd2hvbGVcbiAqIGlzIHNlcnZlZCBhcyBpdHNlbGY7IG9uZSBob2xkaW5nIHdoYXQgZnJlZXppbmcgY2Fubm90IHNlYWwg4oCUIGEgRGF0ZSwgYSBNYXAsIGEgYnVmZmVyIOKApiDigJQgYXMgYSBjb3B5XG4gKiBvZiBpdHMgb3BlbiBwYXRocywgdGhlIHJlYWRlcidzIG93biAoYGNhcHR1cmUvZnJlZXplLnRzIMK3IHNlcnZlUmVjb3JkYCkuIEhlcmUsIGF0IHRoZSBwdWJsaWMgZG9vcjpcbiAqIHRoZSBlbmdpbmUncyBvd24gc25hcHNob3Qgb2YgYSBsb2cgKGEgc3ViZmxvdyBtb3VudCdzKSBpcyBub3Qgc2VydmVkLCBzbyB0aGUgcnVuIHBheXMgbm90aGluZy5cbiAqL1xuZnVuY3Rpb24gc2VydmVkTG9nKHNuYXBzaG90OiBSdW50aW1lU25hcHNob3QpOiBSdW50aW1lU25hcHNob3Qge1xuICBjb25zdCB7IGluaXRpYWxTdGF0ZSB9ID0gc25hcHNob3Q7XG4gIHJldHVybiB7XG4gICAgLi4uc25hcHNob3QsXG4gICAgY29tbWl0TG9nOiBPYmplY3QuZnJlZXplKHNuYXBzaG90LmNvbW1pdExvZy5tYXAoc2VydmVSZWNvcmQpKSBhcyBDb21taXRCdW5kbGVbXSxcbiAgICAuLi4oaW5pdGlhbFN0YXRlID09PSB1bmRlZmluZWQgPyB7fSA6IHsgaW5pdGlhbFN0YXRlOiBzZXJ2ZVJlY29yZChpbml0aWFsU3RhdGUpIH0pLFxuICB9O1xufVxuXG4vKipcbiAqIENvbGxlY3QgYHRvU25hcHNob3QoKWAgYnVuZGxlcyBmcm9tIGV2ZXJ5IGF0dGFjaGVkIHJlY29yZGVyIOKAlCBPTkUgZW50cnlcbiAqIHBlciByZWNvcmRlciBpZCwgYWNyb3NzIGFsbCBjaGFubmVscyBhbmQgYm90aCBkZWxpdmVyeSB0aWVycy5cbiAqXG4gKiBUaGUgZGVkdXBlIGlzIGxvYWQtYmVhcmluZywgbm90IHRpZGluZXNzLiBBIHJlY29yZGVyIHRoYXQgaW1wbGVtZW50cyBhXG4gKiBzaGFyZWQtbmFtZSBob29rIChgb25FcnJvcmAgLyBgb25QYXVzZWAgLyBgb25SZXN1bWVgIOKAlCBkZWNsYXJlZCBvbiBCT1RIXG4gKiB0aGUgc2NvcGUgYW5kIGZsb3cgaW50ZXJmYWNlcykgaXMgbGVnaXRpbWF0ZWx5IHJlZ2lzdGVyZWQgb24gQk9USCBpbmxpbmVcbiAqIGxpc3RzIGJ5IGBhdHRhY2hDb21iaW5lZFJlY29yZGVyYCwgYW5kIHRoYXQgaXMgYnkgZGVzaWduOiBlYWNoIGNoYW5uZWxcbiAqIGNhbGxzIHRoZSBob29rIHdpdGggaXRzIG93biBwYXlsb2FkIHZhcmlhbnQuIGBNZXRyaWNSZWNvcmRlci5vblBhdXNlYCBpc1xuICogdGhlIGV2ZXJ5ZGF5IGNhc2UuIFdhbGtpbmcgdGhlIGxpc3RzIHdpdGhvdXQgYSBzaGFyZWQgYHNlZW5gIHNldCB0dXJuZWRcbiAqIHRoYXQgaW50byBhIERVUExJQ0FURUQgc25hcHNob3QgZW50cnkgKHNhbWUgaWQgdHdpY2UpLCB3aGljaCBicmVha3MgZXZlcnlcbiAqIGNvbnN1bWVyIHRoYXQgaW5kZXhlcyBgc25hcHNob3QucmVjb3JkZXJzYCBieSBpZC5cbiAqXG4gKiBPcmRlcmluZyBpcyBzY29wZSBsaXN0IOKGkiBmbG93IGxpc3Qg4oaSIGRlZmVycmVkIHRpZXIsIGFuZCB0aGUgRklSU1QgYnVuZGxlXG4gKiBmb3IgYW4gaWQgd2lucy4gQSByZWNvcmRlciB3aXRoIG5vIGB0b1NuYXBzaG90YCBuZXZlciBjbGFpbXMgYW4gaWQsIHNvIGl0XG4gKiBjYW5ub3Qgc2hhZG93IGEgc2FtZS1pZCByZWNvcmRlciB0aGF0IGRvZXMgaGF2ZSBvbmUuXG4gKlxuICogVGhlIHJvdyBpcyBSRUJVSUxUIGZpZWxkIGJ5IGZpZWxkIGJ5IHRoZSBvbmUgY29waWVyIChgcmVjb3JkZXIvc25hcHNob3QudHNcbiAqIMK3IGNvcHlCdW5kbGVgLCBzaGFyZWQgd2l0aCBgQ29tcG9zaXRlUmVjb3JkZXJgKSByYXRoZXIgdGhhbiBzcHJlYWQsIHNvIGFcbiAqIHJlY29yZGVyIGNhbm5vdCBzbXVnZ2xlIGFuIGBpZGAgb2YgaXRzIG93biBjaG9vc2luZyBpbnRvIHRoZSBzbmFwc2hvdCAodGhlXG4gKiBpZCBpcyB0aGUgZXhlY3V0b3IncywgYW5kIGNvbnN1bWVycyBpbmRleCBieSBpdCkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb2xsZWN0UmVjb3JkZXJTbmFwc2hvdHMoXG4gIG9ic2VydmVyczogUnVuT2JzZXJ2ZXJzLFxuICBjb2xsZWN0ZWQ/OiAocmVjb3JkZXI6IFNjb3BlUmVjb3JkZXIgfCBGbG93UmVjb3JkZXIsIHJvdzogUmVjb3JkZXJTbmFwc2hvdCkgPT4gdm9pZCxcbiAgaW5jbHVkZUNhcHR1cmUgPSBmYWxzZSxcbik6IFJlY29yZGVyU25hcHNob3RbXSB7XG4gIGNvbnN0IG91dDogUmVjb3JkZXJTbmFwc2hvdFtdID0gW107XG4gIGNvbnN0IHNlZW4gPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgY29uc3QgY29sbGVjdCA9IChyOiBTY29wZVJlY29yZGVyIHwgRmxvd1JlY29yZGVyKTogdm9pZCA9PiB7XG4gICAgaWYgKCFyLnRvU25hcHNob3QgfHwgc2Vlbi5oYXMoci5pZCkpIHJldHVybjtcbiAgICBzZWVuLmFkZChyLmlkKTtcbiAgICBjb25zdCByb3cgPSBjb3B5QnVuZGxlKHIuaWQsIHIudG9TbmFwc2hvdCgpLCBpbmNsdWRlQ2FwdHVyZSk7XG4gICAgb3V0LnB1c2gocm93KTtcbiAgICBjb2xsZWN0ZWQ/LihyLCByb3cpO1xuICB9O1xuICBmb3IgKGNvbnN0IHIgb2Ygb2JzZXJ2ZXJzLnNjb3BlUmVjb3JkZXJzKSBjb2xsZWN0KHIpO1xuICBmb3IgKGNvbnN0IHIgb2Ygb2JzZXJ2ZXJzLmZsb3dSZWNvcmRlcnMpIGNvbGxlY3Qocik7XG4gIGlmIChvYnNlcnZlcnMuZGVmZXJyZWRUaWVyKSB7XG4gICAgZm9yIChjb25zdCByIG9mIG9ic2VydmVycy5kZWZlcnJlZFRpZXIuc2NvcGVMaXN0UmVjb3JkZXJzKCkpIGNvbGxlY3Qocik7XG4gICAgZm9yIChjb25zdCByIG9mIG9ic2VydmVycy5kZWZlcnJlZFRpZXIuZmxvd0xpc3RSZWNvcmRlcnMoKSkgY29sbGVjdChyKTtcbiAgfVxuICByZXR1cm4gb3V0O1xufVxuIl19
|
|
148
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic25hcHNob3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3J1bm5lci9zbmFwc2hvdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7OztHQU1HOzs7QUFHSCx5Q0FBd0M7QUFDeEMsMkNBQTZDO0FBRzdDLDhDQUEwQztBQUMxQyx3RkFBa0Y7QUFHbEYseURBQXFEO0FBS3JEOzs7O0dBSUc7QUFDSCxTQUFnQixjQUFjLENBQzVCLFNBQXVDLEVBQ3ZDLFNBQXVCLEVBQ3ZCLE9BQThCLEVBQzlCLElBQXNCO0lBRXRCLE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBb0IsQ0FBQyxDQUFDO0lBQzlFLElBQUksSUFBQSxzQkFBUyxHQUFFLEVBQUUsQ0FBQztRQUNoQixpRUFBaUU7UUFDakUsdUVBQXVFO1FBQ3ZFLHlEQUF5RDtRQUN6RCwyQkFBMkI7UUFDM0Isa0VBQWtFO1FBQ2xFLDhEQUE4RDtRQUM5RCxtRUFBbUU7UUFDbkUsc0VBQXNFO1FBQ3RFLDJEQUEyRDtRQUMzRCxRQUFRLENBQUMsV0FBVyxHQUFHLElBQUEsa0JBQVUsRUFBQyxlQUFlLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7SUFDM0UsQ0FBQztJQUNELE1BQU0sU0FBUyxHQUFHLFNBQVMsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0lBQ2hELElBQUksU0FBUyxDQUFDLElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUN2Qix3RUFBd0U7UUFDeEUsd0RBQXdEO1FBQ3hELDRFQUE0RTtRQUM1RSxRQUFRLENBQUMsY0FBYyxHQUFHLElBQUEsOENBQW9CLEVBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLEtBQUssSUFBSSxDQUFDLENBQUM7SUFDdEYsQ0FBQztJQUVELElBQUksaUJBQXFDLENBQUM7SUFDMUMsTUFBTSxZQUFZLEdBQXFDLEVBQUUsQ0FBQztJQUMxRCxNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsVUFBVSxFQUFzRCxDQUFDO0lBQzNGLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQ2xGLElBQUksQ0FBQztRQUNILGlCQUFpQixHQUFHLHdCQUF3QixDQUMxQyxTQUFTLEVBQ1QsVUFBVTtZQUNSLENBQUMsQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFLEVBQUU7Z0JBQ2pCLElBQUksVUFBVSxDQUFDLEdBQUcsQ0FBQyxRQUF3QixDQUFDLElBQUksR0FBRyxDQUFDLE9BQU8sRUFBRSxLQUFLLEtBQUssUUFBUSxDQUFDLEtBQUs7b0JBQ25GLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ25DLENBQUMsQ0FBQyxFQUNKLE9BQU8sQ0FBQyxPQUFPLEtBQUssU0FBUyxDQUM5QixDQUFDO0lBQ0osQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZixPQUFPLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1FBQ25ELE1BQU0sS0FBSyxDQUFDO0lBQ2QsQ0FBQztJQUNELElBQUksaUJBQWlCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ2pDLFFBQVEsQ0FBQyxTQUFTLEdBQUcsaUJBQWlCLENBQUM7SUFDekMsQ0FBQztJQUVELHFFQUFxRTtJQUNyRSxnRUFBZ0U7SUFDaEUsMENBQTBDO0lBQzFDLElBQUksU0FBUyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzNCLFFBQVEsQ0FBQyxhQUFhLEdBQUcsU0FBUyxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUM3RCxDQUFDO0lBRUQsOEdBQThHO0lBQzlHLFdBQVc7SUFDWCxJQUFJLElBQUksS0FBSyxTQUFTO1FBQUUsUUFBUSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7SUFFN0MsSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDcEIsTUFBTSxPQUFPLEdBQ1gsWUFBWSxDQUFDLE1BQU0sS0FBSyxDQUFDO1lBQ3ZCLENBQUMsQ0FBQyxTQUFTO1lBQ1gsQ0FBQyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEtBQUssVUFBVSxDQUFDO2dCQUN6RCxDQUFDLENBQUMsVUFBVTtnQkFDWixDQUFDLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLE9BQU8sS0FBSyxTQUFTLENBQUM7b0JBQ3ZELENBQUMsQ0FBQyxTQUFTO29CQUNYLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDaEIsSUFBSSxPQUFPLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLENBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRSxLQUFLLEtBQUs7WUFBRSxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ25ILE9BQU87WUFDTCxHQUFHLFFBQVE7WUFDWCxPQUFPLEVBQUUsT0FBTyxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sS0FBSyxJQUFJLENBQUM7U0FDL0YsQ0FBQztJQUNKLENBQUM7SUFDRCxPQUFPLFFBQVEsQ0FBQztBQUNsQixDQUFDO0FBNUVELHdDQTRFQztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBUyxTQUFTLENBQUMsUUFBeUI7SUFDMUMsTUFBTSxFQUFFLFlBQVksRUFBRSxHQUFHLFFBQVEsQ0FBQztJQUNsQyxPQUFPO1FBQ0wsR0FBRyxRQUFRO1FBQ1gsU0FBUyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsdUJBQVcsQ0FBQyxDQUFtQjtRQUMvRSxHQUFHLENBQUMsWUFBWSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLFlBQVksRUFBRSxJQUFBLHVCQUFXLEVBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQztLQUNuRixDQUFDO0FBQ0osQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FxQkc7QUFDSCxTQUFnQix3QkFBd0IsQ0FDdEMsU0FBdUIsRUFDdkIsU0FBbUYsRUFDbkYsY0FBYyxHQUFHLEtBQUs7SUFFdEIsTUFBTSxHQUFHLEdBQXVCLEVBQUUsQ0FBQztJQUNuQyxNQUFNLElBQUksR0FBRyxJQUFJLEdBQUcsRUFBVSxDQUFDO0lBQy9CLE1BQU0sT0FBTyxHQUFHLENBQUMsQ0FBK0IsRUFBUSxFQUFFO1FBQ3hELElBQUksQ0FBQyxDQUFDLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUFFLE9BQU87UUFDNUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDZixNQUFNLEdBQUcsR0FBRyxJQUFBLHdCQUFVLEVBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFDN0QsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNkLFNBQVMsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUN0QixDQUFDLENBQUM7SUFDRixLQUFLLE1BQU0sQ0FBQyxJQUFJLFNBQVMsQ0FBQyxjQUFjO1FBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JELEtBQUssTUFBTSxDQUFDLElBQUksU0FBUyxDQUFDLGFBQWE7UUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEQsSUFBSSxTQUFTLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDM0IsS0FBSyxNQUFNLENBQUMsSUFBSSxTQUFTLENBQUMsWUFBWSxDQUFDLGtCQUFrQixFQUFFO1lBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hFLEtBQUssTUFBTSxDQUFDLElBQUksU0FBUyxDQUFDLFlBQVksQ0FBQyxpQkFBaUIsRUFBRTtZQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN6RSxDQUFDO0lBQ0QsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBckJELDREQXFCQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogc25hcHNob3Qg4oCUIHdoYXQgYEZsb3dDaGFydEV4ZWN1dG9yLmdldFNuYXBzaG90KClgIHNlcnZlcyAoRjkpLlxuICpcbiAqIFRoZSB0cmF2ZXJzZXIncyBydW50aW1lIHNuYXBzaG90LCBwbHVzIHdoYXQgb25seSB0aGUgZXhlY3V0b3Iga25vd3M6IHRoZVxuICogc2VydmVkIHN1YmZsb3cgcmVzdWx0cyAoZWFjaCBzdWJmbG93J3Mgb3duIG1pcnJvciB1bmRlciBgcmVkYWN0OiB0cnVlYCksIG9uZVxuICogcmVjb3JkZXIgcm93IHBlciByZWNvcmRlciBpZCwgYW5kIHRoZSBkZWZlcnJlZCB0aWVyJ3MgYWNjb3VudGluZy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IENvbW1pdEJ1bmRsZSB9IGZyb20gJ2Zvb3R0cmFjZSc7XG5pbXBvcnQgeyBzZXJ2ZVJlY29yZCB9IGZyb20gJ2Zvb3R0cmFjZSc7XG5pbXBvcnQgeyBkZWVwRnJlZXplIH0gZnJvbSAnZm9vdHRyYWNlL3dyaXRlJztcblxuaW1wb3J0IHR5cGUgeyBSZWNvcmRlckNhcHR1cmVBY2tub3dsZWRnZW1lbnQgfSBmcm9tICcuLi9jYXB0dXJlL25hdGl2ZUNvdmVyYWdlLmpzJztcbmltcG9ydCB7IGlzRGV2TW9kZSB9IGZyb20gJy4uL2Rldk1vZGUuanMnO1xuaW1wb3J0IHsgc2VydmVkU3ViZmxvd1Jlc3VsdHMgfSBmcm9tICcuLi9lbmdpbmUvaGFuZGxlcnMvc2VydmVkU3ViZmxvd1Jlc3VsdHMuanMnO1xuaW1wb3J0IHR5cGUgeyBGbG93UmVjb3JkZXIgfSBmcm9tICcuLi9lbmdpbmUvbmFycmF0aXZlL3R5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgRmxvd2NoYXJ0VHJhdmVyc2VyIH0gZnJvbSAnLi4vZW5naW5lL3RyYXZlcnNhbC9GbG93Y2hhcnRUcmF2ZXJzZXIuanMnO1xuaW1wb3J0IHsgY29weUJ1bmRsZSB9IGZyb20gJy4uL3JlY29yZGVyL3NuYXBzaG90LmpzJztcbmltcG9ydCB0eXBlIHsgU2NvcGVSZWNvcmRlciB9IGZyb20gJy4uL3Njb3BlL3R5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgUnVuT2JzZXJ2ZXJzIH0gZnJvbSAnLi9hdHRhY2guanMnO1xuaW1wb3J0IHR5cGUgeyBSZWNvcmRlclNuYXBzaG90LCBSZWNvcmRTaW5rU3RhdHMsIFJ1bnRpbWVTbmFwc2hvdCB9IGZyb20gJy4vRXhlY3V0aW9uUnVudGltZS5qcyc7XG5cbi8qKlxuICogVGhlIHNlcnZlZCBzbmFwc2hvdC4gYHNoYXJlZFN0YXRlYCBpcyB0aGUgTElWRSB2aWV3IGluIHByb2R1Y3Rpb24gKHplcm9cbiAqIGNvcHkpOyBpbiBkZXYgbW9kZSBpdCBpcyBhIGRlZXAtZnJvemVuIENMT05FLCBzbyBhIGNvbnN1bWVyIG11dGF0aW9uIHRocm93c1xuICogaW5zdGVhZCBvZiBjb3JydXB0aW5nIGVuZ2luZSBzdGF0ZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlcnZlZFNuYXBzaG90KFxuICB0cmF2ZXJzZXI6IEZsb3djaGFydFRyYXZlcnNlcjxhbnksIGFueT4sXG4gIG9ic2VydmVyczogUnVuT2JzZXJ2ZXJzLFxuICBvcHRpb25zPzogeyByZWRhY3Q/OiBib29sZWFuIH0sXG4gIHNpbms/OiBSZWNvcmRTaW5rU3RhdHMsXG4pOiBSdW50aW1lU25hcHNob3Qge1xuICBjb25zdCBzbmFwc2hvdCA9IHNlcnZlZExvZyh0cmF2ZXJzZXIuZ2V0U25hcHNob3Qob3B0aW9ucykgYXMgUnVudGltZVNuYXBzaG90KTtcbiAgaWYgKGlzRGV2TW9kZSgpKSB7XG4gICAgLy8gRGV2LW1vZGUgbXV0YXRpb24gZ3VhcmQ6IGZyZWV6ZSBhIENMT05FLCBuZXZlciB0aGUgbGl2ZSBlbmdpbmVcbiAgICAvLyBzdGF0ZSDigJQgYHNuYXBzaG90LnNoYXJlZFN0YXRlYCBJUyBTaGFyZWRNZW1vcnkncyBjdXJyZW50IGdlbmVyYXRpb24sXG4gICAgLy8gd2hvc2UgdW5jaGFuZ2VkIHN1YnRyZWVzIGV2ZXJ5IGxhdGVyIGdlbmVyYXRpb24gc2hhcmVzXG4gICAgLy8gKGNvcHktb24td3JpdGUsIDkuMjkuMCkuXG4gICAgLy8gUHJvZHVjdGlvbiBzdGF5cyB6ZXJvLWNvcHk7IGNsb25lLWFsd2F5cyBpcyBhIG1lYXN1cmVkIGRlY2lzaW9uXG4gICAgLy8gZGVmZXJyZWQgdW50aWwgdGhlIGJlbmNoIHNheXMgaXQncyBhZmZvcmRhYmxlIChCQUNLTE9HICM4KS5cbiAgICAvLyBOT1RFOiBkZWVwRnJlZXplIChjYXB0dXJlL2ZyZWV6ZS50cyDigJQgdGhlIG9uZSB3YWxrKSBjYW5ub3QgcmVhY2hcbiAgICAvLyBNYXAvU2V0IElOVEVSTkFMUyAoYG1hcC5zZXQoKWAgb24gdGhlIGZyb3plbiBjbG9uZSB3b24ndCB0aHJvdykgYW5kXG4gICAgLy8gc2tpcHMgdHlwZWQgYXJyYXlzLiBUaGUgQ0xPTkUgc3RpbGwgaXNvbGF0ZXMgdGhlIGVuZ2luZS5cbiAgICBzbmFwc2hvdC5zaGFyZWRTdGF0ZSA9IGRlZXBGcmVlemUoc3RydWN0dXJlZENsb25lKHNuYXBzaG90LnNoYXJlZFN0YXRlKSk7XG4gIH1cbiAgY29uc3Qgc2ZSZXN1bHRzID0gdHJhdmVyc2VyLmdldFN1YmZsb3dSZXN1bHRzKCk7XG4gIGlmIChzZlJlc3VsdHMuc2l6ZSA+IDApIHtcbiAgICAvLyBVbmRlciBgcmVkYWN0OiB0cnVlYCBlYWNoIHN1YmZsb3cncyBgZ2xvYmFsQ29udGV4dGAgaXMgaXRzIG93biBtaXJyb3JcbiAgICAvLyAoOS4yMC4wKSDigJQgc2VydmVkLCBuZXZlciB3cml0dGVuIGludG8gdGhlIHJlY29yZCAoc2VlXG4gICAgLy8gZW5naW5lL2hhbmRsZXJzL3NlcnZlZFN1YmZsb3dSZXN1bHRzLnRzKS4gUGxhaW46IHRoZSByZWNvcmRzIGFzIHRoZXkgYXJlLlxuICAgIHNuYXBzaG90LnN1YmZsb3dSZXN1bHRzID0gc2VydmVkU3ViZmxvd1Jlc3VsdHMoc2ZSZXN1bHRzLCBvcHRpb25zPy5yZWRhY3QgPT09IHRydWUpO1xuICB9XG5cbiAgbGV0IHJlY29yZGVyU25hcHNob3RzOiBSZWNvcmRlclNuYXBzaG90W107XG4gIGNvbnN0IGFja25vd2xlZGdlZDogUmVjb3JkZXJDYXB0dXJlQWNrbm93bGVkZ2VtZW50W10gPSBbXTtcbiAgY29uc3QgcnVudGltZSA9IHRyYXZlcnNlci5nZXRSdW50aW1lKCkgYXMgaW1wb3J0KCcuL0V4ZWN1dGlvblJ1bnRpbWUuanMnKS5FeGVjdXRpb25SdW50aW1lO1xuICBjb25zdCBpbmxpbmVGbG93ID0gcnVudGltZS5jYXB0dXJlID8gbmV3IFNldChvYnNlcnZlcnMuZmxvd1JlY29yZGVycykgOiB1bmRlZmluZWQ7XG4gIHRyeSB7XG4gICAgcmVjb3JkZXJTbmFwc2hvdHMgPSBjb2xsZWN0UmVjb3JkZXJTbmFwc2hvdHMoXG4gICAgICBvYnNlcnZlcnMsXG4gICAgICBpbmxpbmVGbG93ICYmXG4gICAgICAgICgocmVjb3JkZXIsIHJvdykgPT4ge1xuICAgICAgICAgIGlmIChpbmxpbmVGbG93LmhhcyhyZWNvcmRlciBhcyBGbG93UmVjb3JkZXIpICYmIHJvdy5jYXB0dXJlPy5ydW5JZCA9PT0gc25hcHNob3QucnVuSWQpXG4gICAgICAgICAgICBhY2tub3dsZWRnZWQucHVzaChyb3cuY2FwdHVyZSk7XG4gICAgICAgIH0pLFxuICAgICAgcnVudGltZS5jYXB0dXJlICE9PSB1bmRlZmluZWQsXG4gICAgKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBydW50aW1lLmNhcHR1cmU/LmxpbWl0KCdyZWNvcmRlci1zbmFwc2hvdC1mYWlsZWQnKTtcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxuICBpZiAocmVjb3JkZXJTbmFwc2hvdHMubGVuZ3RoID4gMCkge1xuICAgIHNuYXBzaG90LnJlY29yZGVycyA9IHJlY29yZGVyU25hcHNob3RzO1xuICB9XG5cbiAgLy8gUkZDLTAwMSBCbG9jayA5OiB0aGUgZGVmZXJyZWQtb2JzZXJ2ZXIgYWNjb3VudGluZyBzdXJmYWNlLiBQcmVzZW50XG4gIC8vIE9OTFkgd2hlbiBhIGRlZmVycmVkIG9ic2VydmVyIHdhcyBhdHRhY2hlZCBvbiB0aGlzIGV4ZWN1dG9yIOKAlFxuICAvLyB6ZXJvLWNvc3QgZGlzY2lwbGluZSBmb3IgZXZlcnlvbmUgZWxzZS5cbiAgaWYgKG9ic2VydmVycy5kZWZlcnJlZFRpZXIpIHtcbiAgICBzbmFwc2hvdC5vYnNlcnZlclN0YXRzID0gb2JzZXJ2ZXJzLmRlZmVycmVkVGllci5nZXRTdGF0cygpO1xuICB9XG5cbiAgLy8gVGhlIGNyYXNoLXNhZmUgcmVjb3JkJ3MgYWNjb3VudGluZyAoMTAuMSwgUDYpOiBwcmVzZW50IE9OTFkgZm9yIGFuIGV4ZWN1dG9yIGJ1aWx0IHdpdGggYSBgc2lua2AsIG9uY2UgYSBydW5cbiAgLy8gc3RhcnRlZC5cbiAgaWYgKHNpbmsgIT09IHVuZGVmaW5lZCkgc25hcHNob3Quc2luayA9IHNpbms7XG5cbiAgaWYgKHJ1bnRpbWUuY2FwdHVyZSkge1xuICAgIGNvbnN0IGNvbnRyb2wgPVxuICAgICAgYWNrbm93bGVkZ2VkLmxlbmd0aCA9PT0gMFxuICAgICAgICA/ICd1bmtub3duJ1xuICAgICAgICA6IGFja25vd2xlZGdlZC5ldmVyeSgoYWNrKSA9PiBhY2suY29udHJvbCA9PT0gJ2NhcHR1cmVkJylcbiAgICAgICAgPyAnY2FwdHVyZWQnXG4gICAgICAgIDogYWNrbm93bGVkZ2VkLnNvbWUoKGFjaykgPT4gYWNrLmNvbnRyb2wgPT09ICdwYXJ0aWFsJylcbiAgICAgICAgPyAncGFydGlhbCdcbiAgICAgICAgOiAndW5rbm93bic7XG4gICAgaWYgKHJ1bnRpbWUucm9vdFN0YWdlQ29udGV4dC5nZXRQb2xpY3koKS5yZWRhY3Rpb24/LmlzSW5lcnQoKSA9PT0gZmFsc2UpIHJ1bnRpbWUuY2FwdHVyZS5saW1pdCgncmVkYWN0aW9uLWFjdGl2ZScpO1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zbmFwc2hvdCxcbiAgICAgIGNhcHR1cmU6IHJ1bnRpbWUuY2FwdHVyZVNuYXBzaG90KHNuYXBzaG90LmNvbW1pdExvZy5sZW5ndGgsIGNvbnRyb2wsIG9wdGlvbnM/LnJlZGFjdCA9PT0gdHJ1ZSksXG4gICAgfTtcbiAgfVxuICByZXR1cm4gc25hcHNob3Q7XG59XG5cbi8qKlxuICogVGhlIGNvbW1pdCBsb2cgYW5kIHRoZSBmb2xkIGJhc2UgYXMgYSByZWFkZXIgbWF5IGhvbGQgdGhlbSAoOS40NC4yKTogYSByZWNvcmQgZnJlZXppbmcgc2VhbGVkIHdob2xlXG4gKiBpcyBzZXJ2ZWQgYXMgaXRzZWxmOyBvbmUgaG9sZGluZyB3aGF0IGZyZWV6aW5nIGNhbm5vdCBzZWFsIOKAlCBhIERhdGUsIGEgTWFwLCBhIGJ1ZmZlciDigKYg4oCUIGFzIGEgY29weVxuICogb2YgaXRzIG9wZW4gcGF0aHMsIHRoZSByZWFkZXIncyBvd24gKGBjYXB0dXJlL2ZyZWV6ZS50cyDCtyBzZXJ2ZVJlY29yZGApLiBIZXJlLCBhdCB0aGUgcHVibGljIGRvb3I6XG4gKiB0aGUgZW5naW5lJ3Mgb3duIHNuYXBzaG90IG9mIGEgbG9nIChhIHN1YmZsb3cgbW91bnQncykgaXMgbm90IHNlcnZlZCwgc28gdGhlIHJ1biBwYXlzIG5vdGhpbmcuXG4gKi9cbmZ1bmN0aW9uIHNlcnZlZExvZyhzbmFwc2hvdDogUnVudGltZVNuYXBzaG90KTogUnVudGltZVNuYXBzaG90IHtcbiAgY29uc3QgeyBpbml0aWFsU3RhdGUgfSA9IHNuYXBzaG90O1xuICByZXR1cm4ge1xuICAgIC4uLnNuYXBzaG90LFxuICAgIGNvbW1pdExvZzogT2JqZWN0LmZyZWV6ZShzbmFwc2hvdC5jb21taXRMb2cubWFwKHNlcnZlUmVjb3JkKSkgYXMgQ29tbWl0QnVuZGxlW10sXG4gICAgLi4uKGluaXRpYWxTdGF0ZSA9PT0gdW5kZWZpbmVkID8ge30gOiB7IGluaXRpYWxTdGF0ZTogc2VydmVSZWNvcmQoaW5pdGlhbFN0YXRlKSB9KSxcbiAgfTtcbn1cblxuLyoqXG4gKiBDb2xsZWN0IGB0b1NuYXBzaG90KClgIGJ1bmRsZXMgZnJvbSBldmVyeSBhdHRhY2hlZCByZWNvcmRlciDigJQgT05FIGVudHJ5XG4gKiBwZXIgcmVjb3JkZXIgaWQsIGFjcm9zcyBhbGwgY2hhbm5lbHMgYW5kIGJvdGggZGVsaXZlcnkgdGllcnMuXG4gKlxuICogVGhlIGRlZHVwZSBpcyBsb2FkLWJlYXJpbmcsIG5vdCB0aWRpbmVzcy4gQSByZWNvcmRlciB0aGF0IGltcGxlbWVudHMgYVxuICogc2hhcmVkLW5hbWUgaG9vayAoYG9uRXJyb3JgIC8gYG9uUGF1c2VgIC8gYG9uUmVzdW1lYCDigJQgZGVjbGFyZWQgb24gQk9USFxuICogdGhlIHNjb3BlIGFuZCBmbG93IGludGVyZmFjZXMpIGlzIGxlZ2l0aW1hdGVseSByZWdpc3RlcmVkIG9uIEJPVEggaW5saW5lXG4gKiBsaXN0cyBieSBgYXR0YWNoQ29tYmluZWRSZWNvcmRlcmAsIGFuZCB0aGF0IGlzIGJ5IGRlc2lnbjogZWFjaCBjaGFubmVsXG4gKiBjYWxscyB0aGUgaG9vayB3aXRoIGl0cyBvd24gcGF5bG9hZCB2YXJpYW50LiBgTWV0cmljUmVjb3JkZXIub25QYXVzZWAgaXNcbiAqIHRoZSBldmVyeWRheSBjYXNlLiBXYWxraW5nIHRoZSBsaXN0cyB3aXRob3V0IGEgc2hhcmVkIGBzZWVuYCBzZXQgdHVybmVkXG4gKiB0aGF0IGludG8gYSBEVVBMSUNBVEVEIHNuYXBzaG90IGVudHJ5IChzYW1lIGlkIHR3aWNlKSwgd2hpY2ggYnJlYWtzIGV2ZXJ5XG4gKiBjb25zdW1lciB0aGF0IGluZGV4ZXMgYHNuYXBzaG90LnJlY29yZGVyc2AgYnkgaWQuXG4gKlxuICogT3JkZXJpbmcgaXMgc2NvcGUgbGlzdCDihpIgZmxvdyBsaXN0IOKGkiBkZWZlcnJlZCB0aWVyLCBhbmQgdGhlIEZJUlNUIGJ1bmRsZVxuICogZm9yIGFuIGlkIHdpbnMuIEEgcmVjb3JkZXIgd2l0aCBubyBgdG9TbmFwc2hvdGAgbmV2ZXIgY2xhaW1zIGFuIGlkLCBzbyBpdFxuICogY2Fubm90IHNoYWRvdyBhIHNhbWUtaWQgcmVjb3JkZXIgdGhhdCBkb2VzIGhhdmUgb25lLlxuICpcbiAqIFRoZSByb3cgaXMgUkVCVUlMVCBmaWVsZCBieSBmaWVsZCBieSB0aGUgb25lIGNvcGllciAoYHJlY29yZGVyL3NuYXBzaG90LnRzXG4gKiDCtyBjb3B5QnVuZGxlYCwgc2hhcmVkIHdpdGggYENvbXBvc2l0ZVJlY29yZGVyYCkgcmF0aGVyIHRoYW4gc3ByZWFkLCBzbyBhXG4gKiByZWNvcmRlciBjYW5ub3Qgc211Z2dsZSBhbiBgaWRgIG9mIGl0cyBvd24gY2hvb3NpbmcgaW50byB0aGUgc25hcHNob3QgKHRoZVxuICogaWQgaXMgdGhlIGV4ZWN1dG9yJ3MsIGFuZCBjb25zdW1lcnMgaW5kZXggYnkgaXQpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29sbGVjdFJlY29yZGVyU25hcHNob3RzKFxuICBvYnNlcnZlcnM6IFJ1bk9ic2VydmVycyxcbiAgY29sbGVjdGVkPzogKHJlY29yZGVyOiBTY29wZVJlY29yZGVyIHwgRmxvd1JlY29yZGVyLCByb3c6IFJlY29yZGVyU25hcHNob3QpID0+IHZvaWQsXG4gIGluY2x1ZGVDYXB0dXJlID0gZmFsc2UsXG4pOiBSZWNvcmRlclNuYXBzaG90W10ge1xuICBjb25zdCBvdXQ6IFJlY29yZGVyU25hcHNob3RbXSA9IFtdO1xuICBjb25zdCBzZWVuID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIGNvbnN0IGNvbGxlY3QgPSAocjogU2NvcGVSZWNvcmRlciB8IEZsb3dSZWNvcmRlcik6IHZvaWQgPT4ge1xuICAgIGlmICghci50b1NuYXBzaG90IHx8IHNlZW4uaGFzKHIuaWQpKSByZXR1cm47XG4gICAgc2Vlbi5hZGQoci5pZCk7XG4gICAgY29uc3Qgcm93ID0gY29weUJ1bmRsZShyLmlkLCByLnRvU25hcHNob3QoKSwgaW5jbHVkZUNhcHR1cmUpO1xuICAgIG91dC5wdXNoKHJvdyk7XG4gICAgY29sbGVjdGVkPy4ociwgcm93KTtcbiAgfTtcbiAgZm9yIChjb25zdCByIG9mIG9ic2VydmVycy5zY29wZVJlY29yZGVycykgY29sbGVjdChyKTtcbiAgZm9yIChjb25zdCByIG9mIG9ic2VydmVycy5mbG93UmVjb3JkZXJzKSBjb2xsZWN0KHIpO1xuICBpZiAob2JzZXJ2ZXJzLmRlZmVycmVkVGllcikge1xuICAgIGZvciAoY29uc3QgciBvZiBvYnNlcnZlcnMuZGVmZXJyZWRUaWVyLnNjb3BlTGlzdFJlY29yZGVycygpKSBjb2xsZWN0KHIpO1xuICAgIGZvciAoY29uc3QgciBvZiBvYnNlcnZlcnMuZGVmZXJyZWRUaWVyLmZsb3dMaXN0UmVjb3JkZXJzKCkpIGNvbGxlY3Qocik7XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.admitStoredCapture = void 0;
|
|
4
|
+
const absentEntries_js_1 = require("../capture/absentEntries.js");
|
|
5
|
+
const historyData_js_1 = require("../capture/historyData.js");
|
|
6
|
+
const historyNote_js_1 = require("../capture/historyNote.js");
|
|
7
|
+
const historyTarget_js_1 = require("../capture/historyTarget.js");
|
|
8
|
+
const historyTypes_js_1 = require("../capture/historyTypes.js");
|
|
9
|
+
const noteShape_js_1 = require("../capture/noteShape.js");
|
|
10
|
+
/** One exact pair only; nothing here interprets commits, causal links or business values. */
|
|
11
|
+
function capturePair(log, runId, maxBytes) {
|
|
12
|
+
const evidence = log.notes.filter((n) => n.kind === historyTypes_js_1.CAPTURE_HISTORY_NOTE);
|
|
13
|
+
const receipts = log.notes.filter((n) => n.kind === historyTypes_js_1.CAPTURE_RECEIPT_NOTE);
|
|
14
|
+
if (!receipts.length)
|
|
15
|
+
return 'receipt-missing';
|
|
16
|
+
if (evidence.length !== 1 || receipts.length !== 1)
|
|
17
|
+
return 'history-ambiguous';
|
|
18
|
+
const payload = (0, historyData_js_1.copyHistoryData)(evidence[0].data, maxBytes);
|
|
19
|
+
const target = (0, historyTarget_js_1.copyHistoryTarget)(payload.target);
|
|
20
|
+
if (!target ||
|
|
21
|
+
target.runId !== runId ||
|
|
22
|
+
target.logAddress.logRunId !== runId ||
|
|
23
|
+
target.commits.from !== 0 ||
|
|
24
|
+
target.commits.to !== log.commitLog.length)
|
|
25
|
+
return 'scope-mismatch';
|
|
26
|
+
const receipt = (0, historyTarget_js_1.copyHistoryReceipt)(receipts[0].data, target);
|
|
27
|
+
if (!receipt)
|
|
28
|
+
return 'receipt-refused';
|
|
29
|
+
const basis = (0, historyData_js_1.copyHistoryData)({ commitLog: log.commitLog, ...(log.initialState !== undefined && { initialState: log.initialState }) }, maxBytes);
|
|
30
|
+
return { payload, target, receipt, basis };
|
|
31
|
+
}
|
|
32
|
+
function captureEnding(log, capture, target) {
|
|
33
|
+
const expected = capture.boundary.status === 'completed' ? 'ok' : capture.boundary.status === 'paused' ? 'paused' : 'failed';
|
|
34
|
+
if (expected !== log.outcome)
|
|
35
|
+
return 'boundary-mismatch';
|
|
36
|
+
let close = -1;
|
|
37
|
+
let closes = 0;
|
|
38
|
+
log.entries.forEach((e, index) => {
|
|
39
|
+
if (e.kind === 'closed') {
|
|
40
|
+
close = index;
|
|
41
|
+
closes++;
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
const observation = log.entries.findIndex((e) => e.kind === 'note' && e.note === historyTypes_js_1.CAPTURE_HISTORY_NOTE);
|
|
45
|
+
const acknowledgement = log.entries.findIndex((e) => e.kind === 'note' && e.note === historyTypes_js_1.CAPTURE_RECEIPT_NOTE);
|
|
46
|
+
if (close < 0 || observation <= close || acknowledgement <= observation)
|
|
47
|
+
return 'sequence-mismatch';
|
|
48
|
+
if (closes !== 1 ||
|
|
49
|
+
(0, noteShape_js_1.ownData)(log.meta.closed, 'runId') !== target.runId ||
|
|
50
|
+
(0, noteShape_js_1.ownData)(log.meta.opened, 'runId') !== target.runId)
|
|
51
|
+
return 'boundary-mismatch';
|
|
52
|
+
return undefined;
|
|
53
|
+
}
|
|
54
|
+
function captureEvidence(payload, capture) {
|
|
55
|
+
if (!payload.executionTree || typeof payload.executionTree !== 'object' || Array.isArray(payload.executionTree))
|
|
56
|
+
return 'evidence-missing';
|
|
57
|
+
if (capture.channels.control === 'captured' &&
|
|
58
|
+
(!Array.isArray(payload.recorders) ||
|
|
59
|
+
!payload.recorders.some((r) => r?.capture?.runId === capture.runId && r.capture.control === 'captured')))
|
|
60
|
+
return 'recorder-evidence-missing';
|
|
61
|
+
return undefined;
|
|
62
|
+
}
|
|
63
|
+
/** @internal Engine-metadata admission after Foottrace's generic record validation. */
|
|
64
|
+
async function admitStoredCapture(log, runId, maxBytes) {
|
|
65
|
+
const unknown = (reason) => ({ status: 'unknown', reason });
|
|
66
|
+
const pair = capturePair(log, runId, maxBytes);
|
|
67
|
+
if (typeof pair === 'string')
|
|
68
|
+
return unknown(pair);
|
|
69
|
+
const { payload, target, receipt, basis } = pair;
|
|
70
|
+
const body = {
|
|
71
|
+
capture: payload.capture,
|
|
72
|
+
executionTree: payload.executionTree,
|
|
73
|
+
...(payload.recorders !== undefined && { recorders: payload.recorders }),
|
|
74
|
+
...(payload.absent !== undefined && { absent: payload.absent }),
|
|
75
|
+
};
|
|
76
|
+
if ((await (0, historyData_js_1.historyDigest)({ evidence: body, record: basis })) !== target.digest)
|
|
77
|
+
return unknown('evidence-mismatch');
|
|
78
|
+
if (!(0, absentEntries_js_1.validateAbsentEntries)(payload))
|
|
79
|
+
return unknown('absent-evidence-refused');
|
|
80
|
+
const capture = (0, historyNote_js_1.historyNote)(payload.capture, target);
|
|
81
|
+
if (!capture || capture.limitations.includes('resumed-segment'))
|
|
82
|
+
return unknown('capture-refused');
|
|
83
|
+
const refusal = captureEnding(log, capture, target) ?? captureEvidence(payload, capture);
|
|
84
|
+
if (refusal)
|
|
85
|
+
return unknown(refusal);
|
|
86
|
+
return Object.freeze({
|
|
87
|
+
status: 'acknowledged',
|
|
88
|
+
history: Object.freeze({
|
|
89
|
+
runId,
|
|
90
|
+
capture,
|
|
91
|
+
executionTree: payload.executionTree,
|
|
92
|
+
...(payload.absent !== undefined ? { absent: payload.absent } : {}),
|
|
93
|
+
...(payload.recorders !== undefined ? { recorders: payload.recorders } : {}),
|
|
94
|
+
commitLog: basis.commitLog,
|
|
95
|
+
...(basis.initialState && { initialState: basis.initialState }),
|
|
96
|
+
receipt,
|
|
97
|
+
}),
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
exports.admitStoredCapture = admitStoredCapture;
|
|
101
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmVkQ2FwdHVyZUFkbWlzc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvcnVubmVyL3N0b3JlZENhcHR1cmVBZG1pc3Npb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRUEsa0VBQW9FO0FBQ3BFLDhEQUEyRTtBQUMzRSw4REFBd0Q7QUFDeEQsa0VBQW9GO0FBRXBGLGdFQUF3RjtBQUV4RiwwREFBa0Q7QUFZbEQsNkZBQTZGO0FBQzdGLFNBQVMsV0FBVyxDQUFDLEdBQWMsRUFBRSxLQUFhLEVBQUUsUUFBZ0I7SUFDbEUsTUFBTSxRQUFRLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssc0NBQW9CLENBQUMsQ0FBQztJQUMxRSxNQUFNLFFBQVEsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxzQ0FBb0IsQ0FBQyxDQUFDO0lBQzFFLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTTtRQUFFLE9BQU8saUJBQWlCLENBQUM7SUFDL0MsSUFBSSxRQUFRLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxRQUFRLENBQUMsTUFBTSxLQUFLLENBQUM7UUFBRSxPQUFPLG1CQUFtQixDQUFDO0lBQy9FLE1BQU0sT0FBTyxHQUFHLElBQUEsZ0NBQWUsRUFBQyxRQUFRLENBQUMsQ0FBQyxDQUFFLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBNEIsQ0FBQztJQUN4RixNQUFNLE1BQU0sR0FBRyxJQUFBLG9DQUFpQixFQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNqRCxJQUNFLENBQUMsTUFBTTtRQUNQLE1BQU0sQ0FBQyxLQUFLLEtBQUssS0FBSztRQUN0QixNQUFNLENBQUMsVUFBVSxDQUFDLFFBQVEsS0FBSyxLQUFL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Q0FBQyxPQUFPLENBQUMsU0FBUyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLFNBQStCLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ2xHLFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBUztZQUMxQixHQUFHLENBQUMsS0FBSyxDQUFDLFlBQVksSUFBSSxFQUFFLFlBQVksRUFBRSxLQUFLLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDL0QsT0FBTztTQUNSLENBQUM7S0FDSCxDQUFDLENBQUM7QUFDTCxDQUFDO0FBbENELGdEQWtDQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQ29tbWl0QnVuZGxlLCBTdG9yZWRMb2cgfSBmcm9tICdmb290dHJhY2UnO1xuXG5pbXBvcnQgeyB2YWxpZGF0ZUFic2VudEVudHJpZXMgfSBmcm9tICcuLi9jYXB0dXJlL2Fic2VudEVudHJpZXMuanMnO1xuaW1wb3J0IHsgY29weUhpc3RvcnlEYXRhLCBoaXN0b3J5RGlnZXN0IH0gZnJvbSAnLi4vY2FwdHVyZS9oaXN0b3J5RGF0YS5qcyc7XG5pbXBvcnQgeyBoaXN0b3J5Tm90ZSB9IGZyb20gJy4uL2NhcHR1cmUvaGlzdG9yeU5vdGUuanMnO1xuaW1wb3J0IHsgY29weUhpc3RvcnlSZWNlaXB0LCBjb3B5SGlzdG9yeVRhcmdldCB9IGZyb20gJy4uL2NhcHR1cmUvaGlzdG9yeVRhcmdldC5qcyc7XG5pbXBvcnQgdHlwZSB7IENhcHR1cmVIaXN0b3J5UmVjZWlwdCwgQ2FwdHVyZUhpc3RvcnlUYXJnZXQgfSBmcm9tICcuLi9jYXB0dXJlL2hpc3RvcnlUeXBlcy5qcyc7XG5pbXBvcnQgeyBDQVBUVVJFX0hJU1RPUllfTk9URSwgQ0FQVFVSRV9SRUNFSVBUX05PVEUgfSBmcm9tICcuLi9jYXB0dXJlL2hpc3RvcnlUeXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IE5hdGl2ZUNhcHR1cmVOb3RlIH0gZnJvbSAnLi4vY2FwdHVyZS9uYXRpdmVDb3ZlcmFnZS5qcyc7XG5pbXBvcnQgeyBvd25EYXRhIH0gZnJvbSAnLi4vY2FwdHVyZS9ub3RlU2hhcGUuanMnO1xuaW1wb3J0IHR5cGUgeyBTdGFnZVNuYXBzaG90IH0gZnJvbSAnLi4vbWVtb3J5L2ZyYW1lVHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBSZWNvcmRlclNuYXBzaG90IH0gZnJvbSAnLi9FeGVjdXRpb25SdW50aW1lLmpzJztcbmltcG9ydCB0eXBlIHsgU3RvcmVkQ2FwdHVyZVJlc3VsdCB9IGZyb20gJy4vcmVhZFN0b3JlZENhcHR1cmUuanMnO1xuXG50eXBlIFBhaXIgPSB7XG4gIHBheWxvYWQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICB0YXJnZXQ6IENhcHR1cmVIaXN0b3J5VGFyZ2V0O1xuICByZWNlaXB0OiBDYXB0dXJlSGlzdG9yeVJlY2VpcHQ7XG4gIGJhc2lzOiB7IGNvbW1pdExvZzogcmVhZG9ubHkgQ29tbWl0QnVuZGxlW107IGluaXRpYWxTdGF0ZT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+IH07XG59O1xuXG4vKiogT25lIGV4YWN0IHBhaXIgb25seTsgbm90aGluZyBoZXJlIGludGVycHJldHMgY29tbWl0cywgY2F1c2FsIGxpbmtzIG9yIGJ1c2luZXNzIHZhbHVlcy4gKi9cbmZ1bmN0aW9uIGNhcHR1cmVQYWlyKGxvZzogU3RvcmVkTG9nLCBydW5JZDogc3RyaW5nLCBtYXhCeXRlczogbnVtYmVyKTogUGFpciB8IHN0cmluZyB7XG4gIGNvbnN0IGV2aWRlbmNlID0gbG9nLm5vdGVzLmZpbHRlcigobikgPT4gbi5raW5kID09PSBDQVBUVVJFX0hJU1RPUllfTk9URSk7XG4gIGNvbnN0IHJlY2VpcHRzID0gbG9nLm5vdGVzLmZpbHRlcigobikgPT4gbi5raW5kID09PSBDQVBUVVJFX1JFQ0VJUFRfTk9URSk7XG4gIGlmICghcmVjZWlwdHMubGVuZ3RoKSByZXR1cm4gJ3JlY2VpcHQtbWlzc2luZyc7XG4gIGlmIChldmlkZW5jZS5sZW5ndGggIT09IDEgfHwgcmVjZWlwdHMubGVuZ3RoICE9PSAxKSByZXR1cm4gJ2hpc3RvcnktYW1iaWd1b3VzJztcbiAgY29uc3QgcGF5bG9hZCA9IGNvcHlIaXN0b3J5RGF0YShldmlkZW5jZVswXSEuZGF0YSwgbWF4Qnl0ZXMpIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBjb25zdCB0YXJnZXQgPSBjb3B5SGlzdG9yeVRhcmdldChwYXlsb2FkLnRhcmdldCk7XG4gIGlmIChcbiAgICAhdGFyZ2V0IHx8XG4gICAgdGFyZ2V0LnJ1bklkICE9PSBydW5JZCB8fFxuICAgIHRhcmdldC5sb2dBZGRyZXNzLmxvZ1J1bklkICE9PSBydW5JZCB8fFxuICAgIHRhcmdldC5jb21taXRzLmZyb20gIT09IDAgfHxcbiAgICB0YXJnZXQuY29tbWl0cy50byAhPT0gbG9nLmNvbW1pdExvZy5sZW5ndGhcbiAgKVxuICAgIHJldHVybiAnc2NvcGUtbWlzbWF0Y2gnO1xuICBjb25zdCByZWNlaXB0ID0gY29weUhpc3RvcnlSZWNlaXB0KHJlY2VpcHRzWzBdIS5kYXRhLCB0YXJnZXQpO1xuICBpZiAoIXJlY2VpcHQpIHJldHVybiAncmVjZWlwdC1yZWZ1c2VkJztcbiAgY29uc3QgYmFzaXMgPSBjb3B5SGlzdG9yeURhdGEoXG4gICAgeyBjb21taXRMb2c6IGxvZy5jb21taXRMb2csIC4uLihsb2cuaW5pdGlhbFN0YXRlICE9PSB1bmRlZmluZWQgJiYgeyBpbml0aWFsU3RhdGU6IGxvZy5pbml0aWFsU3RhdGUgfSkgfSxcbiAgICBtYXhCeXRlcyxcbiAgKSBhcyBQYWlyWydiYXNpcyddO1xuICByZXR1cm4geyBwYXlsb2FkLCB0YXJnZXQsIHJlY2VpcHQsIGJhc2lzIH07XG59XG5cbmZ1bmN0aW9uIGNhcHR1cmVFbmRpbmcobG9nOiBTdG9yZWRMb2csIGNhcHR1cmU6IE5hdGl2ZUNhcHR1cmVOb3RlLCB0YXJnZXQ6IENhcHR1cmVIaXN0b3J5VGFyZ2V0KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgZXhwZWN0ZWQgPVxuICAgIGNhcHR1cmUuYm91bmRhcnkuc3RhdHVzID09PSAnY29tcGxldGVkJyA/ICdvaycgOiBjYXB0dXJlLmJvdW5kYXJ5LnN0YXR1cyA9PT0gJ3BhdXNlZCcgPyAncGF1c2VkJyA6ICdmYWlsZWQnO1xuICBpZiAoZXhwZWN0ZWQgIT09IGxvZy5vdXRjb21lKSByZXR1cm4gJ2JvdW5kYXJ5LW1pc21hdGNoJztcbiAgbGV0IGNsb3NlID0gLTE7XG4gIGxldCBjbG9zZXMgPSAwO1xuICBsb2cuZW50cmllcy5mb3JFYWNoKChlLCBpbmRleCkgPT4ge1xuICAgIGlmIChlLmtpbmQgPT09ICdjbG9zZWQnKSB7XG4gICAgICBjbG9zZSA9IGluZGV4O1xuICAgICAgY2xvc2VzKys7XG4gICAgfVxuICB9KTtcbiAgY29uc3Qgb2JzZXJ2YXRpb24gPSBsb2cuZW50cmllcy5maW5kSW5kZXgoKGUpID0+IGUua2luZCA9PT0gJ25vdGUnICYmIGUubm90ZSA9PT0gQ0FQVFVSRV9ISVNUT1JZX05PVEUpO1xuICBjb25zdCBhY2tub3dsZWRnZW1lbnQgPSBsb2cuZW50cmllcy5maW5kSW5kZXgoKGUpID0+IGUua2luZCA9PT0gJ25vdGUnICYmIGUubm90ZSA9PT0gQ0FQVFVSRV9SRUNFSVBUX05PVEUpO1xuICBpZiAoY2xvc2UgPCAwIHx8IG9ic2VydmF0aW9uIDw9IGNsb3NlIHx8IGFja25vd2xlZGdlbWVudCA8PSBvYnNlcnZhdGlvbikgcmV0dXJuICdzZXF1ZW5jZS1taXNtYXRjaCc7XG4gIGlmIChcbiAgICBjbG9zZXMgIT09IDEgfHxcbiAgICBvd25EYXRhKGxvZy5tZXRhLmNsb3NlZCwgJ3J1bklkJykgIT09IHRhcmdldC5ydW5JZCB8fFxuICAgIG93bkRhdGEobG9nLm1ldGEub3BlbmVkLCAncnVuSWQnKSAhPT0gdGFyZ2V0LnJ1bklkXG4gIClcbiAgICByZXR1cm4gJ2JvdW5kYXJ5LW1pc21hdGNoJztcbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gY2FwdHVyZUV2aWRlbmNlKHBheWxvYWQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBjYXB0dXJlOiBOYXRpdmVDYXB0dXJlTm90ZSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmICghcGF5bG9hZC5leGVjdXRpb25UcmVlIHx8IHR5cGVvZiBwYXlsb2FkLmV4ZWN1dGlvblRyZWUgIT09ICdvYmplY3QnIHx8IEFycmF5LmlzQXJyYXkocGF5bG9hZC5leGVjdXRpb25UcmVlKSlcbiAgICByZXR1cm4gJ2V2aWRlbmNlLW1pc3NpbmcnO1xuICBpZiAoXG4gICAgY2FwdHVyZS5jaGFubmVscy5jb250cm9sID09PSAnY2FwdHVyZWQnICYmXG4gICAgKCFBcnJheS5pc0FycmF5KHBheWxvYWQucmVjb3JkZXJzKSB8fFxuICAgICAgIXBheWxvYWQucmVjb3JkZXJzLnNvbWUoKHIpID0+IHI/LmNhcHR1cmU/LnJ1bklkID09PSBjYXB0dXJlLnJ1bklkICYmIHIuY2FwdHVyZS5jb250cm9sID09PSAnY2FwdHVyZWQnKSlcbiAgKVxuICAgIHJldHVybiAncmVjb3JkZXItZXZpZGVuY2UtbWlzc2luZyc7XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKiBAaW50ZXJuYWwgRW5naW5lLW1ldGFkYXRhIGFkbWlzc2lvbiBhZnRlciBGb290dHJhY2UncyBnZW5lcmljIHJlY29yZCB2YWxpZGF0aW9uLiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFkbWl0U3RvcmVkQ2FwdHVyZShcbiAgbG9nOiBTdG9yZWRMb2csXG4gIHJ1bklkOiBzdHJpbmcsXG4gIG1heEJ5dGVzOiBudW1iZXIsXG4pOiBQcm9taXNlPFN0b3JlZENhcHR1cmVSZXN1bHQ+IHtcbiAgY29uc3QgdW5rbm93biA9IChyZWFzb246IHN0cmluZyk6IFN0b3JlZENhcHR1cmVSZXN1bHQgPT4gKHsgc3RhdHVzOiAndW5rbm93bicsIHJlYXNvbiB9KTtcbiAgY29uc3QgcGFpciA9IGNhcHR1cmVQYWlyKGxvZywgcnVuSWQsIG1heEJ5dGVzKTtcbiAgaWYgKHR5cGVvZiBwYWlyID09PSAnc3RyaW5nJykgcmV0dXJuIHVua25vd24ocGFpcik7XG4gIGNvbnN0IHsgcGF5bG9hZCwgdGFyZ2V0LCByZWNlaXB0LCBiYXNpcyB9ID0gcGFpcjtcbiAgY29uc3QgYm9keSA9IHtcbiAgICBjYXB0dXJlOiBwYXlsb2FkLmNhcHR1cmUsXG4gICAgZXhlY3V0aW9uVHJlZTogcGF5bG9hZC5leGVjdXRpb25UcmVlLFxuICAgIC4uLihwYXlsb2FkLnJlY29yZGVycyAhPT0gdW5kZWZpbmVkICYmIHsgcmVjb3JkZXJzOiBwYXlsb2FkLnJlY29yZGVycyB9KSxcbiAgICAuLi4ocGF5bG9hZC5hYnNlbnQgIT09IHVuZGVmaW5lZCAmJiB7IGFic2VudDogcGF5bG9hZC5hYnNlbnQgfSksXG4gIH07XG4gIGlmICgoYXdhaXQgaGlzdG9yeURpZ2VzdCh7IGV2aWRlbmNlOiBib2R5LCByZWNvcmQ6IGJhc2lzIH0pKSAhPT0gdGFyZ2V0LmRpZ2VzdCkgcmV0dXJuIHVua25vd24oJ2V2aWRlbmNlLW1pc21hdGNoJyk7XG4gIGlmICghdmFsaWRhdGVBYnNlbnRFbnRyaWVzKHBheWxvYWQpKSByZXR1cm4gdW5rbm93bignYWJzZW50LWV2aWRlbmNlLXJlZnVzZWQnKTtcbiAgY29uc3QgY2FwdHVyZSA9IGhpc3RvcnlOb3RlKHBheWxvYWQuY2FwdHVyZSwgdGFyZ2V0KTtcbiAgaWYgKCFjYXB0dXJlIHx8IGNhcHR1cmUubGltaXRhdGlvbnMuaW5jbHVkZXMoJ3Jlc3VtZWQtc2VnbWVudCcpKSByZXR1cm4gdW5rbm93bignY2FwdHVyZS1yZWZ1c2VkJyk7XG4gIGNvbnN0IHJlZnVzYWwgPSBjYXB0dXJlRW5kaW5nKGxvZywgY2FwdHVyZSwgdGFyZ2V0KSA/PyBjYXB0dXJlRXZpZGVuY2UocGF5bG9hZCwgY2FwdHVyZSk7XG4gIGlmIChyZWZ1c2FsKSByZXR1cm4gdW5rbm93bihyZWZ1c2FsKTtcbiAgcmV0dXJuIE9iamVjdC5mcmVlemUoe1xuICAgIHN0YXR1czogJ2Fja25vd2xlZGdlZCcsXG4gICAgaGlzdG9yeTogT2JqZWN0LmZyZWV6ZSh7XG4gICAgICBydW5JZCxcbiAgICAgIGNhcHR1cmUsXG4gICAgICBleGVjdXRpb25UcmVlOiBwYXlsb2FkLmV4ZWN1dGlvblRyZWUgYXMgU3RhZ2VTbmFwc2hvdCxcbiAgICAgIC4uLihwYXlsb2FkLmFic2VudCAhPT0gdW5kZWZpbmVkID8geyBhYnNlbnQ6IHBheWxvYWQuYWJzZW50IGFzIHJlYWRvbmx5IChyZWFkb25seSBzdHJpbmdbXSlbXSB9IDoge30pLFxuICAgICAgLi4uKHBheWxvYWQucmVjb3JkZXJzICE9PSB1bmRlZmluZWQgPyB7IHJlY29yZGVyczogcGF5bG9hZC5yZWNvcmRlcnMgYXMgUmVjb3JkZXJTbmFwc2hvdFtdIH0gOiB7fSksXG4gICAgICBjb21taXRMb2c6IGJhc2lzLmNvbW1pdExvZyxcbiAgICAgIC4uLihiYXNpcy5pbml0aWFsU3RhdGUgJiYgeyBpbml0aWFsU3RhdGU6IGJhc2lzLmluaXRpYWxTdGF0ZSB9KSxcbiAgICAgIHJlY2VpcHQsXG4gICAgfSksXG4gIH0pO1xufVxuIl19
|