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
|
@@ -189,7 +189,7 @@ export function fileSink(path, options) {
|
|
|
189
189
|
});
|
|
190
190
|
});
|
|
191
191
|
};
|
|
192
|
-
|
|
192
|
+
const adapter = {
|
|
193
193
|
path: absolute,
|
|
194
194
|
get bytes() {
|
|
195
195
|
return written;
|
|
@@ -204,6 +204,11 @@ export function fileSink(path, options) {
|
|
|
204
204
|
commit: ({ address, at, bundle }) => enqueue({ kind: 'commit', address, at, bundle }),
|
|
205
205
|
note: ({ address, at, kind, data }) => enqueue({ kind: 'note', address, at, note: kind, data }),
|
|
206
206
|
closed: ({ address, at, outcome, commits, meta }) => enqueue({ kind: 'closed', address, at, outcome, commits, ...(meta === undefined ? {} : { meta }) }),
|
|
207
|
+
// Explicit file capability: fsync of all preceding entries. This is not assumed for other adapters.
|
|
208
|
+
acknowledge: async (target) => {
|
|
209
|
+
await adapter.flush();
|
|
210
|
+
return Object.freeze({ ...target, durability: 'durable' });
|
|
211
|
+
},
|
|
207
212
|
flush: () => {
|
|
208
213
|
if (closing)
|
|
209
214
|
return Promise.reject(new Error(`fileSink: ${absolute} is closed`));
|
|
@@ -244,6 +249,7 @@ export function fileSink(path, options) {
|
|
|
244
249
|
return whenReleased;
|
|
245
250
|
},
|
|
246
251
|
};
|
|
252
|
+
return adapter;
|
|
247
253
|
}
|
|
248
254
|
/**
|
|
249
255
|
* Files a sink of this process has open, by device and inode — one writer per file. Kept on the global object, so
|
|
@@ -384,4 +390,4 @@ export function readRecordFile(path, options) {
|
|
|
384
390
|
}
|
|
385
391
|
return { entries, unreadable };
|
|
386
392
|
}
|
|
387
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZVNpbmsuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3NpbmtzL2ZpbGVTaW5rLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EwQ0c7QUFFSCxPQUFPLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDMUcsT0FBTyxFQUFFLE9BQU8sSUFBSSxXQUFXLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDbkQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUl0QyxnREFBZ0Q7QUFDaEQsTUFBTSxDQUFDLE1BQU0sMkJBQTJCLEdBQUcsRUFBRSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUM7QUFDNUQsa0RBQWtEO0FBQ2xELE1BQU0sQ0FBQyxNQUFNLGlDQUFpQyxHQUFHLENBQUMsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ2pFLHFFQUFxRTtBQUNyRSxNQUFNLENBQUMsTUFBTSxrQ0FBa0MsR0FBRyxFQUFFLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQztBQUNuRSw0Q0FBNEM7QUFDNUMsTUFBTSxDQUFDLE1BQU0sa0NBQWtDLEdBQUcsTUFBTSxDQUFDO0FBQ3pELDhHQUE4RztBQUM5RyxNQUFNLG1CQUFtQixHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDdEMsdURBQXVEO0FBQ3ZELE1BQU0sc0JBQXNCLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxJQUFJLENBQUM7QUEwQ2pEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXVCRztBQUNILE1BQU0sVUFBVSxRQUFRLENBQUMsSUFBWSxFQUFFLE9BQXlCO0lBQzlELElBQUksT0FBTyxJQUFJLEtBQUssUUFB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SyxDQUFDLEVBQUUsQ0FBQztZQUN0QyxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFO2dCQUFFLFNBQVM7WUFDbEMsSUFBSSxDQUFDO2dCQUNILE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQ2xDLENBQUM7WUFBQyxNQUFNLENBQUM7Z0JBQ1AsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLE1BQU0sRUFBRSxtQ0FBbUMsRUFBRSxDQUFDLENBQUM7WUFDaEYsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsQ0FBQztBQUNqQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBzaW5rcy9maWxlU2luay50cyDigJQgdGhlIHJlY29yZCwgb25lIEpTT04gbGluZSBwZXIgZW50cnksIGluIGEgZmlsZSAoZGVzaWduIMKnMy41LCDCpzQsIHBhY2tldCBQNikuIE5PREUgT05MWTogdGhlXG4gKiBvbmUgZmlsZSBpbiBgc3JjL2AgdGhhdCBpbXBvcnRzIGEgTm9kZSBidWlsdC1pbiwgcmVhY2hhYmxlIG9ubHkgdGhyb3VnaCB0aGUgYGZvb3RwcmludGpzL3NpbmtzYCBkb29yLlxuICpcbiAqIFdIWSBBIEZJTEUsIFdIWSBUSElTIFNIQVBFLiBBIHJ1bidzIHJlY29yZCBtdXN0IG91dGxpdmUgdGhlIHByb2Nlc3MgdGhhdCBtYWRlIGl0IOKAlCBhIGtpbGxlZCBwcm9jZXNzLCBhIGNyYXNoZWRcbiAqIGhvc3QsIGEgc2VydmVybGVzcyBmcmVlemUuIEVhY2ggZW50cnkgdGhlIGxvZyBoYW5kcyBvdmVyIGlzIGVuY29kZWQsIGNoZWNrZWQgYW5kIGdpdmVuIGl0cyBvd24gb2Zmc2V0IGluIHRoZSBmaWxlLFxuICogYW5kIGl0cyB3cml0ZSBpcyBoYW5kZWQgdG8gdGhlIEkvTyBwb29sIEFUIE9OQ0UgKGEgcG9zaXRpb25hbCB3cml0ZSDigJQgbm8gZW50cnkgd2FpdHMgZm9yIHRoZSBldmVudCBsb29wIHRvIHR1cm4pO1xuICogdGhlIHBvb2wncyB0aHJlYWRzIHBlcmZvcm0gdGhlbSB3aGlsZSB0aGUgbWFpbiB0aHJlYWQgcnVucyBvbi4gQSBwcm9jZXNzIGtpbGxlZCBhZnRlciBhIHBvb2wgdGhyZWFkIHdyb3RlIGFuIGVudHJ5XG4gKiBrZWVwcyBpdC4gVW50aWwgdGhlbiBpdCBpcyBub3Qgb24gZGlzazogbWljcm9zZWNvbmRzIG9uIGEgZnJlZSBwb29sLCBidXQgdGhlIHBvb2wgKDQgdGhyZWFkcyBieSBkZWZhdWx0KSBpcyBzaGFyZWRcbiAqIHdpdGggRE5TIGxvb2t1cHMsIHpsaWIsIGNyeXB0byBhbmQgb3RoZXIgZnMgd29yaywgc28gd2hpbGUgaXQgaXMgYnVzeSB0aGUgd2luZG93IGlzIGFzIGxvbmcgYXMgdGhhdCB3b3JrIOKAlCBhbmQgc2luY2VcbiAqIHdyaXRlcyBjb21wbGV0ZSBvdXQgb2Ygb3JkZXIsIGEga2lsbCBjYW4gbG9zZSBhbiBlbnRyeSBpbiB0aGUgbWlkZGxlICh0aGUgcmVhZGVyIHJlcG9ydHMgdGhlIGhvbGUpLiBgZmx1c2goKWAgd2FpdHMgZm9yIGV2ZXJ5IHdyaXRlIGFuZFxuICogYGZzeW5jYHMg4oCUIHRoZSBzdGVwIHRoYXQgYWxzbyBzdXJ2aXZlcyB0aGUgbWFjaGluZSBsb3NpbmcgcG93ZXIsIGFuZCB0aGUgb25lIHRoZSBleGVjdXRvciBhd2FpdHMgYWZ0ZXIgZWFjaCBydW4nc1xuICogY2xvc2luZyBlbnRyeS5cbiAqXG4gKiBUSEUgVEhSRUFUIE1PREVMLCBhcyBjb2RlIOKAlCBldmVyeSByZXNvdXJjZSBib3VuZGVkLCBub3RoaW5nIHRoYXQgY2FuIHN0YWxsIHRoZSBydW46XG4gKiAgIC0gT05MWSBUSEUgUEFUSCBUSEUgQVBQIEdJVkVTLiBSZXNvbHZlZCBvbmNlIGFuZCBvcGVuZWQgb25jZSwgYXQgYGZpbGVTaW5rKHBhdGgpYDsgZXZlcnkgZW50cnkgZ29lcyB0byB0aGF0IG9wZW5cbiAqICAgICBmaWxlLiBBIHN5bWJvbGljIGxpbmsgYXQgdGhlIHBhdGggaXMgcmVmdXNlZCAoYE9fTk9GT0xMT1dgLCB3aGVyZSB0aGUgcGxhdGZvcm0gaGFzIGl0KSwgYW5kIHNvIGlzIGFueXRoaW5nXG4gKiAgICAgdGhhdCBpcyBub3QgYSByZWd1bGFyIGZpbGUsIGEgZmlsZSB3aXRoIGFub3RoZXIgaGFyZCBsaW5rLCBhbm90aGVyIG93bmVyLCBvciBncm91cC93b3JsZCB3cml0ZS4gQSBmaWxlIHRoZVxuICogICAgIHNpbmsgY3JlYXRlcyBpcyBgMG82MDBgLlxuICogICAtIEFUT01JQyBQRVIgRU5UUlkuIEEgbGluZSBpcyBlbmNvZGVkIGluIGZ1bGwgZmlyc3Qg4oCUIGFuIGVudHJ5IEpTT04gY2Fubm90IHdyaXRlIChhIGBCaWdJbnRgLCBhIGN5Y2xlKSBpc1xuICogICAgIHJlZnVzZWQgd2hvbGUg4oCUIHRoZW4gd3JpdHRlbiBhdCBpdHMgb3duIG9mZnNldC4gQSB3cml0ZSB0aGF0IGZhaWxzIHBhcnQtd2F5IGxlYXZlcyBhIGhvbGUgdXAgdG8gdGhlIG5leHRcbiAqICAgICBlbnRyeSdzIG9mZnNldDsgdGhlIHJlYWRlciBzcGxpdHMgYXQgaXQgKE5VTCksIHNvIGEgdG9ybiBsaW5lIG5ldmVyIHN3YWxsb3dzIHRoZSBvbmUgYWZ0ZXIgaXQgKGFuIGV4aXN0aW5nXG4gKiAgICAgZmlsZSB3aXRoIGEgdG9ybiB0YWlsIGdldHMgYSBuZXdsaW5lIGZpcnN0KS5cbiAqICAgLSBCT1VOREVEOiBgbWF4RW50cnlCeXRlc2AgKG9uZSBsaW5lLCA4IE1pQiDigJQgcmVmdXNlZCBieSBuYW1lLCBiZWZvcmUgaXQgaXMgZW5jb2RlZCB3aGVuIGl0cyBsZW5ndGggYWxyZWFkeVxuICogICAgIHNheXMgc28pLCBgbWF4UXVldWVkQnl0ZXNgIChhY2NlcHRlZCwgbm90IHlldCB3cml0dGVuLCAxNiBNaUIg4oCUIHBhc3QgaXQgYW4gZW50cnkgaXMgRFJPUFBFRCBhbmQgY291bnRlZCwgbmV2ZXJcbiAqICAgICBidWZmZXJlZCB3aXRob3V0IGxpbWl0KSwgYG1heEJ5dGVzYCAodGhlIGZpbGUsIDY0IE1pQiDigJQgb25jZSBmdWxsLCBldmVyeSBmdXJ0aGVyIGVudHJ5IGlzIHJlZnVzZWQgYW5kIGNvdW50ZWQ7XG4gKiAgICAgYSBjbG9zaW5nIGVudHJ5IG1heSB1c2UgYSA2NCBLaUIgcmVzZXJ2ZSBzbyBhIGZ1bGwgZmlsZSBjYW4gc3RpbGwgc2F5IGhvdyB0aGUgcnVuIGVuZGVkKSwgYGZsdXNoVGltZW91dE1zYFxuICogICAgICgxMCBzIOKAlCB0aGVuIGBmbHVzaCgpYCByZWplY3RzKS4gRXZlcnkgcmVmdXNhbCB0aHJvd3MgZnJvbSB0aGUgc2luayBtZXRob2QsIHdoaWNoIHRoZSBsb2cgY291bnRzXG4gKiAgICAgKGBnZXRTbmFwc2hvdCgpLnNpbmtgKTsgYSB3cml0ZSB0aGF0IGZhaWxzIGxhdGVyIHJlamVjdHMgdGhhdCBlbnRyeSdzIHByb21pc2UsIGNvdW50ZWQgdGhlIHNhbWUgd2F5LlxuICogICAtIEFTWU5DSFJPTk9VUyBXUklURVMgT05MWS4gTm8gbWV0aG9kIGJsb2NrcyBvbiB0aGUgZGlzazsgdGhlIGZpbGUgaXMgcmVsZWFzZWQgYXN5bmNocm9ub3VzbHksIGFmdGVyIGV2ZXJ5XG4gKiAgICAgd3JpdGUgYW5kIGV2ZXJ5IHN0YXJ0ZWQgZnN5bmMuXG4gKiAgIC0gTk8gU0VDUkVUIE9OIERJU0sgaXMgdGhlIEVYRUNVVE9SJ3MgbGF3LCBhcHBsaWVkIGJlZm9yZSBhbnkgZW50cnkgcmVhY2hlcyBhbiBhZGFwdGVyIChgcnVubmVyL3JlY29yZFNpbmsudHNgKTpcbiAqICAgICB0aGlzIGZpbGUgd3JpdGVzIHdoYXQgaXQgaXMgaGFuZGVkIGFuZCByZWFkcyBub3RoaW5nIGVsc2UuXG4gKiAgIC0gT05FIFdSSVRFUiBQRVIgRklMRS4gQSBzZWNvbmQgc2luayBvbiBhIGZpbGUgdGhpcyBwcm9jZXNzIGhhcyBvcGVuIGlzIHJlZnVzZWQgKGJ5IGRldmljZSBhbmQgaW5vZGUsIGFjcm9zcyB0aGVcbiAqICAgICBDb21tb25KUyBhbmQgRVNNIGJ1aWxkcykuIEFOT1RIRVIgUFJPQ0VTUyB3cml0aW5nIHRoZSBzYW1lIHBhdGggaXMgbm90IHNlZW4gYXQgb3BlbjogZWFjaCB3cml0ZXMgYXQgaXRzIG93blxuICogICAgIG9mZnNldHMgYW5kIHdvdWxkIG92ZXJ3cml0ZSB0aGUgb3RoZXIuIGBmbHVzaCgpYCBjaGVja3MgdGhlIGZpbGUncyBzaXplIGFnYWluc3Qgd2hhdCB0aGlzIHNpbmsgcGxhY2VkIGFuZCByZWplY3RzXG4gKiAgICAgKGEgbG9zcyB0aGUgcnVuIGNvdW50cykgd2hlbiBhbm90aGVyIHdyaXRlcidzIGJ5dGVzIHJlYWNoIHBhc3QgaXQg4oCUIGJlc3QgZWZmb3J0OiBhbiBvdmVyd3JpdGUgdGhpcyBzaW5rJ3Mgb3duXG4gKiAgICAgbGF0ZXIgd3JpdGVzIGNvdmVyIGlzIG5vdCBzZWVuLiBHaXZlIGVhY2ggcHJvY2VzcyBpdHMgb3duIGZpbGUuXG4gKlxuICogV0hBVCBKU09OIEtFRVBTLiBBIGxpbmUgaG9sZHMgd2hhdCBgSlNPTi5zdHJpbmdpZnlgIGtlZXBzOiBhIGBEYXRlYCBiZWNvbWVzIGl0cyBJU08gc3RyaW5nLCBhIGBNYXBgIC8gYFNldGAgYW5cbiAqIGVtcHR5IG9iamVjdCwgYHVuZGVmaW5lZGAgZGlzYXBwZWFycy4gQSByZWNvcmQgb2YgcGxhaW4gSlNPTiB2YWx1ZXMgcmVhZHMgYmFjayBleGFjdGx5IChgcmVhZFJlY29yZEZpbGVgIOKGklxuICogYHJlYWRTdG9yZWRSZWNvcmRgKTsgZm9yIHJpY2hlciB2YWx1ZXMsIGJyaW5nIGFuIGFkYXB0ZXIgd2l0aCBhIHJpY2hlciBlbmNvZGluZy5cbiAqL1xuXG5pbXBvcnQgeyBjbG9zZSwgY2xvc2VTeW5jLCBjb25zdGFudHMsIGZzdGF0LCBmc3RhdFN5bmMsIGZzeW5jLCBvcGVuU3luYywgcmVhZFN5bmMsIHdyaXRlIH0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgeyByZXNvbHZlIGFzIHJlc29sdmVQYXRoIH0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7IGdldHVpZCB9IGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5cbmltcG9ydCB0eXBlIHsgUmVjb3JkRW50cnksIFJlY29yZFNpbmsgfSBmcm9tICdmb290dHJhY2Uvd3JpdGUnO1xuXG4vKiogVGhlIGRlZmF1bHQgY2FwIG9uIGEgcmVjb3JkIGZpbGU6IDY0IE1pQi4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX0ZJTEVfU0lOS19NQVhfQllURVMgPSA2NCAqIDEwMjQgKiAxMDI0O1xuLyoqIFRoZSBkZWZhdWx0IGNhcCBvbiBPTkUgZW50cnkncyBsaW5lOiA4IE1pQi4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX0ZJTEVfU0lOS19NQVhfRU5UUllfQllURVMgPSA4ICogMTAyNCAqIDEwMjQ7XG4vKiogVGhlIGRlZmF1bHQgY2FwIG9uIGJ5dGVzIGFjY2VwdGVkIGJ1dCBub3QgeWV0IHdyaXR0ZW46IDE2IE1pQi4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX0ZJTEVfU0lOS19NQVhfUVVFVUVEX0JZVEVTID0gMTYgKiAxMDI0ICogMTAyNDtcbi8qKiBUaGUgZGVmYXVsdCBib3VuZCBvbiBgZmx1c2goKWA6IDEwIHMuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9GSUxFX1NJTktfRkxVU0hfVElNRU9VVF9NUyA9IDEwXzAwMDtcbi8qKiBIb3cgZmFyIHBhc3QgYG1heEJ5dGVzYCBhIENMT1NJTkcgZW50cnkgbWF5IHN0aWxsIGdvLCBzbyBhIGZ1bGwgZmlsZSBjYW4gc2F5IGhvdyB0aGUgcnVuIGVuZGVkOiA2NCBLaUIuICovXG5jb25zdCBDTE9TRV9SRVNFUlZFX0JZVEVTID0gNjQgKiAxMDI0O1xuLyoqIFRoZSBkZWZhdWx0IGNhcCBgcmVhZFJlY29yZEZpbGVgIHJlYWRzOiAyNTYgTWlCLiAqL1xuY29uc3QgREVGQVVMVF9SRUFEX01BWF9CWVRFUyA9IDI1NiAqIDEwMjQgKiAxMDI0O1xuXG4vKiogYGZpbGVTaW5rYCdzIG9wdGlvbnMg4oCUIGV2ZXJ5IHJlc291cmNlIHRoZSBzaW5rIGNhbiBzcGVuZCwgYm91bmRlZC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlsZVNpbmtPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBtb3N0IGJ5dGVzIHRoZSBmaWxlIG1heSBob2xkICh0aGUgYnl0ZXMgYWxyZWFkeSBpbiBpdCBjb3VudCkuIE9uY2UgYW4gZW50cnkgd291bGQgcGFzcyBpdCwgdGhlIGZpbGUgaXMgRlVMTDpcbiAgICogdGhhdCBlbnRyeSBhbmQgZXZlcnkgbGF0ZXIgb25lIGlzIHJlZnVzZWQgYW5kIGNvdW50ZWQgYnkgdGhlIHJ1biwgbmV2ZXIgd3JpdHRlbiDigJQgZXhjZXB0IGEgY2xvc2luZyBlbnRyeSwgd2hpY2hcbiAgICogbWF5IHVzZSA2NCBLaUIgbW9yZSBzbyBhIGZ1bGwgZmlsZSBjYW4gc3RpbGwgc2F5IGhvdyB0aGUgcnVuIGVuZGVkLiBEZWZhdWx0IDY0IE1pQi5cbiAgICovXG4gIHJlYWRvbmx5IG1heEJ5dGVzPzogbnVtYmVyO1xuICAvKiogVGhlIGxhcmdlc3QgT05FIGVudHJ5J3MgbGluZSBtYXkgYmU7IGEgbGFyZ2VyIGVudHJ5IGlzIHJlZnVzZWQgd2hvbGUgKGBtYXhFbnRyeUJ5dGVzYCBuYW1lZCkuIERlZmF1bHQgOCBNaUIuICovXG4gIHJlYWRvbmx5IG1heEVudHJ5Qnl0ZXM/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBUaGUgbW9zdCBieXRlcyBhY2NlcHRlZCBhbmQgbm90IHlldCBvbiBkaXNrLiBXcml0ZXMgYXJlIGFzeW5jaHJvbm91cywgc28gYSBzaW5rIHNsb3dlciB0aGFuIHRoZSBydW4gcXVldWVzOyBwYXN0XG4gICAqIHRoaXMgYm91bmQgYW4gZW50cnkgaXMgRFJPUFBFRCBhbmQgY291bnRlZCAobmV2ZXIgYnVmZmVyZWQgd2l0aG91dCBsaW1pdCwgbmV2ZXIgYSBzdGFsbCkuIERlZmF1bHQgMTYgTWlCLlxuICAgKi9cbiAgcmVhZG9ubHkgbWF4UXVldWVkQnl0ZXM/OiBudW1iZXI7XG4gIC8qKiBIb3cgbG9uZyBgZmx1c2goKWAgKGRyYWluIHRoZSBxdWV1ZSwgdGhlbiBgZnN5bmNgKSBtYXkgdGFrZSBiZWZvcmUgaXQgcmVqZWN0cy4gRGVmYXVsdCAxMCBzLiAqL1xuICByZWFkb25seSBmbHVzaFRpbWVvdXRNcz86IG51bWJlcjtcbn1cblxuLyoqIEEgcmVjb3JkIHNpbmsgdGhhdCBhcHBlbmRzIHRvIG9uZSBmaWxlIOKAlCBgUmVjb3JkU2lua2AgcGx1cyB3aGF0IHRoZSBhcHAgbmVlZHMgdG8gbWFuYWdlIHRoZSBmaWxlLiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaWxlU2luayBleHRlbmRzIFJlY29yZFNpbmsge1xuICAvKiogVGhlIGFic29sdXRlIHBhdGggdGhlIHNpbmsgd3JpdGVzIHRvIOKAlCByZXNvbHZlZCBvbmNlLCB3aGVuIGl0IHdhcyBtYWRlLiAqL1xuICByZWFkb25seSBwYXRoOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBCeXRlcyB0aGlzIHNpbmsga25vd3MgYXJlIG9uIGRpc2s6IHRoZSBmaWxlJ3Mgc2l6ZSB3aGVuIGl0IG9wZW5lZCBwbHVzIGV2ZXJ5IGJ5dGUgaXRzIHdyaXRlcyBjb21wbGV0ZWQg4oCUIGFcbiAgICogcnVubmluZyBzdW0sIG5vdCB0aGUgZmlsZSdzIGVuZCAod3JpdGVzIGNvbXBsZXRlIG91dCBvZiBvcmRlcjsgYSBmYWlsZWQgb25lIGxlYXZlcyBhIGhvbGUpLlxuICAgKi9cbiAgcmVhZG9ubHkgYnl0ZXM6IG51bWJlcjtcbiAgLyoqIEJ5dGVzIGFjY2VwdGVkIGFuZCBub3QgeWV0IHdyaXR0ZW4uICovXG4gIHJlYWRvbmx5IHF1ZXVlZEJ5dGVzOiBudW1iZXI7XG4gIC8qKiBgdHJ1ZWAgb25jZSBhbiBlbnRyeSB3YXMgcmVmdXNlZCBmb3IgYG1heEJ5dGVzYDogdGhlIGZpbGUgaXMgZnVsbCwgYW5kIG9ubHkgYSBjbG9zaW5nIGVudHJ5IG1heSBzdGlsbCBnby4gKi9cbiAgcmVhZG9ubHkgZnVsbDogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFJlbGVhc2UgdGhlIGZpbGUuIElkZW1wb3RlbnQuIEV2ZXJ5IGVudHJ5IGFmdGVyIGl0IGlzIHJlZnVzZWQgKHRoZSBydW4gY291bnRzIGl0KSwgYW5kIGBmbHVzaCgpYCByZWplY3RzO1xuICAgKiBlbnRyaWVzIGFscmVhZHkgYWNjZXB0ZWQgYXJlIHN0aWxsIHdyaXR0ZW4gKGFuZCBhIGZsdXNoIGFscmVhZHkgc3RhcnRlZCBmaW5pc2hlcyksIHRoZW4gdGhlIGZpbGUgaXMgY2xvc2VkIOKAlFxuICAgKiB0aGUgcHJvbWlzZSBzZXR0bGVzIHRoZW4uXG4gICAqL1xuICBjbG9zZSgpOiBQcm9taXNlPHZvaWQ+O1xufVxuXG4vKipcbiAqIEEgcmVjb3JkIHNpbmsgdGhhdCBhcHBlbmRzIGVhY2ggZW50cnkgdG8gYHBhdGhgIGFzIG9uZSBKU09OIGxpbmUg4oCUIHRoZSBjcmFzaC1zYWZlIHJlY29yZCBvbiBhIE5vZGUgaG9zdC5cbiAqXG4gKiBFdmVyeSBtZXRob2QgcmV0dXJucyBhdCBvbmNlOiB0aGUgbGluZSBpcyBlbmNvZGVkLCBjaGVja2VkIGFnYWluc3QgZXZlcnkgYm91bmQsIGdpdmVuIGl0cyBvZmZzZXQgYW5kIGhhbmRlZCB0b1xuICogdGhlIEkvTyBwb29sLiBUaGUgbWV0aG9kJ3MgcHJvbWlzZSBzZXR0bGVzIHdoZW4gdGhhdCBsaW5lIGlzIHdyaXR0ZW47IGEgd3JpdGUgdGhhdCBmYWlscyByZWplY3RzIGl0LCBhbmQgdGhlIHJ1blxuICogY291bnRzIHRoZSBsb3NzLlxuICpcbiAqIEB0aHJvd3MgVHlwZUVycm9yIHdoZW4gYHBhdGhgIGlzIG5vdCBhIG5vbi1lbXB0eSBzdHJpbmcgb3IgZG9lcyBub3QgbmFtZSBhIHJlZ3VsYXIgZmlsZSB0aGUgd3JpdGVyIG93bnMgYWxvbmU7XG4gKiAgIFJhbmdlRXJyb3IgZm9yIGEgYm91bmQgdGhhdCBpcyBub3QgYSB3aG9sZSBudW1iZXIg4omlIDE7IHRoZSBvcGVyYXRpbmcgc3lzdGVtJ3MgZXJyb3Igd2hlblxuICogICB0aGUgZmlsZSBjYW5ub3QgYmUgb3BlbmVkIChhIHN5bWJvbGljIGxpbmsgYXQgYHBhdGhgIGluY2x1ZGVkKS4gTWFkZSBvbmNlLCBhdCBzZXR1cCDigJQgbmV2ZXIgZHVyaW5nIGEgcnVuLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQgeyBmaWxlU2luaywgcmVhZFJlY29yZEZpbGUgfSBmcm9tICdmb290cHJpbnRqcy9zaW5rcyc7XG4gKiBpbXBvcnQgeyByZWFkU3RvcmVkUmVjb3JkIH0gZnJvbSAnZm9vdHRyYWNlJztcbiAqXG4gKiBjb25zdCBzaW5rID0gZmlsZVNpbmsoJy92YXIvZm9vdHByaW50L29yZGVycy5qc29ubCcpO1xuICogY29uc3QgZXhlY3V0b3IgPSBuZXcgRmxvd0NoYXJ0RXhlY3V0b3IoY2hhcnQsIHsgc2luayB9KTtcbiAqIGF3YWl0IGV4ZWN1dG9yLnJ1bih7IGlucHV0IH0pO1xuICogLy8g4oCmbGF0ZXIsIG9yIGFmdGVyIGEgY3Jhc2g6XG4gKiBjb25zdCByZWNvcmQgPSByZWFkU3RvcmVkUmVjb3JkKHJlYWRSZWNvcmRGaWxlKCcvdmFyL2Zvb3RwcmludC9vcmRlcnMuanNvbmwnKS5lbnRyaWVzKTtcbiAqIHJlY29yZC5yb290KHJ1bklkKT8uY29tcGxldGU7IC8vIGZhbHNlIGZvciBhIHJ1biB0aGF0IG5ldmVyIGVuZGVkXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbGVTaW5rKHBhdGg6IHN0cmluZywgb3B0aW9ucz86IEZpbGVTaW5rT3B0aW9ucyk6IEZpbGVTaW5rIHtcbiAgaWYgKHR5cGVvZiBwYXRoICE9PSAnc3RyaW5nJyB8fCBwYXRoID09PSAnJykgdGhyb3cgbmV3IFR5cGVFcnJvcignZmlsZVNpbms6IHBhdGggbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmcnKTtcbiAgY29uc3QgbWF4Qnl0ZXMgPSBib3VuZCgnbWF4Qnl0ZXMnLCBvcHRpb25zPy5tYXhCeXRlcywgREVGQVVMVF9GSUxFX1NJTktfTUFYX0JZVEVTLCAxKTtcbiAgY29uc3QgbWF4RW50cnlCeXRlcyA9IGJvdW5kKCdtYXhFbnRyeUJ5dGVzJywgb3B0aW9ucz8ubWF4RW50cnlCeXRlcywgREVGQVVMVF9GSUxFX1NJTktfTUFYX0VOVFJZX0JZVEVTLCAxKTtcbiAgY29uc3QgbWF4UXVldWVkQnl0ZXMgPSBib3VuZCgnbWF4UXVldWVkQnl0ZXMnLCBvcHRpb25zPy5tYXhRdWV1ZWRCeXRlcywgREVGQVVMVF9GSUxFX1NJTktfTUFYX1FVRVVFRF9CWVRFUywgMSk7XG4gIGNvbnN0IGZsdXNoVGltZW91dE1zID0gYm91bmQoJ2ZsdXNoVGltZW91dE1zJywgb3B0aW9ucz8uZmx1c2hUaW1lb3V0TXMsIERFRkFVTFRfRklMRV9TSU5LX0ZMVVNIX1RJTUVPVVRfTVMsIDEpO1xuICBjb25zdCBhYnNvbHV0ZSA9IHJlc29sdmVQYXRoKHBhdGgpO1xuICAvLyBOT1QgYE9fQVBQRU5EYDogZWFjaCBlbnRyeSBpcyB3cml0dGVuIGF0IHRoZSBvZmZzZXQgaXQgd2FzIGdpdmVuIHdoZW4gaXQgd2FzIHF1ZXVlZCAoYSBwb3NpdGlvbmFsIHdyaXRlKSwgc29cbiAgLy8gZXZlcnkgZW50cnkgaXMgaGFuZGVkIHRvIHRoZSBJL08gcG9vbCB0aGUgbW9tZW50IGl0IGlzIGFjY2VwdGVkIOKAlCBub25lIHdhaXRzIGZvciB0aGUgZXZlbnQgbG9vcCB0byB0dXJuLlxuICBjb25zdCBmZCA9IG9wZW5TeW5jKGFic29sdXRlLCBjb25zdGFudHMuT19SRFdSIHwgY29uc3RhbnRzLk9fQ1JFQVQgfCAoY29uc3RhbnRzLk9fTk9GT0xMT1cgPz8gMCksIDBvNjAwKTtcbiAgbGV0IGlkZW50aXR5OiBzdHJpbmc7XG4gIGxldCBzaXplOiBudW1iZXI7XG4gIGxldCBuZWVkc05ld2xpbmU6IGJvb2xlYW47IC8vIHRoZSBmaWxlIGVuZHMgd2l0aCBhIHRvcm4gbGluZTogdGhlIGZpcnN0IGVudHJ5IHN0YXJ0cyBhIG5ldyBvbmVcbiAgdHJ5IHtcbiAgICBjb25zdCBzdGF0ID0gZnN0YXRTeW5jKGZkKTtcbiAgICBpZiAoIXN0YXQuaXNGaWxlKCkpIHRocm93IG5ldyBUeXBlRXJyb3IoYGZpbGVTaW5rOiAke2Fic29sdXRlfSBpcyBub3QgYSByZWd1bGFyIGZpbGVgKTtcbiAgICByZWZ1c2VGb3JlaWduKGFic29sdXRlLCBzdGF0KTtcbiAgICBpZGVudGl0eSA9IGAke3N0YXQuZGV2fToke3N0YXQuaW5vfWA7XG4gICAgLy8gT25lIHdyaXRlciBwZXIgZmlsZSwgaW4gdGhpcyBwcm9jZXNzOiBhIHNlY29uZCBzaW5rIHdvdWxkIHBsYWNlIGl0cyBlbnRyaWVzIG92ZXIgdGhlIGZpcnN0J3MuXG4gICAgaWYgKE9QRU5fRklMRVMuaGFzKGlkZW50aXR5KSkgdGhyb3cgbmV3IFR5cGVFcnJvcihgZmlsZVNpbms6ICR7YWJzb2x1dGV9IGFscmVhZHkgaGFzIGFuIG9wZW4gc2luayBpbiB0aGlzIHByb2Nlc3NgKTtcbiAgICBzaXplID0gc3RhdC5zaXplO1xuICAgIG5lZWRzTmV3bGluZSA9IHNpemUgPiAwICYmICFlbmRzV2l0aE5ld2xpbmUoZmQsIHNpemUpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNsb3NlU3luYyhmZCk7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbiAgT1BFTl9GSUxFUy5hZGQoaWRlbnRpdHkpO1xuXG4gIGNvbnN0IGVuY29kZXIgPSBuZXcgVGV4dEVuY29kZXIoKTtcbiAgbGV0IG5leHQgPSBzaXplOyAvLyB0aGUgb2Zmc2V0IHRoZSBuZXh0IGFjY2VwdGVkIGVudHJ5IGlzIHdyaXR0ZW4gYXQg4oCUIHdoYXQgYG1heEJ5dGVzYCBib3VuZHNcbiAgbGV0IHdyaXR0ZW4gPSBzaXplOyAvLyBieXRlcyBrbm93biBvbiBkaXNrXG4gIGxldCBxdWV1ZWRCeXRlcyA9IDA7IC8vIGFjY2VwdGVkLCBub3QgeWV0IHdyaXR0ZW4gKGluIHRoZSBJL08gcG9vbCdzIGhhbmRzKVxuICBsZXQgaW5GbGlnaHQgPSAwO1xuICBsZXQgc3luY2luZyA9IDA7XG4gIGxldCBmdWxsID0gZmFsc2U7XG4gIGxldCBjbG9zaW5nID0gZmFsc2U7XG4gIGxldCByZWxlYXNlZCA9IGZhbHNlO1xuICBsZXQgZHJhaW5lZDogKCgpID0+IHZvaWQpW10gPSBbXTtcbiAgbGV0IGNsb3NlZFNpZ25hbDogKCgpID0+IHZvaWQpIHwgdW5kZWZpbmVkO1xuICBjb25zdCB3aGVuUmVsZWFzZWQgPSBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4gKGNsb3NlZFNpZ25hbCA9IHJlc29sdmUpKTtcblxuICAvKiogUmVsZWFzZSB0aGUgZmlsZSBvbmNlIG5vdGhpbmcgaXMgaW4gZmxpZ2h0IGFuZCBubyBmc3luYyBpcyBwZW5kaW5nIOKAlCBhc3luY2hyb25vdXNseTsgYW4gZXJyb3IgaXMgaWdub3JlZC4gKi9cbiAgY29uc3QgcmVsZWFzZUlmSWRsZSA9ICgpOiB2b2lkID0+IHtcbiAgICBpZiAoIWNsb3NpbmcgfHwgcmVsZWFzZWQgfHwgaW5GbGlnaHQgPiAwIHx8IHN5bmNpbmcgPiAwKSByZXR1cm47XG4gICAgcmVsZWFzZWQgPSB0cnVlO1xuICAgIE9QRU5fRklMRVMuZGVsZXRlKGlkZW50aXR5KTtcbiAgICBjbG9zZShmZCwgKCkgPT4gY2xvc2VkU2lnbmFsPy4oKSk7XG4gIH07XG5cbiAgLyoqIEV2ZXJ5dGhpbmcgYWNjZXB0ZWQgaXMgd3JpdHRlbjogc3RhcnQgZWFjaCB3YWl0aW5nIGZsdXNoJ3MgZnN5bmMsIHRoZW4gcmVsZWFzZSBpZiBjbG9zaW5nLiAqL1xuICBjb25zdCBzZXR0bGVEcmFpbmVkID0gKCk6IHZvaWQgPT4ge1xuICAgIGlmIChpbkZsaWdodCA+IDApIHJldHVybjtcbiAgICBjb25zdCB3YWl0aW5nID0gZHJhaW5lZDtcbiAgICBkcmFpbmVkID0gW107XG4gICAgZm9yIChjb25zdCBzdGFydCBvZiB3YWl0aW5nKSBzdGFydCgpO1xuICAgIHJlbGVhc2VJZklkbGUoKTtcbiAgfTtcblxuICAvKiogT25lIGVudHJ5OiByZWZ1c2VkIHdob2xlIHdpdGggYSBuYW1lZCBib3VuZCAodGhlIGxvZyBjb3VudHMgaXQpLCBvciBzdWJtaXR0ZWQg4oCUIG5ldmVyIGluIHBhcnQsIG5ldmVyIGJsb2NraW5nLiAqL1xuICBjb25zdCBlbnF1ZXVlID0gKGVudHJ5OiBSZWNvcmRFbnRyeSk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgIGlmIChjbG9zaW5nKSB0aHJvdyBuZXcgRXJyb3IoYGZpbGVTaW5rOiAke2Fic29sdXRlfSBpcyBjbG9zZWRgKTtcbiAgICAvLyBUaGUgY2hlYXAgcmVmdXNhbHMgZmlyc3Q6IGEgZnVsbCBmaWxlIG9yIGEgZnVsbCBxdWV1ZSBjb3N0cyBubyBlbmNvZGluZy5cbiAgICBpZiAoZnVsbCAmJiBlbnRyeS5raW5kICE9PSAnY2xvc2VkJykgdGhyb3cgZmlsZUZ1bGwoYWJzb2x1dGUsIG1heEJ5dGVzLCBlbnRyeS5raW5kKTtcbiAgICAvLyBBIGNsb3NpbmcgZW50cnkgaXMgZXhlbXB0IGZyb20gdGhlIHF1ZXVlIGJvdW5kIChhcyBmcm9tIGBtYXhCeXRlc2AsIHdpdGhpbiBpdHMgcmVzZXJ2ZSk6IGhvdyBhIGxvZyBlbmRlZCBpc1xuICAgIC8vIHRoZSBvbmUgZW50cnkgYSBmdWxsIHF1ZXVlIG11c3Qgbm90IGRyb3AuXG4gICAgY29uc3QgaXNDbG9zaW5nRW50cnkgPSBlbnRyeS5raW5kID09PSAnY2xvc2VkJztcbiAgICBpZiAoIWlzQ2xvc2luZ0VudHJ5ICYmIHF1ZXVlZEJ5dGVzID49IG1heFF1ZXVlZEJ5dGVzKVxuICAgICAgdGhyb3cgcXVldWVGdWxsKGFic29sdXRlLCBxdWV1ZWRCeXRlcywgbWF4UXVldWVkQnl0ZXMsIGVudHJ5LmtpbmQpO1xuICAgIGNvbnN0IGpzb24gPSBKU09OLnN0cmluZ2lmeShlbnRyeSk7IC8vIGFuIGVudHJ5IEpTT04gY2Fubm90IHdyaXRlIChhIEJpZ0ludCwgYSBjeWNsZSkgdGhyb3dzIGhlcmUsIHdob2xlXG4gICAgLy8gQSBzdHJpbmcncyBsZW5ndGggbmV2ZXIgZXhjZWVkcyBpdHMgVVRGLTggc2l6ZTogYW4gZW50cnkgYWxyZWFkeSB0b28gbG9uZyBpcyByZWZ1c2VkIGJlZm9yZSBpdCBpcyBlbmNvZGVkLlxuICAgIGlmIChqc29uLmxlbmd0aCArIDEgPiBtYXhFbnRyeUJ5dGVzKSB0aHJvdyB0b29MYXJnZShhYnNvbHV0ZSwgZW50cnkua2luZCwgbWF4RW50cnlCeXRlcyk7XG4gICAgY29uc3QgZW5jb2RlZCA9IGVuY29kZXIuZW5jb2RlKGAke25lZWRzTmV3bGluZSA/ICdcXG4nIDogJyd9JHtqc29ufVxcbmApO1xuICAgIGlmIChlbmNvZGVkLmxlbmd0aCA+IG1heEVudHJ5Qnl0ZXMgKyAxKSB0aHJvdyB0b29MYXJnZShhYnNvbHV0ZSwgZW50cnkua2luZCwgbWF4RW50cnlCeXRlcyk7XG4gICAgY29uc3QgbGltaXQgPSBlbnRyeS5raW5kID09PSAnY2xvc2VkJyA/IG1heEJ5dGVzICsgQ0xPU0VfUkVTRVJWRV9CWVRFUyA6IG1heEJ5dGVzO1xuICAgIGlmIChuZXh0ICsgZW5jb2RlZC5sZW5ndGggPiBsaW1pdCkge1xuICAgICAgaWYgKGVudHJ5LmtpbmQgIT09ICdjbG9zZWQnKSBmdWxsID0gdHJ1ZTtcbiAgICAgIHRocm93IGZpbGVGdWxsKGFic29sdXRlLCBtYXhCeXRlcywgZW50cnkua2luZCk7XG4gICAgfVxuICAgIGlmICghaXNDbG9zaW5nRW50cnkgJiYgcXVldWVkQnl0ZXMgKyBlbmNvZGVkLmxlbmd0aCA+IG1heFF1ZXVlZEJ5dGVzKSB7XG4gICAgICB0aHJvdyBxdWV1ZUZ1bGwoYWJzb2x1dGUsIHF1ZXVlZEJ5dGVzLCBtYXhRdWV1ZWRCeXRlcywgZW50cnkua2luZCk7XG4gICAgfVxuICAgIG5lZWRzTmV3bGluZSA9IGZhbHNlO1xuICAgIGNvbnN0IGF0ID0gbmV4dDtcbiAgICBuZXh0ICs9IGVuY29kZWQubGVuZ3RoO1xuICAgIHF1ZXVlZEJ5dGVzICs9IGVuY29kZWQubGVuZ3RoO1xuICAgIGluRmxpZ2h0ICs9IDE7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHdyaXRlQXQoZmQsIGVuY29kZWQsIGF0LCAoZXJyb3IsIHdyb3RlKSA9PiB7XG4gICAgICAgIGluRmxpZ2h0IC09IDE7XG4gICAgICAgIHF1ZXVlZEJ5dGVzIC09IGVuY29kZWQubGVuZ3RoO1xuICAgICAgICB3cml0dGVuICs9IHdyb3RlO1xuICAgICAgICAvLyBBIGxpbmUgY3V0IHNob3J0IGxlYXZlcyBhIGhvbGUgdXAgdG8gdGhlIG5leHQgZW50cnkncyBvZmZzZXQ6IHRoZSByZWFkZXIgc3BsaXRzIGF0IGl0IChOVUwpLCBzbyBhIHRvcm5cbiAgICAgICAgLy8gbGluZSBuZXZlciBzd2FsbG93cyB0aGUgZW50cnkgYWZ0ZXIgaXQuXG4gICAgICAgIGlmIChlcnJvcikgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgZWxzZSByZXNvbHZlKCk7XG4gICAgICAgIHNldHRsZURyYWluZWQoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIHJldHVybiB7XG4gICAgcGF0aDogYWJzb2x1dGUsXG4gICAgZ2V0IGJ5dGVzKCkge1xuICAgICAgcmV0dXJuIHdyaXR0ZW47XG4gICAgfSxcbiAgICBnZXQgcXVldWVkQnl0ZXMoKSB7XG4gICAgICByZXR1cm4gcXVldWVkQnl0ZXM7XG4gICAgfSxcbiAgICBnZXQgZnVsbCgpIHtcbiAgICAgIHJldHVybiBmdWxsO1xuICAgIH0sXG4gICAgb3BlbmVkOiAoeyBhZGRyZXNzLCBhdCwgaW5pdGlhbFN0YXRlLCBtZXRhIH0pID0+XG4gICAgICBlbnF1ZXVlKHsga2luZDogJ29wZW5lZCcsIGFkZHJlc3MsIGF0LCBpbml0aWFsU3RhdGUsIC4uLihtZXRhID09PSB1bmRlZmluZWQgPyB7fSA6IHsgbWV0YSB9KSB9KSxcbiAgICBjb21taXQ6ICh7IGFkZHJlc3MsIGF0LCBidW5kbGUgfSkgPT4gZW5xdWV1ZSh7IGtpbmQ6ICdjb21taXQnLCBhZGRyZXNzLCBhdCwgYnVuZGxlIH0pLFxuICAgIG5vdGU6ICh7IGFkZHJlc3MsIGF0LCBraW5kLCBkYXRhIH0pID0+IGVucXVldWUoeyBraW5kOiAnbm90ZScsIGFkZHJlc3MsIGF0LCBub3RlOiBraW5kLCBkYXRhIH0pLFxuICAgIGNsb3NlZDogKHsgYWRkcmVzcywgYXQsIG91dGNvbWUsIGNvbW1pdHMsIG1ldGEgfSkgPT5cbiAgICAgIGVucXVldWUoeyBraW5kOiAnY2xvc2VkJywgYWRkcmVzcywgYXQsIG91dGNvbWUsIGNvbW1pdHMsIC4uLihtZXRhID09PSB1bmRlZmluZWQgPyB7fSA6IHsgbWV0YSB9KSB9KSxcbiAgICBmbHVzaDogKCkgPT4ge1xuICAgICAgaWYgKGNsb3NpbmcpIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoYGZpbGVTaW5rOiAke2Fic29sdXRlfSBpcyBjbG9zZWRgKSk7XG4gICAgICBjb25zdCB3b3JrID0gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBkcmFpbmVkLnB1c2goKCkgPT4ge1xuICAgICAgICAgIHN5bmNpbmcgKz0gMTtcbiAgICAgICAgICBmc3luYyhmZCwgKGVycm9yKSA9PiB7XG4gICAgICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgc3luY2luZyAtPSAxO1xuICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgICByZWxlYXNlSWZJZGxlKCk7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEFub3RoZXIgd3JpdGVyIChhbm90aGVyIHByb2Nlc3Mgb24gdGhlIHNhbWUgcGF0aCkgZ3JldyB0aGUgZmlsZSBwYXN0IHdoYXQgdGhpcyBzaW5rIHBsYWNlZDogaXRzXG4gICAgICAgICAgICAvLyBlbnRyaWVzIGFuZCBvdXJzIG92ZXJsYXAuIFNhaWQsIG5ldmVyIHNpbGVudC5cbiAgICAgICAgICAgIGZzdGF0KGZkLCAoc3RhdEVycm9yLCBzdGF0KSA9PiB7XG4gICAgICAgICAgICAgIHN5bmNpbmcgLT0gMTtcbiAgICAgICAgICAgICAgaWYgKHN0YXRFcnJvcikgcmVqZWN0KHN0YXRFcnJvcik7XG4gICAgICAgICAgICAgIGVsc2UgaWYgKHN0YXQuc2l6ZSA+IG5leHQpIHtcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKGBmaWxlU2luazogJHthYnNvbHV0ZX0gd2FzIHdyaXR0ZW4gYnkgYW5vdGhlciB3cml0ZXIgKG9uZSBzaW5rIHBlciBmaWxlKWApKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgcmVsZWFzZUlmSWRsZSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICBzZXR0bGVEcmFpbmVkKCk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiB3aXRoVGltZW91dChcbiAgICAgICAgd29yayxcbiAgICAgICAgZmx1c2hUaW1lb3V0TXMsXG4gICAgICAgIGBmaWxlU2luazogZmx1c2goKSBvZiAke2Fic29sdXRlfSBkaWQgbm90IGZpbmlzaCBpbiAke2ZsdXNoVGltZW91dE1zfW1zYCxcbiAgICAgICk7XG4gICAgfSxcbiAgICBjbG9zZTogKCkgPT4ge1xuICAgICAgaWYgKCFjbG9zaW5nKSB7XG4gICAgICAgIGNsb3NpbmcgPSB0cnVlO1xuICAgICAgICByZWxlYXNlSWZJZGxlKCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gd2hlblJlbGVhc2VkO1xuICAgIH0sXG4gIH07XG59XG5cbi8qKlxuICogRmlsZXMgYSBzaW5rIG9mIHRoaXMgcHJvY2VzcyBoYXMgb3BlbiwgYnkgZGV2aWNlIGFuZCBpbm9kZSDigJQgb25lIHdyaXRlciBwZXIgZmlsZS4gS2VwdCBvbiB0aGUgZ2xvYmFsIG9iamVjdCwgc29cbiAqIHRoZSBwYWNrYWdlJ3MgQ29tbW9uSlMgYW5kIEVTTSBidWlsZHMgKHR3byBtb2R1bGUgaW5zdGFuY2VzIGluIG9uZSBwcm9jZXNzKSBzaGFyZSBpdC5cbiAqL1xuY29uc3QgT1BFTl9GSUxFUzogU2V0PHN0cmluZz4gPSAoKGdsb2JhbFRoaXMgYXMgUmVjb3JkPHN5bWJvbCwgdW5rbm93bj4pW1N5bWJvbC5mb3IoJ2Zvb3RwcmludGpzLmZpbGVTaW5rLm9wZW4nKV0gPz89XG4gIG5ldyBTZXQ8c3RyaW5nPigpKSBhcyBTZXQ8c3RyaW5nPjtcblxuZnVuY3Rpb24gZmlsZUZ1bGwocGF0aDogc3RyaW5nLCBtYXhCeXRlczogbnVtYmVyLCBraW5kOiBzdHJpbmcpOiBSYW5nZUVycm9yIHtcbiAgcmV0dXJuIG5ldyBSYW5nZUVycm9yKGBmaWxlU2luazogJHtwYXRofSBpcyBmdWxsIChtYXhCeXRlcyAke21heEJ5dGVzfSk7IHRoaXMgJHtraW5kfSBlbnRyeSB3YXMgbm90IHdyaXR0ZW5gKTtcbn1cblxuZnVuY3Rpb24gcXVldWVGdWxsKHBhdGg6IHN0cmluZywgcXVldWVkOiBudW1iZXIsIG1heFF1ZXVlZEJ5dGVzOiBudW1iZXIsIGtpbmQ6IHN0cmluZyk6IFJhbmdlRXJyb3Ige1xuICByZXR1cm4gbmV3IFJhbmdlRXJyb3IoXG4gICAgYGZpbGVTaW5rOiAke3BhdGh9IGhhcyAke3F1ZXVlZH0gYnl0ZXMgd2FpdGluZyAobWF4UXVldWVkQnl0ZXMgJHttYXhRdWV1ZWRCeXRlc30pOyB0aGlzICR7a2luZH0gZW50cnkgd2FzIGRyb3BwZWRgLFxuICApO1xufVxuXG4vKiogQSBib3VuZCByZWFkIG9mZiB0aGUgb3B0aW9uczogYWJzZW50IOKGkiB0aGUgZGVmYXVsdDsgZWxzZSBhIHdob2xlIG51bWJlciDiiaUgYG1pbmAsIG9yIGEgUmFuZ2VFcnJvciBuYW1pbmcgaXQuICovXG5mdW5jdGlvbiBib3VuZChuYW1lOiBzdHJpbmcsIHZhbHVlOiBudW1iZXIgfCB1bmRlZmluZWQsIGZhbGxiYWNrOiBudW1iZXIsIG1pbjogbnVtYmVyKTogbnVtYmVyIHtcbiAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHJldHVybiBmYWxsYmFjaztcbiAgaWYgKCFOdW1iZXIuaXNTYWZlSW50ZWdlcih2YWx1ZSkgfHwgdmFsdWUgPCBtaW4pIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihgZmlsZVNpbms6ICR7bmFtZX0gbXVzdCBiZSBhIHdob2xlIG51bWJlciwgYXQgbGVhc3QgJHttaW59YCk7XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5mdW5jdGlvbiB0b29MYXJnZShwYXRoOiBzdHJpbmcsIGtpbmQ6IHN0cmluZywgbWF4RW50cnlCeXRlczogbnVtYmVyKTogUmFuZ2VFcnJvciB7XG4gIHJldHVybiBuZXcgUmFuZ2VFcnJvcihcbiAgICBgZmlsZVNpbms6IGEgJHtraW5kfSBlbnRyeSBsYXJnZXIgdGhhbiBtYXhFbnRyeUJ5dGVzICgke21heEVudHJ5Qnl0ZXN9KSB3YXMgbm90IHdyaXR0ZW4gdG8gJHtwYXRofWAsXG4gICk7XG59XG5cbi8qKiBXcml0ZSBhbGwgb2YgYGJ1ZmZlcmAgYXQgYHBvc2l0aW9uYCAoYXN5bmNocm9ub3VzbHksIGFzIG1hbnkgd3JpdGVzIGFzIGl0IHRha2VzKTsgYHdyb3RlYCBpcyBob3cgbXVjaCB3ZW50IG91dC4gKi9cbmZ1bmN0aW9uIHdyaXRlQXQoXG4gIGZkOiBudW1iZXIsXG4gIGJ1ZmZlcjogVWludDhBcnJheSxcbiAgcG9zaXRpb246IG51bWJlcixcbiAgZG9uZTogKGVycm9yOiBFcnJvciB8IG51bGwsIHdyb3RlOiBudW1iZXIpID0+IHZvaWQsXG4pOiB2b2lkIHtcbiAgY29uc3Qgc3RlcCA9IChvZmZzZXQ6IG51bWJlcik6IHZvaWQgPT4ge1xuICAgIHdyaXRlKGZkLCBidWZmZXIsIG9mZnNldCwgYnVmZmVyLmxlbmd0aCAtIG9mZnNldCwgcG9zaXRpb24gKyBvZmZzZXQsIChlcnJvciwgbikgPT4ge1xuICAgICAgaWYgKGVycm9yKSBkb25lKGVycm9yLCBvZmZzZXQpO1xuICAgICAgZWxzZSBpZiAobiA9PT0gMCkgZG9uZShuZXcgRXJyb3IoJ2ZpbGVTaW5rOiB0aGUgZGlzayB0b29rIG5vIGJ5dGVzJyksIG9mZnNldCk7XG4gICAgICBlbHNlIGlmIChvZmZzZXQgKyBuIDwgYnVmZmVyLmxlbmd0aCkgc3RlcChvZmZzZXQgKyBuKTtcbiAgICAgIGVsc2UgZG9uZShudWxsLCBidWZmZXIubGVuZ3RoKTtcbiAgICB9KTtcbiAgfTtcbiAgc3RlcCgwKTtcbn1cblxuLyoqIGB3b3JrYCwgb3IgYSByZWplY3Rpb24gbmFtaW5nIHRoZSBib3VuZCBvbmNlIGBtc2AgcGFzc2VkIOKAlCB0aGUgd29yayBnb2VzIG9uLCBub2JvZHkgd2FpdHMgZm9yIGl0LiAqL1xuZnVuY3Rpb24gd2l0aFRpbWVvdXQod29yazogUHJvbWlzZTx2b2lkPiwgbXM6IG51bWJlciwgbWVzc2FnZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHJlamVjdChuZXcgRXJyb3IobWVzc2FnZSkpLCBtcyk7XG4gICAgLy8gQSB0aW1lciB0aGF0IG9ubHkgYm91bmRzIGEgd2FpdCBuZXZlciBrZWVwcyB0aGUgcHJvY2VzcyBhbGl2ZSBvbiBpdHMgb3duLlxuICAgICh0aW1lciBhcyB7IHVucmVmPzogKCkgPT4gdm9pZCB9KS51bnJlZj8uKCk7XG4gICAgUHJvbWlzZS5wcm90b3R5cGUudGhlbi5jYWxsKFxuICAgICAgd29yayxcbiAgICAgICgpID0+IHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfSxcbiAgICAgIChlcnJvcjogdW5rbm93bikgPT4ge1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgfSxcbiAgICApO1xuICB9KTtcbn1cblxuLyoqXG4gKiBSZWZ1c2UgYSBmaWxlIHNvbWVvbmUgZWxzZSBjb3VsZCByZWFkIG9yIHJld3JpdGUgYmVoaW5kIHRoZSBzaW5rOiBhIGhhcmQgbGluayAoYW5vdGhlciBuYW1lIGZvciB0aGUgc2FtZSBieXRlcyDigJRcbiAqIHRoZSBzaW5rIHdvdWxkIGFwcGVuZCBpbnRvIGl0KSwgYSBmaWxlIG93bmVkIGJ5IGFub3RoZXIgdXNlciwgb3Igb25lIG90aGVycyBtYXkgd3JpdGUuIEEgZmlsZSB0aGUgc2luayBjcmVhdGVzIGlzXG4gKiBgMG82MDBgIGFuZCBwYXNzZXM7IGEgcHJlLWV4aXN0aW5nIG9uZSBtdXN0IGFscmVhZHkgYmUgcHJpdmF0ZSB0byB0aGUgd3JpdGVyLiAoTm90IG9uIFdpbmRvd3MsIHdob3NlIG1vZGVzIGFuZFxuICogb3duZXJzIGRvIG5vdCBtYXA6IHRoZXJlIGBPX05PRk9MTE9XYCBpcyBhYnNlbnQgdG9vIOKAlCB0aGUgZ3VpZGUgbmFtZXMgYm90aC4pXG4gKi9cbmZ1bmN0aW9uIHJlZnVzZUZvcmVpZ24ocGF0aDogc3RyaW5nLCBzdGF0OiB7IHJlYWRvbmx5IG5saW5rOiBudW1iZXI7IHJlYWRvbmx5IHVpZDogbnVtYmVyOyByZWFkb25seSBtb2RlOiBudW1iZXIgfSkge1xuICBpZiAoc3RhdC5ubGluayA+IDEpIHRocm93IG5ldyBUeXBlRXJyb3IoYGZpbGVTaW5rOiAke3BhdGh9IGhhcyBvdGhlciBoYXJkIGxpbmtzIOKAlCByZWZ1c2luZyB0byB3cml0ZSB0aHJvdWdoIG9uZWApO1xuICBjb25zdCB1aWQgPSB0eXBlb2YgZ2V0dWlkID09PSAnZnVuY3Rpb24nID8gZ2V0dWlkKCkgOiB1bmRlZmluZWQ7XG4gIGlmICh1aWQgIT09IHVuZGVmaW5lZCAmJiBzdGF0LnVpZCAhPT0gdWlkKSB0aHJvdyBuZXcgVHlwZUVycm9yKGBmaWxlU2luazogJHtwYXRofSBiZWxvbmdzIHRvIGFub3RoZXIgdXNlcmApO1xuICBpZiAodWlkICE9PSB1bmRlZmluZWQgJiYgKHN0YXQubW9kZSAmIDBvMDIyKSAhPT0gMCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYGZpbGVTaW5rOiAke3BhdGh9IGlzIHdyaXRhYmxlIGJ5IG90aGVycyDigJQgbWFrZSBpdCAwbzYwMCAob3IgcmVtb3ZlIGl0KSBmaXJzdGApO1xuICB9XG59XG5cbi8qKiBXaGV0aGVyIHRoZSBmaWxlJ3MgbGFzdCBieXRlIGlzIGEgbmV3bGluZSDigJQgcmVhZCBvbmNlLCB3aGVuIHRoZSBzaW5rIG9wZW5zIGFuIGV4aXN0aW5nIGZpbGUuICovXG5mdW5jdGlvbiBlbmRzV2l0aE5ld2xpbmUoZmQ6IG51bWJlciwgc2l6ZTogbnVtYmVyKTogYm9vbGVhbiB7XG4gIGNvbnN0IGxhc3QgPSBuZXcgVWludDhBcnJheSgxKTtcbiAgcmV0dXJuIHJlYWRTeW5jKGZkLCBsYXN0LCAwLCAxLCBzaXplIC0gMSkgPT09IDEgJiYgbGFzdFswXSA9PT0gMHgwYTtcbn1cblxuLyoqIEEgcmVjb3JkIGZpbGUgcmVhZCBiYWNrOiBldmVyeSBwYXJzZWQgbGluZSwgYW5kIGV2ZXJ5IGxpbmUgdGhhdCBjb3VsZCBub3QgYmUuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlY29yZEZpbGUge1xuICAvKiogVGhlIHBhcnNlZCBlbnRyaWVzLCBpbiBmaWxlIG9yZGVyIOKAlCB1bnRydXN0ZWQgaW5wdXQgZm9yIGByZWFkU3RvcmVkUmVjb3JkYCAoYGZvb3R0cmFjZWApLiAqL1xuICByZWFkb25seSBlbnRyaWVzOiByZWFkb25seSB1bmtub3duW107XG4gIC8qKiBFYWNoIGxpbmUgdGhhdCBpcyBub3QgSlNPTiAoYSB0b3JuIGxhc3QgbGluZSwgYSBjb3JydXB0IG9uZSksIGJ5IGl0cyAxLWJhc2VkIG51bWJlci4gQmxhbmsgbGluZXMgYXJlIHNraXBwZWQuICovXG4gIHJlYWRvbmx5IHVucmVhZGFibGU6IHJlYWRvbmx5IHsgcmVhZG9ubHkgbGluZTogbnVtYmVyOyByZWFkb25seSByZWFzb246IHN0cmluZyB9W107XG59XG5cbi8qKlxuICogUmVhZCBhIHJlY29yZCBmaWxlIGJhY2ssIGxpbmUgYnkgbGluZSDigJQgdGhlIGVudHJpZXMgZm9yIGByZWFkU3RvcmVkUmVjb3JkYCwgYW5kIGV2ZXJ5IGxpbmUgdGhhdCBjb3VsZCBub3QgYmVcbiAqIHJlYWQsIGJ5IG51bWJlciwgbmV2ZXIgYSBmYWlsZWQgcmVhZC4gQSBzdG9yZWQga2V5IG5hbWVkIGBfX3Byb3RvX19gIHN0YXlzIGRhdGEgKGBKU09OLnBhcnNlYCBtYWtlcyBpdCBhbiBvd25cbiAqIHByb3BlcnR5KS4gVGhlIGZpbGUgaXMgdW50cnVzdGVkOiBhIGZpbGUgbGFyZ2VyIHRoYW4gYG1heEJ5dGVzYCAoZGVmYXVsdCAyNTYgTWlCKSBpcyByZWZ1c2VkIGJlZm9yZSBpdCBpcyByZWFkLlxuICpcbiAqIEB0aHJvd3MgUmFuZ2VFcnJvciB3aGVuIHRoZSBmaWxlIGlzIGxhcmdlciB0aGFuIGBtYXhCeXRlc2A7IHRoZSBvcGVyYXRpbmcgc3lzdGVtJ3MgZXJyb3Igd2hlbiBpdCBjYW5ub3QgYmUgcmVhZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlYWRSZWNvcmRGaWxlKHBhdGg6IHN0cmluZywgb3B0aW9ucz86IHsgcmVhZG9ubHkgbWF4Qnl0ZXM/OiBudW1iZXIgfSk6IFJlY29yZEZpbGUge1xuICBpZiAodHlwZW9mIHBhdGggIT09ICdzdHJpbmcnIHx8IHBhdGggPT09ICcnKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdyZWFkUmVjb3JkRmlsZTogcGF0aCBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZycpO1xuICBjb25zdCBtYXhCeXRlcyA9IGJvdW5kKCdtYXhCeXRlcycsIG9wdGlvbnM/Lm1heEJ5dGVzLCBERUZBVUxUX1JFQURfTUFYX0JZVEVTLCAxKTtcbiAgLy8gT25lIGRlc2NyaXB0b3IgZm9yIHRoZSBjaGVjayBBTkQgdGhlIHJlYWQgKGEgZmlsZSB0aGF0IGdyb3dzIGJldHdlZW4gdGhlbSBpcyBzdGlsbCBib3VuZGVkKTsgYSByZWd1bGFyIGZpbGVcbiAgLy8gb25seSAoYSBGSUZPIHdvdWxkIGJsb2NrLCBhIGRldmljZSBuZXZlciBlbmQpOyBhdCBtb3N0IGBtYXhCeXRlc2AgcmVhZC5cbiAgLy8gT19OT05CTE9DSzogYSBGSUZPIGF0IHRoZSBwYXRoIG11c3Qgbm90IGJsb2NrIHRoZSBvcGVuIGJlZm9yZSB0aGUgcmVndWxhci1maWxlIGNoZWNrIHJlZnVzZXMgaXQuXG4gIGNvbnN0IGZkID0gb3BlblN5bmMocGF0aCwgY29uc3RhbnRzLk9fUkRPTkxZIHwgKGNvbnN0YW50cy5PX05PRk9MTE9XID8/IDApIHwgKGNvbnN0YW50cy5PX05PTkJMT0NLID8/IDApKTtcbiAgbGV0IHJhdzogVWludDhBcnJheTtcbiAgdHJ5IHtcbiAgICBjb25zdCBzdGF0ID0gZnN0YXRTeW5jKGZkKTtcbiAgICBpZiAoIXN0YXQuaXNGaWxlKCkpIHRocm93IG5ldyBUeXBlRXJyb3IoYHJlYWRSZWNvcmRGaWxlOiAke3BhdGh9IGlzIG5vdCBhIHJlZ3VsYXIgZmlsZWApO1xuICAgIGlmIChzdGF0LnNpemUgPiBtYXhCeXRlcykge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYHJlYWRSZWNvcmRGaWxlOiAke3BhdGh9IGhvbGRzICR7c3RhdC5zaXplfSBieXRlcywgcGFzdCB0aGUgbGltaXQgb2YgJHttYXhCeXRlc31gKTtcbiAgICB9XG4gICAgY29uc3QgYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkoTWF0aC5taW4oc3RhdC5zaXplLCBtYXhCeXRlcykgKyAxKTtcbiAgICBsZXQgcmVhZCA9IDA7XG4gICAgZm9yICg7Oykge1xuICAgICAgY29uc3QgbiA9IHJlYWRTeW5jKGZkLCBidWZmZXIsIHJlYWQsIGJ1ZmZlci5sZW5ndGggLSByZWFkLCByZWFkKTtcbiAgICAgIGlmIChuID09PSAwKSBicmVhaztcbiAgICAgIHJlYWQgKz0gbjtcbiAgICAgIGlmIChyZWFkID09PSBidWZmZXIubGVuZ3RoKSB7XG4gICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKGByZWFkUmVjb3JkRmlsZTogJHtwYXRofSBncmV3IHBhc3QgdGhlIGxpbWl0IG9mICR7bWF4Qnl0ZXN9IGJ5dGVzIHdoaWxlIGJlaW5nIHJlYWRgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmF3ID0gYnVmZmVyLnN1YmFycmF5KDAsIHJlYWQpO1xuICB9IGZpbmFsbHkge1xuICAgIGNsb3NlU3luYyhmZCk7XG4gIH1cbiAgY29uc3QgdGV4dCA9IG5ldyBUZXh0RGVjb2RlcigndXRmLTgnKS5kZWNvZGUocmF3KTtcbiAgY29uc3QgZW50cmllczogdW5rbm93bltdID0gW107XG4gIGNvbnN0IHVucmVhZGFibGU6IHsgbGluZTogbnVtYmVyOyByZWFzb246IHN0cmluZyB9W10gPSBbXTtcbiAgY29uc3QgbGluZXMgPSB0ZXh0LnNwbGl0KCdcXG4nKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xuICAgIC8vIEEgcnVuIG9mIE5VTCBieXRlcyBpcyBhIGhvbGUgYSBjdXQtc2hvcnQgd3JpdGUgbGVmdCBiZWZvcmUgdGhlIG5leHQgZW50cnkncyBvZmZzZXQ6IGl0IGVuZHMgdGhlIHRvcm4gcGFydCxcbiAgICAvLyBzbyB0aGUgZW50cnkgYWZ0ZXIgaXQgcmVhZHMgb24gaXRzIG93biAodGhlIHNhbWUgbGluZSBudW1iZXIgbmFtZXMgYm90aCBwaWVjZXMpLlxuICAgIGNvbnN0IGxpbmUgPSBsaW5lc1tpXTtcbiAgICAvLyBBIGhvbGUgaXMgcmVwb3J0ZWQsIG5ldmVyIHNraXBwZWQ6IGJ5dGVzIHRoYXQgbmV2ZXIgcmVhY2hlZCB0aGUgZGlzayBtYXkgYmUgYSB3aG9sZSBlbnRyeSBsb3N0IG1pZC1maWxlLlxuICAgIGlmIChsaW5lLmluY2x1ZGVzKCdcXDAnKSkgdW5yZWFkYWJsZS5wdXNoKHsgbGluZTogaSArIDEsIHJlYXNvbjogJ2EgaG9sZSDigJQgYnl0ZXMgdGhhdCBuZXZlciByZWFjaGVkIHRoZSBkaXNrJyB9KTtcbiAgICBmb3IgKGNvbnN0IHBpZWNlIG9mIGxpbmUuc3BsaXQoL1xcMCsvKSkge1xuICAgICAgaWYgKHBpZWNlLnRyaW0oKSA9PT0gJycpIGNvbnRpbnVlO1xuICAgICAgdHJ5IHtcbiAgICAgICAgZW50cmllcy5wdXNoKEpTT04ucGFyc2UocGllY2UpKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICB1bnJlYWRhYmxlLnB1c2goeyBsaW5lOiBpICsgMSwgcmVhc29uOiAnbm90IEpTT04g4oCUIGEgdG9ybiBvciBjb3JydXB0IGxpbmUnIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4geyBlbnRyaWVzLCB1bnJlYWRhYmxlIH07XG59XG4iXX0=
|
|
393
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZVNpbmsuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3NpbmtzL2ZpbGVTaW5rLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EwQ0c7QUFFSCxPQUFPLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDMUcsT0FBTyxFQUFFLE9BQU8sSUFBSSxXQUFXLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDbkQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGNBQWMsQ0FBQztBQU10QyxnREFBZ0Q7QUFDaEQsTUFBTSxDQUFDLE1BQU0sMkJBQTJCLEdBQUcsRUFBRSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUM7QUFDNUQsa0RBQWtEO0FBQ2xELE1BQU0sQ0FBQyxNQUFNLGlDQUFpQyxHQUFHLENBQUMsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ2pFLHFFQUFxRTtBQUNyRSxNQUFNLENBQUMsTUFBTSxrQ0FBa0MsR0FBRyxFQUFFLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQztBQUNuRSw0Q0FBNEM7QUFDNUMsTUFBTSxDQUFDLE1BQU0sa0NBQWtDLEdBQUcsTUFBTSxDQUFDO0FBQ3pELDhHQUE4RztBQUM5RyxNQUFNLG1CQUFtQixHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDdEMsdURBQXVEO0FBQ3ZELE1BQU0sc0JBQXNCLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxJQUFJLENBQUM7QUEwQ2pEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXVCRztBQUNILE1BQU0sVUFBVSxRQUFRLENBQUMsSUFBWSxFQUFFLE9BQXlCO0lBQzlELElBQUksT0FBTyxJQUFJLEtBQUssUUFB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QUMsQ0FBQyxDQUFDLENBQUM7UUFDdEIsMkdBQTJHO1FBQzNHLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7WUFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsTUFBTSxFQUFFLDRDQUE0QyxFQUFFLENBQUMsQ0FBQztRQUNoSCxLQUFLLE1BQU0sS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN0QyxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFO2dCQUFFLFNBQVM7WUFDbEMsSUFBSSxDQUFDO2dCQUNILE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQ2xDLENBQUM7WUFBQyxNQUFNLENBQUM7Z0JBQ1AsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLE1BQU0sRUFBRSxtQ0FBbUMsRUFBRSxDQUFDLENBQUM7WUFDaEYsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsQ0FBQztBQUNqQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBzaW5rcy9maWxlU2luay50cyDigJQgdGhlIHJlY29yZCwgb25lIEpTT04gbGluZSBwZXIgZW50cnksIGluIGEgZmlsZSAoZGVzaWduIMKnMy41LCDCpzQsIHBhY2tldCBQNikuIE5PREUgT05MWTogdGhlXG4gKiBvbmUgZmlsZSBpbiBgc3JjL2AgdGhhdCBpbXBvcnRzIGEgTm9kZSBidWlsdC1pbiwgcmVhY2hhYmxlIG9ubHkgdGhyb3VnaCB0aGUgYGZvb3RwcmludGpzL3NpbmtzYCBkb29yLlxuICpcbiAqIFdIWSBBIEZJTEUsIFdIWSBUSElTIFNIQVBFLiBBIHJ1bidzIHJlY29yZCBtdXN0IG91dGxpdmUgdGhlIHByb2Nlc3MgdGhhdCBtYWRlIGl0IOKAlCBhIGtpbGxlZCBwcm9jZXNzLCBhIGNyYXNoZWRcbiAqIGhvc3QsIGEgc2VydmVybGVzcyBmcmVlemUuIEVhY2ggZW50cnkgdGhlIGxvZyBoYW5kcyBvdmVyIGlzIGVuY29kZWQsIGNoZWNrZWQgYW5kIGdpdmVuIGl0cyBvd24gb2Zmc2V0IGluIHRoZSBmaWxlLFxuICogYW5kIGl0cyB3cml0ZSBpcyBoYW5kZWQgdG8gdGhlIEkvTyBwb29sIEFUIE9OQ0UgKGEgcG9zaXRpb25hbCB3cml0ZSDigJQgbm8gZW50cnkgd2FpdHMgZm9yIHRoZSBldmVudCBsb29wIHRvIHR1cm4pO1xuICogdGhlIHBvb2wncyB0aHJlYWRzIHBlcmZvcm0gdGhlbSB3aGlsZSB0aGUgbWFpbiB0aHJlYWQgcnVucyBvbi4gQSBwcm9jZXNzIGtpbGxlZCBhZnRlciBhIHBvb2wgdGhyZWFkIHdyb3RlIGFuIGVudHJ5XG4gKiBrZWVwcyBpdC4gVW50aWwgdGhlbiBpdCBpcyBub3Qgb24gZGlzazogbWljcm9zZWNvbmRzIG9uIGEgZnJlZSBwb29sLCBidXQgdGhlIHBvb2wgKDQgdGhyZWFkcyBieSBkZWZhdWx0KSBpcyBzaGFyZWRcbiAqIHdpdGggRE5TIGxvb2t1cHMsIHpsaWIsIGNyeXB0byBhbmQgb3RoZXIgZnMgd29yaywgc28gd2hpbGUgaXQgaXMgYnVzeSB0aGUgd2luZG93IGlzIGFzIGxvbmcgYXMgdGhhdCB3b3JrIOKAlCBhbmQgc2luY2VcbiAqIHdyaXRlcyBjb21wbGV0ZSBvdXQgb2Ygb3JkZXIsIGEga2lsbCBjYW4gbG9zZSBhbiBlbnRyeSBpbiB0aGUgbWlkZGxlICh0aGUgcmVhZGVyIHJlcG9ydHMgdGhlIGhvbGUpLiBgZmx1c2goKWAgd2FpdHMgZm9yIGV2ZXJ5IHdyaXRlIGFuZFxuICogYGZzeW5jYHMg4oCUIHRoZSBzdGVwIHRoYXQgYWxzbyBzdXJ2aXZlcyB0aGUgbWFjaGluZSBsb3NpbmcgcG93ZXIsIGFuZCB0aGUgb25lIHRoZSBleGVjdXRvciBhd2FpdHMgYWZ0ZXIgZWFjaCBydW4nc1xuICogY2xvc2luZyBlbnRyeS5cbiAqXG4gKiBUSEUgVEhSRUFUIE1PREVMLCBhcyBjb2RlIOKAlCBldmVyeSByZXNvdXJjZSBib3VuZGVkLCBub3RoaW5nIHRoYXQgY2FuIHN0YWxsIHRoZSBydW46XG4gKiAgIC0gT05MWSBUSEUgUEFUSCBUSEUgQVBQIEdJVkVTLiBSZXNvbHZlZCBvbmNlIGFuZCBvcGVuZWQgb25jZSwgYXQgYGZpbGVTaW5rKHBhdGgpYDsgZXZlcnkgZW50cnkgZ29lcyB0byB0aGF0IG9wZW5cbiAqICAgICBmaWxlLiBBIHN5bWJvbGljIGxpbmsgYXQgdGhlIHBhdGggaXMgcmVmdXNlZCAoYE9fTk9GT0xMT1dgLCB3aGVyZSB0aGUgcGxhdGZvcm0gaGFzIGl0KSwgYW5kIHNvIGlzIGFueXRoaW5nXG4gKiAgICAgdGhhdCBpcyBub3QgYSByZWd1bGFyIGZpbGUsIGEgZmlsZSB3aXRoIGFub3RoZXIgaGFyZCBsaW5rLCBhbm90aGVyIG93bmVyLCBvciBncm91cC93b3JsZCB3cml0ZS4gQSBmaWxlIHRoZVxuICogICAgIHNpbmsgY3JlYXRlcyBpcyBgMG82MDBgLlxuICogICAtIEFUT01JQyBQRVIgRU5UUlkuIEEgbGluZSBpcyBlbmNvZGVkIGluIGZ1bGwgZmlyc3Qg4oCUIGFuIGVudHJ5IEpTT04gY2Fubm90IHdyaXRlIChhIGBCaWdJbnRgLCBhIGN5Y2xlKSBpc1xuICogICAgIHJlZnVzZWQgd2hvbGUg4oCUIHRoZW4gd3JpdHRlbiBhdCBpdHMgb3duIG9mZnNldC4gQSB3cml0ZSB0aGF0IGZhaWxzIHBhcnQtd2F5IGxlYXZlcyBhIGhvbGUgdXAgdG8gdGhlIG5leHRcbiAqICAgICBlbnRyeSdzIG9mZnNldDsgdGhlIHJlYWRlciBzcGxpdHMgYXQgaXQgKE5VTCksIHNvIGEgdG9ybiBsaW5lIG5ldmVyIHN3YWxsb3dzIHRoZSBvbmUgYWZ0ZXIgaXQgKGFuIGV4aXN0aW5nXG4gKiAgICAgZmlsZSB3aXRoIGEgdG9ybiB0YWlsIGdldHMgYSBuZXdsaW5lIGZpcnN0KS5cbiAqICAgLSBCT1VOREVEOiBgbWF4RW50cnlCeXRlc2AgKG9uZSBsaW5lLCA4IE1pQiDigJQgcmVmdXNlZCBieSBuYW1lLCBiZWZvcmUgaXQgaXMgZW5jb2RlZCB3aGVuIGl0cyBsZW5ndGggYWxyZWFkeVxuICogICAgIHNheXMgc28pLCBgbWF4UXVldWVkQnl0ZXNgIChhY2NlcHRlZCwgbm90IHlldCB3cml0dGVuLCAxNiBNaUIg4oCUIHBhc3QgaXQgYW4gZW50cnkgaXMgRFJPUFBFRCBhbmQgY291bnRlZCwgbmV2ZXJcbiAqICAgICBidWZmZXJlZCB3aXRob3V0IGxpbWl0KSwgYG1heEJ5dGVzYCAodGhlIGZpbGUsIDY0IE1pQiDigJQgb25jZSBmdWxsLCBldmVyeSBmdXJ0aGVyIGVudHJ5IGlzIHJlZnVzZWQgYW5kIGNvdW50ZWQ7XG4gKiAgICAgYSBjbG9zaW5nIGVudHJ5IG1heSB1c2UgYSA2NCBLaUIgcmVzZXJ2ZSBzbyBhIGZ1bGwgZmlsZSBjYW4gc3RpbGwgc2F5IGhvdyB0aGUgcnVuIGVuZGVkKSwgYGZsdXNoVGltZW91dE1zYFxuICogICAgICgxMCBzIOKAlCB0aGVuIGBmbHVzaCgpYCByZWplY3RzKS4gRXZlcnkgcmVmdXNhbCB0aHJvd3MgZnJvbSB0aGUgc2luayBtZXRob2QsIHdoaWNoIHRoZSBsb2cgY291bnRzXG4gKiAgICAgKGBnZXRTbmFwc2hvdCgpLnNpbmtgKTsgYSB3cml0ZSB0aGF0IGZhaWxzIGxhdGVyIHJlamVjdHMgdGhhdCBlbnRyeSdzIHByb21pc2UsIGNvdW50ZWQgdGhlIHNhbWUgd2F5LlxuICogICAtIEFTWU5DSFJPTk9VUyBXUklURVMgT05MWS4gTm8gbWV0aG9kIGJsb2NrcyBvbiB0aGUgZGlzazsgdGhlIGZpbGUgaXMgcmVsZWFzZWQgYXN5bmNocm9ub3VzbHksIGFmdGVyIGV2ZXJ5XG4gKiAgICAgd3JpdGUgYW5kIGV2ZXJ5IHN0YXJ0ZWQgZnN5bmMuXG4gKiAgIC0gTk8gU0VDUkVUIE9OIERJU0sgaXMgdGhlIEVYRUNVVE9SJ3MgbGF3LCBhcHBsaWVkIGJlZm9yZSBhbnkgZW50cnkgcmVhY2hlcyBhbiBhZGFwdGVyIChgcnVubmVyL3JlY29yZFNpbmsudHNgKTpcbiAqICAgICB0aGlzIGZpbGUgd3JpdGVzIHdoYXQgaXQgaXMgaGFuZGVkIGFuZCByZWFkcyBub3RoaW5nIGVsc2UuXG4gKiAgIC0gT05FIFdSSVRFUiBQRVIgRklMRS4gQSBzZWNvbmQgc2luayBvbiBhIGZpbGUgdGhpcyBwcm9jZXNzIGhhcyBvcGVuIGlzIHJlZnVzZWQgKGJ5IGRldmljZSBhbmQgaW5vZGUsIGFjcm9zcyB0aGVcbiAqICAgICBDb21tb25KUyBhbmQgRVNNIGJ1aWxkcykuIEFOT1RIRVIgUFJPQ0VTUyB3cml0aW5nIHRoZSBzYW1lIHBhdGggaXMgbm90IHNlZW4gYXQgb3BlbjogZWFjaCB3cml0ZXMgYXQgaXRzIG93blxuICogICAgIG9mZnNldHMgYW5kIHdvdWxkIG92ZXJ3cml0ZSB0aGUgb3RoZXIuIGBmbHVzaCgpYCBjaGVja3MgdGhlIGZpbGUncyBzaXplIGFnYWluc3Qgd2hhdCB0aGlzIHNpbmsgcGxhY2VkIGFuZCByZWplY3RzXG4gKiAgICAgKGEgbG9zcyB0aGUgcnVuIGNvdW50cykgd2hlbiBhbm90aGVyIHdyaXRlcidzIGJ5dGVzIHJlYWNoIHBhc3QgaXQg4oCUIGJlc3QgZWZmb3J0OiBhbiBvdmVyd3JpdGUgdGhpcyBzaW5rJ3Mgb3duXG4gKiAgICAgbGF0ZXIgd3JpdGVzIGNvdmVyIGlzIG5vdCBzZWVuLiBHaXZlIGVhY2ggcHJvY2VzcyBpdHMgb3duIGZpbGUuXG4gKlxuICogV0hBVCBKU09OIEtFRVBTLiBBIGxpbmUgaG9sZHMgd2hhdCBgSlNPTi5zdHJpbmdpZnlgIGtlZXBzOiBhIGBEYXRlYCBiZWNvbWVzIGl0cyBJU08gc3RyaW5nLCBhIGBNYXBgIC8gYFNldGAgYW5cbiAqIGVtcHR5IG9iamVjdCwgYHVuZGVmaW5lZGAgZGlzYXBwZWFycy4gQSByZWNvcmQgb2YgcGxhaW4gSlNPTiB2YWx1ZXMgcmVhZHMgYmFjayBleGFjdGx5IChgcmVhZFJlY29yZEZpbGVgIOKGklxuICogYHJlYWRTdG9yZWRSZWNvcmRgKTsgZm9yIHJpY2hlciB2YWx1ZXMsIGJyaW5nIGFuIGFkYXB0ZXIgd2l0aCBhIHJpY2hlciBlbmNvZGluZy5cbiAqL1xuXG5pbXBvcnQgeyBjbG9zZSwgY2xvc2VTeW5jLCBjb25zdGFudHMsIGZzdGF0LCBmc3RhdFN5bmMsIGZzeW5jLCBvcGVuU3luYywgcmVhZFN5bmMsIHdyaXRlIH0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgeyByZXNvbHZlIGFzIHJlc29sdmVQYXRoIH0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7IGdldHVpZCB9IGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5cbmltcG9ydCB0eXBlIHsgUmVjb3JkRW50cnksIFJlY29yZFNpbmsgfSBmcm9tICdmb290dHJhY2Uvd3JpdGUnO1xuXG5pbXBvcnQgdHlwZSB7IENhcHR1cmVIaXN0b3J5T3B0aW9ucyB9IGZyb20gJy4uL2NhcHR1cmUvaGlzdG9yeVR5cGVzLmpzJztcblxuLyoqIFRoZSBkZWZhdWx0IGNhcCBvbiBhIHJlY29yZCBmaWxlOiA2NCBNaUIuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9GSUxFX1NJTktfTUFYX0JZVEVTID0gNjQgKiAxMDI0ICogMTAyNDtcbi8qKiBUaGUgZGVmYXVsdCBjYXAgb24gT05FIGVudHJ5J3MgbGluZTogOCBNaUIuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9GSUxFX1NJTktfTUFYX0VOVFJZX0JZVEVTID0gOCAqIDEwMjQgKiAxMDI0O1xuLyoqIFRoZSBkZWZhdWx0IGNhcCBvbiBieXRlcyBhY2NlcHRlZCBidXQgbm90IHlldCB3cml0dGVuOiAxNiBNaUIuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9GSUxFX1NJTktfTUFYX1FVRVVFRF9CWVRFUyA9IDE2ICogMTAyNCAqIDEwMjQ7XG4vKiogVGhlIGRlZmF1bHQgYm91bmQgb24gYGZsdXNoKClgOiAxMCBzLiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfRklMRV9TSU5LX0ZMVVNIX1RJTUVPVVRfTVMgPSAxMF8wMDA7XG4vKiogSG93IGZhciBwYXN0IGBtYXhCeXRlc2AgYSBDTE9TSU5HIGVudHJ5IG1heSBzdGlsbCBnbywgc28gYSBmdWxsIGZpbGUgY2FuIHNheSBob3cgdGhlIHJ1biBlbmRlZDogNjQgS2lCLiAqL1xuY29uc3QgQ0xPU0VfUkVTRVJWRV9CWVRFUyA9IDY0ICogMTAyNDtcbi8qKiBUaGUgZGVmYXVsdCBjYXAgYHJlYWRSZWNvcmRGaWxlYCByZWFkczogMjU2IE1pQi4gKi9cbmNvbnN0IERFRkFVTFRfUkVBRF9NQVhfQllURVMgPSAyNTYgKiAxMDI0ICogMTAyNDtcblxuLyoqIGBmaWxlU2lua2AncyBvcHRpb25zIOKAlCBldmVyeSByZXNvdXJjZSB0aGUgc2luayBjYW4gc3BlbmQsIGJvdW5kZWQuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpbGVTaW5rT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgbW9zdCBieXRlcyB0aGUgZmlsZSBtYXkgaG9sZCAodGhlIGJ5dGVzIGFscmVhZHkgaW4gaXQgY291bnQpLiBPbmNlIGFuIGVudHJ5IHdvdWxkIHBhc3MgaXQsIHRoZSBmaWxlIGlzIEZVTEw6XG4gICAqIHRoYXQgZW50cnkgYW5kIGV2ZXJ5IGxhdGVyIG9uZSBpcyByZWZ1c2VkIGFuZCBjb3VudGVkIGJ5IHRoZSBydW4sIG5ldmVyIHdyaXR0ZW4g4oCUIGV4Y2VwdCBhIGNsb3NpbmcgZW50cnksIHdoaWNoXG4gICAqIG1heSB1c2UgNjQgS2lCIG1vcmUgc28gYSBmdWxsIGZpbGUgY2FuIHN0aWxsIHNheSBob3cgdGhlIHJ1biBlbmRlZC4gRGVmYXVsdCA2NCBNaUIuXG4gICAqL1xuICByZWFkb25seSBtYXhCeXRlcz86IG51bWJlcjtcbiAgLyoqIFRoZSBsYXJnZXN0IE9ORSBlbnRyeSdzIGxpbmUgbWF5IGJlOyBhIGxhcmdlciBlbnRyeSBpcyByZWZ1c2VkIHdob2xlIChgbWF4RW50cnlCeXRlc2AgbmFtZWQpLiBEZWZhdWx0IDggTWlCLiAqL1xuICByZWFkb25seSBtYXhFbnRyeUJ5dGVzPzogbnVtYmVyO1xuICAvKipcbiAgICogVGhlIG1vc3QgYnl0ZXMgYWNjZXB0ZWQgYW5kIG5vdCB5ZXQgb24gZGlzay4gV3JpdGVzIGFyZSBhc3luY2hyb25vdXMsIHNvIGEgc2luayBzbG93ZXIgdGhhbiB0aGUgcnVuIHF1ZXVlczsgcGFzdFxuICAgKiB0aGlzIGJvdW5kIGFuIGVudHJ5IGlzIERST1BQRUQgYW5kIGNvdW50ZWQgKG5ldmVyIGJ1ZmZlcmVkIHdpdGhvdXQgbGltaXQsIG5ldmVyIGEgc3RhbGwpLiBEZWZhdWx0IDE2IE1pQi5cbiAgICovXG4gIHJlYWRvbmx5IG1heFF1ZXVlZEJ5dGVzPzogbnVtYmVyO1xuICAvKiogSG93IGxvbmcgYGZsdXNoKClgIChkcmFpbiB0aGUgcXVldWUsIHRoZW4gYGZzeW5jYCkgbWF5IHRha2UgYmVmb3JlIGl0IHJlamVjdHMuIERlZmF1bHQgMTAgcy4gKi9cbiAgcmVhZG9ubHkgZmx1c2hUaW1lb3V0TXM/OiBudW1iZXI7XG59XG5cbi8qKiBBIHJlY29yZCBzaW5rIHRoYXQgYXBwZW5kcyB0byBvbmUgZmlsZSDigJQgYFJlY29yZFNpbmtgIHBsdXMgd2hhdCB0aGUgYXBwIG5lZWRzIHRvIG1hbmFnZSB0aGUgZmlsZS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlsZVNpbmsgZXh0ZW5kcyBSZWNvcmRTaW5rLCBQaWNrPENhcHR1cmVIaXN0b3J5T3B0aW9ucywgJ2Fja25vd2xlZGdlJz4ge1xuICAvKiogVGhlIGFic29sdXRlIHBhdGggdGhlIHNpbmsgd3JpdGVzIHRvIOKAlCByZXNvbHZlZCBvbmNlLCB3aGVuIGl0IHdhcyBtYWRlLiAqL1xuICByZWFkb25seSBwYXRoOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBCeXRlcyB0aGlzIHNpbmsga25vd3MgYXJlIG9uIGRpc2s6IHRoZSBmaWxlJ3Mgc2l6ZSB3aGVuIGl0IG9wZW5lZCBwbHVzIGV2ZXJ5IGJ5dGUgaXRzIHdyaXRlcyBjb21wbGV0ZWQg4oCUIGFcbiAgICogcnVubmluZyBzdW0sIG5vdCB0aGUgZmlsZSdzIGVuZCAod3JpdGVzIGNvbXBsZXRlIG91dCBvZiBvcmRlcjsgYSBmYWlsZWQgb25lIGxlYXZlcyBhIGhvbGUpLlxuICAgKi9cbiAgcmVhZG9ubHkgYnl0ZXM6IG51bWJlcjtcbiAgLyoqIEJ5dGVzIGFjY2VwdGVkIGFuZCBub3QgeWV0IHdyaXR0ZW4uICovXG4gIHJlYWRvbmx5IHF1ZXVlZEJ5dGVzOiBudW1iZXI7XG4gIC8qKiBgdHJ1ZWAgb25jZSBhbiBlbnRyeSB3YXMgcmVmdXNlZCBmb3IgYG1heEJ5dGVzYDogdGhlIGZpbGUgaXMgZnVsbCwgYW5kIG9ubHkgYSBjbG9zaW5nIGVudHJ5IG1heSBzdGlsbCBnby4gKi9cbiAgcmVhZG9ubHkgZnVsbDogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFJlbGVhc2UgdGhlIGZpbGUuIElkZW1wb3RlbnQuIEV2ZXJ5IGVudHJ5IGFmdGVyIGl0IGlzIHJlZnVzZWQgKHRoZSBydW4gY291bnRzIGl0KSwgYW5kIGBmbHVzaCgpYCByZWplY3RzO1xuICAgKiBlbnRyaWVzIGFscmVhZHkgYWNjZXB0ZWQgYXJlIHN0aWxsIHdyaXR0ZW4gKGFuZCBhIGZsdXNoIGFscmVhZHkgc3RhcnRlZCBmaW5pc2hlcyksIHRoZW4gdGhlIGZpbGUgaXMgY2xvc2VkIOKAlFxuICAgKiB0aGUgcHJvbWlzZSBzZXR0bGVzIHRoZW4uXG4gICAqL1xuICBjbG9zZSgpOiBQcm9taXNlPHZvaWQ+O1xufVxuXG4vKipcbiAqIEEgcmVjb3JkIHNpbmsgdGhhdCBhcHBlbmRzIGVhY2ggZW50cnkgdG8gYHBhdGhgIGFzIG9uZSBKU09OIGxpbmUg4oCUIHRoZSBjcmFzaC1zYWZlIHJlY29yZCBvbiBhIE5vZGUgaG9zdC5cbiAqXG4gKiBFdmVyeSBtZXRob2QgcmV0dXJucyBhdCBvbmNlOiB0aGUgbGluZSBpcyBlbmNvZGVkLCBjaGVja2VkIGFnYWluc3QgZXZlcnkgYm91bmQsIGdpdmVuIGl0cyBvZmZzZXQgYW5kIGhhbmRlZCB0b1xuICogdGhlIEkvTyBwb29sLiBUaGUgbWV0aG9kJ3MgcHJvbWlzZSBzZXR0bGVzIHdoZW4gdGhhdCBsaW5lIGlzIHdyaXR0ZW47IGEgd3JpdGUgdGhhdCBmYWlscyByZWplY3RzIGl0LCBhbmQgdGhlIHJ1blxuICogY291bnRzIHRoZSBsb3NzLlxuICpcbiAqIEB0aHJvd3MgVHlwZUVycm9yIHdoZW4gYHBhdGhgIGlzIG5vdCBhIG5vbi1lbXB0eSBzdHJpbmcgb3IgZG9lcyBub3QgbmFtZSBhIHJlZ3VsYXIgZmlsZSB0aGUgd3JpdGVyIG93bnMgYWxvbmU7XG4gKiAgIFJhbmdlRXJyb3IgZm9yIGEgYm91bmQgdGhhdCBpcyBub3QgYSB3aG9sZSBudW1iZXIg4omlIDE7IHRoZSBvcGVyYXRpbmcgc3lzdGVtJ3MgZXJyb3Igd2hlblxuICogICB0aGUgZmlsZSBjYW5ub3QgYmUgb3BlbmVkIChhIHN5bWJvbGljIGxpbmsgYXQgYHBhdGhgIGluY2x1ZGVkKS4gTWFkZSBvbmNlLCBhdCBzZXR1cCDigJQgbmV2ZXIgZHVyaW5nIGEgcnVuLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQgeyBmaWxlU2luaywgcmVhZFJlY29yZEZpbGUgfSBmcm9tICdmb290cHJpbnRqcy9zaW5rcyc7XG4gKiBpbXBvcnQgeyByZWFkU3RvcmVkUmVjb3JkIH0gZnJvbSAnZm9vdHRyYWNlJztcbiAqXG4gKiBjb25zdCBzaW5rID0gZmlsZVNpbmsoJy92YXIvZm9vdHByaW50L29yZGVycy5qc29ubCcpO1xuICogY29uc3QgZXhlY3V0b3IgPSBuZXcgRmxvd0NoYXJ0RXhlY3V0b3IoY2hhcnQsIHsgc2luayB9KTtcbiAqIGF3YWl0IGV4ZWN1dG9yLnJ1bih7IGlucHV0IH0pO1xuICogLy8g4oCmbGF0ZXIsIG9yIGFmdGVyIGEgY3Jhc2g6XG4gKiBjb25zdCByZWNvcmQgPSByZWFkU3RvcmVkUmVjb3JkKHJlYWRSZWNvcmRGaWxlKCcvdmFyL2Zvb3RwcmludC9vcmRlcnMuanNvbmwnKS5lbnRyaWVzKTtcbiAqIHJlY29yZC5yb290KHJ1bklkKT8uY29tcGxldGU7IC8vIGZhbHNlIGZvciBhIHJ1biB0aGF0IG5ldmVyIGVuZGVkXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbGVTaW5rKHBhdGg6IHN0cmluZywgb3B0aW9ucz86IEZpbGVTaW5rT3B0aW9ucyk6IEZpbGVTaW5rIHtcbiAgaWYgKHR5cGVvZiBwYXRoICE9PSAnc3RyaW5nJyB8fCBwYXRoID09PSAnJykgdGhyb3cgbmV3IFR5cGVFcnJvcignZmlsZVNpbms6IHBhdGggbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmcnKTtcbiAgY29uc3QgbWF4Qnl0ZXMgPSBib3VuZCgnbWF4Qnl0ZXMnLCBvcHRpb25zPy5tYXhCeXRlcywgREVGQVVMVF9GSUxFX1NJTktfTUFYX0JZVEVTLCAxKTtcbiAgY29uc3QgbWF4RW50cnlCeXRlcyA9IGJvdW5kKCdtYXhFbnRyeUJ5dGVzJywgb3B0aW9ucz8ubWF4RW50cnlCeXRlcywgREVGQVVMVF9GSUxFX1NJTktfTUFYX0VOVFJZX0JZVEVTLCAxKTtcbiAgY29uc3QgbWF4UXVldWVkQnl0ZXMgPSBib3VuZCgnbWF4UXVldWVkQnl0ZXMnLCBvcHRpb25zPy5tYXhRdWV1ZWRCeXRlcywgREVGQVVMVF9GSUxFX1NJTktfTUFYX1FVRVVFRF9CWVRFUywgMSk7XG4gIGNvbnN0IGZsdXNoVGltZW91dE1zID0gYm91bmQoJ2ZsdXNoVGltZW91dE1zJywgb3B0aW9ucz8uZmx1c2hUaW1lb3V0TXMsIERFRkFVTFRfRklMRV9TSU5LX0ZMVVNIX1RJTUVPVVRfTVMsIDEpO1xuICBjb25zdCBhYnNvbHV0ZSA9IHJlc29sdmVQYXRoKHBhdGgpO1xuICAvLyBOT1QgYE9fQVBQRU5EYDogZWFjaCBlbnRyeSBpcyB3cml0dGVuIGF0IHRoZSBvZmZzZXQgaXQgd2FzIGdpdmVuIHdoZW4gaXQgd2FzIHF1ZXVlZCAoYSBwb3NpdGlvbmFsIHdyaXRlKSwgc29cbiAgLy8gZXZlcnkgZW50cnkgaXMgaGFuZGVkIHRvIHRoZSBJL08gcG9vbCB0aGUgbW9tZW50IGl0IGlzIGFjY2VwdGVkIOKAlCBub25lIHdhaXRzIGZvciB0aGUgZXZlbnQgbG9vcCB0byB0dXJuLlxuICBjb25zdCBmZCA9IG9wZW5TeW5jKGFic29sdXRlLCBjb25zdGFudHMuT19SRFdSIHwgY29uc3RhbnRzLk9fQ1JFQVQgfCAoY29uc3RhbnRzLk9fTk9GT0xMT1cgPz8gMCksIDBvNjAwKTtcbiAgbGV0IGlkZW50aXR5OiBzdHJpbmc7XG4gIGxldCBzaXplOiBudW1iZXI7XG4gIGxldCBuZWVkc05ld2xpbmU6IGJvb2xlYW47IC8vIHRoZSBmaWxlIGVuZHMgd2l0aCBhIHRvcm4gbGluZTogdGhlIGZpcnN0IGVudHJ5IHN0YXJ0cyBhIG5ldyBvbmVcbiAgdHJ5IHtcbiAgICBjb25zdCBzdGF0ID0gZnN0YXRTeW5jKGZkKTtcbiAgICBpZiAoIXN0YXQuaXNGaWxlKCkpIHRocm93IG5ldyBUeXBlRXJyb3IoYGZpbGVTaW5rOiAke2Fic29sdXRlfSBpcyBub3QgYSByZWd1bGFyIGZpbGVgKTtcbiAgICByZWZ1c2VGb3JlaWduKGFic29sdXRlLCBzdGF0KTtcbiAgICBpZGVudGl0eSA9IGAke3N0YXQuZGV2fToke3N0YXQuaW5vfWA7XG4gICAgLy8gT25lIHdyaXRlciBwZXIgZmlsZSwgaW4gdGhpcyBwcm9jZXNzOiBhIHNlY29uZCBzaW5rIHdvdWxkIHBsYWNlIGl0cyBlbnRyaWVzIG92ZXIgdGhlIGZpcnN0J3MuXG4gICAgaWYgKE9QRU5fRklMRVMuaGFzKGlkZW50aXR5KSkgdGhyb3cgbmV3IFR5cGVFcnJvcihgZmlsZVNpbms6ICR7YWJzb2x1dGV9IGFscmVhZHkgaGFzIGFuIG9wZW4gc2luayBpbiB0aGlzIHByb2Nlc3NgKTtcbiAgICBzaXplID0gc3RhdC5zaXplO1xuICAgIG5lZWRzTmV3bGluZSA9IHNpemUgPiAwICYmICFlbmRzV2l0aE5ld2xpbmUoZmQsIHNpemUpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNsb3NlU3luYyhmZCk7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbiAgT1BFTl9GSUxFUy5hZGQoaWRlbnRpdHkpO1xuXG4gIGNvbnN0IGVuY29kZXIgPSBuZXcgVGV4dEVuY29kZXIoKTtcbiAgbGV0IG5leHQgPSBzaXplOyAvLyB0aGUgb2Zmc2V0IHRoZSBuZXh0IGFjY2VwdGVkIGVudHJ5IGlzIHdyaXR0ZW4gYXQg4oCUIHdoYXQgYG1heEJ5dGVzYCBib3VuZHNcbiAgbGV0IHdyaXR0ZW4gPSBzaXplOyAvLyBieXRlcyBrbm93biBvbiBkaXNrXG4gIGxldCBxdWV1ZWRCeXRlcyA9IDA7IC8vIGFjY2VwdGVkLCBub3QgeWV0IHdyaXR0ZW4gKGluIHRoZSBJL08gcG9vbCdzIGhhbmRzKVxuICBsZXQgaW5GbGlnaHQgPSAwO1xuICBsZXQgc3luY2luZyA9IDA7XG4gIGxldCBmdWxsID0gZmFsc2U7XG4gIGxldCBjbG9zaW5nID0gZmFsc2U7XG4gIGxldCByZWxlYXNlZCA9IGZhbHNlO1xuICBsZXQgZHJhaW5lZDogKCgpID0+IHZvaWQpW10gPSBbXTtcbiAgbGV0IGNsb3NlZFNpZ25hbDogKCgpID0+IHZvaWQpIHwgdW5kZWZpbmVkO1xuICBjb25zdCB3aGVuUmVsZWFzZWQgPSBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4gKGNsb3NlZFNpZ25hbCA9IHJlc29sdmUpKTtcblxuICAvKiogUmVsZWFzZSB0aGUgZmlsZSBvbmNlIG5vdGhpbmcgaXMgaW4gZmxpZ2h0IGFuZCBubyBmc3luYyBpcyBwZW5kaW5nIOKAlCBhc3luY2hyb25vdXNseTsgYW4gZXJyb3IgaXMgaWdub3JlZC4gKi9cbiAgY29uc3QgcmVsZWFzZUlmSWRsZSA9ICgpOiB2b2lkID0+IHtcbiAgICBpZiAoIWNsb3NpbmcgfHwgcmVsZWFzZWQgfHwgaW5GbGlnaHQgPiAwIHx8IHN5bmNpbmcgPiAwKSByZXR1cm47XG4gICAgcmVsZWFzZWQgPSB0cnVlO1xuICAgIE9QRU5fRklMRVMuZGVsZXRlKGlkZW50aXR5KTtcbiAgICBjbG9zZShmZCwgKCkgPT4gY2xvc2VkU2lnbmFsPy4oKSk7XG4gIH07XG5cbiAgLyoqIEV2ZXJ5dGhpbmcgYWNjZXB0ZWQgaXMgd3JpdHRlbjogc3RhcnQgZWFjaCB3YWl0aW5nIGZsdXNoJ3MgZnN5bmMsIHRoZW4gcmVsZWFzZSBpZiBjbG9zaW5nLiAqL1xuICBjb25zdCBzZXR0bGVEcmFpbmVkID0gKCk6IHZvaWQgPT4ge1xuICAgIGlmIChpbkZsaWdodCA+IDApIHJldHVybjtcbiAgICBjb25zdCB3YWl0aW5nID0gZHJhaW5lZDtcbiAgICBkcmFpbmVkID0gW107XG4gICAgZm9yIChjb25zdCBzdGFydCBvZiB3YWl0aW5nKSBzdGFydCgpO1xuICAgIHJlbGVhc2VJZklkbGUoKTtcbiAgfTtcblxuICAvKiogT25lIGVudHJ5OiByZWZ1c2VkIHdob2xlIHdpdGggYSBuYW1lZCBib3VuZCAodGhlIGxvZyBjb3VudHMgaXQpLCBvciBzdWJtaXR0ZWQg4oCUIG5ldmVyIGluIHBhcnQsIG5ldmVyIGJsb2NraW5nLiAqL1xuICBjb25zdCBlbnF1ZXVlID0gKGVudHJ5OiBSZWNvcmRFbnRyeSk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgIGlmIChjbG9zaW5nKSB0aHJvdyBuZXcgRXJyb3IoYGZpbGVTaW5rOiAke2Fic29sdXRlfSBpcyBjbG9zZWRgKTtcbiAgICAvLyBUaGUgY2hlYXAgcmVmdXNhbHMgZmlyc3Q6IGEgZnVsbCBmaWxlIG9yIGEgZnVsbCBxdWV1ZSBjb3N0cyBubyBlbmNvZGluZy5cbiAgICBpZiAoZnVsbCAmJiBlbnRyeS5raW5kICE9PSAnY2xvc2VkJykgdGhyb3cgZmlsZUZ1bGwoYWJzb2x1dGUsIG1heEJ5dGVzLCBlbnRyeS5raW5kKTtcbiAgICAvLyBBIGNsb3NpbmcgZW50cnkgaXMgZXhlbXB0IGZyb20gdGhlIHF1ZXVlIGJvdW5kIChhcyBmcm9tIGBtYXhCeXRlc2AsIHdpdGhpbiBpdHMgcmVzZXJ2ZSk6IGhvdyBhIGxvZyBlbmRlZCBpc1xuICAgIC8vIHRoZSBvbmUgZW50cnkgYSBmdWxsIHF1ZXVlIG11c3Qgbm90IGRyb3AuXG4gICAgY29uc3QgaXNDbG9zaW5nRW50cnkgPSBlbnRyeS5raW5kID09PSAnY2xvc2VkJztcbiAgICBpZiAoIWlzQ2xvc2luZ0VudHJ5ICYmIHF1ZXVlZEJ5dGVzID49IG1heFF1ZXVlZEJ5dGVzKVxuICAgICAgdGhyb3cgcXVldWVGdWxsKGFic29sdXRlLCBxdWV1ZWRCeXRlcywgbWF4UXVldWVkQnl0ZXMsIGVudHJ5LmtpbmQpO1xuICAgIGNvbnN0IGpzb24gPSBKU09OLnN0cmluZ2lmeShlbnRyeSk7IC8vIGFuIGVudHJ5IEpTT04gY2Fubm90IHdyaXRlIChhIEJpZ0ludCwgYSBjeWNsZSkgdGhyb3dzIGhlcmUsIHdob2xlXG4gICAgLy8gQSBzdHJpbmcncyBsZW5ndGggbmV2ZXIgZXhjZWVkcyBpdHMgVVRGLTggc2l6ZTogYW4gZW50cnkgYWxyZWFkeSB0b28gbG9uZyBpcyByZWZ1c2VkIGJlZm9yZSBpdCBpcyBlbmNvZGVkLlxuICAgIGlmIChqc29uLmxlbmd0aCArIDEgPiBtYXhFbnRyeUJ5dGVzKSB0aHJvdyB0b29MYXJnZShhYnNvbHV0ZSwgZW50cnkua2luZCwgbWF4RW50cnlCeXRlcyk7XG4gICAgY29uc3QgZW5jb2RlZCA9IGVuY29kZXIuZW5jb2RlKGAke25lZWRzTmV3bGluZSA/ICdcXG4nIDogJyd9JHtqc29ufVxcbmApO1xuICAgIGlmIChlbmNvZGVkLmxlbmd0aCA+IG1heEVudHJ5Qnl0ZXMgKyAxKSB0aHJvdyB0b29MYXJnZShhYnNvbHV0ZSwgZW50cnkua2luZCwgbWF4RW50cnlCeXRlcyk7XG4gICAgY29uc3QgbGltaXQgPSBlbnRyeS5raW5kID09PSAnY2xvc2VkJyA/IG1heEJ5dGVzICsgQ0xPU0VfUkVTRVJWRV9CWVRFUyA6IG1heEJ5dGVzO1xuICAgIGlmIChuZXh0ICsgZW5jb2RlZC5sZW5ndGggPiBsaW1pdCkge1xuICAgICAgaWYgKGVudHJ5LmtpbmQgIT09ICdjbG9zZWQnKSBmdWxsID0gdHJ1ZTtcbiAgICAgIHRocm93IGZpbGVGdWxsKGFic29sdXRlLCBtYXhCeXRlcywgZW50cnkua2luZCk7XG4gICAgfVxuICAgIGlmICghaXNDbG9zaW5nRW50cnkgJiYgcXVldWVkQnl0ZXMgKyBlbmNvZGVkLmxlbmd0aCA+IG1heFF1ZXVlZEJ5dGVzKSB7XG4gICAgICB0aHJvdyBxdWV1ZUZ1bGwoYWJzb2x1dGUsIHF1ZXVlZEJ5dGVzLCBtYXhRdWV1ZWRCeXRlcywgZW50cnkua2luZCk7XG4gICAgfVxuICAgIG5lZWRzTmV3bGluZSA9IGZhbHNlO1xuICAgIGNvbnN0IGF0ID0gbmV4dDtcbiAgICBuZXh0ICs9IGVuY29kZWQubGVuZ3RoO1xuICAgIHF1ZXVlZEJ5dGVzICs9IGVuY29kZWQubGVuZ3RoO1xuICAgIGluRmxpZ2h0ICs9IDE7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHdyaXRlQXQoZmQsIGVuY29kZWQsIGF0LCAoZXJyb3IsIHdyb3RlKSA9PiB7XG4gICAgICAgIGluRmxpZ2h0IC09IDE7XG4gICAgICAgIHF1ZXVlZEJ5dGVzIC09IGVuY29kZWQubGVuZ3RoO1xuICAgICAgICB3cml0dGVuICs9IHdyb3RlO1xuICAgICAgICAvLyBBIGxpbmUgY3V0IHNob3J0IGxlYXZlcyBhIGhvbGUgdXAgdG8gdGhlIG5leHQgZW50cnkncyBvZmZzZXQ6IHRoZSByZWFkZXIgc3BsaXRzIGF0IGl0IChOVUwpLCBzbyBhIHRvcm5cbiAgICAgICAgLy8gbGluZSBuZXZlciBzd2FsbG93cyB0aGUgZW50cnkgYWZ0ZXIgaXQuXG4gICAgICAgIGlmIChlcnJvcikgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgZWxzZSByZXNvbHZlKCk7XG4gICAgICAgIHNldHRsZURyYWluZWQoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIGNvbnN0IGFkYXB0ZXI6IEZpbGVTaW5rID0ge1xuICAgIHBhdGg6IGFic29sdXRlLFxuICAgIGdldCBieXRlcygpIHtcbiAgICAgIHJldHVybiB3cml0dGVuO1xuICAgIH0sXG4gICAgZ2V0IHF1ZXVlZEJ5dGVzKCkge1xuICAgICAgcmV0dXJuIHF1ZXVlZEJ5dGVzO1xuICAgIH0sXG4gICAgZ2V0IGZ1bGwoKSB7XG4gICAgICByZXR1cm4gZnVsbDtcbiAgICB9LFxuICAgIG9wZW5lZDogKHsgYWRkcmVzcywgYXQsIGluaXRpYWxTdGF0ZSwgbWV0YSB9KSA9PlxuICAgICAgZW5xdWV1ZSh7IGtpbmQ6ICdvcGVuZWQnLCBhZGRyZXNzLCBhdCwgaW5pdGlhbFN0YXRlLCAuLi4obWV0YSA9PT0gdW5kZWZpbmVkID8ge30gOiB7IG1ldGEgfSkgfSksXG4gICAgY29tbWl0OiAoeyBhZGRyZXNzLCBhdCwgYnVuZGxlIH0pID0+IGVucXVldWUoeyBraW5kOiAnY29tbWl0JywgYWRkcmVzcywgYXQsIGJ1bmRsZSB9KSxcbiAgICBub3RlOiAoeyBhZGRyZXNzLCBhdCwga2luZCwgZGF0YSB9KSA9PiBlbnF1ZXVlKHsga2luZDogJ25vdGUnLCBhZGRyZXNzLCBhdCwgbm90ZToga2luZCwgZGF0YSB9KSxcbiAgICBjbG9zZWQ6ICh7IGFkZHJlc3MsIGF0LCBvdXRjb21lLCBjb21taXRzLCBtZXRhIH0pID0+XG4gICAgICBlbnF1ZXVlKHsga2luZDogJ2Nsb3NlZCcsIGFkZHJlc3MsIGF0LCBvdXRjb21lLCBjb21taXRzLCAuLi4obWV0YSA9PT0gdW5kZWZpbmVkID8ge30gOiB7IG1ldGEgfSkgfSksXG4gICAgLy8gRXhwbGljaXQgZmlsZSBjYXBhYmlsaXR5OiBmc3luYyBvZiBhbGwgcHJlY2VkaW5nIGVudHJpZXMuIFRoaXMgaXMgbm90IGFzc3VtZWQgZm9yIG90aGVyIGFkYXB0ZXJzLlxuICAgIGFja25vd2xlZGdlOiBhc3luYyAodGFyZ2V0KSA9PiB7XG4gICAgICBhd2FpdCBhZGFwdGVyLmZsdXNoISgpO1xuICAgICAgcmV0dXJuIE9iamVjdC5mcmVlemUoeyAuLi50YXJnZXQsIGR1cmFiaWxpdHk6ICdkdXJhYmxlJyB9KTtcbiAgICB9LFxuICAgIGZsdXNoOiAoKSA9PiB7XG4gICAgICBpZiAoY2xvc2luZykgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihgZmlsZVNpbms6ICR7YWJzb2x1dGV9IGlzIGNsb3NlZGApKTtcbiAgICAgIGNvbnN0IHdvcmsgPSBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGRyYWluZWQucHVzaCgoKSA9PiB7XG4gICAgICAgICAgc3luY2luZyArPSAxO1xuICAgICAgICAgIGZzeW5jKGZkLCAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgICBzeW5jaW5nIC09IDE7XG4gICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICAgIHJlbGVhc2VJZklkbGUoKTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gQW5vdGhlciB3cml0ZXIgKGFub3RoZXIgcHJvY2VzcyBvbiB0aGUgc2FtZSBwYXRoKSBncmV3IHRoZSBmaWxlIHBhc3Qgd2hhdCB0aGlzIHNpbmsgcGxhY2VkOiBpdHNcbiAgICAgICAgICAgIC8vIGVudHJpZXMgYW5kIG91cnMgb3ZlcmxhcC4gU2FpZCwgbmV2ZXIgc2lsZW50LlxuICAgICAgICAgICAgZnN0YXQoZmQsIChzdGF0RXJyb3IsIHN0YXQpID0+IHtcbiAgICAgICAgICAgICAgc3luY2luZyAtPSAxO1xuICAgICAgICAgICAgICBpZiAoc3RhdEVycm9yKSByZWplY3Qoc3RhdEVycm9yKTtcbiAgICAgICAgICAgICAgZWxzZSBpZiAoc3RhdC5zaXplID4gbmV4dCkge1xuICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoYGZpbGVTaW5rOiAke2Fic29sdXRlfSB3YXMgd3JpdHRlbiBieSBhbm90aGVyIHdyaXRlciAob25lIHNpbmsgcGVyIGZpbGUpYCkpO1xuICAgICAgICAgICAgICB9IGVsc2UgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICByZWxlYXNlSWZJZGxlKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHNldHRsZURyYWluZWQoKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHdpdGhUaW1lb3V0KFxuICAgICAgICB3b3JrLFxuICAgICAgICBmbHVzaFRpbWVvdXRNcyxcbiAgICAgICAgYGZpbGVTaW5rOiBmbHVzaCgpIG9mICR7YWJzb2x1dGV9IGRpZCBub3QgZmluaXNoIGluICR7Zmx1c2hUaW1lb3V0TXN9bXNgLFxuICAgICAgKTtcbiAgICB9LFxuICAgIGNsb3NlOiAoKSA9PiB7XG4gICAgICBpZiAoIWNsb3NpbmcpIHtcbiAgICAgICAgY2xvc2luZyA9IHRydWU7XG4gICAgICAgIHJlbGVhc2VJZklkbGUoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB3aGVuUmVsZWFzZWQ7XG4gICAgfSxcbiAgfTtcbiAgcmV0dXJuIGFkYXB0ZXI7XG59XG5cbi8qKlxuICogRmlsZXMgYSBzaW5rIG9mIHRoaXMgcHJvY2VzcyBoYXMgb3BlbiwgYnkgZGV2aWNlIGFuZCBpbm9kZSDigJQgb25lIHdyaXRlciBwZXIgZmlsZS4gS2VwdCBvbiB0aGUgZ2xvYmFsIG9iamVjdCwgc29cbiAqIHRoZSBwYWNrYWdlJ3MgQ29tbW9uSlMgYW5kIEVTTSBidWlsZHMgKHR3byBtb2R1bGUgaW5zdGFuY2VzIGluIG9uZSBwcm9jZXNzKSBzaGFyZSBpdC5cbiAqL1xuY29uc3QgT1BFTl9GSUxFUzogU2V0PHN0cmluZz4gPSAoKGdsb2JhbFRoaXMgYXMgUmVjb3JkPHN5bWJvbCwgdW5rbm93bj4pW1N5bWJvbC5mb3IoJ2Zvb3RwcmludGpzLmZpbGVTaW5rLm9wZW4nKV0gPz89XG4gIG5ldyBTZXQ8c3RyaW5nPigpKSBhcyBTZXQ8c3RyaW5nPjtcblxuZnVuY3Rpb24gZmlsZUZ1bGwocGF0aDogc3RyaW5nLCBtYXhCeXRlczogbnVtYmVyLCBraW5kOiBzdHJpbmcpOiBSYW5nZUVycm9yIHtcbiAgcmV0dXJuIG5ldyBSYW5nZUVycm9yKGBmaWxlU2luazogJHtwYXRofSBpcyBmdWxsIChtYXhCeXRlcyAke21heEJ5dGVzfSk7IHRoaXMgJHtraW5kfSBlbnRyeSB3YXMgbm90IHdyaXR0ZW5gKTtcbn1cblxuZnVuY3Rpb24gcXVldWVGdWxsKHBhdGg6IHN0cmluZywgcXVldWVkOiBudW1iZXIsIG1heFF1ZXVlZEJ5dGVzOiBudW1iZXIsIGtpbmQ6IHN0cmluZyk6IFJhbmdlRXJyb3Ige1xuICByZXR1cm4gbmV3IFJhbmdlRXJyb3IoXG4gICAgYGZpbGVTaW5rOiAke3BhdGh9IGhhcyAke3F1ZXVlZH0gYnl0ZXMgd2FpdGluZyAobWF4UXVldWVkQnl0ZXMgJHttYXhRdWV1ZWRCeXRlc30pOyB0aGlzICR7a2luZH0gZW50cnkgd2FzIGRyb3BwZWRgLFxuICApO1xufVxuXG4vKiogQSBib3VuZCByZWFkIG9mZiB0aGUgb3B0aW9uczogYWJzZW50IOKGkiB0aGUgZGVmYXVsdDsgZWxzZSBhIHdob2xlIG51bWJlciDiiaUgYG1pbmAsIG9yIGEgUmFuZ2VFcnJvciBuYW1pbmcgaXQuICovXG5mdW5jdGlvbiBib3VuZChuYW1lOiBzdHJpbmcsIHZhbHVlOiBudW1iZXIgfCB1bmRlZmluZWQsIGZhbGxiYWNrOiBudW1iZXIsIG1pbjogbnVtYmVyKTogbnVtYmVyIHtcbiAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHJldHVybiBmYWxsYmFjaztcbiAgaWYgKCFOdW1iZXIuaXNTYWZlSW50ZWdlcih2YWx1ZSkgfHwgdmFsdWUgPCBtaW4pIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihgZmlsZVNpbms6ICR7bmFtZX0gbXVzdCBiZSBhIHdob2xlIG51bWJlciwgYXQgbGVhc3QgJHttaW59YCk7XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5mdW5jdGlvbiB0b29MYXJnZShwYXRoOiBzdHJpbmcsIGtpbmQ6IHN0cmluZywgbWF4RW50cnlCeXRlczogbnVtYmVyKTogUmFuZ2VFcnJvciB7XG4gIHJldHVybiBuZXcgUmFuZ2VFcnJvcihcbiAgICBgZmlsZVNpbms6IGEgJHtraW5kfSBlbnRyeSBsYXJnZXIgdGhhbiBtYXhFbnRyeUJ5dGVzICgke21heEVudHJ5Qnl0ZXN9KSB3YXMgbm90IHdyaXR0ZW4gdG8gJHtwYXRofWAsXG4gICk7XG59XG5cbi8qKiBXcml0ZSBhbGwgb2YgYGJ1ZmZlcmAgYXQgYHBvc2l0aW9uYCAoYXN5bmNocm9ub3VzbHksIGFzIG1hbnkgd3JpdGVzIGFzIGl0IHRha2VzKTsgYHdyb3RlYCBpcyBob3cgbXVjaCB3ZW50IG91dC4gKi9cbmZ1bmN0aW9uIHdyaXRlQXQoXG4gIGZkOiBudW1iZXIsXG4gIGJ1ZmZlcjogVWludDhBcnJheSxcbiAgcG9zaXRpb246IG51bWJlcixcbiAgZG9uZTogKGVycm9yOiBFcnJvciB8IG51bGwsIHdyb3RlOiBudW1iZXIpID0+IHZvaWQsXG4pOiB2b2lkIHtcbiAgY29uc3Qgc3RlcCA9IChvZmZzZXQ6IG51bWJlcik6IHZvaWQgPT4ge1xuICAgIHdyaXRlKGZkLCBidWZmZXIsIG9mZnNldCwgYnVmZmVyLmxlbmd0aCAtIG9mZnNldCwgcG9zaXRpb24gKyBvZmZzZXQsIChlcnJvciwgbikgPT4ge1xuICAgICAgaWYgKGVycm9yKSBkb25lKGVycm9yLCBvZmZzZXQpO1xuICAgICAgZWxzZSBpZiAobiA9PT0gMCkgZG9uZShuZXcgRXJyb3IoJ2ZpbGVTaW5rOiB0aGUgZGlzayB0b29rIG5vIGJ5dGVzJyksIG9mZnNldCk7XG4gICAgICBlbHNlIGlmIChvZmZzZXQgKyBuIDwgYnVmZmVyLmxlbmd0aCkgc3RlcChvZmZzZXQgKyBuKTtcbiAgICAgIGVsc2UgZG9uZShudWxsLCBidWZmZXIubGVuZ3RoKTtcbiAgICB9KTtcbiAgfTtcbiAgc3RlcCgwKTtcbn1cblxuLyoqIGB3b3JrYCwgb3IgYSByZWplY3Rpb24gbmFtaW5nIHRoZSBib3VuZCBvbmNlIGBtc2AgcGFzc2VkIOKAlCB0aGUgd29yayBnb2VzIG9uLCBub2JvZHkgd2FpdHMgZm9yIGl0LiAqL1xuZnVuY3Rpb24gd2l0aFRpbWVvdXQod29yazogUHJvbWlzZTx2b2lkPiwgbXM6IG51bWJlciwgbWVzc2FnZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHJlamVjdChuZXcgRXJyb3IobWVzc2FnZSkpLCBtcyk7XG4gICAgLy8gQSB0aW1lciB0aGF0IG9ubHkgYm91bmRzIGEgd2FpdCBuZXZlciBrZWVwcyB0aGUgcHJvY2VzcyBhbGl2ZSBvbiBpdHMgb3duLlxuICAgICh0aW1lciBhcyB7IHVucmVmPzogKCkgPT4gdm9pZCB9KS51bnJlZj8uKCk7XG4gICAgUHJvbWlzZS5wcm90b3R5cGUudGhlbi5jYWxsKFxuICAgICAgd29yayxcbiAgICAgICgpID0+IHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfSxcbiAgICAgIChlcnJvcjogdW5rbm93bikgPT4ge1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgfSxcbiAgICApO1xuICB9KTtcbn1cblxuLyoqXG4gKiBSZWZ1c2UgYSBmaWxlIHNvbWVvbmUgZWxzZSBjb3VsZCByZWFkIG9yIHJld3JpdGUgYmVoaW5kIHRoZSBzaW5rOiBhIGhhcmQgbGluayAoYW5vdGhlciBuYW1lIGZvciB0aGUgc2FtZSBieXRlcyDigJRcbiAqIHRoZSBzaW5rIHdvdWxkIGFwcGVuZCBpbnRvIGl0KSwgYSBmaWxlIG93bmVkIGJ5IGFub3RoZXIgdXNlciwgb3Igb25lIG90aGVycyBtYXkgd3JpdGUuIEEgZmlsZSB0aGUgc2luayBjcmVhdGVzIGlzXG4gKiBgMG82MDBgIGFuZCBwYXNzZXM7IGEgcHJlLWV4aXN0aW5nIG9uZSBtdXN0IGFscmVhZHkgYmUgcHJpdmF0ZSB0byB0aGUgd3JpdGVyLiAoTm90IG9uIFdpbmRvd3MsIHdob3NlIG1vZGVzIGFuZFxuICogb3duZXJzIGRvIG5vdCBtYXA6IHRoZXJlIGBPX05PRk9MTE9XYCBpcyBhYnNlbnQgdG9vIOKAlCB0aGUgZ3VpZGUgbmFtZXMgYm90aC4pXG4gKi9cbmZ1bmN0aW9uIHJlZnVzZUZvcmVpZ24ocGF0aDogc3RyaW5nLCBzdGF0OiB7IHJlYWRvbmx5IG5saW5rOiBudW1iZXI7IHJlYWRvbmx5IHVpZDogbnVtYmVyOyByZWFkb25seSBtb2RlOiBudW1iZXIgfSkge1xuICBpZiAoc3RhdC5ubGluayA+IDEpIHRocm93IG5ldyBUeXBlRXJyb3IoYGZpbGVTaW5rOiAke3BhdGh9IGhhcyBvdGhlciBoYXJkIGxpbmtzIOKAlCByZWZ1c2luZyB0byB3cml0ZSB0aHJvdWdoIG9uZWApO1xuICBjb25zdCB1aWQgPSB0eXBlb2YgZ2V0dWlkID09PSAnZnVuY3Rpb24nID8gZ2V0dWlkKCkgOiB1bmRlZmluZWQ7XG4gIGlmICh1aWQgIT09IHVuZGVmaW5lZCAmJiBzdGF0LnVpZCAhPT0gdWlkKSB0aHJvdyBuZXcgVHlwZUVycm9yKGBmaWxlU2luazogJHtwYXRofSBiZWxvbmdzIHRvIGFub3RoZXIgdXNlcmApO1xuICBpZiAodWlkICE9PSB1bmRlZmluZWQgJiYgKHN0YXQubW9kZSAmIDBvMDIyKSAhPT0gMCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYGZpbGVTaW5rOiAke3BhdGh9IGlzIHdyaXRhYmxlIGJ5IG90aGVycyDigJQgbWFrZSBpdCAwbzYwMCAob3IgcmVtb3ZlIGl0KSBmaXJzdGApO1xuICB9XG59XG5cbi8qKiBXaGV0aGVyIHRoZSBmaWxlJ3MgbGFzdCBieXRlIGlzIGEgbmV3bGluZSDigJQgcmVhZCBvbmNlLCB3aGVuIHRoZSBzaW5rIG9wZW5zIGFuIGV4aXN0aW5nIGZpbGUuICovXG5mdW5jdGlvbiBlbmRzV2l0aE5ld2xpbmUoZmQ6IG51bWJlciwgc2l6ZTogbnVtYmVyKTogYm9vbGVhbiB7XG4gIGNvbnN0IGxhc3QgPSBuZXcgVWludDhBcnJheSgxKTtcbiAgcmV0dXJuIHJlYWRTeW5jKGZkLCBsYXN0LCAwLCAxLCBzaXplIC0gMSkgPT09IDEgJiYgbGFzdFswXSA9PT0gMHgwYTtcbn1cblxuLyoqIEEgcmVjb3JkIGZpbGUgcmVhZCBiYWNrOiBldmVyeSBwYXJzZWQgbGluZSwgYW5kIGV2ZXJ5IGxpbmUgdGhhdCBjb3VsZCBub3QgYmUuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlY29yZEZpbGUge1xuICAvKiogVGhlIHBhcnNlZCBlbnRyaWVzLCBpbiBmaWxlIG9yZGVyIOKAlCB1bnRydXN0ZWQgaW5wdXQgZm9yIGByZWFkU3RvcmVkUmVjb3JkYCAoYGZvb3R0cmFjZWApLiAqL1xuICByZWFkb25seSBlbnRyaWVzOiByZWFkb25seSB1bmtub3duW107XG4gIC8qKiBFYWNoIGxpbmUgdGhhdCBpcyBub3QgSlNPTiAoYSB0b3JuIGxhc3QgbGluZSwgYSBjb3JydXB0IG9uZSksIGJ5IGl0cyAxLWJhc2VkIG51bWJlci4gQmxhbmsgbGluZXMgYXJlIHNraXBwZWQuICovXG4gIHJlYWRvbmx5IHVucmVhZGFibGU6IHJlYWRvbmx5IHsgcmVhZG9ubHkgbGluZTogbnVtYmVyOyByZWFkb25seSByZWFzb246IHN0cmluZyB9W107XG59XG5cbi8qKlxuICogUmVhZCBhIHJlY29yZCBmaWxlIGJhY2ssIGxpbmUgYnkgbGluZSDigJQgdGhlIGVudHJpZXMgZm9yIGByZWFkU3RvcmVkUmVjb3JkYCwgYW5kIGV2ZXJ5IGxpbmUgdGhhdCBjb3VsZCBub3QgYmVcbiAqIHJlYWQsIGJ5IG51bWJlciwgbmV2ZXIgYSBmYWlsZWQgcmVhZC4gQSBzdG9yZWQga2V5IG5hbWVkIGBfX3Byb3RvX19gIHN0YXlzIGRhdGEgKGBKU09OLnBhcnNlYCBtYWtlcyBpdCBhbiBvd25cbiAqIHByb3BlcnR5KS4gVGhlIGZpbGUgaXMgdW50cnVzdGVkOiBhIGZpbGUgbGFyZ2VyIHRoYW4gYG1heEJ5dGVzYCAoZGVmYXVsdCAyNTYgTWlCKSBpcyByZWZ1c2VkIGJlZm9yZSBpdCBpcyByZWFkLlxuICpcbiAqIEB0aHJvd3MgUmFuZ2VFcnJvciB3aGVuIHRoZSBmaWxlIGlzIGxhcmdlciB0aGFuIGBtYXhCeXRlc2A7IHRoZSBvcGVyYXRpbmcgc3lzdGVtJ3MgZXJyb3Igd2hlbiBpdCBjYW5ub3QgYmUgcmVhZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlYWRSZWNvcmRGaWxlKHBhdGg6IHN0cmluZywgb3B0aW9ucz86IHsgcmVhZG9ubHkgbWF4Qnl0ZXM/OiBudW1iZXIgfSk6IFJlY29yZEZpbGUge1xuICBpZiAodHlwZW9mIHBhdGggIT09ICdzdHJpbmcnIHx8IHBhdGggPT09ICcnKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdyZWFkUmVjb3JkRmlsZTogcGF0aCBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZycpO1xuICBjb25zdCBtYXhCeXRlcyA9IGJvdW5kKCdtYXhCeXRlcycsIG9wdGlvbnM/Lm1heEJ5dGVzLCBERUZBVUxUX1JFQURfTUFYX0JZVEVTLCAxKTtcbiAgLy8gT25lIGRlc2NyaXB0b3IgZm9yIHRoZSBjaGVjayBBTkQgdGhlIHJlYWQgKGEgZmlsZSB0aGF0IGdyb3dzIGJldHdlZW4gdGhlbSBpcyBzdGlsbCBib3VuZGVkKTsgYSByZWd1bGFyIGZpbGVcbiAgLy8gb25seSAoYSBGSUZPIHdvdWxkIGJsb2NrLCBhIGRldmljZSBuZXZlciBlbmQpOyBhdCBtb3N0IGBtYXhCeXRlc2AgcmVhZC5cbiAgLy8gT19OT05CTE9DSzogYSBGSUZPIGF0IHRoZSBwYXRoIG11c3Qgbm90IGJsb2NrIHRoZSBvcGVuIGJlZm9yZSB0aGUgcmVndWxhci1maWxlIGNoZWNrIHJlZnVzZXMgaXQuXG4gIGNvbnN0IGZkID0gb3BlblN5bmMocGF0aCwgY29uc3RhbnRzLk9fUkRPTkxZIHwgKGNvbnN0YW50cy5PX05PRk9MTE9XID8/IDApIHwgKGNvbnN0YW50cy5PX05PTkJMT0NLID8/IDApKTtcbiAgbGV0IHJhdzogVWludDhBcnJheTtcbiAgdHJ5IHtcbiAgICBjb25zdCBzdGF0ID0gZnN0YXRTeW5jKGZkKTtcbiAgICBpZiAoIXN0YXQuaXNGaWxlKCkpIHRocm93IG5ldyBUeXBlRXJyb3IoYHJlYWRSZWNvcmRGaWxlOiAke3BhdGh9IGlzIG5vdCBhIHJlZ3VsYXIgZmlsZWApO1xuICAgIGlmIChzdGF0LnNpemUgPiBtYXhCeXRlcykge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYHJlYWRSZWNvcmRGaWxlOiAke3BhdGh9IGhvbGRzICR7c3RhdC5zaXplfSBieXRlcywgcGFzdCB0aGUgbGltaXQgb2YgJHttYXhCeXRlc31gKTtcbiAgICB9XG4gICAgY29uc3QgYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkoTWF0aC5taW4oc3RhdC5zaXplLCBtYXhCeXRlcykgKyAxKTtcbiAgICBsZXQgcmVhZCA9IDA7XG4gICAgZm9yICg7Oykge1xuICAgICAgY29uc3QgbiA9IHJlYWRTeW5jKGZkLCBidWZmZXIsIHJlYWQsIGJ1ZmZlci5sZW5ndGggLSByZWFkLCByZWFkKTtcbiAgICAgIGlmIChuID09PSAwKSBicmVhaztcbiAgICAgIHJlYWQgKz0gbjtcbiAgICAgIGlmIChyZWFkID09PSBidWZmZXIubGVuZ3RoKSB7XG4gICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKGByZWFkUmVjb3JkRmlsZTogJHtwYXRofSBncmV3IHBhc3QgdGhlIGxpbWl0IG9mICR7bWF4Qnl0ZXN9IGJ5dGVzIHdoaWxlIGJlaW5nIHJlYWRgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmF3ID0gYnVmZmVyLnN1YmFycmF5KDAsIHJlYWQpO1xuICB9IGZpbmFsbHkge1xuICAgIGNsb3NlU3luYyhmZCk7XG4gIH1cbiAgY29uc3QgdGV4dCA9IG5ldyBUZXh0RGVjb2RlcigndXRmLTgnKS5kZWNvZGUocmF3KTtcbiAgY29uc3QgZW50cmllczogdW5rbm93bltdID0gW107XG4gIGNvbnN0IHVucmVhZGFibGU6IHsgbGluZTogbnVtYmVyOyByZWFzb246IHN0cmluZyB9W10gPSBbXTtcbiAgY29uc3QgbGluZXMgPSB0ZXh0LnNwbGl0KCdcXG4nKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xuICAgIC8vIEEgcnVuIG9mIE5VTCBieXRlcyBpcyBhIGhvbGUgYSBjdXQtc2hvcnQgd3JpdGUgbGVmdCBiZWZvcmUgdGhlIG5leHQgZW50cnkncyBvZmZzZXQ6IGl0IGVuZHMgdGhlIHRvcm4gcGFydCxcbiAgICAvLyBzbyB0aGUgZW50cnkgYWZ0ZXIgaXQgcmVhZHMgb24gaXRzIG93biAodGhlIHNhbWUgbGluZSBudW1iZXIgbmFtZXMgYm90aCBwaWVjZXMpLlxuICAgIGNvbnN0IGxpbmUgPSBsaW5lc1tpXTtcbiAgICAvLyBBIGhvbGUgaXMgcmVwb3J0ZWQsIG5ldmVyIHNraXBwZWQ6IGJ5dGVzIHRoYXQgbmV2ZXIgcmVhY2hlZCB0aGUgZGlzayBtYXkgYmUgYSB3aG9sZSBlbnRyeSBsb3N0IG1pZC1maWxlLlxuICAgIGlmIChsaW5lLmluY2x1ZGVzKCdcXDAnKSkgdW5yZWFkYWJsZS5wdXNoKHsgbGluZTogaSArIDEsIHJlYXNvbjogJ2EgaG9sZSDigJQgYnl0ZXMgdGhhdCBuZXZlciByZWFjaGVkIHRoZSBkaXNrJyB9KTtcbiAgICBmb3IgKGNvbnN0IHBpZWNlIG9mIGxpbmUuc3BsaXQoL1xcMCsvKSkge1xuICAgICAgaWYgKHBpZWNlLnRyaW0oKSA9PT0gJycpIGNvbnRpbnVlO1xuICAgICAgdHJ5IHtcbiAgICAgICAgZW50cmllcy5wdXNoKEpTT04ucGFyc2UocGllY2UpKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICB1bnJlYWRhYmxlLnB1c2goeyBsaW5lOiBpICsgMSwgcmVhc29uOiAnbm90IEpTT04g4oCUIGEgdG9ybiBvciBjb3JydXB0IGxpbmUnIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4geyBlbnRyaWVzLCB1bnJlYWRhYmxlIH07XG59XG4iXX0=
|
package/dist/esm/trace.d.ts
CHANGED
|
@@ -21,3 +21,5 @@ export { formatQualityTrace, qualityTrace } from './lib/recorder/qualityTrace.js
|
|
|
21
21
|
export { SequenceStore } from './lib/recorder/SequenceStore.js';
|
|
22
22
|
export type { Topology, TopologyEdge, TopologyIncomingKind, TopologyNode, TopologyNodeKind, TopologyRecorderOptions, } from './lib/recorder/TopologyRecorder.js';
|
|
23
23
|
export { TopologyRecorder, topologyRecorder } from './lib/recorder/TopologyRecorder.js';
|
|
24
|
+
export type { StoredCaptureHistory, StoredCaptureResult } from './lib/runner/readStoredCapture.js';
|
|
25
|
+
export { readStoredCapture } from './lib/runner/readStoredCapture.js';
|
package/dist/esm/trace.js
CHANGED
|
@@ -15,4 +15,5 @@ export { QualityRecorder } from './lib/recorder/QualityRecorder.js';
|
|
|
15
15
|
export { formatQualityTrace, qualityTrace } from './lib/recorder/qualityTrace.js';
|
|
16
16
|
export { SequenceStore } from './lib/recorder/SequenceStore.js';
|
|
17
17
|
export { TopologyRecorder, topologyRecorder } from './lib/recorder/TopologyRecorder.js';
|
|
18
|
-
|
|
18
|
+
export { readStoredCapture } from './lib/runner/readStoredCapture.js';
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHJhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBR0gsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2xFLE9BQU8sRUFDTCxxQkFBcUIsRUFDckIsa0JBQWtCLEVBQ2xCLHNCQUFzQixFQUN0QixlQUFlLEVBQ2Ysa0JBQWtCLEdBQ25CLE1BQU0sNEJBQTRCLENBQUM7QUFDcEMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFFMUUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFFOUYsT0FBTyxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUscUJBQXFCLEVBQUUsZUFBZSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDdkgsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRTFELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUVwRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDbEYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBU2hFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBRXhGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBmb290cHJpbnRqcy90cmFjZSDigJQgcmVjb3JkZXIgc3RvcmVzLCB0b3BvbG9neSwgY2hhcnQgYm91bmRhcmllcyBhbmQgY29udHJvbCBkZXBlbmRlbmNpZXMuXG4gKlxuICogUmVjb3JkIHJlYWRlcnMsIHR5cGVzIGFuZCBydW50aW1lLUlEIGdyYW1tYXIgYmVsb25nIHRvIGBmb290dHJhY2VgOyByZWNvcmQgcGF0aCBoZWxwZXJzIGJlbG9uZ1xuICogdG8gYGZvb3R0cmFjZS9wYXRoc2AsIGFuZCByZWNvcmQgd3JpdGVycyB0byBgZm9vdHRyYWNlL3dyaXRlYC4gVGhpcyBkb29yIGV4cG9ydHMgb25seSBlbmdpbmUtb3duZWRcbiAqIG9ic2VydmVyIHRvb2xzLiBSZWNvcmQgc3ltYm9scyBhcmUgbmV2ZXIgcmUtZXhwb3J0ZWQgYWNyb3NzIHRoZSBwYWNrYWdlIGJvdW5kYXJ5LlxuICovXG5cbmV4cG9ydCB0eXBlIHsgV2Fsa2VySXRlbSwgV2Fsa2VyT3B0aW9ucyB9IGZyb20gJy4vbGliL2VuZ2luZS93YWxrU3ViZmxvd1NwZWMuanMnO1xuZXhwb3J0IHsgd2Fsa1N1YmZsb3dTcGVjIH0gZnJvbSAnLi9saWIvZW5naW5lL3dhbGtTdWJmbG93U3BlYy5qcyc7XG5leHBvcnQge1xuICBCUkFOQ0hfU0VHTUVOVF9NQVJLRVIsXG4gIGJ1aWxkQnJhbmNoU2VnbWVudCxcbiAgaGFzQnJhbmNoU2VnbWVudE1hcmtlcixcbiAgaXNCcmFuY2hTZWdtZW50LFxuICBwYXJzZUJyYW5jaFNlZ21lbnQsXG59IGZyb20gJy4vbGliL2lkcy9icmFuY2hTZWdtZW50LmpzJztcbmV4cG9ydCB7IEJvdW5kYXJ5U3RhdGVTdG9yZSB9IGZyb20gJy4vbGliL3JlY29yZGVyL0JvdW5kYXJ5U3RhdGVTdG9yZS5qcyc7XG5leHBvcnQgdHlwZSB7IENvbnRyb2xEZWNpc2lvblJlY29yZCwgQ29udHJvbERlcFJlY29yZGVyT3B0aW9ucyB9IGZyb20gJy4vbGliL3JlY29yZGVyL0NvbnRyb2xEZXBSZWNvcmRlci5qcyc7XG5leHBvcnQgeyBDb250cm9sRGVwUmVjb3JkZXIsIGNvbnRyb2xEZXBSZWNvcmRlciB9IGZyb20gJy4vbGliL3JlY29yZGVyL0NvbnRyb2xEZXBSZWNvcmRlci5qcyc7XG5leHBvcnQgdHlwZSB7IEluT3V0QXR0ZW1wdHMsIEluT3V0RW50cnksIEluT3V0UGhhc2UsIEluT3V0UmVjb3JkZXJPcHRpb25zIH0gZnJvbSAnLi9saWIvcmVjb3JkZXIvSW5PdXRSZWNvcmRlci5qcyc7XG5leHBvcnQgeyBJbk91dFJlY29yZGVyLCBpbk91dFJlY29yZGVyLCBST09UX1JVTlRJTUVfU1RBR0VfSUQsIFJPT1RfU1VCRkxPV19JRCB9IGZyb20gJy4vbGliL3JlY29yZGVyL0luT3V0UmVjb3JkZXIuanMnO1xuZXhwb3J0IHsgS2V5ZWRTdG9yZSB9IGZyb20gJy4vbGliL3JlY29yZGVyL0tleWVkU3RvcmUuanMnO1xuZXhwb3J0IHR5cGUgeyBRdWFsaXR5RW50cnksIFF1YWxpdHlSZWNvcmRlck9wdGlvbnMsIFF1YWxpdHlTY29yaW5nRm4gfSBmcm9tICcuL2xpYi9yZWNvcmRlci9RdWFsaXR5UmVjb3JkZXIuanMnO1xuZXhwb3J0IHsgUXVhbGl0eVJlY29yZGVyIH0gZnJvbSAnLi9saWIvcmVjb3JkZXIvUXVhbGl0eVJlY29yZGVyLmpzJztcbmV4cG9ydCB0eXBlIHsgUXVhbGl0eUZyYW1lLCBRdWFsaXR5U3RhY2tUcmFjZSB9IGZyb20gJy4vbGliL3JlY29yZGVyL3F1YWxpdHlUcmFjZS5qcyc7XG5leHBvcnQgeyBmb3JtYXRRdWFsaXR5VHJhY2UsIHF1YWxpdHlUcmFjZSB9IGZyb20gJy4vbGliL3JlY29yZGVyL3F1YWxpdHlUcmFjZS5qcyc7XG5leHBvcnQgeyBTZXF1ZW5jZVN0b3JlIH0gZnJvbSAnLi9saWIvcmVjb3JkZXIvU2VxdWVuY2VTdG9yZS5qcyc7XG5leHBvcnQgdHlwZSB7XG4gIFRvcG9sb2d5LFxuICBUb3BvbG9neUVkZ2UsXG4gIFRvcG9sb2d5SW5jb21pbmdLaW5kLFxuICBUb3BvbG9neU5vZGUsXG4gIFRvcG9sb2d5Tm9kZUtpbmQsXG4gIFRvcG9sb2d5UmVjb3JkZXJPcHRpb25zLFxufSBmcm9tICcuL2xpYi9yZWNvcmRlci9Ub3BvbG9neVJlY29yZGVyLmpzJztcbmV4cG9ydCB7IFRvcG9sb2d5UmVjb3JkZXIsIHRvcG9sb2d5UmVjb3JkZXIgfSBmcm9tICcuL2xpYi9yZWNvcmRlci9Ub3BvbG9neVJlY29yZGVyLmpzJztcbmV4cG9ydCB0eXBlIHsgU3RvcmVkQ2FwdHVyZUhpc3RvcnksIFN0b3JlZENhcHR1cmVSZXN1bHQgfSBmcm9tICcuL2xpYi9ydW5uZXIvcmVhZFN0b3JlZENhcHR1cmUuanMnO1xuZXhwb3J0IHsgcmVhZFN0b3JlZENhcHR1cmUgfSBmcm9tICcuL2xpYi9ydW5uZXIvcmVhZFN0b3JlZENhcHR1cmUuanMnO1xuIl19
|
package/dist/index.js
CHANGED
|
@@ -148,4 +148,4 @@ Object.defineProperty(exports, "enableDevMode", { enumerable: true, get: functio
|
|
|
148
148
|
Object.defineProperty(exports, "isDevMode", { enumerable: true, get: function () { return devMode_js_1.isDevMode; } });
|
|
149
149
|
var stringifySnapshot_js_1 = require("./lib/runner/stringifySnapshot.js");
|
|
150
150
|
Object.defineProperty(exports, "stringifySnapshot", { enumerable: true, get: function () { return stringifySnapshot_js_1.stringifySnapshot; } });
|
|
151
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHOzs7QUFTSCw0QkFBNEI7QUFDNUIsbURBQXdGO0FBQS9FLHFHQUFBLFNBQVMsT0FBQTtBQUFFLDRHQUFBLGdCQUFnQixPQUFBO0FBQUUsNkdBQUEsaUJBQWlCLE9BQUE7QUFzQ3ZELGtEQUFtRDtBQUExQyxzR0FBQSxVQUFVLE9BQUE7QUFRbkIsNEJBQTRCO0FBQzVCLCtDQUEyQztBQUFsQyx5R0FBQSxTQUFTLE9BQUE7QUFvQmxCLG1DQUFtQztBQUNuQyxrREFBdUQ7QUFBOUMsa0dBQUEsTUFBTSxPQUFBO0FBQUUsa0dBQUEsTUFBTSxPQUFBO0FBaUR2Qjs7Ozs7O0dBTUc7QUFDSCxtREFBcUg7QUFBNUcsbUdBQUEsT0FBTyxPQUFBO0FBQUUsK0dBQUEsbUJBQW1CLE9BQUE7QUFBRSx5R0FBQSxhQUFhLE9BQUE7QUFBRSxzR0FBQSxVQUFVLE9BQUE7QUFBRSw4R0FBQSxrQkFBa0IsT0FBQTtBQVdwRixtREFBK0Y7QUFBdEYsNkdBQUEsaUJBQWlCLE9BQUE7QUFBRSw0R0FBQSxnQkFBZ0IsT0FBQTtBQUFFLDRHQUFBLGdCQUFnQixPQUFBO0FBMEI5RCxvQkFBb0I7QUFDcEIsa0RBQXdEO0FBQS9DLDJHQUFBLGVBQWUsT0FBQTtBQVF4QixvQkFBb0I7QUFDcEIsa0RBQTBEO0FBQWpELDZHQUFBLGlCQUFpQixPQUFBO0FBRTFCLG9CQUFvQjtBQUNwQixrREFBbUQ7QUFBMUMsc0dBQUEsVUFBVSxPQUFBO0FBcUJuQiwrQkFBK0I7QUFDL0IsaURBQXNEO0FBQTdDLDBHQUFBLGNBQWMsT0FBQTtBQUV2QiwrQkFBK0I7QUFDL0Isa0RBQXFEO0FBQTVDLDBHQUFBLGFBQWEsT0FBQTtBQUV0QixvQ0FBb0M7QUFDcEMscURBQTREO0FBQW5ELDhHQUFBLGlCQUFpQixPQUFBO0FBbUMxQixxRUFBcUU7QUFDckUscURBS2lDO0FBSi9CLG1IQUFBLHNCQUFzQixPQUFBO0FBQ3RCLG1IQUFBLHNCQUFzQixPQUFBO0FBQ3RCLCtHQUFBLGtCQUFrQixPQUFBO0FBQ2xCLHdHQUFBLFdBQVcsT0FBQTtBQW1EYiwrQkFBK0I7QUFDL0IsbURBQThEO0FBQXJELGtIQUFBLHFCQUFxQixPQUFBO0FBSzlCLCtCQUErQjtBQUMvQixtREFBNkQ7QUFBcEQsaUhBQUEsb0JBQW9CLE9BQUE7QUFFN0IsK0JBQStCO0FBQy9CLG1EQUFzRTtBQUE3RCwwSEFBQSw2QkFBNkIsT0FBQTtBQUV0QywrQkFBK0I7QUFDL0IsbURBQXVFO0FBQTlELDJIQUFBLDhCQUE4QixPQUFBO0FBRXZDLCtCQUErQjtBQUMvQixtREFBeUU7QUFBaEUsNkhBQUEsZ0NBQWdDLE9BQUE7QUFFekMsK0JBQStCO0FBQy9CLG1EQUFpRTtBQUF4RCxxSEFBQSx3QkFBd0IsT0FBQTtBQUVqQywrQkFBK0I7QUFDL0IsbURBQXNFO0FBQTdELDBIQUFBLDZCQUE2QixPQUFBO0FBRXRDLCtCQUErQjtBQUMvQixtREFBb0U7QUFBM0Qsd0hBQUEsMkJBQTJCLE9BQUE7QUFFcEMsK0JBQStCO0FBQy9CLG1EQUFzRTtBQUE3RCwwSEFBQSw2QkFBNkIsT0FBQTtBQW1CdEMsdUNBQXVDO0FBQ3ZDLG1EQUE2RTtBQUFwRSwrR0FBQSxrQkFBa0IsT0FBQTtBQUFFLDZHQUFBLGdCQUFnQixPQUFBO0FBRTdDLCtFQUErRTtBQUMvRSw0RUFBNEU7QUFDNUUsK0VBQStFO0FBRS9FLDhCQUE4QjtBQUM5QixxREFBNEQ7QUFBbkQsOEdBQUEsaUJBQWlCLE9BQUE7QUEwQjFCLDZCQUE2QjtBQUM3QixrREFBaUQ7QUFBeEMsc0dBQUEsU0FBUyxPQUFBO0FBZ0VsQixzQ0FBc0M7QUFDdEMsbURBQTJFO0FBQWxFLHlHQUFBLFlBQVksT0FBQTtBQUFFLDBHQUFBLGFBQWEsT0FBQTtBQUFFLGtHQUFBLEtBQUssT0FBQTtBQUUzQyxzQ0FBc0M7QUFDdEMsbURBQXFHO0FBQTVGLGlIQUFBLG9CQUFvQixPQUFBO0FBQUUsa0hBQUEscUJBQXFCLE9BQUE7QUFBRSw0R0FBQSxlQUFlLE9BQUE7QUFTckUsZ0NBQWdDO0FBQ2hDLG1EQUEwRTtBQUFqRSw2R0FBQSxnQkFBZ0IsT0FBQTtBQUFFLDRHQUFBLGVBQWUsT0FBQTtBQUUxQywrRUFBK0U7QUFDL0UsaURBQWlEO0FBQ2pELCtFQUErRTtBQUUvRTs7Ozs7Ozs7Ozs7R0FXRztBQUNILCtDQUE0RTtBQUFuRSw0R0FBQSxjQUFjLE9BQUE7QUFBRSwyR0FBQSxhQUFhLE9BQUE7QUFBRSx1R0FBQSxTQUFTLE9BQUE7QUFlakQsMEVBQXNFO0FBQTdELHlIQUFBLGlCQUFpQixPQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBGb290UHJpbnQg4oCUIFB1YmxpYyBBUEkgKHYzKVxuICpcbiAqIFRoZSBmbG93Y2hhcnQgcGF0dGVybiBmb3IgYmFja2VuZCBjb2RlLlxuICogQnVpbGQg4oaSIFJ1biDihpIgT2JzZXJ2ZS5cbiAqXG4gKiAqKlRoZSBjb21tb24gaW1wb3J0IHBhdGhzOioqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgZmxvd0NoYXJ0LCBkZWNpZGUsIG5hcnJhdGl2ZSB9IGZyb20gJ2Zvb3RwcmludGpzJzsgICAgICAgICAgIC8vIG1haW4g4oCUIHN0YXJ0IGhlcmVcbiAqIGltcG9ydCB7IG1ldHJpY3MsIGRlYnVnLCBtYW5pZmVzdCB9ICAgICBmcm9tICdmb290cHJpbnRqcy9yZWNvcmRlcnMnOyAvLyByZWNvcmRlciBmYWN0b3JpZXNcbiAqIGltcG9ydCB7IHN0YXRlQXQsIGNhdXNhbENoYWluIH0gZnJvbSAnZm9vdHRyYWNlJzsgICAgIC8vIHJlYWQgYSBmaW5pc2hlZCBydW5cbiAqIGltcG9ydCB7IFJlY29yZEZyYW1lLCBFdmVudExvZyB9IGZyb20gJ2Zvb3R0cmFjZS93cml0ZSc7ICAgICAvLyB3cml0ZSBhIHJlY29yZCB5b3Vyc2VsZlxuICogaW1wb3J0IHsgU3RhZ2VDb250ZXh0IH0gICAgICAgICAgICAgICAgIGZyb20gJ2Zvb3RwcmludGpzL2FkdmFuY2VkJzsgIC8vIGVuZ2luZSBpbnRlcm5hbHNcbiAqIGBgYFxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBRdWljayBTdGFydCDigJQgRXZlcnl0aGluZyB5b3UgbmVlZCBmb3IgOTAlIG9mIHVzZSBjYXNlc1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKiogQGNhdGVnb3J5IFF1aWNrIFN0YXJ0ICovXG5leHBvcnQgdHlwZSB7IEZsb3dDaGFydCwgU3RhZ2VGdW5jdGlvbiBhcyBTdGFnZUhhbmRsZXIsIFN0cmVhbUhhbmRsZXJzIH0gZnJvbSAnLi9saWIvYnVpbGRlci9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgUXVpY2sgU3RhcnQgKi9cbmV4cG9ydCB7IGZsb3dDaGFydCwgRmxvd0NoYXJ0QnVpbGRlciwgZmxvd0NoYXJ0U2VsZWN0b3IgfSBmcm9tICcuL2xpYi9idWlsZGVyL2luZGV4LmpzJztcblxuLyoqXG4gKiBAY2F0ZWdvcnkgUXVpY2sgU3RhcnRcbiAqXG4gKiBDb25maWcgZm9yIGAuYWRkUGFyYWxsZWxGb3JFYWNoKClgIOKAlCBvbmUgYnJhbmNoIHBlciBpdGVtLCBicmFuY2ggY291bnRcbiAqIGRlY2lkZWQgYXQgcnVuIHRpbWUgZnJvbSB0aGUgcGF5bG9hZC4gYG1heEJyYW5jaGVzYCBhbmQgYGludG9gIGFyZSByZXF1aXJlZFxuICogb24gcHVycG9zZSAoc2VlIGRvY3MvZGVzaWduL2V4ZWN1dGlvbi1jb250cm9sLm1kKS5cbiAqL1xuZXhwb3J0IHR5cGUgeyBCcmFuY2hDaGFydCwgUGFyYWxsZWxGb3JFYWNoQ29uZmlnLCBSZXRyeVBvbGljeSB9IGZyb20gJy4vbGliL2J1aWxkZXIvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IFF1aWNrIFN0YXJ0IOKAlCBidWlsZC10aW1lIG9ic2VydmVyICh0d2luIG9mIEZsb3dSZWNvcmRlcikgKi9cbmV4cG9ydCB0eXBlIHtcbiAgU3RydWN0dXJlRGVjaWRlckNvbXBsZXRlRXZlbnQsXG4gIFN0cnVjdHVyZUVkZ2VBZGRlZEV2ZW50LFxuICBTdHJ1Y3R1cmVFZGdlS2luZCxcbiAgU3RydWN0dXJlTG9vcEVkZ2VBZGRlZEV2ZW50LFxuICBTdHJ1Y3R1cmVSZWNvcmRlcixcbiAgU3RydWN0dXJlU3RhZ2VBZGRlZEV2ZW50LFxuICBTdHJ1Y3R1cmVTdGFnZVRhZ2dlZEV2ZW50LFxuICBTdHJ1Y3R1cmVTdWJmbG93TW91bnRlZEV2ZW50LFxufSBmcm9tICcuL2xpYi9idWlsZGVyL2luZGV4LmpzJztcblxuLyoqXG4gKiBAY2F0ZWdvcnkgVGltZSBCdWRnZXRcbiAqXG4gKiBgdGltZUJ1ZGdldChjaGFydClgIOKAlCB0aGUgc2xvd2VzdCBhIGNoYXJ0IGNhbiB0YWtlLCBmcm9tIGl0cyBkZWNsYXJlZCByZXRyeSBwb2xpY2llcyAoYGF0dGVtcHRzIMOXIHRpbWVvdXRNc2AgcGx1c1xuICogdGhlIHdhaXRzLCBzdW1tZWQgYWxvbmcgdGhlIHNsb3dlc3QgcGF0aCksIGFuZCBldmVyeSBzdGFnZSB0aGF0IG1ha2VzIGEgcGF0aCB1bmJvdW5kZWQsIGJ5IG5hbWUuIGAuYnVkZ2V0KG1zKWBcbiAqIGRlY2xhcmVzIHRoZSBjYWxsZXIncyBjb250cmFjdDsgYGJ1aWxkKClgIHJlZnVzZXMgYSBjaGFydCB0aGF0IGNhbm5vdCBrZWVwIGl0LiBBbHNvIGBjaGFydC50aW1lQnVkZ2V0KClgLlxuICovXG5leHBvcnQgdHlwZSB7XG4gIEJ1ZGdldEFzc3VtcHRpb25zLFxuICBCdWRnZXRTdGVwLFxuICBUaW1lQnVkZ2V0T3B0aW9ucyxcbiAgVGltZUJ1ZGdldFJlcG9ydCxcbiAgVW5ib3VuZGVkUmVhc29uLFxuICBVbmJvdW5kZWRTdGFnZSxcbn0gZnJvbSAnLi9saWIvYnVkZ2V0L2luZGV4LmpzJztcbmV4cG9ydCB7IHRpbWVCdWRnZXQgfSBmcm9tICcuL2xpYi9idWRnZXQvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IFF1aWNrIFN0YXJ0ICovXG5leHBvcnQgdHlwZSB7IFR5cGVkU3RhZ2VGdW5jdGlvbiB9IGZyb20gJy4vbGliL2J1aWxkZXIvdHlwZWRGbG93Q2hhcnQuanMnO1xuXG4vKiogQGNhdGVnb3J5IFF1aWNrIFN0YXJ0ICovXG5leHBvcnQgdHlwZSB7IFNjb3BlTWV0aG9kcywgVHlwZWRTY29wZSB9IGZyb20gJy4vbGliL3JlYWN0aXZlL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBRdWljayBTdGFydCAqL1xuZXhwb3J0IHsgbmFycmF0aXZlIH0gZnJvbSAnLi9yZWNvcmRlcnMuanMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBEZWNpc2lvbiBCcmFuY2hpbmcg4oCUIGRlY2lkZSgpIC8gc2VsZWN0KCkgd2l0aCBldmlkZW5jZSBjYXB0dXJlXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKiBAY2F0ZWdvcnkgRGVjaXNpb24gQnJhbmNoaW5nICovXG5leHBvcnQgdHlwZSB7XG4gIERlY2lkZVJ1bGUsXG4gIERlY2lzaW9uRXZpZGVuY2UsXG4gIERlY2lzaW9uUmVzdWx0LFxuICBEZWZhdWx0QnJhbmNoLFxuICBGaWx0ZXJPcHMsXG4gIFJ1bGVFdmlkZW5jZSxcbiAgU2VsZWN0aW9uRXZpZGVuY2UsXG4gIFNlbGVjdGlvblJlc3VsdCxcbiAgV2hlbkNsYXVzZSxcbiAgV2hlcmVGaWx0ZXIsXG59IGZyb20gJy4vbGliL2RlY2lkZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgRGVjaXNpb24gQnJhbmNoaW5nICovXG5leHBvcnQgeyBkZWNpZGUsIHNlbGVjdCB9IGZyb20gJy4vbGliL2RlY2lkZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgRXJyb3JzICovXG5leHBvcnQgdHlwZSB7IFRlcm1pbmFsRmFpbHVyZUNvbnRleHQgfSBmcm9tICcuL2xpYi9lcnJvcnMvdGVybWluYWxGYWlsdXJlLmpzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gQXR0ZW1wdHMg4oCUIGV2ZXJ5IHRyeSBvZiBhIHJldHJpZWQgc3RhZ2UsIGFuZCB0aGUgZGVjaXNpb24gdGhhdCBmb2xsb3dlZCBpdFxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIEBjYXRlZ29yeSBBdHRlbXB0c1xuICpcbiAqIE9uZSBgQXR0ZW1wdFJlY29yZGAgcGVyIGF0dGVtcHQgb2YgYSBzdGFnZSB3aXRoIGEgZGVjbGFyZWQgYHJldHJ5YCBwb2xpY3ksIGEgYHRpbWVvdXRNc2AsIG9yIGEgcnVuIGRlYWRsaW5lIOKAlFxuICogdGltaW5nLCBvdXRjb21lLCBmYWlsdXJlIGNhdGVnb3J5LCBhbmQgdGhlIHJldHJ5LW9yLXN0b3AgZGVjaXNpb24gYXMgYERlY2lzaW9uRXZpZGVuY2VgIOKAlCBvbiB0aGUgc3RhZ2Unc1xuICogZXhlY3V0aW9uLXRyZWUgbm9kZSAoYFN0YWdlU25hcHNob3QuYXR0ZW1wdHNgIC8gYGF0dGVtcHRTdW1tYXJ5YCkgYW5kIG9uIGBGbG93UmVjb3JkZXIub25BdHRlbXB0YC5cbiAqIEEgY2FsbCBhIHN0YWdlIG1ha2VzIHRocm91Z2ggYHNjb3BlLiRjYWxsYCBpcyByZWNvcmRlZCB0aGUgc2FtZSB3YXkgKGtpbmQgYCdjYWxsJ2ApLCBhbmQgc28gaXMgYW4gU0RLJ3Mgb3duIHJldHJ5XG4gKiBhbiBhZGFwdGVyIHJlcG9ydHMgdGhyb3VnaCBgb2JzZXJ2ZWQoKWAgKGBPYnNlcnZlZEF0dGVtcHRgLCBraW5kIGAnb2JzZXJ2ZWQnYCkuIGBBdHRlbXB0Q29udGV4dGAgaXMgd2hhdFxuICogYHNjb3BlLiRhdHRlbXB0KClgIHJldHVybnMsIGFuZCB3aGF0IGEgY2FsbCdzIGZ1bmN0aW9uIGdldHMgKHRoZSBhdHRlbXB0J3Mgc2lnbmFsLCB0aGUgdGltZSBsZWZ0LCBgb2JzZXJ2ZWRgKTtcbiAqIGBMYXRlV3JpdGVgIGlzIGEgd3JpdGUgKG9yIGNhbGwpIGFuIGVuZGVkIGF0dGVtcHQgdHJpZWQgKGBTdGFnZVNuYXBzaG90LmxhdGVXcml0ZXNgKS4gQSBzdGFnZSB0aGF0IGNoYW5nZXMgYW5cbiAqIG91dHNpZGUgc3lzdGVtIGRlY2xhcmVzIGl0IChgU3RhZ2VUb3VjaGVzYCwgYC50b3VjaGVzKClgKSwgYW5kIGEgY2FsbCBkb2VzIChgQ2FsbE9wdGlvbnNgKTogZXZlcnkgYXR0ZW1wdCB0aGVuXG4gKiBjYXJyaWVzIGl0cyBgQXR0ZW1wdEVmZmVjdGAsIGFuZCB0aGUga2V5IHJ1bGUgaXMgaGFuZGVkIGFuIGBJZGVtcG90ZW5jeUtleUNvbnRleHRgIG9uY2UgcGVyIGV4ZWN1dGlvbi5cbiAqL1xuZXhwb3J0IHR5cGUge1xuICBBdHRlbXB0Q2F0ZWdvcnksXG4gIEF0dGVtcHRDb250ZXh0LFxuICBBdHRlbXB0RWZmZWN0LFxuICBBdHRlbXB0RXJyb3IsXG4gIEF0dGVtcHRJbnB1dHMsXG4gIEF0dGVtcHRLaW5kLFxuICBBdHRlbXB0TmV4dCxcbiAgQXR0ZW1wdE9wdGlvbnMsXG4gIEF0dGVtcHRPdXRjb21lLFxuICBBdHRlbXB0UmVhc29uLFxuICBBdHRlbXB0UmVjb3JkLFxuICBBdHRlbXB0U3VtbWFyeSxcbiAgQ2FsbE9wdGlvbnMsXG4gIElkZW1wb3RlbmN5S2V5Q29udGV4dCxcbiAgTGF0ZVdyaXRlLFxuICBPYnNlcnZlZEF0dGVtcHQsXG4gIFN0YWdlVG91Y2hlcyxcbiAgVW5rbm93bkVmZmVjdEluaXQsXG59IGZyb20gJy4vbGliL2F0dGVtcHQvaW5kZXguanMnO1xuLyoqXG4gKiBAY2F0ZWdvcnkgQXR0ZW1wdHNcbiAqXG4gKiBBbiBhdHRlbXB0IGJ5IG5hbWUgKGBzZXJpZXNgICsgYGF0dGVtcHRgKSBhbmQgcGVyLW91dGNvbWUgY291bnRzIOKAlCB3aGF0IHJlY29yZGVyIHJvd3MgaG9sZCBvZiBhdHRlbXB0cy5cbiAqL1xuZXhwb3J0IHR5cGUgeyBBdHRlbXB0T3V0Y29tZUNvdW50cywgQXR0ZW1wdFJlZiB9IGZyb20gJy4vbGliL3JlY29yZGVyL2F0dGVtcHRTZXJpZXMuanMnO1xuXG4vKipcbiAqIEBjYXRlZ29yeSBBdHRlbXB0c1xuICpcbiAqIGBhdHRlbXB0KClgIOKAlCB0aGUgYXR0ZW1wdCBydW5uZXIgZm9yIGNvZGUgdGhhdCBpcyBub3QgYSBzdGFnZSAocmVjb3JkcyBnbyB0byBpdHMgYG9uQXR0ZW1wdGApOyBgZXJyb3JDYXRlZ29yeWBcbiAqIOKAlCB0aGUgb25lIGZhaWx1cmUgY2xhc3NpZmllciAoc2V2ZW4gZml4ZWQgY2F0ZWdvcmllcyk7IGByZXRyeVJ1bGVzYCDigJQgdGhlIG9uZSByZXRyeSBydWxlIHRhYmxlLCBhcyBgZGVjaWRlKClgXG4gKiBydWxlczsgdGhlIGF0dGVtcHQgY29udHJhY3QncyB0d28gZXJyb3JzLlxuICovXG5leHBvcnQgeyBhdHRlbXB0LCBBdHRlbXB0VGltZW91dEVycm9yLCBlcnJvckNhdGVnb3J5LCByZXRyeVJ1bGVzLCBVbmtub3duRWZmZWN0RXJyb3IgfSBmcm9tICcuL2xpYi9hdHRlbXB0L2luZGV4LmpzJztcblxuLyoqXG4gKiBAY2F0ZWdvcnkgQ29ycmVsYXRpb25cbiAqXG4gKiBUaGUgcnVuJ3MgY29ycmVsYXRpb24gKDEwLjEpOiBgZW52LnRyYWNlcGFyZW50YCAoVzNDLCBwYXJzZWQgc3RyaWN0bHkpIG9yIGBlbnYudHJhY2VJZGAgKyBgZW52Lm9wZXJhdGlvbklkYFxuICogYmVjb21lIE9ORSBmcm96ZW4gYFJ1bkNvcnJlbGF0aW9uYCBwZXIgcnVuIOKAlCBvbiBgZ2V0U25hcHNob3QoKS5jb3JyZWxhdGlvbmAsIGV2ZXJ5IGZsb3cgZXZlbnQnc1xuICogYHRyYXZlcnNhbENvbnRleHQuY29ycmVsYXRpb25gIGFuZCBldmVyeSBzY29wZSBhbmQgZW1pdCBldmVudCdzIGBjb3JyZWxhdGlvbmAuIGBwYXJzZVRyYWNlcGFyZW50YCAvXG4gKiBgZm9ybWF0VHJhY2VwYXJlbnRgIGFyZSB0aGUgVzNDIGNvZGVjOyBhIHJlZnVzZWQgaGVhZGVyIHRocm93cyBgVHJhY2VwYXJlbnRFcnJvcmAgd2l0aCBhIG5hbWVkIGByZWFzb25gLlxuICovXG5leHBvcnQgdHlwZSB7IFBhcnNlZFRyYWNlcGFyZW50LCBSdW5Db3JyZWxhdGlvbiwgVHJhY2VwYXJlbnRGaWVsZHMsIFRyYWNlcGFyZW50UmVmdXNhbCB9IGZyb20gJy4vbGliL2F0dGVtcHQvaW5kZXguanMnO1xuZXhwb3J0IHsgZm9ybWF0VHJhY2VwYXJlbnQsIHBhcnNlVHJhY2VwYXJlbnQsIFRyYWNlcGFyZW50RXJyb3IgfSBmcm9tICcuL2xpYi9hdHRlbXB0L2luZGV4LmpzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gUnVuIOKAlCBFeGVjdXRlIGNoYXJ0cyBhbmQgY29sbGVjdCByZXN1bHRzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKiBAY2F0ZWdvcnkgUnVuICovXG5leHBvcnQgdHlwZSB7IFJ1blJlc3VsdCB9IGZyb20gJy4vbGliL3J1bm5lci9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgUnVuICovXG5leHBvcnQgdHlwZSB7IEZsb3dDaGFydEV4ZWN1dG9yT3B0aW9ucyB9IGZyb20gJy4vbGliL3J1bm5lci9pbmRleC5qcyc7XG5cbi8qKlxuICogVGhlIGNyYXNoLXNhZmUgcmVjb3JkICgxMC4xKTogdGhlIGV4ZWN1dG9yJ3MgYHNpbmtgIG9wdGlvbiwgaXRzIGFjY291bnRpbmcgb24gYGdldFNuYXBzaG90KCkuc2lua2AsXG4gKiBgZXhlY3V0b3IuZmx1c2hSZWNvcmQoKWAncyByZXN1bHQsIGFuZCB0aGUgZXJyb3IgYSBydW4gd2l0aCBgb25GYWlsdXJlOiAnZmFpbCdgIHJlamVjdHMgd2l0aC4gVGhlIHBvcnRcbiAqIChgUmVjb3JkU2lua2AsIGBtZW1vcnlTaW5rYCkgaXMgYGZvb3R0cmFjZS93cml0ZWAnczsgdGhlIGZpbGUgYWRhcHRlciBpcyBgZm9vdHByaW50anMvc2lua3NgLlxuICogQGNhdGVnb3J5IFJ1blxuICovXG5leHBvcnQgdHlwZSB7XG4gIFJlY29yZEZsdXNoUmVzdWx0LFxuICBSZWNvcmRTaW5rRmFpbHVyZU1vZGUsXG4gIFJlY29yZFNpbmtGbHVzaE1vZGUsXG4gIFJlY29yZFNpbmtPcHRpb24sXG4gIFJlY29yZFNpbmtPcHRpb25zLFxuICBSZWNvcmRTaW5rU3RhdHMsXG59IGZyb20gJy4vbGliL3J1bm5lci9pbmRleC5qcyc7XG4vKiogQGNhdGVnb3J5IFJ1biAqL1xuZXhwb3J0IHsgUmVjb3JkU2lua0Vycm9yIH0gZnJvbSAnLi9saWIvcnVubmVyL2luZGV4LmpzJztcblxuLyoqXG4gKiBUaGUgZm91ciBvYnNlcnZhYmlsaXR5IGRpYWxzIGBGbG93Q2hhcnRFeGVjdXRvck9wdGlvbnNgIGluaGVyaXRzLlxuICogQGNhdGVnb3J5IFJ1blxuICovXG5leHBvcnQgdHlwZSB7IFJ1bkRpYWxzIH0gZnJvbSAnLi9saWIvbWVtb3J5L2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBSdW4gKi9cbmV4cG9ydCB7IEZsb3dDaGFydEV4ZWN1dG9yIH0gZnJvbSAnLi9saWIvcnVubmVyL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBSdW4gKi9cbmV4cG9ydCB7IFJ1bkNvbnRleHQgfSBmcm9tICcuL2xpYi9ydW5uZXIvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IFJ1biAqL1xuZXhwb3J0IHR5cGUgeyBDaGFydE9wZW5BUElPcHRpb25zLCBNQ1BUb29sRGVzY3JpcHRpb24sIFJ1bm5hYmxlRmxvd0NoYXJ0IH0gZnJvbSAnLi9saWIvcnVubmVyL1J1bm5hYmxlQ2hhcnQuanMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBPYnNlcnZlIOKAlCBEYXRhIChzY29wZSByZWNvcmRlcnMsIGZpcmUgZHVyaW5nIHN0YWdlIGV4ZWN1dGlvbilcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBEYXRhICovXG5leHBvcnQgdHlwZSB7XG4gIENvbW1pdEV2ZW50LFxuICBFcnJvckV2ZW50LFxuICBSZWFkRXZlbnQsXG4gIFJlZGFjdGlvblBvbGljeSxcbiAgUmVkYWN0aW9uUmVwb3J0LFxuICBTY29wZVJlY29yZGVyLFxuICBTdGFnZUV2ZW50LFxuICBXcml0ZUV2ZW50LFxufSBmcm9tICcuL2xpYi9zY29wZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgRGF0YSAqL1xuZXhwb3J0IHsgTWV0cmljUmVjb3JkZXIgfSBmcm9tICcuL2xpYi9zY29wZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgRGF0YSAqL1xuZXhwb3J0IHsgRGVidWdSZWNvcmRlciB9IGZyb20gJy4vbGliL3Njb3BlL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBPcGVyYXRpb24gKi9cbmV4cG9ydCB7IFJlY29yZGVyT3BlcmF0aW9uIH0gZnJvbSAnLi9saWIvcmVjb3JkZXIvaW5kZXguanMnO1xuXG4vKipcbiAqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBEZWxpdmVyeSB0aWVyIChSRkMtMDAxIGRlZmVycmVkIG9ic2VydmVycylcbiAqXG4gKiBFdmVyeSBgYXR0YWNoKlJlY29yZGVyYCBjYWxsIGFjY2VwdHMgYW4gb3B0aW9ucyBiYWc6XG4gKiBgZXhlY3V0b3IuYXR0YWNoU2NvcGVSZWNvcmRlcihyZWMsIHsgZGVsaXZlcnk6ICdkZWZlcnJlZCcgfSlgIHRha2VzIHRoZVxuICogcmVjb3JkZXIgT1VUIG9mIHRoZSBlbmdpbmUncyBob3QgcGF0aCDigJQgZXZlbnRzIGFyZSBjYXB0dXJlZCBpbnRvIG9uZVxuICogYm91bmRlZCwgdG90YWxseS1vcmRlcmVkIHF1ZXVlIGFuZCBkZWxpdmVyZWQgYXQgdGhlIG5leHQgbWljcm90YXNrXG4gKiBjaGVja3BvaW50IChcIm9uZSBiZWF0IGJlaGluZFwiKS4gT21pdCBgZGVsaXZlcnlgIGZvciB0aGUgaGlzdG9yaWNhbFxuICogc3luY2hyb25vdXMgY2FsbCAoYnl0ZS1pZGVudGljYWwgdG8gcHJldmlvdXMgcmVsZWFzZXMpLiBBY2NvdW50aW5nXG4gKiBzdXJmYWNlcyBvbiBgc25hcHNob3Qub2JzZXJ2ZXJTdGF0c2A7IGBleGVjdXRvci5kcmFpbk9ic2VydmVycygpYCBzZXR0bGVzXG4gKiBhc3luYyBsaXN0ZW5lcnMgYmVmb3JlIHNodXRkb3duLiBTZWUgYGRvY3MvZ3VpZGVzL29ic2VydmVycy1kZWZlcnJlZC5tZGAuXG4gKi9cbmV4cG9ydCB0eXBlIHtcbiAgQXR0YWNoUmVjb3JkZXJPcHRpb25zLFxuICBPYnNlcnZlckRlbGl2ZXJ5LFxuICBPYnNlcnZlckRyYWluUmVzdWx0LFxuICBPYnNlcnZlclN0YXRzLFxufSBmcm9tICcuL2xpYi9ydW5uZXIvaW5kZXguanMnO1xuXG4vKipcbiAqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBEZWxpdmVyeSB0aWVyIChSRkMtMDAxIGRlZmVycmVkIG9ic2VydmVycylcbiAqXG4gKiBgQ2FwdHVyZVBvbGljeWAg4oCUIGhvdyBhIGRlZmVycmVkIGV2ZW50J3MgcGF5bG9hZCBpcyBtYXRlcmlhbGl6ZWQgYXRcbiAqIGNhcHR1cmUgdGltZSAoYCdjbG9uZSdgIGJ5IGRlZmF1bHQgZm9yIGF0dGFjaCBvcHRpb25zIC8gYCdzdW1tYXJ5J2AgLyBgJ3JlZidgKS4gYE92ZXJmbG93UG9saWN5YFxuICog4oCUIHdoYXQgYSBzYXR1cmF0ZWQgcXVldWUgZG9lcyAoYCdkcm9wLW9sZGVzdCdgIGRlZmF1bHQgLyBgJ3NhbXBsZSdgIC9cbiAqIGAnYmxvY2snYCkuIGBEaXNwYXRjaGVyU3RhdHNgIC8gYExpc3RlbmVyU3RhdHNgIOKAlCB0aGUgYWNjb3VudGluZyBzaGFwZXNcbiAqIGVtYmVkZGVkIGluIGBPYnNlcnZlclN0YXRzYC4gVHlwZXMgb25seSDigJQgdGhlIG9ic2VydmVyLXF1ZXVlIG1vZHVsZVxuICogaXRzZWxmIGlzIGludGVybmFsOyBjb25zdW1lcnMgdXNlIHRoZSBhdHRhY2ggb3B0aW9ucy5cbiAqL1xuZXhwb3J0IHR5cGUgeyBDYXB0dXJlUG9saWN5LCBEaXNwYXRjaGVyU3RhdHMsIExpc3RlbmVyU3RhdHMsIE92ZXJmbG93UG9saWN5IH0gZnJvbSAnLi9saWIvb2JzZXJ2ZXItcXVldWUvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IE9ic2VydmUg4oCUIENvbWJpbmVkIChib3RoIGRhdGEtZmxvdyBhbmQgY29udHJvbC1mbG93KSAqL1xuZXhwb3J0IHR5cGUgeyBDb21iaW5lZFJlY29yZGVyIH0gZnJvbSAnLi9saWIvcmVjb3JkZXIvaW5kZXguanMnO1xuLyoqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBDb21iaW5lZCAoYm90aCBkYXRhLWZsb3cgYW5kIGNvbnRyb2wtZmxvdykgKi9cbmV4cG9ydCB7XG4gIGhhc0VtaXRSZWNvcmRlck1ldGhvZHMsXG4gIGhhc0Zsb3dSZWNvcmRlck1ldGhvZHMsXG4gIGhhc1JlY29yZGVyTWV0aG9kcyxcbiAgaXNGbG93RXZlbnQsXG59IGZyb20gJy4vbGliL3JlY29yZGVyL2luZGV4LmpzJztcblxuLyoqXG4gKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgRW1pdCAodXNlci1hdXRob3JlZCBzdHJ1Y3R1cmVkIGV2ZW50cylcbiAqXG4gKiBUaGlyZCBvYnNlcnZlciBjaGFubmVsIChhbG9uZ3NpZGUgYFNjb3BlUmVjb3JkZXJgIGFuZCBgRmxvd1JlY29yZGVyYCkuIENvbnN1bWVyXG4gKiBjb2RlIGNhbGxzIGBzY29wZS4kZW1pdChuYW1lLCBwYXlsb2FkKWAgZnJvbSBpbnNpZGUgYSBzdGFnZTsgZXZlcnkgYXR0YWNoZWRcbiAqIGBFbWl0UmVjb3JkZXIub25FbWl0KGV2ZW50KWAgZmlyZXMgc3luY2hyb25vdXNseSB3aXRoIHN0YWdlLWNvbnRleHRcbiAqIGVucmljaG1lbnQuIFBhc3MtdGhyb3VnaCDigJQgbm8gYnVmZmVyaW5nLCB6ZXJvIGFsbG9jYXRpb24gd2hlbiBubyByZWNvcmRlclxuICogaXMgYXR0YWNoZWQuXG4gKi9cbmV4cG9ydCB0eXBlIHsgRW1pdEV2ZW50LCBFbWl0UmVjb3JkZXIgfSBmcm9tICcuL2xpYi9yZWNvcmRlci9pbmRleC5qcyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIE9ic2VydmUg4oCUIEZsb3cgKEZsb3dSZWNvcmRlciwgZmlyZXMgYWZ0ZXIgc3RhZ2UgZXhlY3V0aW9uKVxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKiogQGNhdGVnb3J5IE9ic2VydmUg4oCUIEZsb3cgKi9cbmV4cG9ydCB0eXBlIHtcbiAgRmxvd0F0dGVtcHRFdmVudCxcbiAgRmxvd0JyZWFrRXZlbnQsXG4gIEZsb3dEZWNpc2lvbkV2ZW50LFxuICBGbG93RXJyb3JFdmVudCxcbiAgRmxvd0ZvcmtFdmVudCxcbiAgRmxvd0xvb3BFdmVudCxcbiAgRmxvd05leHRFdmVudCxcbiAgRmxvd1JlY29yZGVyLFxuICBGbG93UnVuRXZlbnQsXG4gIEZsb3dSdW5GYWlsZWRFdmVudCxcbiAgRmxvd1NlbGVjdGVkRXZlbnQsXG4gIEZsb3dTdGFnZUV2ZW50LFxuICBGbG93U3RhZ2VSZXRyeUV2ZW50LFxuICBGbG93U3ViZmxvd0V2ZW50LFxuICBGbG93U3ViZmxvd1JlZ2lzdGVyZWRFdmVudCxcbiAgRmxvd1Rocm90dGxlZEV2ZW50LFxuICBSZXN1bWVMaW5rLFxuICBUcmF2ZXJzYWxDb250ZXh0LFxufSBmcm9tICcuL2xpYi9lbmdpbmUvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IE9ic2VydmUg4oCUIEZsb3cgKi9cbmV4cG9ydCB0eXBlIHsgQ29tYmluZWROYXJyYXRpdmVFbnRyeSB9IGZyb20gJy4vbGliL2VuZ2luZS9pbmRleC5qcyc7XG5cbi8qKlxuICogQGNhdGVnb3J5IE9ic2VydmUg4oCUIEZsb3dcbiAqXG4gKiBgTmFycmF0aXZlRm9ybWF0dGVyYCDigJQgcGx1Z2dhYmxlIGZvcm1hdHRlciB0aGF0IGNvbnZlcnRzIGV2ZW50IGNvbnRleHRcbiAqIG9iamVjdHMgaW50byB0aGUgdGV4dCBsaW5lcyBvZiB0aGUgbmFycmF0aXZlLlxuICovXG5leHBvcnQgdHlwZSB7IE5hcnJhdGl2ZUZvcm1hdHRlciB9IGZyb20gJy4vbGliL2VuZ2luZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgRmxvdyAqL1xuZXhwb3J0IHsgTmFycmF0aXZlRmxvd1JlY29yZGVyIH0gZnJvbSAnLi9saWIvZW5naW5lL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBGbG93ICovXG5leHBvcnQgdHlwZSB7IE1hbmlmZXN0QXR0ZW1wdFJvdywgTWFuaWZlc3RFbnRyeSB9IGZyb20gJy4vbGliL2VuZ2luZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgRmxvdyAqL1xuZXhwb3J0IHsgTWFuaWZlc3RGbG93UmVjb3JkZXIgfSBmcm9tICcuL2xpYi9lbmdpbmUvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IE9ic2VydmUg4oCUIEZsb3cgKi9cbmV4cG9ydCB7IEFkYXB0aXZlTmFycmF0aXZlRmxvd1JlY29yZGVyIH0gZnJvbSAnLi9saWIvZW5naW5lL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBGbG93ICovXG5leHBvcnQgeyBNaWxlc3RvbmVOYXJyYXRpdmVGbG93UmVjb3JkZXIgfSBmcm9tICcuL2xpYi9lbmdpbmUvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IE9ic2VydmUg4oCUIEZsb3cgKi9cbmV4cG9ydCB7IFByb2dyZXNzaXZlTmFycmF0aXZlRmxvd1JlY29yZGVyIH0gZnJvbSAnLi9saWIvZW5naW5lL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBGbG93ICovXG5leHBvcnQgeyBSTEVOYXJyYXRpdmVGbG93UmVjb3JkZXIgfSBmcm9tICcuL2xpYi9lbmdpbmUvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IE9ic2VydmUg4oCUIEZsb3cgKi9cbmV4cG9ydCB7IFNlcGFyYXRlTmFycmF0aXZlRmxvd1JlY29yZGVyIH0gZnJvbSAnLi9saWIvZW5naW5lL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBGbG93ICovXG5leHBvcnQgeyBTaWxlbnROYXJyYXRpdmVGbG93UmVjb3JkZXIgfSBmcm9tICcuL2xpYi9lbmdpbmUvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IE9ic2VydmUg4oCUIEZsb3cgKi9cbmV4cG9ydCB7IFdpbmRvd2VkTmFycmF0aXZlRmxvd1JlY29yZGVyIH0gZnJvbSAnLi9saWIvZW5naW5lL2luZGV4LmpzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gU2VsZi1EZXNjcmliaW5nIOKAlCAuY29udHJhY3QoKSwgdG9PcGVuQVBJKCksIHRvTUNQVG9vbCgpXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKiBAY2F0ZWdvcnkgU2VsZi1EZXNjcmliaW5nICovXG5leHBvcnQgdHlwZSB7IEpzb25TY2hlbWEgfSBmcm9tICcuL2xpYi9jb250cmFjdC9pbmRleC5qcyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFNuYXBzaG90ICYgQ29tcG9zaXRpb24g4oCUIFN1YmZsb3cgbmF2aWdhdGlvbiBhbmQgQ29tcG9zYWJsZVJ1bm5lclxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKiogQGNhdGVnb3J5IFNuYXBzaG90ICYgQ29tcG9zaXRpb24gKi9cbmV4cG9ydCB0eXBlIHsgQ29tcG9zYWJsZVJ1bm5lciB9IGZyb20gJy4vbGliL3J1bm5lci9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgU25hcHNob3QgJiBDb21wb3NpdGlvbiAqL1xuZXhwb3J0IHR5cGUgeyBSZWNvcmRlclNuYXBzaG90LCBSdW50aW1lU25hcHNob3QsIFN1YnRyZWVTbmFwc2hvdCB9IGZyb20gJy4vbGliL3J1bm5lci9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgU25hcHNob3QgJiBDb21wb3NpdGlvbiAqL1xuZXhwb3J0IHsgZ2V0U3VidHJlZVNuYXBzaG90LCBsaXN0U3ViZmxvd1BhdGhzIH0gZnJvbSAnLi9saWIvcnVubmVyL2luZGV4LmpzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gU2NvcGVSZWNvcmRlciBDb21wb3NpdGlvbiDigJQgQnVuZGxlIG11bHRpcGxlIHJlY29yZGVycyBpbnRvIGRvbWFpbiBwcmVzZXRzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKiBAY2F0ZWdvcnkgU2NvcGVSZWNvcmRlciAqL1xuZXhwb3J0IHsgQ29tcG9zaXRlUmVjb3JkZXIgfSBmcm9tICcuL2xpYi9yZWNvcmRlci9pbmRleC5qcyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFBhdXNlL1Jlc3VtZSDigJQgU2VyaWFsaXphYmxlIGNoZWNrcG9pbnRzIGZvciBsb25nLXJ1bm5pbmcgb3IgaHVtYW4taW4tdGhlLWxvb3AgZmxvd3Ncbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqIEBjYXRlZ29yeSBQYXVzZS9SZXN1bWUgKi9cbi8qKiBAY2F0ZWdvcnkgUGF1c2UvUmVzdW1lICovXG5leHBvcnQgdHlwZSB7XG4gIEZsb3djaGFydENoZWNrcG9pbnQsXG4gIFBhdXNhYmxlSGFuZGxlcixcbiAgUGF1c2VkRXhlY3V0aW9uLFxuICBQZW5kaW5nUGF1c2UsXG4gIFJlZGFjdGlvbk1hcmtzLFxufSBmcm9tICcuL2xpYi9wYXVzZS9pbmRleC5qcyc7XG5cbi8qKlxuICogQGNhdGVnb3J5IFBhdXNlL1Jlc3VtZVxuICpcbiAqIGBpbnRlcnJ1cHQoc2NvcGUsIHsgcmVhc29uLCBleHBlY3RzPyB9KWAg4oCUIHN0b3AgbWlkLXN0YWdlIHRvIGFzayBhIHF1ZXN0aW9uLFxuICogYW5kIGdldCB0aGUgYW5zd2VyIGJhY2sgYXQgdGhlIHNhbWUgY2FsbCBzaXRlIHdoZW4gdGhlIHJ1biByZXN1bWVzLiBSZXN1bWVcbiAqIHJlLWVudGVycyB0aGUgc3RhZ2UgZnJvbSBpdHMgVE9QIChzdGFnZXMgYXJlIGF0b21pYyksIHNvIGtlZXAgdGhlIGhhbGZcbiAqIGJlZm9yZSB0aGUgY2FsbCBpZGVtcG90ZW50LlxuICovXG5leHBvcnQgdHlwZSB7IEludGVycnVwdFBheWxvYWQgfSBmcm9tICcuL2xpYi9wYXVzZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgUGF1c2UvUmVzdW1lICovXG5leHBvcnQgeyBpbnRlcnJ1cHQgfSBmcm9tICcuL2xpYi9wYXVzZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgU2NvcGVSZWNvcmRlciAqL1xuZXhwb3J0IHR5cGUgeyBDb21wb3NpdGVTbmFwc2hvdCB9IGZyb20gJy4vbGliL3JlY29yZGVyL2luZGV4LmpzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gQ29uZmlndXJhdGlvbiDigJQgVHlwZXMgcGFzc2VkIHRvIEZsb3dDaGFydEV4ZWN1dG9yIGFuZCBydW4oKVxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKiogQGNhdGVnb3J5IENvbmZpZ3VyYXRpb24gKi9cbmV4cG9ydCB0eXBlIHsgRXhlY3V0aW9uRW52LCBFeGVjdXRvclJlc3VsdCwgUGF1c2VkUmVzdWx0LCBSdW5PcHRpb25zIH0gZnJvbSAnLi9saWIvZW5naW5lL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBDb25maWd1cmF0aW9uICovXG5leHBvcnQgdHlwZSB7IFNjb3BlRmFjdG9yeSB9IGZyb20gJy4vbGliL2VuZ2luZS9pbmRleC5qcyc7XG5cbi8qKlxuICogQGNhdGVnb3J5IENvbmZpZ3VyYXRpb25cbiAqXG4gKiBSZWFkLXRyYWNraW5nIHBvbGljeSBmb3IgYFN0YWdlU25hcHNob3Quc3RhZ2VSZWFkc2AgKCMxNCk6XG4gKiBgJ2Z1bGwnYCAoZGVmYXVsdCDigJQgcGVyLXJlYWQgdmFsdWUgY2xvbmUsIGhpc3RvcmljYWwgYmVoYXZpb3IpIC9cbiAqIGAnc3VtbWFyeSdgIChjaGVhcCBgUmVhZFN1bW1hcnlNYXJrZXJgIHBlciByZWFkKSAvIGAnb2ZmJ2AgKG5vIHRyYWNraW5nLFxuICogemVybyBwZXItcmVhZCBjbG9uZSkuIFBhc3MgYXMgYG5ldyBGbG93Q2hhcnRFeGVjdXRvcihjaGFydCwgeyByZWFkVHJhY2tpbmcgfSlgXG4gKiBvciBjYWxsIGBleGVjdXRvci5zZXRSZWFkVHJhY2tpbmcobW9kZSlgIGJlZm9yZSBgcnVuKClgLlxuICovXG5leHBvcnQgdHlwZSB7IFJlYWRTdW1tYXJ5TWFya2VyLCBSZWFkVHJhY2tpbmdNb2RlIH0gZnJvbSAnLi9saWIvbWVtb3J5L2luZGV4LmpzJztcblxuLyoqXG4gKiBAY2F0ZWdvcnkgQ29uZmlndXJhdGlvblxuICpcbiAqIFdyaXRlLXRyYWNraW5nIHBvbGljeSBmb3IgYFN0YWdlU25hcHNob3Quc3RhZ2VXcml0ZXNgICgjMTNjLUEpIOKAlCB0aGVcbiAqIHNpYmxpbmcgb2YgYFJlYWRUcmFja2luZ01vZGVgOyBib3RoIGFsaWFzIHRoZSBzaGFyZWQgYFJldGVudGlvblBvbGljeWBcbiAqIGZhbWlseSBmcm9tIGBsaWIvY2FwdHVyZWAuIGAnZnVsbCdgIChkZWZhdWx0IOKAlCBwZXItd3JpdGUgdmFsdWUgY2xvbmUsXG4gKiBoaXN0b3JpY2FsIGJlaGF2aW9yKSAvIGAnc3VtbWFyeSdgIChjaGVhcCBgV3JpdGVTdW1tYXJ5TWFya2VyYCBwZXIgd3JpdGUpXG4gKiAvIGAnb2ZmJ2AgKG5vIHRyYWNraW5nOyBgc3RhZ2VXcml0ZXNgIGFic2VudCBhbmQgdGhlIGBvbkNvbW1pdGAgbXV0YXRpb25zXG4gKiBwYXlsb2FkIGlzIGVtcHR5IOKAlCB3cml0ZXMgdGhlbXNlbHZlcyBzdGlsbCBjb21taXQsIGFuZCB0aGUgY29tbWl0IGxvZyBpc1xuICogdW5hZmZlY3RlZCkuIFBhc3MgYXMgYG5ldyBGbG93Q2hhcnRFeGVjdXRvcihjaGFydCwgeyB3cml0ZVRyYWNraW5nIH0pYCBvclxuICogY2FsbCBgZXhlY3V0b3Iuc2V0V3JpdGVUcmFja2luZyhtb2RlKWAgYmVmb3JlIGBydW4oKWAuXG4gKi9cbmV4cG9ydCB0eXBlIHsgUmV0ZW50aW9uUG9saWN5LCBXcml0ZVN1bW1hcnlNYXJrZXIsIFdyaXRlVHJhY2tpbmdNb2RlIH0gZnJvbSAnLi9saWIvbWVtb3J5L2luZGV4LmpzJztcblxuLyoqXG4gKiBAY2F0ZWdvcnkgQ29uZmlndXJhdGlvblxuICpcbiAqIENvbW1pdC12YWx1ZXMgZW5jb2RpbmcgZm9yIHRoZSBDT01NSVQgTE9HICgjMTNjLUIpIOKAlCB0aGUgdGhpcmQgZGlhbCBvZlxuICogdGhlIGZhbWlseSwgYW5kIHRoZSBvbmx5IExPU1NMRVNTIG9uZSAoaXQgY2hhbmdlcyB0aGUgbG9nJ3MgZW5jb2RpbmcsXG4gKiBuZXZlciBpdHMgaW5mb3JtYXRpb24pLiBgJ2Z1bGwnYCAoZGVmYXVsdCDigJQgZXZlcnkgc3Vydml2aW5nIGBzZXRgIHN0b3Jlc1xuICogdGhlIGZ1bGwgZmluYWwgdmFsdWUsIGJ5dGUtaWRlbnRpY2FsIHRvIGhpc3RvcnkpIC8gYCdkZWx0YSdgIChhcnJheVxuICogbmV0LWNoYW5nZXMgdGhhdCBhcmUgXCJiYXNlIHBsdXMgYSB0YWlsXCIgY29tbWl0IGFzIGFuIGBhcHBlbmRgIHZlcmJcbiAqIHN0b3Jpbmcgb25seSB0aGUgdGFpbDsgYGRlbGV0ZVZhbHVlKClgIGNvbW1pdHMgYXMgYSByZWFsIGBkZWxldGVgIHZlcmI7XG4gKiBvbmUgdHJhY2UgZW50cnkgcGVyIHN1cnZpdmluZyBwYXRoKS4gUmVwbGF5IHJlY29uc3RydWN0cyBldmVyeSBzdGVwJ3NcbiAqIGZ1bGwgc3RhdGUgZXhhY3RseS4gQ29uc3VtZXJzIHJlYWRpbmcgYGJ1bmRsZS5vdmVyd3JpdGVba2V5XWAgYXMgdGhlIGZ1bGxcbiAqIHZhbHVlIG11c3QgdXNlIGBjb21taXRWYWx1ZUF0YCBmcm9tIGBmb290dHJhY2VgLiBQYXNzIGFzXG4gKiBgbmV3IEZsb3dDaGFydEV4ZWN1dG9yKGNoYXJ0LCB7IGNvbW1pdFZhbHVlcyB9KWAgb3IgY2FsbFxuICogYGV4ZWN1dG9yLnNldENvbW1pdFZhbHVlcyhtb2RlKWAgYmVmb3JlIGBydW4oKWA7IHRoZSBhY3RpdmUgbW9kZSBpcyB0aGVcbiAqIHNuYXBzaG90IGRpc2NyaW1pbmFudCBgZ2V0U25hcHNob3QoKS5jb21taXRWYWx1ZXNgLlxuICovXG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIENvbnRyYWN0ICYgVmFsaWRhdGlvblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKiogQGNhdGVnb3J5IENvbnRyYWN0ICYgVmFsaWRhdGlvbiAqL1xuZXhwb3J0IHR5cGUgeyBTY2hlbWFLaW5kLCBWYWxpZGF0aW9uSXNzdWUsIFZhbGlkYXRpb25SZXN1bHQgfSBmcm9tICcuL2xpYi9zY2hlbWEvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IENvbnRyYWN0ICYgVmFsaWRhdGlvbiAqL1xuZXhwb3J0IHsgZGV0ZWN0U2NoZW1hLCBpc1ZhbGlkYXRhYmxlLCBpc1pvZCB9IGZyb20gJy4vbGliL3NjaGVtYS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgQ29udHJhY3QgJiBWYWxpZGF0aW9uICovXG5leHBvcnQgeyBJbnB1dFZhbGlkYXRpb25FcnJvciwgdmFsaWRhdGVBZ2FpbnN0U2NoZW1hLCB2YWxpZGF0ZU9yVGhyb3cgfSBmcm9tICcuL2xpYi9zY2hlbWEvaW5kZXguanMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBFcnJvciBVdGlsaXRpZXNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqIEBjYXRlZ29yeSBFcnJvciBVdGlsaXRpZXMgKi9cbmV4cG9ydCB0eXBlIHsgU3RydWN0dXJlZEVycm9ySW5mbyB9IGZyb20gJy4vbGliL2VuZ2luZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgRXJyb3IgVXRpbGl0aWVzICovXG5leHBvcnQgeyBleHRyYWN0RXJyb3JJbmZvLCBmb3JtYXRFcnJvckluZm8gfSBmcm9tICcuL2xpYi9lbmdpbmUvaW5kZXguanMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBEZXYgVG9vbHMg4oCUIE1vZGUgZmxhZ3MgYW5kIFpvZCBzY29wZSB1dGlsaXRpZXNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBAY2F0ZWdvcnkgRGV2IFRvb2xzXG4gKlxuICogR2xvYmFsIGRldi1tb2RlIGZsYWcuIENhbGwgYGVuYWJsZURldk1vZGUoKWAgYXQgYXBwbGljYXRpb24gc3RhcnR1cCB0b1xuICogdHVybiBvbiBkZXZlbG9wZXItb25seSBkaWFnbm9zdGljcyBhY3Jvc3MgdGhlIGxpYnJhcnkg4oCUIGNpcmN1bGFyLXJlZmVyZW5jZVxuICogZGV0ZWN0aW9uIGluIHNjb3BlIHdyaXRlcywgd2FybmluZ3Mgd2hlbiBhIHJlY29yZGVyIGhhcyBubyBvYnNlcnZlclxuICogbWV0aG9kcywgc3VzcGljaW91cy1wcmVkaWNhdGUgd2FybmluZ3MgaW4gZGVjaWRlL3NlbGVjdCwgc3RydWN0dXJhbFxuICogY2hlY2tzIGluIGBnZXRTdWJ0cmVlU25hcHNob3RgLCBhbmQgYW55IGZ1dHVyZSBkZXYtb25seSBkaWFnbm9zdGljLlxuICpcbiAqIFByb2R1Y3Rpb24gbGVhdmVzIGl0IE9GRiBieSBkZWZhdWx0ICh6ZXJvIG92ZXJoZWFkKS4gU2VlIHRoZSBKU0RvYyBvblxuICogYGVuYWJsZURldk1vZGVgIGZvciB0aGUgZnVsbCBsaXN0IGFuZCB1c2FnZSBleGFtcGxlLlxuICovXG5leHBvcnQgeyBkaXNhYmxlRGV2TW9kZSwgZW5hYmxlRGV2TW9kZSwgaXNEZXZNb2RlIH0gZnJvbSAnLi9saWIvZGV2TW9kZS5qcyc7XG5cbi8vIGBkZWZpbmVTY29wZUZyb21ab2RgIGFuZCB0aGUgb3RoZXIgem9kLWJhc2VkIHNjb3BlIGhlbHBlcnMgbW92ZWQgdG8gdGhlIG9wdC1pblxuLy8gYGZvb3RwcmludGpzL3pvZGAgZW50cnkg4oCUIGtlZXBpbmcgem9kIG91dCBvZiB0aGUgY29yZSBsb2FkIHBhdGggKGl0IGlzIGFuXG4vLyBvcHRpb25hbCBwZWVyKS4gSW1wb3J0IHRoZW0gZnJvbSAnZm9vdHByaW50anMvem9kJy5cbi8vIEEgcnVuJ3MgcmVjb3JkIGFzIEpTT04gd2l0aG91dCB0aGUgZW5naW5lJ3MgcmVjdXJzaW9uIGxpbWl0ICg5LjI2LjApOiB0aGVcbi8vIHNhbWUgYnl0ZXMgSlNPTi5zdHJpbmdpZnkgZW1pdHMsIGZvciBhIGRlZXAgYG5leHRgIGNoYWluIGl0IGNhbm5vdCBlbmNvZGUuXG5leHBvcnQgdHlwZSB7IFJldHJ5TG9vcENhbGwsIFJldHJ5TG9vcERlY2lzaW9uLCBSZXRyeUxvb3BJZGVudGl0eSB9IGZyb20gJy4vbGliL2F0dGVtcHQvcmV0cnlMb29wVHlwZXMuanMnO1xuZXhwb3J0IHR5cGUgeyBSZXRyeUxvb3BDb250ZXh0LCBSZXRyeUxvb3BPcHRpb25zLCBSZXRyeUxvb3BTdGF0ZSB9IGZyb20gJy4vbGliL2J1aWxkZXIvcmV0cnlMb29wLmpzJztcbmV4cG9ydCB0eXBlIHtcbiAgQ2FwdHVyZUNoYW5uZWxTdGF0dXMsXG4gIENhcHR1cmVMaW1pdGF0aW9uLFxuICBOYXRpdmVDYXB0dXJlTm90ZSxcbiAgUmVjb3JkZXJDYXB0dXJlQWNrbm93bGVkZ2VtZW50LFxufSBmcm9tICcuL2xpYi9jYXB0dXJlL25hdGl2ZUNvdmVyYWdlLmpzJztcbmV4cG9ydCB7IHN0cmluZ2lmeVNuYXBzaG90IH0gZnJvbSAnLi9saWIvcnVubmVyL3N0cmluZ2lmeVNuYXBzaG90LmpzJztcbiJdfQ==
|
|
151
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHOzs7QUFTSCw0QkFBNEI7QUFDNUIsbURBQXdGO0FBQS9FLHFHQUFBLFNBQVMsT0FBQTtBQUFFLDRHQUFBLGdCQUFnQixPQUFBO0FBQUUsNkdBQUEsaUJBQWlCLE9BQUE7QUFzQ3ZELGtEQUFtRDtBQUExQyxzR0FBQSxVQUFVLE9BQUE7QUFRbkIsNEJBQTRCO0FBQzVCLCtDQUEyQztBQUFsQyx5R0FBQSxTQUFTLE9BQUE7QUFvQmxCLG1DQUFtQztBQUNuQyxrREFBdUQ7QUFBOUMsa0dBQUEsTUFBTSxPQUFBO0FBQUUsa0dBQUEsTUFBTSxPQUFBO0FBaUR2Qjs7Ozs7O0dBTUc7QUFDSCxtREFBcUg7QUFBNUcsbUdBQUEsT0FBTyxPQUFBO0FBQUUsK0dBQUEsbUJBQW1CLE9BQUE7QUFBRSx5R0FBQSxhQUFhLE9BQUE7QUFBRSxzR0FBQSxVQUFVLE9BQUE7QUFBRSw4R0FBQSxrQkFBa0IsT0FBQTtBQVdwRixtREFBK0Y7QUFBdEYsNkdBQUEsaUJBQWlCLE9BQUE7QUFBRSw0R0FBQSxnQkFBZ0IsT0FBQTtBQUFFLDRHQUFBLGdCQUFnQixPQUFBO0FBZ0M5RCxvQkFBb0I7QUFDcEIsa0RBQXdEO0FBQS9DLDJHQUFBLGVBQWUsT0FBQTtBQVF4QixvQkFBb0I7QUFDcEIsa0RBQTBEO0FBQWpELDZHQUFBLGlCQUFpQixPQUFBO0FBRTFCLG9CQUFvQjtBQUNwQixrREFBbUQ7QUFBMUMsc0dBQUEsVUFBVSxPQUFBO0FBcUJuQiwrQkFBK0I7QUFDL0IsaURBQXNEO0FBQTdDLDBHQUFBLGNBQWMsT0FBQTtBQUV2QiwrQkFBK0I7QUFDL0Isa0RBQXFEO0FBQTVDLDBHQUFBLGFBQWEsT0FBQTtBQUV0QixvQ0FBb0M7QUFDcEMscURBQTREO0FBQW5ELDhHQUFBLGlCQUFpQixPQUFBO0FBbUMxQixxRUFBcUU7QUFDckUscURBS2lDO0FBSi9CLG1IQUFBLHNCQUFzQixPQUFBO0FBQ3RCLG1IQUFBLHNCQUFzQixPQUFBO0FBQ3RCLCtHQUFBLGtCQUFrQixPQUFBO0FBQ2xCLHdHQUFBLFdBQVcsT0FBQTtBQW1EYiwrQkFBK0I7QUFDL0IsbURBQThEO0FBQXJELGtIQUFBLHFCQUFxQixPQUFBO0FBSzlCLCtCQUErQjtBQUMvQixtREFBNkQ7QUFBcEQsaUhBQUEsb0JBQW9CLE9BQUE7QUFFN0IsK0JBQStCO0FBQy9CLG1EQUFzRTtBQUE3RCwwSEFBQSw2QkFBNkIsT0FBQTtBQUV0QywrQkFBK0I7QUFDL0IsbURBQXVFO0FBQTlELDJIQUFBLDhCQUE4QixPQUFBO0FBRXZDLCtCQUErQjtBQUMvQixtREFBeUU7QUFBaEUsNkhBQUEsZ0NBQWdDLE9BQUE7QUFFekMsK0JBQStCO0FBQy9CLG1EQUFpRTtBQUF4RCxxSEFBQSx3QkFBd0IsT0FBQTtBQUVqQywrQkFBK0I7QUFDL0IsbURBQXNFO0FBQTdELDBIQUFBLDZCQUE2QixPQUFBO0FBRXRDLCtCQUErQjtBQUMvQixtREFBb0U7QUFBM0Qsd0hBQUEsMkJBQTJCLE9BQUE7QUFFcEMsK0JBQStCO0FBQy9CLG1EQUFzRTtBQUE3RCwwSEFBQSw2QkFBNkIsT0FBQTtBQW1CdEMsdUNBQXVDO0FBQ3ZDLG1EQUE2RTtBQUFwRSwrR0FBQSxrQkFBa0IsT0FBQTtBQUFFLDZHQUFBLGdCQUFnQixPQUFBO0FBRTdDLCtFQUErRTtBQUMvRSw0RUFBNEU7QUFDNUUsK0VBQStFO0FBRS9FLDhCQUE4QjtBQUM5QixxREFBNEQ7QUFBbkQsOEdBQUEsaUJBQWlCLE9BQUE7QUEwQjFCLDZCQUE2QjtBQUM3QixrREFBaUQ7QUFBeEMsc0dBQUEsU0FBUyxPQUFBO0FBZ0VsQixzQ0FBc0M7QUFDdEMsbURBQTJFO0FBQWxFLHlHQUFBLFlBQVksT0FBQTtBQUFFLDBHQUFBLGFBQWEsT0FBQTtBQUFFLGtHQUFBLEtBQUssT0FBQTtBQUUzQyxzQ0FBc0M7QUFDdEMsbURBQXFHO0FBQTVGLGlIQUFBLG9CQUFvQixPQUFBO0FBQUUsa0hBQUEscUJBQXFCLE9BQUE7QUFBRSw0R0FBQSxlQUFlLE9BQUE7QUFTckUsZ0NBQWdDO0FBQ2hDLG1EQUEwRTtBQUFqRSw2R0FBQSxnQkFBZ0IsT0FBQTtBQUFFLDRHQUFBLGVBQWUsT0FBQTtBQUUxQywrRUFBK0U7QUFDL0UsaURBQWlEO0FBQ2pELCtFQUErRTtBQUUvRTs7Ozs7Ozs7Ozs7R0FXRztBQUNILCtDQUE0RTtBQUFuRSw0R0FBQSxjQUFjLE9BQUE7QUFBRSwyR0FBQSxhQUFhLE9BQUE7QUFBRSx1R0FBQSxTQUFTLE9BQUE7QUFxQmpELDBFQUFzRTtBQUE3RCx5SEFBQSxpQkFBaUIsT0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRm9vdFByaW50IOKAlCBQdWJsaWMgQVBJICh2MylcbiAqXG4gKiBUaGUgZmxvd2NoYXJ0IHBhdHRlcm4gZm9yIGJhY2tlbmQgY29kZS5cbiAqIEJ1aWxkIOKGkiBSdW4g4oaSIE9ic2VydmUuXG4gKlxuICogKipUaGUgY29tbW9uIGltcG9ydCBwYXRoczoqKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IGZsb3dDaGFydCwgZGVjaWRlLCBuYXJyYXRpdmUgfSBmcm9tICdmb290cHJpbnRqcyc7ICAgICAgICAgICAvLyBtYWluIOKAlCBzdGFydCBoZXJlXG4gKiBpbXBvcnQgeyBtZXRyaWNzLCBkZWJ1ZywgbWFuaWZlc3QgfSAgICAgZnJvbSAnZm9vdHByaW50anMvcmVjb3JkZXJzJzsgLy8gcmVjb3JkZXIgZmFjdG9yaWVzXG4gKiBpbXBvcnQgeyBzdGF0ZUF0LCBjYXVzYWxDaGFpbiB9IGZyb20gJ2Zvb3R0cmFjZSc7ICAgICAvLyByZWFkIGEgZmluaXNoZWQgcnVuXG4gKiBpbXBvcnQgeyBSZWNvcmRGcmFtZSwgRXZlbnRMb2cgfSBmcm9tICdmb290dHJhY2Uvd3JpdGUnOyAgICAgLy8gd3JpdGUgYSByZWNvcmQgeW91cnNlbGZcbiAqIGltcG9ydCB7IFN0YWdlQ29udGV4dCB9ICAgICAgICAgICAgICAgICBmcm9tICdmb290cHJpbnRqcy9hZHZhbmNlZCc7ICAvLyBlbmdpbmUgaW50ZXJuYWxzXG4gKiBgYGBcbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gUXVpY2sgU3RhcnQg4oCUIEV2ZXJ5dGhpbmcgeW91IG5lZWQgZm9yIDkwJSBvZiB1c2UgY2FzZXNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqIEBjYXRlZ29yeSBRdWljayBTdGFydCAqL1xuZXhwb3J0IHR5cGUgeyBGbG93Q2hhcnQsIFN0YWdlRnVuY3Rpb24gYXMgU3RhZ2VIYW5kbGVyLCBTdHJlYW1IYW5kbGVycyB9IGZyb20gJy4vbGliL2J1aWxkZXIvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IFF1aWNrIFN0YXJ0ICovXG5leHBvcnQgeyBmbG93Q2hhcnQsIEZsb3dDaGFydEJ1aWxkZXIsIGZsb3dDaGFydFNlbGVjdG9yIH0gZnJvbSAnLi9saWIvYnVpbGRlci9pbmRleC5qcyc7XG5cbi8qKlxuICogQGNhdGVnb3J5IFF1aWNrIFN0YXJ0XG4gKlxuICogQ29uZmlnIGZvciBgLmFkZFBhcmFsbGVsRm9yRWFjaCgpYCDigJQgb25lIGJyYW5jaCBwZXIgaXRlbSwgYnJhbmNoIGNvdW50XG4gKiBkZWNpZGVkIGF0IHJ1biB0aW1lIGZyb20gdGhlIHBheWxvYWQuIGBtYXhCcmFuY2hlc2AgYW5kIGBpbnRvYCBhcmUgcmVxdWlyZWRcbiAqIG9uIHB1cnBvc2UgKHNlZSBkb2NzL2Rlc2lnbi9leGVjdXRpb24tY29udHJvbC5tZCkuXG4gKi9cbmV4cG9ydCB0eXBlIHsgQnJhbmNoQ2hhcnQsIFBhcmFsbGVsRm9yRWFjaENvbmZpZywgUmV0cnlQb2xpY3kgfSBmcm9tICcuL2xpYi9idWlsZGVyL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBRdWljayBTdGFydCDigJQgYnVpbGQtdGltZSBvYnNlcnZlciAodHdpbiBvZiBGbG93UmVjb3JkZXIpICovXG5leHBvcnQgdHlwZSB7XG4gIFN0cnVjdHVyZURlY2lkZXJDb21wbGV0ZUV2ZW50LFxuICBTdHJ1Y3R1cmVFZGdlQWRkZWRFdmVudCxcbiAgU3RydWN0dXJlRWRnZUtpbmQsXG4gIFN0cnVjdHVyZUxvb3BFZGdlQWRkZWRFdmVudCxcbiAgU3RydWN0dXJlUmVjb3JkZXIsXG4gIFN0cnVjdHVyZVN0YWdlQWRkZWRFdmVudCxcbiAgU3RydWN0dXJlU3RhZ2VUYWdnZWRFdmVudCxcbiAgU3RydWN0dXJlU3ViZmxvd01vdW50ZWRFdmVudCxcbn0gZnJvbSAnLi9saWIvYnVpbGRlci9pbmRleC5qcyc7XG5cbi8qKlxuICogQGNhdGVnb3J5IFRpbWUgQnVkZ2V0XG4gKlxuICogYHRpbWVCdWRnZXQoY2hhcnQpYCDigJQgdGhlIHNsb3dlc3QgYSBjaGFydCBjYW4gdGFrZSwgZnJvbSBpdHMgZGVjbGFyZWQgcmV0cnkgcG9saWNpZXMgKGBhdHRlbXB0cyDDlyB0aW1lb3V0TXNgIHBsdXNcbiAqIHRoZSB3YWl0cywgc3VtbWVkIGFsb25nIHRoZSBzbG93ZXN0IHBhdGgpLCBhbmQgZXZlcnkgc3RhZ2UgdGhhdCBtYWtlcyBhIHBhdGggdW5ib3VuZGVkLCBieSBuYW1lLiBgLmJ1ZGdldChtcylgXG4gKiBkZWNsYXJlcyB0aGUgY2FsbGVyJ3MgY29udHJhY3Q7IGBidWlsZCgpYCByZWZ1c2VzIGEgY2hhcnQgdGhhdCBjYW5ub3Qga2VlcCBpdC4gQWxzbyBgY2hhcnQudGltZUJ1ZGdldCgpYC5cbiAqL1xuZXhwb3J0IHR5cGUge1xuICBCdWRnZXRBc3N1bXB0aW9ucyxcbiAgQnVkZ2V0U3RlcCxcbiAgVGltZUJ1ZGdldE9wdGlvbnMsXG4gIFRpbWVCdWRnZXRSZXBvcnQsXG4gIFVuYm91bmRlZFJlYXNvbixcbiAgVW5ib3VuZGVkU3RhZ2UsXG59IGZyb20gJy4vbGliL2J1ZGdldC9pbmRleC5qcyc7XG5leHBvcnQgeyB0aW1lQnVkZ2V0IH0gZnJvbSAnLi9saWIvYnVkZ2V0L2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBRdWljayBTdGFydCAqL1xuZXhwb3J0IHR5cGUgeyBUeXBlZFN0YWdlRnVuY3Rpb24gfSBmcm9tICcuL2xpYi9idWlsZGVyL3R5cGVkRmxvd0NoYXJ0LmpzJztcblxuLyoqIEBjYXRlZ29yeSBRdWljayBTdGFydCAqL1xuZXhwb3J0IHR5cGUgeyBTY29wZU1ldGhvZHMsIFR5cGVkU2NvcGUgfSBmcm9tICcuL2xpYi9yZWFjdGl2ZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgUXVpY2sgU3RhcnQgKi9cbmV4cG9ydCB7IG5hcnJhdGl2ZSB9IGZyb20gJy4vcmVjb3JkZXJzLmpzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gRGVjaXNpb24gQnJhbmNoaW5nIOKAlCBkZWNpZGUoKSAvIHNlbGVjdCgpIHdpdGggZXZpZGVuY2UgY2FwdHVyZVxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKiogQGNhdGVnb3J5IERlY2lzaW9uIEJyYW5jaGluZyAqL1xuZXhwb3J0IHR5cGUge1xuICBEZWNpZGVSdWxlLFxuICBEZWNpc2lvbkV2aWRlbmNlLFxuICBEZWNpc2lvblJlc3VsdCxcbiAgRGVmYXVsdEJyYW5jaCxcbiAgRmlsdGVyT3BzLFxuICBSdWxlRXZpZGVuY2UsXG4gIFNlbGVjdGlvbkV2aWRlbmNlLFxuICBTZWxlY3Rpb25SZXN1bHQsXG4gIFdoZW5DbGF1c2UsXG4gIFdoZXJlRmlsdGVyLFxufSBmcm9tICcuL2xpYi9kZWNpZGUvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IERlY2lzaW9uIEJyYW5jaGluZyAqL1xuZXhwb3J0IHsgZGVjaWRlLCBzZWxlY3QgfSBmcm9tICcuL2xpYi9kZWNpZGUvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IEVycm9ycyAqL1xuZXhwb3J0IHR5cGUgeyBUZXJtaW5hbEZhaWx1cmVDb250ZXh0IH0gZnJvbSAnLi9saWIvZXJyb3JzL3Rlcm1pbmFsRmFpbHVyZS5qcyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEF0dGVtcHRzIOKAlCBldmVyeSB0cnkgb2YgYSByZXRyaWVkIHN0YWdlLCBhbmQgdGhlIGRlY2lzaW9uIHRoYXQgZm9sbG93ZWQgaXRcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBAY2F0ZWdvcnkgQXR0ZW1wdHNcbiAqXG4gKiBPbmUgYEF0dGVtcHRSZWNvcmRgIHBlciBhdHRlbXB0IG9mIGEgc3RhZ2Ugd2l0aCBhIGRlY2xhcmVkIGByZXRyeWAgcG9saWN5LCBhIGB0aW1lb3V0TXNgLCBvciBhIHJ1biBkZWFkbGluZSDigJRcbiAqIHRpbWluZywgb3V0Y29tZSwgZmFpbHVyZSBjYXRlZ29yeSwgYW5kIHRoZSByZXRyeS1vci1zdG9wIGRlY2lzaW9uIGFzIGBEZWNpc2lvbkV2aWRlbmNlYCDigJQgb24gdGhlIHN0YWdlJ3NcbiAqIGV4ZWN1dGlvbi10cmVlIG5vZGUgKGBTdGFnZVNuYXBzaG90LmF0dGVtcHRzYCAvIGBhdHRlbXB0U3VtbWFyeWApIGFuZCBvbiBgRmxvd1JlY29yZGVyLm9uQXR0ZW1wdGAuXG4gKiBBIGNhbGwgYSBzdGFnZSBtYWtlcyB0aHJvdWdoIGBzY29wZS4kY2FsbGAgaXMgcmVjb3JkZWQgdGhlIHNhbWUgd2F5IChraW5kIGAnY2FsbCdgKSwgYW5kIHNvIGlzIGFuIFNESydzIG93biByZXRyeVxuICogYW4gYWRhcHRlciByZXBvcnRzIHRocm91Z2ggYG9ic2VydmVkKClgIChgT2JzZXJ2ZWRBdHRlbXB0YCwga2luZCBgJ29ic2VydmVkJ2ApLiBgQXR0ZW1wdENvbnRleHRgIGlzIHdoYXRcbiAqIGBzY29wZS4kYXR0ZW1wdCgpYCByZXR1cm5zLCBhbmQgd2hhdCBhIGNhbGwncyBmdW5jdGlvbiBnZXRzICh0aGUgYXR0ZW1wdCdzIHNpZ25hbCwgdGhlIHRpbWUgbGVmdCwgYG9ic2VydmVkYCk7XG4gKiBgTGF0ZVdyaXRlYCBpcyBhIHdyaXRlIChvciBjYWxsKSBhbiBlbmRlZCBhdHRlbXB0IHRyaWVkIChgU3RhZ2VTbmFwc2hvdC5sYXRlV3JpdGVzYCkuIEEgc3RhZ2UgdGhhdCBjaGFuZ2VzIGFuXG4gKiBvdXRzaWRlIHN5c3RlbSBkZWNsYXJlcyBpdCAoYFN0YWdlVG91Y2hlc2AsIGAudG91Y2hlcygpYCksIGFuZCBhIGNhbGwgZG9lcyAoYENhbGxPcHRpb25zYCk6IGV2ZXJ5IGF0dGVtcHQgdGhlblxuICogY2FycmllcyBpdHMgYEF0dGVtcHRFZmZlY3RgLCBhbmQgdGhlIGtleSBydWxlIGlzIGhhbmRlZCBhbiBgSWRlbXBvdGVuY3lLZXlDb250ZXh0YCBvbmNlIHBlciBleGVjdXRpb24uXG4gKi9cbmV4cG9ydCB0eXBlIHtcbiAgQXR0ZW1wdENhdGVnb3J5LFxuICBBdHRlbXB0Q29udGV4dCxcbiAgQXR0ZW1wdEVmZmVjdCxcbiAgQXR0ZW1wdEVycm9yLFxuICBBdHRlbXB0SW5wdXRzLFxuICBBdHRlbXB0S2luZCxcbiAgQXR0ZW1wdE5leHQsXG4gIEF0dGVtcHRPcHRpb25zLFxuICBBdHRlbXB0T3V0Y29tZSxcbiAgQXR0ZW1wdFJlYXNvbixcbiAgQXR0ZW1wdFJlY29yZCxcbiAgQXR0ZW1wdFN1bW1hcnksXG4gIENhbGxPcHRpb25zLFxuICBJZGVtcG90ZW5jeUtleUNvbnRleHQsXG4gIExhdGVXcml0ZSxcbiAgT2JzZXJ2ZWRBdHRlbXB0LFxuICBTdGFnZVRvdWNoZXMsXG4gIFVua25vd25FZmZlY3RJbml0LFxufSBmcm9tICcuL2xpYi9hdHRlbXB0L2luZGV4LmpzJztcbi8qKlxuICogQGNhdGVnb3J5IEF0dGVtcHRzXG4gKlxuICogQW4gYXR0ZW1wdCBieSBuYW1lIChgc2VyaWVzYCArIGBhdHRlbXB0YCkgYW5kIHBlci1vdXRjb21lIGNvdW50cyDigJQgd2hhdCByZWNvcmRlciByb3dzIGhvbGQgb2YgYXR0ZW1wdHMuXG4gKi9cbmV4cG9ydCB0eXBlIHsgQXR0ZW1wdE91dGNvbWVDb3VudHMsIEF0dGVtcHRSZWYgfSBmcm9tICcuL2xpYi9yZWNvcmRlci9hdHRlbXB0U2VyaWVzLmpzJztcblxuLyoqXG4gKiBAY2F0ZWdvcnkgQXR0ZW1wdHNcbiAqXG4gKiBgYXR0ZW1wdCgpYCDigJQgdGhlIGF0dGVtcHQgcnVubmVyIGZvciBjb2RlIHRoYXQgaXMgbm90IGEgc3RhZ2UgKHJlY29yZHMgZ28gdG8gaXRzIGBvbkF0dGVtcHRgKTsgYGVycm9yQ2F0ZWdvcnlgXG4gKiDigJQgdGhlIG9uZSBmYWlsdXJlIGNsYXNzaWZpZXIgKHNldmVuIGZpeGVkIGNhdGVnb3JpZXMpOyBgcmV0cnlSdWxlc2Ag4oCUIHRoZSBvbmUgcmV0cnkgcnVsZSB0YWJsZSwgYXMgYGRlY2lkZSgpYFxuICogcnVsZXM7IHRoZSBhdHRlbXB0IGNvbnRyYWN0J3MgdHdvIGVycm9ycy5cbiAqL1xuZXhwb3J0IHsgYXR0ZW1wdCwgQXR0ZW1wdFRpbWVvdXRFcnJvciwgZXJyb3JDYXRlZ29yeSwgcmV0cnlSdWxlcywgVW5rbm93bkVmZmVjdEVycm9yIH0gZnJvbSAnLi9saWIvYXR0ZW1wdC9pbmRleC5qcyc7XG5cbi8qKlxuICogQGNhdGVnb3J5IENvcnJlbGF0aW9uXG4gKlxuICogVGhlIHJ1bidzIGNvcnJlbGF0aW9uICgxMC4xKTogYGVudi50cmFjZXBhcmVudGAgKFczQywgcGFyc2VkIHN0cmljdGx5KSBvciBgZW52LnRyYWNlSWRgICsgYGVudi5vcGVyYXRpb25JZGBcbiAqIGJlY29tZSBPTkUgZnJvemVuIGBSdW5Db3JyZWxhdGlvbmAgcGVyIHJ1biDigJQgb24gYGdldFNuYXBzaG90KCkuY29ycmVsYXRpb25gLCBldmVyeSBmbG93IGV2ZW50J3NcbiAqIGB0cmF2ZXJzYWxDb250ZXh0LmNvcnJlbGF0aW9uYCBhbmQgZXZlcnkgc2NvcGUgYW5kIGVtaXQgZXZlbnQncyBgY29ycmVsYXRpb25gLiBgcGFyc2VUcmFjZXBhcmVudGAgL1xuICogYGZvcm1hdFRyYWNlcGFyZW50YCBhcmUgdGhlIFczQyBjb2RlYzsgYSByZWZ1c2VkIGhlYWRlciB0aHJvd3MgYFRyYWNlcGFyZW50RXJyb3JgIHdpdGggYSBuYW1lZCBgcmVhc29uYC5cbiAqL1xuZXhwb3J0IHR5cGUgeyBQYXJzZWRUcmFjZXBhcmVudCwgUnVuQ29ycmVsYXRpb24sIFRyYWNlcGFyZW50RmllbGRzLCBUcmFjZXBhcmVudFJlZnVzYWwgfSBmcm9tICcuL2xpYi9hdHRlbXB0L2luZGV4LmpzJztcbmV4cG9ydCB7IGZvcm1hdFRyYWNlcGFyZW50LCBwYXJzZVRyYWNlcGFyZW50LCBUcmFjZXBhcmVudEVycm9yIH0gZnJvbSAnLi9saWIvYXR0ZW1wdC9pbmRleC5qcyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFJ1biDigJQgRXhlY3V0ZSBjaGFydHMgYW5kIGNvbGxlY3QgcmVzdWx0c1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKiogQGNhdGVnb3J5IFJ1biAqL1xuZXhwb3J0IHR5cGUge1xuICBDYXB0dXJlSGlzdG9yeU9wdGlvbnMsXG4gIENhcHR1cmVIaXN0b3J5UmVjZWlwdCxcbiAgQ2FwdHVyZUhpc3RvcnlTdGF0dXMsXG4gIENhcHR1cmVIaXN0b3J5VGFyZ2V0LFxufSBmcm9tICcuL2xpYi9ydW5uZXIvaW5kZXguanMnO1xuZXhwb3J0IHR5cGUgeyBSdW5SZXN1bHQgfSBmcm9tICcuL2xpYi9ydW5uZXIvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IFJ1biAqL1xuZXhwb3J0IHR5cGUgeyBGbG93Q2hhcnRFeGVjdXRvck9wdGlvbnMgfSBmcm9tICcuL2xpYi9ydW5uZXIvaW5kZXguanMnO1xuXG4vKipcbiAqIFRoZSBjcmFzaC1zYWZlIHJlY29yZCAoMTAuMSk6IHRoZSBleGVjdXRvcidzIGBzaW5rYCBvcHRpb24sIGl0cyBhY2NvdW50aW5nIG9uIGBnZXRTbmFwc2hvdCgpLnNpbmtgLFxuICogYGV4ZWN1dG9yLmZsdXNoUmVjb3JkKClgJ3MgcmVzdWx0LCBhbmQgdGhlIGVycm9yIGEgcnVuIHdpdGggYG9uRmFpbHVyZTogJ2ZhaWwnYCByZWplY3RzIHdpdGguIFRoZSBwb3J0XG4gKiAoYFJlY29yZFNpbmtgLCBgbWVtb3J5U2lua2ApIGlzIGBmb290dHJhY2Uvd3JpdGVgJ3M7IHRoZSBmaWxlIGFkYXB0ZXIgaXMgYGZvb3RwcmludGpzL3NpbmtzYC5cbiAqIEBjYXRlZ29yeSBSdW5cbiAqL1xuZXhwb3J0IHR5cGUge1xuICBSZWNvcmRGbHVzaFJlc3VsdCxcbiAgUmVjb3JkU2lua0ZhaWx1cmVNb2RlLFxuICBSZWNvcmRTaW5rRmx1c2hNb2RlLFxuICBSZWNvcmRTaW5rT3B0aW9uLFxuICBSZWNvcmRTaW5rT3B0aW9ucyxcbiAgUmVjb3JkU2lua1N0YXRzLFxufSBmcm9tICcuL2xpYi9ydW5uZXIvaW5kZXguanMnO1xuLyoqIEBjYXRlZ29yeSBSdW4gKi9cbmV4cG9ydCB7IFJlY29yZFNpbmtFcnJvciB9IGZyb20gJy4vbGliL3J1bm5lci9pbmRleC5qcyc7XG5cbi8qKlxuICogVGhlIGZvdXIgb2JzZXJ2YWJpbGl0eSBkaWFscyBgRmxvd0NoYXJ0RXhlY3V0b3JPcHRpb25zYCBpbmhlcml0cy5cbiAqIEBjYXRlZ29yeSBSdW5cbiAqL1xuZXhwb3J0IHR5cGUgeyBSdW5EaWFscyB9IGZyb20gJy4vbGliL21lbW9yeS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgUnVuICovXG5leHBvcnQgeyBGbG93Q2hhcnRFeGVjdXRvciB9IGZyb20gJy4vbGliL3J1bm5lci9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgUnVuICovXG5leHBvcnQgeyBSdW5Db250ZXh0IH0gZnJvbSAnLi9saWIvcnVubmVyL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBSdW4gKi9cbmV4cG9ydCB0eXBlIHsgQ2hhcnRPcGVuQVBJT3B0aW9ucywgTUNQVG9vbERlc2NyaXB0aW9uLCBSdW5uYWJsZUZsb3dDaGFydCB9IGZyb20gJy4vbGliL3J1bm5lci9SdW5uYWJsZUNoYXJ0LmpzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gT2JzZXJ2ZSDigJQgRGF0YSAoc2NvcGUgcmVjb3JkZXJzLCBmaXJlIGR1cmluZyBzdGFnZSBleGVjdXRpb24pXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgRGF0YSAqL1xuZXhwb3J0IHR5cGUge1xuICBDb21taXRFdmVudCxcbiAgRXJyb3JFdmVudCxcbiAgUmVhZEV2ZW50LFxuICBSZWRhY3Rpb25Qb2xpY3ksXG4gIFJlZGFjdGlvblJlcG9ydCxcbiAgU2NvcGVSZWNvcmRlcixcbiAgU3RhZ2VFdmVudCxcbiAgV3JpdGVFdmVudCxcbn0gZnJvbSAnLi9saWIvc2NvcGUvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IE9ic2VydmUg4oCUIERhdGEgKi9cbmV4cG9ydCB7IE1ldHJpY1JlY29yZGVyIH0gZnJvbSAnLi9saWIvc2NvcGUvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IE9ic2VydmUg4oCUIERhdGEgKi9cbmV4cG9ydCB7IERlYnVnUmVjb3JkZXIgfSBmcm9tICcuL2xpYi9zY29wZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgT3BlcmF0aW9uICovXG5leHBvcnQgeyBSZWNvcmRlck9wZXJhdGlvbiB9IGZyb20gJy4vbGliL3JlY29yZGVyL2luZGV4LmpzJztcblxuLyoqXG4gKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgRGVsaXZlcnkgdGllciAoUkZDLTAwMSBkZWZlcnJlZCBvYnNlcnZlcnMpXG4gKlxuICogRXZlcnkgYGF0dGFjaCpSZWNvcmRlcmAgY2FsbCBhY2NlcHRzIGFuIG9wdGlvbnMgYmFnOlxuICogYGV4ZWN1dG9yLmF0dGFjaFNjb3BlUmVjb3JkZXIocmVjLCB7IGRlbGl2ZXJ5OiAnZGVmZXJyZWQnIH0pYCB0YWtlcyB0aGVcbiAqIHJlY29yZGVyIE9VVCBvZiB0aGUgZW5naW5lJ3MgaG90IHBhdGgg4oCUIGV2ZW50cyBhcmUgY2FwdHVyZWQgaW50byBvbmVcbiAqIGJvdW5kZWQsIHRvdGFsbHktb3JkZXJlZCBxdWV1ZSBhbmQgZGVsaXZlcmVkIGF0IHRoZSBuZXh0IG1pY3JvdGFza1xuICogY2hlY2twb2ludCAoXCJvbmUgYmVhdCBiZWhpbmRcIikuIE9taXQgYGRlbGl2ZXJ5YCBmb3IgdGhlIGhpc3RvcmljYWxcbiAqIHN5bmNocm9ub3VzIGNhbGwgKGJ5dGUtaWRlbnRpY2FsIHRvIHByZXZpb3VzIHJlbGVhc2VzKS4gQWNjb3VudGluZ1xuICogc3VyZmFjZXMgb24gYHNuYXBzaG90Lm9ic2VydmVyU3RhdHNgOyBgZXhlY3V0b3IuZHJhaW5PYnNlcnZlcnMoKWAgc2V0dGxlc1xuICogYXN5bmMgbGlzdGVuZXJzIGJlZm9yZSBzaHV0ZG93bi4gU2VlIGBkb2NzL2d1aWRlcy9vYnNlcnZlcnMtZGVmZXJyZWQubWRgLlxuICovXG5leHBvcnQgdHlwZSB7XG4gIEF0dGFjaFJlY29yZGVyT3B0aW9ucyxcbiAgT2JzZXJ2ZXJEZWxpdmVyeSxcbiAgT2JzZXJ2ZXJEcmFpblJlc3VsdCxcbiAgT2JzZXJ2ZXJTdGF0cyxcbn0gZnJvbSAnLi9saWIvcnVubmVyL2luZGV4LmpzJztcblxuLyoqXG4gKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgRGVsaXZlcnkgdGllciAoUkZDLTAwMSBkZWZlcnJlZCBvYnNlcnZlcnMpXG4gKlxuICogYENhcHR1cmVQb2xpY3lgIOKAlCBob3cgYSBkZWZlcnJlZCBldmVudCdzIHBheWxvYWQgaXMgbWF0ZXJpYWxpemVkIGF0XG4gKiBjYXB0dXJlIHRpbWUgKGAnY2xvbmUnYCBieSBkZWZhdWx0IGZvciBhdHRhY2ggb3B0aW9ucyAvIGAnc3VtbWFyeSdgIC8gYCdyZWYnYCkuIGBPdmVyZmxvd1BvbGljeWBcbiAqIOKAlCB3aGF0IGEgc2F0dXJhdGVkIHF1ZXVlIGRvZXMgKGAnZHJvcC1vbGRlc3QnYCBkZWZhdWx0IC8gYCdzYW1wbGUnYCAvXG4gKiBgJ2Jsb2NrJ2ApLiBgRGlzcGF0Y2hlclN0YXRzYCAvIGBMaXN0ZW5lclN0YXRzYCDigJQgdGhlIGFjY291bnRpbmcgc2hhcGVzXG4gKiBlbWJlZGRlZCBpbiBgT2JzZXJ2ZXJTdGF0c2AuIFR5cGVzIG9ubHkg4oCUIHRoZSBvYnNlcnZlci1xdWV1ZSBtb2R1bGVcbiAqIGl0c2VsZiBpcyBpbnRlcm5hbDsgY29uc3VtZXJzIHVzZSB0aGUgYXR0YWNoIG9wdGlvbnMuXG4gKi9cbmV4cG9ydCB0eXBlIHsgQ2FwdHVyZVBvbGljeSwgRGlzcGF0Y2hlclN0YXRzLCBMaXN0ZW5lclN0YXRzLCBPdmVyZmxvd1BvbGljeSB9IGZyb20gJy4vbGliL29ic2VydmVyLXF1ZXVlL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBDb21iaW5lZCAoYm90aCBkYXRhLWZsb3cgYW5kIGNvbnRyb2wtZmxvdykgKi9cbmV4cG9ydCB0eXBlIHsgQ29tYmluZWRSZWNvcmRlciB9IGZyb20gJy4vbGliL3JlY29yZGVyL2luZGV4LmpzJztcbi8qKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgQ29tYmluZWQgKGJvdGggZGF0YS1mbG93IGFuZCBjb250cm9sLWZsb3cpICovXG5leHBvcnQge1xuICBoYXNFbWl0UmVjb3JkZXJNZXRob2RzLFxuICBoYXNGbG93UmVjb3JkZXJNZXRob2RzLFxuICBoYXNSZWNvcmRlck1ldGhvZHMsXG4gIGlzRmxvd0V2ZW50LFxufSBmcm9tICcuL2xpYi9yZWNvcmRlci9pbmRleC5qcyc7XG5cbi8qKlxuICogQGNhdGVnb3J5IE9ic2VydmUg4oCUIEVtaXQgKHVzZXItYXV0aG9yZWQgc3RydWN0dXJlZCBldmVudHMpXG4gKlxuICogVGhpcmQgb2JzZXJ2ZXIgY2hhbm5lbCAoYWxvbmdzaWRlIGBTY29wZVJlY29yZGVyYCBhbmQgYEZsb3dSZWNvcmRlcmApLiBDb25zdW1lclxuICogY29kZSBjYWxscyBgc2NvcGUuJGVtaXQobmFtZSwgcGF5bG9hZClgIGZyb20gaW5zaWRlIGEgc3RhZ2U7IGV2ZXJ5IGF0dGFjaGVkXG4gKiBgRW1pdFJlY29yZGVyLm9uRW1pdChldmVudClgIGZpcmVzIHN5bmNocm9ub3VzbHkgd2l0aCBzdGFnZS1jb250ZXh0XG4gKiBlbnJpY2htZW50LiBQYXNzLXRocm91Z2gg4oCUIG5vIGJ1ZmZlcmluZywgemVybyBhbGxvY2F0aW9uIHdoZW4gbm8gcmVjb3JkZXJcbiAqIGlzIGF0dGFjaGVkLlxuICovXG5leHBvcnQgdHlwZSB7IEVtaXRFdmVudCwgRW1pdFJlY29yZGVyIH0gZnJvbSAnLi9saWIvcmVjb3JkZXIvaW5kZXguanMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBPYnNlcnZlIOKAlCBGbG93IChGbG93UmVjb3JkZXIsIGZpcmVzIGFmdGVyIHN0YWdlIGV4ZWN1dGlvbilcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBGbG93ICovXG5leHBvcnQgdHlwZSB7XG4gIEZsb3dBdHRlbXB0RXZlbnQsXG4gIEZsb3dCcmVha0V2ZW50LFxuICBGbG93RGVjaXNpb25FdmVudCxcbiAgRmxvd0Vycm9yRXZlbnQsXG4gIEZsb3dGb3JrRXZlbnQsXG4gIEZsb3dMb29wRXZlbnQsXG4gIEZsb3dOZXh0RXZlbnQsXG4gIEZsb3dSZWNvcmRlcixcbiAgRmxvd1J1bkV2ZW50LFxuICBGbG93UnVuRmFpbGVkRXZlbnQsXG4gIEZsb3dTZWxlY3RlZEV2ZW50LFxuICBGbG93U3RhZ2VFdmVudCxcbiAgRmxvd1N0YWdlUmV0cnlFdmVudCxcbiAgRmxvd1N1YmZsb3dFdmVudCxcbiAgRmxvd1N1YmZsb3dSZWdpc3RlcmVkRXZlbnQsXG4gIEZsb3dUaHJvdHRsZWRFdmVudCxcbiAgUmVzdW1lTGluayxcbiAgVHJhdmVyc2FsQ29udGV4dCxcbn0gZnJvbSAnLi9saWIvZW5naW5lL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBGbG93ICovXG5leHBvcnQgdHlwZSB7IENvbWJpbmVkTmFycmF0aXZlRW50cnkgfSBmcm9tICcuL2xpYi9lbmdpbmUvaW5kZXguanMnO1xuXG4vKipcbiAqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBGbG93XG4gKlxuICogYE5hcnJhdGl2ZUZvcm1hdHRlcmAg4oCUIHBsdWdnYWJsZSBmb3JtYXR0ZXIgdGhhdCBjb252ZXJ0cyBldmVudCBjb250ZXh0XG4gKiBvYmplY3RzIGludG8gdGhlIHRleHQgbGluZXMgb2YgdGhlIG5hcnJhdGl2ZS5cbiAqL1xuZXhwb3J0IHR5cGUgeyBOYXJyYXRpdmVGb3JtYXR0ZXIgfSBmcm9tICcuL2xpYi9lbmdpbmUvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IE9ic2VydmUg4oCUIEZsb3cgKi9cbmV4cG9ydCB7IE5hcnJhdGl2ZUZsb3dSZWNvcmRlciB9IGZyb20gJy4vbGliL2VuZ2luZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgRmxvdyAqL1xuZXhwb3J0IHR5cGUgeyBNYW5pZmVzdEF0dGVtcHRSb3csIE1hbmlmZXN0RW50cnkgfSBmcm9tICcuL2xpYi9lbmdpbmUvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IE9ic2VydmUg4oCUIEZsb3cgKi9cbmV4cG9ydCB7IE1hbmlmZXN0Rmxvd1JlY29yZGVyIH0gZnJvbSAnLi9saWIvZW5naW5lL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBGbG93ICovXG5leHBvcnQgeyBBZGFwdGl2ZU5hcnJhdGl2ZUZsb3dSZWNvcmRlciB9IGZyb20gJy4vbGliL2VuZ2luZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgRmxvdyAqL1xuZXhwb3J0IHsgTWlsZXN0b25lTmFycmF0aXZlRmxvd1JlY29yZGVyIH0gZnJvbSAnLi9saWIvZW5naW5lL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBGbG93ICovXG5leHBvcnQgeyBQcm9ncmVzc2l2ZU5hcnJhdGl2ZUZsb3dSZWNvcmRlciB9IGZyb20gJy4vbGliL2VuZ2luZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgRmxvdyAqL1xuZXhwb3J0IHsgUkxFTmFycmF0aXZlRmxvd1JlY29yZGVyIH0gZnJvbSAnLi9saWIvZW5naW5lL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBGbG93ICovXG5leHBvcnQgeyBTZXBhcmF0ZU5hcnJhdGl2ZUZsb3dSZWNvcmRlciB9IGZyb20gJy4vbGliL2VuZ2luZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgRmxvdyAqL1xuZXhwb3J0IHsgU2lsZW50TmFycmF0aXZlRmxvd1JlY29yZGVyIH0gZnJvbSAnLi9saWIvZW5naW5lL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBGbG93ICovXG5leHBvcnQgeyBXaW5kb3dlZE5hcnJhdGl2ZUZsb3dSZWNvcmRlciB9IGZyb20gJy4vbGliL2VuZ2luZS9pbmRleC5qcyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFNlbGYtRGVzY3JpYmluZyDigJQgLmNvbnRyYWN0KCksIHRvT3BlbkFQSSgpLCB0b01DUFRvb2woKVxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKiogQGNhdGVnb3J5IFNlbGYtRGVzY3JpYmluZyAqL1xuZXhwb3J0IHR5cGUgeyBKc29uU2NoZW1hIH0gZnJvbSAnLi9saWIvY29udHJhY3QvaW5kZXguanMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBTbmFwc2hvdCAmIENvbXBvc2l0aW9uIOKAlCBTdWJmbG93IG5hdmlnYXRpb24gYW5kIENvbXBvc2FibGVSdW5uZXJcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqIEBjYXRlZ29yeSBTbmFwc2hvdCAmIENvbXBvc2l0aW9uICovXG5leHBvcnQgdHlwZSB7IENvbXBvc2FibGVSdW5uZXIgfSBmcm9tICcuL2xpYi9ydW5uZXIvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IFNuYXBzaG90ICYgQ29tcG9zaXRpb24gKi9cbmV4cG9ydCB0eXBlIHsgUmVjb3JkZXJTbmFwc2hvdCwgUnVudGltZVNuYXBzaG90LCBTdWJ0cmVlU25hcHNob3QgfSBmcm9tICcuL2xpYi9ydW5uZXIvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IFNuYXBzaG90ICYgQ29tcG9zaXRpb24gKi9cbmV4cG9ydCB7IGdldFN1YnRyZWVTbmFwc2hvdCwgbGlzdFN1YmZsb3dQYXRocyB9IGZyb20gJy4vbGliL3J1bm5lci9pbmRleC5qcyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFNjb3BlUmVjb3JkZXIgQ29tcG9zaXRpb24g4oCUIEJ1bmRsZSBtdWx0aXBsZSByZWNvcmRlcnMgaW50byBkb21haW4gcHJlc2V0c1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKiogQGNhdGVnb3J5IFNjb3BlUmVjb3JkZXIgKi9cbmV4cG9ydCB7IENvbXBvc2l0ZVJlY29yZGVyIH0gZnJvbSAnLi9saWIvcmVjb3JkZXIvaW5kZXguanMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBQYXVzZS9SZXN1bWUg4oCUIFNlcmlhbGl6YWJsZSBjaGVja3BvaW50cyBmb3IgbG9uZy1ydW5uaW5nIG9yIGh1bWFuLWluLXRoZS1sb29wIGZsb3dzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKiBAY2F0ZWdvcnkgUGF1c2UvUmVzdW1lICovXG4vKiogQGNhdGVnb3J5IFBhdXNlL1Jlc3VtZSAqL1xuZXhwb3J0IHR5cGUge1xuICBGbG93Y2hhcnRDaGVja3BvaW50LFxuICBQYXVzYWJsZUhhbmRsZXIsXG4gIFBhdXNlZEV4ZWN1dGlvbixcbiAgUGVuZGluZ1BhdXNlLFxuICBSZWRhY3Rpb25NYXJrcyxcbn0gZnJvbSAnLi9saWIvcGF1c2UvaW5kZXguanMnO1xuXG4vKipcbiAqIEBjYXRlZ29yeSBQYXVzZS9SZXN1bWVcbiAqXG4gKiBgaW50ZXJydXB0KHNjb3BlLCB7IHJlYXNvbiwgZXhwZWN0cz8gfSlgIOKAlCBzdG9wIG1pZC1zdGFnZSB0byBhc2sgYSBxdWVzdGlvbixcbiAqIGFuZCBnZXQgdGhlIGFuc3dlciBiYWNrIGF0IHRoZSBzYW1lIGNhbGwgc2l0ZSB3aGVuIHRoZSBydW4gcmVzdW1lcy4gUmVzdW1lXG4gKiByZS1lbnRlcnMgdGhlIHN0YWdlIGZyb20gaXRzIFRPUCAoc3RhZ2VzIGFyZSBhdG9taWMpLCBzbyBrZWVwIHRoZSBoYWxmXG4gKiBiZWZvcmUgdGhlIGNhbGwgaWRlbXBvdGVudC5cbiAqL1xuZXhwb3J0IHR5cGUgeyBJbnRlcnJ1cHRQYXlsb2FkIH0gZnJvbSAnLi9saWIvcGF1c2UvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IFBhdXNlL1Jlc3VtZSAqL1xuZXhwb3J0IHsgaW50ZXJydXB0IH0gZnJvbSAnLi9saWIvcGF1c2UvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IFNjb3BlUmVjb3JkZXIgKi9cbmV4cG9ydCB0eXBlIHsgQ29tcG9zaXRlU25hcHNob3QgfSBmcm9tICcuL2xpYi9yZWNvcmRlci9pbmRleC5qcyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIENvbmZpZ3VyYXRpb24g4oCUIFR5cGVzIHBhc3NlZCB0byBGbG93Q2hhcnRFeGVjdXRvciBhbmQgcnVuKClcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqIEBjYXRlZ29yeSBDb25maWd1cmF0aW9uICovXG5leHBvcnQgdHlwZSB7IEV4ZWN1dGlvbkVudiwgRXhlY3V0b3JSZXN1bHQsIFBhdXNlZFJlc3VsdCwgUnVuT3B0aW9ucyB9IGZyb20gJy4vbGliL2VuZ2luZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgQ29uZmlndXJhdGlvbiAqL1xuZXhwb3J0IHR5cGUgeyBTY29wZUZhY3RvcnkgfSBmcm9tICcuL2xpYi9lbmdpbmUvaW5kZXguanMnO1xuXG4vKipcbiAqIEBjYXRlZ29yeSBDb25maWd1cmF0aW9uXG4gKlxuICogUmVhZC10cmFja2luZyBwb2xpY3kgZm9yIGBTdGFnZVNuYXBzaG90LnN0YWdlUmVhZHNgICgjMTQpOlxuICogYCdmdWxsJ2AgKGRlZmF1bHQg4oCUIHBlci1yZWFkIHZhbHVlIGNsb25lLCBoaXN0b3JpY2FsIGJlaGF2aW9yKSAvXG4gKiBgJ3N1bW1hcnknYCAoY2hlYXAgYFJlYWRTdW1tYXJ5TWFya2VyYCBwZXIgcmVhZCkgLyBgJ29mZidgIChubyB0cmFja2luZyxcbiAqIHplcm8gcGVyLXJlYWQgY2xvbmUpLiBQYXNzIGFzIGBuZXcgRmxvd0NoYXJ0RXhlY3V0b3IoY2hhcnQsIHsgcmVhZFRyYWNraW5nIH0pYFxuICogb3IgY2FsbCBgZXhlY3V0b3Iuc2V0UmVhZFRyYWNraW5nKG1vZGUpYCBiZWZvcmUgYHJ1bigpYC5cbiAqL1xuZXhwb3J0IHR5cGUgeyBSZWFkU3VtbWFyeU1hcmtlciwgUmVhZFRyYWNraW5nTW9kZSB9IGZyb20gJy4vbGliL21lbW9yeS9pbmRleC5qcyc7XG5cbi8qKlxuICogQGNhdGVnb3J5IENvbmZpZ3VyYXRpb25cbiAqXG4gKiBXcml0ZS10cmFja2luZyBwb2xpY3kgZm9yIGBTdGFnZVNuYXBzaG90LnN0YWdlV3JpdGVzYCAoIzEzYy1BKSDigJQgdGhlXG4gKiBzaWJsaW5nIG9mIGBSZWFkVHJhY2tpbmdNb2RlYDsgYm90aCBhbGlhcyB0aGUgc2hhcmVkIGBSZXRlbnRpb25Qb2xpY3lgXG4gKiBmYW1pbHkgZnJvbSBgbGliL2NhcHR1cmVgLiBgJ2Z1bGwnYCAoZGVmYXVsdCDigJQgcGVyLXdyaXRlIHZhbHVlIGNsb25lLFxuICogaGlzdG9yaWNhbCBiZWhhdmlvcikgLyBgJ3N1bW1hcnknYCAoY2hlYXAgYFdyaXRlU3VtbWFyeU1hcmtlcmAgcGVyIHdyaXRlKVxuICogLyBgJ29mZidgIChubyB0cmFja2luZzsgYHN0YWdlV3JpdGVzYCBhYnNlbnQgYW5kIHRoZSBgb25Db21taXRgIG11dGF0aW9uc1xuICogcGF5bG9hZCBpcyBlbXB0eSDigJQgd3JpdGVzIHRoZW1zZWx2ZXMgc3RpbGwgY29tbWl0LCBhbmQgdGhlIGNvbW1pdCBsb2cgaXNcbiAqIHVuYWZmZWN0ZWQpLiBQYXNzIGFzIGBuZXcgRmxvd0NoYXJ0RXhlY3V0b3IoY2hhcnQsIHsgd3JpdGVUcmFja2luZyB9KWAgb3JcbiAqIGNhbGwgYGV4ZWN1dG9yLnNldFdyaXRlVHJhY2tpbmcobW9kZSlgIGJlZm9yZSBgcnVuKClgLlxuICovXG5leHBvcnQgdHlwZSB7IFJldGVudGlvblBvbGljeSwgV3JpdGVTdW1tYXJ5TWFya2VyLCBXcml0ZVRyYWNraW5nTW9kZSB9IGZyb20gJy4vbGliL21lbW9yeS9pbmRleC5qcyc7XG5cbi8qKlxuICogQGNhdGVnb3J5IENvbmZpZ3VyYXRpb25cbiAqXG4gKiBDb21taXQtdmFsdWVzIGVuY29kaW5nIGZvciB0aGUgQ09NTUlUIExPRyAoIzEzYy1CKSDigJQgdGhlIHRoaXJkIGRpYWwgb2ZcbiAqIHRoZSBmYW1pbHksIGFuZCB0aGUgb25seSBMT1NTTEVTUyBvbmUgKGl0IGNoYW5nZXMgdGhlIGxvZydzIGVuY29kaW5nLFxuICogbmV2ZXIgaXRzIGluZm9ybWF0aW9uKS4gYCdmdWxsJ2AgKGRlZmF1bHQg4oCUIGV2ZXJ5IHN1cnZpdmluZyBgc2V0YCBzdG9yZXNcbiAqIHRoZSBmdWxsIGZpbmFsIHZhbHVlLCBieXRlLWlkZW50aWNhbCB0byBoaXN0b3J5KSAvIGAnZGVsdGEnYCAoYXJyYXlcbiAqIG5ldC1jaGFuZ2VzIHRoYXQgYXJlIFwiYmFzZSBwbHVzIGEgdGFpbFwiIGNvbW1pdCBhcyBhbiBgYXBwZW5kYCB2ZXJiXG4gKiBzdG9yaW5nIG9ubHkgdGhlIHRhaWw7IGBkZWxldGVWYWx1ZSgpYCBjb21taXRzIGFzIGEgcmVhbCBgZGVsZXRlYCB2ZXJiO1xuICogb25lIHRyYWNlIGVudHJ5IHBlciBzdXJ2aXZpbmcgcGF0aCkuIFJlcGxheSByZWNvbnN0cnVjdHMgZXZlcnkgc3RlcCdzXG4gKiBmdWxsIHN0YXRlIGV4YWN0bHkuIENvbnN1bWVycyByZWFkaW5nIGBidW5kbGUub3ZlcndyaXRlW2tleV1gIGFzIHRoZSBmdWxsXG4gKiB2YWx1ZSBtdXN0IHVzZSBgY29tbWl0VmFsdWVBdGAgZnJvbSBgZm9vdHRyYWNlYC4gUGFzcyBhc1xuICogYG5ldyBGbG93Q2hhcnRFeGVjdXRvcihjaGFydCwgeyBjb21taXRWYWx1ZXMgfSlgIG9yIGNhbGxcbiAqIGBleGVjdXRvci5zZXRDb21taXRWYWx1ZXMobW9kZSlgIGJlZm9yZSBgcnVuKClgOyB0aGUgYWN0aXZlIG1vZGUgaXMgdGhlXG4gKiBzbmFwc2hvdCBkaXNjcmltaW5hbnQgYGdldFNuYXBzaG90KCkuY29tbWl0VmFsdWVzYC5cbiAqL1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBDb250cmFjdCAmIFZhbGlkYXRpb25cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqIEBjYXRlZ29yeSBDb250cmFjdCAmIFZhbGlkYXRpb24gKi9cbmV4cG9ydCB0eXBlIHsgU2NoZW1hS2luZCwgVmFsaWRhdGlvbklzc3VlLCBWYWxpZGF0aW9uUmVzdWx0IH0gZnJvbSAnLi9saWIvc2NoZW1hL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBDb250cmFjdCAmIFZhbGlkYXRpb24gKi9cbmV4cG9ydCB7IGRldGVjdFNjaGVtYSwgaXNWYWxpZGF0YWJsZSwgaXNab2QgfSBmcm9tICcuL2xpYi9zY2hlbWEvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IENvbnRyYWN0ICYgVmFsaWRhdGlvbiAqL1xuZXhwb3J0IHsgSW5wdXRWYWxpZGF0aW9uRXJyb3IsIHZhbGlkYXRlQWdhaW5zdFNjaGVtYSwgdmFsaWRhdGVPclRocm93IH0gZnJvbSAnLi9saWIvc2NoZW1hL2luZGV4LmpzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gRXJyb3IgVXRpbGl0aWVzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKiBAY2F0ZWdvcnkgRXJyb3IgVXRpbGl0aWVzICovXG5leHBvcnQgdHlwZSB7IFN0cnVjdHVyZWRFcnJvckluZm8gfSBmcm9tICcuL2xpYi9lbmdpbmUvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IEVycm9yIFV0aWxpdGllcyAqL1xuZXhwb3J0IHsgZXh0cmFjdEVycm9ySW5mbywgZm9ybWF0RXJyb3JJbmZvIH0gZnJvbSAnLi9saWIvZW5naW5lL2luZGV4LmpzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gRGV2IFRvb2xzIOKAlCBNb2RlIGZsYWdzIGFuZCBab2Qgc2NvcGUgdXRpbGl0aWVzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogQGNhdGVnb3J5IERldiBUb29sc1xuICpcbiAqIEdsb2JhbCBkZXYtbW9kZSBmbGFnLiBDYWxsIGBlbmFibGVEZXZNb2RlKClgIGF0IGFwcGxpY2F0aW9uIHN0YXJ0dXAgdG9cbiAqIHR1cm4gb24gZGV2ZWxvcGVyLW9ubHkgZGlhZ25vc3RpY3MgYWNyb3NzIHRoZSBsaWJyYXJ5IOKAlCBjaXJjdWxhci1yZWZlcmVuY2VcbiAqIGRldGVjdGlvbiBpbiBzY29wZSB3cml0ZXMsIHdhcm5pbmdzIHdoZW4gYSByZWNvcmRlciBoYXMgbm8gb2JzZXJ2ZXJcbiAqIG1ldGhvZHMsIHN1c3BpY2lvdXMtcHJlZGljYXRlIHdhcm5pbmdzIGluIGRlY2lkZS9zZWxlY3QsIHN0cnVjdHVyYWxcbiAqIGNoZWNrcyBpbiBgZ2V0U3VidHJlZVNuYXBzaG90YCwgYW5kIGFueSBmdXR1cmUgZGV2LW9ubHkgZGlhZ25vc3RpYy5cbiAqXG4gKiBQcm9kdWN0aW9uIGxlYXZlcyBpdCBPRkYgYnkgZGVmYXVsdCAoemVybyBvdmVyaGVhZCkuIFNlZSB0aGUgSlNEb2Mgb25cbiAqIGBlbmFibGVEZXZNb2RlYCBmb3IgdGhlIGZ1bGwgbGlzdCBhbmQgdXNhZ2UgZXhhbXBsZS5cbiAqL1xuZXhwb3J0IHsgZGlzYWJsZURldk1vZGUsIGVuYWJsZURldk1vZGUsIGlzRGV2TW9kZSB9IGZyb20gJy4vbGliL2Rldk1vZGUuanMnO1xuXG4vLyBgZGVmaW5lU2NvcGVGcm9tWm9kYCBhbmQgdGhlIG90aGVyIHpvZC1iYXNlZCBzY29wZSBoZWxwZXJzIG1vdmVkIHRvIHRoZSBvcHQtaW5cbi8vIGBmb290cHJpbnRqcy96b2RgIGVudHJ5IOKAlCBrZWVwaW5nIHpvZCBvdXQgb2YgdGhlIGNvcmUgbG9hZCBwYXRoIChpdCBpcyBhblxuLy8gb3B0aW9uYWwgcGVlcikuIEltcG9ydCB0aGVtIGZyb20gJ2Zvb3RwcmludGpzL3pvZCcuXG4vLyBBIHJ1bidzIHJlY29yZCBhcyBKU09OIHdpdGhvdXQgdGhlIGVuZ2luZSdzIHJlY3Vyc2lvbiBsaW1pdCAoOS4yNi4wKTogdGhlXG4vLyBzYW1lIGJ5dGVzIEpTT04uc3RyaW5naWZ5IGVtaXRzLCBmb3IgYSBkZWVwIGBuZXh0YCBjaGFpbiBpdCBjYW5ub3QgZW5jb2RlLlxuZXhwb3J0IHR5cGUgeyBSZXRyeUxvb3BDYWxsLCBSZXRyeUxvb3BEZWNpc2lvbiwgUmV0cnlMb29wSWRlbnRpdHkgfSBmcm9tICcuL2xpYi9hdHRlbXB0L3JldHJ5TG9vcFR5cGVzLmpzJztcbmV4cG9ydCB0eXBlIHsgUmV0cnlMb29wQ29udGV4dCwgUmV0cnlMb29wT3B0aW9ucywgUmV0cnlMb29wU3RhdGUgfSBmcm9tICcuL2xpYi9idWlsZGVyL3JldHJ5TG9vcC5qcyc7XG5leHBvcnQgdHlwZSB7XG4gIENhcHR1cmVDaGFubmVsU3RhdHVzLFxuICBDYXB0dXJlTGltaXRhdGlvbixcbiAgTmF0aXZlQ2FwdHVyZU5vdGUsXG4gIFJlY29yZGVyQ2FwdHVyZUFja25vd2xlZGdlbWVudCxcbn0gZnJvbSAnLi9saWIvY2FwdHVyZS9uYXRpdmVDb3ZlcmFnZS5qcyc7XG5leHBvcnQgdHlwZSB7XG4gIEVuZ2luZVJlYWRTb3VyY2VzLFxuICBOYXRpdmVDYXB0dXJlT2JzZXJ2YXRpb24sXG4gIE5hdGl2ZVJlYWRDYXB0dXJlTm90ZSxcbiAgU291cmNlTGltaXRhdGlvbixcbn0gZnJvbSAnLi9saWIvY2FwdHVyZS9yZWFkU291cmNlcy5qcyc7XG5leHBvcnQgeyBzdHJpbmdpZnlTbmFwc2hvdCB9IGZyb20gJy4vbGliL3J1bm5lci9zdHJpbmdpZnlTbmFwc2hvdC5qcyc7XG4iXX0=
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.validateAbsentEntries = exports.copyCaptureEvidence = void 0;
|
|
4
|
+
const historyData_js_1 = require("./historyData.js");
|
|
5
|
+
const noteShape_js_1 = require("./noteShape.js");
|
|
6
|
+
// Event-key evidence only: ordinary optional metadata keeps JSON omission semantics.
|
|
7
|
+
const MAX_ABSENT_ENTRIES = 4096;
|
|
8
|
+
const MAX_PATH_SEGMENTS = 256;
|
|
9
|
+
function trackedPath(path) {
|
|
10
|
+
if (path.length < 3 || path[0] !== 'executionTree')
|
|
11
|
+
return false;
|
|
12
|
+
let index = 1;
|
|
13
|
+
while (index < path.length - 2) {
|
|
14
|
+
if (path[index] === 'next')
|
|
15
|
+
index++;
|
|
16
|
+
else if (path[index] === 'children' && /^(0|[1-9][0-9]*)$/.test(path[index + 1] ?? ''))
|
|
17
|
+
index += 2;
|
|
18
|
+
else
|
|
19
|
+
return false;
|
|
20
|
+
}
|
|
21
|
+
return index === path.length - 2 && (path[index] === 'stageReads' || path[index] === 'stageWrites');
|
|
22
|
+
}
|
|
23
|
+
/** Ordinal segment order, independent of locale and dotted business-key spellings. */
|
|
24
|
+
function comparePaths(left, right) {
|
|
25
|
+
for (let i = 0; i < Math.min(left.length, right.length); i++) {
|
|
26
|
+
if (left[i] !== right[i])
|
|
27
|
+
return left[i] < right[i] ? -1 : 1;
|
|
28
|
+
}
|
|
29
|
+
return left.length - right.length;
|
|
30
|
+
}
|
|
31
|
+
/** @internal Copy the served projection; charge sidecar growth before retaining each omitted event. */
|
|
32
|
+
function copyCaptureEvidence(value, maxBytes) {
|
|
33
|
+
const absent = [];
|
|
34
|
+
let bytes = 2;
|
|
35
|
+
const encoder = new TextEncoder();
|
|
36
|
+
const payload = (0, historyData_js_1.copyHistoryData)(value, maxBytes, (path) => {
|
|
37
|
+
if (!trackedPath(path))
|
|
38
|
+
return;
|
|
39
|
+
if (path.length > MAX_PATH_SEGMENTS || absent.length >= MAX_ABSENT_ENTRIES)
|
|
40
|
+
throw new historyData_js_1.HistoryDataError('too-large');
|
|
41
|
+
const encoded = JSON.stringify(path);
|
|
42
|
+
if (encoded.length > maxBytes - bytes)
|
|
43
|
+
throw new historyData_js_1.HistoryDataError('too-large');
|
|
44
|
+
bytes += encoder.encode(encoded).length + (absent.length ? 1 : 0);
|
|
45
|
+
if (bytes > maxBytes)
|
|
46
|
+
throw new historyData_js_1.HistoryDataError('too-large');
|
|
47
|
+
absent.push(Object.freeze(path));
|
|
48
|
+
});
|
|
49
|
+
if (!absent.length)
|
|
50
|
+
return payload;
|
|
51
|
+
absent.sort(comparePaths);
|
|
52
|
+
// This second bounded copy charges the list and the rest of the evidence to one byte limit.
|
|
53
|
+
return (0, historyData_js_1.copyHistoryData)({ ...payload, absent }, maxBytes);
|
|
54
|
+
}
|
|
55
|
+
exports.copyCaptureEvidence = copyCaptureEvidence;
|
|
56
|
+
/**
|
|
57
|
+
* @internal Validate already inert evidence. Never restores undefined into ordinary JSON maps.
|
|
58
|
+
* A marker means an own undefined tracked value was omitted, not that business state lacked the key.
|
|
59
|
+
*/
|
|
60
|
+
function validateAbsentEntries(payload) {
|
|
61
|
+
if (!Object.hasOwn(payload, 'absent'))
|
|
62
|
+
return true;
|
|
63
|
+
const absent = (0, noteShape_js_1.ownData)(payload, 'absent');
|
|
64
|
+
if (!Array.isArray(absent) || !absent.length || absent.length > MAX_ABSENT_ENTRIES)
|
|
65
|
+
return false;
|
|
66
|
+
let previous;
|
|
67
|
+
for (const path of absent) {
|
|
68
|
+
if (!Array.isArray(path) ||
|
|
69
|
+
path.length > MAX_PATH_SEGMENTS ||
|
|
70
|
+
!path.every((segment) => typeof segment === 'string') ||
|
|
71
|
+
!trackedPath(path))
|
|
72
|
+
return false;
|
|
73
|
+
if (previous && comparePaths(previous, path) >= 0)
|
|
74
|
+
return false;
|
|
75
|
+
let node = payload;
|
|
76
|
+
for (const segment of path.slice(0, -1)) {
|
|
77
|
+
node = node && typeof node === 'object' ? Object.getOwnPropertyDescriptor(node, segment)?.value : undefined;
|
|
78
|
+
}
|
|
79
|
+
if (!node || typeof node !== 'object' || Array.isArray(node) || Object.hasOwn(node, path.at(-1)))
|
|
80
|
+
return false;
|
|
81
|
+
previous = path;
|
|
82
|
+
}
|
|
83
|
+
return true;
|
|
84
|
+
}
|
|
85
|
+
exports.validateAbsentEntries = validateAbsentEntries;
|
|
86
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzZW50RW50cmllcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvY2FwdHVyZS9hYnNlbnRFbnRyaWVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHFEQUFxRTtBQUNyRSxpREFBeUM7QUFFekMscUZBQXFGO0FBQ3JGLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDO0FBQ2hDLE1BQU0saUJBQWlCLEdBQUcsR0FBRyxDQUFDO0FBRTlCLFNBQVMsV0FBVyxDQUFDLElBQXVCO0lBQzFDLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLGVBQWU7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUNqRSxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7SUFDZCxPQUFPLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQy9CLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLE1BQU07WUFBRSxLQUFLLEVBQUUsQ0FBQzthQUMvQixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxVQUFVLElBQUksbUJBQW1CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQUUsS0FBSyxJQUFJLENBQUMsQ0FBQzs7WUFDOUYsT0FBTyxLQUFLLENBQUM7SUFDcEIsQ0FBQztJQUNELE9BQU8sS0FBSyxLQUFLLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLFlBQVksSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssYUFBYSxDQUFDLENBQUM7QUFDdEcsQ0FBQztBQUVELHNGQUFzRjtBQUN0RixTQUFTLFlBQVksQ0FBQyxJQUF1QixFQUFFLEtBQXdCO0lBQ3JFLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxF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QWlCO1lBQy9CLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsT0FBTyxPQUFPLEtBQUssUUFBUSxDQUFDO1lBQ3JELENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQztZQUVsQixPQUFPLEtBQUssQ0FBQztRQUNmLElBQUksUUFBUSxJQUFJLFlBQVksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQ2hFLElBQUksSUFBSSxHQUFZLE9BQU8sQ0FBQztRQUM1QixLQUFLLE1BQU0sT0FBTyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUN4QyxJQUFJLEdBQUcsSUFBSSxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLHdCQUF3QixDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUM5RyxDQUFDO1FBQ0QsSUFBSSxDQUFDLElBQUksSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFFLENBQUM7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUNoSCxRQUFRLEdBQUcsSUFBSSxDQUFDO0lBQ2xCLENBQUM7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUM7QUF0QkQsc0RBc0JDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29weUhpc3RvcnlEYXRhLCBIaXN0b3J5RGF0YUVycm9yIH0gZnJvbSAnLi9oaXN0b3J5RGF0YS5qcyc7XG5pbXBvcnQgeyBvd25EYXRhIH0gZnJvbSAnLi9ub3RlU2hhcGUuanMnO1xuXG4vLyBFdmVudC1rZXkgZXZpZGVuY2Ugb25seTogb3JkaW5hcnkgb3B0aW9uYWwgbWV0YWRhdGEga2VlcHMgSlNPTiBvbWlzc2lvbiBzZW1hbnRpY3MuXG5jb25zdCBNQVhfQUJTRU5UX0VOVFJJRVMgPSA0MDk2O1xuY29uc3QgTUFYX1BBVEhfU0VHTUVOVFMgPSAyNTY7XG5cbmZ1bmN0aW9uIHRyYWNrZWRQYXRoKHBhdGg6IHJlYWRvbmx5IHN0cmluZ1tdKTogYm9vbGVhbiB7XG4gIGlmIChwYXRoLmxlbmd0aCA8IDMgfHwgcGF0aFswXSAhPT0gJ2V4ZWN1dGlvblRyZWUnKSByZXR1cm4gZmFsc2U7XG4gIGxldCBpbmRleCA9IDE7XG4gIHdoaWxlIChpbmRleCA8IHBhdGgubGVuZ3RoIC0gMikge1xuICAgIGlmIChwYXRoW2luZGV4XSA9PT0gJ25leHQnKSBpbmRleCsrO1xuICAgIGVsc2UgaWYgKHBhdGhbaW5kZXhdID09PSAnY2hpbGRyZW4nICYmIC9eKDB8WzEtOV1bMC05XSopJC8udGVzdChwYXRoW2luZGV4ICsgMV0gPz8gJycpKSBpbmRleCArPSAyO1xuICAgIGVsc2UgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiBpbmRleCA9PT0gcGF0aC5sZW5ndGggLSAyICYmIChwYXRoW2luZGV4XSA9PT0gJ3N0YWdlUmVhZHMnIHx8IHBhdGhbaW5kZXhdID09PSAnc3RhZ2VXcml0ZXMnKTtcbn1cblxuLyoqIE9yZGluYWwgc2VnbWVudCBvcmRlciwgaW5kZXBlbmRlbnQgb2YgbG9jYWxlIGFuZCBkb3R0ZWQgYnVzaW5lc3Mta2V5IHNwZWxsaW5ncy4gKi9cbmZ1bmN0aW9uIGNvbXBhcmVQYXRocyhsZWZ0OiByZWFkb25seSBzdHJpbmdbXSwgcmlnaHQ6IHJlYWRvbmx5IHN0cmluZ1tdKTogbnVtYmVyIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBNYXRoLm1pbihsZWZ0Lmxlbmd0aCwgcmlnaHQubGVuZ3RoKTsgaSsrKSB7XG4gICAgaWYgKGxlZnRbaV0gIT09IHJpZ2h0W2ldKSByZXR1cm4gbGVmdFtpXSEgPCByaWdodFtpXSEgPyAtMSA6IDE7XG4gIH1cbiAgcmV0dXJuIGxlZnQubGVuZ3RoIC0gcmlnaHQubGVuZ3RoO1xufVxuXG4vKiogQGludGVybmFsIENvcHkgdGhlIHNlcnZlZCBwcm9qZWN0aW9uOyBjaGFyZ2Ugc2lkZWNhciBncm93dGggYmVmb3JlIHJldGFpbmluZyBlYWNoIG9taXR0ZWQgZXZlbnQuICovXG5leHBvcnQgZnVuY3Rpb24gY29weUNhcHR1cmVFdmlkZW5jZSh2YWx1ZTogdW5rbm93biwgbWF4Qnl0ZXM6IG51bWJlcik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgY29uc3QgYWJzZW50OiAocmVhZG9ubHkgc3RyaW5nW10pW10gPSBbXTtcbiAgbGV0IGJ5dGVzID0gMjtcbiAgY29uc3QgZW5jb2RlciA9IG5ldyBUZXh0RW5jb2RlcigpO1xuICBjb25zdCBwYXlsb2FkID0gY29weUhpc3RvcnlEYXRhKHZhbHVlLCBtYXhCeXRlcywgKHBhdGgpID0+IHtcbiAgICBpZiAoIXRyYWNrZWRQYXRoKHBhdGgpKSByZXR1cm47XG4gICAgaWYgKHBhdGgubGVuZ3RoID4gTUFYX1BBVEhfU0VHTUVOVFMgfHwgYWJzZW50Lmxlbmd0aCA+PSBNQVhfQUJTRU5UX0VOVFJJRVMpIHRocm93IG5ldyBIaXN0b3J5RGF0YUVycm9yKCd0b28tbGFyZ2UnKTtcbiAgICBjb25zdCBlbmNvZGVkID0gSlNPTi5zdHJpbmdpZnkocGF0aCk7XG4gICAgaWYgKGVuY29kZWQubGVuZ3RoID4gbWF4Qnl0ZXMgLSBieXRlcykgdGhyb3cgbmV3IEhpc3RvcnlEYXRhRXJyb3IoJ3Rvby1sYXJnZScpO1xuICAgIGJ5dGVzICs9IGVuY29kZXIuZW5jb2RlKGVuY29kZWQpLmxlbmd0aCArIChhYnNlbnQubGVuZ3RoID8gMSA6IDApO1xuICAgIGlmIChieXRlcyA+IG1heEJ5dGVzKSB0aHJvdyBuZXcgSGlzdG9yeURhdGFFcnJvcigndG9vLWxhcmdlJyk7XG4gICAgYWJzZW50LnB1c2goT2JqZWN0LmZyZWV6ZShwYXRoKSk7XG4gIH0pIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBpZiAoIWFic2VudC5sZW5ndGgpIHJldHVybiBwYXlsb2FkO1xuICBhYnNlbnQuc29ydChjb21wYXJlUGF0aHMpO1xuICAvLyBUaGlzIHNlY29uZCBib3VuZGVkIGNvcHkgY2hhcmdlcyB0aGUgbGlzdCBhbmQgdGhlIHJlc3Qgb2YgdGhlIGV2aWRlbmNlIHRvIG9uZSBieXRlIGxpbWl0LlxuICByZXR1cm4gY29weUhpc3RvcnlEYXRhKHsgLi4ucGF5bG9hZCwgYWJzZW50IH0sIG1heEJ5dGVzKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn1cblxuLyoqXG4gKiBAaW50ZXJuYWwgVmFsaWRhdGUgYWxyZWFkeSBpbmVydCBldmlkZW5jZS4gTmV2ZXIgcmVzdG9yZXMgdW5kZWZpbmVkIGludG8gb3JkaW5hcnkgSlNPTiBtYXBzLlxuICogQSBtYXJrZXIgbWVhbnMgYW4gb3duIHVuZGVmaW5lZCB0cmFja2VkIHZhbHVlIHdhcyBvbWl0dGVkLCBub3QgdGhhdCBidXNpbmVzcyBzdGF0ZSBsYWNrZWQgdGhlIGtleS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlQWJzZW50RW50cmllcyhwYXlsb2FkOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IGJvb2xlYW4ge1xuICBpZiAoIU9iamVjdC5oYXNPd24ocGF5bG9hZCwgJ2Fic2VudCcpKSByZXR1cm4gdHJ1ZTtcbiAgY29uc3QgYWJzZW50ID0gb3duRGF0YShwYXlsb2FkLCAnYWJzZW50Jyk7XG4gIGlmICghQXJyYXkuaXNBcnJheShhYnNlbnQpIHx8ICFhYnNlbnQubGVuZ3RoIHx8IGFic2VudC5sZW5ndGggPiBNQVhfQUJTRU5UX0VOVFJJRVMpIHJldHVybiBmYWxzZTtcbiAgbGV0IHByZXZpb3VzOiByZWFkb25seSBzdHJpbmdbXSB8IHVuZGVmaW5lZDtcbiAgZm9yIChjb25zdCBwYXRoIG9mIGFic2VudCkge1xuICAgIGlmIChcbiAgICAgICFBcnJheS5pc0FycmF5KHBhdGgpIHx8XG4gICAgICBwYXRoLmxlbmd0aCA+IE1BWF9QQVRIX1NFR01FTlRTIHx8XG4gICAgICAhcGF0aC5ldmVyeSgoc2VnbWVudCkgPT4gdHlwZW9mIHNlZ21lbnQgPT09ICdzdHJpbmcnKSB8fFxuICAgICAgIXRyYWNrZWRQYXRoKHBhdGgpXG4gICAgKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChwcmV2aW91cyAmJiBjb21wYXJlUGF0aHMocHJldmlvdXMsIHBhdGgpID49IDApIHJldHVybiBmYWxzZTtcbiAgICBsZXQgbm9kZTogdW5rbm93biA9IHBheWxvYWQ7XG4gICAgZm9yIChjb25zdCBzZWdtZW50IG9mIHBhdGguc2xpY2UoMCwgLTEpKSB7XG4gICAgICBub2RlID0gbm9kZSAmJiB0eXBlb2Ygbm9kZSA9PT0gJ29iamVjdCcgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG5vZGUsIHNlZ21lbnQpPy52YWx1ZSA6IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgaWYgKCFub2RlIHx8IHR5cGVvZiBub2RlICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KG5vZGUpIHx8IE9iamVjdC5oYXNPd24obm9kZSwgcGF0aC5hdCgtMSkhKSkgcmV0dXJuIGZhbHNlO1xuICAgIHByZXZpb3VzID0gcGF0aDtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cbiJdfQ==
|