sliftutils 1.7.42 → 1.7.43
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/index.d.ts +16 -0
- package/misc/dist/environment.ts.cache +2 -2
- package/misc/dist/zip.ts.cache +2 -2
- package/package.json +1 -1
- package/render-utils/dist/observer.tsx.cache +2 -2
- package/storage/BulkDatabase2/dist/BulkDatabaseBase.ts.cache +2 -2
- package/storage/BulkDatabase2/dist/BulkDatabaseFormat.ts.cache +2 -2
- package/storage/BulkDatabase2/dist/BulkDatabaseMerge.ts.cache +2 -2
- package/storage/BulkDatabase2/dist/BulkDatabaseReader.ts.cache +2 -2
- package/storage/BulkDatabase2/dist/LoadedIndex.ts.cache +2 -2
- package/storage/BulkDatabase2/dist/WriteOverlay.ts.cache +2 -2
- package/storage/BulkDatabase2/dist/blockCache.ts.cache +2 -2
- package/storage/BulkDatabase2/dist/mergeLock.ts.cache +2 -2
- package/storage/BulkDatabase2/dist/mergeMarkers.ts.cache +2 -2
- package/storage/BulkDatabase2/dist/streamLog.ts.cache +2 -2
- package/storage/BulkDatabase2/dist/syncClient.ts.cache +2 -2
- package/storage/dist/ArchivesDisk.ts.cache +2 -2
- package/storage/dist/FileFolderAPI.tsx.cache +2 -2
- package/storage/dist/IndexedDBFileFolderAPI.ts.cache +2 -2
- package/storage/dist/JSONStorage.ts.cache +2 -2
- package/storage/dist/PendingManager.tsx.cache +2 -2
- package/storage/dist/TransactionStorage.ts.cache +2 -2
- package/storage/dist/fileSystemPointer.ts.cache +2 -2
- package/storage/dist/remoteFileStorage.ts.cache +2 -2
- package/storage/remoteStorage/createArchives.d.ts +7 -0
- package/storage/remoteStorage/createArchives.ts +5 -0
- package/storage/remoteStorage/deployTakeover.ts +1 -1
- package/storage/remoteStorage/dist/ArchivesRemote.ts.cache +2 -2
- package/storage/remoteStorage/dist/ArchivesUrl.ts.cache +2 -2
- package/storage/remoteStorage/dist/blobStore.ts.cache +2 -2
- package/storage/remoteStorage/dist/cliArgs.ts.cache +2 -2
- package/storage/remoteStorage/dist/createArchives.ts.cache +9 -4
- package/storage/remoteStorage/dist/deployTakeover.ts.cache +4 -4
- package/storage/remoteStorage/dist/intermediateSources.ts.cache +2 -2
- package/storage/remoteStorage/dist/remoteConfig.ts.cache +2 -2
- package/storage/remoteStorage/dist/storageClientController.ts.cache +2 -2
- package/storage/remoteStorage/dist/storageController.ts.cache +8 -3
- package/storage/remoteStorage/dist/storageServerState.ts.cache +67 -10
- package/storage/remoteStorage/storageController.d.ts +4 -0
- package/storage/remoteStorage/storageController.ts +6 -1
- package/storage/remoteStorage/storageServerState.d.ts +5 -0
- package/storage/remoteStorage/storageServerState.ts +63 -7
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";
|
|
1
|
+
"use strict"; var console = (function shimConsole() { let baseConsole = globalThis.console; if (typeof window !== "undefined") return baseConsole; let name = __filename.replaceAll("\\", "/").split("/").pop(); let dirName = __dirname.replaceAll("\\", "/").split("/").pop(); let context = { __FILE__: __filename, __DIR__: __dirname, __NAME__: name, __DIRNAME__: dirName }; let newConsole = { ...baseConsole }; for (let shim of ["log", "info", "warn", "error"]) { newConsole[shim] = (...args) => { args.push(context); baseConsole[shim](...args); }; } newConsole.__context = context; return newConsole; })(); "use strict";
|
|
2
2
|
// File format (all integers little-endian):
|
|
3
3
|
// u32 headerLength, then headerLength bytes of JSON: { rowCount, columns: [{ name, offset, length }] }, where offset is relative to the end of the header. Each column blob is: u32 offsets[rowCount + 1] (byte offsets into the column's data section), u8 types[rowCount], then the data section (each value's bytes, concatenated). Values are encoded with an explicit type tag per value (see the TYPE_ constants). Reads only fetch the byte ranges they need.
|
|
4
4
|
Object.defineProperty(exports, "__esModule", { value: true , configurable: true});
|
|
@@ -479,4 +479,4 @@ async function loadBulkDatabase(config) {
|
|
|
479
479
|
}
|
|
480
480
|
exports.loadBulkDatabase = loadBulkDatabase;
|
|
481
481
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQnVsa0RhdGFiYXNlRm9ybWF0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiQnVsa0RhdGFiYXNlRm9ybWF0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSw0Q0FBNEM7QUFDNUMsdWNBQXVjOzs7QUFFMWIsUUFBQSxVQUFVLEdBQUcsS0FBSyxDQUFDO0FBRWhDLDRLQUE0SztBQUM1SyxNQUFNLGNBQWMsR0FBRyxDQUFDLENBQUM7QUFDekIsTUFBTSxXQUFXLEdBQUcsQ0FBQyxDQUFDO0FBQ3RCLE1BQU0sV0FBVyxHQUFHLENBQUMsQ0FBQztBQUN0QixNQUFNLFlBQVksR0FBRyxDQUFDLENBQUM7QUFDdkIsTUFBTSxXQUFXLEdBQUcsQ0FBQyxDQUFDO0FBQ3RCLE1BQU0sZUFBZSxHQUFHLENBQUMsQ0FBQztBQUMxQixNQUFNLGdCQUFnQixHQUFHLENBQUMsQ0FBQztBQUMzQixNQUFNLHdCQUF3QixHQUFHLENBQUMsQ0FBQztBQUNuQyxNQUFNLGdCQUFnQixHQUFHLENBQUMsQ0FBQztBQUMzQixNQUFNLGlCQUFpQixHQUFHLENBQUMsQ0FBQztBQUM1QixNQUFNLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztBQUM1QixNQUFNLGlCQUFpQixHQUFHLEVBQUUsQ0FBQztBQUM3QixNQUFNLGtCQUFrQixHQUFHLEVBQUUsQ0FBQztBQUM5QixNQUFNLGtCQUFrQixHQUFHLEVBQUUsQ0FBQztBQUM5QixzUUFBc1E7QUFDdFEsTUFBTSxXQUFXLEdBQUcsRUFBRSxDQUFDO0FBRXZCLE1BQU0saUJBQWlCLEdBQXFIO0lBQ3hJLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFO0lBQzFDLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7SUFDNUMsRUFBRSxJQUFJLEVBQUUsd0JBQXdCLEVBQUUsSUFBSSxFQUFFLGlCQUFpQixFQUFFO0lBQzNELEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFF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O1lBQ3BDLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ3ZDLENBQUM7S0FDSixDQUFDO0FBQ04sQ0FBQztBQTNIRCw0Q0EySEMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBGaWxlIGZvcm1hdCAoYWxsIGludGVnZXJzIGxpdHRsZS1lbmRpYW4pOlxuLy8gICB1MzIgaGVhZGVyTGVuZ3RoLCB0aGVuIGhlYWRlckxlbmd0aCBieXRlcyBvZiBKU09OOiB7IHJvd0NvdW50LCBjb2x1bW5zOiBbeyBuYW1lLCBvZmZzZXQsIGxlbmd0aCB9XSB9LCB3aGVyZSBvZmZzZXQgaXMgcmVsYXRpdmUgdG8gdGhlIGVuZCBvZiB0aGUgaGVhZGVyLiBFYWNoIGNvbHVtbiBibG9iIGlzOiB1MzIgb2Zmc2V0c1tyb3dDb3VudCArIDFdIChieXRlIG9mZnNldHMgaW50byB0aGUgY29sdW1uJ3MgZGF0YSBzZWN0aW9uKSwgdTggdHlwZXNbcm93Q291bnRdLCB0aGVuIHRoZSBkYXRhIHNlY3Rpb24gKGVhY2ggdmFsdWUncyBieXRlcywgY29uY2F0ZW5hdGVkKS4gVmFsdWVzIGFyZSBlbmNvZGVkIHdpdGggYW4gZXhwbGljaXQgdHlwZSB0YWcgcGVyIHZhbHVlIChzZWUgdGhlIFRZUEVfIGNvbnN0YW50cykuIFJlYWRzIG9ubHkgZmV0Y2ggdGhlIGJ5dGUgcmFuZ2VzIHRoZXkgbmVlZC5cblxuZXhwb3J0IGNvbnN0IEtFWV9DT0xVTU4gPSBcImtleVwiO1xuXG4vLyBFdmVyeSB0YWcgaXMgYW4gZXhwbGljaXQgY29uc3RhbnQgYmFrZWQgaW50byBmaWxlcyBvbiBkaXNrLiBORVZFUiByZW51bWJlciBhbiBleGlzdGluZyB0YWcg4oCUIG9ubHkgYWRkIG5ldyBvbmVzIOKAlCBvciBldmVyeSBwcmV2aW91c2x5IHdyaXR0ZW4gZmlsZSBzaWxlbnRseSBkZWNvZGVzIHdyb25nLlxuY29uc3QgVFlQRV9VTkRFRklORUQgPSAwO1xuY29uc3QgVFlQRV9TVFJJTkcgPSAxO1xuY29uc3QgVFlQRV9OVU1CRVIgPSAyO1xuY29uc3QgVFlQRV9CT09MRUFOID0gMztcbmNvbnN0IFRZUEVfT0JKRUNUID0gNDtcbmNvbnN0IFRZUEVfSU5UOF9BUlJBWSA9IDU7XG5jb25zdCBUWVBFX1VJTlQ4X0FSUkFZID0gNjtcbmNvbnN0IFRZUEVfVUlOVDhfQ0xBTVBFRF9BUlJBWSA9IDc7XG5jb25zdCBUWVBFX0lOVDE2X0FSUkFZID0gODtcbmNvbnN0IFRZUEVfVUlOVDE2X0FSUkFZID0gOTtcbmNvbnN0IFRZUEVfSU5UMzJfQVJSQVkgPSAxMDtcbmNvbnN0IFRZUEVfVUlOVDMyX0FSUkFZID0gMTE7XG5jb25zdCBUWVBFX0ZMT0FUMzJfQVJSQVkgPSAxMjtcbmNvbnN0IFRZUEVfRkxPQVQ2NF9BUlJBWSA9IDEzO1xuLy8gQSBjZWxsIHdob3NlIHJvdyBuZXZlciBzZXQgdGhpcyBjb2x1bW4gYXQgYWxsIOKAlCBhcyBvcHBvc2VkIHRvIFRZUEVfVU5ERUZJTkVELCBhbiBleHBsaWNpdGx5IHN0b3JlZCB1bmRlZmluZWQuIE9uIHJlYWQsIEFCU0VOVCBmYWxscyB0aHJvdWdoIHRvIG9sZGVyIHJlYWRlcnMgZm9yIHRoYXQgY29sdW1uOyBhIHN0b3JlZCB1bmRlZmluZWQgc3RvcHMgdGhlIGZhbGwtdGhyb3VnaCAoaXQncyBhIHJlYWwgdmFsdWUgdGhhdCBjbGVhcnMgdGhlIGNvbHVtbikuXG5jb25zdCBUWVBFX0FCU0VOVCA9IDE0O1xuXG5jb25zdCBUWVBFRF9BUlJBWV9UWVBFUzogeyB0eXBlOiBudW1iZXI7IGN0b3I6IHsgbmV3KGJ1ZmZlcjogQXJyYXlCdWZmZXIpOiBBcnJheUJ1ZmZlclZpZXc7IEJZVEVTX1BFUl9FTEVNRU5UOiBudW1iZXI7IG5hbWU6IHN0cmluZyB9IH1bXSA9IFtcbiAgICB7IHR5cGU6IFRZUEVfSU5UOF9BUlJBWSwgY3RvcjogSW50OEFycmF5IH0sXG4gICAgeyB0eXBlOiBUWVBFX1VJTlQ4X0FSUkFZLCBjdG9yOiBVaW50OEFycmF5IH0sXG4gICAgeyB0eXBlOiBUWVBFX1VJTlQ4X0NMQU1QRURfQVJSQVksIGN0b3I6IFVpbnQ4Q2xhbXBlZEFycmF5IH0sXG4gICAgeyB0eXBlOiBUWVBFX0lOVDE2X0FSUkFZLCBjdG9yOiBJbnQxNkFycmF5IH0sXG4gICAgeyB0eXBlOiBUWVBFX1VJTlQxNl9BUlJBWSwgY3RvcjogVWludDE2QXJyYXkgfSxcbiAgICB7IHR5cGU6IFRZUEVfSU5UMzJfQVJSQVksIGN0b3I6IEludDMyQXJyYXkgfSxcbiAgICB7IHR5cGU6IFRZUEVfVUlOVDMyX0FSUkFZLCBjdG9yOiBVaW50MzJBcnJheSB9LFxuICAgIHsgdHlwZTogVFlQRV9GTE9BVDMyX0FSUkFZLCBjdG9yOiBGbG9hdDMyQXJyYXkgfSxcbiAgICB7IHR5cGU6IFRZUEVfRkxPQVQ2NF9BUlJBWSwgY3RvcjogRmxvYXQ2NEFycmF5IH0sXG5dO1xuXG5leHBvcnQgY29uc3QgRU1QVFlfQlVGRkVSID0gQnVmZmVyLmFsbG9jKDApIGFzIEJ1ZmZlcjtcblxuLy8gU2VudGluZWwgYSByZWFkZXIgcmV0dXJucyBmb3IgYSBjZWxsIHdob3NlIHJvdyBuZXZlciBzZXQgdGhpcyBjb2x1bW4sIHNvIHRoZSBqb2luIGNhbiBmYWxsIHRocm91Z2ggdG8gYW4gb2xkZXIgcmVhZGVyIGZvciB0aGF0IGNvbHVtbi4gRGlzdGluY3QgZnJvbSBhIHN0b3JlZCB1bmRlZmluZWQsIHdoaWNoIGlzIGEgcmVhbCBjbGVhcmluZyB2YWx1ZS5cbmV4cG9ydCBjb25zdCBBQlNFTlQgPSBTeW1ib2woXCJhYnNlbnRcIik7XG5cbi8vIE9uZSB2YWx1ZSBleGFjdGx5IGFzIGl0IHNpdHMgb24gZGlzazogaXRzIHR5cGUgdGFnICsgcmF3IGJ5dGVzLiBBIGNlbGwncyBlbmNvZGluZyBpcyBwb3NpdGlvbi0gaW5kZXBlbmRlbnQgKG5vdGhpbmcgYWJvdXQgaXQgZGVwZW5kcyBvbiB3aGljaCByb3cvZmlsZSBpdCBsaXZlcyBpbiksIHNvIGEgbWVyZ2UgY29waWVzIHRoZSB3aW5uaW5nIFJhd0NlbGwgc3RyYWlnaHQgZnJvbSBhbiBpbnB1dCBjb2x1bW4gaW50byB0aGUgb3V0cHV0IOKAlCBuZXZlciBkZWNvZGluZyBpdCB0byBhIEpTIHZhbHVlIGFuZCByZS1lbmNvZGluZy4gVGhhdCdzIGZhciBsZXNzIG1lbW9yeSAobm8gb2JqZWN0IG1hdGVyaWFsaXphdGlvbikgYW5kIG11Y2ggZmFzdGVyIChhIGJ5dGUgY29weSwgbm90IGEgSlBFRy90eXBlZC1hcnJheSBkZWNvZGUgKyByZS1lbmNvZGUpLlxuZXhwb3J0IHR5cGUgUmF3Q2VsbCA9IHsgdHlwZTogbnVtYmVyOyBieXRlczogQnVmZmVyIH07XG5cbi8vIFRoZSB0eXBlIHRhZyBhIGNlbGwgY2FycmllcyB3aGVuIGl0cyByb3cgbmV2ZXIgc2V0IHRoaXMgY29sdW1uIOKAlCByZWFkIGl0IGZyb20gdGhlIGNvbHVtbidzIGB0eXBlc2AgYXJyYXkgdG8gZGV0ZWN0IEFCU0VOVCB3aXRob3V0IGRlY29kaW5nLiBSZS1leHBvcnRlZCBzbyB0aGUgbWVyZ2UgcGxhbm5lciAod2hpY2ggd29ya3MgYXQgdGhlIGNvbHVtbi1pbmRleCBsZXZlbCwgbm8gdmFsdWUgbWF0ZXJpYWxpemF0aW9uKSBjYW4gY2hlY2sgaXQuXG5leHBvcnQgY29uc3QgVFlQRV9BQlNFTlRfVEFHID0gVFlQRV9BQlNFTlQ7XG5cbi8vIEEgY29sdW1uJ3MgaW5kZXggYWxvbmUgKG9mZnNldHMgKyB0eXBlcyDigJQgc21hbGwsIH41IGJ5dGVzL3JvdykgcGx1cyBhIHByaW1pdGl2ZSB0byByZWFkIGEgQ09OVElHVU9VUyByb3cgcmFuZ2UncyByYXcgdmFsdWUgYnl0ZXMuIFVzZWQgYnkgdGhlIHBsYW5uZWQgbWVyZ2U6IGl0IGxvYWRzIHRoZSBpbmRleCBhY3Jvc3MgZXZlcnkgKHNvdXJjZSwgY29sdW1uKSBvbmNlIChjaGVhcCksIHVzZXMgdHlwZXMgdG8gZGV0ZWN0IEFCU0VOVCBhbmQgb2Zmc2V0cyB0byBzaXplIGVhY2ggY2VsbCwgcGxhbnMgdGhlIGJ5dGUgbGF5b3V0IG9mIGV2ZXJ5IG91dHB1dCBmaWxlIGZyb20gdGhvc2Ug4oCUIHRoZW4gaW4gdGhlIGV4ZWN1dGUgcGhhc2UgcmVhZHMgb25seSB0aGUgcnVucyBvZiBieXRlcyBpdCBhY3R1YWxseSBuZWVkcywgY29weWluZyB0aGVtIHN0cmFpZ2h0IGludG8gcHJlLWxhaWQtb3V0IG91dHB1dCBidWZmZXJzLiBObyBjZWxsIHZhbHVlIGlzIGV2ZXIgbWF0ZXJpYWxpemVkIGFzIGEgSlMgb2JqZWN0LlxuZXhwb3J0IHR5cGUgQ29sdW1uSW5kZXggPSB7XG4gICAgLy8gb2Zmc2V0c1tpXS4ub2Zmc2V0c1tpKzFdIGlzIHJvdyBpJ3MgdmFsdWUgYnl0ZSByYW5nZSB3aXRoaW4gdGhlIGNvbHVtbidzIGRhdGEgc2VjdGlvbi5cbiAgICBvZmZzZXRzOiBVaW50MzJBcnJheTtcbiAgICAvLyBQZXItcm93IHR5cGUgdGFnOyBUWVBFX0FCU0VOVF9UQUcgbWFya3MgXCJ0aGlzIHJvdyBuZXZlciBzZXQgdGhpcyBjb2x1bW5cIiAoZmFsbC10aHJvdWdoKS5cbiAgICB0eXBlczogVWludDhBcnJheTtcbiAgICAvLyBSZWFkIHRoZSBjb250aWd1b3VzIGJ5dGVzIG9mIHZhbHVlKHMpIGZvciByb3dzIFtzdGFydFJvdywgZW5kUm93KS4gTGVuZ3RoIGlzIGV4YWN0bHkgb2Zmc2V0c1tlbmRSb3ddIC0gb2Zmc2V0c1tzdGFydFJvd10g4oCUIHRoZSBjZWxscyBpbiB0aGF0IHJhbmdlIGNvbmNhdGVuYXRlZC4gVGhlIGNhbGxlciBjb21wb3NlcyBsYXJnZXIgcmVhZHMgZnJvbSBjb25zZWN1dGl2ZSByb3dzIChvbmUgc291cmNlLXNpZGUgZ2V0UmFuZ2UgcGVyIHJ1bikuXG4gICAgcmVhZFZhbHVlQnl0ZXM6IChzdGFydFJvdzogbnVtYmVyLCBlbmRSb3c6IG51bWJlcikgPT4gUHJvbWlzZTxCdWZmZXI+O1xufTtcblxuLy8gSGlkZGVuIHBlci1yb3cgY29sdW1uIGhvbGRpbmcgZWFjaCByb3cncyB3cml0ZS10aW1lIChzbyByZWFkcyBjYW4gcmVzb2x2ZSBhIGtleSB0byBpdHMgbGF0ZXN0IHZhbHVlIGJ5IGFjdHVhbCB0aW1lKS4gTlVMLXByZWZpeGVkIHNvIGl0IGNhbid0IGNvbGxpZGUgd2l0aCBhIHVzZXIgY29sdW1uOyBleGNsdWRlZCBmcm9tIGBjb2x1bW5zYC5cbmNvbnN0IFRJTUVfQ09MVU1OID0gU3RyaW5nLmZyb21DaGFyQ29kZSgwKSArIFwidFwiO1xuXG50eXBlIEZpbGVIZWFkZXIgPSB7XG4gICAgcm93Q291bnQ6IG51bWJlcjtcbiAgICBjb2x1bW5zOiB7IG5hbWU6IHN0cmluZzsgb2Zmc2V0OiBudW1iZXI7IGxlbmd0aDogbnVtYmVyIH1bXTtcbiAgICAvLyBPbGRlc3QvbmV3ZXN0IHdyaXRlLXRpbWUgb2YgdGhlIGRhdGEgaW4gdGhpcyBmaWxlIChmcm9tIHRoZSBzdHJlYW0gZW50cmllcyBpdCB3YXMgZm9sZGVkIGZyb20sIGNhcnJpZWQgdGhyb3VnaCBtZXJnZXMpLiBMZXRzIHRoZSBtZXJnZSBwbGFubmVyIHBpY2sgZmlsZXMgb3ZlcmxhcHBpbmcgYSB0aW1lIHJhbmdlLiBBYnNlbnQgKDApIGluIGZpbGVzIHdyaXR0ZW4gYmVmb3JlIHRoaXMgZXhpc3RlZC5cbiAgICBtaW5UaW1lPzogbnVtYmVyO1xuICAgIG1heFRpbWU/OiBudW1iZXI7XG4gICAgLy8gTGV4aWNvZ3JhcGhpY2FsbHkgc21hbGxlc3QvbGFyZ2VzdCBrZXkgaW4gdGhpcyBmaWxlIChyb3dzIGFyZSBzdG9yZWQga2V5LXNvcnRlZCkuIExldHMgdGhlIG1lcmdlIHBsYW5uZXIgZ3JvdXAvZGVkdXAgYnkga2V5IHJhbmdlIGFuZCBsZXRzIGEgc2luZ2xlLWtleSByZWFkIHNraXAgZmlsZXMgd2hvc2UgcmFuZ2UgZXhjbHVkZXMgdGhlIGtleS4gQWJzZW50ICh1bmRlZmluZWQpIGluIGZpbGVzIHdyaXR0ZW4gYmVmb3JlIHRoaXMgZXhpc3RlZCDigJQgdHJlYXRlZCBhcyBcInNwYW5zIGFsbCBrZXlzXCIuXG4gICAgbWluS2V5Pzogc3RyaW5nO1xuICAgIG1heEtleT86IHN0cmluZztcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBlbmNvZGVWYWx1ZSh2YWx1ZTogdW5rbm93bik6IHsgdHlwZTogbnVtYmVyOyBieXRlczogQnVmZmVyIH0ge1xuICAgIGlmICh2YWx1ZSA9PT0gQUJTRU5UKSB7XG4gICAgICAgIHJldHVybiB7IHR5cGU6IFRZUEVfQUJTRU5ULCBieXRlczogRU1QVFlfQlVGRkVSIH07XG4gICAgfVxuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiB7IHR5cGU6IFRZUEVfVU5ERUZJTkVELCBieXRlczogRU1QVFlfQlVGRkVSIH07XG4gICAgfVxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgcmV0dXJuIHsgdHlwZTogVFlQRV9TVFJJTkcsIGJ5dGVzOiBCdWZmZXIuZnJvbSh2YWx1ZSwgXCJ1dGY4XCIpIH07XG4gICAgfVxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgY29uc3QgYnl0ZXMgPSBCdWZmZXIuYWxsb2MoOCk7XG4gICAgICAgIGJ5dGVzLndyaXRlRG91YmxlTEUodmFsdWUsIDApO1xuICAgICAgICByZXR1cm4geyB0eXBlOiBUWVBFX05VTUJFUiwgYnl0ZXMgfTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgICAgcmV0dXJuIHsgdHlwZTogVFlQRV9CT09MRUFOLCBieXRlczogQnVmZmVyLmZyb20oW3ZhbHVlICYmIDEgfHwgMF0pIH07XG4gICAgfVxuICAgIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcodmFsdWUpKSB7XG4gICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGFWaWV3KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYERhdGFWaWV3IHZhbHVlcyBhcmUgbm90IHN1cHBvcnRlZCwgc3RvcmUgYSB0eXBlZCBhcnJheSBpbnN0ZWFkYCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZW50cnkgPSBUWVBFRF9BUlJBWV9UWVBFUy5maW5kKHQgPT4gdmFsdWUgaW5zdGFuY2VvZiB0LmN0b3IpO1xuICAgICAgICBpZiAoIWVudHJ5KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIHR5cGVkIGFycmF5IHR5cGUgJHt2YWx1ZS5jb25zdHJ1Y3Rvci5uYW1lfWApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBlbnRyeS50eXBlLFxuICAgICAgICAgICAgYnl0ZXM6IEJ1ZmZlci5mcm9tKHZhbHVlLmJ1ZmZlciwgdmFsdWUuYnl0ZU9mZnNldCwgdmFsdWUuYnl0ZUxlbmd0aCksXG4gICAgICAgIH07XG4gICAgfVxuICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCB2YWx1ZSB0eXBlICR7dHlwZW9mIHZhbHVlfWApO1xuICAgIH1cbiAgICByZXR1cm4geyB0eXBlOiBUWVBFX09CSkVDVCwgYnl0ZXM6IEJ1ZmZlci5mcm9tKEpTT04uc3RyaW5naWZ5KHZhbHVlKSwgXCJ1dGY4XCIpIH07XG59XG5cbmZ1bmN0aW9uIGRlY29kZVZhbHVlKHR5cGU6IG51bWJlciwgYnl0ZXM6IEJ1ZmZlcik6IHVua25vd24ge1xuICAgIGlmICh0eXBlID09PSBUWVBFX1VOREVGSU5FRCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBpZiAodHlwZSA9PT0gVFlQRV9TVFJJTkcpIHJldHVybiBieXRlcy50b1N0cmluZyhcInV0ZjhcIik7XG4gICAgaWYgKHR5cGUgPT09IFRZUEVfTlVNQkVSKSB7XG4gICAgICAgIGlmIChieXRlcy5sZW5ndGggIT09IDgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgOCBieXRlcyBmb3IgYSBudW1iZXIsIHdhcyAke2J5dGVzLmxlbmd0aH1gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYnl0ZXMucmVhZERvdWJsZUxFKDApO1xuICAgIH1cbiAgICBpZiAodHlwZSA9PT0gVFlQRV9CT09MRUFOKSB7XG4gICAgICAgIGlmIChieXRlcy5sZW5ndGggIT09IDEpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgMSBieXRlIGZvciBhIGJvb2xlYW4sIHdhcyAke2J5dGVzLmxlbmd0aH1gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYnl0ZXNbMF0gPT09IDE7XG4gICAgfVxuICAgIGlmICh0eXBlID09PSBUWVBFX09CSkVDVCkgcmV0dXJuIEpTT04ucGFyc2UoYnl0ZXMudG9TdHJpbmcoXCJ1dGY4XCIpKTtcbiAgICBpZiAodHlwZSA9PT0gVFlQRV9BQlNFTlQpIHJldHVybiBBQlNFTlQ7XG4gICAgY29uc3QgZW50cnkgPSBUWVBFRF9BUlJBWV9UWVBFUy5maW5kKHQgPT4gdC50eXBlID09PSB0eXBlKTtcbiAgICBpZiAoIWVudHJ5KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgYSB2YWxpZCB0eXBlIHRhZywgd2FzICR7dHlwZX1gKTtcbiAgICB9XG4gICAgY29uc3QgY3RvciA9IGVudHJ5LmN0b3I7XG4gICAgaWYgKHR5cGUgPT09IFRZUEVfVUlOVDhfQVJSQVkpIHJldHVybiBCdWZmZXIuZnJvbShieXRlcyk7XG4gICAgaWYgKGJ5dGVzLmxlbmd0aCAlIGN0b3IuQllURVNfUEVSX0VMRU1FTlQgIT09IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBieXRlIGxlbmd0aCBkaXZpc2libGUgYnkgJHtjdG9yLkJZVEVTX1BFUl9FTEVNRU5UfSBmb3IgJHtjdG9yLm5hbWV9LCB3YXMgJHtieXRlcy5sZW5ndGh9YCk7XG4gICAgfVxuICAgIC8vIENvcHkgdG8gYSBmcmVzaCBBcnJheUJ1ZmZlciBzbyB0aGUgdHlwZWQgYXJyYXkgdmlldyBpcyBhbGlnbmVkIHJlZ2FyZGxlc3Mgb2Ygd2hlcmUgdGhlIGJ5dGVzIGxhbmRlZCBpbiB0aGUgc291cmNlIGJ1ZmZlci5cbiAgICBjb25zdCBhbGlnbmVkID0gbmV3IEFycmF5QnVmZmVyKGJ5dGVzLmxlbmd0aCk7XG4gICAgbmV3IFVpbnQ4QXJyYXkoYWxpZ25lZCkuc2V0KGJ5dGVzKTtcbiAgICByZXR1cm4gbmV3IGN0b3IoYWxpZ25lZCk7XG59XG5cbmZ1bmN0aW9uIGVuY29kZUJ1bGtEYXRhKGRhdGE6IHVua25vd25bXSk6IEJ1ZmZlciB7XG4gICAgY29uc3QgbiA9IGRhdGEubGVuZ3RoO1xuICAgIGNvbnN0IG9mZnNldHMgPSBCdWZmZXIuYWxsb2MoNCAqIChuICsgMSkpO1xuICAgIGNvbnN0IHR5cGVzID0gQnVmZmVyLmFsbG9jKG4pO1xuICAgIGNvbnN0IHBhcnRzOiBCdWZmZXJbXSA9IFtdO1xuICAgIGxldCBwb3MgPSAwO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHsgdHlwZSwgYnl0ZXMgfSA9IGVuY29kZVZhbHVlKGRhdGFbaV0pO1xuICAgICAgICBvZmZzZXRzLndyaXRlVUludDMyTEUocG9zLCA0ICogaSk7XG4gICAgICAgIHR5cGVzW2ldID0gdHlwZTtcbiAgICAgICAgcGFydHMucHVzaChieXRlcyk7XG4gICAgICAgIHBvcyArPSBieXRlcy5sZW5ndGg7XG4gICAgfVxuICAgIG9mZnNldHMud3JpdGVVSW50MzJMRShwb3MsIDQgKiBuKTtcbiAgICByZXR1cm4gQnVmZmVyLmNvbmNhdChbb2Zmc2V0cywgdHlwZXMsIC4uLnBhcnRzXSk7XG59XG5cbi8vIExpa2UgZW5jb2RlQnVsa0RhdGEgYnV0IHRoZSB2YWx1ZXMgYXJlIGFscmVhZHkgZW5jb2RlZCAoYSBtZXJnZSBzdXBwbGllcyB0aGUgd2lubmluZyBjZWxscycgcmF3IGJ5dGVzIHN0cmFpZ2h0IGZyb20gdGhlIGlucHV0IGZpbGVzKS4gTGF5cyBvdXQgdGhlIHNhbWUgb2Zmc2V0cyAvIHR5cGVzIC8gZGF0YSBzZWN0aW9uIHdpdGhvdXQgdG91Y2hpbmcgdGhlIHZhbHVlcyB0aGVtc2VsdmVzLlxuZnVuY3Rpb24gZW5jb2RlQnVsa0RhdGFSYXcoY2VsbHM6IFJhd0NlbGxbXSk6IEJ1ZmZlciB7XG4gICAgY29uc3QgbiA9IGNlbGxzLmxlbmd0aDtcbiAgICBjb25zdCBvZmZzZXRzID0gQnVmZmVyLmFsbG9jKDQgKiAobiArIDEpKTtcbiAgICBjb25zdCB0eXBlcyA9IEJ1ZmZlci5hbGxvYyhuKTtcbiAgICBjb25zdCBwYXJ0czogQnVmZmVyW10gPSBbXTtcbiAgICBsZXQgcG9zID0gMDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG47IGkrKykge1xuICAgICAgICBjb25zdCB7IHR5cGUsIGJ5dGVzIH0gPSBjZWxsc1tpXTtcbiAgICAgICAgb2Zmc2V0cy53cml0ZVVJbnQzMkxFKHBvcywgNCAqIGkpO1xuICAgICAgICB0eXBlc1tpXSA9IHR5cGU7XG4gICAgICAgIHBhcnRzLnB1c2goYnl0ZXMpO1xuICAgICAgICBwb3MgKz0gYnl0ZXMubGVuZ3RoO1xuICAgIH1cbiAgICBvZmZzZXRzLndyaXRlVUludDMyTEUocG9zLCA0ICogbik7XG4gICAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoW29mZnNldHMsIHR5cGVzLCAuLi5wYXJ0c10pO1xufVxuXG5mdW5jdGlvbiBkZWNvZGVCdWxrRGF0YShibG9iOiBCdWZmZXIsIHJvd0NvdW50OiBudW1iZXIpOiB1bmtub3duW10ge1xuICAgIGNvbnN0IGluZGV4U2l6ZSA9IDQgKiAocm93Q291bnQgKyAxKSArIHJvd0NvdW50O1xuICAgIGNvbnN0IHZhbHVlczogdW5rbm93bltdID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3dDb3VudDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gYmxvYi5yZWFkVUludDMyTEUoNCAqIGkpO1xuICAgICAgICBjb25zdCBlbmQgPSBibG9iLnJlYWRVSW50MzJMRSg0ICogKGkgKyAxKSk7XG4gICAgICAgIGNvbnN0IHR5cGUgPSBibG9iWzQgKiAocm93Q291bnQgKyAxKSArIGldO1xuICAgICAgICB2YWx1ZXMucHVzaChkZWNvZGVWYWx1ZSh0eXBlLCBibG9iLnN1YmFycmF5KGluZGV4U2l6ZSArIHN0YXJ0LCBpbmRleFNpemUgKyBlbmQpKSk7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZXM7XG59XG5cbi8vIFRhcmdldCBsb2dpY2FsICh1bmNvbXByZXNzZWQpIHNpemUgb2Ygb25lIGJ1bGsgZmlsZS4gQSByb3dzIGFycmF5IGJpZ2dlciB0aGFuIHRoaXMgaXMgc3BsaXQgYWNyb3NzIG11bHRpcGxlIGtleS1jb250aWd1b3VzIGZpbGVzLCBzbyBmaWxlcyBzdGF5IGFyb3VuZCB0aGlzIHNpemUgKHRoZSBtZXJnZSBwb2xpY3kncyB0YXJnZXQpIGFuZCBubyBzaW5nbGUgY29sdW1uIGJsb2IgLyBCdWZmZXIuY29uY2F0IGV2ZXIgYXBwcm9hY2hlcyB0aGUgfjJHQiBCdWZmZXIgbGVuZ3RoIGxpbWl0LiBUaGUgZXN0aW1hdGUgaXMgcm91Z2ggb24gcHVycG9zZSDigJQgaXQgb25seSBuZWVkcyB0byBrZWVwIGVhY2ggY2h1bmsgbmVhciB0aGUgdGFyZ2V0LCBub3QgYmUgZXhhY3QuIEEgc2luZ2xlIHJvdyBiaWdnZXIgdGhhbiB0aGUgdGFyZ2V0IHN0aWxsIGJlY29tZXMgaXRzIG93biAob3ZlcnNpemVkKSBmaWxlLCBzaW5jZSB3ZSBuZXZlciBzcGxpdCB3aXRoaW4gYSBrZXkuXG5leHBvcnQgY29uc3QgVEFSR0VUX0ZJTEVfQllURVMgPSAyNTYgKiAxMDI0ICogMTAyNDtcblxuLy8gUGVyLXZhbHVlIG9uLWRpc2sgb3ZlcmhlYWQ6IGEgNC1ieXRlIG9mZnNldCBlbnRyeSBwbHVzIGEgMS1ieXRlIHR5cGUgdGFnLlxuY29uc3QgUEVSX1ZBTFVFX09WRVJIRUFEID0gNTtcblxuZnVuY3Rpb24gZXN0aW1hdGVWYWx1ZUJ5dGVzKHZhbHVlOiB1bmtub3duKTogbnVtYmVyIHtcbiAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gbnVsbCkgcmV0dXJuIDA7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIHZhbHVlLmxlbmd0aCAqIDI7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIikgcmV0dXJuIDg7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJib29sZWFuXCIpIHJldHVybiAxO1xuICAgIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcodmFsdWUpKSByZXR1cm4gdmFsdWUuYnl0ZUxlbmd0aDtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiKSByZXR1cm4gSlNPTi5zdHJpbmdpZnkodmFsdWUpLmxlbmd0aDtcbiAgICByZXR1cm4gMDtcbn1cblxuZnVuY3Rpb24gZXN0aW1hdGVSb3dCeXRlcyhyb3c6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogbnVtYmVyIHtcbiAgICBsZXQgdG90YWwgPSAwO1xuICAgIGZvciAoY29uc3QgdmFsdWUgb2YgT2JqZWN0LnZhbHVlcyhyb3cpKSB7XG4gICAgICAgIHRvdGFsICs9IGVzdGltYXRlVmFsdWVCeXRlcyh2YWx1ZSkgKyBQRVJfVkFMVUVfT1ZFUkhFQUQ7XG4gICAgfVxuICAgIHJldHVybiB0b3RhbDtcbn1cblxuLy8gQ29uY2F0ZW5hdGVzIGFscmVhZHktZW5jb2RlZCBjb2x1bW4gYmxvYnMgaW50byBhIGNvbXBsZXRlIGZpbGUgKDQtYnl0ZSBoZWFkZXIgbGVuZ3RoICsgaGVhZGVyIEpTT04gKyBibG9icyksIGNvbXB1dGluZyB0aGUgaGVhZGVyJ3MgdGltZSArIGtleSBib3VuZHMgZnJvbSB0aGUgcGVyLXJvdyB0aW1lcyBhbmQga2V5cy4gU2hhcmVkIGJ5IHRoZSBvYmplY3QtYmFzZWQgYnVpbGRlciAoYnVpbGRPbmVGaWxlKSBhbmQgdGhlIHJhdy1zcGxpY2UgYnVpbGRlciAoYnVpbGRPbmVGaWxlUmF3KS5cbmZ1bmN0aW9uIGFzc2VtYmxlRmlsZShjb2x1bW5OYW1lczogc3RyaW5nW10sIGJsb2JzOiBCdWZmZXJbXSwgcm93Q291bnQ6IG51bWJlciwgdGltZXM6IG51bWJlcltdLCBrZXlzOiBzdHJpbmdbXSk6IEJ1ZmZlciB7XG4gICAgbGV0IG9mZnNldCA9IDA7XG4gICAgY29uc3QgY29sdW1ucyA9IGNvbHVtbk5hbWVzLm1hcCgobmFtZSwgaSkgPT4ge1xuICAgICAgICBjb25zdCBlbnRyeSA9IHsgbmFtZSwgb2Zmc2V0LCBsZW5ndGg6IGJsb2JzW2ldLmxlbmd0aCB9O1xuICAgICAgICBvZmZzZXQgKz0gYmxvYnNbaV0ubGVuZ3RoO1xuICAgICAgICByZXR1cm4gZW50cnk7XG4gICAgfSk7XG4gICAgbGV0IG1pblRpbWUgPSB0aW1lcy5sZW5ndGggPyB0aW1lc1swXSA6IDA7XG4gICAgbGV0IG1heFRpbWUgPSBtaW5UaW1lO1xuICAgIGZvciAoY29uc3QgdCBvZiB0aW1lcykgeyBpZiAodCA8IG1pblRpbWUpIG1pblRpbWUgPSB0OyBpZiAodCA+IG1heFRpbWUpIG1heFRpbWUgPSB0OyB9XG4gICAgbGV0IG1pbktleTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGxldCBtYXhLZXk6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgICAgIGlmIChtaW5LZXkgPT09IHVuZGVmaW5lZCB8fCBrZXkgPCBtaW5LZXkpIG1pbktleSA9IGtleTtcbiAgICAgICAgaWYgKG1heEtleSA9PT0gdW5kZWZpbmVkIHx8IGtleSA+IG1heEtleSkgbWF4S2V5ID0ga2V5O1xuICAgIH1cbiAgICBjb25zdCBoZWFkZXI6IEZpbGVIZWFkZXIgPSB7IHJvd0NvdW50LCBjb2x1bW5zLCBtaW5UaW1lLCBtYXhUaW1lLCBtaW5LZXksIG1heEtleSB9O1xuICAgIGNvbnN0IGhlYWRlckJ1ZiA9IEJ1ZmZlci5mcm9tKEpTT04uc3RyaW5naWZ5KGhlYWRlciksIFwidXRmOFwiKTtcbiAgICBjb25zdCBsZW5ndGhQcmVmaXggPSBCdWZmZXIuYWxsb2MoNCk7XG4gICAgbGVuZ3RoUHJlZml4LndyaXRlVUludDMyTEUoaGVhZGVyQnVmLmxlbmd0aCwgMCk7XG4gICAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoW2xlbmd0aFByZWZpeCwgaGVhZGVyQnVmLCAuLi5ibG9ic10pO1xufVxuXG5mdW5jdGlvbiBidWlsZE9uZUZpbGUocm93czogUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXSwgdGltZXM6IG51bWJlcltdKTogQnVmZmVyIHtcbiAgICBjb25zdCBjb2x1bW5OYW1lczogc3RyaW5nW10gPSBbXTtcbiAgICBjb25zdCBjb2x1bW5TZXQgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICBmb3IgKGNvbnN0IHJvdyBvZiByb3dzKSB7XG4gICAgICAgIGZvciAoY29uc3QgZmllbGQgb2YgT2JqZWN0LmtleXMocm93KSkge1xuICAgICAgICAgICAgaWYgKGNvbHVtblNldC5oYXMoZmllbGQpKSBjb250aW51ZTtcbiAgICAgICAgICAgIGNvbHVtblNldC5hZGQoZmllbGQpO1xuICAgICAgICAgICAgY29sdW1uTmFtZXMucHVzaChmaWVsZCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gQSByb3cgdGhhdCBkb2Vzbid0IGluY2x1ZGUgYSBjb2x1bW4gc3RvcmVzIEFCU0VOVCAoZmFsbC10aHJvdWdoKSwgbm90IHVuZGVmaW5lZCAoYSByZWFsIHZhbHVlKS5cbiAgICBjb25zdCBibG9icyA9IGNvbHVtbk5hbWVzLm1hcChjb2wgPT4gZW5jb2RlQnVsa0RhdGEocm93cy5tYXAocm93ID0+IGNvbCBpbiByb3cgPyByb3dbY29sXSA6IEFCU0VOVCkpKTtcbiAgICAvLyBUaGUgaGlkZGVuIHBlci1yb3cgdGltZSBjb2x1bW4uXG4gICAgY29sdW1uTmFtZXMucHVzaChUSU1FX0NPTFVNTik7XG4gICAgYmxvYnMucHVzaChlbmNvZGVCdWxrRGF0YSh0aW1lcykpO1xuICAgIHJldHVybiBhc3NlbWJsZUZpbGUoY29sdW1uTmFtZXMsIGJsb2JzLCByb3dzLmxlbmd0aCwgdGltZXMsIHJvd3MubWFwKHIgPT4gcltLRVlfQ09MVU1OXSBhcyBzdHJpbmcpKTtcbn1cblxuLy8gQSByZXNvbHZlZCBvdXRwdXQgcm93IGZvciB0aGUgcmF3LXNwbGljZSBtZXJnZTogaXRzIGtleSwgd3JpdGUtdGltZSwgYW5kIHRoZSB3aW5uaW5nIHJhdyBjZWxsIGZvciBlYWNoIGNvbHVtbiBpdCBoYXMgKGEgY29sdW1uIGl0IGxhY2tzIGlzIHdyaXR0ZW4gQUJTRU5UIOKAlCBmYWxsLXRocm91Z2gpLiBUaGUgY2VsbCBieXRlcyBhcmUgY29waWVkIHN0cmFpZ2h0IGZyb20gdGhlIGlucHV0IGZpbGVzOyBubyB2YWx1ZSBpcyBldmVyIGRlY29kZWQuXG5leHBvcnQgdHlwZSBSYXdSb3cgPSB7IGtleTogc3RyaW5nOyB0aW1lOiBudW1iZXI7IGNlbGxzOiBNYXA8c3RyaW5nLCBSYXdDZWxsPiB9O1xuXG4vLyBTaXplIG9mIGEgY29sdW1uIGJsb2IncyBJTkRFWCBzZWN0aW9uIChvZmZzZXRzIGFycmF5ICsgdHlwZXMgYXJyYXkpIGZvciBhIGNvbHVtbiBvZiBOIHJvd3MuIFRoZSBkYXRhIHNlY3Rpb24gZm9sbG93cyBpbW1lZGlhdGVseSBhZnRlci4gVGhlIHBsYW5uZWQgbWVyZ2UgdXNlcyB0aGlzIHRvIHNpemUgb3V0cHV0IGJ1ZmZlcnMgZXhhY3RseS5cbmV4cG9ydCBmdW5jdGlvbiBjb2x1bW5JbmRleEJ5dGVMZW5ndGgocm93Q291bnQ6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIDQgKiAocm93Q291bnQgKyAxKSArIHJvd0NvdW50O1xufVxuXG4vLyBBc3NlbWJsZXMgYSBjb21wbGV0ZSBidWxrIGZpbGUgZnJvbSBhIHNldCBvZiBwcmUtYnVpbHQgdmFsdWUgY29sdW1uIGJsb2JzIHBsdXMgdGhlIGtleXMgKyB0aW1lcy4gQXV0by0gYWRkcyB0aGUgS0VZX0NPTFVNTiAoa2V5cykgYW5kIGhpZGRlbiBUSU1FX0NPTFVNTiAodGltZXMpIOKAlCB0aGV5J3JlIHNtYWxsIGVub3VnaCB0byBlbmNvZGUgaW4gb25lIHNob3QgaGVyZS4gVXNlZCBieSB0aGUgcGxhbm5lZCBtZXJnZTogaXQgYnVpbGRzIGVhY2ggdmFsdWUgY29sdW1uJ3MgYmxvYiBieS1oYW5kIChvZmZzZXRzL3R5cGVzICsgcmF3IGJ5dGVzIGNvcGllZCBkaXJlY3RseSBmcm9tIGlucHV0cywgbm8gdmFsdWUgbWF0ZXJpYWxpemF0aW9uKSBhbmQgaGFuZHMgdGhlIHJlc3VsdCBoZXJlIGZvciBoZWFkZXIgKyBib3VuZHMuXG5leHBvcnQgZnVuY3Rpb24gYXNzZW1ibGVQbGFubmVkRmlsZShjb25maWc6IHtcbiAgICB2YWx1ZUNvbHVtbnM6IHsgbmFtZTogc3RyaW5nOyBibG9iOiBCdWZmZXIgfVtdO1xuICAgIGtleXM6IHN0cmluZ1tdO1xuICAgIHRpbWVzOiBudW1iZXJbXTtcbn0pOiBCdWZmZXIge1xuICAgIGNvbnN0IGNvbHVtbk5hbWVzID0gW0tFWV9DT0xVTU4sIC4uLmNvbmZpZy52YWx1ZUNvbHVtbnMubWFwKGMgPT4gYy5uYW1lKSwgVElNRV9DT0xVTU5dO1xuICAgIGNvbnN0IGJsb2JzID0gW1xuICAgICAgICBlbmNvZGVCdWxrRGF0YShjb25maWcua2V5cyksXG4gICAgICAgIC4uLmNvbmZpZy52YWx1ZUNvbHVtbnMubWFwKGMgPT4gYy5ibG9iKSxcbiAgICAgICAgZW5jb2RlQnVsa0RhdGEoY29uZmlnLnRpbWVzKSxcbiAgICBdO1xuICAgIHJldHVybiBhc3NlbWJsZUZpbGUoY29sdW1uTmFtZXMsIGJsb2JzLCBjb25maWcua2V5cy5sZW5ndGgsIGNvbmZpZy50aW1lcywgY29uZmlnLmtleXMpO1xufVxuXG5jb25zdCBBQlNFTlRfQ0VMTDogUmF3Q2VsbCA9IHsgdHlwZTogVFlQRV9BQlNFTlQsIGJ5dGVzOiBFTVBUWV9CVUZGRVIgfTtcblxuZnVuY3Rpb24gYnVpbGRPbmVGaWxlUmF3KHJvd3M6IFJhd1Jvd1tdKTogQnVmZmVyIHtcbiAgICAvLyBDb2x1bW5zIHByZXNlbnQgaW4gdGhpcyBjaHVuaywgaW4gZmlyc3Qtc2VlbiBvcmRlciAobWF0Y2hlcyBidWlsZE9uZUZpbGUsIHdoaWNoIG9ubHkgZW1pdHMgY29sdW1ucyBzb21lIHJvdyBhY3R1YWxseSBoYXMpLlxuICAgIGNvbnN0IHZhbHVlQ29sdW1uczogc3RyaW5nW10gPSBbXTtcbiAgICBjb25zdCBzZWVuID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgZm9yIChjb25zdCByb3cgb2Ygcm93cykgZm9yIChjb25zdCBjb2wgb2Ygcm93LmNlbGxzLmtleXMoKSkge1xuICAgICAgICBpZiAoc2Vlbi5oYXMoY29sKSkgY29udGludWU7XG4gICAgICAgIHNlZW4uYWRkKGNvbCk7XG4gICAgICAgIHZhbHVlQ29sdW1ucy5wdXNoKGNvbCk7XG4gICAgfVxuICAgIGNvbnN0IGNvbHVtbk5hbWVzID0gW0tFWV9DT0xVTU4sIC4uLnZhbHVlQ29sdW1ucywgVElNRV9DT0xVTU5dO1xuICAgIGNvbnN0IHRpbWVzID0gcm93cy5tYXAociA9PiByLnRpbWUpO1xuICAgIGNvbnN0IGJsb2JzID0gW1xuICAgICAgICBlbmNvZGVCdWxrRGF0YShyb3dzLm1hcChyID0+IHIua2V5KSksXG4gICAgICAgIC4uLnZhbHVlQ29sdW1ucy5tYXAoY29sID0+IGVuY29kZUJ1bGtEYXRhUmF3KHJvd3MubWFwKHIgPT4gci5jZWxscy5nZXQoY29sKSA/PyBBQlNFTlRfQ0VMTCkpKSxcbiAgICAgICAgZW5jb2RlQnVsa0RhdGEodGltZXMpLFxuICAgIF07XG4gICAgcmV0dXJuIGFzc2VtYmxlRmlsZShjb2x1bW5OYW1lcywgYmxvYnMsIHJvd3MubGVuZ3RoLCB0aW1lcywgcm93cy5tYXAociA9PiByLmtleSkpO1xufVxuXG5mdW5jdGlvbiBlc3RpbWF0ZVJhd1Jvd0J5dGVzKHJvdzogUmF3Um93KTogbnVtYmVyIHtcbiAgICBsZXQgdG90YWwgPSByb3cua2V5Lmxlbmd0aCAqIDIgKyBQRVJfVkFMVUVfT1ZFUkhFQUQ7XG4gICAgZm9yIChjb25zdCBjZWxsIG9mIHJvdy5jZWxscy52YWx1ZXMoKSkgdG90YWwgKz0gY2VsbC5ieXRlcy5sZW5ndGggKyBQRVJfVkFMVUVfT1ZFUkhFQUQ7XG4gICAgcmV0dXJuIHRvdGFsO1xufVxuXG4vLyBPbmUgY29tcGxldGUsIGluZGVwZW5kZW50IGZpbGU6IHRoZSBlbmNvZGVkIGJ1ZmZlciBwbHVzIGl0cyBrZXkgcmFuZ2UgKyByb3cgY291bnQgKHRoZSBjYWxsZXIgbG9ncyB0aGUgcmFuZ2Ugd2hlbiBhIG1lcmdlIHNwbGl0cyBhY3Jvc3Mgc2V2ZXJhbCBmaWxlcykuXG5leHBvcnQgaW50ZXJmYWNlIEJ1aWx0RmlsZSB7IGJ1ZmZlcjogQnVmZmVyOyBtaW5LZXk6IHN0cmluZzsgbWF4S2V5OiBzdHJpbmc7IHJvd0NvdW50OiBudW1iZXI7IH1cblxuLy8gUmV0dXJucyBvbmUgY29tcGxldGUsIGluZGVwZW5kZW50IGZpbGUgcGVyIGNodW5rIG9mIHJvd3MuIFJvd3MgYXJlIGZpcnN0IHNvcnRlZCBieSBrZXksIHRoZW4gcGFydGl0aW9uZWQgaW50byBrZXktY29udGlndW91cyBjaHVua3Mgb2YgfnRhcmdldEJ5dGVzIGVhY2gg4oCUIHNvIGV2ZXJ5IHJldHVybmVkIGZpbGUgaXMga2V5LXNvcnRlZCAodGlnaHQgbWluS2V5L21heEtleSBmb3IgdGhlIHJlYWQtc2tpcCArIG1lcmdlIHBsYW5uZXIpIGFuZCBzdGF5cyBuZWFyIHRoZSB0YXJnZXQgc2l6ZSwgYW5kIG5vIHNpbmdsZSBjb2x1bW4gYmxvYiAvIEJ1ZmZlci5jb25jYXQgYXBwcm9hY2hlcyB0aGUgfjJHQiBsaW1pdC4gVGhlIGNodW5rcyBoYXZlIGRpc2pvaW50IGtleSByYW5nZXMsIHNvIHRoZSBjYWxsZXIganVzdCB3cml0ZXMgZWFjaCBhcyBpdHMgb3duIGZpbGUuIEEgbm9ybWFsLXNpemVkIHdyaXRlIHJldHVybnMgYSBzaW5nbGUgZmlsZS4gYHRpbWVzW2ldYCBpcyByb3cgaSdzIHdyaXRlLXRpbWUsIHN0b3JlZCBwZXIgcm93IHNvIHJlYWRzIHJlc29sdmUgYSBrZXkgdG8gaXRzIGxhdGVzdCB2YWx1ZSBieSB0aW1lLlxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkRmlsZUJ1ZmZlcihyb3dzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdLCB0aW1lczogbnVtYmVyW10sIHRhcmdldEJ5dGVzID0gVEFSR0VUX0ZJTEVfQllURVMpOiBCdWlsdEZpbGVbXSB7XG4gICAgLy8gQSBjaHVuayBpcyBhbHJlYWR5IGtleS1zb3J0ZWQsIHNvIGl0cyBmaXJzdC9sYXN0IHJvdyBhcmUgaXRzIG1pbi9tYXgga2V5LlxuICAgIGNvbnN0IG1ha2UgPSAocnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+W10sIHRzOiBudW1iZXJbXSk6IEJ1aWx0RmlsZSA9PiAoe1xuICAgICAgICBidWZmZXI6IGJ1aWxkT25lRmlsZShycywgdHMpLFxuICAgICAgICBtaW5LZXk6IHJzLmxlbmd0aCA/IChyc1swXVtLRVlfQ09MVU1OXSBhcyBzdHJpbmcpIDogXCJcIixcbiAgICAgICAgbWF4S2V5OiBycy5sZW5ndGggPyAocnNbcnMubGVuZ3RoIC0gMV1bS0VZX0NPTFVNTl0gYXMgc3RyaW5nKSA6IFwiXCIsXG4gICAgICAgIHJvd0NvdW50OiBycy5sZW5ndGgsXG4gICAgfSk7XG4gICAgaWYgKHJvd3MubGVuZ3RoID09PSAwKSByZXR1cm4gW21ha2UoW10sIFtdKV07XG4gICAgLy8gU29ydCByb3dzICsgdGhlaXIgdGltZXMgdG9nZXRoZXIgYnkga2V5IHNvIGVhY2ggb3V0cHV0IGZpbGUgaXMga2V5LWNvbnRpZ3VvdXMuXG4gICAgY29uc3Qgb3JkZXIgPSByb3dzLm1hcCgoXywgaSkgPT4gaSkuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICBjb25zdCBrYSA9IHJvd3NbYV1bS0VZX0NPTFVNTl0gYXMgc3RyaW5nO1xuICAgICAgICBjb25zdCBrYiA9IHJvd3NbYl1bS0VZX0NPTFVNTl0gYXMgc3RyaW5nO1xuICAgICAgICByZXR1cm4ga2EgPCBrYiA/IC0xIDoga2EgPiBrYiA/IDEgOiAwO1xuICAgIH0pO1xuICAgIGNvbnN0IHNvcnRlZFJvd3MgPSBvcmRlci5tYXAoaSA9PiByb3dzW2ldKTtcbiAgICBjb25zdCBzb3J0ZWRUaW1lcyA9IG9yZGVyLm1hcChpID0+IHRpbWVzW2ldKTtcbiAgICBjb25zdCByZXN1bHQ6IEJ1aWx0RmlsZVtdID0gW107XG4gICAgbGV0IGNodW5rU3RhcnQgPSAwO1xuICAgIGxldCBjaHVua0J5dGVzID0gMDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNvcnRlZFJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3Qgcm93Qnl0ZXMgPSBlc3RpbWF0ZVJvd0J5dGVzKHNvcnRlZFJvd3NbaV0pO1xuICAgICAgICBpZiAoaSA+IGNodW5rU3RhcnQgJiYgY2h1bmtCeXRlcyArIHJvd0J5dGVzID4gdGFyZ2V0Qnl0ZXMpIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKG1ha2Uoc29ydGVkUm93cy5zbGljZShjaHVua1N0YXJ0LCBpKSwgc29ydGVkVGltZXMuc2xpY2UoY2h1bmtTdGFydCwgaSkpKTtcbiAgICAgICAgICAgIGNodW5rU3RhcnQgPSBpO1xuICAgICAgICAgICAgY2h1bmtCeXRlcyA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgY2h1bmtCeXRlcyArPSByb3dCeXRlcztcbiAgICB9XG4gICAgcmVzdWx0LnB1c2gobWFrZShzb3J0ZWRSb3dzLnNsaWNlKGNodW5rU3RhcnQpLCBzb3J0ZWRUaW1lcy5zbGljZShjaHVua1N0YXJ0KSkpO1xuICAgIHJldHVybiByZXN1bHQ7XG59XG5cbi8vIFRoZSByYXctc3BsaWNlIGNvdW50ZXJwYXJ0IG9mIGJ1aWxkRmlsZUJ1ZmZlciwgdXNlZCBieSBtZXJnZXM6IHRoZSByb3dzIGFscmVhZHkgY2FycnkgdGhlaXIgd2lubmluZyBjZWxscyBhcyByYXcgb24tZGlzayBieXRlcyAobm8gSlMgdmFsdWVzKSwgc28gdGhpcyBqdXN0IHNvcnRzIGJ5IGtleSwgY2h1bmtzIHRvIH50YXJnZXRCeXRlcywgYW5kIGNvbmNhdGVuYXRlcyB0aGUgYnl0ZXMuIFNhbWUgb3V0cHV0IGd1YXJhbnRlZXM6IGtleS1jb250aWd1b3VzLCBkaXNqb2ludCwgYXNjZW5kaW5nIGZpbGVzLlxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkRmlsZUJ1ZmZlclJhdyhyb3dzOiBSYXdSb3dbXSwgdGFyZ2V0Qnl0ZXMgPSBUQVJHRVRfRklMRV9CWVRFUyk6IEJ1aWx0RmlsZVtdIHtcbiAgICBjb25zdCBtYWtlID0gKHJzOiBSYXdSb3dbXSk6IEJ1aWx0RmlsZSA9PiAoe1xuICAgICAgICBidWZmZXI6IGJ1aWxkT25lRmlsZVJhdyhycyksXG4gICAgICAgIG1pbktleTogcnMubGVuZ3RoID8gcnNbMF0ua2V5IDogXCJcIixcbiAgICAgICAgbWF4S2V5OiBycy5sZW5ndGggPyByc1tycy5sZW5ndGggLSAxXS5rZXkgOiBcIlwiLFxuICAgICAgICByb3dDb3VudDogcnMubGVuZ3RoLFxuICAgIH0pO1xuICAgIGlmIChyb3dzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIFttYWtlKFtdKV07XG4gICAgY29uc3Qgc29ydGVkID0gcm93cy5zbGljZSgpLnNvcnQoKGEsIGIpID0+IGEua2V5IDwgYi5rZXkgPyAtMSA6IGEua2V5ID4gYi5rZXkgPyAxIDogMCk7XG4gICAgY29uc3QgcmVzdWx0OiBCdWlsdEZpbGVbXSA9IFtdO1xuICAgIGxldCBjaHVua1N0YXJ0ID0gMDtcbiAgICBsZXQgY2h1bmtCeXRlcyA9IDA7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzb3J0ZWQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3Qgcm93Qnl0ZXMgPSBlc3RpbWF0ZVJhd1Jvd0J5dGVzKHNvcnRlZFtpXSk7XG4gICAgICAgIGlmIChpID4gY2h1bmtTdGFydCAmJiBjaHVua0J5dGVzICsgcm93Qnl0ZXMgPiB0YXJnZXRCeXRlcykge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2gobWFrZShzb3J0ZWQuc2xpY2UoY2h1bmtTdGFydCwgaSkpKTtcbiAgICAgICAgICAgIGNodW5rU3RhcnQgPSBpO1xuICAgICAgICAgICAgY2h1bmtCeXRlcyA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgY2h1bmtCeXRlcyArPSByb3dCeXRlcztcbiAgICB9XG4gICAgcmVzdWx0LnB1c2gobWFrZShzb3J0ZWQuc2xpY2UoY2h1bmtTdGFydCkpKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgdHlwZSBCYXNlQnVsa0RhdGFiYXNlUmVhZGVyID0ge1xuICAgIC8vIElkZW50aWZpZXMgdGhlIHNvdXJjZSB0aGlzIHJlYWRlciBjYW1lIGZyb20gKHRoZSBidWxrIGZpbGUgbmFtZSwgb3IgXCIoc3RyZWFtcylcIikgc28gdGhlIGpvaW4gY2FuIG5hbWUgdGhlIG9mZmVuZGluZyBmaWxlIHdoZW4gb25lIG9mIGl0cyByZWFkcyBmYWlscy4gVW5kZWZpbmVkIGZvciByZWFkZXJzIGJ1aWx0IHdpdGhvdXQgb25lLlxuICAgIG5hbWU/OiBzdHJpbmc7XG4gICAgcm93Q291bnQ6IG51bWJlcjtcbiAgICB0b3RhbEJ5dGVzOiBudW1iZXI7XG4gICAgLy8gV3JpdGUtdGltZSBib3VuZHMgb2YgdGhpcyByZWFkZXIncyBkYXRhICgwIGlmIHVua25vd24g4oCUIG9sZCBidWxrIGZpbGVzKS5cbiAgICBtaW5UaW1lOiBudW1iZXI7XG4gICAgbWF4VGltZTogbnVtYmVyO1xuICAgIC8vIEtleS1yYW5nZSBib3VuZHMgKHVuZGVmaW5lZCBmb3Igb2xkIGZpbGVzIC8gdGhlIHN0cmVhbSByZWFkZXIg4oCUIHRyZWF0IGFzIFwic3BhbnMgYWxsIGtleXNcIikuXG4gICAgbWluS2V5Pzogc3RyaW5nO1xuICAgIG1heEtleT86IHN0cmluZztcbiAgICAvLyBLZXlzIGlzIHNwZWNpYWwsIGl0J3MgYWx3YXlzIGF1dG9tYXRpY2FsbHkgZGVjb2RlZCwgZXZlbiB0aG91Z2ggaXQgaXMgc3RvcmVkIGFzIGEgbm9ybWFsIGNvbHVtblxuICAgIGtleXM6IHN0cmluZ1tdO1xuICAgIGNvbHVtbnM6IHsgY29sdW1uOiBzdHJpbmc7IGJ5dGVTaXplOiBudW1iZXIgfVtdO1xuICAgIC8vIEVhY2gga2V5J3Mgcm93IHdyaXRlLXRpbWUgKHRoZSB0aW1lIG9mIGl0cyBuZXdlc3Qgd3JpdGUgaW4gdGhpcyByZWFkZXIpLiBUaGUgam9pbiBjb21wYXJlcyB0aGVzZSBhY3Jvc3MgcmVhZGVycyB0byByZXNvbHZlIGEga2V5IHRvIGl0cyBsYXRlc3QgdmFsdWUuXG4gICAga2V5VGltZXM6IE1hcDxzdHJpbmcsIG51bWJlcj47XG4gICAgLy8gUGVyLWtleSB0b21ic3RvbmUgdGltZTogdGhlIGtleSB3YXMgZGVsZXRlZCBhdCB0aGlzIHRpbWUuIFRoZSBqb2luIHRyZWF0cyBhIGRlbGV0ZSBsaWtlIGFueSBvdGhlciBldmVudCDigJQgYSBkZWxldGUgb25seSB3aW5zIGlmIGl0J3MgbmV3ZXIgdGhhbiBldmVyeSBzZXQgZm9yIHRoZSBrZXkuIE9ubHkgdGhlIHN0cmVhbSByZWFkZXIgc2V0cyBpdC5cbiAgICBkZWxldGVUaW1lcz86IE1hcDxzdHJpbmcsIG51bWJlcj47XG4gICAgLy8gRWFjaCBrZXkncyB2YWx1ZSBmb3IgdGhlIGNvbHVtbiBwbHVzIHRoZSByb3cncyB3cml0ZS10aW1lLiB2YWx1ZSBtYXkgYmUgQUJTRU5UICh0aGUgcm93IG5ldmVyIHNldCB0aGlzIGNvbHVtbiDigJQgdGhlIGpvaW4gdGhlbiBmYWxscyB0aHJvdWdoIHRvIGFuIG9sZGVyIHJlYWRlciBmb3IgdGhhdCBrZXkvY29sdW1uKS5cbiAgICBnZXRDb2x1bW46IChjb2x1bW46IHN0cmluZykgPT4gUHJvbWlzZTx7IGtleTogc3RyaW5nOyB2YWx1ZTogdW5rbm93bjsgdGltZTogbnVtYmVyIH1bXT47XG4gICAgLy8gTGlrZSBnZXRDb2x1bW4gYnV0IHJldHVybnMgZWFjaCBjZWxsJ3MgcmF3IG9uLWRpc2sgZW5jb2RpbmcgKHR5cGUgdGFnICsgYnl0ZXMpIGtleWVkIGJ5IGtleSwgV0lUSE9VVCBkZWNvZGluZyB0aGUgdmFsdWUg4oCUIGZvciBtZXJnZXMsIHdoaWNoIHNwbGljZSB0aGUgd2lubmluZyBieXRlcyBzdHJhaWdodCBpbnRvIHRoZSBvdXRwdXQuIEFCU0VOVCBjZWxscyBhcmUgb21pdHRlZCAoYSBtaXNzaW5nIGtleSBtZWFucyB0aGlzIHJlYWRlciBkaWRuJ3Qgc2V0IHRoaXMgY29sdW1uLCBzbyB0aGUgbWVyZ2UgZmFsbHMgdGhyb3VnaCB0byBhbiBvbGRlciByZWFkZXIpLiBFYWNoIGNlbGwncyB3cml0ZS10aW1lIGlzIHRoZSByZWFkZXIncyBrZXlUaW1lcyB2YWx1ZSBmb3IgdGhhdCBrZXkuXG4gICAgZ2V0UmF3Q29sdW1uOiAoY29sdW1uOiBzdHJpbmcpID0+IFByb21pc2U8TWFwPHN0cmluZywgUmF3Q2VsbD4+O1xuICAgIC8vIFJldHVybnMgdGhlIGNvbHVtbidzIElOREVYIChvZmZzZXRzICsgdHlwZXMpIHBsdXMgYSBjb250aWd1b3VzIHJvdy1yYW5nZSBieXRlIHJlYWRlci4gVGhlIHBsYW5uZWQgbWVyZ2UgbG9hZHMgdGhpcyBmb3IgZXZlcnkgKHNvdXJjZSwgY29sdW1uKSBvbmNlIOKAlCBzbWFsbCAofjVCL3JvdyksIG5vIHZhbHVlIGJ5dGVzIHB1bGxlZCDigJQgYW5kIHVzZXMgdHlwZXMvb2Zmc2V0cyB0byBwbGFuIHRoZSBvdXRwdXQncyBieXRlIGxheW91dC4gRXhlY3V0ZSB0aGVuIHJlYWRzIG9ubHkgdGhlIG5lZWRlZCBydW5zLlxuICAgIGdldENvbHVtbkluZGV4OiAoY29sdW1uOiBzdHJpbmcpID0+IFByb21pc2U8Q29sdW1uSW5kZXg+O1xuICAgIC8vIE1hcHMgYSBrZXkgdG8gaXRzIHJvdyBpbmRleCBpbiB0aGlzIHJlYWRlciAoYW5kIHVuZGVmaW5lZCBpZiBhYnNlbnQpLiBUaGUgcGxhbm5lZCBtZXJnZSB1c2VzIHRoaXMgdG8gbG9vayB1cCBhIHdpbm5pbmcgY2VsbCdzIHNvdXJjZSByb3cgd2l0aG91dCBnb2luZyB0aHJvdWdoIGEgY29sdW1uIHJlYWQuXG4gICAgcm93T2ZLZXk6IChrZXk6IHN0cmluZykgPT4gbnVtYmVyIHwgdW5kZWZpbmVkO1xuICAgIC8vIFRoZSB2YWx1ZSArIHdyaXRlLXRpbWUgZm9yIChrZXksIGNvbHVtbiksIG9yIEFCU0VOVCBpZiB0aGlzIHJlYWRlciBoYXMgbm8gc3VjaCBjZWxsLlxuICAgIGdldFNpbmdsZUZpZWxkOiAoa2V5OiBzdHJpbmcsIGNvbHVtbjogc3RyaW5nKSA9PiBQcm9taXNlPHsgdmFsdWU6IHVua25vd247IHRpbWU6IG51bWJlciB9IHwgdHlwZW9mIEFCU0VOVD47XG59O1xuXG4vLyBSZWFkcyBqdXN0IHRoZSBmaWxlIGhlYWRlciAodGhlIDQtYnl0ZSBsZW5ndGggKyBoZWFkZXIgSlNPTikg4oCUIG5vIGNvbHVtbiBkYXRhLiBVc2VkIGJ5IHRoZSBtZXJnZSBwbGFubmVyIHRvIGdldCBlYWNoIGZpbGUncyByb3cgY291bnQsIHRpbWUgcmFuZ2UsIGFuZCBrZXkgcmFuZ2UgY2hlYXBseSBhY3Jvc3MgbWFueSBmaWxlcy5cbmV4cG9ydCB0eXBlIEJ1bGtIZWFkZXJJbmZvID0geyByb3dDb3VudDogbnVtYmVyOyBtaW5UaW1lOiBudW1iZXI7IG1heFRpbWU6IG51bWJlcjsgbWluS2V5Pzogc3RyaW5nOyBtYXhLZXk/OiBzdHJpbmc7IGNvbHVtbnM6IHsgY29sdW1uOiBzdHJpbmc7IGJ5dGVTaXplOiBudW1iZXIgfVtdIH07XG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9hZEJ1bGtIZWFkZXIoZ2V0UmFuZ2U6IChzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlcikgPT4gUHJvbWlzZTxCdWZmZXI+LCB0b3RhbEJ5dGVzOiBudW1iZXIpOiBQcm9taXNlPEJ1bGtIZWFkZXJJbmZvPiB7XG4gICAgY29uc3QgaGVhZGVyTGVuZ3RoID0gKGF3YWl0IGdldFJhbmdlKDAsIDQpKS5yZWFkVUludDMyTEUoMCk7XG4gICAgaWYgKGhlYWRlckxlbmd0aCA8PSAwIHx8IGhlYWRlckxlbmd0aCA+IHRvdGFsQnl0ZXMpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBoZWFkZXIgbGVuZ3RoIGluICgwLCAke3RvdGFsQnl0ZXN9XSwgd2FzICR7aGVhZGVyTGVuZ3RofWApO1xuICAgIH1cbiAgICBjb25zdCBoZWFkZXIgPSBKU09OLnBhcnNlKChhd2FpdCBnZXRSYW5nZSg0LCA0ICsgaGVhZGVyTGVuZ3RoKSkudG9TdHJpbmcoXCJ1dGY4XCIpKSBhcyBGaWxlSGVhZGVyO1xuICAgIHJldHVybiB7XG4gICAgICAgIHJvd0NvdW50OiBoZWFkZXIucm93Q291bnQsXG4gICAgICAgIG1pblRpbWU6IGhlYWRlci5taW5UaW1lIHx8IDAsXG4gICAgICAgIG1heFRpbWU6IGhlYWRlci5tYXhUaW1lIHx8IDAsXG4gICAgICAgIG1pbktleTogaGVhZGVyLm1pbktleSxcbiAgICAgICAgbWF4S2V5OiBoZWFkZXIubWF4S2V5LFxuICAgICAgICBjb2x1bW5zOiBoZWFkZXIuY29sdW1ucy5maWx0ZXIoYyA9PiBjLm5hbWUgIT09IFRJTUVfQ09MVU1OKS5tYXAoYyA9PiAoeyBjb2x1bW46IGMubmFtZSwgYnl0ZVNpemU6IGMubGVuZ3RoIH0pKSxcbiAgICB9O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9hZEJ1bGtEYXRhYmFzZShjb25maWc6IHtcbiAgICB0b3RhbEJ5dGVzOiBudW1iZXI7XG4gICAgZ2V0UmFuZ2U6IChzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlcikgPT4gUHJvbWlzZTxCdWZmZXI+O1xuICAgIG5hbWU/OiBzdHJpbmc7XG59KTogUHJvbWlzZTxCYXNlQnVsa0RhdGFiYXNlUmVhZGVyPiB7XG4gICAgY29uc3QgaGVhZGVyTGVuZ3RoID0gKGF3YWl0IGNvbmZpZy5nZXRSYW5nZSgwLCA0KSkucmVhZFVJbnQzMkxFKDApO1xuICAgIGlmIChoZWFkZXJMZW5ndGggPD0gMCB8fCBoZWFkZXJMZW5ndGggPiBjb25maWcudG90YWxCeXRlcykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGhlYWRlciBsZW5ndGggaW4gKDAsICR7Y29uZmlnLnRvdGFsQnl0ZXN9XSwgd2FzICR7aGVhZGVyTGVuZ3RofWApO1xuICAgIH1cbiAgICBjb25zdCBoZWFkZXIgPSBKU09OLnBhcnNlKChhd2FpdCBjb25maWcuZ2V0UmFuZ2UoNCwgNCArIGhlYWRlckxlbmd0aCkpLnRvU3RyaW5nKFwidXRmOFwiKSkgYXMgRmlsZUhlYWRlcjtcbiAgICBjb25zdCBkYXRhQmFzZSA9IDQgKyBoZWFkZXJMZW5ndGg7XG4gICAgY29uc3Qgcm93Q291bnQgPSBoZWFkZXIucm93Q291bnQ7XG4gICAgY29uc3QgY29sQnlOYW1lID0gbmV3IE1hcChoZWFkZXIuY29sdW1ucy5tYXAoYyA9PiBbYy5uYW1lLCBjXSkpO1xuXG4gICAgYXN5bmMgZnVuY3Rpb24gcmVhZFdob2xlQ29sdW1uKGNvbHVtbjogc3RyaW5nKTogUHJvbWlzZTx1bmtub3duW10+IHtcbiAgICAgICAgY29uc3QgY29sID0gY29sQnlOYW1lLmdldChjb2x1bW4pO1xuICAgICAgICBpZiAoIWNvbCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBjb2x1bW4gJHtjb2x1bW59LCBmaWxlIG9ubHkgaGFzOiAke2hlYWRlci5jb2x1bW5zLm1hcChjID0+IGMubmFtZSkuam9pbihcIiwgXCIpfWApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGJsb2IgPSBhd2FpdCBjb25maWcuZ2V0UmFuZ2UoZGF0YUJhc2UgKyBjb2wub2Zmc2V0LCBkYXRhQmFzZSArIGNvbC5vZmZzZXQgKyBjb2wubGVuZ3RoKTtcbiAgICAgICAgcmV0dXJuIGRlY29kZUJ1bGtEYXRhKGJsb2IsIHJvd0NvdW50KTtcbiAgICB9XG5cbiAgICBjb25zdCBrZXlzID0gKGF3YWl0IHJlYWRXaG9sZUNvbHVtbihLRVlfQ09MVU1OKSkubWFwKHYgPT4ge1xuICAgICAgICBpZiAodHlwZW9mIHYgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgc3RyaW5nIGtleSwgd2FzICR7dHlwZW9mIHZ9OiAke0pTT04uc3RyaW5naWZ5KHYpPy5zbGljZSgwLCA1MDApfWApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2O1xuICAgIH0pO1xuICAgIGNvbnN0IGtleUluZGV4ID0gbmV3IE1hcChrZXlzLm1hcCgoa2V5LCBpKSA9PiBba2V5LCBpXSkpO1xuXG4gICAgLy8gUGVyLXJvdyB3cml0ZS10aW1lcy4gT2xkIGZpbGVzICh3cml0dGVuIGJlZm9yZSB0aGlzIGNvbHVtbiBleGlzdGVkKSBmYWxsIGJhY2sgdG8gdGhlIGZpbGUncyBoZWFkZXIgdGltZSAob3IgMCkgZm9yIGV2ZXJ5IHJvdyDigJQgZmluZSwgc2luY2Ugc3VjaCBmaWxlcyBwcmVkYXRlIGNvbmN1cnJlbnQtdGltZSByZXNvbHV0aW9uLlxuICAgIGNvbnN0IHRpbWVzOiBudW1iZXJbXSA9IGNvbEJ5TmFtZS5oYXMoVElNRV9DT0xVTU4pXG4gICAgICAgID8gKGF3YWl0IHJlYWRXaG9sZUNvbHVtbihUSU1FX0NPTFVNTikpLm1hcCh2ID0+IHR5cGVvZiB2ID09PSBcIm51bWJlclwiID8gdiA6IDApXG4gICAgICAgIDoga2V5cy5tYXAoKCkgPT4gaGVhZGVyLm1heFRpbWUgfHwgMCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiBjb25maWcubmFtZSxcbiAgICAgICAgcm93Q291bnQsXG4gICAgICAgIHRvdGFsQnl0ZXM6IGNvbmZpZy50b3RhbEJ5dGVzLFxuICAgICAgICBtaW5UaW1lOiBoZWFkZXIubWluVGltZSB8fCAwLFxuICAgICAgICBtYXhUaW1lOiBoZWFkZXIubWF4VGltZSB8fCAwLFxuICAgICAgICBtaW5LZXk6IGhlYWRlci5taW5LZXksXG4gICAgICAgIG1heEtleTogaGVhZGVyLm1heEtleSxcbiAgICAgICAga2V5cyxcbiAgICAgICAga2V5VGltZXM6IG5ldyBNYXAoa2V5cy5tYXAoKGtleSwgaSkgPT4gW2tleSwgdGltZXNbaV1dKSksXG4gICAgICAgIGNvbHVtbnM6IGhlYWRlci5jb2x1bW5zLmZpbHRlcihjID0+IGMubmFtZSAhPT0gVElNRV9DT0xVTU4pLm1hcChjID0+ICh7IGNvbHVtbjogYy5uYW1lLCBieXRlU2l6ZTogYy5sZW5ndGggfSkpLFxuICAgICAgICBhc3luYyBnZXRDb2x1bW4oY29sdW1uKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZXMgPSBhd2FpdCByZWFkV2hvbGVDb2x1bW4oY29sdW1uKTtcbiAgICAgICAgICAgIHJldHVybiBrZXlzLm1hcCgoa2V5LCBpKSA9PiAoeyBrZXksIHZhbHVlOiB2YWx1ZXNbaV0sIHRpbWU6IHRpbWVzW2ldIH0pKTtcbiAgICAgICAgfSxcbiAgICAgICAgYXN5bmMgZ2V0UmF3Q29sdW1uKGNvbHVtbikge1xuICAgICAgICAgICAgY29uc3QgbWFwID0gbmV3IE1hcDxzdHJpbmcsIFJhd0NlbGw+KCk7XG4gICAgICAgICAgICBjb25zdCBjb2wgPSBjb2xCeU5hbWUuZ2V0KGNvbHVtbik7XG4gICAgICAgICAgICBpZiAoIWNvbCkgcmV0dXJuIG1hcDsgLy8gZmlsZSBsYWNrcyB0aGlzIGNvbHVtbiDihpIgZXZlcnkgY2VsbCBBQlNFTlQgKGZhbGwgdGhyb3VnaClcbiAgICAgICAgICAgIGNvbnN0IGJsb2IgPSBhd2FpdCBjb25maWcuZ2V0UmFuZ2UoZGF0YUJhc2UgKyBjb2wub2Zmc2V0LCBkYXRhQmFzZSArIGNvbC5vZmZzZXQgKyBjb2wubGVuZ3RoKTtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4U2l6ZSA9IDQgKiAocm93Q291bnQgKyAxKSArIHJvd0NvdW50O1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3dDb3VudDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdHlwZSA9IGJsb2JbNCAqIChyb3dDb3VudCArIDEpICsgaV07XG4gICAgICAgICAgICAgICAgaWYgKHR5cGUgPT09IFRZUEVfQUJTRU5UKSBjb250aW51ZTsgLy8gb21pdCBBQlNFTlQgc28gdGhlIGpvaW4gZmFsbHMgdGhyb3VnaFxuICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gYmxvYi5yZWFkVUludDMyTEUoNCAqIGkpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGVuZCA9IGJsb2IucmVhZFVJbnQzMkxFKDQgKiAoaSArIDEpKTtcbiAgICAgICAgICAgICAgICBtYXAuc2V0KGtleXNbaV0sIHsgdHlwZSwgYnl0ZXM6IGJsb2Iuc3ViYXJyYXkoaW5kZXhTaXplICsgc3RhcnQsIGluZGV4U2l6ZSArIGVuZCkgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbWFwO1xuICAgICAgICB9LFxuICAgICAgICBhc3luYyBnZXRDb2x1bW5JbmRleChjb2x1bW4pIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbCA9IGNvbEJ5TmFtZS5nZXQoY29sdW1uKTtcbiAgICAgICAgICAgIGlmICghY29sKSB7XG4gICAgICAgICAgICAgICAgLy8gRmlsZSBsYWNrcyB0aGlzIGNvbHVtbiDigJQgcHJlc2VudCBhbiBhbGwtQUJTRU5UIGluZGV4IHNvIHRoZSBwbGFubmVyIGNhbiB0cmVhdCBpdCB1bmlmb3JtbHkgd2l0aCBmaWxlcyB0aGF0IGhhdmUgdGhlIGNvbHVtbi5cbiAgICAgICAgICAgICAgICBjb25zdCBvZmZzZXRzID0gbmV3IFVpbnQzMkFycmF5KHJvd0NvdW50ICsgMSk7XG4gICAgICAgICAgICAgICAgY29uc3QgdHlwZXMgPSBuZXcgVWludDhBcnJheShyb3dDb3VudCkuZmlsbChUWVBFX0FCU0VOVCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0cyxcbiAgICAgICAgICAgICAgICAgICAgdHlwZXMsXG4gICAgICAgICAgICAgICAgICAgIGFzeW5jIHJlYWRWYWx1ZUJ5dGVzKCkgeyByZXR1cm4gRU1QVFlfQlVGRkVSOyB9LFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBjb2xCYXNlID0gZGF0YUJhc2UgKyBjb2wub2Zmc2V0O1xuICAgICAgICAgICAgY29uc3QgaW5kZXhTaXplID0gNCAqIChyb3dDb3VudCArIDEpICsgcm93Q291bnQ7XG4gICAgICAgICAgICAvLyBPbmUgcmVhZCBwdWxscyBvZmZzZXRzICsgdHlwZXMgKHNtYWxsIOKAlCB+NSBCL3JvdykuIEJsb2NrIGNhY2hlIG1ha2VzIHN1YnNlcXVlbnQgdmFsdWUgcmVhZHMgb2YgbmVhcmJ5IHJvd3MgY2hlYXAuIERlY29kZWQgaW50byBhbGlnbmVkIHR5cGVkIGFycmF5cyBzbyB0aGUgZXhlY3V0b3IgY2FuIGRvIE8oMSkgbG9va3Vwcy5cbiAgICAgICAgICAgIGNvbnN0IGluZGV4QnVmID0gYXdhaXQgY29uZmlnLmdldFJhbmdlKGNvbEJhc2UsIGNvbEJhc2UgKyBpbmRleFNpemUpO1xuICAgICAgICAgICAgY29uc3Qgb2Zmc2V0cyA9IG5ldyBVaW50MzJBcnJheShyb3dDb3VudCArIDEpO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPD0gcm93Q291bnQ7IGkrKykgb2Zmc2V0c1tpXSA9IGluZGV4QnVmLnJlYWRVSW50MzJMRSg0ICogaSk7XG4gICAgICAgICAgICBjb25zdCB0eXBlcyA9IG5ldyBVaW50OEFycmF5KHJvd0NvdW50KTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93Q291bnQ7IGkrKykgdHlwZXNbaV0gPSBpbmRleEJ1Zls0ICogKHJvd0NvdW50ICsgMSkgKyBpXTtcbiAgICAgICAgICAgIGNvbnN0IGRhdGFTdGFydCA9IGNvbEJhc2UgKyBpbmRleFNpemU7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIG9mZnNldHMsXG4gICAgICAgICAgICAgICAgdHlwZXMsXG4gICAgICAgICAgICAgICAgYXN5bmMgcmVhZFZhbHVlQnl0ZXMoc3RhcnRSb3csIGVuZFJvdykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZW5kUm93IDw9IHN0YXJ0Um93KSByZXR1cm4gRU1QVFlfQlVGRkVSO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGFydCA9IG9mZnNldHNbc3RhcnRSb3ddO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlbmQgPSBvZmZzZXRzW2VuZFJvd107XG4gICAgICAgICAgICAgICAgICAgIGlmIChlbmQgPD0gc3RhcnQpIHJldHVybiBFTVBUWV9CVUZGRVI7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjb25maWcuZ2V0UmFuZ2UoZGF0YVN0YXJ0ICsgc3RhcnQsIGRhdGFTdGFydCArIGVuZCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sXG4gICAgICAgIHJvd09mS2V5KGtleSkge1xuICAgICAgICAgICAgcmV0dXJuIGtleUluZGV4LmdldChrZXkpO1xuICAgICAgICB9LFxuICAgICAgICBhc3luYyBnZXRTaW5nbGVGaWVsZChrZXksIGNvbHVtbikge1xuICAgICAgICAgICAgY29uc3Qgcm93ID0ga2V5SW5kZXguZ2V0KGtleSk7XG4gICAgICAgICAgICBpZiAocm93ID09PSB1bmRlZmluZWQpIHJldHVybiBBQlNFTlQ7XG4gICAgICAgICAgICBjb25zdCBjb2wgPSBjb2xCeU5hbWUuZ2V0KGNvbHVtbik7XG4gICAgICAgICAgICBpZiAoIWNvbCkgcmV0dXJuIEFCU0VOVDtcbiAgICAgICAgICAgIGNvbnN0IGNvbEJhc2UgPSBkYXRhQmFzZSArIGNvbC5vZmZzZXQ7XG4gICAgICAgICAgICBjb25zdCBvZmZzZXRzQnVmID0gYXdhaXQgY29uZmlnLmdldFJhbmdlKGNvbEJhc2UgKyA0ICogcm93LCBjb2xCYXNlICsgNCAqIHJvdyArIDgpO1xuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSBvZmZzZXRzQnVmLnJlYWRVSW50MzJMRSgwKTtcbiAgICAgICAgICAgIGNvbnN0IGVuZCA9IG9mZnNldHNCdWYucmVhZFVJbnQzMkxFKDQpO1xuICAgICAgICAgICAgY29uc3QgdHlwZVBvcyA9IGNvbEJhc2UgKyA0ICogKHJvd0NvdW50ICsgMSkgKyByb3c7XG4gICAgICAgICAgICBjb25zdCB0eXBlQnVmID0gYXdhaXQgY29uZmlnLmdldFJhbmdlKHR5cGVQb3MsIHR5cGVQb3MgKyAxKTtcbiAgICAgICAgICAgIGNvbnN0IGRhdGFTdGFydCA9IGNvbEJhc2UgKyA0ICogKHJvd0NvdW50ICsgMSkgKyByb3dDb3VudDtcbiAgICAgICAgICAgIGxldCBieXRlcyA9IEVNUFRZX0JVRkZFUjtcbiAgICAgICAgICAgIGlmIChlbmQgPiBzdGFydCkge1xuICAgICAgICAgICAgICAgIGJ5dGVzID0gYXdhaXQgY29uZmlnLmdldFJhbmdlKGRhdGFTdGFydCArIHN0YXJ0LCBkYXRhU3RhcnQgKyBlbmQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBkZWNvZGVWYWx1ZSh0eXBlQnVmWzBdLCBieXRlcyk7XG4gICAgICAgICAgICBpZiAodmFsdWUgPT09IEFCU0VOVCkgcmV0dXJuIEFCU0VOVDtcbiAgICAgICAgICAgIHJldHVybiB7IHZhbHVlLCB0aW1lOiB0aW1lc1tyb3ddIH07XG4gICAgICAgIH0sXG4gICAgfTtcbn1cbiJdfQ==
|
|
482
|
-
/* _JS_SOURCE_HASH = "
|
|
482
|
+
/* _JS_SOURCE_HASH = "82d0251b3e9ac98a2fd4e094bc751484eaaa299661cd79409a35e50933b674e8"; */
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";
|
|
1
|
+
"use strict"; var console = (function shimConsole() { let baseConsole = globalThis.console; if (typeof window !== "undefined") return baseConsole; let name = __filename.replaceAll("\\", "/").split("/").pop(); let dirName = __dirname.replaceAll("\\", "/").split("/").pop(); let context = { __FILE__: __filename, __DIR__: __dirname, __NAME__: name, __DIRNAME__: dirName }; let newConsole = { ...baseConsole }; for (let shim of ["log", "info", "warn", "error"]) { newConsole[shim] = (...args) => { args.push(context); baseConsole[shim](...args); }; } newConsole.__context = context; return newConsole; })(); "use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true , configurable: true});
|
|
3
3
|
//exports.runPlannedMerge = void 0;
|
|
4
4
|
const format_1 = require("socket-function/src/formatting/format");
|
|
@@ -317,4 +317,4 @@ async function executeBatch(plans, indexesPerSource, sources, sourceNames, write
|
|
|
317
317
|
return outputs;
|
|
318
318
|
}
|
|
319
319
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQnVsa0RhdGFiYXNlTWVyZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJCdWxrRGF0YWJhc2VNZXJnZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxrRUFBcUU7QUFDckUsd0VBQXlFO0FBQ3pFLDZEQVE4QjtBQUU5QixxVEFBcVQ7QUFDclQsTUFBTSwwQkFBMEIsR0FBRyxDQUFDLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUM7QUFFMUQsNkxBQTZMO0FBQzdMLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxDQUFDO0FBRTdCLFNBQVMsUUFBUSxDQUFDLENBQVM7SUFDdkIsSUFBSSxDQUFDLEdBQUcsSUFBSTtRQUFFLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUM3QixJQUFJLENBQUMsR0FBRyxJQUFJLEdBQUcsSUFBSTtRQUFFLE9BQU8sQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztJQUN6RCxJQUFJLENBQUMsR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUk7UUFBRSxPQUFPLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ3ZFLE9BQU8sQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3RELENBQUM7QUE0Q0QsczlCQUFzOUI7QUFDLzhCLEtBQUssVUFBVSxlQUFlLENBQUMsTUFVckM7O0lBQ0csTUFBTSxlQUFlLEdBQUcsTUFBQSxNQUFNLENBQUMsZUFBZSxtQ0FBSSxzQ0FBaUIsQ0FBQztJQUNwRSxNQUFNLGdCQUFnQixHQUFHLE1BQUEsTUFBTSxDQUFDLGdCQUFnQixtQ0FBSSwwQkFBMEIsQ0FBQztJQUMvRSxNQUFNLEdBQUcsR0FB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RSxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDO0lBQzlILENBQUM7SUFDRCxPQUFPLE9BQU8sQ0FBQztBQUNuQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZm9ybWF0TnVtYmVyIH0gZnJvbSBcInNvY2tldC1mdW5jdGlvbi9zcmMvZm9ybWF0dGluZy9mb3JtYXRcIjtcbmltcG9ydCB7IGJsdWUsIG1hZ2VudGEgfSBmcm9tIFwic29ja2V0LWZ1bmN0aW9uL3NyYy9mb3JtYXR0aW5nL2xvZ0NvbG9yc1wiO1xuaW1wb3J0IHtcbiAgICBCYXNlQnVsa0RhdGFiYXNlUmVhZGVyLFxuICAgIENvbHVtbkluZGV4LFxuICAgIGFzc2VtYmxlUGxhbm5lZEZpbGUsXG4gICAgY29sdW1uSW5kZXhCeXRlTGVuZ3RoLFxuICAgIEtFWV9DT0xVTU4sXG4gICAgVEFSR0VUX0ZJTEVfQllURVMsXG4gICAgVFlQRV9BQlNFTlRfVEFHLFxufSBmcm9tIFwiLi9CdWxrRGF0YWJhc2VGb3JtYXRcIjtcblxuLy8gRGVmYXVsdCB0b3RhbCBpbi1mbGlnaHQgYnVmZmVyIGJ1ZGdldCBmb3IgdGhlIGV4ZWN1dG9yOiBob3cgbXVjaCBvdXRwdXQgdmFsdWUtZGF0YSB3ZSBob2xkIGluIG1lbW9yeSBhdCBvbmNlLiBNdWx0aXBsZSBvdXRwdXQgZmlsZXMgKOKJpCBUQVJHRVRfRklMRV9CWVRFUyBlYWNoKSBhcmUgYnVpbHQgdG9nZXRoZXIgaW5zaWRlIHRoaXMgYnVkZ2V0IHNvIHJlYWRpbmcgaW5wdXRzIG9uY2UgYW1vcnRpemVzIHRoZWlyIEkvTyBhY3Jvc3Mgc2V2ZXJhbCBvdXRwdXRzLiBUaWdodGVyIGJ1ZGdldCDihpIgbW9yZSBwYXNzZXMsIGxlc3MgbWVtb3J5LlxuY29uc3QgREVGQVVMVF9PVVRQVVRfQkFUQ0hfQllURVMgPSAyICogMTAyNCAqIDEwMjQgKiAxMDI0O1xuXG4vLyBQZXItdmFsdWUgb24tZGlzayBvdmVyaGVhZCAoNC1ieXRlIG9mZnNldCBlbnRyeSArIDEtYnl0ZSB0eXBlIHRhZykuIFVzZWQgZm9yIHRoZSBwYXJ0aXRpb24tY3V0IHNpemUgZXN0aW1hdGU7IHRoZSBleGVjdXRvciBkb2Vzbid0IHVzZSBpdCAob2Zmc2V0cy90eXBlcyBhcmUgc2l6ZWQgZXhhY3RseSBmcm9tIHRoZSBwbGFuKS5cbmNvbnN0IFBFUl9WQUxVRV9PVkVSSEVBRCA9IDU7XG5cbmZ1bmN0aW9uIGZtdEJ5dGVzKG46IG51bWJlcik6IHN0cmluZyB7XG4gICAgaWYgKG4gPCAxMDI0KSByZXR1cm4gbiArIFwiQlwiO1xuICAgIGlmIChuIDwgMTAyNCAqIDEwMjQpIHJldHVybiAobiAvIDEwMjQpLnRvRml4ZWQoMSkgKyBcIktCXCI7XG4gICAgaWYgKG4gPCAxMDI0ICogMTAyNCAqIDEwMjQpIHJldHVybiAobiAvIDEwMjQgLyAxMDI0KS50b0ZpeGVkKDEpICsgXCJNQlwiO1xuICAgIHJldHVybiAobiAvIDEwMjQgLyAxMDI0IC8gMTAyNCkudG9GaXhlZCgyKSArIFwiR0JcIjtcbn1cblxuLy8gQSBjb250aWd1b3VzIGNvcHkgb3BlcmF0aW9uOiB0YWtlIGBzb3VyY2VFbmRSb3cgLSBzb3VyY2VTdGFydFJvd2AgY29uc2VjdXRpdmUgcm93cyBvZiBvbmUgc291cmNlIGNvbHVtbiwgc3BsaWNlIHRoZSByZXN1bHRpbmcgYnl0ZXMgaW50byB0aGUgb3V0cHV0IGNvbHVtbidzIGRhdGEgc2VjdGlvbiBhdCBvdXRwdXRCeXRlU3RhcnQuIEFkamFjZW50IHBlci1yb3cgZGVjaXNpb25zIGdldCBSTEUnZCBpbnRvIG9uZSBjb3B5IG9wIOKAlCBvbmUgc291cmNlLXNpZGUgcmVhZCArIG1lbWNweSBpbnN0ZWFkIG9mIG9uZSBwZXIgcm93LlxudHlwZSBDb3B5UnVuID0ge1xuICAgIHNvdXJjZUlkeDogbnVtYmVyO1xuICAgIHNvdXJjZVN0YXJ0Um93OiBudW1iZXI7XG4gICAgc291cmNlRW5kUm93OiBudW1iZXI7XG4gICAgb3V0cHV0Qnl0ZVN0YXJ0OiBudW1iZXI7XG4gICAgYnl0ZUxlbmd0aDogbnVtYmVyO1xufTtcblxudHlwZSBQbGFubmVkT3V0cHV0Q29sdW1uID0ge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICAvLyBvZmZzZXRzW2ldLi5vZmZzZXRzW2krMV0gPSByb3cgaSdzIHZhbHVlIGJ5dGUgcmFuZ2UgaW4gdGhlIGNvbHVtbidzIGRhdGEgc2VjdGlvbi4gUG9wdWxhdGVkIGJ5IHRoZSBwbGFubmVyOyB0aGUgZXhlY3V0b3Igd3JpdGVzIGl0IHZlcmJhdGltIGludG8gdGhlIG91dHB1dCBjb2x1bW4gYmxvYi5cbiAgICBvZmZzZXRzOiBVaW50MzJBcnJheTtcbiAgICAvLyBQZXItcm93IHR5cGUgdGFnIChUWVBFX0FCU0VOVCBmb3IgZmFsbC10aHJvdWdoKS4gUG9wdWxhdGVkIGJ5IHRoZSBwbGFubmVyLlxuICAgIHR5cGVzOiBVaW50OEFycmF5O1xuICAgIC8vIFRvdGFsIGJ5dGVzIHRoZSBkYXRhIHNlY3Rpb24gd2lsbCBvY2N1cHkgPSBvZmZzZXRzW3Jvd0NvdW50XS5cbiAgICBkYXRhTGVuZ3RoOiBudW1iZXI7XG4gICAgLy8gUnVuLWxlbmd0aCBlbmNvZGVkIHBlci1yb3cgY29weSBkZWNpc2lvbnMsIGluIG91dHB1dCByb3cgb3JkZXIuIEFCU0VOVCByb3dzIGNvbnRyaWJ1dGUgbm8gcnVuLlxuICAgIHJ1bnM6IENvcHlSdW5bXTtcbn07XG5cbmV4cG9ydCB0eXBlIFBsYW5uZWRPdXRwdXRGaWxlID0ge1xuICAgIGtleXM6IHN0cmluZ1tdO1xuICAgIHRpbWVzOiBudW1iZXJbXTtcbiAgICBtaW5LZXk6IHN0cmluZztcbiAgICBtYXhLZXk6IHN0cmluZztcbiAgICBjb2x1bW5zOiBQbGFubmVkT3V0cHV0Q29sdW1uW107XG4gICAgLy8gU3VtIG9mIGFsbCBjb2x1bW4gZGF0YSBzaXplcyArIGluZGV4IG92ZXJoZWFkICsgaGVhZGVyIGd1ZXNzOyB1c2VkIHRvIGdyb3VwIG91dHB1dHMgaW50byBiYXRjaGVzLlxuICAgIGVzdGltYXRlZEZpbGVCeXRlczogbnVtYmVyO1xuICAgIC8vIHNvdXJjZUlkeCDihpIgbm9uLUFCU0VOVCBjZWxsIGNvdW50IGNvbnRyaWJ1dGVkIHRvIHRoaXMgb3V0cHV0IGZpbGUgKGZvciBsb2dnaW5nIFwid2hlcmUgaXQgY2FtZSBmcm9tXCIpLlxuICAgIHNvdXJjZUNvdW50czogTWFwPG51bWJlciwgbnVtYmVyPjtcbn07XG5cbmV4cG9ydCB0eXBlIFBsYW5uZWRNZXJnZU91dHB1dCA9IHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgbWluS2V5OiBzdHJpbmc7XG4gICAgbWF4S2V5OiBzdHJpbmc7XG4gICAgcm93Q291bnQ6IG51bWJlcjtcbiAgICBzaXplOiBudW1iZXI7XG4gICAgc291cmNlczogTWFwPHN0cmluZywgbnVtYmVyPjtcbn07XG5cbi8vIFBsYW4gYSBtZXJnZSBvdmVyIGBzb3VyY2VzYCBhbmQgZXhlY3V0ZSBpdCwgd3JpdGluZyBvbmUgb3IgbW9yZSBvdXRwdXQgZmlsZXMgdmlhIHRoZSBjYWxsZXIncyBgd3JpdGVGaWxlYC4gVHdvIHBoYXNlczog4oCiIFBsYW5uaW5nOiBsb2FkIG9ubHkgcGVyLWNvbHVtbiBJTkRFWEVTIChvZmZzZXRzICsgdHlwZXMg4oCUIH41IEIvcm93LCBzbWFsbCBldmVuIG9uIDIwR0IgY29sbGVjdGlvbnMpLCBkZXRlcm1pbmUgdGhlIHdpbm5pbmcgY2VsbCBwZXIgKGxpdmUga2V5LCBjb2x1bW4pIGJ5IG5ld2VzdCB3cml0ZS10aW1lICsgbm9uLUFCU0VOVCBmYWxsLXRocm91Z2gsIHNvcnQga2V5cywgcGFydGl0aW9uIGludG8gfnRhcmdldEZpbGVCeXRlcyBvdXRwdXQgZmlsZXMsIGFuZCBwcmUtY29tcHV0ZSBlYWNoIG91dHB1dCBjb2x1bW4ncyBvZmZzZXRzL3R5cGVzIGFycmF5cyBwbHVzIGEgcnVuLWxlbmd0aC1lbmNvZGVkIGNvcHkgcGxhbiAobm8gdmFsdWUgZGF0YSB0b3VjaGVkIHlldCkuIOKAoiBFeGVjdXRlOiBncm91cCBvdXRwdXRzIGludG8gfnRhcmdldEJhdGNoQnl0ZXMgYmF0Y2hlczsgcGVyIGJhdGNoLCBhbGxvY2F0ZSBjb2x1bW4gYmxvYnMgd2l0aCBvZmZzZXRzL3R5cGVzIGFscmVhZHkgZmlsbGVkIGluLCB0aGVuIGl0ZXJhdGUgaW5wdXQgc291cmNlcyBjb3B5aW5nIGNvbnRpZ3VvdXMgYnl0ZSBydW5zIHN0cmFpZ2h0IGludG8gdGhlIG91dHB1dCBidWZmZXJzLiBBIHNvdXJjZSB3aXRoIG5vIGNvbnRyaWJ1dGlvbiB0byB0aGlzIGJhdGNoIGlzIHNraXBwZWQgZW50aXJlbHkuIFJldHVybnMgdGhlIG5ldyBvdXRwdXQgZmlsZSBkZXNjcmlwdG9ycyBwbHVzIGFueSB0b21ic3RvbmVzIHdob3NlIG5ld2VzdCBldmVudCBpcyBzdGlsbCBhIGRlbGV0ZSAoY2FycmllZCBmb3J3YXJkIHdoZW4gb2xkZXIgZmlsZXMgb3V0c2lkZSB0aGUgbWVyZ2UgY291bGQgc3RpbGwgaG9sZCBhIG5vdy1zdGFsZSBzZXQgZm9yIHRoYXQga2V5KS5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5QbGFubmVkTWVyZ2UoY29uZmlnOiB7XG4gICAgc291cmNlczogQmFzZUJ1bGtEYXRhYmFzZVJlYWRlcltdO1xuICAgIHNvdXJjZU5hbWVzOiBzdHJpbmdbXTtcbiAgICBjb2xsZWN0aW9uTmFtZTogc3RyaW5nO1xuICAgIHRhcmdldEZpbGVCeXRlcz86IG51bWJlcjtcbiAgICB0YXJnZXRCYXRjaEJ5dGVzPzogbnVtYmVyO1xuICAgIC8vIFNpbmsgZm9yIHN0ZXAgbGluZXMuIFdoZW4gb21pdHRlZCwgZmFsbHMgYmFjayB0byBhIGJsdWUtcHJlZml4ZWRcbiAgICAvLyBjb25zb2xlLmxvZyBzbyBzdGFuZGFsb25lIGNhbGxlcnMgc3RpbGwgZ2V0IGlkZW50aWZpYWJsZSBvdXRwdXQuXG4gICAgbG9nPzogKGxpbmU6IHN0cmluZykgPT4gdm9pZDtcbiAgICB3cml0ZUZpbGU6IChkYXRhOiBCdWZmZXIpID0+IFByb21pc2U8eyBuYW1lOiBzdHJpbmc7IHNpemU6IG51bWJlciB9Pjtcbn0pOiBQcm9taXNlPHsgb3V0cHV0czogUGxhbm5lZE1lcmdlT3V0cHV0W107IGNhcnJpZWREZWxldGVzOiBNYXA8c3RyaW5nLCBudW1iZXI+OyB1c2VkU291cmNlTmFtZXM6IFNldDxzdHJpbmc+IH0+IHtcbiAgICBjb25zdCB0YXJnZXRGaWxlQnl0ZXMgPSBjb25maWcudGFyZ2V0RmlsZUJ5dGVzID8/IFRBUkdFVF9GSUxFX0JZVEVTO1xuICAgIGNvbnN0IHRhcmdldEJhdGNoQnl0ZXMgPSBjb25maWcudGFyZ2V0QmF0Y2hCeXRlcyA/PyBERUZBVUxUX09VVFBVVF9CQVRDSF9CWVRFUztcbiAgICBjb25zdCBsb2cgPSBjb25maWcubG9nID8/IChsaW5lID0+IGNvbnNvbGUubG9nKGAke2JsdWUoY29uZmlnLmNvbGxlY3Rpb25OYW1lKX0gJHtsaW5lfWApKTtcblxuICAgIC8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCBQaGFzZSAxOiBwbGFuIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCBMb2FkIHBlci1zb3VyY2UgY29sdW1uIGluZGV4ZXMgRklSU1Qgc28gYSBmaWxlIHRoYXQncyBnb25lIChkZWxldGVkIGJldHdlZW4gY2FsbGVyJ3MgbGlzdEZpbGVzIGFuZCBub3cpIGdldHMgY2F1Z2h0IGhlcmUgYW5kIGV4Y2x1ZGVkIGZyb20gdGhlIG1lcmdlIGVudGlyZWx5LiBFYWNoIHNvdXJjZSdzIGxvYWQgaXMgd3JhcHBlZCBpbiBhIHRyeS9jYXRjaDsgb24gZmFpbHVyZSB3ZSBtYXJrIHRoZSBzb3VyY2UgYmFkLCBsb2cgYSBcInNraXBwZWRcIiBsaW5lLCBhbmQgdGhlIHJlc3Qgb2YgcGxhbm5pbmcgKyBleGVjdXRlIHByZXRlbmRzIHRoZSBzb3VyY2UgZG9lc24ndCBleGlzdC4gVGhlIGNhbGxlciBvbmx5IGRlbGV0ZXMgaW5wdXRzIHRoYXQgd2VyZSBhY3R1YWxseSB1c2VkLlxuICAgIGNvbnN0IHNvdXJjZU9rID0gbmV3IEFycmF5PGJvb2xlYW4+KGNvbmZpZy5zb3VyY2VzLmxlbmd0aCkuZmlsbCh0cnVlKTtcbiAgICBjb25zdCBpbmRleGVzUGVyU291cmNlOiBNYXA8c3RyaW5nLCBDb2x1bW5JbmRleD5bXSA9IGF3YWl0IFByb21pc2UuYWxsKGNvbmZpZy5zb3VyY2VzLm1hcChhc3luYyAoc3JjLCBzaSkgPT4ge1xuICAgICAgICBjb25zdCBtYXAgPSBuZXcgTWFwPHN0cmluZywgQ29sdW1uSW5kZXg+KCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChzcmMuY29sdW1uc1xuICAgICAgICAgICAgICAgIC5maWx0ZXIoYyA9PiBjLmNvbHVtbiAhPT0gS0VZX0NPTFVNTilcbiAgICAgICAgICAgICAgICAubWFwKGFzeW5jIGMgPT4geyBtYXAuc2V0KGMuY29sdW1uLCBhd2FpdCBzcmMuZ2V0Q29sdW1uSW5kZXgoYy5jb2x1bW4pKTsgfSkpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBzb3VyY2VPa1tzaV0gPSBmYWxzZTtcbiAgICAgICAgICAgIGxvZyhgJHttYWdlbnRhKFwic2tpcHBlZFwiKX0gJHtjb25maWcuc291cmNlTmFtZXNbc2ldfTogJHsoZSBhcyBFcnJvcikubWVzc2FnZX1gKTtcbiAgICAgICAgICAgIC8vIFN0YWNrIGdvZXMgc3RyYWlnaHQgdG8gY29uc29sZSAobm90IHRoZSBidWZmZXJlZCBzdGVwIGxvZykgc28gdGhlIG1lcmdlIHN1bW1hcnkgc3RheXMgcmVhZGFibGUgYnV0IHdlIGNhbiBzdGlsbCB0cmFjZSB3aGVyZSB0aGUgZmFpbHVyZSBjYW1lIGZyb20uXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgJHtjb25maWcuY29sbGVjdGlvbk5hbWV9IHNraXBwZWQgJHtjb25maWcuc291cmNlTmFtZXNbc2ldfTpgLCAoZSBhcyBFcnJvcikuc3RhY2sgfHwgZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1hcDtcbiAgICB9KSk7XG4gICAgY29uc3QgdXNlZFNvdXJjZU5hbWVzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgZm9yIChsZXQgc2kgPSAwOyBzaSA8IGNvbmZpZy5zb3VyY2VzLmxlbmd0aDsgc2krKykge1xuICAgICAgICBpZiAoc291cmNlT2tbc2ldKSB1c2VkU291cmNlTmFtZXMuYWRkKGNvbmZpZy5zb3VyY2VOYW1lc1tzaV0pO1xuICAgIH1cblxuICAgIC8vIEFnZ3JlZ2F0ZSBrZXlUaW1lcyArIGRlbGV0ZVRpbWVzIGFjcm9zcyBHT09EIHNvdXJjZXMgb25seSAobWF4IHBlciBrZXkpLiBBIGJhZCBzb3VyY2UncyBjYWNoZWQgbWV0YWRhdGEgbWlnaHQgY2xhaW0gYSBrZXkgYXMgbmV3ZXN0LCBidXQgd2UgY2FuJ3QgYWN0dWFsbHkgcmVhZCBpdHMgY2VsbHMg4oCUIGxldHRpbmcgaXQgd2luIHRoZSB0aW1lIHJlc29sdXRpb24gd291bGQganVzdCBkcm9wIHRoYXQga2V5IG91dCBvZiB0aGUgb3V0cHV0LlxuICAgIGNvbnN0IGRlbGV0ZVRpbWUgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xuICAgIGNvbnN0IGtleVRpbWUgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xuICAgIGZvciAobGV0IHNpID0gMDsgc2kgPCBjb25maWcuc291cmNlcy5sZW5ndGg7IHNpKyspIHtcbiAgICAgICAgaWYgKCFzb3VyY2VPa1tzaV0pIGNvbnRpbnVlO1xuICAgICAgICBjb25zdCBzcmMgPSBjb25maWcuc291cmNlc1tzaV07XG4gICAgICAgIGZvciAoY29uc3QgW2ssIHRdIG9mIHNyYy5rZXlUaW1lcykge1xuICAgICAgICAgICAgY29uc3QgcHJldiA9IGtleVRpbWUuZ2V0KGspO1xuICAgICAgICAgICAgaWYgKHByZXYgPT09IHVuZGVmaW5lZCB8fCB0ID4gcHJldikga2V5VGltZS5zZXQoaywgdCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNyYy5kZWxldGVUaW1lcykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBbaywgdF0gb2Ygc3JjLmRlbGV0ZVRpbWVzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJldiA9IGRlbGV0ZVRpbWUuZ2V0KGspO1xuICAgICAgICAgICAgICAgIGlmIChwcmV2ID09PSB1bmRlZmluZWQgfHwgdCA+IHByZXYpIGRlbGV0ZVRpbWUuc2V0KGssIHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gTGl2ZSBrZXlzIChuZXdlc3Qgc2V0IHN0cmljdGx5IG5ld2VyIHRoYW4gbmV3ZXN0IGRlbGV0ZSkgKyB0b21ic3RvbmVzIHRvIGNhcnJ5IGZvcndhcmQgKG5ld2VzdCBldmVudCBpcyBhIGRlbGV0ZSBhbmQgdGhlIG1lcmdlIGRvZXNuJ3QgaW5jbHVkZSB0aGUgb2xkZXN0IGRhdGEg4oCUIHRoYXQncyB0aGUgY2FsbGVyJ3MgY2FsbCkuXG4gICAgY29uc3QgbGl2ZUtleXM6IHN0cmluZ1tdID0gW107XG4gICAgZm9yIChjb25zdCBbaywgdF0gb2Yga2V5VGltZSkge1xuICAgICAgICBjb25zdCBkVCA9IGRlbGV0ZVRpbWUuZ2V0KGspID8/IC1JbmZpbml0eTtcbiAgICAgICAgaWYgKHQgPiBkVCkgbGl2ZUtleXMucHVzaChrKTtcbiAgICB9XG4gICAgY29uc3QgY2FycmllZERlbGV0ZXMgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xuICAgIGZvciAoY29uc3QgW2ssIGRUXSBvZiBkZWxldGVUaW1lKSB7XG4gICAgICAgIGNvbnN0IHNUID0ga2V5VGltZS5nZXQoaykgPz8gLUluZmluaXR5O1xuICAgICAgICBpZiAoZFQgPj0gc1QpIGNhcnJpZWREZWxldGVzLnNldChrLCBkVCk7XG4gICAgfVxuXG4gICAgLy8gQWxsIGRpc3RpbmN0IHZhbHVlIGNvbHVtbnMgZnJvbSBHT09EIHNvdXJjZXMgKEtFWV9DT0xVTU4gZXhjbHVkZWQg4oCUIGl0J3MgYWRkZWQgYXQgZmlsZS1hc3NlbWJseSB0aW1lKS4gT3JkZXI6IGZpcnN0LXNlZW4sIG1hdGNoaW5nIHRoZSBleGlzdGluZyBidWlsZGVycy5cbiAgICBjb25zdCBhbGxDb2x1bW5zOiBzdHJpbmdbXSA9IFtdO1xuICAgIGNvbnN0IHNlZW5Db2xzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgZm9yIChsZXQgc2kgPSAwOyBzaSA8IGNvbmZpZy5zb3VyY2VzLmxlbmd0aDsgc2krKykge1xuICAgICAgICBpZiAoIXNvdXJjZU9rW3NpXSkgY29udGludWU7XG4gICAgICAgIGZvciAoY29uc3QgYyBvZiBjb25maWcuc291cmNlc1tzaV0uY29sdW1ucykge1xuICAgICAgICAgICAgaWYgKGMuY29sdW1uID09PSBLRVlfQ09MVU1OIHx8IHNlZW5Db2xzLmhhcyhjLmNvbHVtbikpIGNvbnRpbnVlO1xuICAgICAgICAgICAgc2VlbkNvbHMuYWRkKGMuY29sdW1uKTtcbiAgICAgICAgICAgIGFsbENvbHVtbnMucHVzaChjLmNvbHVtbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBGb3IgZWFjaCBsaXZlIGtleSwgZm9yIGVhY2ggY29sdW1uLCBmaW5kIHRoZSB3aW5uaW5nIHNvdXJjZTogYW1vbmcgc291cmNlcyB0aGF0IGhhdmUgdGhpcyBrZXksIHRoZSBvbmUgd2hvc2Uga2V5VGltZSBpcyBsYXJnZXN0IEFORCB3aG9zZSBjb2x1bW4taW5kZXggcmVwb3J0cyBub24tQUJTRU5ULiBSZWNvcmQgc291cmNlICsgc291cmNlUm93ICsgYnl0ZUxlbiArIHR5cGUgc28gdGhlIHBsYW5uZXIgY2FuIHNpemUgb2Zmc2V0cyBhbmQgdGhlIGV4ZWN1dG9yIGNhbiBjb3B5IHRoZSBieXRlcy5cbiAgICB0eXBlIENlbGxDaG9pY2UgPSB7IHNvdXJjZUlkeDogbnVtYmVyOyBzb3VyY2VSb3c6IG51bWJlcjsgYnl0ZUxlbjogbnVtYmVyOyB0eXBlOiBudW1iZXIgfTtcbiAgICBjb25zdCBjZWxsc1BlcktleSA9IG5ldyBNYXA8c3RyaW5nLCAoQ2VsbENob2ljZSB8IHVuZGVmaW5lZClbXT4oKTtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBsaXZlS2V5cykge1xuICAgICAgICBjb25zdCBjZWxsczogKENlbGxDaG9pY2UgfCB1bmRlZmluZWQpW10gPSBuZXcgQXJyYXkoYWxsQ29sdW1ucy5sZW5ndGgpO1xuICAgICAgICBmb3IgKGxldCBjaSA9IDA7IGNpIDwgYWxsQ29sdW1ucy5sZW5ndGg7IGNpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbCA9IGFsbENvbHVtbnNbY2ldO1xuICAgICAgICAgICAgbGV0IGJlc3RUaW1lID0gLUluZmluaXR5O1xuICAgICAgICAgICAgbGV0IGJlc3Q6IENlbGxDaG9pY2UgfCB1bmRlZmluZWQ7XG4gICAgICAgICAgICBmb3IgKGxldCBzaSA9IDA7IHNpIDwgY29uZmlnLnNvdXJjZXMubGVuZ3RoOyBzaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFzb3VyY2VPa1tzaV0pIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNyYyA9IGNvbmZpZy5zb3VyY2VzW3NpXTtcbiAgICAgICAgICAgICAgICBjb25zdCB0ID0gc3JjLmtleVRpbWVzLmdldChrZXkpO1xuICAgICAgICAgICAgICAgIGlmICh0ID09PSB1bmRlZmluZWQpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJvd0lkeCA9IHNyYy5yb3dPZktleShrZXkpO1xuICAgICAgICAgICAgICAgIGlmIChyb3dJZHggPT09IHVuZGVmaW5lZCkgY29udGludWU7XG4gICAgICAgICAgICAgICAgY29uc3QgaWR4ID0gaW5kZXhlc1BlclNvdXJjZVtzaV0uZ2V0KGNvbCk7XG4gICAgICAgICAgICAgICAgaWYgKCFpZHgpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNvbnN0IHR5cGUgPSBpZHgudHlwZXNbcm93SWR4XTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZSA9PT0gVFlQRV9BQlNFTlRfVEFHKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBpZiAodCA+IGJlc3RUaW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIGJlc3RUaW1lID0gdDtcbiAgICAgICAgICAgICAgICAgICAgYmVzdCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZUlkeDogc2ksXG4gICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VSb3c6IHJvd0lkeCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVMZW46IGlkeC5vZmZzZXRzW3Jvd0lkeCArIDFdIC0gaWR4Lm9mZnNldHNbcm93SWR4XSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2VsbHNbY2ldID0gYmVzdDtcbiAgICAgICAgfVxuICAgICAgICBjZWxsc1BlcktleS5zZXQoa2V5LCBjZWxscyk7XG4gICAgfVxuXG4gICAgLy8gU29ydCBsaXZlIGtleXMgbGV4aWNvZ3JhcGhpY2FsbHkgc28gZWFjaCBvdXRwdXQgZmlsZSBpcyBrZXktY29udGlndW91cyAodGlnaHQgbWluS2V5L21heEtleSArIGZhc3Qgc2luZ2xlLWtleSByZWFkcyB2aWEgaGVhZGVyIHNraXApLlxuICAgIGxpdmVLZXlzLnNvcnQoKGEsIGIpID0+IGEgPCBiID8gLTEgOiBhID4gYiA/IDEgOiAwKTtcblxuICAgIC8vIFBlci1rZXkgZXN0aW1hdGVkIGJ5dGVzIGZvciBwYXJ0aXRpb24gY3V0dGluZzogS0VZX0NPTFVNTiBjZWxsICsgcGVyIHZhbHVlLWNvbHVtbiBjZWxsIChieXRlcyArIDVCIG92ZXJoZWFkKSArIFRJTUVfQ09MVU1OIGNlbGwuIFJvdWdoIOKAlCBvbmx5IG5lZWRzIHRvIGtlZXAgZWFjaCBvdXRwdXQgbmVhciB0aGUgdGFyZ2V0LlxuICAgIGZ1bmN0aW9uIGtleVRvdGFsQnl0ZXMoa2V5OiBzdHJpbmcpOiBudW1iZXIge1xuICAgICAgICBjb25zdCBjZWxscyA9IGNlbGxzUGVyS2V5LmdldChrZXkpITtcbiAgICAgICAgbGV0IHRvdGFsID0ga2V5Lmxlbmd0aCAqIDIgKyBQRVJfVkFMVUVfT1ZFUkhFQUQ7XG4gICAgICAgIGZvciAoY29uc3QgY2VsbCBvZiBjZWxscykgdG90YWwgKz0gKGNlbGwgPyBjZWxsLmJ5dGVMZW4gOiAwKSArIFBFUl9WQUxVRV9PVkVSSEVBRDtcbiAgICAgICAgdG90YWwgKz0gOCArIFBFUl9WQUxVRV9PVkVSSEVBRDtcbiAgICAgICAgcmV0dXJuIHRvdGFsO1xuICAgIH1cblxuICAgIC8vIFdhbGsgc29ydGVkIGtleXMsIGN1dCBlYWNoIGZpbGUgd2hlbiBhY2N1bXVsYXRlZCBieXRlcyB3b3VsZCBleGNlZWQgdGFyZ2V0RmlsZUJ5dGVzLiBBIHNpbmdsZSBrZXkgbGFyZ2VyIHRoYW4gdGhlIHRhcmdldCBzdGlsbCBiZWNvbWVzIGl0cyBvd24gKG92ZXJzaXplZCkgZmlsZSDigJQgd2UgbmV2ZXIgc3BsaXQgd2l0aGluIGEga2V5LlxuICAgIGNvbnN0IGZpbGVLZXlSYW5nZXM6IHsgc3RhcnQ6IG51bWJlcjsgZW5kOiBudW1iZXIgfVtdID0gW107XG4gICAge1xuICAgICAgICBsZXQgY2h1bmtTdGFydCA9IDA7XG4gICAgICAgIGxldCBjaHVua0J5dGVzID0gMDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaXZlS2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3Qga2IgPSBrZXlUb3RhbEJ5dGVzKGxpdmVLZXlzW2ldKTtcbiAgICAgICAgICAgIGlmIChpID4gY2h1bmtTdGFydCAmJiBjaHVua0J5dGVzICsga2IgPiB0YXJnZXRGaWxlQnl0ZXMpIHtcbiAgICAgICAgICAgICAgICBmaWxlS2V5UmFuZ2VzLnB1c2goeyBzdGFydDogY2h1bmtTdGFydCwgZW5kOiBpIH0pO1xuICAgICAgICAgICAgICAgIGNodW5rU3RhcnQgPSBpO1xuICAgICAgICAgICAgICAgIGNodW5rQnl0ZXMgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2h1bmtCeXRlcyArPSBrYjtcbiAgICAgICAgfVxuICAgICAgICBpZiAobGl2ZUtleXMubGVuZ3RoID4gY2h1bmtTdGFydCkgZmlsZUtleVJhbmdlcy5wdXNoKHsgc3RhcnQ6IGNodW5rU3RhcnQsIGVuZDogbGl2ZUtleXMubGVuZ3RoIH0pO1xuICAgIH1cblxuICAgIC8vIEJ1aWxkIHBlci1maWxlIHBsYW5zOiBvZmZzZXRzL3R5cGVzL2NvcHktcnVucyBwZXIgY29sdW1uLlxuICAgIGNvbnN0IHBsYW5zID0gZmlsZUtleVJhbmdlcy5tYXAocmFuZ2UgPT4gYnVpbGRPdXRwdXRQbGFuKHJhbmdlLCBsaXZlS2V5cywgY2VsbHNQZXJLZXksIGFsbENvbHVtbnMsIGtleVRpbWUpKTtcblxuICAgIGxvZyhgJHttYWdlbnRhKFwicGxhblwiKX06ICR7Zm9ybWF0TnVtYmVyKGxpdmVLZXlzLmxlbmd0aCl9IGxpdmUga2V5cywgJHtwbGFucy5sZW5ndGh9IG91dHB1dCBmaWxlKHMpLCAke2Zvcm1hdE51bWJlcihjYXJyaWVkRGVsZXRlcy5zaXplKX0gdG9tYnN0b25lcyBjYXJyaWVkYCk7XG5cbiAgICAvLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgUGhhc2UgMjogZXhlY3V0ZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgR3JvdXAgb3V0cHV0IGZpbGVzIGludG8gYmF0Y2hlcyB0aGF0IGZpdCB3aXRoaW4gdGFyZ2V0QmF0Y2hCeXRlcyBzbyB3ZSByZWFkIGlucHV0cyBvbmNlIHBlciBiYXRjaCAoYW5kIHNraXAgaW5wdXRzIHRoYXQgY29udHJpYnV0ZSBub3RoaW5nIHRvIHRoaXMgYmF0Y2gpLlxuICAgIGNvbnN0IGJhdGNoZXM6IFBsYW5uZWRPdXRwdXRGaWxlW11bXSA9IFtdO1xuICAgIHtcbiAgICAgICAgbGV0IHN0YXJ0ID0gMDtcbiAgICAgICAgd2hpbGUgKHN0YXJ0IDwgcGxhbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICBsZXQgZW5kID0gc3RhcnQgKyAxO1xuICAgICAgICAgICAgbGV0IHRvdGFsID0gcGxhbnNbc3RhcnRdLmVzdGltYXRlZEZpbGVCeXRlcztcbiAgICAgICAgICAgIHdoaWxlIChlbmQgPCBwbGFucy5sZW5ndGggJiYgdG90YWwgKyBwbGFuc1tlbmRdLmVzdGltYXRlZEZpbGVCeXRlcyA8PSB0YXJnZXRCYXRjaEJ5dGVzKSB7XG4gICAgICAgICAgICAgICAgdG90YWwgKz0gcGxhbnNbZW5kXS5lc3RpbWF0ZWRGaWxlQnl0ZXM7XG4gICAgICAgICAgICAgICAgZW5kKys7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBiYXRjaGVzLnB1c2gocGxhbnMuc2xpY2Uoc3RhcnQsIGVuZCkpO1xuICAgICAgICAgICAgc3RhcnQgPSBlbmQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBvdXRwdXRzOiBQbGFubmVkTWVyZ2VPdXRwdXRbXSA9IFtdO1xuICAgIGZvciAobGV0IGJpID0gMDsgYmkgPCBiYXRjaGVzLmxlbmd0aDsgYmkrKykge1xuICAgICAgICBjb25zdCBiYXRjaCA9IGJhdGNoZXNbYmldO1xuICAgICAgICBjb25zdCBiYXRjaEJ5dGVzID0gYmF0Y2gucmVkdWNlKChhLCBwKSA9PiBhICsgcC5lc3RpbWF0ZWRGaWxlQnl0ZXMsIDApO1xuICAgICAgICBsb2coYCR7bWFnZW50YShcImJhdGNoXCIpfSAke2JpICsgMX0vJHtiYXRjaGVzLmxlbmd0aH06ICR7YmF0Y2gubGVuZ3RofSBvdXRwdXQgZmlsZShzKSwgfiR7Zm10Qnl0ZXMoYmF0Y2hCeXRlcyl9IGJ1ZGdldGApO1xuICAgICAgICBjb25zdCBiYXRjaE91dHB1dHMgPSBhd2FpdCBleGVjdXRlQmF0Y2goYmF0Y2gsIGluZGV4ZXNQZXJTb3VyY2UsIGNvbmZpZy5zb3VyY2VzLCBjb25maWcuc291cmNlTmFtZXMsIGNvbmZpZy53cml0ZUZpbGUsIGxvZyk7XG4gICAgICAgIG91dHB1dHMucHVzaCguLi5iYXRjaE91dHB1dHMpO1xuICAgIH1cbiAgICBjb25zdCB3cml0dGVuQnl0ZXMgPSBvdXRwdXRzLnJlZHVjZSgoYSwgbykgPT4gYSArIG8uc2l6ZSwgMCk7XG4gICAgbG9nKGAke21hZ2VudGEoXCJleGVjdXRlXCIpfTogJHtvdXRwdXRzLmxlbmd0aH0gZmlsZShzKSwgJHtmbXRCeXRlcyh3cml0dGVuQnl0ZXMpfSB3cml0dGVuYCk7XG5cbiAgICByZXR1cm4geyBvdXRwdXRzLCBjYXJyaWVkRGVsZXRlcywgdXNlZFNvdXJjZU5hbWVzIH07XG59XG5cbmZ1bmN0aW9uIGJ1aWxkT3V0cHV0UGxhbihcbiAgICByYW5nZTogeyBzdGFydDogbnVtYmVyOyBlbmQ6IG51bWJlciB9LFxuICAgIGxpdmVLZXlzOiBzdHJpbmdbXSxcbiAgICBjZWxsc1BlcktleTogTWFwPHN0cmluZywgKHsgc291cmNlSWR4OiBudW1iZXI7IHNvdXJjZVJvdzogbnVtYmVyOyBieXRlTGVuOiBudW1iZXI7IHR5cGU6IG51bWJlciB9IHwgdW5kZWZpbmVkKVtdPixcbiAgICBhbGxDb2x1bW5zOiBzdHJpbmdbXSxcbiAgICBrZXlUaW1lOiBNYXA8c3RyaW5nLCBudW1iZXI+LFxuKTogUGxhbm5lZE91dHB1dEZpbGUge1xuICAgIGNvbnN0IGtleXMgPSBsaXZlS2V5cy5zbGljZShyYW5nZS5zdGFydCwgcmFuZ2UuZW5kKTtcbiAgICBjb25zdCByb3dDb3VudCA9IGtleXMubGVuZ3RoO1xuICAgIGNvbnN0IHRpbWVzID0ga2V5cy5tYXAoayA9PiBrZXlUaW1lLmdldChrKSA/PyAwKTtcbiAgICBjb25zdCBzb3VyY2VDb3VudHMgPSBuZXcgTWFwPG51bWJlciwgbnVtYmVyPigpO1xuXG4gICAgY29uc3QgY29sdW1uczogUGxhbm5lZE91dHB1dENvbHVtbltdID0gYWxsQ29sdW1ucy5tYXAoKGNvbE5hbWUsIGNpKSA9PiB7XG4gICAgICAgIGNvbnN0IG9mZnNldHMgPSBuZXcgVWludDMyQXJyYXkocm93Q291bnQgKyAxKTtcbiAgICAgICAgY29uc3QgdHlwZXMgPSBuZXcgVWludDhBcnJheShyb3dDb3VudCk7XG4gICAgICAgIGNvbnN0IHJ1bnM6IENvcHlSdW5bXSA9IFtdO1xuICAgICAgICBsZXQgb3V0cHV0Qnl0ZSA9IDA7XG4gICAgICAgIGxldCBjdXJyZW50UnVuOiBDb3B5UnVuIHwgdW5kZWZpbmVkO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93Q291bnQ7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgY2VsbCA9IGNlbGxzUGVyS2V5LmdldChrZXlzW2ldKSFbY2ldO1xuICAgICAgICAgICAgb2Zmc2V0c1tpXSA9IG91dHB1dEJ5dGU7XG4gICAgICAgICAgICBpZiAoIWNlbGwpIHtcbiAgICAgICAgICAgICAgICB0eXBlc1tpXSA9IFRZUEVfQUJTRU5UX1RBRztcbiAgICAgICAgICAgICAgICAvLyBBQlNFTlQgY29udHJpYnV0ZXMgbm90aGluZyB0byB0aGUgZGF0YSBzZWN0aW9uIGFuZCBicmVha3MgYW55IGV4dGVuZGluZyBydW4uXG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRSdW4pIHsgcnVucy5wdXNoKGN1cnJlbnRSdW4pOyBjdXJyZW50UnVuID0gdW5kZWZpbmVkOyB9XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0eXBlc1tpXSA9IGNlbGwudHlwZTtcbiAgICAgICAgICAgIHNvdXJjZUNvdW50cy5zZXQoY2VsbC5zb3VyY2VJZHgsIChzb3VyY2VDb3VudHMuZ2V0KGNlbGwuc291cmNlSWR4KSA/PyAwKSArIDEpO1xuICAgICAgICAgICAgLy8gUkxFOiBleHRlbmQgdGhlIGN1cnJlbnQgcnVuIGlmZiB0aGUgbmV4dCBjZWxsIGlzIHRoZSBuZXh0IHJvdyBvZiB0aGUgc2FtZSBzb3VyY2UgKGl0cyBzb3VyY2Utc2lkZSBieXRlcyBzaXQgaW1tZWRpYXRlbHkgYWZ0ZXIsIHNvIG9uZSByZWFkIHN1ZmZpY2VzKSBBTkQgbm9uLUFCU0VOVCAod2UgbmV2ZXIgbGFuZGVkIGluIHRoZSBicmVhay1wYXRoIGFib3ZlKS5cbiAgICAgICAgICAgIGlmIChjdXJyZW50UnVuICYmIGN1cnJlbnRSdW4uc291cmNlSWR4ID09PSBjZWxsLnNvdXJjZUlkeCAmJiBjdXJyZW50UnVuLnNvdXJjZUVuZFJvdyA9PT0gY2VsbC5zb3VyY2VSb3cpIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50UnVuLnNvdXJjZUVuZFJvdyA9IGNlbGwuc291cmNlUm93ICsgMTtcbiAgICAgICAgICAgICAgICBjdXJyZW50UnVuLmJ5dGVMZW5ndGggKz0gY2VsbC5ieXRlTGVuO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudFJ1bikgcnVucy5wdXNoKGN1cnJlbnRSdW4pO1xuICAgICAgICAgICAgICAgIGN1cnJlbnRSdW4gPSB7XG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZUlkeDogY2VsbC5zb3VyY2VJZHgsXG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZVN0YXJ0Um93OiBjZWxsLnNvdXJjZVJvdyxcbiAgICAgICAgICAgICAgICAgICAgc291cmNlRW5kUm93OiBjZWxsLnNvdXJjZVJvdyArIDEsXG4gICAgICAgICAgICAgICAgICAgIG91dHB1dEJ5dGVTdGFydDogb3V0cHV0Qnl0ZSxcbiAgICAgICAgICAgICAgICAgICAgYnl0ZUxlbmd0aDogY2VsbC5ieXRlTGVuLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvdXRwdXRCeXRlICs9IGNlbGwuYnl0ZUxlbjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY3VycmVudFJ1bikgcnVucy5wdXNoKGN1cnJlbnRSdW4pO1xuICAgICAgICBvZmZzZXRzW3Jvd0NvdW50XSA9IG91dHB1dEJ5dGU7XG5cbiAgICAgICAgcmV0dXJuIHsgbmFtZTogY29sTmFtZSwgb2Zmc2V0cywgdHlwZXMsIGRhdGFMZW5ndGg6IG91dHB1dEJ5dGUsIHJ1bnMgfTtcbiAgICB9KTtcblxuICAgIC8vIEZpbGUgc2l6ZSBlc3RpbWF0ZTogS0VZX0NPTFVNTiBibG9iICsgdmFsdWUgY29sdW1uIGJsb2JzICsgVElNRV9DT0xVTU4gYmxvYiArIGhlYWRlciBndWVzcy4gVXNlZCB0byBiYXRjaCBvdXRwdXQgZmlsZXM7IG9ubHkgbmVlZHMgdG8gYmUgY2xvc2UsIG5vdCBleGFjdC5cbiAgICBsZXQgZXN0aW1hdGVkRmlsZUJ5dGVzID0gNCArIDIwNDg7XG4gICAgbGV0IGtleUJ5dGVzID0gMDtcbiAgICBmb3IgKGNvbnN0IGsgb2Yga2V5cykga2V5Qnl0ZXMgKz0gay5sZW5ndGggKiAyO1xuICAgIGVzdGltYXRlZEZpbGVCeXRlcyArPSBjb2x1bW5JbmRleEJ5dGVMZW5ndGgocm93Q291bnQpICsga2V5Qnl0ZXM7XG4gICAgZm9yIChjb25zdCBjb2wgb2YgY29sdW1ucykgZXN0aW1hdGVkRmlsZUJ5dGVzICs9IGNvbHVtbkluZGV4Qnl0ZUxlbmd0aChyb3dDb3VudCkgKyBjb2wuZGF0YUxlbmd0aDtcbiAgICBlc3RpbWF0ZWRGaWxlQnl0ZXMgKz0gY29sdW1uSW5kZXhCeXRlTGVuZ3RoKHJvd0NvdW50KSArIHJvd0NvdW50ICogODtcblxuICAgIHJldHVybiB7XG4gICAgICAgIGtleXMsXG4gICAgICAgIHRpbWVzLFxuICAgICAgICBtaW5LZXk6IGtleXNbMF0gPz8gXCJcIixcbiAgICAgICAgbWF4S2V5OiBrZXlzW3Jvd0NvdW50IC0gMV0gPz8gXCJcIixcbiAgICAgICAgY29sdW1ucyxcbiAgICAgICAgZXN0aW1hdGVkRmlsZUJ5dGVzLFxuICAgICAgICBzb3VyY2VDb3VudHMsXG4gICAgfTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZXhlY3V0ZUJhdGNoKFxuICAgIHBsYW5zOiBQbGFubmVkT3V0cHV0RmlsZVtdLFxuICAgIGluZGV4ZXNQZXJTb3VyY2U6IE1hcDxzdHJpbmcsIENvbHVtbkluZGV4PltdLFxuICAgIHNvdXJjZXM6IEJhc2VCdWxrRGF0YWJhc2VSZWFkZXJbXSxcbiAgICBzb3VyY2VOYW1lczogc3RyaW5nW10sXG4gICAgd3JpdGVGaWxlOiAoZGF0YTogQnVmZmVyKSA9PiBQcm9taXNlPHsgbmFtZTogc3RyaW5nOyBzaXplOiBudW1iZXIgfT4sXG4gICAgbG9nOiAobGluZTogc3RyaW5nKSA9PiB2b2lkLFxuKTogUHJvbWlzZTxQbGFubmVkTWVyZ2VPdXRwdXRbXT4ge1xuICAgIC8vIEFsbG9jYXRlIG9uZSBiaWcgYnVmZmVyIHBlciAob3V0cHV0IGZpbGUsIGNvbHVtbikg4oCUIG9mZnNldHMgKyB0eXBlcyBhcmUgd3JpdHRlbiBpbW1lZGlhdGVseSBmcm9tIHRoZSBwbGFuLCB0aGUgZGF0YSBzZWN0aW9uIGlzIGZpbGxlZCBiZWxvdyBieSB0aGUgcGVyLXNvdXJjZSBjb3B5IGxvb3AuXG4gICAgdHlwZSBDb2x1bW5CdWZmZXIgPSB7IG5hbWU6IHN0cmluZzsgYmxvYjogQnVmZmVyOyBkYXRhU3RhcnQ6IG51bWJlciB9O1xuICAgIGNvbnN0IGJsb2JzUGVyRmlsZTogQ29sdW1uQnVmZmVyW11bXSA9IHBsYW5zLm1hcChwbGFuID0+IHBsYW4uY29sdW1ucy5tYXAoY29sID0+IHtcbiAgICAgICAgY29uc3QgaW5kZXhTaXplID0gY29sdW1uSW5kZXhCeXRlTGVuZ3RoKGNvbC5vZmZzZXRzLmxlbmd0aCAtIDEpO1xuICAgICAgICBjb25zdCBibG9iID0gQnVmZmVyLmFsbG9jKGluZGV4U2l6ZSArIGNvbC5kYXRhTGVuZ3RoKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb2wub2Zmc2V0cy5sZW5ndGg7IGkrKykgYmxvYi53cml0ZVVJbnQzMkxFKGNvbC5vZmZzZXRzW2ldLCBpICogNCk7XG4gICAgICAgIGJsb2Iuc2V0KGNvbC50eXBlcywgNCAqIGNvbC5vZmZzZXRzLmxlbmd0aCk7XG4gICAgICAgIHJldHVybiB7IG5hbWU6IGNvbC5uYW1lLCBibG9iLCBkYXRhU3RhcnQ6IGluZGV4U2l6ZSB9O1xuICAgIH0pKTtcblxuICAgIC8vIEZvciBlYWNoIHNvdXJjZSwgY29weSBpdHMgYnl0ZSBydW5zIGludG8gZXZlcnkgb3V0cHV0IGNvbHVtbiB3aG9zZSBwbGFuIHJlZmVyZW5jZXMgaXQuIEEgc291cmNlIHRoYXQncyBub3QgcmVmZXJlbmNlZCBieSBhbnkgY29sdW1uIGluIHRoaXMgYmF0Y2ggaXMgc2tpcHBlZCBlbnRpcmVseSDigJQgdGhhdCdzIHRoZSBwb2ludCBvZiB0aGUgYmF0Y2ggc2hhcGU6IHJlYWQgMjBHQiBvZiBpbnB1dHMgb25seSBvbmNlIGZvciB0aGUgd2hvbGUgcGFzcywgbm90IG9uY2UgcGVyIG91dHB1dC5cbiAgICBmb3IgKGxldCBzaSA9IDA7IHNpIDwgc291cmNlcy5sZW5ndGg7IHNpKyspIHtcbiAgICAgICAgbGV0IGNvbnRyaWJ1dGVzID0gZmFsc2U7XG4gICAgICAgIGZvciAobGV0IGZpID0gMDsgZmkgPCBwbGFucy5sZW5ndGggJiYgIWNvbnRyaWJ1dGVzOyBmaSsrKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNvbCBvZiBwbGFuc1tmaV0uY29sdW1ucykge1xuICAgICAgICAgICAgICAgIGlmIChjb2wucnVucy5zb21lKHIgPT4gci5zb3VyY2VJZHggPT09IHNpKSkgeyBjb250cmlidXRlcyA9IHRydWU7IGJyZWFrOyB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFjb250cmlidXRlcykgY29udGludWU7XG5cbiAgICAgICAgbGV0IGJ5dGVzUmVhZCA9IDA7XG4gICAgICAgIGZvciAobGV0IGZpID0gMDsgZmkgPCBwbGFucy5sZW5ndGg7IGZpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHBsYW4gPSBwbGFuc1tmaV07XG4gICAgICAgICAgICBmb3IgKGxldCBjaSA9IDA7IGNpIDwgcGxhbi5jb2x1bW5zLmxlbmd0aDsgY2krKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbCA9IHBsYW4uY29sdW1uc1tjaV07XG4gICAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0ID0gYmxvYnNQZXJGaWxlW2ZpXVtjaV07XG4gICAgICAgICAgICAgICAgY29uc3QgY29sSW5kZXggPSBpbmRleGVzUGVyU291cmNlW3NpXS5nZXQoY29sLm5hbWUpO1xuICAgICAgICAgICAgICAgIGlmICghY29sSW5kZXgpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgcnVuIG9mIGNvbC5ydW5zKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChydW4uc291cmNlSWR4ICE9PSBzaSkgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGJ5dGVzID0gYXdhaXQgY29sSW5kZXgucmVhZFZhbHVlQnl0ZXMocnVuLnNvdXJjZVN0YXJ0Um93LCBydW4uc291cmNlRW5kUm93KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGJ5dGVzLmxlbmd0aCAhPT0gcnVuLmJ5dGVMZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgJHtydW4uYnl0ZUxlbmd0aH0gYnl0ZXMgZnJvbSBzb3VyY2UgIyR7c2l9ICgke3NvdXJjZU5hbWVzW3NpXX0pIGNvbHVtbiAke2NvbC5uYW1lfSByb3dzIFske3J1bi5zb3VyY2VTdGFydFJvd30sICR7cnVuLnNvdXJjZUVuZFJvd30pLCBnb3QgJHtieXRlcy5sZW5ndGh9YCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnl0ZXMuY29weSh0YXJnZXQuYmxvYiwgdGFyZ2V0LmRhdGFTdGFydCArIHJ1bi5vdXRwdXRCeXRlU3RhcnQpO1xuICAgICAgICAgICAgICAgICAgICBieXRlc1JlYWQgKz0gYnl0ZXMubGVuZ3RoO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsb2coYCR7bWFnZW50YShcImlucHV0XCIpfSAke3NpICsgMX0vJHtzb3VyY2VzLmxlbmd0aH0gJHtzb3VyY2VOYW1lc1tzaV19OiAke2ZtdEJ5dGVzKGJ5dGVzUmVhZCl9IHJlYWRgKTtcbiAgICB9XG5cbiAgICAvLyBBc3NlbWJsZSArIHdyaXRlIGVhY2ggb3V0cHV0IGZpbGUgaW4gdGhpcyBiYXRjaC5cbiAgICBjb25zdCBvdXRwdXRzOiBQbGFubmVkTWVyZ2VPdXRwdXRbXSA9IFtdO1xuICAgIGZvciAobGV0IGZpID0gMDsgZmkgPCBwbGFucy5sZW5ndGg7IGZpKyspIHtcbiAgICAgICAgY29uc3QgcGxhbiA9IHBsYW5zW2ZpXTtcbiAgICAgICAgY29uc3QgdmFsdWVDb2x1bW5zID0gYmxvYnNQZXJGaWxlW2ZpXS5tYXAoYiA9PiAoeyBuYW1lOiBiLm5hbWUsIGJsb2I6IGIuYmxvYiB9KSk7XG4gICAgICAgIGNvbnN0IGZpbGVCdWYgPSBhc3NlbWJsZVBsYW5uZWRGaWxlKHsgdmFsdWVDb2x1bW5zLCBrZXlzOiBwbGFuLmtleXMsIHRpbWVzOiBwbGFuLnRpbWVzIH0pO1xuICAgICAgICBjb25zdCB7IG5hbWUsIHNpemUgfSA9IGF3YWl0IHdyaXRlRmlsZShmaWxlQnVmKTtcbiAgICAgICAgY29uc3Qgc291cmNlc05hbWVkID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcbiAgICAgICAgZm9yIChjb25zdCBbc2ksIG5dIG9mIHBsYW4uc291cmNlQ291bnRzKSBzb3VyY2VzTmFtZWQuc2V0KHNvdXJjZU5hbWVzW3NpXSwgbik7XG4gICAgICAgIGxvZyhgJHttYWdlbnRhKFwib3V0cHV0XCIpfSAke2ZpICsgMX0vJHtwbGFucy5sZW5ndGh9OiAke2Zvcm1hdE51bWJlcihwbGFuLmtleXMubGVuZ3RoKX0gcm93cyBmcm9tICR7cGxhbi5zb3VyY2VDb3VudHMuc2l6ZX0gaW5wdXQocyksICR7Zm10Qnl0ZXMoc2l6ZSl9YCk7XG4gICAgICAgIG91dHB1dHMucHVzaCh7IG5hbWUsIG1pbktleTogcGxhbi5taW5LZXksIG1heEtleTogcGxhbi5tYXhLZXksIHJvd0NvdW50OiBwbGFuLmtleXMubGVuZ3RoLCBzaXplLCBzb3VyY2VzOiBzb3VyY2VzTmFtZWQgfSk7XG4gICAgfVxuICAgIHJldHVybiBvdXRwdXRzO1xufVxuIl19
|
|
320
|
-
/* _JS_SOURCE_HASH = "
|
|
320
|
+
/* _JS_SOURCE_HASH = "be17fcd0b65e0050f3d12f773a26108a266b45946a939d5a73c14b7c7bf89a4c"; */
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";
|
|
1
|
+
"use strict"; var console = (function shimConsole() { let baseConsole = globalThis.console; if (typeof window !== "undefined") return baseConsole; let name = __filename.replaceAll("\\", "/").split("/").pop(); let dirName = __dirname.replaceAll("\\", "/").split("/").pop(); let context = { __FILE__: __filename, __DIR__: __dirname, __NAME__: name, __DIRNAME__: dirName }; let newConsole = { ...baseConsole }; for (let shim of ["log", "info", "warn", "error"]) { newConsole[shim] = (...args) => { args.push(context); baseConsole[shim](...args); }; } newConsole.__context = context; return newConsole; })(); "use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true , configurable: true});
|
|
3
3
|
//exports.nullJoin = exports.READER_SIGNALS = exports.BulkDatabaseReader = void 0;
|
|
4
4
|
const WriteOverlay_1 = require("./WriteOverlay");
|
|
@@ -295,4 +295,4 @@ class BulkDatabaseReader {
|
|
|
295
295
|
exports.BulkDatabaseReader = BulkDatabaseReader;
|
|
296
296
|
exports.READER_SIGNALS = { LOAD: LOAD_SIGNAL, OVERLAY: OVERLAY_SIGNAL };
|
|
297
297
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQnVsa0RhdGFiYXNlUmVhZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiQnVsa0RhdGFiYXNlUmVhZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLGlEQUF1RDtBQUV2RCxrRUFBaUY7QUFDakYsd0VBQXFFO0FBRXJFLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEMsTUFBTSxXQUFXLEdBQUcsSUFBSSxHQUFHLE1BQU0sQ0FBQztBQUNsQyxNQUFNLGNBQWMsR0FBRyxJQUFJLEdBQUcsU0FBUyxDQUFDO0FBQ3hDLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxHQUFHLFlBQVksQ0FBQztBQUM5QyxNQUFNLDhCQUE4QixHQUFHLEVBQUUsQ0FBQztBQUUxQyxTQUFTLFFBQVEsQ0FBQyxDQUFTLEVBQUUsQ0FBUztJQUNsQyxPQUFPLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQ3hCLENBQUM7QUEyUVEsNEJBQVE7QUFsUWpCLDJVQUEyVTtBQUMzVSxNQUFhLGtCQUFrQjtJQUMzQixZQUE2QixHQUFpQjtRQUFqQixRQUFHLEdBQUgsR0FBRyxDQUFjO1FBRzlCLFlBQU8sR0FBRyxJQUFJLDJCQUFZLEVBQUUsQ0FBQztRQUVyQyxZQUFPLEdBQUcsQ0FBQyxDQUFDO1FBQ1osZ0JBQVcsR0FBRyxJQUFJLEdBQUcsRUFBMkQsQ0FBQztRQUVqRixtQkFBYyxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7UUFFbkMsd0JBQW1CLEdBQUcsQ0FBQyxDQUFDO1FBQ3hCLG9CQUFlLEdBQUcsQ0FBQyxDQUFDO1FBb0Q1QixtTEFBbUw7UUFDM0ssb0JBQWUsR0FBRyxDQUFDLENBQUM7SUFoRXNCLENBQUM7SUFhbkQsSUFBSSxJQUFJLEtBQWEsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDNUMsSUFBSSxJQUFJLEtBQW1CLE9BQU8sSUFBSSxDQUFDLEdB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TyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDekMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLEdBQUcsS0FBSyxNQUFNLENBQUMsSUFBSSxPQUFPO1lBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDekYsQ0FBQztDQUNKO0FBOVBELGdEQThQQztBQUVZLFFBQUEsY0FBYyxHQUFHLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBMb2FkZWRJbmRleCB9IGZyb20gXCIuL0xvYWRlZEluZGV4XCI7XG5pbXBvcnQgeyBERUxFVEVELCBXcml0ZU92ZXJsYXkgfSBmcm9tIFwiLi9Xcml0ZU92ZXJsYXlcIjtcbmltcG9ydCB0eXBlIHsgUmVhY3RpdmVEZXBzIH0gZnJvbSBcIi4vQnVsa0RhdGFiYXNlQmFzZVwiO1xuaW1wb3J0IHsgZm9ybWF0TnVtYmVyLCBmb3JtYXRUaW1lIH0gZnJvbSBcInNvY2tldC1mdW5jdGlvbi9zcmMvZm9ybWF0dGluZy9mb3JtYXRcIjtcbmltcG9ydCB7IGJsdWUsIHJlZCB9IGZyb20gXCJzb2NrZXQtZnVuY3Rpb24vc3JjL2Zvcm1hdHRpbmcvbG9nQ29sb3JzXCI7XG5cbmNvbnN0IE5VTEwgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDApO1xuY29uc3QgTE9BRF9TSUdOQUwgPSBOVUxMICsgXCJsb2FkXCI7XG5jb25zdCBPVkVSTEFZX1NJR05BTCA9IE5VTEwgKyBcIm92ZXJsYXlcIjtcbmNvbnN0IENPTVBBQ1RJTkdfU0lHTkFMID0gTlVMTCArIFwiY29tcGFjdGluZ1wiO1xuY29uc3QgVFJJR0dFUl9USFJPVFRMRV9GSVJTVF9TVEVQX01TID0gMTY7XG5cbmZ1bmN0aW9uIG51bGxKb2luKGE6IHN0cmluZywgYjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYSArIE5VTEwgKyBiO1xufVxuXG5leHBvcnQgdHlwZSBSZWFkZXJDb25maWcgPSB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGRlcHM6IFJlYWN0aXZlRGVwcztcbiAgICAvLyBTZWUgQnVsa0RhdGFiYXNlMkNvbmZpZy5tYXhUcmlnZ2VyVGhyb3R0bGVNcy5cbiAgICBtYXhUcmlnZ2VyVGhyb3R0bGVNcz86IG51bWJlcjtcbn07XG5cbi8vIE93bnMgdGhlIGN1cnJlbnQgTG9hZGVkSW5kZXggYW5kIFdyaXRlT3ZlcmxheSBhbmQgc2VydmVzIGV2ZXJ5IHJlYWQgKGFzeW5jICsgc3luYyByZWFjdGl2ZSkuIEFwcGx5IHdyaXRlcy9kZWxldGVzIHRocm91Z2ggYXBwbHlXcml0ZS9hcHBseURlbGV0ZSBzbyB0aGUgcmlnaHQgc2lnbmFscyBmaXJlLiBUaGUgaG9zdCBzd2FwcyBpbiBhIGZyZXNoIExvYWRlZEluZGV4IGF0b21pY2FsbHkgdmlhIHNldEluZGV4IG9uY2UgdGhlIG5ldyBvbmUgaGFzIGZ1bGx5IGJ1aWx0IOKAlCBubyBsYXp5IHJlYnVpbGQgb24gdGhlIG5leHQgcmVhZCwgbm8gc3luY2hyb25vdXMgbGFnIHNwaWtlLlxuZXhwb3J0IGNsYXNzIEJ1bGtEYXRhYmFzZVJlYWRlcjxUIGV4dGVuZHMgeyBrZXk6IHN0cmluZyB9PiB7XG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBjZmc6IFJlYWRlckNvbmZpZykgeyB9XG5cbiAgICBwdWJsaWMgaW5kZXg6IExvYWRlZEluZGV4PFQ+IHwgdW5kZWZpbmVkO1xuICAgIHB1YmxpYyByZWFkb25seSBvdmVybGF5ID0gbmV3IFdyaXRlT3ZlcmxheSgpO1xuXG4gICAgcHJpdmF0ZSBkYXRhR2VuID0gMDtcbiAgICBwcml2YXRlIGNvbHVtbkNhY2hlID0gbmV3IE1hcDxzdHJpbmcsIHsga2V5OiBzdHJpbmc7IHZhbHVlOiB1bmtub3duOyB0aW1lOiBudW1iZXIgfVtdPigpO1xuXG4gICAgcHJpdmF0ZSBwZW5kaW5nU2lnbmFscyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIHByaXZhdGUgdHJpZ2dlclRpbWVyOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiB8IHVuZGVmaW5lZDtcbiAgICBwcml2YXRlIGN1cnJlbnRUcmlnZ2VyRGVsYXkgPSAwO1xuICAgIHByaXZhdGUgbGFzdFRyaWdnZXJUaW1lID0gMDtcblxuICAgIGdldCBuYW1lKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLmNmZy5uYW1lOyB9XG4gICAgZ2V0IGRlcHMoKTogUmVhY3RpdmVEZXBzIHsgcmV0dXJuIHRoaXMuY2ZnLmRlcHM7IH1cbiAgICBnZXQgZGF0YUdlbmVyYXRpb24oKTogbnVtYmVyIHsgcmV0dXJuIHRoaXMuZGF0YUdlbjsgfVxuXG4gICAgc2V0SW5kZXgobmV3SW5kZXg6IExvYWRlZEluZGV4PFQ+LCBvcHRpb25zOiB7IGRyb3BTdGFsZUZhbGxiYWNrPzogYm9vbGVhbiB9ID0ge30pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcHJldiA9IHRoaXMuaW5kZXg7XG4gICAgICAgIGlmIChwcmV2ICYmICFvcHRpb25zLmRyb3BTdGFsZUZhbGxiYWNrKSBuZXdJbmRleC5pbmhlcml0U3RhbGVGcm9tKHByZXYpO1xuICAgICAgICB0aGlzLmNmZy5kZXBzLmJhdGNoKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaW5kZXggPSBuZXdJbmRleDtcbiAgICAgICAgICAgIHRoaXMub3ZlcmxheS5zd2VlcENvdmVyZWQoa2V5ID0+IE1hdGgubWF4KFxuICAgICAgICAgICAgICAgIG5ld0luZGV4LnJlYWRlci5rZXlUaW1lcy5nZXQoa2V5KSA/PyAtSW5maW5pdHksXG4gICAgICAgICAgICAgICAgbmV3SW5kZXgucmVhZGVyLmRlbGV0ZVRpbWVzLmdldChrZXkpID8/IC1JbmZpbml0eSxcbiAgICAgICAgICAgICkpO1xuICAgICAgICAgICAgdGhpcy5kYXRhR2VuKys7XG4gICAgICAgICAgICB0aGlzLmNvbHVtbkNhY2hlLmNsZWFyKCk7XG4gICAgICAgICAgICB0aGlzLmludmFsaWRhdGVTaWduYWwoTE9BRF9TSUdOQUwpO1xuICAgICAgICAgICAgdGhpcy5pbnZhbGlkYXRlU2lnbmFsKE9WRVJMQVlfU0lHTkFMKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXBwbHlXcml0ZShrZXk6IHN0cmluZywgcm93OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgdGltZTogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHdhc0xpdmUgPSB0aGlzLmlzTGl2ZU5vdyhrZXkpO1xuICAgICAgICBjb25zdCB7IGludmFsaWRhdGVkQ29sdW1ucyB9ID0gdGhpcy5vdmVybGF5LndyaXRlUm93KGtleSwgcm93LCB0aW1lLCB3YXNMaXZlKTtcbiAgICAgICAgdGhpcy5ub3RpZnlPdmVybGF5TXV0YXRpb24oa2V5LCBpbnZhbGlkYXRlZENvbHVtbnMpO1xuICAgIH1cblxuICAgIGFwcGx5RGVsZXRlKGtleTogc3RyaW5nLCB0aW1lOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgd2FzTGl2ZSA9IHRoaXMuaXNMaXZlTm93KGtleSk7XG4gICAgICAgIGNvbnN0IHsgaW52YWxpZGF0ZWRDb2x1bW5zIH0gPSB0aGlzLm92ZXJsYXkuZGVsZXRlS2V5KGtleSwgdGltZSwgd2FzTGl2ZSk7XG4gICAgICAgIHRoaXMubm90aWZ5T3ZlcmxheU11dGF0aW9uKGtleSwgaW52YWxpZGF0ZWRDb2x1bW5zKTtcbiAgICB9XG5cbiAgICBpc0tleVdhdGNoZWQoa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2ZnLmRlcHMuaXNPYnNlcnZlZD8uKGtleSkgPz8gdHJ1ZTtcbiAgICB9XG5cbiAgICBpc0xpdmVOb3coa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgZSA9IHRoaXMub3ZlcmxheS5nZXQoa2V5KTtcbiAgICAgICAgaWYgKGUpIHJldHVybiBlLnZhbHVlICE9PSBERUxFVEVEO1xuICAgICAgICByZXR1cm4gdGhpcy5pbmRleD8uaXNMaXZlKGtleSkgPz8gZmFsc2U7XG4gICAgfVxuXG4gICAgbG9jYWxUaW1lKGtleTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICAgICAgY29uc3QgZSA9IHRoaXMub3ZlcmxheS5nZXQoa2V5KTtcbiAgICAgICAgaWYgKGUpIHJldHVybiBlLnRpbWU7XG4gICAgICAgIGNvbnN0IHN0ID0gdGhpcy5pbmRleD8uc3RyZWFtVGltZXMuZ2V0KGtleSk7XG4gICAgICAgIGlmIChzdCAhPT0gdW5kZWZpbmVkKSByZXR1cm4gc3Q7XG4gICAgICAgIHJldHVybiAtSW5maW5pdHk7XG4gICAgfVxuXG4gICAgLy8gQ291bnRlciAoc28gY29uY3VycmVudCAvIG5lc3RlZCBtZXJnZXMgaW4gdGhlIHNhbWUgaW5zdGFuY2UgY29tcG9zZSBjb3JyZWN0bHkpLiBTaWduYWwgZmlyZXMgaW1tZWRpYXRlbHksIG5vdCB0aHJvdWdoIHRoZSB0cmlnZ2VyIHRocm90dGxlIOKAlCBVSSBzcGlubmVycyBzaG91bGQgc2hvdyByaWdodCBhd2F5LlxuICAgIHByaXZhdGUgY29tcGFjdGluZ0NvdW50ID0gMDtcbiAgICBiZWdpbkNvbXBhY3Rpb24oKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY29tcGFjdGluZ0NvdW50Kys7XG4gICAgICAgIGlmICh0aGlzLmNvbXBhY3RpbmdDb3VudCA9PT0gMSkgdGhpcy5jZmcuZGVwcy5pbnZhbGlkYXRlKENPTVBBQ1RJTkdfU0lHTkFMKTtcbiAgICB9XG4gICAgZW5kQ29tcGFjdGlvbigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jb21wYWN0aW5nQ291bnQtLTtcbiAgICAgICAgaWYgKHRoaXMuY29tcGFjdGluZ0NvdW50ID09PSAwKSB0aGlzLmNmZy5kZXBzLmludmFsaWRhdGUoQ09NUEFDVElOR19TSUdOQUwpO1xuICAgIH1cbiAgICBpc0NvbXBhY3RpbmdTeW5jKCk6IGJvb2xlYW4ge1xuICAgICAgICB0aGlzLmNmZy5kZXBzLm9ic2VydmUoQ09NUEFDVElOR19TSUdOQUwpO1xuICAgICAgICByZXR1cm4gdGhpcy5jb21wYWN0aW5nQ291bnQgPiAwO1xuICAgIH1cblxuICAgIHByaXZhdGUgbm90aWZ5T3ZlcmxheU11dGF0aW9uKGtleTogc3RyaW5nLCBjb2x1bW5zOiBJdGVyYWJsZTxzdHJpbmc+IHwgXCJhbGxcIik6IHZvaWQge1xuICAgICAgICB0aGlzLmRhdGFHZW4rKztcbiAgICAgICAgaWYgKGNvbHVtbnMgPT09IFwiYWxsXCIpIHRoaXMuY29sdW1uQ2FjaGUuY2xlYXIoKTtcbiAgICAgICAgZWxzZSBmb3IgKGNvbnN0IGMgb2YgY29sdW1ucykgdGhpcy5jb2x1bW5DYWNoZS5kZWxldGUoYyk7XG4gICAgICAgIGlmICh0aGlzLmNmZy5kZXBzLmlzT2JzZXJ2ZWQ/LihrZXkpID8/IHRydWUpIHRoaXMuaW52YWxpZGF0ZVNpZ25hbChrZXkpO1xuICAgICAgICB0aGlzLmludmFsaWRhdGVTaWduYWwoT1ZFUkxBWV9TSUdOQUwpO1xuICAgIH1cblxuICAgIC8vIOKUgOKUgCBhc3luYyByZWFkcyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgICBhc3luYyBnZXRLZXlzKCk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICAgICAgY29uc3QgaW5kZXggPSBhd2FpdCB0aGlzLnJlcXVpcmVJbmRleCgpO1xuICAgICAgICBpZiAodGhpcy5vdmVybGF5LnNpemUgPT09IDApIHJldHVybiBbLi4uaW5kZXgua2V5c107XG4gICAgICAgIGNvbnN0IHNldCA9IG5ldyBTZXQoaW5kZXgua2V5cyk7XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgZW50cnldIG9mIHRoaXMub3ZlcmxheSkge1xuICAgICAgICAgICAgaWYgKGVudHJ5LnZhbHVlID09PSBERUxFVEVEKSBzZXQuZGVsZXRlKGtleSk7XG4gICAgICAgICAgICBlbHNlIHNldC5hZGQoa2V5KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gWy4uLnNldF07XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0Q29sdW1uPEMgZXh0ZW5kcyBrZXlvZiBUPihjb2x1bW46IEMpOiBQcm9taXNlPHsga2V5OiBzdHJpbmc7IHZhbHVlOiBUW0NdOyB0aW1lOiBudW1iZXIgfVtdPiB7XG4gICAgICAgIGNvbnN0IGNvbCA9IFN0cmluZyhjb2x1bW4pO1xuICAgICAgICBjb25zdCBjYWNoZWQgPSB0aGlzLmNvbHVtbkNhY2hlLmdldChjb2wpO1xuICAgICAgICBpZiAoY2FjaGVkKSByZXR1cm4gY2FjaGVkIGFzIHsga2V5OiBzdHJpbmc7IHZhbHVlOiBUW0NdOyB0aW1lOiBudW1iZXIgfVtdO1xuICAgICAgICBjb25zdCBnZW4gPSB0aGlzLmRhdGFHZW47XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgY29uc3QgaW5kZXggPSBhd2FpdCB0aGlzLnJlcXVpcmVJbmRleCgpO1xuICAgICAgICBsZXQgYmFzZSA9IGF3YWl0IGluZGV4LmdldENvbHVtbihjb2wpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gdGhpcy5vdmVybGF5LnBhdGNoQ29sdW1uKGJhc2UsIGNvbCkgYXMgeyBrZXk6IHN0cmluZzsgdmFsdWU6IFRbQ107IHRpbWU6IG51bWJlciB9W107XG4gICAgICAgIGNvbnN0IGVsYXBzZWQgPSBEYXRlLm5vdygpIC0gc3RhcnQ7XG4gICAgICAgIGlmIChlbGFwc2VkID4gNTApIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGAke2JsdWUoYCR7dGhpcy5jZmcubmFtZX0uZ2V0Q29sdW1uKCR7SlNPTi5zdHJpbmdpZnkoY29sdW1uKX0pYCl9IHRvb2sgJHtyZWQoZm9ybWF0VGltZShlbGFwc2VkKSl9ICR7dGhpcy5mb3JtYXRJbmZvKGluZGV4KX1gKTtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuZnJlZXplKHJlc3VsdCk7XG4gICAgICAgIGlmICh0aGlzLmRhdGFHZW4gPT09IGdlbikgdGhpcy5jb2x1bW5DYWNoZS5zZXQoY29sLCByZXN1bHQpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGFzeW5jIGdldFNpbmdsZUZpZWxkPEMgZXh0ZW5kcyBrZXlvZiBUPihrZXk6IHN0cmluZywgY29sdW1uOiBDKTogUHJvbWlzZTxUW0NdIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIHJldHVybiAoYXdhaXQgdGhpcy5nZXRTaW5nbGVGaWVsZE9iaihrZXksIGNvbHVtbikpPy52YWx1ZTtcbiAgICB9XG5cbiAgICBhc3luYyBnZXRTaW5nbGVGaWVsZE9iajxDIGV4dGVuZHMga2V5b2YgVD4oa2V5OiBzdHJpbmcsIGNvbHVtbjogQyk6IFByb21pc2U8eyBrZXk6IHN0cmluZzsgdmFsdWU6IFRbQ107IHRpbWU6IG51bWJlciB9IHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIGNvbnN0IGNvbCA9IFN0cmluZyhjb2x1bW4pO1xuICAgICAgICBjb25zdCBlbnRyeSA9IHRoaXMub3ZlcmxheS5nZXQoa2V5KTtcbiAgICAgICAgaWYgKGVudHJ5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGlmIChlbnRyeS52YWx1ZSA9PT0gREVMRVRFRCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGlmIChjb2wgaW4gZW50cnkudmFsdWUpIHJldHVybiB7IGtleSwgdmFsdWU6IGVudHJ5LnZhbHVlW2NvbF0gYXMgVFtDXSwgdGltZTogZW50cnkudGltZSB9O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgY29uc3QgaW5kZXggPSBhd2FpdCB0aGlzLnJlcXVpcmVJbmRleCgpO1xuICAgICAgICBjb25zdCByID0gYXdhaXQgaW5kZXguZ2V0U2luZ2xlRmllbGQoa2V5LCBjb2wpO1xuICAgICAgICBjb25zdCBlbGFwc2VkID0gRGF0ZS5ub3coKSAtIHN0YXJ0O1xuICAgICAgICBpZiAoZWxhcHNlZCA+IDUwKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgJHtibHVlKGAke3RoaXMuY2ZnLm5hbWV9LmdldFNpbmdsZUZpZWxkT2JqKCR7SlNPTi5zdHJpbmdpZnkoa2V5KX0sICR7SlNPTi5zdHJpbmdpZnkoY29sdW1uKX0pYCl9IHRvb2sgJHtyZWQoZm9ybWF0VGltZShlbGFwc2VkKSl9ICR7dGhpcy5mb3JtYXRJbmZvKGluZGV4KX1gKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAociA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBpZiAoZW50cnkgIT09IHVuZGVmaW5lZCAmJiBlbnRyeS52YWx1ZSAhPT0gREVMRVRFRCkgcmV0dXJuIHsga2V5LCB2YWx1ZTogdW5kZWZpbmVkIGFzIFRbQ10sIHRpbWU6IGVudHJ5LnRpbWUgfTtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsga2V5LCB2YWx1ZTogci52YWx1ZSBhcyBUW0NdLCB0aW1lOiByLnRpbWUgfTtcbiAgICB9XG5cbiAgICAvLyDilIDilIAgc3luYyAocmVhY3RpdmUpIHJlYWRzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICAgIGdldFNpbmdsZUZpZWxkU3luYzxDIGV4dGVuZHMga2V5b2YgVD4oa2V5OiBzdHJpbmcsIGNvbHVtbjogQyk6IFRbQ10gfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRTaW5nbGVGaWVsZE9ialN5bmMoa2V5LCBjb2x1bW4pPy52YWx1ZTtcbiAgICB9XG5cbiAgICBnZXRTaW5nbGVGaWVsZE9ialN5bmM8QyBleHRlbmRzIGtleW9mIFQ+KGtleTogc3RyaW5nLCBjb2x1bW46IEMpOiB7IGtleTogc3RyaW5nOyB2YWx1ZTogVFtDXTsgdGltZTogbnVtYmVyIH0gfCB1bmRlZmluZWQge1xuICAgICAgICB0aGlzLmNmZy5kZXBzLm9ic2VydmUoTE9BRF9TSUdOQUwpO1xuICAgICAgICB0aGlzLmNmZy5kZXBzLm9ic2VydmUoa2V5KTtcbiAgICAgICAgY29uc3QgY29sID0gU3RyaW5nKGNvbHVtbik7XG4gICAgICAgIGNvbnN0IGVudHJ5ID0gdGhpcy5vdmVybGF5LmdldChrZXkpO1xuICAgICAgICBpZiAoZW50cnkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaWYgKGVudHJ5LnZhbHVlID09PSBERUxFVEVEKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgaWYgKGNvbCBpbiBlbnRyeS52YWx1ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5kZXg/LmVuc3VyZUJhc2VGaWVsZChrZXksIGNvbCwgKCkgPT4gdGhpcy5pbnZhbGlkYXRlU2lnbmFsKExPQURfU0lHTkFMKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsga2V5LCB2YWx1ZTogZW50cnkudmFsdWVbY29sXSBhcyBUW0NdLCB0aW1lOiBlbnRyeS50aW1lIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmluZGV4O1xuICAgICAgICBpZiAoIWluZGV4KSB7XG4gICAgICAgICAgICBpZiAoZW50cnkgIT09IHVuZGVmaW5lZCAmJiBlbnRyeS52YWx1ZSAhPT0gREVMRVRFRCkgcmV0dXJuIHsga2V5LCB2YWx1ZTogdW5kZWZpbmVkIGFzIFRbQ10sIHRpbWU6IGVudHJ5LnRpbWUgfTtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYmFzZSA9IGluZGV4LmdldEJhc2VGaWVsZChrZXksIGNvbCk7XG4gICAgICAgIC8vIFRyaWdnZXIgbG9hZCBpZiBub3QgbG9hZGVkIE9SIGxvYWRlZCBvbmx5IGZyb20gc3RhbGUgZmFsbGJhY2sgKHJlZnJlc2ggbmVlZGVkKS5cbiAgICAgICAgaWYgKCFiYXNlLmxvYWRlZCB8fCAhYmFzZS5mcmVzaCkgaW5kZXguZW5zdXJlQmFzZUZpZWxkKGtleSwgY29sLCAoKSA9PiB0aGlzLmludmFsaWRhdGVTaWduYWwoTE9BRF9TSUdOQUwpKTtcbiAgICAgICAgaWYgKCFiYXNlLmxvYWRlZCB8fCBiYXNlLnZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGlmIChlbnRyeSAhPT0gdW5kZWZpbmVkICYmIGVudHJ5LnZhbHVlICE9PSBERUxFVEVEKSByZXR1cm4geyBrZXksIHZhbHVlOiB1bmRlZmluZWQgYXMgVFtDXSwgdGltZTogZW50cnkudGltZSB9O1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBrZXksIHZhbHVlOiBiYXNlLnZhbHVlLnZhbHVlIGFzIFRbQ10sIHRpbWU6IGJhc2UudmFsdWUudGltZSB9O1xuICAgIH1cblxuICAgIGdldENvbHVtblN5bmM8QyBleHRlbmRzIGtleW9mIFQ+KGNvbHVtbjogQyk6IHsga2V5OiBzdHJpbmc7IHZhbHVlOiBUW0NdOyB0aW1lOiBudW1iZXIgfVtdIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgdGhpcy5jZmcuZGVwcy5vYnNlcnZlKExPQURfU0lHTkFMKTtcbiAgICAgICAgdGhpcy5jZmcuZGVwcy5vYnNlcnZlKE9WRVJMQVlfU0lHTkFMKTtcbiAgICAgICAgY29uc3QgY29sID0gU3RyaW5nKGNvbHVtbik7XG4gICAgICAgIGNvbnN0IGNhY2hlZCA9IHRoaXMuY29sdW1uQ2FjaGUuZ2V0KGNvbCk7XG4gICAgICAgIGlmIChjYWNoZWQpIHJldHVybiBjYWNoZWQgYXMgeyBrZXk6IHN0cmluZzsgdmFsdWU6IFRbQ107IHRpbWU6IG51bWJlciB9W107XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5pbmRleDtcbiAgICAgICAgaWYgKCFpbmRleCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgYmFzZSA9IGluZGV4LmdldEJhc2VDb2x1bW4oY29sKTtcbiAgICAgICAgLy8gVHJpZ2dlciBsb2FkIGlmIG5vdCBmcmVzaCAoZ2VudWluZSBmaXJzdCBsb2FkIE9SIGEgc3RhbGUgZmFsbGJhY2sgYXdhaXRpbmcgcmVmcmVzaCkuXG4gICAgICAgIGlmICghYmFzZSB8fCAhYmFzZS5mcmVzaCkgaW5kZXguZW5zdXJlQmFzZUNvbHVtbihjb2wsICgpID0+IHRoaXMuaW52YWxpZGF0ZVNpZ25hbChMT0FEX1NJR05BTCkpO1xuICAgICAgICBpZiAoIWJhc2UpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMub3ZlcmxheS5wYXRjaENvbHVtbihiYXNlLmVudHJpZXMsIGNvbCkgYXMgeyBrZXk6IHN0cmluZzsgdmFsdWU6IFRbQ107IHRpbWU6IG51bWJlciB9W107XG4gICAgICAgIGlmIChiYXNlLmZyZXNoKSB7XG4gICAgICAgICAgICBPYmplY3QuZnJlZXplKHJlc3VsdCk7XG4gICAgICAgICAgICB0aGlzLmNvbHVtbkNhY2hlLnNldChjb2wsIHJlc3VsdCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBpc0ZpZWxkTG9hZGVkU3luYzxDIGV4dGVuZHMga2V5b2YgVD4oa2V5OiBzdHJpbmcsIGNvbHVtbjogQyk6IGJvb2xlYW4ge1xuICAgICAgICB0aGlzLmNmZy5kZXBzLm9ic2VydmUoTE9BRF9TSUdOQUwpO1xuICAgICAgICB0aGlzLmNmZy5kZXBzLm9ic2VydmUoa2V5KTtcbiAgICAgICAgY29uc3QgZW50cnkgPSB0aGlzLm92ZXJsYXkuZ2V0KGtleSk7XG4gICAgICAgIGlmIChlbnRyeSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBpZiAoZW50cnkudmFsdWUgPT09IERFTEVURUQpIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgaWYgKFN0cmluZyhjb2x1bW4pIGluIGVudHJ5LnZhbHVlKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuaW5kZXg7XG4gICAgICAgIGlmICghaW5kZXgpIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKGluZGV4LmlzQmFzZUZpZWxkTG9hZGVkKGtleSwgU3RyaW5nKGNvbHVtbikpKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgaW5kZXguZW5zdXJlQmFzZUZpZWxkKGtleSwgU3RyaW5nKGNvbHVtbiksICgpID0+IHRoaXMuaW52YWxpZGF0ZVNpZ25hbChMT0FEX1NJR05BTCkpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaXNDb2x1bW5Mb2FkZWRTeW5jPEMgZXh0ZW5kcyBrZXlvZiBUPihjb2x1bW46IEMpOiBib29sZWFuIHtcbiAgICAgICAgdGhpcy5jZmcuZGVwcy5vYnNlcnZlKExPQURfU0lHTkFMKTtcbiAgICAgICAgdGhpcy5jZmcuZGVwcy5vYnNlcnZlKE9WRVJMQVlfU0lHTkFMKTtcbiAgICAgICAgY29uc3QgY29sID0gU3RyaW5nKGNvbHVtbik7XG4gICAgICAgIGlmICh0aGlzLmNvbHVtbkNhY2hlLmhhcyhjb2wpKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmluZGV4O1xuICAgICAgICBpZiAoIWluZGV4KSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmIChpbmRleC5pc0Jhc2VDb2x1bW5Mb2FkZWQoY29sKSkgcmV0dXJuIHRydWU7XG4gICAgICAgIGluZGV4LmVuc3VyZUJhc2VDb2x1bW4oY29sLCAoKSA9PiB0aGlzLmludmFsaWRhdGVTaWduYWwoTE9BRF9TSUdOQUwpKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIOKUgOKUgCBoZWxwZXJzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCBCb3RoIGFzeW5jIHJlYWRzIGF3YWl0IHRoaXMuIFRoZSBob3N0IHdpcmVzIGFuIGBlbnN1cmVJbmRleGAgdGhhdCB0cmlnZ2VycyB0aGUgaW5pdGlhbCBidWlsZCBpZiBubyBpbmRleCBpcyBsb2FkZWQgeWV0IOKAlCByZWFkcyB0aGF0IHJhY2UgdGhlIGZpcnN0IGxvYWQgYWxsIHdhaXQgb24gdGhlIHNhbWUgcHJvbWlzZS5cbiAgICBzZXRFbnN1cmVJbmRleChmbjogKCkgPT4gUHJvbWlzZTxMb2FkZWRJbmRleDxUPj4pOiB2b2lkIHsgdGhpcy5lbnN1cmVJbmRleEZuID0gZm47IH1cbiAgICBwcml2YXRlIGVuc3VyZUluZGV4Rm46ICgoKSA9PiBQcm9taXNlPExvYWRlZEluZGV4PFQ+PikgfCB1bmRlZmluZWQ7XG4gICAgcHJpdmF0ZSBhc3luYyByZXF1aXJlSW5kZXgoKTogUHJvbWlzZTxMb2FkZWRJbmRleDxUPj4ge1xuICAgICAgICBpZiAodGhpcy5pbmRleCkgcmV0dXJuIHRoaXMuaW5kZXg7XG4gICAgICAgIGlmICghdGhpcy5lbnN1cmVJbmRleEZuKSB0aHJvdyBuZXcgRXJyb3IoYCR7dGhpcy5jZmcubmFtZX06IGluZGV4IG5vdCBzZXQg4oCUIGNhbGwgc2V0SW5kZXgoLi4uKSBiZWZvcmUgcmVhZGluZ2ApO1xuICAgICAgICByZXR1cm4gdGhpcy5lbnN1cmVJbmRleEZuKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmb3JtYXRJbmZvKGluZGV4OiBMb2FkZWRJbmRleDxUPik6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBgKGNvbGxlY3Rpb24gaGFzICR7Ymx1ZShmb3JtYXROdW1iZXIoaW5kZXgucmVhZGVyLnJvd0NvdW50KSl9IHJvd3MsICR7Ymx1ZShmb3JtYXROdW1iZXIoaW5kZXgucmVhZGVyLnRvdGFsQnl0ZXMpKX1CKWA7XG4gICAgfVxuXG4gICAgLy8gTm90aWZpY2F0aW9ucyBhcmUgcmFtcGluZ2x5IGRlbGF5ZWQgdW5kZXIgc3VzdGFpbmVkIGNoYW5nZXMgKHNvIGEgaGlnaC1yYXRlIHdyaXRlciBjYW4ndCByZS1ydW4gd2F0Y2hlcnMgcGVyIGNoYW5nZSkuIFVuZGVybHlpbmcgZGF0YSBpcyBhbHdheXMgY3VycmVudCDigJQgb25seSB0aGUgb2JzZXJ2YWJsZSBub3RpZmljYXRpb24gaXMgYmF0Y2hlZC9kZWxheWVkLlxuICAgIHByaXZhdGUgaW52YWxpZGF0ZVNpZ25hbChzaWduYWw6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBjb25zdCBtYXhNcyA9IHRoaXMuY2ZnLm1heFRyaWdnZXJUaHJvdHRsZU1zID8/IDA7XG4gICAgICAgIGlmIChtYXhNcyA8PSAwKSB7IHRoaXMuY2ZnLmRlcHMuaW52YWxpZGF0ZShzaWduYWwpOyByZXR1cm47IH1cbiAgICAgICAgdGhpcy5wZW5kaW5nU2lnbmFscy5hZGQoc2lnbmFsKTtcbiAgICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgY29uc3QgbHVsbCA9IG5vdyAtIHRoaXMubGFzdFRyaWdnZXJUaW1lID4gbWF4TXM7XG4gICAgICAgIHRoaXMubGFzdFRyaWdnZXJUaW1lID0gbm93O1xuICAgICAgICBpZiAodGhpcy50cmlnZ2VyVGltZXIgIT09IHVuZGVmaW5lZCkgcmV0dXJuO1xuICAgICAgICB0aGlzLmN1cnJlbnRUcmlnZ2VyRGVsYXkgPSBsdWxsID8gMCA6IE1hdGgubWluKG1heE1zLCBNYXRoLm1heChUUklHR0VSX1RIUk9UVExFX0ZJUlNUX1NURVBfTVMsIHRoaXMuY3VycmVudFRyaWdnZXJEZWxheSAqIDIpKTtcbiAgICAgICAgdGhpcy50cmlnZ2VyVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHsgdGhpcy50cmlnZ2VyVGltZXIgPSB1bmRlZmluZWQ7IHRoaXMuZmx1c2hTaWduYWxzKCk7IH0sIHRoaXMuY3VycmVudFRyaWdnZXJEZWxheSk7XG4gICAgICAgICh0aGlzLnRyaWdnZXJUaW1lciBhcyB7IHVucmVmPzogKCkgPT4gdm9pZCB9KS51bnJlZj8uKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmbHVzaFNpZ25hbHMoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnBlbmRpbmdTaWduYWxzLnNpemUgPT09IDApIHJldHVybjtcbiAgICAgICAgY29uc3Qgc2lnbmFscyA9IFsuLi50aGlzLnBlbmRpbmdTaWduYWxzXTtcbiAgICAgICAgdGhpcy5wZW5kaW5nU2lnbmFscy5jbGVhcigpO1xuICAgICAgICB0aGlzLmNmZy5kZXBzLmJhdGNoKCgpID0+IHsgZm9yIChjb25zdCBzIG9mIHNpZ25hbHMpIHRoaXMuY2ZnLmRlcHMuaW52YWxpZGF0ZShzKTsgfSk7XG4gICAgfVxufVxuXG5leHBvcnQgY29uc3QgUkVBREVSX1NJR05BTFMgPSB7IExPQUQ6IExPQURfU0lHTkFMLCBPVkVSTEFZOiBPVkVSTEFZX1NJR05BTCB9O1xuZXhwb3J0IHsgbnVsbEpvaW4gfTtcbiJdfQ==
|
|
298
|
-
/* _JS_SOURCE_HASH = "
|
|
298
|
+
/* _JS_SOURCE_HASH = "5bbf4db1d2524448bb7075216483a40a481396ae0ab1b83a6205403ba96b35dc"; */
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";
|
|
1
|
+
"use strict"; var console = (function shimConsole() { let baseConsole = globalThis.console; if (typeof window !== "undefined") return baseConsole; let name = __filename.replaceAll("\\", "/").split("/").pop(); let dirName = __dirname.replaceAll("\\", "/").split("/").pop(); let context = { __FILE__: __filename, __DIR__: __dirname, __NAME__: name, __DIRNAME__: dirName }; let newConsole = { ...baseConsole }; for (let shim of ["log", "info", "warn", "error"]) { newConsole[shim] = (...args) => { args.push(context); baseConsole[shim](...args); }; } newConsole.__context = context; return newConsole; })(); "use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true , configurable: true});
|
|
3
3
|
//exports.orderStreamEntries = exports.loadStreamEntries = exports.loadFileReader = exports.makeRawGetRange = exports.LoadedIndex = exports.MissingFileError = void 0;
|
|
4
4
|
const BulkDatabaseFormat_1 = require("./BulkDatabaseFormat");
|
|
@@ -420,4 +420,4 @@ function joinBulkDatabases(databases) {
|
|
|
420
420
|
};
|
|
421
421
|
}
|
|
422
422
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTG9hZGVkSW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJMb2FkZWRJbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSw2REFBa0g7QUFDbEgsNkNBQW9EO0FBQ3BELDJDQUFrRztBQUNsRyxrRUFBaUY7QUFDakYsd0VBQXFFO0FBRXJFLG9JQUFvSTtBQUNwSSxNQUFNLGdCQUFnQixHQUFHLGdCQUFnQixDQUFDO0FBTTFDLE1BQWEsZ0JBQWlCLFNBQVEsS0FBSztDQUFJO0FBQS9DLDRDQUErQztBQUMvQyxNQUFNLGlCQUFrQixTQUFRLEtBQUs7Q0FBSTtBQW9CekMsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLENBQUM7QUFFNUIsU0FBUyxRQUFRLENBQUMsQ0FBUyxFQUFFLENBQVM7SUFDbEMsT0FBTyxDQUFDLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDMUMsQ0FBQztBQUVELG9XQUFvVztBQUNwVyxNQUFhLFdBQVc7SUFDcEIsWUFDb0IsSUFBWSxFQUNaLE9BQW9CLEVBQ3BCLFNBQXlCLEVBQ3pCLFdBQTZCLEVBQzdCLE1BQXNCLEVBQ3RCLFdBQWdDLEVBQ2hDLFdBQWdDLEVBQ2hDLGdCQUF3QixFQUN4QixpQkFBeUIsRUFDekIsU0FBMEI7UUFUMUIsU0FBSSxHQUFKLElBQUksQ0FBUTtRQUNaLFlBQU8sR0FBUCxPQUFPLENBQWE7UUFDcEIsY0FBUyxHQUFULFNBQVMsQ0FBZ0I7UUFDekIsZ0JBQVcsR0FBWCxXQUFXLENBQWtCO1FBQzdCLFdBQU0sR0FBTixNQUFNLENBQWdCO1FBQ3RCLGdCQUFXLEdBQVgsV0FBVyxDQUFxQjtRQUNoQyxnQkFBVyxHQUFYLFdBQVcsQ0FBcUI7UUFDaEMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFRO1FBQ3hCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBUTtRQUN6QixjQUFTLEdBQVQsU0FBUyxDQUFpQjtRQVN0QyxnQkFBVyxHQUFHLElBQUks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RSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7b0JBQy9CLFNBQVM7Z0JBQ2IsQ0FBQztnQkFDRCxJQUFJLENBQUMsS0FBSywyQkFBTTtvQkFBRSxTQUFTO2dCQUMzQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsUUFBUSxFQUFFLENBQUM7b0JBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7b0JBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUM7b0JBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztnQkFBQyxDQUFDO1lBQ2xGLENBQUM7WUFDRCxNQUFNLElBQUksR0FBRyxLQUFLLElBQUksUUFBUSxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUM1QyxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUM3RSxDQUFDO0tBQ0osQ0FBQztBQUNOLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEZpbGVTdG9yYWdlIH0gZnJvbSBcIi4uL0ZpbGVGb2xkZXJBUElcIjtcbmltcG9ydCB7IEFCU0VOVCwgQmFzZUJ1bGtEYXRhYmFzZVJlYWRlciwgRU1QVFlfQlVGRkVSLCBLRVlfQ09MVU1OLCBsb2FkQnVsa0RhdGFiYXNlIH0gZnJvbSBcIi4vQnVsa0RhdGFiYXNlRm9ybWF0XCI7XG5pbXBvcnQgeyBibG9ja0NhY2hlLCBHZXRSYW5nZSB9IGZyb20gXCIuL2Jsb2NrQ2FjaGVcIjtcbmltcG9ydCB7IFNUUkVBTV9FWFRFTlNJT04sIFN0cmVhbUVudHJ5LCBwYXJzZVN0cmVhbSwgc3RyZWFtUmVhZGVyRnJvbUVudHJpZXMgfSBmcm9tIFwiLi9zdHJlYW1Mb2dcIjtcbmltcG9ydCB7IGZvcm1hdE51bWJlciwgZm9ybWF0VGltZSB9IGZyb20gXCJzb2NrZXQtZnVuY3Rpb24vc3JjL2Zvcm1hdHRpbmcvZm9ybWF0XCI7XG5pbXBvcnQgeyBibHVlLCByZWQgfSBmcm9tIFwic29ja2V0LWZ1bmN0aW9uL3NyYy9mb3JtYXR0aW5nL2xvZ0NvbG9yc1wiO1xuXG4vLyBEdXBsaWNhdGVkIGZyb20gQnVsa0RhdGFiYXNlQmFzZSB0byBhdm9pZCBhIGNpcmN1bGFyIGltcG9ydCDigJQgdXNlZCBvbmx5IHRvIGJ1aWxkIGEgZnVsbGVyIHN0b3JhZ2UtcmVsYXRpdmUgcGF0aCBmb3IgbG9nIG1lc3NhZ2VzLlxuY29uc3QgQlVMS19ST09UX0ZPTERFUiA9IFwiYnVsa0RhdGFiYXNlczJcIjtcblxuZXhwb3J0IHR5cGUgQnVsa0ZpbGVJbmZvID0geyBmaWxlTmFtZTogc3RyaW5nOyBsZXZlbDogbnVtYmVyOyB0aW1lc3RhbXA6IG51bWJlciB9O1xuZXhwb3J0IHR5cGUgU3RyZWFtRmlsZUluZm8gPSB7IGZpbGVOYW1lOiBzdHJpbmc7IHRpbWVzdGFtcDogbnVtYmVyIH07XG5leHBvcnQgdHlwZSBTdHJlYW1SZWFkZXJDYWNoZUVudHJ5ID0geyByZWFkU2l6ZTogbnVtYmVyOyBwYXJzZWRQb3M6IG51bWJlcjsgZW50cmllczogU3RyZWFtRW50cnlbXSB9O1xuXG5leHBvcnQgY2xhc3MgTWlzc2luZ0ZpbGVFcnJvciBleHRlbmRzIEVycm9yIHsgfVxuY2xhc3MgRmlsZXNDaGFuZ2VkRXJyb3IgZXh0ZW5kcyBFcnJvciB7IH1cblxuZXhwb3J0IHR5cGUgUmVzb2x2ZWRSZWFkZXIgPSB7XG4gICAgcm93Q291bnQ6IG51bWJlcjtcbiAgICB0b3RhbEJ5dGVzOiBudW1iZXI7XG4gICAga2V5czogc3RyaW5nW107XG4gICAgcmF3S2V5Q291bnQ6IG51bWJlcjtcbiAgICByZWFkZXJDb3VudDogbnVtYmVyO1xuICAgIGNvbHVtbnM6IHsgY29sdW1uOiBzdHJpbmc7IGJ5dGVTaXplOiBudW1iZXIgfVtdO1xuICAgIGtleVRpbWVzOiBNYXA8c3RyaW5nLCBudW1iZXI+O1xuICAgIGRlbGV0ZVRpbWVzOiBNYXA8c3RyaW5nLCBudW1iZXI+O1xuICAgIGdldENvbHVtbjogKGNvbHVtbjogc3RyaW5nKSA9PiBQcm9taXNlPHsga2V5OiBzdHJpbmc7IHZhbHVlOiB1bmtub3duOyB0aW1lOiBudW1iZXIgfVtdPjtcbiAgICBnZXRTaW5nbGVGaWVsZDogKGtleTogc3RyaW5nLCBjb2x1bW46IHN0cmluZykgPT4gUHJvbWlzZTx7IHZhbHVlOiB1bmtub3duOyB0aW1lOiBudW1iZXIgfSB8IHVuZGVmaW5lZD47XG59O1xuXG5leHBvcnQgdHlwZSBTdWJSZWFkZXJDYWNoZXMgPSB7XG4gICAgYnVsazogTWFwPHN0cmluZywgQmFzZUJ1bGtEYXRhYmFzZVJlYWRlcj47XG4gICAgc3RyZWFtOiBNYXA8c3RyaW5nLCBTdHJlYW1SZWFkZXJDYWNoZUVudHJ5Pjtcbn07XG5cbmNvbnN0IE1BWF9SRUFEX0FUVEVNUFRTID0gODtcblxuZnVuY3Rpb24gbnVsbEpvaW4oYTogc3RyaW5nLCBiOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBhICsgU3RyaW5nLmZyb21DaGFyQ29kZSgwKSArIGI7XG59XG5cbi8vIEEgbG9hZGVkIHNuYXBzaG90IG9mIG9uZSBjb2xsZWN0aW9uJ3Mgb24tZGlzayBzdGF0ZTogdGhlIHJlc29sdmVkIHJlYWRlciArIHRoZSBwZXItZmlsZSBkZWNvZGVkIHN1Yi0gcmVhZGVycyBpdCBzdGl0Y2hlZCwgdGhlIHN0cmVhbSBmaWxlIHNpemVzL3RpbWVzIGl0IG9ic2VydmVkLCBhbmQgdGhlIHN5bmMgKHJlYWN0aXZlKSBjYWNoZXMgdGhhdCBzdXJmYWNlIGNvbHVtbi9maWVsZCByZWFkcy4gQnVpbHQgb25jZSB2aWEgTG9hZGVkSW5kZXguYnVpbGQg4oCUIGVhZ2VybHksIHNvIHRoZSBzd2FwIGludG8gYSBmcmVzaCBMb2FkZWRJbmRleCBuZXZlciBibG9ja3MgYSByZWFkIG9uIGEgc3luY2hyb25vdXMgcmVidWlsZC5cbmV4cG9ydCBjbGFzcyBMb2FkZWRJbmRleDxUIGV4dGVuZHMgeyBrZXk6IHN0cmluZyB9PiB7XG4gICAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHVibGljIHJlYWRvbmx5IG5hbWU6IHN0cmluZyxcbiAgICAgICAgcHVibGljIHJlYWRvbmx5IHN0b3JhZ2U6IEZpbGVTdG9yYWdlLFxuICAgICAgICBwdWJsaWMgcmVhZG9ubHkgYnVsa0ZpbGVzOiBCdWxrRmlsZUluZm9bXSxcbiAgICAgICAgcHVibGljIHJlYWRvbmx5IHN0cmVhbUZpbGVzOiBTdHJlYW1GaWxlSW5mb1tdLFxuICAgICAgICBwdWJsaWMgcmVhZG9ubHkgcmVhZGVyOiBSZXNvbHZlZFJlYWRlcixcbiAgICAgICAgcHVibGljIHJlYWRvbmx5IHN0cmVhbVRpbWVzOiBNYXA8c3RyaW5nLCBudW1iZXI+LFxuICAgICAgICBwdWJsaWMgcmVhZG9ubHkgc3RyZWFtU2l6ZXM6IE1hcDxzdHJpbmcsIG51bWJlcj4sXG4gICAgICAgIHB1YmxpYyByZWFkb25seSBzdHJlYW1Sb3dzT25EaXNrOiBudW1iZXIsXG4gICAgICAgIHB1YmxpYyByZWFkb25seSBzdHJlYW1CeXRlc09uRGlzazogbnVtYmVyLFxuICAgICAgICBwdWJsaWMgcmVhZG9ubHkgc3ViQ2FjaGVzOiBTdWJSZWFkZXJDYWNoZXMsXG4gICAgKSB7XG4gICAgICAgIHRoaXMua2V5cyA9IG5ldyBTZXQocmVhZGVyLmtleXMpO1xuICAgICAgICB0aGlzLmZpbGVTZXQgPSBuZXcgU2V0KFsuLi5idWxrRmlsZXMubWFwKGYgPT4gZi5maWxlTmFtZSksIC4uLnN0cmVhbUZpbGVzLm1hcChmID0+IGYuZmlsZU5hbWUpXSk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlYWRvbmx5IGtleXM6IFNldDxzdHJpbmc+O1xuICAgIHB1YmxpYyByZWFkb25seSBmaWxlU2V0OiBTZXQ8c3RyaW5nPjtcblxuICAgIHByaXZhdGUgYmFzZUNvbHVtbnMgPSBuZXcgTWFwPHN0cmluZywgeyBrZXk6IHN0cmluZzsgdmFsdWU6IHVua25vd247IHRpbWU6IG51bWJlciB9W10+KCk7XG4gICAgcHJpdmF0ZSBiYXNlQ29sdW1uc0xvYWRpbmcgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICBwcml2YXRlIGJhc2VGaWVsZHMgPSBuZXcgTWFwPHN0cmluZywgeyB2YWx1ZTogdW5rbm93bjsgdGltZTogbnVtYmVyIH0gfCB1bmRlZmluZWQ+KCk7XG4gICAgcHJpdmF0ZSBiYXNlRmllbGRzTG9hZGluZyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIC8vIExhc3Qta25vd24gdmFsdWVzIGZyb20gdGhlIHByZXZpb3VzIGluZGV4LCBzZXJ2ZWQgdW50aWwgdGhpcyBpbmRleCBsb2FkcyBpdHMgb3duIGZyZXNoIHZhbHVlLCBzbyBhIHN3YXAgZG9lc24ndCBmbGFzaCBlbXB0eSBpbiBzeW5jIHJlYWRzLiBDbGVhcmVkIHBlci1lbnRyeSB3aGVuIHRoZSBmcmVzaCB2YWx1ZSBsYW5kcy5cbiAgICBwcml2YXRlIHN0YWxlQmFzZUNvbHVtbnMgPSBuZXcgTWFwPHN0cmluZywgeyBrZXk6IHN0cmluZzsgdmFsdWU6IHVua25vd247IHRpbWU6IG51bWJlciB9W10+KCk7XG4gICAgcHJpdmF0ZSBzdGFsZUJhc2VGaWVsZHMgPSBuZXcgTWFwPHN0cmluZywgeyB2YWx1ZTogdW5rbm93bjsgdGltZTogbnVtYmVyIH0gfCB1bmRlZmluZWQ+KCk7XG5cbiAgICBnZXQgdG90YWxCeXRlcygpOiBudW1iZXIgeyByZXR1cm4gdGhpcy5yZWFkZXIudG90YWxCeXRlczsgfVxuICAgIGdldCByb3dDb3VudCgpOiBudW1iZXIgeyByZXR1cm4gdGhpcy5yZWFkZXIucm93Q291bnQ7IH1cblxuICAgIGlzTGl2ZShrZXk6IHN0cmluZyk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5rZXlzLmhhcyhrZXkpOyB9XG5cbiAgICBzdGF0aWMgYXN5bmMgYnVpbGQ8VCBleHRlbmRzIHsga2V5OiBzdHJpbmcgfT4oY29uZmlnOiB7XG4gICAgICAgIG5hbWU6IHN0cmluZztcbiAgICAgICAgc3RvcmFnZTogRmlsZVN0b3JhZ2U7XG4gICAgICAgIGJ1bGtGaWxlczogQnVsa0ZpbGVJbmZvW107XG4gICAgICAgIHN0cmVhbUZpbGVzOiBTdHJlYW1GaWxlSW5mb1tdO1xuICAgICAgICBzdWJDYWNoZXM6IFN1YlJlYWRlckNhY2hlcztcbiAgICAgICAgb25VbnJlYWRhYmxlRmlsZT86IChmaWxlOiBCdWxrRmlsZUluZm8sIG1lc3NhZ2U6IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPjtcbiAgICB9KTogUHJvbWlzZTxMb2FkZWRJbmRleDxUPj4ge1xuICAgICAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgICAgIGxldCB7IGJ1bGtGaWxlcywgc3RyZWFtRmlsZXMgfSA9IGNvbmZpZztcbiAgICAgICAgbGV0IGF0dGVtcHQgPSAwO1xuICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgICAgY29uc3QgdG9sZXJhdGVNaXNzaW5nID0gYXR0ZW1wdCA+PSBNQVhfUkVBRF9BVFRFTVBUUztcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgbGV0IGZpbGVzQ2hhbmdlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGNvbnN0IFtidWxrUmVhZGVyc1Jhdywgc3RyZWFtRGF0YV0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICAgICAgICAgICAgICAgIFByb21pc2UuYWxsKGJ1bGtGaWxlcy5tYXAoYXN5bmMgZiA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCBsb2FkRmlsZVJlYWRlcihjb25maWcubmFtZSwgY29uZmlnLnN0b3JhZ2UsIGYsIGNvbmZpZy5zdWJDYWNoZXMuYnVsayk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBNaXNzaW5nRmlsZUVycm9yKSB7IGZpbGVzQ2hhbmdlZCA9IHRydWU7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uZmlnLm9uVW5yZWFkYWJsZUZpbGUpIGF3YWl0IGNvbmZpZy5vblVucmVhZGFibGVGaWxlKGYsIChlIGFzIEVycm9yKS5tZXNzYWdlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KSksXG4gICAgICAgICAgICAgICAgICAgIGxvYWRTdHJlYW1FbnRyaWVzKGNvbmZpZy5uYW1lLCBjb25maWcuc3RvcmFnZSwgc3RyZWFtRmlsZXMsIGNvbmZpZy5zdWJDYWNoZXMuc3RyZWFtKSxcbiAgICAgICAgICAgICAgICBdKTtcbiAgICAgICAgICAgICAgICBpZiAoc3RyZWFtRGF0YS5taXNzaW5nKSBmaWxlc0NoYW5nZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGlmIChmaWxlc0NoYW5nZWQgJiYgIXRvbGVyYXRlTWlzc2luZykgdGhyb3cgbmV3IEZpbGVzQ2hhbmdlZEVycm9yKCk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBidWxrUmVhZGVycyA9IGJ1bGtSZWFkZXJzUmF3LmZpbHRlcigocik6IHIgaXMgQmFzZUJ1bGtEYXRhYmFzZVJlYWRlciA9PiAhIXIpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlYWRlcnM6IEJhc2VCdWxrRGF0YWJhc2VSZWFkZXJbXSA9IFtdO1xuICAgICAgICAgICAgICAgIGxldCBzdHJlYW1UaW1lcyA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3JkZXJlZCA9IG9yZGVyU3RyZWFtRW50cmllcyhzdHJlYW1EYXRhLmVudHJpZXMpO1xuICAgICAgICAgICAgICAgIGlmIChvcmRlcmVkLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJlYW0gPSBzdHJlYW1SZWFkZXJGcm9tRW50cmllcyhvcmRlcmVkLCBzdHJlYW1EYXRhLnRvdGFsQnl0ZXMpO1xuICAgICAgICAgICAgICAgICAgICByZWFkZXJzLnB1c2goc3RyZWFtLnJlYWRlcik7XG4gICAgICAgICAgICAgICAgICAgIHN0cmVhbVRpbWVzID0gc3RyZWFtLnRpbWVzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZWFkZXJzLnB1c2goLi4uYnVsa1JlYWRlcnMpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlYWRlciA9IGpvaW5CdWxrRGF0YWJhc2VzKHJlYWRlcnMpO1xuXG4gICAgICAgICAgICAgICAgcHJ1bmVTdWJDYWNoZXMoYnVsa0ZpbGVzLCBzdHJlYW1GaWxlcywgY29uZmlnLnN1YkNhY2hlcyk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBlbGFwc2VkID0gRGF0ZS5ub3coKSAtIHN0YXJ0O1xuICAgICAgICAgICAgICAgIGlmIChlbGFwc2VkID4gNTApIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGJ5dGVzUmVhZCA9IHN0cmVhbURhdGEudG90YWxCeXRlcztcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCByIG9mIGJ1bGtSZWFkZXJzKSBieXRlc1JlYWQgKz0gci5jb2x1bW5zLmZpbmQoYyA9PiBjLmNvbHVtbiA9PT0gS0VZX0NPTFVNTik/LmJ5dGVTaXplID8/IDA7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGAke2JsdWUoY29uZmlnLm5hbWUpfSBsb2FkZWQgaW4gJHtyZWQoZm9ybWF0VGltZShlbGFwc2VkKSl9ICgke2JsdWUoZm9ybWF0TnVtYmVyKHJlYWRlci5yb3dDb3VudCkpfSByb3dzLCAke2J1bGtGaWxlcy5sZW5ndGh9IGJ1bGsgKyAke3N0cmVhbUZpbGVzLmxlbmd0aH0gc3RyZWFtIGZpbGVzLCByZWFkICR7Ymx1ZShmb3JtYXROdW1iZXIoYnl0ZXNSZWFkKSl9QilgKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IExvYWRlZEluZGV4PFQ+KFxuICAgICAgICAgICAgICAgICAgICBjb25maWcubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgY29uZmlnLnN0b3JhZ2UsXG4gICAgICAgICAgICAgICAgICAgIGJ1bGtGaWxlcyxcbiAgICAgICAgICAgICAgICAgICAgc3RyZWFtRmlsZXMsXG4gICAgICAgICAgICAgICAgICAgIHJlYWRlcixcbiAgICAgICAgICAgICAgICAgICAgc3RyZWFtVGltZXMsXG4gICAgICAgICAgICAgICAgICAgIHN0cmVhbURhdGEuc2l6ZXMsXG4gICAgICAgICAgICAgICAgICAgIHN0cmVhbURhdGEuZW50cmllcy5sZW5ndGgsXG4gICAgICAgICAgICAgICAgICAgIHN0cmVhbURhdGEudG90YWxCeXRlcyxcbiAgICAgICAgICAgICAgICAgICAgY29uZmlnLnN1YkNhY2hlcyxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgRmlsZXNDaGFuZ2VkRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgYXR0ZW1wdCsrO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIEFkb3B0cyB0aGUgcHJldmlvdXMgaW5kZXgncyBsb2FkZWQgYmFzZSB2YWx1ZXMgYXMgU1RBTEUgb24gdGhpcyBvbmUsIHNvIGEgc3luYyByZWFkIG1pZC1zd2FwIGNhbiBzZXJ2ZSB0aGUgb2xkIHZhbHVlIChwYXRjaGVkIHdpdGggdGhlIGN1cnJlbnQgb3ZlcmxheSkgaW5zdGVhZCBvZiBmbGFzaGluZyBlbXB0eSB3aGlsZSB0aGUgZnJlc2ggbG9hZCBydW5zLiBQZXItZW50cnk6IGRyb3BwZWQgd2hlbiB0aGUgZnJlc2ggdmFsdWUgbGFuZHMgaGVyZS5cbiAgICBpbmhlcml0U3RhbGVGcm9tKHByZXY6IExvYWRlZEluZGV4PFQ+KTogdm9pZCB7XG4gICAgICAgIGZvciAoY29uc3QgW2ssIHZdIG9mIHByZXYuYmFzZUNvbHVtbnMpIHRoaXMuc3RhbGVCYXNlQ29sdW1ucy5zZXQoaywgdik7XG4gICAgICAgIGZvciAoY29uc3QgW2ssIHZdIG9mIHByZXYuc3RhbGVCYXNlQ29sdW1ucykgaWYgKCF0aGlzLnN0YWxlQmFzZUNvbHVtbnMuaGFzKGspKSB0aGlzLnN0YWxlQmFzZUNvbHVtbnMuc2V0KGssIHYpO1xuICAgICAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBwcmV2LmJhc2VGaWVsZHMpIHRoaXMuc3RhbGVCYXNlRmllbGRzLnNldChrLCB2KTtcbiAgICAgICAgZm9yIChjb25zdCBbaywgdl0gb2YgcHJldi5zdGFsZUJhc2VGaWVsZHMpIGlmICghdGhpcy5zdGFsZUJhc2VGaWVsZHMuaGFzKGspKSB0aGlzLnN0YWxlQmFzZUZpZWxkcy5zZXQoaywgdik7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0Q29sdW1uKGNvbHVtbjogc3RyaW5nKTogUHJvbWlzZTx7IGtleTogc3RyaW5nOyB2YWx1ZTogdW5rbm93bjsgdGltZTogbnVtYmVyIH1bXT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5yZWFkZXIuZ2V0Q29sdW1uKGNvbHVtbik7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0U2luZ2xlRmllbGQoa2V5OiBzdHJpbmcsIGNvbHVtbjogc3RyaW5nKTogUHJvbWlzZTx7IHZhbHVlOiB1bmtub3duOyB0aW1lOiBudW1iZXIgfSB8IHVuZGVmaW5lZD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5yZWFkZXIuZ2V0U2luZ2xlRmllbGQoa2V5LCBjb2x1bW4pO1xuICAgIH1cblxuICAgIGVuc3VyZUJhc2VDb2x1bW4oY29sdW1uOiBzdHJpbmcsIG9uTG9hZGVkOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmJhc2VDb2x1bW5zLmhhcyhjb2x1bW4pIHx8IHRoaXMuYmFzZUNvbHVtbnNMb2FkaW5nLmhhcyhjb2x1bW4pKSByZXR1cm47XG4gICAgICAgIHRoaXMuYmFzZUNvbHVtbnNMb2FkaW5nLmFkZChjb2x1bW4pO1xuICAgICAgICB2b2lkIChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gYXdhaXQgdGhpcy5yZWFkZXIuZ2V0Q29sdW1uKGNvbHVtbik7XG4gICAgICAgICAgICAgICAgdGhpcy5iYXNlQ29sdW1ucy5zZXQoY29sdW1uLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGFsZUJhc2VDb2x1bW5zLmRlbGV0ZShjb2x1bW4pO1xuICAgICAgICAgICAgICAgIHRoaXMuYmFzZUNvbHVtbnNMb2FkaW5nLmRlbGV0ZShjb2x1bW4pO1xuICAgICAgICAgICAgICAgIG9uTG9hZGVkKCk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5iYXNlQ29sdW1uc0xvYWRpbmcuZGVsZXRlKGNvbHVtbik7XG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKGAke3RoaXMubmFtZX0uZ2V0Q29sdW1uU3luYygke0pTT04uc3RyaW5naWZ5KGNvbHVtbil9KSBsb2FkIGZhaWxlZCwgd2lsbCByZXRyeTogJHsoZSBhcyBFcnJvcikubWVzc2FnZX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkoKTtcbiAgICB9XG5cbiAgICBlbnN1cmVCYXNlRmllbGQoa2V5OiBzdHJpbmcsIGNvbHVtbjogc3RyaW5nLCBvbkxvYWRlZDogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgICAgICBjb25zdCBjayA9IG51bGxKb2luKGNvbHVtbiwga2V5KTtcbiAgICAgICAgaWYgKHRoaXMuYmFzZUZpZWxkcy5oYXMoY2spIHx8IHRoaXMuYmFzZUZpZWxkc0xvYWRpbmcuaGFzKGNrKSkgcmV0dXJuO1xuICAgICAgICB0aGlzLmJhc2VGaWVsZHNMb2FkaW5nLmFkZChjayk7XG4gICAgICAgIHZvaWQgKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBhd2FpdCB0aGlzLnJlYWRlci5nZXRTaW5nbGVGaWVsZChrZXksIGNvbHVtbik7XG4gICAgICAgICAgICAgICAgdGhpcy5iYXNlRmllbGRzLnNldChjaywgdmFsdWUpO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhbGVCYXNlRmllbGRzLmRlbGV0ZShjayk7XG4gICAgICAgICAgICAgICAgdGhpcy5iYXNlRmllbGRzTG9hZGluZy5kZWxldGUoY2spO1xuICAgICAgICAgICAgICAgIG9uTG9hZGVkKCk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5iYXNlRmllbGRzTG9hZGluZy5kZWxldGUoY2spO1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihgJHt0aGlzLm5hbWV9LmdldFNpbmdsZUZpZWxkU3luYygke0pTT04uc3RyaW5naWZ5KGtleSl9LCAke0pTT04uc3RyaW5naWZ5KGNvbHVtbil9KSBsb2FkIGZhaWxlZCwgd2lsbCByZXRyeTogJHsoZSBhcyBFcnJvcikubWVzc2FnZX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkoKTtcbiAgICB9XG5cbiAgICAvLyBSZXR1cm5zIHRoZSBsb2FkZWQgdmFsdWUgKGZyZXNoIGlmIGF2YWlsYWJsZSwgZWxzZSBsYXN0LWtub3duIHN0YWxlKSBmb3IgdGhlIGNvbHVtbiwgb3IgdW5kZWZpbmVkIGlmIG5laXRoZXIgaXMgcHJlc2VudCB5ZXQuIFRoZSBib29sZWFuIGluZGljYXRlcyB3aGV0aGVyIHRoZSByZXR1cm5lZCB2YWx1ZSBpcyBmcmVzaDsgY2FsbGVycyBtYXkgc2tpcCBjYWNoaW5nIGEgc3RhbGUgdmFsdWUuXG4gICAgZ2V0QmFzZUNvbHVtbihjb2x1bW46IHN0cmluZyk6IHsgZW50cmllczogeyBrZXk6IHN0cmluZzsgdmFsdWU6IHVua25vd247IHRpbWU6IG51bWJlciB9W107IGZyZXNoOiBib29sZWFuIH0gfCB1bmRlZmluZWQge1xuICAgICAgICBjb25zdCBmcmVzaCA9IHRoaXMuYmFzZUNvbHVtbnMuZ2V0KGNvbHVtbik7XG4gICAgICAgIGlmIChmcmVzaCkgcmV0dXJuIHsgZW50cmllczogZnJlc2gsIGZyZXNoOiB0cnVlIH07XG4gICAgICAgIGNvbnN0IHN0YWxlID0gdGhpcy5zdGFsZUJhc2VDb2x1bW5zLmdldChjb2x1bW4pO1xuICAgICAgICBpZiAoc3RhbGUpIHJldHVybiB7IGVudHJpZXM6IHN0YWxlLCBmcmVzaDogZmFsc2UgfTtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBnZXRCYXNlRmllbGQoa2V5OiBzdHJpbmcsIGNvbHVtbjogc3RyaW5nKTogeyB2YWx1ZTogeyB2YWx1ZTogdW5rbm93bjsgdGltZTogbnVtYmVyIH0gfCB1bmRlZmluZWQ7IGZyZXNoOiBib29sZWFuOyBsb2FkZWQ6IGJvb2xlYW4gfSB7XG4gICAgICAgIGNvbnN0IGNrID0gbnVsbEpvaW4oY29sdW1uLCBrZXkpO1xuICAgICAgICBpZiAodGhpcy5iYXNlRmllbGRzLmhhcyhjaykpIHJldHVybiB7IHZhbHVlOiB0aGlzLmJhc2VGaWVsZHMuZ2V0KGNrKSwgZnJlc2g6IHRydWUsIGxvYWRlZDogdHJ1ZSB9O1xuICAgICAgICBpZiAodGhpcy5zdGFsZUJhc2VGaWVsZHMuaGFzKGNrKSkgcmV0dXJuIHsgdmFsdWU6IHRoaXMuc3RhbGVCYXNlRmllbGRzLmdldChjayksIGZyZXNoOiBmYWxzZSwgbG9hZGVkOiB0cnVlIH07XG4gICAgICAgIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGZyZXNoOiBmYWxzZSwgbG9hZGVkOiBmYWxzZSB9O1xuICAgIH1cblxuICAgIGlzQmFzZUNvbHVtbkxvYWRlZChjb2x1bW46IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5iYXNlQ29sdW1ucy5oYXMoY29sdW1uKSB8fCB0aGlzLnN0YWxlQmFzZUNvbHVtbnMuaGFzKGNvbHVtbik7XG4gICAgfVxuXG4gICAgaXNCYXNlRmllbGRMb2FkZWQoa2V5OiBzdHJpbmcsIGNvbHVtbjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGNrID0gbnVsbEpvaW4oY29sdW1uLCBrZXkpO1xuICAgICAgICByZXR1cm4gdGhpcy5iYXNlRmllbGRzLmhhcyhjaykgfHwgdGhpcy5zdGFsZUJhc2VGaWVsZHMuaGFzKGNrKTtcbiAgICB9XG5cbiAgICAvLyBEcm9wcyBpbi1tZW1vcnkgbG9hZGVkIHZhbHVlcyBmb3IgdGhpcyBpbmRleCwgc28gYSBzdWJzZXF1ZW50IHJlYWQgcmVsb2FkcyBmcmVzaCBmcm9tIGRpc2suIFVzZWQgYnkgcmVsb2FkRnJvbURpc2soKSDigJQgYSBoYXJkIHJlc2V0LCBubyBzdGFsZSBmYWxsYmFjayBzdXJ2aXZlcy5cbiAgICBkcm9wTG9hZGVkVmFsdWVzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmJhc2VDb2x1bW5zLmNsZWFyKCk7XG4gICAgICAgIHRoaXMuYmFzZUNvbHVtbnNMb2FkaW5nLmNsZWFyKCk7XG4gICAgICAgIHRoaXMuYmFzZUZpZWxkcy5jbGVhcigpO1xuICAgICAgICB0aGlzLmJhc2VGaWVsZHNMb2FkaW5nLmNsZWFyKCk7XG4gICAgICAgIHRoaXMuc3RhbGVCYXNlQ29sdW1ucy5jbGVhcigpO1xuICAgICAgICB0aGlzLnN0YWxlQmFzZUZpZWxkcy5jbGVhcigpO1xuICAgIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG1ha2VSYXdHZXRSYW5nZShzdG9yYWdlOiBGaWxlU3RvcmFnZSwgZmlsZU5hbWU6IHN0cmluZyk6IFByb21pc2U8eyByYXdHZXRSYW5nZTogR2V0UmFuZ2U7IHNpemU6IG51bWJlciB9PiB7XG4gICAgY29uc3QgaW5mbyA9IGF3YWl0IHN0b3JhZ2UuZ2V0SW5mbyhmaWxlTmFtZSk7XG4gICAgaWYgKCFpbmZvKSB0aHJvdyBuZXcgTWlzc2luZ0ZpbGVFcnJvcihgYnVsayBmaWxlICR7ZmlsZU5hbWV9IGlzIG1pc3NpbmdgKTtcbiAgICBjb25zdCByYXdHZXRSYW5nZTogR2V0UmFuZ2UgPSBhc3luYyAoc3RhcnQsIGVuZCkgPT4ge1xuICAgICAgICBpZiAoZW5kIDw9IHN0YXJ0KSByZXR1cm4gRU1QVFlfQlVGRkVSO1xuICAgICAgICBjb25zdCBidWYgPSBhd2FpdCBzdG9yYWdlLmdldFJhbmdlKGZpbGVOYW1lLCB7IHN0YXJ0LCBlbmQgfSk7XG4gICAgICAgIGlmICghYnVmKSB0aHJvdyBuZXcgTWlzc2luZ0ZpbGVFcnJvcihgcmFuZ2UgWyR7c3RhcnR9LCAke2VuZH0pIG9mICR7ZmlsZU5hbWV9IGlzIG1pc3NpbmdgKTtcbiAgICAgICAgcmV0dXJuIGJ1ZjtcbiAgICB9O1xuICAgIHJldHVybiB7IHJhd0dldFJhbmdlLCBzaXplOiBpbmZvLnNpemUgfTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvYWRGaWxlUmVhZGVyKG5hbWU6IHN0cmluZywgc3RvcmFnZTogRmlsZVN0b3JhZ2UsIGY6IEJ1bGtGaWxlSW5mbywgY2FjaGU6IE1hcDxzdHJpbmcsIEJhc2VCdWxrRGF0YWJhc2VSZWFkZXI+KTogUHJvbWlzZTxCYXNlQnVsa0RhdGFiYXNlUmVhZGVyPiB7XG4gICAgY29uc3QgY2FjaGVkID0gY2FjaGUuZ2V0KGYuZmlsZU5hbWUpO1xuICAgIGlmIChjYWNoZWQpIHJldHVybiBjYWNoZWQ7XG4gICAgY29uc3QgcmF3ID0gYXdhaXQgbWFrZVJhd0dldFJhbmdlKHN0b3JhZ2UsIGYuZmlsZU5hbWUpO1xuICAgIGNvbnN0IGZpbGVJZCA9IG51bGxKb2luKG5hbWUsIGYuZmlsZU5hbWUpO1xuICAgIGNvbnN0IG9wZW5lZCA9IGF3YWl0IGJsb2NrQ2FjaGUub3BlbihmaWxlSWQsIHJhdy5zaXplLCByYXcucmF3R2V0UmFuZ2UpO1xuICAgIGNvbnN0IHJlYWRlciA9IGF3YWl0IGxvYWRCdWxrRGF0YWJhc2UoeyB0b3RhbEJ5dGVzOiBvcGVuZWQudW5jb21wcmVzc2VkU2l6ZSwgZ2V0UmFuZ2U6IG9wZW5lZC5nZXRSYW5nZSwgbmFtZTogYCR7QlVMS19ST09UX0ZPTERFUn0vJHtuYW1lfS8ke2YuZmlsZU5hbWV9YCB9KTtcbiAgICBjYWNoZS5zZXQoZi5maWxlTmFtZSwgcmVhZGVyKTtcbiAgICByZXR1cm4gcmVhZGVyO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9hZFN0cmVhbUVudHJpZXMoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIHN0b3JhZ2U6IEZpbGVTdG9yYWdlLFxuICAgIHN0cmVhbUZpbGVzOiBTdHJlYW1GaWxlSW5mb1tdLFxuICAgIGNhY2hlOiBNYXA8c3RyaW5nLCBTdHJlYW1SZWFkZXJDYWNoZUVudHJ5Pixcbik6IFByb21pc2U8eyBlbnRyaWVzOiB7IHRpbWU6IG51bWJlcjsgZmlsZU5hbWU6IHN0cmluZzsgZW50cnk6IFN0cmVhbUVudHJ5IH1bXTsgdG90YWxCeXRlczogbnVtYmVyOyBtaXNzaW5nOiBib29sZWFuOyBzaXplczogTWFwPHN0cmluZywgbnVtYmVyPiB9PiB7XG4gICAgY29uc3Qgc2l6ZXMgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xuICAgIGlmICghc3RyZWFtRmlsZXMubGVuZ3RoKSByZXR1cm4geyBlbnRyaWVzOiBbXSwgdG90YWxCeXRlczogMCwgbWlzc2luZzogZmFsc2UsIHNpemVzIH07XG4gICAgbGV0IG1pc3NpbmcgPSBmYWxzZTtcbiAgICBjb25zdCBwZXJGaWxlID0gYXdhaXQgUHJvbWlzZS5hbGwoc3RyZWFtRmlsZXMubWFwKGFzeW5jIChmKTogUHJvbWlzZTx7IGZpbGVOYW1lOiBzdHJpbmc7IHNpemU6IG51bWJlcjsgZW50cmllczogU3RyZWFtRW50cnlbXSB9IHwgdW5kZWZpbmVkPiA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBpbmZvID0gYXdhaXQgc3RvcmFnZS5nZXRJbmZvKGYuZmlsZU5hbWUpO1xuICAgICAgICAgICAgaWYgKCFpbmZvKSB7IG1pc3NpbmcgPSB0cnVlOyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gICAgICAgICAgICBjb25zdCBzaXplID0gaW5mby5zaXplO1xuICAgICAgICAgICAgc2l6ZXMuc2V0KGYuZmlsZU5hbWUsIHNpemUpO1xuICAgICAgICAgICAgY29uc3QgY2FjaGVkID0gY2FjaGUuZ2V0KGYuZmlsZU5hbWUpO1xuICAgICAgICAgICAgaWYgKGNhY2hlZCAmJiBjYWNoZWQucmVhZFNpemUgPT09IHNpemUpIHJldHVybiB7IGZpbGVOYW1lOiBmLmZpbGVOYW1lLCBzaXplLCBlbnRyaWVzOiBjYWNoZWQuZW50cmllcyB9O1xuICAgICAgICAgICAgaWYgKHNpemUgPT09IDApIHsgY2FjaGUuc2V0KGYuZmlsZU5hbWUsIHsgcmVhZFNpemU6IDAsIHBhcnNlZFBvczogMCwgZW50cmllczogW10gfSk7IHJldHVybiB7IGZpbGVOYW1lOiBmLmZpbGVOYW1lLCBzaXplOiAwLCBlbnRyaWVzOiBbXSB9OyB9XG4gICAgICAgICAgICAvLyBBcHBlbmQtb25seTogYSBsYXJnZXIgc2l6ZSBtZWFucyBuZXcgYnl0ZXMgYXQgdGhlIHRhaWwsIHBhcnNlIG9ubHkgdGhvc2UuXG4gICAgICAgICAgICBpZiAoY2FjaGVkICYmIHNpemUgPiBjYWNoZWQucmVhZFNpemUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdWZmaXggPSBhd2FpdCBzdG9yYWdlLmdldFJhbmdlKGYuZmlsZU5hbWUsIHsgc3RhcnQ6IGNhY2hlZC5wYXJzZWRQb3MsIGVuZDogc2l6ZSB9KTtcbiAgICAgICAgICAgICAgICBpZiAoIXN1ZmZpeCkgeyBtaXNzaW5nID0gdHJ1ZTsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlU3RyZWFtKHN1ZmZpeCk7XG4gICAgICAgICAgICAgICAgaWYgKHBhcnNlZC5iYWRCeXRlcyA+IDApIGNvbnNvbGUud2FybihgJHtuYW1lfSBzdHJlYW0gZmlsZSAke2YuZmlsZU5hbWV9IGhhZCAke3BhcnNlZC5iYWRCeXRlc30gdHJhaWxpbmcgYmFkL2luY29tcGxldGUgYnl0ZXMgKHN0b3BwZWQgcmVhZGluZyB0aGVyZSlgKTtcbiAgICAgICAgICAgICAgICBjb25zdCBlbnRyaWVzID0gcGFyc2VkLmVudHJpZXMubGVuZ3RoID8gY2FjaGVkLmVudHJpZXMuY29uY2F0KHBhcnNlZC5lbnRyaWVzKSA6IGNhY2hlZC5lbnRyaWVzO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcnNlZFBvcyA9IGNhY2hlZC5wYXJzZWRQb3MgKyAoc3VmZml4Lmxlbmd0aCAtIHBhcnNlZC5iYWRCeXRlcyk7XG4gICAgICAgICAgICAgICAgY2FjaGUuc2V0KGYuZmlsZU5hbWUsIHsgcmVhZFNpemU6IHNpemUsIHBhcnNlZFBvcywgZW50cmllcyB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBmaWxlTmFtZTogZi5maWxlTmFtZSwgc2l6ZSwgZW50cmllcyB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgYnVmZmVyID0gYXdhaXQgc3RvcmFnZS5nZXRSYW5nZShmLmZpbGVOYW1lLCB7IHN0YXJ0OiAwLCBlbmQ6IHNpemUgfSk7XG4gICAgICAgICAgICBpZiAoIWJ1ZmZlcikgeyBtaXNzaW5nID0gdHJ1ZTsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICAgICAgICAgICAgY29uc3QgcGFyc2VkID0gcGFyc2VTdHJlYW0oYnVmZmVyKTtcbiAgICAgICAgICAgIGlmIChwYXJzZWQuYmFkQnl0ZXMgPiAwKSBjb25zb2xlLndhcm4oYCR7bmFtZX0gc3RyZWFtIGZpbGUgJHtmLmZpbGVOYW1lfSBoYWQgJHtwYXJzZWQuYmFkQnl0ZXN9IHRyYWlsaW5nIGJhZC9pbmNvbXBsZXRlIGJ5dGVzIChzdG9wcGVkIHJlYWRpbmcgdGhlcmUpYCk7XG4gICAgICAgICAgICBjYWNoZS5zZXQoZi5maWxlTmFtZSwgeyByZWFkU2l6ZTogc2l6ZSwgcGFyc2VkUG9zOiBzaXplIC0gcGFyc2VkLmJhZEJ5dGVzLCBlbnRyaWVzOiBwYXJzZWQuZW50cmllcyB9KTtcbiAgICAgICAgICAgIHJldHVybiB7IGZpbGVOYW1lOiBmLmZpbGVOYW1lLCBzaXplLCBlbnRyaWVzOiBwYXJzZWQuZW50cmllcyB9O1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIG1pc3NpbmcgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgIH0pKTtcbiAgICBjb25zdCBlbnRyaWVzOiB7IHRpbWU6IG51bWJlcjsgZmlsZU5hbWU6IHN0cmluZzsgZW50cnk6IFN0cmVhbUVudHJ5IH1bXSA9IFtdO1xuICAgIGxldCB0b3RhbEJ5dGVzID0gMDtcbiAgICBmb3IgKGNvbnN0IHBmIG9mIHBlckZpbGUpIHtcbiAgICAgICAgaWYgKCFwZikgY29udGludWU7XG4gICAgICAgIHRvdGFsQnl0ZXMgKz0gcGYuc2l6ZTtcbiAgICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiBwZi5lbnRyaWVzKSBlbnRyaWVzLnB1c2goeyB0aW1lOiBlbnRyeS50aW1lLCBmaWxlTmFtZTogcGYuZmlsZU5hbWUsIGVudHJ5IH0pO1xuICAgIH1cbiAgICByZXR1cm4geyBlbnRyaWVzLCB0b3RhbEJ5dGVzLCBtaXNzaW5nLCBzaXplcyB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gb3JkZXJTdHJlYW1FbnRyaWVzKGVudHJpZXM6IHsgdGltZTogbnVtYmVyOyBmaWxlTmFtZTogc3RyaW5nOyBlbnRyeTogU3RyZWFtRW50cnkgfVtdKTogU3RyZWFtRW50cnlbXSB7XG4gICAgZW50cmllcy5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgIGlmIChhLnRpbWUgIT09IGIudGltZSkgcmV0dXJuIGEudGltZSAtIGIudGltZTtcbiAgICAgICAgcmV0dXJuIGEuZmlsZU5hbWUgPCBiLmZpbGVOYW1lICYmIC0xIHx8IGEuZmlsZU5hbWUgPiBiLmZpbGVOYW1lICYmIDEgfHwgMDtcbiAgICB9KTtcbiAgICByZXR1cm4gZW50cmllcy5tYXAoZSA9PiBlLmVudHJ5KTtcbn1cblxuZnVuY3Rpb24gcHJ1bmVTdWJDYWNoZXMoYnVsa0ZpbGVzOiBCdWxrRmlsZUluZm9bXSwgc3RyZWFtRmlsZXM6IFN0cmVhbUZpbGVJbmZvW10sIHN1YkNhY2hlczogU3ViUmVhZGVyQ2FjaGVzKSB7XG4gICAgY29uc3QgbGl2ZUJ1bGsgPSBuZXcgU2V0KGJ1bGtGaWxlcy5tYXAoZiA9PiBmLmZpbGVOYW1lKSk7XG4gICAgY29uc3QgbGl2ZVN0cmVhbSA9IG5ldyBTZXQoc3RyZWFtRmlsZXMubWFwKGYgPT4gZi5maWxlTmFtZSkpO1xuICAgIGZvciAoY29uc3QgbiBvZiBzdWJDYWNoZXMuYnVsay5rZXlzKCkpIGlmICghbGl2ZUJ1bGsuaGFzKG4pKSBzdWJDYWNoZXMuYnVsay5kZWxldGUobik7XG4gICAgZm9yIChjb25zdCBuIG9mIHN1YkNhY2hlcy5zdHJlYW0ua2V5cygpKSBpZiAoIWxpdmVTdHJlYW0uaGFzKG4pKSBzdWJDYWNoZXMuc3RyZWFtLmRlbGV0ZShuKTtcbn1cblxuLy8gQSBjb3JydXB0L3VucmVhZGFibGUgY29sdW1uIGluIE9ORSB1bmRlcmx5aW5nIGZpbGUgbXVzdCBub3QgYnJlYWsgdGhlIHdob2xlIGpvaW5lZCByZWFkLiBXaGVuIGEgc291cmNlJ3MgY29sdW1uIHJlYWQgdGhyb3dzLCB3ZSBkcm9wIHRoYXQgc291cmNlIGZvciB0aGF0IGNvbHVtbiAoZmFsbGluZyB0aHJvdWdoIHRvIG9sZGVyIHJlYWRlcnMsIGV4YWN0bHkgYXMgaWYgdGhlIGZpbGUgbmV2ZXIgc2V0IHRoZSBjb2x1bW4pIGFuZCB3YXJuIG9uY2UgcGVyIChmaWxlLCBjb2x1bW4pIHNvIHRoZSBjb3JydXB0aW9uIGlzIHZpc2libGUgd2l0aG91dCBmbG9vZGluZyB0aGUgbG9nIG9uIGV2ZXJ5IHJlYnVpbGQuXG5jb25zdCB3YXJuZWRDb3JydXB0UmVhZHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbmZ1bmN0aW9uIHdhcm5Db3JydXB0UmVhZChkYjogQmFzZUJ1bGtEYXRhYmFzZVJlYWRlciwgY29sdW1uOiBzdHJpbmcsIGU6IHVua25vd24pOiB2b2lkIHtcbiAgICBjb25zdCBwYXRoID0gZGIubmFtZSB8fCBcIih1bmtub3duIHNvdXJjZSlcIjtcbiAgICBjb25zdCBkZWR1cGVLZXkgPSBudWxsSm9pbihwYXRoLCBjb2x1bW4pO1xuICAgIGlmICh3YXJuZWRDb3JydXB0UmVhZHMuaGFzKGRlZHVwZUtleSkpIHJldHVybjtcbiAgICB3YXJuZWRDb3JydXB0UmVhZHMuYWRkKGRlZHVwZUtleSk7XG4gICAgY29uc29sZS53YXJuKGAke3JlZChcImNvcnJ1cHQgcmVhZFwiKX06IGZpbGUgJHtwYXRofSBjb2x1bW4gJHtKU09OLnN0cmluZ2lmeShjb2x1bW4pfSBjb3VsZCBub3QgYmUgcmVhZCAtIHNraXBwaW5nIGl0IChpdHMgZGF0YSBpcyBkcm9wcGVkIGZyb20gcmVzdWx0cyk6ICR7KGUgYXMgRXJyb3IpLm1lc3NhZ2V9YCk7XG59XG5cbmZ1bmN0aW9uIGpvaW5CdWxrRGF0YWJhc2VzKGRhdGFiYXNlczogQmFzZUJ1bGtEYXRhYmFzZVJlYWRlcltdKTogUmVzb2x2ZWRSZWFkZXIge1xuICAgIGNvbnN0IGRlbGV0ZVRpbWUgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xuICAgIGZvciAoY29uc3QgZGIgb2YgZGF0YWJhc2VzKSB7XG4gICAgICAgIGlmICghZGIuZGVsZXRlVGltZXMpIGNvbnRpbnVlO1xuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHRdIG9mIGRiLmRlbGV0ZVRpbWVzKSBkZWxldGVUaW1lLnNldChrZXksIE1hdGgubWF4KGRlbGV0ZVRpbWUuZ2V0KGtleSkgPz8gLUluZmluaXR5LCB0KSk7XG4gICAgfVxuICAgIGNvbnN0IGtleVRpbWUgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xuICAgIGZvciAoY29uc3QgZGIgb2YgZGF0YWJhc2VzKSB7XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdF0gb2YgZGIua2V5VGltZXMpIGtleVRpbWUuc2V0KGtleSwgTWF0aC5tYXgoa2V5VGltZS5nZXQoa2V5KSA/PyAtSW5maW5pdHksIHQpKTtcbiAgICB9XG4gICAgY29uc3QgZGVsT2YgPSAoa2V5OiBzdHJpbmcpID0+IGRlbGV0ZVRpbWUuZ2V0KGtleSkgPz8gLUluZmluaXR5O1xuICAgIGNvbnN0IGtleXM6IHN0cmluZ1tdID0gW107XG4gICAgZm9yIChjb25zdCBba2V5LCB0XSBvZiBrZXlUaW1lKSBpZiAodCA+IGRlbE9mKGtleSkpIGtleXMucHVzaChrZXkpO1xuXG4gICAgY29uc3QgY29sdW1uczogeyBjb2x1bW46IHN0cmluZzsgYnl0ZVNpemU6IG51bWJlciB9W10gPSBbXTtcbiAgICBjb25zdCBjb2x1bW5CeU5hbWUgPSBuZXcgTWFwPHN0cmluZywgeyBjb2x1bW46IHN0cmluZzsgYnl0ZVNpemU6IG51bWJlciB9PigpO1xuICAgIGZvciAoY29uc3QgZGIgb2YgZGF0YWJhc2VzKSB7XG4gICAgICAgIGZvciAoY29uc3QgY29sIG9mIGRiLmNvbHVtbnMpIHtcbiAgICAgICAgICAgIGxldCBleGlzdGluZyA9IGNvbHVtbkJ5TmFtZS5nZXQoY29sLmNvbHVtbik7XG4gICAgICAgICAgICBpZiAoIWV4aXN0aW5nKSB7XG4gICAgICAgICAgICAgICAgZXhpc3RpbmcgPSB7IGNvbHVtbjogY29sLmNvbHVtbiwgYnl0ZVNpemU6IDAgfTtcbiAgICAgICAgICAgICAgICBjb2x1bW5CeU5hbWUuc2V0KGNvbC5jb2x1bW4sIGV4aXN0aW5nKTtcbiAgICAgICAgICAgICAgICBjb2x1bW5zLnB1c2goZXhpc3RpbmcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZXhpc3RpbmcuYnl0ZVNpemUgKz0gY29sLmJ5dGVTaXplO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgdG90YWxCeXRlczogZGF0YWJhc2VzLnJlZHVjZSgoYWNjLCBkYikgPT4gYWNjICsgZGIudG90YWxCeXRlcywgMCksXG4gICAgICAgIHJvd0NvdW50OiBrZXlzLmxlbmd0aCxcbiAgICAgICAga2V5cyxcbiAgICAgICAgcmF3S2V5Q291bnQ6IGRhdGFiYXNlcy5yZWR1Y2UoKGFjYywgZGIpID0+IGFjYyArIGRiLmtleVRpbWVzLnNpemUgKyAoZGIuZGVsZXRlVGltZXM/LnNpemUgPz8gMCksIDApLFxuICAgICAgICByZWFkZXJDb3VudDogZGF0YWJhc2VzLmxlbmd0aCxcbiAgICAgICAgY29sdW1ucyxcbiAgICAgICAga2V5VGltZXM6IGtleVRpbWUsXG4gICAgICAgIGRlbGV0ZVRpbWVzOiBkZWxldGVUaW1lLFxuICAgICAgICBhc3luYyBnZXRDb2x1bW4oY29sdW1uKSB7XG4gICAgICAgICAgICBjb25zdCBwZXJSZWFkZXIgPSBhd2FpdCBQcm9taXNlLmFsbChkYXRhYmFzZXMubWFwKGFzeW5jIGRiID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIWRiLmNvbHVtbnMuc29tZShjID0+IGMuY29sdW1uID09PSBjb2x1bW4pKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVudHJpZXMgPSBhd2FpdCBkYi5nZXRDb2x1bW4oY29sdW1uKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBNYXAoZW50cmllcy5tYXAoZSA9PiBbZS5rZXksIHsgdmFsdWU6IGUudmFsdWUsIHRpbWU6IGUudGltZSB9XSkpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgd2FybkNvcnJ1cHRSZWFkKGRiLCBjb2x1bW4sIGUpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIHJldHVybiBrZXlzLm1hcChrZXkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBiZXN0VGltZSA9IC1JbmZpbml0eTtcbiAgICAgICAgICAgICAgICBsZXQgYmVzdFZhbDogdW5rbm93bjtcbiAgICAgICAgICAgICAgICBsZXQgZm91bmQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IG0gb2YgcGVyUmVhZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNlbGwgPSBtICYmIG0uZ2V0KGtleSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghY2VsbCB8fCBjZWxsLnZhbHVlID09PSBBQlNFTlQpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2VsbC50aW1lID4gYmVzdFRpbWUpIHsgYmVzdFRpbWUgPSBjZWxsLnRpbWU7IGJlc3RWYWwgPSBjZWxsLnZhbHVlOyBmb3VuZCA9IHRydWU7IH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgbGl2ZSA9IGZvdW5kICYmIGJlc3RUaW1lID4gZGVsT2Yoa2V5KTtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBrZXksIHZhbHVlOiBsaXZlID8gYmVzdFZhbCA6IHVuZGVmaW5lZCwgdGltZTogbGl2ZSA/IGJlc3RUaW1lIDogKGtleVRpbWUuZ2V0KGtleSkgPz8gMCkgfTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBhc3luYyBnZXRTaW5nbGVGaWVsZChrZXksIGNvbHVtbikge1xuICAgICAgICAgICAgY29uc3Qga3QgPSBrZXlUaW1lLmdldChrZXkpO1xuICAgICAgICAgICAgaWYgKGt0ID09PSB1bmRlZmluZWQgfHwga3QgPD0gZGVsT2Yoa2V5KSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGxldCBiZXN0VGltZSA9IC1JbmZpbml0eTtcbiAgICAgICAgICAgIGxldCBiZXN0VmFsOiB1bmtub3duO1xuICAgICAgICAgICAgbGV0IGZvdW5kID0gZmFsc2U7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGRiIG9mIGRhdGFiYXNlcykge1xuICAgICAgICAgICAgICAgIGlmICghZGIuY29sdW1ucy5zb21lKGMgPT4gYy5jb2x1bW4gPT09IGNvbHVtbikpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGxldCByO1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHIgPSBhd2FpdCBkYi5nZXRTaW5nbGVGaWVsZChrZXksIGNvbHVtbik7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICB3YXJuQ29ycnVwdFJlYWQoZGIsIGNvbHVtbiwgZSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAociA9PT0gQUJTRU5UKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBpZiAoci50aW1lID4gYmVzdFRpbWUpIHsgYmVzdFRpbWUgPSByLnRpbWU7IGJlc3RWYWwgPSByLnZhbHVlOyBmb3VuZCA9IHRydWU7IH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGxpdmUgPSBmb3VuZCAmJiBiZXN0VGltZSA+IGRlbE9mKGtleSk7XG4gICAgICAgICAgICByZXR1cm4geyB2YWx1ZTogbGl2ZSA/IGJlc3RWYWwgOiB1bmRlZmluZWQsIHRpbWU6IGxpdmUgPyBiZXN0VGltZSA6IGt0IH07XG4gICAgICAgIH0sXG4gICAgfTtcbn1cbiJdfQ==
|
|
423
|
-
/* _JS_SOURCE_HASH = "
|
|
423
|
+
/* _JS_SOURCE_HASH = "927ec67e00666869d53e5846cfcb94a730c45c52f2bc4368f96dc34a38979c83"; */
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";
|
|
1
|
+
"use strict"; var console = (function shimConsole() { let baseConsole = globalThis.console; if (typeof window !== "undefined") return baseConsole; let name = __filename.replaceAll("\\", "/").split("/").pop(); let dirName = __dirname.replaceAll("\\", "/").split("/").pop(); let context = { __FILE__: __filename, __DIR__: __dirname, __NAME__: name, __DIRNAME__: dirName }; let newConsole = { ...baseConsole }; for (let shim of ["log", "info", "warn", "error"]) { newConsole[shim] = (...args) => { args.push(context); baseConsole[shim](...args); }; } newConsole.__context = context; return newConsole; })(); "use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true , configurable: true});
|
|
3
3
|
//exports.WriteOverlay = exports.DELETED = void 0;
|
|
4
4
|
exports.DELETED = Symbol("deleted");
|
|
@@ -50,4 +50,4 @@ class WriteOverlay {
|
|
|
50
50
|
}
|
|
51
51
|
exports.WriteOverlay = WriteOverlay;
|
|
52
52
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiV3JpdGVPdmVybGF5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiV3JpdGVPdmVybGF5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFhLFFBQUEsT0FBTyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUl6Qyw0V0FBNFc7QUFDNVcsTUFBYSxZQUFZO0lBQXpCO1FBQ1ksWUFBTyxHQUFHLElBQUksR0FBRyxFQUF3QixDQUFDO0lBd0N0RCxDQUFDO0lBdENHLElBQUksSUFBSSxLQUFhLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ2hELEdBQUcsQ0FBQyxHQUFXLElBQThCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVFLEdBQUcsQ0FBQyxHQUFXLElBQWEsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDM0QsSUFBSSxLQUErQixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2hFLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFFL0QsUUFBUSxDQUFDLEdBQVcsRUFBRSxHQUE0QixFQUFFLElBQVksRUFBRSxPQUFnQjtRQUM5RSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN2QyxNQUFNLEtBQUssR0FBRyxRQUFRLElBQUksUUFBUSxDQUFDLEtBQUssS0FBSyxlQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxRQUFRLENBQUMsS0FBSyxFQUFFLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUs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ZXRlZFwiKTtcblxuZXhwb3J0IHR5cGUgT3ZlcmxheUVudHJ5ID0geyB0aW1lOiBudW1iZXI7IHZhbHVlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHR5cGVvZiBERUxFVEVEIH07XG5cbi8vIEluLW1lbW9yeSBwZW5kaW5nIG11dGF0aW9ucyBsYXllcmVkIG9uIHRvcCBvZiBhIExvYWRlZEluZGV4LiBFYWNoIGVudHJ5IGNhcnJpZXMgdGhlIHdyaXRlJ3MgdW5pcXVlIHRpbWVzdGFtcCBzbyBjcm9zcy10YWIgd3JpdGVzIGNhbiBiZSBvcmRlcmVkICsgdGhlIHN3YXAgY2FuIGRyb3AgZW50cmllcyB0aGUgbmV3IGluZGV4IGFscmVhZHkgY292ZXJzLiBNZXRob2RzIHRoYXQgbXV0YXRlIHJlcG9ydCB3aGljaCBjb2x1bW5zIGludmFsaWRhdGUgKFwiYWxsXCIgaWYgdGhlIGtleSdzIGxpdmVuZXNzIGZsaXBwZWQpLCBzbyB0aGUgaG9zdCBjYW4gZHJvcCB0aGUgcmlnaHQgY2FjaGVzIHdpdGhvdXQgc2Nhbm5pbmcgZXZlcnkgY29sdW1uLlxuZXhwb3J0IGNsYXNzIFdyaXRlT3ZlcmxheSB7XG4gICAgcHJpdmF0ZSBlbnRyaWVzID0gbmV3IE1hcDxzdHJpbmcsIE92ZXJsYXlFbnRyeT4oKTtcblxuICAgIGdldCBzaXplKCk6IG51bWJlciB7IHJldHVybiB0aGlzLmVudHJpZXMuc2l6ZTsgfVxuICAgIGdldChrZXk6IHN0cmluZyk6IE92ZXJsYXlFbnRyeSB8IHVuZGVmaW5lZCB7IHJldHVybiB0aGlzLmVudHJpZXMuZ2V0KGtleSk7IH1cbiAgICBoYXMoa2V5OiBzdHJpbmcpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuZW50cmllcy5oYXMoa2V5KTsgfVxuICAgIGtleXMoKTogSXRlcmFibGVJdGVyYXRvcjxzdHJpbmc+IHsgcmV0dXJuIHRoaXMuZW50cmllcy5rZXlzKCk7IH1cbiAgICBbU3ltYm9sLml0ZXJhdG9yXSgpIHsgcmV0dXJuIHRoaXMuZW50cmllc1tTeW1ib2wuaXRlcmF0b3JdKCk7IH1cblxuICAgIHdyaXRlUm93KGtleTogc3RyaW5nLCByb3c6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCB0aW1lOiBudW1iZXIsIHdhc0xpdmU6IGJvb2xlYW4pOiB7IGludmFsaWRhdGVkQ29sdW1uczogSXRlcmFibGU8c3RyaW5nPiB8IFwiYWxsXCIgfSB7XG4gICAgICAgIGNvbnN0IGV4aXN0aW5nID0gdGhpcy5lbnRyaWVzLmdldChrZXkpO1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGV4aXN0aW5nICYmIGV4aXN0aW5nLnZhbHVlICE9PSBERUxFVEVEID8geyAuLi5leGlzdGluZy52YWx1ZSwgLi4ucm93IH0gOiB7IC4uLnJvdyB9O1xuICAgICAgICB0aGlzLmVudHJpZXMuc2V0KGtleSwgeyB0aW1lLCB2YWx1ZSB9KTtcbiAgICAgICAgcmV0dXJuIHsgaW52YWxpZGF0ZWRDb2x1bW5zOiB3YXNMaXZlID8gT2JqZWN0LmtleXMocm93KSA6IFwiYWxsXCIgfTtcbiAgICB9XG5cbiAgICBkZWxldGVLZXkoa2V5OiBzdHJpbmcsIHRpbWU6IG51bWJlciwgd2FzTGl2ZTogYm9vbGVhbik6IHsgaW52YWxpZGF0ZWRDb2x1bW5zOiBJdGVyYWJsZTxzdHJpbmc+IHwgXCJhbGxcIiB9IHtcbiAgICAgICAgdGhpcy5lbnRyaWVzLnNldChrZXksIHsgdGltZSwgdmFsdWU6IERFTEVURUQgfSk7XG4gICAgICAgIHJldHVybiB7IGludmFsaWRhdGVkQ29sdW1uczogd2FzTGl2ZSA/IFwiYWxsXCIgOiBbXSB9O1xuICAgIH1cblxuICAgIGNsZWFyKCk6IHZvaWQgeyB0aGlzLmVudHJpZXMuY2xlYXIoKTsgfVxuXG4gICAgLy8gRHJvcCBlbnRyaWVzIHRoZSBuZXcgaW5kZXggYWxyZWFkeSByZWZsZWN0cyAoaXRzIGtleVRpbWUgb3IgZGVsZXRlVGltZSDiiaUgdGhlIGVudHJ5J3MgdGltZSkuIFRoZSByZW1haW5pbmcgZW50cmllcyBhcmUgd3JpdGVzIHRoZSBpbmRleCBkb2Vzbid0IHlldCBzZWUg4oCUIHRoZXkgaGF2ZSB0byBrZWVwIHNlcnZpbmcgcmVhZHMuXG4gICAgc3dlZXBDb3ZlcmVkKGF1dGhvcml0eTogKGtleTogc3RyaW5nKSA9PiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgZm9yIChjb25zdCBba2V5LCBlbnRyeV0gb2YgdGhpcy5lbnRyaWVzKSB7XG4gICAgICAgICAgICBpZiAoZW50cnkudGltZSA8PSBhdXRob3JpdHkoa2V5KSkgdGhpcy5lbnRyaWVzLmRlbGV0ZShrZXkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gQXBwbHkgdGhpcyBvdmVybGF5IG9udG8gdGhlIGJhc2UgY29sdW1uIGVudHJpZXMuIEEgY29sdW1uLXVuc2V0IG92ZXJsYXkgZW50cnkgbGVhdmVzIHRoZSBiYXNlIHZhbHVlK3RpbWUgaW4gcGxhY2UgKGEgcGFydGlhbCB3cml0ZSBvbmx5IG92ZXJyaWRlcyB0aGUgY29sdW1ucyBpdCBzZXQpLlxuICAgIHBhdGNoQ29sdW1uKGJhc2U6IHsga2V5OiBzdHJpbmc7IHZhbHVlOiB1bmtub3duOyB0aW1lOiBudW1iZXIgfVtdLCBjb2x1bW46IHN0cmluZyk6IHsga2V5OiBzdHJpbmc7IHZhbHVlOiB1bmtub3duOyB0aW1lOiBudW1iZXIgfVtdIHtcbiAgICAgICAgaWYgKHRoaXMuZW50cmllcy5zaXplID09PSAwKSByZXR1cm4gYmFzZTtcbiAgICAgICAgY29uc3QgbWFwID0gbmV3IE1hcChiYXNlLm1hcChlID0+IFtlLmtleSwgeyB2YWx1ZTogZS52YWx1ZSwgdGltZTogZS50aW1lIH1dKSk7XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgZW50cnldIG9mIHRoaXMuZW50cmllcykge1xuICAgICAgICAgICAgaWYgKGVudHJ5LnZhbHVlID09PSBERUxFVEVEKSB7IG1hcC5kZWxldGUoa2V5KTsgY29udGludWU7IH1cbiAgICAgICAgICAgIGlmIChjb2x1bW4gaW4gZW50cnkudmFsdWUpIG1hcC5zZXQoa2V5LCB7IHZhbHVlOiBlbnRyeS52YWx1ZVtjb2x1bW5dLCB0aW1lOiBlbnRyeS50aW1lIH0pO1xuICAgICAgICAgICAgZWxzZSBpZiAoIW1hcC5oYXMoa2V5KSkgbWFwLnNldChrZXksIHsgdmFsdWU6IHVuZGVmaW5lZCwgdGltZTogZW50cnkudGltZSB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gWy4uLm1hcF0ubWFwKChba2V5LCB2XSkgPT4gKHsga2V5LCB2YWx1ZTogdi52YWx1ZSwgdGltZTogdi50aW1lIH0pKTtcbiAgICB9XG59XG4iXX0=
|
|
53
|
-
/* _JS_SOURCE_HASH = "
|
|
53
|
+
/* _JS_SOURCE_HASH = "99976123a3b864b87fddf3d5601489193d6de02de44728af345d7dd8e627fc7d"; */
|