sliftutils 1.7.32 → 1.7.34
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/builders/extensionBuild.ts +1 -1
- package/bundler/bundleEntry.ts +1 -3
- package/bundler/bundler.ts +2 -4
- package/bundler/sourceMaps.ts +1 -2
- package/examplestorage/browser.tsx +1 -2
- package/examplestorage/exampleserver.ts +1 -2
- package/index.d.ts +134 -102
- package/misc/dist/environment.ts.cache +2 -2
- package/misc/dist/getSecret.ts.cache +2 -2
- package/misc/dist/strings.ts.cache +2 -2
- package/misc/dist/zip.ts.cache +2 -2
- package/misc/https/dist/certs.ts.cache +2 -2
- package/misc/https/dist/dns.ts.cache +7 -16
- package/misc/https/dist/persistentLocalStorage.ts.cache +2 -2
- package/misc/https/dns.d.ts +1 -4
- package/misc/https/dns.ts +5 -14
- package/misc/https/hostServer.d.ts +2 -0
- package/misc/https/hostServer.ts +6 -7
- package/misc/https/httpsCerts.ts +4 -10
- package/misc/openrouter.ts +1 -2
- package/package.json +1 -1
- package/render-utils/FullscreenModal.tsx +1 -4
- package/render-utils/GenericFormat.tsx +2 -8
- package/render-utils/Input.tsx +5 -13
- package/render-utils/InputLabel.tsx +4 -6
- package/render-utils/InputPicker.tsx +1 -2
- package/render-utils/URLParam.ts +2 -3
- package/render-utils/dist/observer.tsx.cache +2 -2
- package/render-utils/mobxTyped.ts +2 -3
- package/render-utils/niceStringify.ts +2 -4
- package/storage/ArchivesDisk.ts +4 -14
- package/storage/BulkDatabase2/BulkDatabase2.d.ts +1 -2
- package/storage/BulkDatabase2/BulkDatabase2.ts +4 -11
- package/storage/BulkDatabase2/BulkDatabaseBase.ts +42 -114
- package/storage/BulkDatabase2/BulkDatabaseFormat.ts +31 -91
- package/storage/BulkDatabase2/BulkDatabaseMerge.ts +19 -57
- package/storage/BulkDatabase2/BulkDatabaseReader.ts +4 -12
- package/storage/BulkDatabase2/LoadedIndex.ts +6 -18
- package/storage/BulkDatabase2/WriteOverlay.ts +3 -8
- package/storage/BulkDatabase2/blockCache.ts +12 -28
- package/storage/BulkDatabase2/dist/BulkDatabaseBase.ts.cache +40 -103
- package/storage/BulkDatabase2/dist/BulkDatabaseFormat.ts.cache +19 -50
- package/storage/BulkDatabase2/dist/BulkDatabaseMerge.ts.cache +18 -50
- package/storage/BulkDatabase2/dist/BulkDatabaseReader.ts.cache +7 -15
- package/storage/BulkDatabase2/dist/LoadedIndex.ts.cache +9 -21
- package/storage/BulkDatabase2/dist/WriteOverlay.ts.cache +6 -11
- package/storage/BulkDatabase2/dist/blockCache.ts.cache +15 -31
- package/storage/BulkDatabase2/dist/mergeLock.ts.cache +10 -29
- package/storage/BulkDatabase2/dist/mergeMarkers.ts.cache +10 -18
- package/storage/BulkDatabase2/dist/streamLog.ts.cache +17 -43
- package/storage/BulkDatabase2/dist/syncClient.ts.cache +11 -27
- package/storage/BulkDatabase2/mergeLock.ts +7 -26
- package/storage/BulkDatabase2/mergeMarkers.ts +7 -15
- package/storage/BulkDatabase2/streamLog.ts +14 -40
- package/storage/BulkDatabase2/syncClient.ts +8 -24
- package/storage/FileFolderAPI.tsx +28 -75
- package/storage/IArchives.d.ts +3 -3
- package/storage/IArchives.ts +21 -50
- package/storage/IStorage.ts +2 -4
- package/storage/PendingManager.tsx +2 -3
- package/storage/TransactionStorage.ts +11 -24
- package/storage/backblaze.ts +12 -43
- package/storage/dist/ArchivesDisk.ts.cache +7 -17
- package/storage/dist/FileFolderAPI.tsx.cache +25 -63
- package/storage/dist/IArchives.ts.cache +10 -20
- package/storage/dist/IndexedDBFileFolderAPI.ts.cache +2 -2
- package/storage/dist/JSONStorage.ts.cache +2 -2
- package/storage/dist/PendingManager.tsx.cache +5 -6
- package/storage/dist/TransactionStorage.ts.cache +14 -27
- package/storage/dist/backblaze.ts.cache +15 -46
- package/storage/dist/embeddingFormats.ts.cache +11 -24
- package/storage/dist/fileSystemPointer.ts.cache +4 -7
- package/storage/dist/remoteFileStorage.ts.cache +17 -36
- package/storage/embeddingFormats.ts +11 -27
- package/storage/fileSystemPointer.ts +2 -7
- package/storage/proxydatabase/dist/ivfEmbeddingDatabase.ts.cache +8 -18
- package/storage/proxydatabase/dist/transactionSet.ts.cache +4 -7
- package/storage/proxydatabase/inMemoryDatabase.ts +1 -3
- package/storage/proxydatabase/ivfEmbeddingDatabase.ts +8 -23
- package/storage/proxydatabase/transactionSet.ts +2 -5
- package/storage/remoteFileServer.ts +20 -48
- package/storage/remoteFileStorage.ts +14 -33
- package/storage/remoteStorage/ArchivesRemote.d.ts +1 -4
- package/storage/remoteStorage/ArchivesRemote.ts +11 -26
- package/storage/remoteStorage/ArchivesUrl.ts +2 -4
- package/storage/remoteStorage/accessPage.tsx +1 -5
- package/storage/remoteStorage/blobStore.d.ts +5 -13
- package/storage/remoteStorage/blobStore.ts +52 -130
- package/storage/remoteStorage/createArchives.d.ts +22 -14
- package/storage/remoteStorage/createArchives.ts +54 -188
- package/storage/remoteStorage/deployTakeover.d.ts +18 -32
- package/storage/remoteStorage/deployTakeover.ts +70 -384
- package/storage/remoteStorage/dist/ArchivesRemote.ts.cache +12 -24
- package/storage/remoteStorage/dist/ArchivesUrl.ts.cache +5 -7
- package/storage/remoteStorage/dist/blobStore.ts.cache +47 -117
- package/storage/remoteStorage/dist/cliArgs.ts.cache +2 -2
- package/storage/remoteStorage/dist/createArchives.ts.cache +58 -189
- package/storage/remoteStorage/dist/deployTakeover.ts.cache +81 -387
- package/storage/remoteStorage/dist/intermediateSources.ts.cache +119 -0
- package/storage/remoteStorage/dist/remoteConfig.ts.cache +36 -24
- package/storage/remoteStorage/dist/sourceWrapper.ts.cache +20 -40
- package/storage/remoteStorage/dist/storageClientController.ts.cache +4 -6
- package/storage/remoteStorage/dist/storageController.ts.cache +37 -74
- package/storage/remoteStorage/dist/storageServerState.ts.cache +345 -188
- package/storage/remoteStorage/grantAccessCli.ts +1 -3
- package/storage/remoteStorage/intermediateSources.d.ts +21 -0
- package/storage/remoteStorage/intermediateSources.ts +117 -0
- package/storage/remoteStorage/remoteConfig.ts +33 -20
- package/storage/remoteStorage/sourceWrapper.d.ts +8 -19
- package/storage/remoteStorage/sourceWrapper.ts +19 -41
- package/storage/remoteStorage/storageClientController.ts +1 -3
- package/storage/remoteStorage/storageController.d.ts +7 -6
- package/storage/remoteStorage/storageController.ts +36 -82
- package/storage/remoteStorage/storageServer.ts +20 -34
- package/storage/remoteStorage/storageServerState.d.ts +41 -5
- package/storage/remoteStorage/storageServerState.ts +355 -216
|
@@ -93,12 +93,9 @@ function embeddingLength(input) {
|
|
|
93
93
|
return input.data.length;
|
|
94
94
|
}
|
|
95
95
|
exports.embeddingLength = embeddingLength;
|
|
96
|
-
// A pool of reusable Float32 buffers keyed by length. Most embeddings share a size, so internal hot paths
|
|
97
|
-
//
|
|
98
|
-
//
|
|
99
|
-
//
|
|
100
|
-
// Each free buffer records when it was last released; an hourly sweep drops any that have sat idle for over
|
|
101
|
-
// an hour, so the runtime can free buffers a burst of work allocated but isn't actually reusing anymore.
|
|
96
|
+
// A pool of reusable Float32 buffers keyed by length. Most embeddings share a size, so internal hot paths borrow a buffer (embeddingToFloat32 with usePool) and return it (releaseFloat32) to avoid per-op allocations and GC thrashing. A borrowed buffer holds stale data; whoever borrows it overwrites it fully.
|
|
97
|
+
//
|
|
98
|
+
// Each free buffer records when it was last released; an hourly sweep drops any that have sat idle for over an hour, so the runtime can free buffers a burst of work allocated but isn't actually reusing anymore.
|
|
102
99
|
const POOL_MAX_IDLE_MS = 60 * 60 * 1000;
|
|
103
100
|
const float32Pool = new Map();
|
|
104
101
|
function acquireFloat32(length) {
|
|
@@ -133,10 +130,7 @@ const poolSweepTimer = setInterval(sweepFloat32Pool, POOL_MAX_IDLE_MS);
|
|
|
133
130
|
if (typeof poolSweepTimer.unref === "function") {
|
|
134
131
|
poolSweepTimer.unref();
|
|
135
132
|
}
|
|
136
|
-
// Decode to a Float32Array (full length). Stored values are already unit-normalized (encodeEmbedding does
|
|
137
|
-
// that), so this only de-quantizes. By default it allocates a fresh array (a float input is returned as-is,
|
|
138
|
-
// no copy). With usePool it borrows a pooled buffer the caller must releaseFloat32 — used by hot internal
|
|
139
|
-
// paths so repeated decodes don't allocate.
|
|
133
|
+
// Decode to a Float32Array (full length). Stored values are already unit-normalized (encodeEmbedding does that), so this only de-quantizes. By default it allocates a fresh array (a float input is returned as-is, no copy). With usePool it borrows a pooled buffer the caller must releaseFloat32 — used by hot internal paths so repeated decodes don't allocate.
|
|
140
134
|
function embeddingToFloat32(input, usePool = false) {
|
|
141
135
|
if (input instanceof Float32Array) {
|
|
142
136
|
if (!usePool)
|
|
@@ -180,9 +174,7 @@ function dotFloat32(a, b) {
|
|
|
180
174
|
}
|
|
181
175
|
return dot;
|
|
182
176
|
}
|
|
183
|
-
// Closeness = 1 - euclidean distance of two unit vectors. Always decode both to (pooled) float32 and dot:
|
|
184
|
-
// simple, and once the decodes are pooled it's the fastest per-call path. Batch callers (k-means) decode
|
|
185
|
-
// every vector once themselves instead of going through here.
|
|
177
|
+
// Closeness = 1 - euclidean distance of two unit vectors. Always decode both to (pooled) float32 and dot: simple, and once the decodes are pooled it's the fastest per-call path. Batch callers (k-means) decode every vector once themselves instead of going through here.
|
|
186
178
|
exports.getCloseness = (0, measure_1.measureWrap)(function getCloseness(a, b) {
|
|
187
179
|
let va = embeddingToFloat32(a, true);
|
|
188
180
|
let vb = embeddingToFloat32(b, true);
|
|
@@ -191,9 +183,7 @@ exports.getCloseness = (0, measure_1.measureWrap)(function getCloseness(a, b) {
|
|
|
191
183
|
releaseFloat32(vb);
|
|
192
184
|
return result;
|
|
193
185
|
});
|
|
194
|
-
// Encode a vector (or re-encode an embedding) into the requested format. This is THE place we normalize:
|
|
195
|
-
// the (truncated) vector is made unit length here, so anything that's been encoded is reliably normalized
|
|
196
|
-
// and the comparison/decoding paths never have to re-normalize.
|
|
186
|
+
// Encode a vector (or re-encode an embedding) into the requested format. This is THE place we normalize: the (truncated) vector is made unit length here, so anything that's been encoded is reliably normalized and the comparison/decoding paths never have to re-normalize.
|
|
197
187
|
function encodeEmbedding(config) {
|
|
198
188
|
let { input, format, model } = config;
|
|
199
189
|
let formatConfig = FORMAT_CONFIGS[format];
|
|
@@ -254,8 +244,7 @@ function encodeEmbedding(config) {
|
|
|
254
244
|
return result;
|
|
255
245
|
}
|
|
256
246
|
exports.encodeEmbedding = encodeEmbedding;
|
|
257
|
-
// Serialize to base64 so a StoredEmbedding can travel through the (string) API call result. Layout:
|
|
258
|
-
// [4-byte little-endian header length][JSON header][raw typed-array payload(s)].
|
|
247
|
+
// Serialize to base64 so a StoredEmbedding can travel through the (string) API call result. Layout: [4-byte little-endian header length][JSON header][raw typed-array payload(s)].
|
|
259
248
|
function serializeStoredEmbedding(stored) {
|
|
260
249
|
let header;
|
|
261
250
|
let payload;
|
|
@@ -298,8 +287,7 @@ function deserializeStoredEmbedding(base64) {
|
|
|
298
287
|
};
|
|
299
288
|
}
|
|
300
289
|
exports.deserializeStoredEmbedding = deserializeStoredEmbedding;
|
|
301
|
-
// Mean of several embeddings (encodeEmbedding normalizes the result to a unit centroid). Borrows a pooled
|
|
302
|
-
// accumulator.
|
|
290
|
+
// Mean of several embeddings (encodeEmbedding normalizes the result to a unit centroid). Borrows a pooled accumulator.
|
|
303
291
|
function averageEmbeddings(embeddings, config) {
|
|
304
292
|
let length = Infinity;
|
|
305
293
|
for (let embedding of embeddings) {
|
|
@@ -319,8 +307,7 @@ function averageEmbeddings(embeddings, config) {
|
|
|
319
307
|
return result;
|
|
320
308
|
}
|
|
321
309
|
exports.averageEmbeddings = averageEmbeddings;
|
|
322
|
-
// A stable 16-byte (base64) content hash of an embedding's values, for use as a cell id derived from its
|
|
323
|
-
// centroid. Iterates via the accessor (the value bits are hashed, so any format hashes consistently).
|
|
310
|
+
// A stable 16-byte (base64) content hash of an embedding's values, for use as a cell id derived from its centroid. Iterates via the accessor (the value bits are hashed, so any format hashes consistently).
|
|
324
311
|
function hashEmbedding(stored) {
|
|
325
312
|
let vector = embeddingToFloat32(stored, true);
|
|
326
313
|
let length = vector.length;
|
|
@@ -336,5 +323,5 @@ function hashEmbedding(stored) {
|
|
|
336
323
|
return Buffer.from(lanes.buffer).toString("base64");
|
|
337
324
|
}
|
|
338
325
|
exports.hashEmbedding = hashEmbedding;
|
|
339
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1iZWRkaW5nRm9ybWF0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImVtYmVkZGluZ0Zvcm1hdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbUVBQW9FO0FBQ3BFLHlEQUFrRTtBQU9yRCxRQUFBLGlCQUFpQixHQUFzQixDQUFDLFdBQVcsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQzlGLFFBQUEsd0JBQXdCLEdBQW9CLFdBQVcsQ0FBQztBQUtyRSxNQUFNLFFBQVEsR0FBRyxHQUFHLENBQUM7QUFRckIsTUFBTSxjQUFjLEdBQWtEO0lBQ2xFLFNBQVMsRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFFLEVBQUU7SUFDcEUsV0FBVyxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsRUFBRTtJQUN2RSxXQUFXLEVBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxFQUFFO0lBQ3ZFLE9BQU8sRUFBRSxFQUFFO0NBQ2QsQ0FBQztBQWlDRixNQUFNLGdCQUFnQixHQUFJLFVBQXlELENBQUMsWUFBWSxDQUFDO0FBRWpHLE1BQU0sVUFBVSxHQUFHLElBQUksWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZDLE1BQU0sVUFBVSxHQUFHLElBQUksVUFBVSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNyRCxTQUFTLFdBQVcsQ0FBQyxLQUFhO0lBQzlCLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7SUFDdEIsSUFBSSxNQUFNLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FB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Q0FBQyxJQUFJLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxLQUFLLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUNqRixDQUFDO0lBQ0wsQ0FBQztJQUNELGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN2QixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUN4RCxDQUFDO0FBYkQsc0NBYUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBtZWFzdXJlV3JhcCB9IGZyb20gXCJzb2NrZXQtZnVuY3Rpb24vc3JjL3Byb2ZpbGluZy9tZWFzdXJlXCI7XG5pbXBvcnQgeyBhc0J1ZmZlciwgYXNGbG9hdDMyIH0gZnJvbSBcInNvY2tldC1mdW5jdGlvbi9zcmMvYnVmZmVyc1wiO1xuXG4vLyBUaGUgZm9ybWF0cyBhbiBlbWJlZGRpbmcgY2FuIGJlIHN0b3JlZCAmIGNvbXBhcmVkIGluLiBUaGUgdHJhaWxpbmcgbnVtYmVyIGlzIHRoZSBNYXRyeW9zaGthXG4vLyB0cnVuY2F0aW9uIGxlbmd0aCAodGhlIGNvdW50IG9mIGxlYWRpbmcgZGltZW5zaW9ucyBrZXB0KS4gXCJxOGdOXCIgbWVhbnMgc2lnbmVkIGludDggdmFsdWVzIHdpdGhcbi8vIG9uZSBzY2FsZSBzaGFyZWQgYWNyb3NzIGV2ZXJ5IE4gZGltZW5zaW9ucy4gXCJmbG9hdDMyXCIga2VlcHMgdGhlIHJhdyAodHJ1bmNhdGVkKSB2ZWN0b3IuXG5leHBvcnQgdHlwZSBFbWJlZGRpbmdGb3JtYXQgPSBcInE4ZzhfMjA0OFwiIHwgXCJxOF9nMTZfMjA0OFwiIHwgXCJxOF9nMTZfMTAyNFwiIHwgXCJmbG9hdDMyXCI7XG5cbmV4cG9ydCBjb25zdCBFTUJFRERJTkdfRk9STUFUUzogRW1iZWRkaW5nRm9ybWF0W10gPSBbXCJxOGc4XzIwNDhcIiwgXCJxOF9nMTZfMjA0OFwiLCBcInE4X2cxNl8xMDI0XCIsIFwiZmxvYXQzMlwiXTtcbmV4cG9ydCBjb25zdCBERUZBVUxUX0VNQkVERElOR19GT1JNQVQ6IEVtYmVkZGluZ0Zvcm1hdCA9IFwicThnOF8yMDQ4XCI7XG5cbi8vIFRoZSBvbmx5IGVsZW1lbnQgcXVhbnRpemF0aW9uIHdlIHN1cHBvcnQgcmlnaHQgbm93IChzaWduZWQgaW50OCwgdmFsdWVzIGluIFstMTI3LCAxMjddKS5cbmV4cG9ydCB0eXBlIFF1YW50VHlwZSA9IFwicThcIjtcblxuY29uc3QgSU5UOF9NQVggPSAxMjc7XG5cbnR5cGUgRm9ybWF0Q29uZmlnID0ge1xuICAgIC8vIExlYWRpbmcgZGltZW5zaW9ucyBrZXB0LiB1bmRlZmluZWQga2VlcHMgdGhlIGZ1bGwgdmVjdG9yLlxuICAgIHRydW5jYXRpb24/OiBudW1iZXI7XG4gICAgLy8gaW50OCBncm91cCBxdWFudGl6YXRpb24gcGFyYW1ldGVycy4gdW5kZWZpbmVkIHN0b3JlcyB0aGUgcmF3IGZsb2F0MzIgdmVjdG9yLlxuICAgIHF1YW50PzogeyB0eXBlOiBRdWFudFR5cGU7IGdyb3VwU2l6ZTogbnVtYmVyIH07XG59O1xuY29uc3QgRk9STUFUX0NPTkZJR1M6IHsgW2Zvcm1hdCBpbiBFbWJlZGRpbmdGb3JtYXRdOiBGb3JtYXRDb25maWcgfSA9IHtcbiAgICBxOGc4XzIwNDg6IHsgdHJ1bmNhdGlvbjogMjA0OCwgcXVhbnQ6IHsgdHlwZTogXCJxOFwiLCBncm91cFNpemU6IDggfSB9LFxuICAgIHE4X2cxNl8yMDQ4OiB7IHRydW5jYXRpb246IDIwNDgsIHF1YW50OiB7IHR5cGU6IFwicThcIiwgZ3JvdXBTaXplOiAxNiB9IH0sXG4gICAgcThfZzE2XzEwMjQ6IHsgdHJ1bmNhdGlvbjogMTAyNCwgcXVhbnQ6IHsgdHlwZTogXCJxOFwiLCBncm91cFNpemU6IDE2IH0gfSxcbiAgICBmbG9hdDMyOiB7fSxcbn07XG5cbmV4cG9ydCB0eXBlIFN0b3JlZEVtYmVkZGluZyA9IHtcbiAgICBraW5kOiBcImZsb2F0MzJcIjtcbiAgICBtb2RlbDogc3RyaW5nO1xuICAgIHZhbHVlczogRmxvYXQzMkFycmF5O1xufSB8IHtcbiAgICBraW5kOiBcInF1YW50XCI7XG4gICAgbW9kZWw6IHN0cmluZztcbiAgICAvLyBFbGVtZW50IHF1YW50aXphdGlvbi4gXCJxOFwiIGlzIHNpZ25lZCBpbnQ4ICh2YWx1ZXMgaW4gWy0xMjcsIDEyN10pLlxuICAgIHR5cGU6IFF1YW50VHlwZTtcbiAgICAvLyBOdW1iZXIgb2YgY29uc2VjdXRpdmUgZGltZW5zaW9ucyBzaGFyaW5nIG9uZSBzY2FsZS5cbiAgICBncm91cFNpemU6IG51bWJlcjtcbiAgICAvLyBpbnQ4IHZhbHVlcyAob25lIHBlciBrZXB0IGRpbWVuc2lvbiksIHJlaW50ZXJwcmV0ZWQgYXMgcmF3IGJ5dGVzLlxuICAgIGRhdGE6IFVpbnQ4QXJyYXk7XG4gICAgLy8gZmxvYXQxNiBzY2FsZXMgKG9uZSBwZXIgZ3JvdXApLCByZWludGVycHJldGVkIGFzIHJhdyBieXRlcy5cbiAgICBzY2FsZXM6IFVpbnQ4QXJyYXk7XG59O1xuXG4vLyBGbG9hdDE2QXJyYXkgaXNuJ3QgaW4gb3VyIFR5cGVTY3JpcHQgbGliIGFuZCBpc24ndCBndWFyYW50ZWVkIGF0IHJ1bnRpbWUsIHNvIHdlIHJlYWQgaXQgb2ZmXG4vLyBnbG9iYWxUaGlzIGFuZCBmYWxsIGJhY2sgdG8gYSBtYW51YWwgaGFsZjwtPmZsb2F0IGNvbnZlcnNpb24gd2hlbiBpdCdzIG1pc3NpbmcuXG5pbnRlcmZhY2UgRmxvYXQxNkFycmF5TGlrZSB7XG4gICAgcmVhZG9ubHkgbGVuZ3RoOiBudW1iZXI7XG4gICAgW2luZGV4OiBudW1iZXJdOiBudW1iZXI7XG4gICAgcmVhZG9ubHkgYnVmZmVyOiBBcnJheUJ1ZmZlckxpa2U7XG4gICAgcmVhZG9ubHkgYnl0ZU9mZnNldDogbnVtYmVyO1xuICAgIHJlYWRvbmx5IGJ5dGVMZW5ndGg6IG51bWJlcjtcbn1cbmludGVyZmFjZSBGbG9hdDE2QXJyYXlDb25zdHJ1Y3RvciB7XG4gICAgbmV3KGxlbmd0aDogbnVtYmVyKTogRmxvYXQxNkFycmF5TGlrZTtcbiAgICBuZXcoZWxlbWVudHM6IEFycmF5TGlrZTxudW1iZXI+KTogRmxvYXQxNkFycmF5TGlrZTtcbiAgICBuZXcoYnVmZmVyOiBBcnJheUJ1ZmZlckxpa2UsIGJ5dGVPZmZzZXQ/OiBudW1iZXIsIGxlbmd0aD86IG51bWJlcik6IEZsb2F0MTZBcnJheUxpa2U7XG59XG5jb25zdCBGbG9hdDE2QXJyYXlDdG9yID0gKGdsb2JhbFRoaXMgYXMgeyBGbG9hdDE2QXJyYXk/OiBGbG9hdDE2QXJyYXlDb25zdHJ1Y3RvciB9KS5GbG9hdDE2QXJyYXk7XG5cbmNvbnN0IGYzMlNjcmF0Y2ggPSBuZXcgRmxvYXQzMkFycmF5KDEpO1xuY29uc3QgaTMyU2NyYXRjaCA9IG5ldyBJbnQzMkFycmF5KGYzMlNjcmF0Y2guYnVmZmVyKTtcbmZ1bmN0aW9uIGZsb2F0VG9IYWxmKHZhbHVlOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGYzMlNjcmF0Y2hbMF0gPSB2YWx1ZTtcbiAgICBsZXQgYml0c0luID0gaTMyU2NyYXRjaFswXTtcbiAgICBsZXQgYml0cyA9IChiaXRzSW4gPj4gMTYpICYgMHg4MDAwO1xuICAgIGxldCBtYW50aXNzYSA9IChiaXRzSW4gPj4gMTIpICYgMHgwN2ZmO1xuICAgIGxldCBleHBvbmVudCA9IChiaXRzSW4gPj4gMjMpICYgMHhmZjtcbiAgICBpZiAoZXhwb25lbnQgPCAxMDMpIHJldHVybiBiaXRzO1xuICAgIGlmIChleHBvbmVudCA+IDE0Mikge1xuICAgICAgICBiaXRzIHw9IDB4N2MwMDtcbiAgICAgICAgaWYgKGV4cG9uZW50ICE9PSAyNTUpIHtcbiAgICAgICAgICAgIGJpdHMgfD0gKGJpdHNJbiAmIDB4MDA3ZmZmZmYpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBiaXRzO1xuICAgIH1cbiAgICBpZiAoZXhwb25lbnQgPCAxMTMpIHtcbiAgICAgICAgbWFudGlzc2EgfD0gMHgwODAwO1xuICAgICAgICBiaXRzIHw9IChtYW50aXNzYSA+PiAoMTE0IC0gZXhwb25lbnQpKSArICgobWFudGlzc2EgPj4gKDExMyAtIGV4cG9uZW50KSkgJiAxKTtcbiAgICAgICAgcmV0dXJuIGJpdHM7XG4gICAgfVxuICAgIGJpdHMgfD0gKChleHBvbmVudCAtIDExMikgPDwgMTApIHwgKG1hbnRpc3NhID4+IDEpO1xuICAgIGJpdHMgKz0gbWFudGlzc2EgJiAxO1xuICAgIHJldHVybiBiaXRzO1xufVxuZnVuY3Rpb24gaGFsZlRvRmxvYXQoaGFsZjogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBsZXQgc2lnbiA9IChoYWxmICYgMHg4MDAwKSA+PiAxNTtcbiAgICBsZXQgZXhwb25lbnQgPSAoaGFsZiAmIDB4N2MwMCkgPj4gMTA7XG4gICAgbGV0IGZyYWN0aW9uID0gaGFsZiAmIDB4MDNmZjtcbiAgICBsZXQgc2lnbk11bHRpcGxpZXIgPSBzaWduICYmIC0xIHx8IDE7XG4gICAgaWYgKGV4cG9uZW50ID09PSAwKSB7XG4gICAgICAgIHJldHVybiBzaWduTXVsdGlwbGllciAqIE1hdGgucG93KDIsIC0xNCkgKiAoZnJhY3Rpb24gLyAxMDI0KTtcbiAgICB9XG4gICAgaWYgKGV4cG9uZW50ID09PSAweDFmKSB7XG4gICAgICAgIGlmIChmcmFjdGlvbikgcmV0dXJuIE5hTjtcbiAgICAgICAgcmV0dXJuIHNpZ25NdWx0aXBsaWVyICogSW5maW5pdHk7XG4gICAgfVxuICAgIHJldHVybiBzaWduTXVsdGlwbGllciAqIE1hdGgucG93KDIsIGV4cG9uZW50IC0gMTUpICogKDEgKyBmcmFjdGlvbiAvIDEwMjQpO1xufVxuXG5mdW5jdGlvbiBhc0ludDgoYnl0ZXM6IFVpbnQ4QXJyYXkpOiBJbnQ4QXJyYXkge1xuICAgIHJldHVybiBuZXcgSW50OEFycmF5KGJ5dGVzLmJ1ZmZlciwgYnl0ZXMuYnl0ZU9mZnNldCwgYnl0ZXMuYnl0ZUxlbmd0aCk7XG59XG5mdW5jdGlvbiBlbmNvZGVGbG9hdDE2KHZhbHVlczogRmxvYXQzMkFycmF5KTogVWludDhBcnJheSB7XG4gICAgaWYgKEZsb2F0MTZBcnJheUN0b3IpIHtcbiAgICAgICAgbGV0IGhhbGYgPSBuZXcgRmxvYXQxNkFycmF5Q3Rvcih2YWx1ZXMpO1xuICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoaGFsZi5idWZmZXIsIGhhbGYuYnl0ZU9mZnNldCwgaGFsZi5ieXRlTGVuZ3RoKTtcbiAgICB9XG4gICAgbGV0IG91dCA9IG5ldyBVaW50OEFycmF5KHZhbHVlcy5sZW5ndGggKiAyKTtcbiAgICBsZXQgdmlldyA9IG5ldyBEYXRhVmlldyhvdXQuYnVmZmVyKTtcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgdmFsdWVzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICB2aWV3LnNldFVpbnQxNihpbmRleCAqIDIsIGZsb2F0VG9IYWxmKHZhbHVlc1tpbmRleF0pLCB0cnVlKTtcbiAgICB9XG4gICAgcmV0dXJuIG91dDtcbn1cbmZ1bmN0aW9uIGFzRmxvYXQxNkluZGV4YWJsZShieXRlczogVWludDhBcnJheSk6IHsgcmVhZG9ubHkgbGVuZ3RoOiBudW1iZXI7W2luZGV4OiBudW1iZXJdOiBudW1iZXIgfSB7XG4gICAgLy8gRmxvYXQxNkFycmF5IC8gVWludDE2QXJyYXkgdmlld3MgcmVxdWlyZSAyLWJ5dGUgYWxpZ25tZW50OyBjb3B5IHdoZW4gdGhlIHN0b3JlZCBieXRlcyBhcmVuJ3QuXG4gICAgaWYgKGJ5dGVzLmJ5dGVPZmZzZXQgJSAyICE9PSAwKSB7XG4gICAgICAgIGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoYnl0ZXMpO1xuICAgIH1cbiAgICBsZXQgY291bnQgPSBNYXRoLmZsb29yKGJ5dGVzLmJ5dGVMZW5ndGggLyAyKTtcbiAgICBpZiAoRmxvYXQxNkFycmF5Q3Rvcikge1xuICAgICAgICByZXR1cm4gbmV3IEZsb2F0MTZBcnJheUN0b3IoYnl0ZXMuYnVmZmVyLCBieXRlcy5ieXRlT2Zmc2V0LCBjb3VudCk7XG4gICAgfVxuICAgIGxldCBoYWx2ZXMgPSBuZXcgVWludDE2QXJyYXkoYnl0ZXMuYnVmZmVyLCBieXRlcy5ieXRlT2Zmc2V0LCBjb3VudCk7XG4gICAgbGV0IG91dCA9IG5ldyBGbG9hdDMyQXJyYXkoY291bnQpO1xuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBjb3VudDsgaW5kZXgrKykge1xuICAgICAgICBvdXRbaW5kZXhdID0gaGFsZlRvRmxvYXQoaGFsdmVzW2luZGV4XSk7XG4gICAgfVxuICAgIHJldHVybiBvdXQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbWJlZGRpbmdMZW5ndGgoaW5wdXQ6IEZsb2F0MzJBcnJheSB8IFN0b3JlZEVtYmVkZGluZyk6IG51bWJlciB7XG4gICAgaWYgKGlucHV0IGluc3RhbmNlb2YgRmxvYXQzMkFycmF5KSByZXR1cm4gaW5wdXQubGVuZ3RoO1xuICAgIGlmIChpbnB1dC5raW5kID09PSBcImZsb2F0MzJcIikgcmV0dXJuIGlucHV0LnZhbHVlcy5sZW5ndGg7XG4gICAgcmV0dXJuIGlucHV0LmRhdGEubGVuZ3RoO1xufVxuXG4vLyBBIHBvb2wgb2YgcmV1c2FibGUgRmxvYXQzMiBidWZmZXJzIGtleWVkIGJ5IGxlbmd0aC4gTW9zdCBlbWJlZGRpbmdzIHNoYXJlIGEgc2l6ZSwgc28gaW50ZXJuYWwgaG90IHBhdGhzXG4vLyBib3Jyb3cgYSBidWZmZXIgKGVtYmVkZGluZ1RvRmxvYXQzMiB3aXRoIHVzZVBvb2wpIGFuZCByZXR1cm4gaXQgKHJlbGVhc2VGbG9hdDMyKSB0byBhdm9pZCBwZXItb3Bcbi8vIGFsbG9jYXRpb25zIGFuZCBHQyB0aHJhc2hpbmcuIEEgYm9ycm93ZWQgYnVmZmVyIGhvbGRzIHN0YWxlIGRhdGE7IHdob2V2ZXIgYm9ycm93cyBpdCBvdmVyd3JpdGVzIGl0IGZ1bGx5LlxuLy9cbi8vIEVhY2ggZnJlZSBidWZmZXIgcmVjb3JkcyB3aGVuIGl0IHdhcyBsYXN0IHJlbGVhc2VkOyBhbiBob3VybHkgc3dlZXAgZHJvcHMgYW55IHRoYXQgaGF2ZSBzYXQgaWRsZSBmb3Igb3ZlclxuLy8gYW4gaG91ciwgc28gdGhlIHJ1bnRpbWUgY2FuIGZyZWUgYnVmZmVycyBhIGJ1cnN0IG9mIHdvcmsgYWxsb2NhdGVkIGJ1dCBpc24ndCBhY3R1YWxseSByZXVzaW5nIGFueW1vcmUuXG5jb25zdCBQT09MX01BWF9JRExFX01TID0gNjAgKiA2MCAqIDEwMDA7XG50eXBlIFBvb2xlZEZsb2F0MzIgPSB7IGJ1ZmZlcjogRmxvYXQzMkFycmF5OyByZWxlYXNlZEF0OiBudW1iZXIgfTtcbmNvbnN0IGZsb2F0MzJQb29sID0gbmV3IE1hcDxudW1iZXIsIFBvb2xlZEZsb2F0MzJbXT4oKTtcbmZ1bmN0aW9uIGFjcXVpcmVGbG9hdDMyKGxlbmd0aDogbnVtYmVyKTogRmxvYXQzMkFycmF5IHtcbiAgICBsZXQgZnJlZSA9IGZsb2F0MzJQb29sLmdldChsZW5ndGgpO1xuICAgIGlmIChmcmVlICYmIGZyZWUubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBmcmVlLnBvcCgpIS5idWZmZXI7XG4gICAgfVxuICAgIHJldHVybiBuZXcgRmxvYXQzMkFycmF5KGxlbmd0aCk7XG59XG5leHBvcnQgZnVuY3Rpb24gcmVsZWFzZUZsb2F0MzIoYnVmZmVyOiBGbG9hdDMyQXJyYXkpOiB2b2lkIHtcbiAgICBsZXQgZnJlZSA9IGZsb2F0MzJQb29sLmdldChidWZmZXIubGVuZ3RoKTtcbiAgICBpZiAoIWZyZWUpIHtcbiAgICAgICAgZnJlZSA9IFtdO1xuICAgICAgICBmbG9hdDMyUG9vbC5zZXQoYnVmZmVyLmxlbmd0aCwgZnJlZSk7XG4gICAgfVxuICAgIGZyZWUucHVzaCh7IGJ1ZmZlciwgcmVsZWFzZWRBdDogRGF0ZS5ub3coKSB9KTtcbn1cbmZ1bmN0aW9uIHN3ZWVwRmxvYXQzMlBvb2woKTogdm9pZCB7XG4gICAgbGV0IGN1dG9mZiA9IERhdGUubm93KCkgLSBQT09MX01BWF9JRExFX01TO1xuICAgIGZvciAobGV0IGZyZWUgb2YgZmxvYXQzMlBvb2wudmFsdWVzKCkpIHtcbiAgICAgICAgbGV0IHdyaXRlSW5kZXggPSAwO1xuICAgICAgICBmb3IgKGxldCByZWFkSW5kZXggPSAwOyByZWFkSW5kZXggPCBmcmVlLmxlbmd0aDsgcmVhZEluZGV4KyspIHtcbiAgICAgICAgICAgIGlmIChmcmVlW3JlYWRJbmRleF0ucmVsZWFzZWRBdCA+IGN1dG9mZikge1xuICAgICAgICAgICAgICAgIGZyZWVbd3JpdGVJbmRleCsrXSA9IGZyZWVbcmVhZEluZGV4XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmcmVlLmxlbmd0aCA9IHdyaXRlSW5kZXg7XG4gICAgfVxufVxuY29uc3QgcG9vbFN3ZWVwVGltZXIgPSBzZXRJbnRlcnZhbChzd2VlcEZsb2F0MzJQb29sLCBQT09MX01BWF9JRExFX01TKSBhcyB1bmtub3duIGFzIHsgdW5yZWY/OiAoKSA9PiB2b2lkIH07XG5pZiAodHlwZW9mIHBvb2xTd2VlcFRpbWVyLnVucmVmID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBwb29sU3dlZXBUaW1lci51bnJlZigpO1xufVxuXG4vLyBEZWNvZGUgdG8gYSBGbG9hdDMyQXJyYXkgKGZ1bGwgbGVuZ3RoKS4gU3RvcmVkIHZhbHVlcyBhcmUgYWxyZWFkeSB1bml0LW5vcm1hbGl6ZWQgKGVuY29kZUVtYmVkZGluZyBkb2VzXG4vLyB0aGF0KSwgc28gdGhpcyBvbmx5IGRlLXF1YW50aXplcy4gQnkgZGVmYXVsdCBpdCBhbGxvY2F0ZXMgYSBmcmVzaCBhcnJheSAoYSBmbG9hdCBpbnB1dCBpcyByZXR1cm5lZCBhcy1pcyxcbi8vIG5vIGNvcHkpLiBXaXRoIHVzZVBvb2wgaXQgYm9ycm93cyBhIHBvb2xlZCBidWZmZXIgdGhlIGNhbGxlciBtdXN0IHJlbGVhc2VGbG9hdDMyIOKAlCB1c2VkIGJ5IGhvdCBpbnRlcm5hbFxuLy8gcGF0aHMgc28gcmVwZWF0ZWQgZGVjb2RlcyBkb24ndCBhbGxvY2F0ZS5cbmV4cG9ydCBmdW5jdGlvbiBlbWJlZGRpbmdUb0Zsb2F0MzIoaW5wdXQ6IEZsb2F0MzJBcnJheSB8IFN0b3JlZEVtYmVkZGluZywgdXNlUG9vbCA9IGZhbHNlKTogRmxvYXQzMkFycmF5IHtcbiAgICBpZiAoaW5wdXQgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXkpIHtcbiAgICAgICAgaWYgKCF1c2VQb29sKSByZXR1cm4gaW5wdXQ7XG4gICAgICAgIGxldCBvdXQgPSBhY3F1aXJlRmxvYXQzMihpbnB1dC5sZW5ndGgpO1xuICAgICAgICBvdXQuc2V0KGlucHV0KTtcbiAgICAgICAgcmV0dXJuIG91dDtcbiAgICB9XG4gICAgaWYgKGlucHV0LmtpbmQgPT09IFwiZmxvYXQzMlwiKSB7XG4gICAgICAgIGlmICghdXNlUG9vbCkgcmV0dXJuIGlucHV0LnZhbHVlcztcbiAgICAgICAgbGV0IG91dCA9IGFjcXVpcmVGbG9hdDMyKGlucHV0LnZhbHVlcy5sZW5ndGgpO1xuICAgICAgICBvdXQuc2V0KGlucHV0LnZhbHVlcyk7XG4gICAgICAgIHJldHVybiBvdXQ7XG4gICAgfVxuICAgIGxldCBpbnQ4ID0gYXNJbnQ4KGlucHV0LmRhdGEpO1xuICAgIGxldCBzY2FsZXMgPSBhc0Zsb2F0MTZJbmRleGFibGUoaW5wdXQuc2NhbGVzKTtcbiAgICBsZXQgZ3JvdXBTaXplID0gaW5wdXQuZ3JvdXBTaXplO1xuICAgIGxldCBsZW5ndGggPSBpbnQ4Lmxlbmd0aDtcbiAgICBsZXQgb3V0ID0gdXNlUG9vbCA/IGFjcXVpcmVGbG9hdDMyKGxlbmd0aCkgOiBuZXcgRmxvYXQzMkFycmF5KGxlbmd0aCk7XG4gICAgbGV0IGdyb3VwID0gMDtcbiAgICBmb3IgKGxldCBzdGFydCA9IDA7IHN0YXJ0IDwgbGVuZ3RoOyBzdGFydCArPSBncm91cFNpemUpIHtcbiAgICAgICAgbGV0IHNjYWxlID0gc2NhbGVzW2dyb3VwKytdO1xuICAgICAgICBsZXQgZW5kID0gTWF0aC5taW4oc3RhcnQgKyBncm91cFNpemUsIGxlbmd0aCk7XG4gICAgICAgIGZvciAobGV0IGluZGV4ID0gc3RhcnQ7IGluZGV4IDwgZW5kOyBpbmRleCsrKSB7XG4gICAgICAgICAgICBvdXRbaW5kZXhdID0gaW50OFtpbmRleF0gKiBzY2FsZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb3V0O1xufVxuXG5mdW5jdGlvbiBjbG9zZW5lc3NGcm9tRG90KGRvdDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAvLyBJbnB1dHMgYXJlIHVuaXQgdmVjdG9ycywgc28gZXVjbGlkZWFuXjIgPSAyIC0gMipkb3Q7IGNsYW1wIGF3YXkgdGlueSBuZWdhdGl2ZXMgZnJvbSBmbG9hdCBlcnJvci5cbiAgICByZXR1cm4gMSAtIE1hdGguc3FydChNYXRoLm1heCgwLCAyIC0gMiAqIGRvdCkpO1xufVxuXG5mdW5jdGlvbiBkb3RGbG9hdDMyKGE6IEZsb2F0MzJBcnJheSwgYjogRmxvYXQzMkFycmF5KTogbnVtYmVyIHtcbiAgICBsZXQgbGVuZ3RoID0gTWF0aC5taW4oYS5sZW5ndGgsIGIubGVuZ3RoKTtcbiAgICBsZXQgZG90ID0gMDtcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgIGRvdCArPSBhW2luZGV4XSAqIGJbaW5kZXhdO1xuICAgIH1cbiAgICByZXR1cm4gZG90O1xufVxuXG4vLyBDbG9zZW5lc3MgPSAxIC0gZXVjbGlkZWFuIGRpc3RhbmNlIG9mIHR3byB1bml0IHZlY3RvcnMuIEFsd2F5cyBkZWNvZGUgYm90aCB0byAocG9vbGVkKSBmbG9hdDMyIGFuZCBkb3Q6XG4vLyBzaW1wbGUsIGFuZCBvbmNlIHRoZSBkZWNvZGVzIGFyZSBwb29sZWQgaXQncyB0aGUgZmFzdGVzdCBwZXItY2FsbCBwYXRoLiBCYXRjaCBjYWxsZXJzIChrLW1lYW5zKSBkZWNvZGVcbi8vIGV2ZXJ5IHZlY3RvciBvbmNlIHRoZW1zZWx2ZXMgaW5zdGVhZCBvZiBnb2luZyB0aHJvdWdoIGhlcmUuXG5leHBvcnQgY29uc3QgZ2V0Q2xvc2VuZXNzID0gbWVhc3VyZVdyYXAoZnVuY3Rpb24gZ2V0Q2xvc2VuZXNzKGE6IEZsb2F0MzJBcnJheSB8IFN0b3JlZEVtYmVkZGluZywgYjogRmxvYXQzMkFycmF5IHwgU3RvcmVkRW1iZWRkaW5nKTogbnVtYmVyIHtcbiAgICBsZXQgdmEgPSBlbWJlZGRpbmdUb0Zsb2F0MzIoYSwgdHJ1ZSk7XG4gICAgbGV0IHZiID0gZW1iZWRkaW5nVG9GbG9hdDMyKGIsIHRydWUpO1xuICAgIGxldCByZXN1bHQgPSBjbG9zZW5lc3NGcm9tRG90KGRvdEZsb2F0MzIodmEsIHZiKSk7XG4gICAgcmVsZWFzZUZsb2F0MzIodmEpO1xuICAgIHJlbGVhc2VGbG9hdDMyKHZiKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufSk7XG5cbi8vIEVuY29kZSBhIHZlY3RvciAob3IgcmUtZW5jb2RlIGFuIGVtYmVkZGluZykgaW50byB0aGUgcmVxdWVzdGVkIGZvcm1hdC4gVGhpcyBpcyBUSEUgcGxhY2Ugd2Ugbm9ybWFsaXplOlxuLy8gdGhlICh0cnVuY2F0ZWQpIHZlY3RvciBpcyBtYWRlIHVuaXQgbGVuZ3RoIGhlcmUsIHNvIGFueXRoaW5nIHRoYXQncyBiZWVuIGVuY29kZWQgaXMgcmVsaWFibHkgbm9ybWFsaXplZFxuLy8gYW5kIHRoZSBjb21wYXJpc29uL2RlY29kaW5nIHBhdGhzIG5ldmVyIGhhdmUgdG8gcmUtbm9ybWFsaXplLlxuZXhwb3J0IGZ1bmN0aW9uIGVuY29kZUVtYmVkZGluZyhjb25maWc6IHtcbiAgICBpbnB1dDogRmxvYXQzMkFycmF5IHwgU3RvcmVkRW1iZWRkaW5nO1xuICAgIGZvcm1hdDogRW1iZWRkaW5nRm9ybWF0O1xuICAgIG1vZGVsOiBzdHJpbmc7XG59KTogU3RvcmVkRW1iZWRkaW5nIHtcbiAgICBsZXQgeyBpbnB1dCwgZm9ybWF0LCBtb2RlbCB9ID0gY29uZmlnO1xuICAgIGxldCBmb3JtYXRDb25maWcgPSBGT1JNQVRfQ09ORklHU1tmb3JtYXRdO1xuICAgIGxldCBkZWNvZGVkID0gZW1iZWRkaW5nVG9GbG9hdDMyKGlucHV0LCB0cnVlKTtcbiAgICBsZXQgbGVuZ3RoID0gZGVjb2RlZC5sZW5ndGg7XG4gICAgaWYgKGZvcm1hdENvbmZpZy50cnVuY2F0aW9uICE9PSB1bmRlZmluZWQgJiYgZm9ybWF0Q29uZmlnLnRydW5jYXRpb24gPCBsZW5ndGgpIHtcbiAgICAgICAgbGVuZ3RoID0gZm9ybWF0Q29uZmlnLnRydW5jYXRpb247XG4gICAgfVxuICAgIGxldCBub3JtID0gMDtcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgIG5vcm0gKz0gZGVjb2RlZFtpbmRleF0gKiBkZWNvZGVkW2luZGV4XTtcbiAgICB9XG4gICAgbGV0IG1hZ25pdHVkZSA9IE1hdGguc3FydChub3JtKSB8fCAxO1xuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgZGVjb2RlZFtpbmRleF0gLz0gbWFnbml0dWRlO1xuICAgIH1cblxuICAgIGxldCByZXN1bHQ6IFN0b3JlZEVtYmVkZGluZztcbiAgICBpZiAoIWZvcm1hdENvbmZpZy5xdWFudCkge1xuICAgICAgICByZXN1bHQgPSB7IGtpbmQ6IFwiZmxvYXQzMlwiLCBtb2RlbCwgdmFsdWVzOiBuZXcgRmxvYXQzMkFycmF5KGRlY29kZWQuc3ViYXJyYXkoMCwgbGVuZ3RoKSkgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBsZXQgeyB0eXBlLCBncm91cFNpemUgfSA9IGZvcm1hdENvbmZpZy5xdWFudDtcbiAgICAgICAgbGV0IGdyb3VwQ291bnQgPSBNYXRoLmNlaWwobGVuZ3RoIC8gZ3JvdXBTaXplKTtcbiAgICAgICAgbGV0IGludDggPSBuZXcgSW50OEFycmF5KGxlbmd0aCk7XG4gICAgICAgIGxldCBzY2FsZXMgPSBuZXcgRmxvYXQzMkFycmF5KGdyb3VwQ291bnQpO1xuICAgICAgICBmb3IgKGxldCBncm91cCA9IDA7IGdyb3VwIDwgZ3JvdXBDb3VudDsgZ3JvdXArKykge1xuICAgICAgICAgICAgbGV0IHN0YXJ0ID0gZ3JvdXAgKiBncm91cFNpemU7XG4gICAgICAgICAgICBsZXQgZW5kID0gTWF0aC5taW4oc3RhcnQgKyBncm91cFNpemUsIGxlbmd0aCk7XG4gICAgICAgICAgICBsZXQgbWF4QWJzID0gMDtcbiAgICAgICAgICAgIGZvciAobGV0IGluZGV4ID0gc3RhcnQ7IGluZGV4IDwgZW5kOyBpbmRleCsrKSB7XG4gICAgICAgICAgICAgICAgbGV0IGFic1ZhbHVlID0gTWF0aC5hYnMoZGVjb2RlZFtpbmRleF0pO1xuICAgICAgICAgICAgICAgIGlmIChhYnNWYWx1ZSA+IG1heEFicykgbWF4QWJzID0gYWJzVmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgc2NhbGUgPSBtYXhBYnMgLyBJTlQ4X01BWDtcbiAgICAgICAgICAgIHNjYWxlc1tncm91cF0gPSBzY2FsZTtcbiAgICAgICAgICAgIGlmICghc2NhbGUpIGNvbnRpbnVlO1xuICAgICAgICAgICAgZm9yIChsZXQgaW5kZXggPSBzdGFydDsgaW5kZXggPCBlbmQ7IGluZGV4KyspIHtcbiAgICAgICAgICAgICAgICBsZXQgcXVhbnRpemVkID0gTWF0aC5yb3VuZChkZWNvZGVkW2luZGV4XSAvIHNjYWxlKTtcbiAgICAgICAgICAgICAgICBpZiAocXVhbnRpemVkID4gSU5UOF9NQVgpIHF1YW50aXplZCA9IElOVDhfTUFYO1xuICAgICAgICAgICAgICAgIGlmIChxdWFudGl6ZWQgPCAtSU5UOF9NQVgpIHF1YW50aXplZCA9IC1JTlQ4X01BWDtcbiAgICAgICAgICAgICAgICBpbnQ4W2luZGV4XSA9IHF1YW50aXplZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXN1bHQgPSB7XG4gICAgICAgICAgICBraW5kOiBcInF1YW50XCIsXG4gICAgICAgICAgICBtb2RlbCxcbiAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICBncm91cFNpemUsXG4gICAgICAgICAgICBkYXRhOiBuZXcgVWludDhBcnJheShpbnQ4LmJ1ZmZlciwgaW50OC5ieXRlT2Zmc2V0LCBpbnQ4LmJ5dGVMZW5ndGgpLFxuICAgICAgICAgICAgc2NhbGVzOiBlbmNvZGVGbG9hdDE2KHNjYWxlcyksXG4gICAgICAgIH07XG4gICAgfVxuICAgIHJlbGVhc2VGbG9hdDMyKGRlY29kZWQpO1xuICAgIHJldHVybiByZXN1bHQ7XG59XG5cbnR5cGUgU2VyaWFsaXplZEhlYWRlciA9XG4gICAgfCB7IGtpbmQ6IFwiZmxvYXQzMlwiOyBtb2RlbDogc3RyaW5nIH1cbiAgICB8IHsga2luZDogXCJxdWFudFwiOyBtb2RlbDogc3RyaW5nOyB0eXBlOiBRdWFudFR5cGU7IGdyb3VwU2l6ZTogbnVtYmVyOyBkYXRhQnl0ZXM6IG51bWJlciB9O1xuXG4vLyBTZXJpYWxpemUgdG8gYmFzZTY0IHNvIGEgU3RvcmVkRW1iZWRkaW5nIGNhbiB0cmF2ZWwgdGhyb3VnaCB0aGUgKHN0cmluZykgQVBJIGNhbGwgcmVzdWx0LiBMYXlvdXQ6XG4vLyBbNC1ieXRlIGxpdHRsZS1lbmRpYW4gaGVhZGVyIGxlbmd0aF1bSlNPTiBoZWFkZXJdW3JhdyB0eXBlZC1hcnJheSBwYXlsb2FkKHMpXS5cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemVTdG9yZWRFbWJlZGRpbmcoc3RvcmVkOiBTdG9yZWRFbWJlZGRpbmcpOiBzdHJpbmcge1xuICAgIGxldCBoZWFkZXI6IFNlcmlhbGl6ZWRIZWFkZXI7XG4gICAgbGV0IHBheWxvYWQ6IFVpbnQ4QXJyYXlbXTtcbiAgICBpZiAoc3RvcmVkLmtpbmQgPT09IFwiZmxvYXQzMlwiKSB7XG4gICAgICAgIGhlYWRlciA9IHsga2luZDogXCJmbG9hdDMyXCIsIG1vZGVsOiBzdG9yZWQubW9kZWwgfTtcbiAgICAgICAgcGF5bG9hZCA9IFtuZXcgVWludDhBcnJheShzdG9yZWQudmFsdWVzLmJ1ZmZlciwgc3RvcmVkLnZhbHVlcy5ieXRlT2Zmc2V0LCBzdG9yZWQudmFsdWVzLmJ5dGVMZW5ndGgpXTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBoZWFkZXIgPSB7IGtpbmQ6IFwicXVhbnRcIiwgbW9kZWw6IHN0b3JlZC5tb2RlbCwgdHlwZTogc3RvcmVkLnR5cGUsIGdyb3VwU2l6ZTogc3RvcmVkLmdyb3VwU2l6ZSwgZGF0YUJ5dGVzOiBzdG9yZWQuZGF0YS5ieXRlTGVuZ3RoIH07XG4gICAgICAgIHBheWxvYWQgPSBbc3RvcmVkLmRhdGEsIHN0b3JlZC5zY2FsZXNdO1xuICAgIH1cbiAgICBsZXQgaGVhZGVyQnl0ZXMgPSBCdWZmZXIuZnJvbShKU09OLnN0cmluZ2lmeShoZWFkZXIpLCBcInV0ZjhcIik7XG4gICAgbGV0IGhlYWRlckxlbmd0aCA9IEJ1ZmZlci5hbGxvYyg0KTtcbiAgICBoZWFkZXJMZW5ndGgud3JpdGVVSW50MzJMRShoZWFkZXJCeXRlcy5sZW5ndGgsIDApO1xuICAgIHJldHVybiBCdWZmZXIuY29uY2F0KFtoZWFkZXJMZW5ndGgsIGhlYWRlckJ5dGVzLCAuLi5wYXlsb2FkLm1hcChhc0J1ZmZlcildKS50b1N0cmluZyhcImJhc2U2NFwiKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBkZXNlcmlhbGl6ZVN0b3JlZEVtYmVkZGluZyhiYXNlNjQ6IHN0cmluZyk6IFN0b3JlZEVtYmVkZGluZyB7XG4gICAgbGV0IGJ1ZmZlciA9IEJ1ZmZlci5mcm9tKGJhc2U2NCwgXCJiYXNlNjRcIik7XG4gICAgaWYgKGJ1ZmZlci5sZW5ndGggPCA0KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgU2VyaWFsaXplZCBlbWJlZGRpbmcgaXMgdG9vIHNob3J0ICgke2J1ZmZlci5sZW5ndGh9IGJ5dGVzKTogJHtiYXNlNjQuc2xpY2UoMCwgMjAwKX1gKTtcbiAgICB9XG4gICAgbGV0IGhlYWRlckxlbmd0aCA9IGJ1ZmZlci5yZWFkVUludDMyTEUoMCk7XG4gICAgbGV0IGhlYWRlckVuZCA9IDQgKyBoZWFkZXJMZW5ndGg7XG4gICAgaWYgKGhlYWRlckxlbmd0aCA8PSAwIHx8IGhlYWRlckVuZCA+IGJ1ZmZlci5sZW5ndGgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBTZXJpYWxpemVkIGVtYmVkZGluZyBoZWFkZXIgbGVuZ3RoICR7aGVhZGVyTGVuZ3RofSBpcyBpbnZhbGlkIGZvciAke2J1ZmZlci5sZW5ndGh9IGJ5dGVzOiAke2Jhc2U2NC5zbGljZSgwLCAyMDApfWApO1xuICAgIH1cbiAgICBsZXQgaGVhZGVyID0gSlNPTi5wYXJzZShidWZmZXIudG9TdHJpbmcoXCJ1dGY4XCIsIDQsIGhlYWRlckVuZCkpIGFzIFNlcmlhbGl6ZWRIZWFkZXI7XG4gICAgbGV0IHBheWxvYWQgPSBidWZmZXIuc3ViYXJyYXkoaGVhZGVyRW5kKTtcbiAgICBpZiAoaGVhZGVyLmtpbmQgPT09IFwiZmxvYXQzMlwiKSB7XG4gICAgICAgIHJldHVybiB7IGtpbmQ6IFwiZmxvYXQzMlwiLCBtb2RlbDogaGVhZGVyLm1vZGVsLCB2YWx1ZXM6IGFzRmxvYXQzMihhc0J1ZmZlcihVaW50OEFycmF5LmZyb20ocGF5bG9hZCkpKSB9O1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBraW5kOiBcInF1YW50XCIsXG4gICAgICAgIG1vZGVsOiBoZWFkZXIubW9kZWwsXG4gICAgICAgIHR5cGU6IGhlYWRlci50eXBlLFxuICAgICAgICBncm91cFNpemU6IGhlYWRlci5ncm91cFNpemUsXG4gICAgICAgIGRhdGE6IFVpbnQ4QXJyYXkuZnJvbShwYXlsb2FkLnN1YmFycmF5KDAsIGhlYWRlci5kYXRhQnl0ZXMpKSxcbiAgICAgICAgc2NhbGVzOiBVaW50OEFycmF5LmZyb20ocGF5bG9hZC5zdWJhcnJheShoZWFkZXIuZGF0YUJ5dGVzKSksXG4gICAgfTtcbn1cblxuLy8gTWVhbiBvZiBzZXZlcmFsIGVtYmVkZGluZ3MgKGVuY29kZUVtYmVkZGluZyBub3JtYWxpemVzIHRoZSByZXN1bHQgdG8gYSB1bml0IGNlbnRyb2lkKS4gQm9ycm93cyBhIHBvb2xlZFxuLy8gYWNjdW11bGF0b3IuXG5leHBvcnQgZnVuY3Rpb24gYXZlcmFnZUVtYmVkZGluZ3MoZW1iZWRkaW5nczogU3RvcmVkRW1iZWRkaW5nW10sIGNvbmZpZzogeyBmb3JtYXQ6IEVtYmVkZGluZ0Zvcm1hdDsgbW9kZWw6IHN0cmluZyB9KTogU3RvcmVkRW1iZWRkaW5nIHtcbiAgICBsZXQgbGVuZ3RoID0gSW5maW5pdHk7XG4gICAgZm9yIChsZXQgZW1iZWRkaW5nIG9mIGVtYmVkZGluZ3MpIHtcbiAgICAgICAgbGVuZ3RoID0gTWF0aC5taW4obGVuZ3RoLCBlbWJlZGRpbmdMZW5ndGgoZW1iZWRkaW5nKSk7XG4gICAgfVxuICAgIGxldCBzdW0gPSBhY3F1aXJlRmxvYXQzMihsZW5ndGgpO1xuICAgIHN1bS5maWxsKDApO1xuICAgIGZvciAobGV0IGVtYmVkZGluZyBvZiBlbWJlZGRpbmdzKSB7XG4gICAgICAgIGxldCB2ZWN0b3IgPSBlbWJlZGRpbmdUb0Zsb2F0MzIoZW1iZWRkaW5nLCB0cnVlKTtcbiAgICAgICAgZm9yIChsZXQgZGltZW5zaW9uID0gMDsgZGltZW5zaW9uIDwgbGVuZ3RoOyBkaW1lbnNpb24rKykge1xuICAgICAgICAgICAgc3VtW2RpbWVuc2lvbl0gKz0gdmVjdG9yW2RpbWVuc2lvbl07XG4gICAgICAgIH1cbiAgICAgICAgcmVsZWFzZUZsb2F0MzIodmVjdG9yKTtcbiAgICB9XG4gICAgbGV0IHJlc3VsdCA9IGVuY29kZUVtYmVkZGluZyh7IGlucHV0OiBzdW0uc3ViYXJyYXkoMCwgbGVuZ3RoKSwgZm9ybWF0OiBjb25maWcuZm9ybWF0LCBtb2RlbDogY29uZmlnLm1vZGVsIH0pO1xuICAgIHJlbGVhc2VGbG9hdDMyKHN1bSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLy8gQSBzdGFibGUgMTYtYnl0ZSAoYmFzZTY0KSBjb250ZW50IGhhc2ggb2YgYW4gZW1iZWRkaW5nJ3MgdmFsdWVzLCBmb3IgdXNlIGFzIGEgY2VsbCBpZCBkZXJpdmVkIGZyb20gaXRzXG4vLyBjZW50cm9pZC4gSXRlcmF0ZXMgdmlhIHRoZSBhY2Nlc3NvciAodGhlIHZhbHVlIGJpdHMgYXJlIGhhc2hlZCwgc28gYW55IGZvcm1hdCBoYXNoZXMgY29uc2lzdGVudGx5KS5cbmV4cG9ydCBmdW5jdGlvbiBoYXNoRW1iZWRkaW5nKHN0b3JlZDogU3RvcmVkRW1iZWRkaW5nKTogc3RyaW5nIHtcbiAgICBsZXQgdmVjdG9yID0gZW1iZWRkaW5nVG9GbG9hdDMyKHN0b3JlZCwgdHJ1ZSk7XG4gICAgbGV0IGxlbmd0aCA9IHZlY3Rvci5sZW5ndGg7XG4gICAgbGV0IGxhbmVzID0gbmV3IFVpbnQzMkFycmF5KFsyMTY2MTM2MjYxLCAyNjU0NDM1NzYxLCA0MDUwMywgMzI2NjQ4OTkxN10pO1xuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgZjMyU2NyYXRjaFswXSA9IHZlY3RvcltpbmRleF07XG4gICAgICAgIGxldCBiaXRzID0gaTMyU2NyYXRjaFswXTtcbiAgICAgICAgZm9yIChsZXQgbGFuZSA9IDA7IGxhbmUgPCBsYW5lcy5sZW5ndGg7IGxhbmUrKykge1xuICAgICAgICAgICAgbGFuZXNbbGFuZV0gPSBNYXRoLmltdWwobGFuZXNbbGFuZV0gXiAoYml0cyArIGxhbmUgKiAxMzEgKyBpbmRleCksIDE2Nzc3NjE5KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZWxlYXNlRmxvYXQzMih2ZWN0b3IpO1xuICAgIHJldHVybiBCdWZmZXIuZnJvbShsYW5lcy5idWZmZXIpLnRvU3RyaW5nKFwiYmFzZTY0XCIpO1xufVxuIl19
|
|
340
|
-
/* _JS_SOURCE_HASH = "
|
|
326
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1iZWRkaW5nRm9ybWF0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImVtYmVkZGluZ0Zvcm1hdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbUVBQW9FO0FBQ3BFLHlEQUFrRTtBQUtyRCxRQUFBLGlCQUFpQixHQUFzQixDQUFDLFdBQVcsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQzlGLFFBQUEsd0JBQXdCLEdBQW9CLFdBQVcsQ0FBQztBQUtyRSxNQUFNLFFBQVEsR0FBRyxHQUFHLENBQUM7QUFRckIsTUFBTSxjQUFjLEdBQWtEO0lBQ2xFLFNBQVMsRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFFLEVBQUU7SUFDcEUsV0FBVyxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsRUFBRTtJQUN2RSxXQUFXLEVBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxFQUFFO0lBQ3ZFLE9BQU8sRUFBRSxFQUFFO0NBQ2QsQ0FBQztBQWdDRixNQUFNLGdCQUFnQixHQUFJLFVBQXlELENBQUMsWUFBWSxDQUFDO0FBRWpHLE1BQU0sVUFBVSxHQUFHLElBQUksWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZDLE1BQU0sVUFBVSxHQUFHLElBQUksVUFBVSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNyRCxTQUFTLFdBQVcsQ0FBQyxLQUFhO0lBQzlCLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7SUFDdEIsSUFBSSxNQUFNLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FB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LENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3hELENBQUM7QUFiRCxzQ0FhQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IG1lYXN1cmVXcmFwIH0gZnJvbSBcInNvY2tldC1mdW5jdGlvbi9zcmMvcHJvZmlsaW5nL21lYXN1cmVcIjtcbmltcG9ydCB7IGFzQnVmZmVyLCBhc0Zsb2F0MzIgfSBmcm9tIFwic29ja2V0LWZ1bmN0aW9uL3NyYy9idWZmZXJzXCI7XG5cbi8vIFRoZSBmb3JtYXRzIGFuIGVtYmVkZGluZyBjYW4gYmUgc3RvcmVkICYgY29tcGFyZWQgaW4uIFRoZSB0cmFpbGluZyBudW1iZXIgaXMgdGhlIE1hdHJ5b3Noa2EgdHJ1bmNhdGlvbiBsZW5ndGggKHRoZSBjb3VudCBvZiBsZWFkaW5nIGRpbWVuc2lvbnMga2VwdCkuIFwicThnTlwiIG1lYW5zIHNpZ25lZCBpbnQ4IHZhbHVlcyB3aXRoIG9uZSBzY2FsZSBzaGFyZWQgYWNyb3NzIGV2ZXJ5IE4gZGltZW5zaW9ucy4gXCJmbG9hdDMyXCIga2VlcHMgdGhlIHJhdyAodHJ1bmNhdGVkKSB2ZWN0b3IuXG5leHBvcnQgdHlwZSBFbWJlZGRpbmdGb3JtYXQgPSBcInE4ZzhfMjA0OFwiIHwgXCJxOF9nMTZfMjA0OFwiIHwgXCJxOF9nMTZfMTAyNFwiIHwgXCJmbG9hdDMyXCI7XG5cbmV4cG9ydCBjb25zdCBFTUJFRERJTkdfRk9STUFUUzogRW1iZWRkaW5nRm9ybWF0W10gPSBbXCJxOGc4XzIwNDhcIiwgXCJxOF9nMTZfMjA0OFwiLCBcInE4X2cxNl8xMDI0XCIsIFwiZmxvYXQzMlwiXTtcbmV4cG9ydCBjb25zdCBERUZBVUxUX0VNQkVERElOR19GT1JNQVQ6IEVtYmVkZGluZ0Zvcm1hdCA9IFwicThnOF8yMDQ4XCI7XG5cbi8vIFRoZSBvbmx5IGVsZW1lbnQgcXVhbnRpemF0aW9uIHdlIHN1cHBvcnQgcmlnaHQgbm93IChzaWduZWQgaW50OCwgdmFsdWVzIGluIFstMTI3LCAxMjddKS5cbmV4cG9ydCB0eXBlIFF1YW50VHlwZSA9IFwicThcIjtcblxuY29uc3QgSU5UOF9NQVggPSAxMjc7XG5cbnR5cGUgRm9ybWF0Q29uZmlnID0ge1xuICAgIC8vIExlYWRpbmcgZGltZW5zaW9ucyBrZXB0LiB1bmRlZmluZWQga2VlcHMgdGhlIGZ1bGwgdmVjdG9yLlxuICAgIHRydW5jYXRpb24/OiBudW1iZXI7XG4gICAgLy8gaW50OCBncm91cCBxdWFudGl6YXRpb24gcGFyYW1ldGVycy4gdW5kZWZpbmVkIHN0b3JlcyB0aGUgcmF3IGZsb2F0MzIgdmVjdG9yLlxuICAgIHF1YW50PzogeyB0eXBlOiBRdWFudFR5cGU7IGdyb3VwU2l6ZTogbnVtYmVyIH07XG59O1xuY29uc3QgRk9STUFUX0NPTkZJR1M6IHsgW2Zvcm1hdCBpbiBFbWJlZGRpbmdGb3JtYXRdOiBGb3JtYXRDb25maWcgfSA9IHtcbiAgICBxOGc4XzIwNDg6IHsgdHJ1bmNhdGlvbjogMjA0OCwgcXVhbnQ6IHsgdHlwZTogXCJxOFwiLCBncm91cFNpemU6IDggfSB9LFxuICAgIHE4X2cxNl8yMDQ4OiB7IHRydW5jYXRpb246IDIwNDgsIHF1YW50OiB7IHR5cGU6IFwicThcIiwgZ3JvdXBTaXplOiAxNiB9IH0sXG4gICAgcThfZzE2XzEwMjQ6IHsgdHJ1bmNhdGlvbjogMTAyNCwgcXVhbnQ6IHsgdHlwZTogXCJxOFwiLCBncm91cFNpemU6IDE2IH0gfSxcbiAgICBmbG9hdDMyOiB7fSxcbn07XG5cbmV4cG9ydCB0eXBlIFN0b3JlZEVtYmVkZGluZyA9IHtcbiAgICBraW5kOiBcImZsb2F0MzJcIjtcbiAgICBtb2RlbDogc3RyaW5nO1xuICAgIHZhbHVlczogRmxvYXQzMkFycmF5O1xufSB8IHtcbiAgICBraW5kOiBcInF1YW50XCI7XG4gICAgbW9kZWw6IHN0cmluZztcbiAgICAvLyBFbGVtZW50IHF1YW50aXphdGlvbi4gXCJxOFwiIGlzIHNpZ25lZCBpbnQ4ICh2YWx1ZXMgaW4gWy0xMjcsIDEyN10pLlxuICAgIHR5cGU6IFF1YW50VHlwZTtcbiAgICAvLyBOdW1iZXIgb2YgY29uc2VjdXRpdmUgZGltZW5zaW9ucyBzaGFyaW5nIG9uZSBzY2FsZS5cbiAgICBncm91cFNpemU6IG51bWJlcjtcbiAgICAvLyBpbnQ4IHZhbHVlcyAob25lIHBlciBrZXB0IGRpbWVuc2lvbiksIHJlaW50ZXJwcmV0ZWQgYXMgcmF3IGJ5dGVzLlxuICAgIGRhdGE6IFVpbnQ4QXJyYXk7XG4gICAgLy8gZmxvYXQxNiBzY2FsZXMgKG9uZSBwZXIgZ3JvdXApLCByZWludGVycHJldGVkIGFzIHJhdyBieXRlcy5cbiAgICBzY2FsZXM6IFVpbnQ4QXJyYXk7XG59O1xuXG4vLyBGbG9hdDE2QXJyYXkgaXNuJ3QgaW4gb3VyIFR5cGVTY3JpcHQgbGliIGFuZCBpc24ndCBndWFyYW50ZWVkIGF0IHJ1bnRpbWUsIHNvIHdlIHJlYWQgaXQgb2ZmIGdsb2JhbFRoaXMgYW5kIGZhbGwgYmFjayB0byBhIG1hbnVhbCBoYWxmPC0+ZmxvYXQgY29udmVyc2lvbiB3aGVuIGl0J3MgbWlzc2luZy5cbmludGVyZmFjZSBGbG9hdDE2QXJyYXlMaWtlIHtcbiAgICByZWFkb25seSBsZW5ndGg6IG51bWJlcjtcbiAgICBbaW5kZXg6IG51bWJlcl06IG51bWJlcjtcbiAgICByZWFkb25seSBidWZmZXI6IEFycmF5QnVmZmVyTGlrZTtcbiAgICByZWFkb25seSBieXRlT2Zmc2V0OiBudW1iZXI7XG4gICAgcmVhZG9ubHkgYnl0ZUxlbmd0aDogbnVtYmVyO1xufVxuaW50ZXJmYWNlIEZsb2F0MTZBcnJheUNvbnN0cnVjdG9yIHtcbiAgICBuZXcobGVuZ3RoOiBudW1iZXIpOiBGbG9hdDE2QXJyYXlMaWtlO1xuICAgIG5ldyhlbGVtZW50czogQXJyYXlMaWtlPG51bWJlcj4pOiBGbG9hdDE2QXJyYXlMaWtlO1xuICAgIG5ldyhidWZmZXI6IEFycmF5QnVmZmVyTGlrZSwgYnl0ZU9mZnNldD86IG51bWJlciwgbGVuZ3RoPzogbnVtYmVyKTogRmxvYXQxNkFycmF5TGlrZTtcbn1cbmNvbnN0IEZsb2F0MTZBcnJheUN0b3IgPSAoZ2xvYmFsVGhpcyBhcyB7IEZsb2F0MTZBcnJheT86IEZsb2F0MTZBcnJheUNvbnN0cnVjdG9yIH0pLkZsb2F0MTZBcnJheTtcblxuY29uc3QgZjMyU2NyYXRjaCA9IG5ldyBGbG9hdDMyQXJyYXkoMSk7XG5jb25zdCBpMzJTY3JhdGNoID0gbmV3IEludDMyQXJyYXkoZjMyU2NyYXRjaC5idWZmZXIpO1xuZnVuY3Rpb24gZmxvYXRUb0hhbGYodmFsdWU6IG51bWJlcik6IG51bWJlciB7XG4gICAgZjMyU2NyYXRjaFswXSA9IHZhbHVlO1xuICAgIGxldCBiaXRzSW4gPSBpMzJTY3JhdGNoWzBdO1xuICAgIGxldCBiaXRzID0gKGJpdHNJbiA+PiAxNikgJiAweDgwMDA7XG4gICAgbGV0IG1hbnRpc3NhID0gKGJpdHNJbiA+PiAxMikgJiAweDA3ZmY7XG4gICAgbGV0IGV4cG9uZW50ID0gKGJpdHNJbiA+PiAyMykgJiAweGZmO1xuICAgIGlmIChleHBvbmVudCA8IDEwMykgcmV0dXJuIGJpdHM7XG4gICAgaWYgKGV4cG9uZW50ID4gMTQyKSB7XG4gICAgICAgIGJpdHMgfD0gMHg3YzAwO1xuICAgICAgICBpZiAoZXhwb25lbnQgIT09IDI1NSkge1xuICAgICAgICAgICAgYml0cyB8PSAoYml0c0luICYgMHgwMDdmZmZmZik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGJpdHM7XG4gICAgfVxuICAgIGlmIChleHBvbmVudCA8IDExMykge1xuICAgICAgICBtYW50aXNzYSB8PSAweDA4MDA7XG4gICAgICAgIGJpdHMgfD0gKG1hbnRpc3NhID4+ICgxMTQgLSBleHBvbmVudCkpICsgKChtYW50aXNzYSA+PiAoMTEzIC0gZXhwb25lbnQpKSAmIDEpO1xuICAgICAgICByZXR1cm4gYml0cztcbiAgICB9XG4gICAgYml0cyB8PSAoKGV4cG9uZW50IC0gMTEyKSA8PCAxMCkgfCAobWFudGlzc2EgPj4gMSk7XG4gICAgYml0cyArPSBtYW50aXNzYSAmIDE7XG4gICAgcmV0dXJuIGJpdHM7XG59XG5mdW5jdGlvbiBoYWxmVG9GbG9hdChoYWxmOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGxldCBzaWduID0gKGhhbGYgJiAweDgwMDApID4+IDE1O1xuICAgIGxldCBleHBvbmVudCA9IChoYWxmICYgMHg3YzAwKSA+PiAxMDtcbiAgICBsZXQgZnJhY3Rpb24gPSBoYWxmICYgMHgwM2ZmO1xuICAgIGxldCBzaWduTXVsdGlwbGllciA9IHNpZ24gJiYgLTEgfHwgMTtcbiAgICBpZiAoZXhwb25lbnQgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHNpZ25NdWx0aXBsaWVyICogTWF0aC5wb3coMiwgLTE0KSAqIChmcmFjdGlvbiAvIDEwMjQpO1xuICAgIH1cbiAgICBpZiAoZXhwb25lbnQgPT09IDB4MWYpIHtcbiAgICAgICAgaWYgKGZyYWN0aW9uKSByZXR1cm4gTmFOO1xuICAgICAgICByZXR1cm4gc2lnbk11bHRpcGxpZXIgKiBJbmZpbml0eTtcbiAgICB9XG4gICAgcmV0dXJuIHNpZ25NdWx0aXBsaWVyICogTWF0aC5wb3coMiwgZXhwb25lbnQgLSAxNSkgKiAoMSArIGZyYWN0aW9uIC8gMTAyNCk7XG59XG5cbmZ1bmN0aW9uIGFzSW50OChieXRlczogVWludDhBcnJheSk6IEludDhBcnJheSB7XG4gICAgcmV0dXJuIG5ldyBJbnQ4QXJyYXkoYnl0ZXMuYnVmZmVyLCBieXRlcy5ieXRlT2Zmc2V0LCBieXRlcy5ieXRlTGVuZ3RoKTtcbn1cbmZ1bmN0aW9uIGVuY29kZUZsb2F0MTYodmFsdWVzOiBGbG9hdDMyQXJyYXkpOiBVaW50OEFycmF5IHtcbiAgICBpZiAoRmxvYXQxNkFycmF5Q3Rvcikge1xuICAgICAgICBsZXQgaGFsZiA9IG5ldyBGbG9hdDE2QXJyYXlDdG9yKHZhbHVlcyk7XG4gICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShoYWxmLmJ1ZmZlciwgaGFsZi5ieXRlT2Zmc2V0LCBoYWxmLmJ5dGVMZW5ndGgpO1xuICAgIH1cbiAgICBsZXQgb3V0ID0gbmV3IFVpbnQ4QXJyYXkodmFsdWVzLmxlbmd0aCAqIDIpO1xuICAgIGxldCB2aWV3ID0gbmV3IERhdGFWaWV3KG91dC5idWZmZXIpO1xuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCB2YWx1ZXMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgIHZpZXcuc2V0VWludDE2KGluZGV4ICogMiwgZmxvYXRUb0hhbGYodmFsdWVzW2luZGV4XSksIHRydWUpO1xuICAgIH1cbiAgICByZXR1cm4gb3V0O1xufVxuZnVuY3Rpb24gYXNGbG9hdDE2SW5kZXhhYmxlKGJ5dGVzOiBVaW50OEFycmF5KTogeyByZWFkb25seSBsZW5ndGg6IG51bWJlcjtbaW5kZXg6IG51bWJlcl06IG51bWJlciB9IHtcbiAgICAvLyBGbG9hdDE2QXJyYXkgLyBVaW50MTZBcnJheSB2aWV3cyByZXF1aXJlIDItYnl0ZSBhbGlnbm1lbnQ7IGNvcHkgd2hlbiB0aGUgc3RvcmVkIGJ5dGVzIGFyZW4ndC5cbiAgICBpZiAoYnl0ZXMuYnl0ZU9mZnNldCAlIDIgIT09IDApIHtcbiAgICAgICAgYnl0ZXMgPSBuZXcgVWludDhBcnJheShieXRlcyk7XG4gICAgfVxuICAgIGxldCBjb3VudCA9IE1hdGguZmxvb3IoYnl0ZXMuYnl0ZUxlbmd0aCAvIDIpO1xuICAgIGlmIChGbG9hdDE2QXJyYXlDdG9yKSB7XG4gICAgICAgIHJldHVybiBuZXcgRmxvYXQxNkFycmF5Q3RvcihieXRlcy5idWZmZXIsIGJ5dGVzLmJ5dGVPZmZzZXQsIGNvdW50KTtcbiAgICB9XG4gICAgbGV0IGhhbHZlcyA9IG5ldyBVaW50MTZBcnJheShieXRlcy5idWZmZXIsIGJ5dGVzLmJ5dGVPZmZzZXQsIGNvdW50KTtcbiAgICBsZXQgb3V0ID0gbmV3IEZsb2F0MzJBcnJheShjb3VudCk7XG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGNvdW50OyBpbmRleCsrKSB7XG4gICAgICAgIG91dFtpbmRleF0gPSBoYWxmVG9GbG9hdChoYWx2ZXNbaW5kZXhdKTtcbiAgICB9XG4gICAgcmV0dXJuIG91dDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVtYmVkZGluZ0xlbmd0aChpbnB1dDogRmxvYXQzMkFycmF5IHwgU3RvcmVkRW1iZWRkaW5nKTogbnVtYmVyIHtcbiAgICBpZiAoaW5wdXQgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXkpIHJldHVybiBpbnB1dC5sZW5ndGg7XG4gICAgaWYgKGlucHV0LmtpbmQgPT09IFwiZmxvYXQzMlwiKSByZXR1cm4gaW5wdXQudmFsdWVzLmxlbmd0aDtcbiAgICByZXR1cm4gaW5wdXQuZGF0YS5sZW5ndGg7XG59XG5cbi8vIEEgcG9vbCBvZiByZXVzYWJsZSBGbG9hdDMyIGJ1ZmZlcnMga2V5ZWQgYnkgbGVuZ3RoLiBNb3N0IGVtYmVkZGluZ3Mgc2hhcmUgYSBzaXplLCBzbyBpbnRlcm5hbCBob3QgcGF0aHMgYm9ycm93IGEgYnVmZmVyIChlbWJlZGRpbmdUb0Zsb2F0MzIgd2l0aCB1c2VQb29sKSBhbmQgcmV0dXJuIGl0IChyZWxlYXNlRmxvYXQzMikgdG8gYXZvaWQgcGVyLW9wIGFsbG9jYXRpb25zIGFuZCBHQyB0aHJhc2hpbmcuIEEgYm9ycm93ZWQgYnVmZmVyIGhvbGRzIHN0YWxlIGRhdGE7IHdob2V2ZXIgYm9ycm93cyBpdCBvdmVyd3JpdGVzIGl0IGZ1bGx5LlxuLy8gXG4vLyBFYWNoIGZyZWUgYnVmZmVyIHJlY29yZHMgd2hlbiBpdCB3YXMgbGFzdCByZWxlYXNlZDsgYW4gaG91cmx5IHN3ZWVwIGRyb3BzIGFueSB0aGF0IGhhdmUgc2F0IGlkbGUgZm9yIG92ZXIgYW4gaG91ciwgc28gdGhlIHJ1bnRpbWUgY2FuIGZyZWUgYnVmZmVycyBhIGJ1cnN0IG9mIHdvcmsgYWxsb2NhdGVkIGJ1dCBpc24ndCBhY3R1YWxseSByZXVzaW5nIGFueW1vcmUuXG5jb25zdCBQT09MX01BWF9JRExFX01TID0gNjAgKiA2MCAqIDEwMDA7XG50eXBlIFBvb2xlZEZsb2F0MzIgPSB7IGJ1ZmZlcjogRmxvYXQzMkFycmF5OyByZWxlYXNlZEF0OiBudW1iZXIgfTtcbmNvbnN0IGZsb2F0MzJQb29sID0gbmV3IE1hcDxudW1iZXIsIFBvb2xlZEZsb2F0MzJbXT4oKTtcbmZ1bmN0aW9uIGFjcXVpcmVGbG9hdDMyKGxlbmd0aDogbnVtYmVyKTogRmxvYXQzMkFycmF5IHtcbiAgICBsZXQgZnJlZSA9IGZsb2F0MzJQb29sLmdldChsZW5ndGgpO1xuICAgIGlmIChmcmVlICYmIGZyZWUubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBmcmVlLnBvcCgpIS5idWZmZXI7XG4gICAgfVxuICAgIHJldHVybiBuZXcgRmxvYXQzMkFycmF5KGxlbmd0aCk7XG59XG5leHBvcnQgZnVuY3Rpb24gcmVsZWFzZUZsb2F0MzIoYnVmZmVyOiBGbG9hdDMyQXJyYXkpOiB2b2lkIHtcbiAgICBsZXQgZnJlZSA9IGZsb2F0MzJQb29sLmdldChidWZmZXIubGVuZ3RoKTtcbiAgICBpZiAoIWZyZWUpIHtcbiAgICAgICAgZnJlZSA9IFtdO1xuICAgICAgICBmbG9hdDMyUG9vbC5zZXQoYnVmZmVyLmxlbmd0aCwgZnJlZSk7XG4gICAgfVxuICAgIGZyZWUucHVzaCh7IGJ1ZmZlciwgcmVsZWFzZWRBdDogRGF0ZS5ub3coKSB9KTtcbn1cbmZ1bmN0aW9uIHN3ZWVwRmxvYXQzMlBvb2woKTogdm9pZCB7XG4gICAgbGV0IGN1dG9mZiA9IERhdGUubm93KCkgLSBQT09MX01BWF9JRExFX01TO1xuICAgIGZvciAobGV0IGZyZWUgb2YgZmxvYXQzMlBvb2wudmFsdWVzKCkpIHtcbiAgICAgICAgbGV0IHdyaXRlSW5kZXggPSAwO1xuICAgICAgICBmb3IgKGxldCByZWFkSW5kZXggPSAwOyByZWFkSW5kZXggPCBmcmVlLmxlbmd0aDsgcmVhZEluZGV4KyspIHtcbiAgICAgICAgICAgIGlmIChmcmVlW3JlYWRJbmRleF0ucmVsZWFzZWRBdCA+IGN1dG9mZikge1xuICAgICAgICAgICAgICAgIGZyZWVbd3JpdGVJbmRleCsrXSA9IGZyZWVbcmVhZEluZGV4XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmcmVlLmxlbmd0aCA9IHdyaXRlSW5kZXg7XG4gICAgfVxufVxuY29uc3QgcG9vbFN3ZWVwVGltZXIgPSBzZXRJbnRlcnZhbChzd2VlcEZsb2F0MzJQb29sLCBQT09MX01BWF9JRExFX01TKSBhcyB1bmtub3duIGFzIHsgdW5yZWY/OiAoKSA9PiB2b2lkIH07XG5pZiAodHlwZW9mIHBvb2xTd2VlcFRpbWVyLnVucmVmID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBwb29sU3dlZXBUaW1lci51bnJlZigpO1xufVxuXG4vLyBEZWNvZGUgdG8gYSBGbG9hdDMyQXJyYXkgKGZ1bGwgbGVuZ3RoKS4gU3RvcmVkIHZhbHVlcyBhcmUgYWxyZWFkeSB1bml0LW5vcm1hbGl6ZWQgKGVuY29kZUVtYmVkZGluZyBkb2VzIHRoYXQpLCBzbyB0aGlzIG9ubHkgZGUtcXVhbnRpemVzLiBCeSBkZWZhdWx0IGl0IGFsbG9jYXRlcyBhIGZyZXNoIGFycmF5IChhIGZsb2F0IGlucHV0IGlzIHJldHVybmVkIGFzLWlzLCBubyBjb3B5KS4gV2l0aCB1c2VQb29sIGl0IGJvcnJvd3MgYSBwb29sZWQgYnVmZmVyIHRoZSBjYWxsZXIgbXVzdCByZWxlYXNlRmxvYXQzMiDigJQgdXNlZCBieSBob3QgaW50ZXJuYWwgcGF0aHMgc28gcmVwZWF0ZWQgZGVjb2RlcyBkb24ndCBhbGxvY2F0ZS5cbmV4cG9ydCBmdW5jdGlvbiBlbWJlZGRpbmdUb0Zsb2F0MzIoaW5wdXQ6IEZsb2F0MzJBcnJheSB8IFN0b3JlZEVtYmVkZGluZywgdXNlUG9vbCA9IGZhbHNlKTogRmxvYXQzMkFycmF5IHtcbiAgICBpZiAoaW5wdXQgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXkpIHtcbiAgICAgICAgaWYgKCF1c2VQb29sKSByZXR1cm4gaW5wdXQ7XG4gICAgICAgIGxldCBvdXQgPSBhY3F1aXJlRmxvYXQzMihpbnB1dC5sZW5ndGgpO1xuICAgICAgICBvdXQuc2V0KGlucHV0KTtcbiAgICAgICAgcmV0dXJuIG91dDtcbiAgICB9XG4gICAgaWYgKGlucHV0LmtpbmQgPT09IFwiZmxvYXQzMlwiKSB7XG4gICAgICAgIGlmICghdXNlUG9vbCkgcmV0dXJuIGlucHV0LnZhbHVlcztcbiAgICAgICAgbGV0IG91dCA9IGFjcXVpcmVGbG9hdDMyKGlucHV0LnZhbHVlcy5sZW5ndGgpO1xuICAgICAgICBvdXQuc2V0KGlucHV0LnZhbHVlcyk7XG4gICAgICAgIHJldHVybiBvdXQ7XG4gICAgfVxuICAgIGxldCBpbnQ4ID0gYXNJbnQ4KGlucHV0LmRhdGEpO1xuICAgIGxldCBzY2FsZXMgPSBhc0Zsb2F0MTZJbmRleGFibGUoaW5wdXQuc2NhbGVzKTtcbiAgICBsZXQgZ3JvdXBTaXplID0gaW5wdXQuZ3JvdXBTaXplO1xuICAgIGxldCBsZW5ndGggPSBpbnQ4Lmxlbmd0aDtcbiAgICBsZXQgb3V0ID0gdXNlUG9vbCA/IGFjcXVpcmVGbG9hdDMyKGxlbmd0aCkgOiBuZXcgRmxvYXQzMkFycmF5KGxlbmd0aCk7XG4gICAgbGV0IGdyb3VwID0gMDtcbiAgICBmb3IgKGxldCBzdGFydCA9IDA7IHN0YXJ0IDwgbGVuZ3RoOyBzdGFydCArPSBncm91cFNpemUpIHtcbiAgICAgICAgbGV0IHNjYWxlID0gc2NhbGVzW2dyb3VwKytdO1xuICAgICAgICBsZXQgZW5kID0gTWF0aC5taW4oc3RhcnQgKyBncm91cFNpemUsIGxlbmd0aCk7XG4gICAgICAgIGZvciAobGV0IGluZGV4ID0gc3RhcnQ7IGluZGV4IDwgZW5kOyBpbmRleCsrKSB7XG4gICAgICAgICAgICBvdXRbaW5kZXhdID0gaW50OFtpbmRleF0gKiBzY2FsZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb3V0O1xufVxuXG5mdW5jdGlvbiBjbG9zZW5lc3NGcm9tRG90KGRvdDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAvLyBJbnB1dHMgYXJlIHVuaXQgdmVjdG9ycywgc28gZXVjbGlkZWFuXjIgPSAyIC0gMipkb3Q7IGNsYW1wIGF3YXkgdGlueSBuZWdhdGl2ZXMgZnJvbSBmbG9hdCBlcnJvci5cbiAgICByZXR1cm4gMSAtIE1hdGguc3FydChNYXRoLm1heCgwLCAyIC0gMiAqIGRvdCkpO1xufVxuXG5mdW5jdGlvbiBkb3RGbG9hdDMyKGE6IEZsb2F0MzJBcnJheSwgYjogRmxvYXQzMkFycmF5KTogbnVtYmVyIHtcbiAgICBsZXQgbGVuZ3RoID0gTWF0aC5taW4oYS5sZW5ndGgsIGIubGVuZ3RoKTtcbiAgICBsZXQgZG90ID0gMDtcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgIGRvdCArPSBhW2luZGV4XSAqIGJbaW5kZXhdO1xuICAgIH1cbiAgICByZXR1cm4gZG90O1xufVxuXG4vLyBDbG9zZW5lc3MgPSAxIC0gZXVjbGlkZWFuIGRpc3RhbmNlIG9mIHR3byB1bml0IHZlY3RvcnMuIEFsd2F5cyBkZWNvZGUgYm90aCB0byAocG9vbGVkKSBmbG9hdDMyIGFuZCBkb3Q6IHNpbXBsZSwgYW5kIG9uY2UgdGhlIGRlY29kZXMgYXJlIHBvb2xlZCBpdCdzIHRoZSBmYXN0ZXN0IHBlci1jYWxsIHBhdGguIEJhdGNoIGNhbGxlcnMgKGstbWVhbnMpIGRlY29kZSBldmVyeSB2ZWN0b3Igb25jZSB0aGVtc2VsdmVzIGluc3RlYWQgb2YgZ29pbmcgdGhyb3VnaCBoZXJlLlxuZXhwb3J0IGNvbnN0IGdldENsb3NlbmVzcyA9IG1lYXN1cmVXcmFwKGZ1bmN0aW9uIGdldENsb3NlbmVzcyhhOiBGbG9hdDMyQXJyYXkgfCBTdG9yZWRFbWJlZGRpbmcsIGI6IEZsb2F0MzJBcnJheSB8IFN0b3JlZEVtYmVkZGluZyk6IG51bWJlciB7XG4gICAgbGV0IHZhID0gZW1iZWRkaW5nVG9GbG9hdDMyKGEsIHRydWUpO1xuICAgIGxldCB2YiA9IGVtYmVkZGluZ1RvRmxvYXQzMihiLCB0cnVlKTtcbiAgICBsZXQgcmVzdWx0ID0gY2xvc2VuZXNzRnJvbURvdChkb3RGbG9hdDMyKHZhLCB2YikpO1xuICAgIHJlbGVhc2VGbG9hdDMyKHZhKTtcbiAgICByZWxlYXNlRmxvYXQzMih2Yik7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn0pO1xuXG4vLyBFbmNvZGUgYSB2ZWN0b3IgKG9yIHJlLWVuY29kZSBhbiBlbWJlZGRpbmcpIGludG8gdGhlIHJlcXVlc3RlZCBmb3JtYXQuIFRoaXMgaXMgVEhFIHBsYWNlIHdlIG5vcm1hbGl6ZTogdGhlICh0cnVuY2F0ZWQpIHZlY3RvciBpcyBtYWRlIHVuaXQgbGVuZ3RoIGhlcmUsIHNvIGFueXRoaW5nIHRoYXQncyBiZWVuIGVuY29kZWQgaXMgcmVsaWFibHkgbm9ybWFsaXplZCBhbmQgdGhlIGNvbXBhcmlzb24vZGVjb2RpbmcgcGF0aHMgbmV2ZXIgaGF2ZSB0byByZS1ub3JtYWxpemUuXG5leHBvcnQgZnVuY3Rpb24gZW5jb2RlRW1iZWRkaW5nKGNvbmZpZzoge1xuICAgIGlucHV0OiBGbG9hdDMyQXJyYXkgfCBTdG9yZWRFbWJlZGRpbmc7XG4gICAgZm9ybWF0OiBFbWJlZGRpbmdGb3JtYXQ7XG4gICAgbW9kZWw6IHN0cmluZztcbn0pOiBTdG9yZWRFbWJlZGRpbmcge1xuICAgIGxldCB7IGlucHV0LCBmb3JtYXQsIG1vZGVsIH0gPSBjb25maWc7XG4gICAgbGV0IGZvcm1hdENvbmZpZyA9IEZPUk1BVF9DT05GSUdTW2Zvcm1hdF07XG4gICAgbGV0IGRlY29kZWQgPSBlbWJlZGRpbmdUb0Zsb2F0MzIoaW5wdXQsIHRydWUpO1xuICAgIGxldCBsZW5ndGggPSBkZWNvZGVkLmxlbmd0aDtcbiAgICBpZiAoZm9ybWF0Q29uZmlnLnRydW5jYXRpb24gIT09IHVuZGVmaW5lZCAmJiBmb3JtYXRDb25maWcudHJ1bmNhdGlvbiA8IGxlbmd0aCkge1xuICAgICAgICBsZW5ndGggPSBmb3JtYXRDb25maWcudHJ1bmNhdGlvbjtcbiAgICB9XG4gICAgbGV0IG5vcm0gPSAwO1xuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgbm9ybSArPSBkZWNvZGVkW2luZGV4XSAqIGRlY29kZWRbaW5kZXhdO1xuICAgIH1cbiAgICBsZXQgbWFnbml0dWRlID0gTWF0aC5zcXJ0KG5vcm0pIHx8IDE7XG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICBkZWNvZGVkW2luZGV4XSAvPSBtYWduaXR1ZGU7XG4gICAgfVxuXG4gICAgbGV0IHJlc3VsdDogU3RvcmVkRW1iZWRkaW5nO1xuICAgIGlmICghZm9ybWF0Q29uZmlnLnF1YW50KSB7XG4gICAgICAgIHJlc3VsdCA9IHsga2luZDogXCJmbG9hdDMyXCIsIG1vZGVsLCB2YWx1ZXM6IG5ldyBGbG9hdDMyQXJyYXkoZGVjb2RlZC5zdWJhcnJheSgwLCBsZW5ndGgpKSB9O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCB7IHR5cGUsIGdyb3VwU2l6ZSB9ID0gZm9ybWF0Q29uZmlnLnF1YW50O1xuICAgICAgICBsZXQgZ3JvdXBDb3VudCA9IE1hdGguY2VpbChsZW5ndGggLyBncm91cFNpemUpO1xuICAgICAgICBsZXQgaW50OCA9IG5ldyBJbnQ4QXJyYXkobGVuZ3RoKTtcbiAgICAgICAgbGV0IHNjYWxlcyA9IG5ldyBGbG9hdDMyQXJyYXkoZ3JvdXBDb3VudCk7XG4gICAgICAgIGZvciAobGV0IGdyb3VwID0gMDsgZ3JvdXAgPCBncm91cENvdW50OyBncm91cCsrKSB7XG4gICAgICAgICAgICBsZXQgc3RhcnQgPSBncm91cCAqIGdyb3VwU2l6ZTtcbiAgICAgICAgICAgIGxldCBlbmQgPSBNYXRoLm1pbihzdGFydCArIGdyb3VwU2l6ZSwgbGVuZ3RoKTtcbiAgICAgICAgICAgIGxldCBtYXhBYnMgPSAwO1xuICAgICAgICAgICAgZm9yIChsZXQgaW5kZXggPSBzdGFydDsgaW5kZXggPCBlbmQ7IGluZGV4KyspIHtcbiAgICAgICAgICAgICAgICBsZXQgYWJzVmFsdWUgPSBNYXRoLmFicyhkZWNvZGVkW2luZGV4XSk7XG4gICAgICAgICAgICAgICAgaWYgKGFic1ZhbHVlID4gbWF4QWJzKSBtYXhBYnMgPSBhYnNWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBzY2FsZSA9IG1heEFicyAvIElOVDhfTUFYO1xuICAgICAgICAgICAgc2NhbGVzW2dyb3VwXSA9IHNjYWxlO1xuICAgICAgICAgICAgaWYgKCFzY2FsZSkgY29udGludWU7XG4gICAgICAgICAgICBmb3IgKGxldCBpbmRleCA9IHN0YXJ0OyBpbmRleCA8IGVuZDsgaW5kZXgrKykge1xuICAgICAgICAgICAgICAgIGxldCBxdWFudGl6ZWQgPSBNYXRoLnJvdW5kKGRlY29kZWRbaW5kZXhdIC8gc2NhbGUpO1xuICAgICAgICAgICAgICAgIGlmIChxdWFudGl6ZWQgPiBJTlQ4X01BWCkgcXVhbnRpemVkID0gSU5UOF9NQVg7XG4gICAgICAgICAgICAgICAgaWYgKHF1YW50aXplZCA8IC1JTlQ4X01BWCkgcXVhbnRpemVkID0gLUlOVDhfTUFYO1xuICAgICAgICAgICAgICAgIGludDhbaW5kZXhdID0gcXVhbnRpemVkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJlc3VsdCA9IHtcbiAgICAgICAgICAgIGtpbmQ6IFwicXVhbnRcIixcbiAgICAgICAgICAgIG1vZGVsLFxuICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgICAgIGdyb3VwU2l6ZSxcbiAgICAgICAgICAgIGRhdGE6IG5ldyBVaW50OEFycmF5KGludDguYnVmZmVyLCBpbnQ4LmJ5dGVPZmZzZXQsIGludDguYnl0ZUxlbmd0aCksXG4gICAgICAgICAgICBzY2FsZXM6IGVuY29kZUZsb2F0MTYoc2NhbGVzKSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgcmVsZWFzZUZsb2F0MzIoZGVjb2RlZCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cblxudHlwZSBTZXJpYWxpemVkSGVhZGVyID1cbiAgICB8IHsga2luZDogXCJmbG9hdDMyXCI7IG1vZGVsOiBzdHJpbmcgfVxuICAgIHwgeyBraW5kOiBcInF1YW50XCI7IG1vZGVsOiBzdHJpbmc7IHR5cGU6IFF1YW50VHlwZTsgZ3JvdXBTaXplOiBudW1iZXI7IGRhdGFCeXRlczogbnVtYmVyIH07XG5cbi8vIFNlcmlhbGl6ZSB0byBiYXNlNjQgc28gYSBTdG9yZWRFbWJlZGRpbmcgY2FuIHRyYXZlbCB0aHJvdWdoIHRoZSAoc3RyaW5nKSBBUEkgY2FsbCByZXN1bHQuIExheW91dDogWzQtYnl0ZSBsaXR0bGUtZW5kaWFuIGhlYWRlciBsZW5ndGhdW0pTT04gaGVhZGVyXVtyYXcgdHlwZWQtYXJyYXkgcGF5bG9hZChzKV0uXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplU3RvcmVkRW1iZWRkaW5nKHN0b3JlZDogU3RvcmVkRW1iZWRkaW5nKTogc3RyaW5nIHtcbiAgICBsZXQgaGVhZGVyOiBTZXJpYWxpemVkSGVhZGVyO1xuICAgIGxldCBwYXlsb2FkOiBVaW50OEFycmF5W107XG4gICAgaWYgKHN0b3JlZC5raW5kID09PSBcImZsb2F0MzJcIikge1xuICAgICAgICBoZWFkZXIgPSB7IGtpbmQ6IFwiZmxvYXQzMlwiLCBtb2RlbDogc3RvcmVkLm1vZGVsIH07XG4gICAgICAgIHBheWxvYWQgPSBbbmV3IFVpbnQ4QXJyYXkoc3RvcmVkLnZhbHVlcy5idWZmZXIsIHN0b3JlZC52YWx1ZXMuYnl0ZU9mZnNldCwgc3RvcmVkLnZhbHVlcy5ieXRlTGVuZ3RoKV07XG4gICAgfSBlbHNlIHtcbiAgICAgICAgaGVhZGVyID0geyBraW5kOiBcInF1YW50XCIsIG1vZGVsOiBzdG9yZWQubW9kZWwsIHR5cGU6IHN0b3JlZC50eXBlLCBncm91cFNpemU6IHN0b3JlZC5ncm91cFNpemUsIGRhdGFCeXRlczogc3RvcmVkLmRhdGEuYnl0ZUxlbmd0aCB9O1xuICAgICAgICBwYXlsb2FkID0gW3N0b3JlZC5kYXRhLCBzdG9yZWQuc2NhbGVzXTtcbiAgICB9XG4gICAgbGV0IGhlYWRlckJ5dGVzID0gQnVmZmVyLmZyb20oSlNPTi5zdHJpbmdpZnkoaGVhZGVyKSwgXCJ1dGY4XCIpO1xuICAgIGxldCBoZWFkZXJMZW5ndGggPSBCdWZmZXIuYWxsb2MoNCk7XG4gICAgaGVhZGVyTGVuZ3RoLndyaXRlVUludDMyTEUoaGVhZGVyQnl0ZXMubGVuZ3RoLCAwKTtcbiAgICByZXR1cm4gQnVmZmVyLmNvbmNhdChbaGVhZGVyTGVuZ3RoLCBoZWFkZXJCeXRlcywgLi4ucGF5bG9hZC5tYXAoYXNCdWZmZXIpXSkudG9TdHJpbmcoXCJiYXNlNjRcIik7XG59XG5leHBvcnQgZnVuY3Rpb24gZGVzZXJpYWxpemVTdG9yZWRFbWJlZGRpbmcoYmFzZTY0OiBzdHJpbmcpOiBTdG9yZWRFbWJlZGRpbmcge1xuICAgIGxldCBidWZmZXIgPSBCdWZmZXIuZnJvbShiYXNlNjQsIFwiYmFzZTY0XCIpO1xuICAgIGlmIChidWZmZXIubGVuZ3RoIDwgNCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFNlcmlhbGl6ZWQgZW1iZWRkaW5nIGlzIHRvbyBzaG9ydCAoJHtidWZmZXIubGVuZ3RofSBieXRlcyk6ICR7YmFzZTY0LnNsaWNlKDAsIDIwMCl9YCk7XG4gICAgfVxuICAgIGxldCBoZWFkZXJMZW5ndGggPSBidWZmZXIucmVhZFVJbnQzMkxFKDApO1xuICAgIGxldCBoZWFkZXJFbmQgPSA0ICsgaGVhZGVyTGVuZ3RoO1xuICAgIGlmIChoZWFkZXJMZW5ndGggPD0gMCB8fCBoZWFkZXJFbmQgPiBidWZmZXIubGVuZ3RoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgU2VyaWFsaXplZCBlbWJlZGRpbmcgaGVhZGVyIGxlbmd0aCAke2hlYWRlckxlbmd0aH0gaXMgaW52YWxpZCBmb3IgJHtidWZmZXIubGVuZ3RofSBieXRlczogJHtiYXNlNjQuc2xpY2UoMCwgMjAwKX1gKTtcbiAgICB9XG4gICAgbGV0IGhlYWRlciA9IEpTT04ucGFyc2UoYnVmZmVyLnRvU3RyaW5nKFwidXRmOFwiLCA0LCBoZWFkZXJFbmQpKSBhcyBTZXJpYWxpemVkSGVhZGVyO1xuICAgIGxldCBwYXlsb2FkID0gYnVmZmVyLnN1YmFycmF5KGhlYWRlckVuZCk7XG4gICAgaWYgKGhlYWRlci5raW5kID09PSBcImZsb2F0MzJcIikge1xuICAgICAgICByZXR1cm4geyBraW5kOiBcImZsb2F0MzJcIiwgbW9kZWw6IGhlYWRlci5tb2RlbCwgdmFsdWVzOiBhc0Zsb2F0MzIoYXNCdWZmZXIoVWludDhBcnJheS5mcm9tKHBheWxvYWQpKSkgfTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAga2luZDogXCJxdWFudFwiLFxuICAgICAgICBtb2RlbDogaGVhZGVyLm1vZGVsLFxuICAgICAgICB0eXBlOiBoZWFkZXIudHlwZSxcbiAgICAgICAgZ3JvdXBTaXplOiBoZWFkZXIuZ3JvdXBTaXplLFxuICAgICAgICBkYXRhOiBVaW50OEFycmF5LmZyb20ocGF5bG9hZC5zdWJhcnJheSgwLCBoZWFkZXIuZGF0YUJ5dGVzKSksXG4gICAgICAgIHNjYWxlczogVWludDhBcnJheS5mcm9tKHBheWxvYWQuc3ViYXJyYXkoaGVhZGVyLmRhdGFCeXRlcykpLFxuICAgIH07XG59XG5cbi8vIE1lYW4gb2Ygc2V2ZXJhbCBlbWJlZGRpbmdzIChlbmNvZGVFbWJlZGRpbmcgbm9ybWFsaXplcyB0aGUgcmVzdWx0IHRvIGEgdW5pdCBjZW50cm9pZCkuIEJvcnJvd3MgYSBwb29sZWQgYWNjdW11bGF0b3IuXG5leHBvcnQgZnVuY3Rpb24gYXZlcmFnZUVtYmVkZGluZ3MoZW1iZWRkaW5nczogU3RvcmVkRW1iZWRkaW5nW10sIGNvbmZpZzogeyBmb3JtYXQ6IEVtYmVkZGluZ0Zvcm1hdDsgbW9kZWw6IHN0cmluZyB9KTogU3RvcmVkRW1iZWRkaW5nIHtcbiAgICBsZXQgbGVuZ3RoID0gSW5maW5pdHk7XG4gICAgZm9yIChsZXQgZW1iZWRkaW5nIG9mIGVtYmVkZGluZ3MpIHtcbiAgICAgICAgbGVuZ3RoID0gTWF0aC5taW4obGVuZ3RoLCBlbWJlZGRpbmdMZW5ndGgoZW1iZWRkaW5nKSk7XG4gICAgfVxuICAgIGxldCBzdW0gPSBhY3F1aXJlRmxvYXQzMihsZW5ndGgpO1xuICAgIHN1bS5maWxsKDApO1xuICAgIGZvciAobGV0IGVtYmVkZGluZyBvZiBlbWJlZGRpbmdzKSB7XG4gICAgICAgIGxldCB2ZWN0b3IgPSBlbWJlZGRpbmdUb0Zsb2F0MzIoZW1iZWRkaW5nLCB0cnVlKTtcbiAgICAgICAgZm9yIChsZXQgZGltZW5zaW9uID0gMDsgZGltZW5zaW9uIDwgbGVuZ3RoOyBkaW1lbnNpb24rKykge1xuICAgICAgICAgICAgc3VtW2RpbWVuc2lvbl0gKz0gdmVjdG9yW2RpbWVuc2lvbl07XG4gICAgICAgIH1cbiAgICAgICAgcmVsZWFzZUZsb2F0MzIodmVjdG9yKTtcbiAgICB9XG4gICAgbGV0IHJlc3VsdCA9IGVuY29kZUVtYmVkZGluZyh7IGlucHV0OiBzdW0uc3ViYXJyYXkoMCwgbGVuZ3RoKSwgZm9ybWF0OiBjb25maWcuZm9ybWF0LCBtb2RlbDogY29uZmlnLm1vZGVsIH0pO1xuICAgIHJlbGVhc2VGbG9hdDMyKHN1bSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLy8gQSBzdGFibGUgMTYtYnl0ZSAoYmFzZTY0KSBjb250ZW50IGhhc2ggb2YgYW4gZW1iZWRkaW5nJ3MgdmFsdWVzLCBmb3IgdXNlIGFzIGEgY2VsbCBpZCBkZXJpdmVkIGZyb20gaXRzIGNlbnRyb2lkLiBJdGVyYXRlcyB2aWEgdGhlIGFjY2Vzc29yICh0aGUgdmFsdWUgYml0cyBhcmUgaGFzaGVkLCBzbyBhbnkgZm9ybWF0IGhhc2hlcyBjb25zaXN0ZW50bHkpLlxuZXhwb3J0IGZ1bmN0aW9uIGhhc2hFbWJlZGRpbmcoc3RvcmVkOiBTdG9yZWRFbWJlZGRpbmcpOiBzdHJpbmcge1xuICAgIGxldCB2ZWN0b3IgPSBlbWJlZGRpbmdUb0Zsb2F0MzIoc3RvcmVkLCB0cnVlKTtcbiAgICBsZXQgbGVuZ3RoID0gdmVjdG9yLmxlbmd0aDtcbiAgICBsZXQgbGFuZXMgPSBuZXcgVWludDMyQXJyYXkoWzIxNjYxMzYyNjEsIDI2NTQ0MzU3NjEsIDQwNTAzLCAzMjY2NDg5OTE3XSk7XG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICBmMzJTY3JhdGNoWzBdID0gdmVjdG9yW2luZGV4XTtcbiAgICAgICAgbGV0IGJpdHMgPSBpMzJTY3JhdGNoWzBdO1xuICAgICAgICBmb3IgKGxldCBsYW5lID0gMDsgbGFuZSA8IGxhbmVzLmxlbmd0aDsgbGFuZSsrKSB7XG4gICAgICAgICAgICBsYW5lc1tsYW5lXSA9IE1hdGguaW11bChsYW5lc1tsYW5lXSBeIChiaXRzICsgbGFuZSAqIDEzMSArIGluZGV4KSwgMTY3Nzc2MTkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJlbGVhc2VGbG9hdDMyKHZlY3Rvcik7XG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKGxhbmVzLmJ1ZmZlcikudG9TdHJpbmcoXCJiYXNlNjRcIik7XG59XG4iXX0=
|
|
327
|
+
/* _JS_SOURCE_HASH = "a08a78f0a9e6589101009ea10fc57b6472fe9cda96e7ddad3a8803091e962190"; */
|
|
@@ -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.getFileSystemPointer = exports.findGrantedPointerHandle = exports.deleteFileSystemPointer = exports.storeFileSystemPointer = void 0;
|
|
4
4
|
const caching_1 = require("socket-function/src/caching");
|
|
@@ -57,10 +57,7 @@ async function deleteFileSystemPointer(pointer) {
|
|
|
57
57
|
});
|
|
58
58
|
}
|
|
59
59
|
exports.deleteFileSystemPointer = deleteFileSystemPointer;
|
|
60
|
-
// Enumerates every stored pointer handle whose permission is already granted for `mode`, newest first
|
|
61
|
-
// (pointer keys start with Date.now(), which sorts lexicographically). Callable from a Web Worker —
|
|
62
|
-
// unlike getFileSystemPointer's onUserActivation flow, this only uses queryPermission, which does
|
|
63
|
-
// NOT require user activation.
|
|
60
|
+
// Enumerates every stored pointer handle whose permission is already granted for `mode`, newest first (pointer keys start with Date.now(), which sorts lexicographically). Callable from a Web Worker — unlike getFileSystemPointer's onUserActivation flow, this only uses queryPermission, which does NOT require user activation.
|
|
64
61
|
async function findGrantedPointerHandle(mode) {
|
|
65
62
|
let database = await db();
|
|
66
63
|
if (!database)
|
|
@@ -106,5 +103,5 @@ async function getFileSystemPointer(config) {
|
|
|
106
103
|
};
|
|
107
104
|
}
|
|
108
105
|
exports.getFileSystemPointer = getFileSystemPointer;
|
|
109
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZVN5c3RlbVBvaW50ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJmaWxlU3lzdGVtUG9pbnRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx5REFBbUQ7QUFDbkQsbURBQWtEO0FBRWxELE1BQU0sZUFBZSxHQUFHLHFCQUFxQixDQUFDO0FBQzlDLE1BQU0sRUFBRSxHQUFHLElBQUEsY0FBSSxFQUFDLEtBQUssSUFBSSxFQUFFO0lBQ3ZCLElBQUksRUFBRSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsMERBQTBELEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdkYsRUFBRSxDQUFDLGdCQUFnQixDQUFDLGVBQWUsRUFBRSxHQUFHLEVBQUU7UUFDdEMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxlQUFlLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDckQsQ0FBQyxDQUFDLENBQUM7SUFDSCxNQUFNLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQ3RFLE9BQU8sRUFBRSxDQUFDLE1BQU0sQ0FBQztBQUNyQixDQUFDLENBQUMsQ0FBQztBQUNILEtBQUssVUFBVSxjQUFjO0lBQ3pCLElBQUksUUFBUSxHQUFHLE1BQU0sRUFBRSxFQUFFLENBQUM7SUFDMUIsSUFBSSxDQUFDLFFBQVE7UUFBRSxPQUFPLFNBQVMsQ0FBQztJQUNoQyxPQUFPLFFBQVEsQ0FBQyxXQUFXLENBQUMsZUFBZSxFQUFFLFdBQVcsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsQ0FBQztBQUMzRixDQUFDO0FBQ0QsS0FBSyxVQUFVLEtBQUssQ0FBQyxHQUFXLEVBQUUsS0FBdUQ7SUFDckYsSUFBSSxXQUFXLEdBQUcsTUFBTSxjQUFjLEVBQUUsQ0FBQztJQUN6QyxJQUFJLENBQUMsV0FBVztRQUFFLE9BQU87SUFDekIsSUFBSSxHQUFH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LENBQUMsTUFFMUM7SUFTRyxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDMUMsSUFBSSxDQUFDLE1BQU07UUFBRSxPQUFPO0lBQ3BCLElBQUksSUFBSSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVDLE9BQU87UUFDSCxLQUFLLENBQUMsZ0JBQWdCLENBQUMsWUFBWTtZQUMvQixJQUFJLFFBQVEsR0FBRyxNQUFPLE1BQWMsQ0FBQyxlQUFlLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUNyRSxJQUFJLFFBQVEsS0FBSyxJQUFJLEVBQUUsQ0FBQztnQkFDcEIsTUFBTyxNQUFjLENBQUMsaUJBQWlCLENBQUMsRUFBRSxJQUFJLEVBQUUsWUFBWSxhQUFaLFlBQVksY0FBWixZQUFZLEdBQUksSUFBSSxFQUFFLENBQUMsQ0FBQztZQUM1RSxDQUFDO1lBQ0QsT0FBTyxNQUFNLENBQUM7UUFDbEIsQ0FBQztLQUNKLENBQUM7QUFDTixDQUFDO0FBdkJELG9EQXVCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGxhenkgfSBmcm9tIFwic29ja2V0LWZ1bmN0aW9uL3NyYy9jYWNoaW5nXCI7XG5pbXBvcnQgeyBuZXh0SWQgfSBmcm9tIFwic29ja2V0LWZ1bmN0aW9uL3NyYy9taXNjXCI7XG5cbmNvbnN0IG9iamVjdFN0b3JlTmFtZSA9IFwiZmlsZVN5c3RlbVBvaW50ZXJEQlwiO1xuY29uc3QgZGIgPSBsYXp5KGFzeW5jICgpID0+IHtcbiAgICBsZXQgZGIgPSBpbmRleGVkREIub3BlbihcImZpbGVTeXN0ZW1Qb2ludGVyREJfZjI5OGU5NjItYmQ4YS00NmI5LTgwOTgtMjVkYjYzM2Y0ZWQzXCIsIDEpO1xuICAgIGRiLmFkZEV2ZW50TGlzdGVuZXIoXCJ1cGdyYWRlbmVlZGVkXCIsICgpID0+IHtcbiAgICAgICAgZGIucmVzdWx0LmNyZWF0ZU9iamVjdFN0b3JlKG9iamVjdFN0b3JlTmFtZSwge30pO1xuICAgIH0pO1xuICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gZGIuYWRkRXZlbnRMaXN0ZW5lcihcInN1Y2Nlc3NcIiwgcmVzb2x2ZSkpO1xuICAgIHJldHVybiBkYi5yZXN1bHQ7XG59KTtcbmFzeW5jIGZ1bmN0aW9uIGdldFRyYW5zYWN0aW9uKCkge1xuICAgIGxldCBkYXRhYmFzZSA9IGF3YWl0IGRiKCk7XG4gICAgaWYgKCFkYXRhYmFzZSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICByZXR1cm4gZGF0YWJhc2UudHJhbnNhY3Rpb24ob2JqZWN0U3RvcmVOYW1lLCBcInJlYWR3cml0ZVwiKS5vYmplY3RTdG9yZShvYmplY3RTdG9yZU5hbWUpO1xufVxuYXN5bmMgZnVuY3Rpb24gd3JpdGUoa2V5OiBzdHJpbmcsIHZhbHVlOiBGaWxlU3lzdGVtRmlsZUhhbmRsZSB8IEZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGUpIHtcbiAgICBsZXQgdHJhbnNhY3Rpb24gPSBhd2FpdCBnZXRUcmFuc2FjdGlvbigpO1xuICAgIGlmICghdHJhbnNhY3Rpb24pIHJldHVybjtcbiAgICBsZXQgcmVxID0gdHJhbnNhY3Rpb24ucHV0KHZhbHVlLCBrZXkpO1xuICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgcmVxLmFkZEV2ZW50TGlzdGVuZXIoXCJzdWNjZXNzXCIsIHJlc29sdmUpO1xuICAgICAgICByZXEuYWRkRXZlbnRMaXN0ZW5lcihcImVycm9yXCIsIHJlamVjdCk7XG4gICAgfSk7XG59XG5hc3luYyBmdW5jdGlvbiByZWFkKGtleTogc3RyaW5nKTogUHJvbWlzZTxGaWxlU3lzdGVtRmlsZUhhbmRsZSB8IEZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGUgfCB1bmRlZmluZWQ+IHtcbiAgICBsZXQgdHJhbnNhY3Rpb24gPSBhd2FpdCBnZXRUcmFuc2FjdGlvbigpO1xuICAgIGlmICghdHJhbnNhY3Rpb24pIHJldHVybjtcbiAgICBsZXQgcmVxID0gdHJhbnNhY3Rpb24uZ2V0KGtleSk7XG4gICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICByZXEuYWRkRXZlbnRMaXN0ZW5lcihcInN1Y2Nlc3NcIiwgcmVzb2x2ZSk7XG4gICAgICAgIHJlcS5hZGRFdmVudExpc3RlbmVyKFwiZXJyb3JcIiwgcmVqZWN0KTtcbiAgICB9KTtcbiAgICByZXR1cm4gcmVxLnJlc3VsdDtcbn1cblxuZXhwb3J0IHR5cGUgRmlsZVN5c3RlbVBvaW50ZXIgPSBzdHJpbmc7XG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc3RvcmVGaWxlU3lzdGVtUG9pbnRlcihjb25maWc6IHtcbiAgICBtb2RlOiBcInJlYWRcIiB8IFwicmVhZHdyaXRlXCI7XG4gICAgaGFuZGxlOiBGaWxlU3lzdGVtRmlsZUhhbmRsZSB8IEZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGU7XG59KTogUHJvbWlzZTxGaWxlU3lzdGVtUG9pbnRlcj4ge1xuICAgIGF3YWl0IChjb25maWcuaGFuZGxlIGFzIGFueSkucmVxdWVzdFBlcm1pc3Npb24oeyBtb2RlOiBjb25maWcubW9kZSB9KTtcbiAgICBsZXQga2V5ID0gbmV4dElkKCkgKyBcIl9cIiArIGNvbmZpZy5tb2RlO1xuICAgIGF3YWl0IHdyaXRlKGtleSwgY29uZmlnLmhhbmRsZSk7XG4gICAgcmV0dXJuIGtleTtcbn1cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkZWxldGVGaWxlU3lzdGVtUG9pbnRlcihwb2ludGVyOiBGaWxlU3lzdGVtUG9pbnRlcikge1xuICAgIGxldCB0cmFuc2FjdGlvbiA9IGF3YWl0IGdldFRyYW5zYWN0aW9uKCk7XG4gICAgaWYgKCF0cmFuc2FjdGlvbikgcmV0dXJuO1xuICAgIGxldCByZXEgPSB0cmFuc2FjdGlvbi5kZWxldGUocG9pbnRlcik7XG4gICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICByZXEuYWRkRXZlbnRMaXN0ZW5lcihcInN1Y2Nlc3NcIiwgcmVzb2x2ZSk7XG4gICAgICAgIHJlcS5hZGRFdmVudExpc3RlbmVyKFwiZXJyb3JcIiwgcmVqZWN0KTtcbiAgICB9KTtcbn1cblxuLy8gRW51bWVyYXRlcyBldmVyeSBzdG9yZWQgcG9pbnRlciBoYW5kbGUgd2hvc2UgcGVybWlzc2lvbiBpcyBhbHJlYWR5IGdyYW50ZWQgZm9yIGBtb2RlYCwgbmV3ZXN0IGZpcnN0XG4vLyAocG9pbnRlciBrZXlzIHN0YXJ0IHdpdGggRGF0ZS5ub3coKSwgd2hpY2ggc29ydHMgbGV4aWNvZ3JhcGhpY2FsbHkpLiBDYWxsYWJsZSBmcm9tIGEgV2ViIFdvcmtlciDigJRcbi8vIHVubGlrZSBnZXRGaWxlU3lzdGVtUG9pbnRlcidzIG9uVXNlckFjdGl2YXRpb24gZmxvdywgdGhpcyBvbmx5IHVzZXMgcXVlcnlQZXJtaXNzaW9uLCB3aGljaCBkb2VzXG4vLyBOT1QgcmVxdWlyZSB1c2VyIGFjdGl2YXRpb24uXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZmluZEdyYW50ZWRQb2ludGVySGFuZGxlKG1vZGU6IFwicmVhZFwiIHwgXCJyZWFkd3JpdGVcIik6IFByb21pc2U8RmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZSB8IHVuZGVmaW5lZD4ge1xuICAgIGxldCBkYXRhYmFzZSA9IGF3YWl0IGRiKCk7XG4gICAgaWYgKCFkYXRhYmFzZSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBsZXQgc3RvcmUgPSBkYXRhYmFzZS50cmFuc2FjdGlvbihvYmplY3RTdG9yZU5hbWUsIFwicmVhZG9ubHlcIikub2JqZWN0U3RvcmUob2JqZWN0U3RvcmVOYW1lKTtcbiAgICBsZXQga2V5c1JlcSA9IHN0b3JlLmdldEFsbEtleXMoKTtcbiAgICBsZXQgdmFsdWVzUmVxID0gc3RvcmUuZ2V0QWxsKCk7XG4gICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBrZXlzUmVxLmFkZEV2ZW50TGlzdGVuZXIoXCJzdWNjZXNzXCIsIHJlc29sdmUpO1xuICAgICAgICBrZXlzUmVxLmFkZEV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLCByZWplY3QpO1xuICAgIH0pO1xuICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgdmFsdWVzUmVxLmFkZEV2ZW50TGlzdGVuZXIoXCJzdWNjZXNzXCIsIHJlc29sdmUpO1xuICAgICAgICB2YWx1ZXNSZXEuYWRkRXZlbnRMaXN0ZW5lcihcImVycm9yXCIsIHJlamVjdCk7XG4gICAgfSk7XG4gICAgbGV0IGtleXMgPSBrZXlzUmVxLnJlc3VsdCBhcyBzdHJpbmdbXTtcbiAgICBsZXQgdmFsdWVzID0gdmFsdWVzUmVxLnJlc3VsdCBhcyAoRmlsZVN5c3RlbUZpbGVIYW5kbGUgfCBGaWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlKVtdO1xuICAgIGxldCBlbnRyaWVzID0ga2V5cy5tYXAoKGtleSwgaSkgPT4gKHsga2V5LCB2YWx1ZTogdmFsdWVzW2ldLCB0aW1lOiAra2V5LnNwbGl0KFwiX1wiKVswXSB8fCAwIH0pKVxuICAgICAgICAuc29ydCgoYSwgYikgPT4gYi50aW1lIC0gYS50aW1lKTtcbiAgICBmb3IgKGxldCBlbnRyeSBvZiBlbnRyaWVzKSB7XG4gICAgICAgIGlmIChlbnRyeS52YWx1ZS5raW5kICE9PSBcImRpcmVjdG9yeVwiKSBjb250aW51ZTtcbiAgICAgICAgbGV0IHN0YXRlID0gYXdhaXQgKGVudHJ5LnZhbHVlIGFzIGFueSkucXVlcnlQZXJtaXNzaW9uKHsgbW9kZSB9KTtcbiAgICAgICAgaWYgKHN0YXRlID09PSBcImdyYW50ZWRcIikgcmV0dXJuIGVudHJ5LnZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0RmlsZVN5c3RlbVBvaW50ZXIoY29uZmlnOiB7XG4gICAgcG9pbnRlcjogRmlsZVN5c3RlbVBvaW50ZXI7XG59KTogUHJvbWlzZTx7XG4gICAgLy8gTk9URTogV2UgaGF2ZSB0byBjYWxsIHJlcXVlc3RQZXJtaXNzaW9uLCBzby4uLiB1c2VyIGFjdGl2YXRpb24gaXMgcmVxdWlyZWQgKGFzIGluLFxuICAgIC8vICB0aGlzIG5lZWQgdG8gYmUgY2FsbGVkIGluc2lkZSBvZiBhIGJ1dHRvbikuXG4gICAgLy8gSU1QT1JUQU5UISBJbiBzb21lIGNpcmN1bXN0YW5jZXMgdXNlciBhY3RpdmF0aW9uIGlzIG5vdCByZXF1aXJlZCAod2l0aCBtdWx0aXBsZSB0YWJzLFxuICAgIC8vICAgICAgYW5kIHBvdGVudGlhbGx5IHdpdGggaHR0cHM6Ly9kZXZlbG9wZXIuY2hyb21lLmNvbS9ibG9nL3BlcnNpc3RlbnQtcGVybWlzc2lvbnMtZm9yLXRoZS1maWxlLXN5c3RlbS1hY2Nlc3MtYXBpKSxcbiAgICAvLyAgICAgIHNvLi4uIHRyeWluZyB0byBjYWxsIG9uVXNlckFjdGl2YXRpb24gaW1tbWVkaWF0ZWx5IGlzIGEgZ29vZCBpZGVhIChhbHRob3VnaCBpdCBtaWdodCB0aHJvdykuXG4gICAgb25Vc2VyQWN0aXZhdGlvbihtb2RlT3ZlcnJpZGU/OiBcInJlYWRcIiB8IFwicmVhZHdyaXRlXCIpOiBQcm9taXNlPEZpbGVTeXN0ZW1GaWxlSGFuZGxlIHwgRmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZT5cbn0gfCB1bmRlZmluZWRcbj4ge1xuICAgIGNvbnN0IGhhbmRsZSA9IGF3YWl0IHJlYWQoY29uZmlnLnBvaW50ZXIpO1xuICAgIGlmICghaGFuZGxlKSByZXR1cm47XG4gICAgbGV0IG1vZGUgPSBjb25maWcucG9pbnRlci5zcGxpdChcIl9cIikuYXQoLTEpO1xuICAgIHJldHVybiB7XG4gICAgICAgIGFzeW5jIG9uVXNlckFjdGl2YXRpb24obW9kZU92ZXJyaWRlKSB7XG4gICAgICAgICAgICBsZXQgdGVzdE1vZGUgPSBhd2FpdCAoaGFuZGxlIGFzIGFueSkucXVlcnlQZXJtaXNzaW9uKHsgbW9kZTogbW9kZSB9KTtcbiAgICAgICAgICAgIGlmICh0ZXN0TW9kZSAhPT0gbW9kZSkge1xuICAgICAgICAgICAgICAgIGF3YWl0IChoYW5kbGUgYXMgYW55KS5yZXF1ZXN0UGVybWlzc2lvbih7IG1vZGU6IG1vZGVPdmVycmlkZSA/PyBtb2RlIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGhhbmRsZTtcbiAgICAgICAgfVxuICAgIH07XG59Il19
|
|
110
|
-
/* _JS_SOURCE_HASH = "
|
|
106
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZVN5c3RlbVBvaW50ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJmaWxlU3lzdGVtUG9pbnRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx5REFBbUQ7QUFDbkQsbURBQWtEO0FBRWxELE1BQU0sZUFBZSxHQUFHLHFCQUFxQixDQUFDO0FBQzlDLE1BQU0sRUFBRSxHQUFHLElBQUEsY0FBSSxFQUFDLEtBQUssSUFBSSxFQUFFO0lBQ3ZCLElBQUksRUFBRSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsMERBQTBELEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdkYsRUFBRSxDQUFDLGdCQUFnQixDQUFDLGVBQWUsRUFBRSxHQUFHLEVBQUU7UUFDdEMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxlQUFlLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDckQsQ0FBQyxDQUFDLENBQUM7SUFDSCxNQUFNLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQ3RFLE9BQU8sRUFBRSxDQUFDLE1BQU0sQ0FBQztBQUNyQixDQUFDLENBQUMsQ0FBQztBQUNILEtBQUssVUFBVSxjQUFjO0lBQ3pCLElBQUksUUFBUSxHQUFHLE1BQU0sRUFBRSxFQUFFLENBQUM7SUFDMUIsSUFBSSxDQUFDLFFBQVE7UUFBRSxPQUFPLFNBQVMsQ0FBQztJQUNoQyxPQUFPLFFBQVEsQ0FBQyxXQUFXLENBQUMsZUFBZSxFQUFFLFdBQVcsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsQ0FBQztBQUMzRixDQUFDO0FBQ0QsS0FBSyxVQUFVLEtBQUssQ0FBQyxHQUFXLEVBQUUsS0FBdUQ7SUFDckYsSUFBSSxXQUFXLEdBQUcsTUFBTSxjQUFjLEVBQUUsQ0FBQztJQUN6QyxJQUFJLENBQUMsV0FBVztRQUFFLE9BQU87SUFDekIsSUFBSSxHQUFH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QUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDMUMsSUFBSSxDQUFDLE1BQU07UUFBRSxPQUFPO0lBQ3BCLElBQUksSUFBSSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVDLE9BQU87UUFDSCxLQUFLLENBQUMsZ0JBQWdCLENBQUMsWUFBWTtZQUMvQixJQUFJLFFBQVEsR0FBRyxNQUFPLE1BQWMsQ0FBQyxlQUFlLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUNyRSxJQUFJLFFBQVEsS0FBSyxJQUFJLEVBQUUsQ0FBQztnQkFDcEIsTUFBTyxNQUFjLENBQUMsaUJBQWlCLENBQUMsRUFBRSxJQUFJLEVBQUUsWUFBWSxhQUFaLFlBQVksY0FBWixZQUFZLEdBQUksSUFBSSxFQUFFLENBQUMsQ0FBQztZQUM1RSxDQUFDO1lBQ0QsT0FBTyxNQUFNLENBQUM7UUFDbEIsQ0FBQztLQUNKLENBQUM7QUFDTixDQUFDO0FBckJELG9EQXFCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGxhenkgfSBmcm9tIFwic29ja2V0LWZ1bmN0aW9uL3NyYy9jYWNoaW5nXCI7XG5pbXBvcnQgeyBuZXh0SWQgfSBmcm9tIFwic29ja2V0LWZ1bmN0aW9uL3NyYy9taXNjXCI7XG5cbmNvbnN0IG9iamVjdFN0b3JlTmFtZSA9IFwiZmlsZVN5c3RlbVBvaW50ZXJEQlwiO1xuY29uc3QgZGIgPSBsYXp5KGFzeW5jICgpID0+IHtcbiAgICBsZXQgZGIgPSBpbmRleGVkREIub3BlbihcImZpbGVTeXN0ZW1Qb2ludGVyREJfZjI5OGU5NjItYmQ4YS00NmI5LTgwOTgtMjVkYjYzM2Y0ZWQzXCIsIDEpO1xuICAgIGRiLmFkZEV2ZW50TGlzdGVuZXIoXCJ1cGdyYWRlbmVlZGVkXCIsICgpID0+IHtcbiAgICAgICAgZGIucmVzdWx0LmNyZWF0ZU9iamVjdFN0b3JlKG9iamVjdFN0b3JlTmFtZSwge30pO1xuICAgIH0pO1xuICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gZGIuYWRkRXZlbnRMaXN0ZW5lcihcInN1Y2Nlc3NcIiwgcmVzb2x2ZSkpO1xuICAgIHJldHVybiBkYi5yZXN1bHQ7XG59KTtcbmFzeW5jIGZ1bmN0aW9uIGdldFRyYW5zYWN0aW9uKCkge1xuICAgIGxldCBkYXRhYmFzZSA9IGF3YWl0IGRiKCk7XG4gICAgaWYgKCFkYXRhYmFzZSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICByZXR1cm4gZGF0YWJhc2UudHJhbnNhY3Rpb24ob2JqZWN0U3RvcmVOYW1lLCBcInJlYWR3cml0ZVwiKS5vYmplY3RTdG9yZShvYmplY3RTdG9yZU5hbWUpO1xufVxuYXN5bmMgZnVuY3Rpb24gd3JpdGUoa2V5OiBzdHJpbmcsIHZhbHVlOiBGaWxlU3lzdGVtRmlsZUhhbmRsZSB8IEZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGUpIHtcbiAgICBsZXQgdHJhbnNhY3Rpb24gPSBhd2FpdCBnZXRUcmFuc2FjdGlvbigpO1xuICAgIGlmICghdHJhbnNhY3Rpb24pIHJldHVybjtcbiAgICBsZXQgcmVxID0gdHJhbnNhY3Rpb24ucHV0KHZhbHVlLCBrZXkpO1xuICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgcmVxLmFkZEV2ZW50TGlzdGVuZXIoXCJzdWNjZXNzXCIsIHJlc29sdmUpO1xuICAgICAgICByZXEuYWRkRXZlbnRMaXN0ZW5lcihcImVycm9yXCIsIHJlamVjdCk7XG4gICAgfSk7XG59XG5hc3luYyBmdW5jdGlvbiByZWFkKGtleTogc3RyaW5nKTogUHJvbWlzZTxGaWxlU3lzdGVtRmlsZUhhbmRsZSB8IEZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGUgfCB1bmRlZmluZWQ+IHtcbiAgICBsZXQgdHJhbnNhY3Rpb24gPSBhd2FpdCBnZXRUcmFuc2FjdGlvbigpO1xuICAgIGlmICghdHJhbnNhY3Rpb24pIHJldHVybjtcbiAgICBsZXQgcmVxID0gdHJhbnNhY3Rpb24uZ2V0KGtleSk7XG4gICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICByZXEuYWRkRXZlbnRMaXN0ZW5lcihcInN1Y2Nlc3NcIiwgcmVzb2x2ZSk7XG4gICAgICAgIHJlcS5hZGRFdmVudExpc3RlbmVyKFwiZXJyb3JcIiwgcmVqZWN0KTtcbiAgICB9KTtcbiAgICByZXR1cm4gcmVxLnJlc3VsdDtcbn1cblxuZXhwb3J0IHR5cGUgRmlsZVN5c3RlbVBvaW50ZXIgPSBzdHJpbmc7XG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc3RvcmVGaWxlU3lzdGVtUG9pbnRlcihjb25maWc6IHtcbiAgICBtb2RlOiBcInJlYWRcIiB8IFwicmVhZHdyaXRlXCI7XG4gICAgaGFuZGxlOiBGaWxlU3lzdGVtRmlsZUhhbmRsZSB8IEZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGU7XG59KTogUHJvbWlzZTxGaWxlU3lzdGVtUG9pbnRlcj4ge1xuICAgIGF3YWl0IChjb25maWcuaGFuZGxlIGFzIGFueSkucmVxdWVzdFBlcm1pc3Npb24oeyBtb2RlOiBjb25maWcubW9kZSB9KTtcbiAgICBsZXQga2V5ID0gbmV4dElkKCkgKyBcIl9cIiArIGNvbmZpZy5tb2RlO1xuICAgIGF3YWl0IHdyaXRlKGtleSwgY29uZmlnLmhhbmRsZSk7XG4gICAgcmV0dXJuIGtleTtcbn1cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkZWxldGVGaWxlU3lzdGVtUG9pbnRlcihwb2ludGVyOiBGaWxlU3lzdGVtUG9pbnRlcikge1xuICAgIGxldCB0cmFuc2FjdGlvbiA9IGF3YWl0IGdldFRyYW5zYWN0aW9uKCk7XG4gICAgaWYgKCF0cmFuc2FjdGlvbikgcmV0dXJuO1xuICAgIGxldCByZXEgPSB0cmFuc2FjdGlvbi5kZWxldGUocG9pbnRlcik7XG4gICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICByZXEuYWRkRXZlbnRMaXN0ZW5lcihcInN1Y2Nlc3NcIiwgcmVzb2x2ZSk7XG4gICAgICAgIHJlcS5hZGRFdmVudExpc3RlbmVyKFwiZXJyb3JcIiwgcmVqZWN0KTtcbiAgICB9KTtcbn1cblxuLy8gRW51bWVyYXRlcyBldmVyeSBzdG9yZWQgcG9pbnRlciBoYW5kbGUgd2hvc2UgcGVybWlzc2lvbiBpcyBhbHJlYWR5IGdyYW50ZWQgZm9yIGBtb2RlYCwgbmV3ZXN0IGZpcnN0IChwb2ludGVyIGtleXMgc3RhcnQgd2l0aCBEYXRlLm5vdygpLCB3aGljaCBzb3J0cyBsZXhpY29ncmFwaGljYWxseSkuIENhbGxhYmxlIGZyb20gYSBXZWIgV29ya2VyIOKAlCB1bmxpa2UgZ2V0RmlsZVN5c3RlbVBvaW50ZXIncyBvblVzZXJBY3RpdmF0aW9uIGZsb3csIHRoaXMgb25seSB1c2VzIHF1ZXJ5UGVybWlzc2lvbiwgd2hpY2ggZG9lcyBOT1QgcmVxdWlyZSB1c2VyIGFjdGl2YXRpb24uXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZmluZEdyYW50ZWRQb2ludGVySGFuZGxlKG1vZGU6IFwicmVhZFwiIHwgXCJyZWFkd3JpdGVcIik6IFByb21pc2U8RmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZSB8IHVuZGVmaW5lZD4ge1xuICAgIGxldCBkYXRhYmFzZSA9IGF3YWl0IGRiKCk7XG4gICAgaWYgKCFkYXRhYmFzZSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBsZXQgc3RvcmUgPSBkYXRhYmFzZS50cmFuc2FjdGlvbihvYmplY3RTdG9yZU5hbWUsIFwicmVhZG9ubHlcIikub2JqZWN0U3RvcmUob2JqZWN0U3RvcmVOYW1lKTtcbiAgICBsZXQga2V5c1JlcSA9IHN0b3JlLmdldEFsbEtleXMoKTtcbiAgICBsZXQgdmFsdWVzUmVxID0gc3RvcmUuZ2V0QWxsKCk7XG4gICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBrZXlzUmVxLmFkZEV2ZW50TGlzdGVuZXIoXCJzdWNjZXNzXCIsIHJlc29sdmUpO1xuICAgICAgICBrZXlzUmVxLmFkZEV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLCByZWplY3QpO1xuICAgIH0pO1xuICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgdmFsdWVzUmVxLmFkZEV2ZW50TGlzdGVuZXIoXCJzdWNjZXNzXCIsIHJlc29sdmUpO1xuICAgICAgICB2YWx1ZXNSZXEuYWRkRXZlbnRMaXN0ZW5lcihcImVycm9yXCIsIHJlamVjdCk7XG4gICAgfSk7XG4gICAgbGV0IGtleXMgPSBrZXlzUmVxLnJlc3VsdCBhcyBzdHJpbmdbXTtcbiAgICBsZXQgdmFsdWVzID0gdmFsdWVzUmVxLnJlc3VsdCBhcyAoRmlsZVN5c3RlbUZpbGVIYW5kbGUgfCBGaWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlKVtdO1xuICAgIGxldCBlbnRyaWVzID0ga2V5cy5tYXAoKGtleSwgaSkgPT4gKHsga2V5LCB2YWx1ZTogdmFsdWVzW2ldLCB0aW1lOiAra2V5LnNwbGl0KFwiX1wiKVswXSB8fCAwIH0pKVxuICAgICAgICAuc29ydCgoYSwgYikgPT4gYi50aW1lIC0gYS50aW1lKTtcbiAgICBmb3IgKGxldCBlbnRyeSBvZiBlbnRyaWVzKSB7XG4gICAgICAgIGlmIChlbnRyeS52YWx1ZS5raW5kICE9PSBcImRpcmVjdG9yeVwiKSBjb250aW51ZTtcbiAgICAgICAgbGV0IHN0YXRlID0gYXdhaXQgKGVudHJ5LnZhbHVlIGFzIGFueSkucXVlcnlQZXJtaXNzaW9uKHsgbW9kZSB9KTtcbiAgICAgICAgaWYgKHN0YXRlID09PSBcImdyYW50ZWRcIikgcmV0dXJuIGVudHJ5LnZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0RmlsZVN5c3RlbVBvaW50ZXIoY29uZmlnOiB7XG4gICAgcG9pbnRlcjogRmlsZVN5c3RlbVBvaW50ZXI7XG59KTogUHJvbWlzZTx7XG4gICAgLy8gTk9URTogV2UgaGF2ZSB0byBjYWxsIHJlcXVlc3RQZXJtaXNzaW9uLCBzby4uLiB1c2VyIGFjdGl2YXRpb24gaXMgcmVxdWlyZWQgKGFzIGluLFxuICAgIC8vICB0aGlzIG5lZWQgdG8gYmUgY2FsbGVkIGluc2lkZSBvZiBhIGJ1dHRvbikuXG4gICAgLy8gSU1QT1JUQU5UISBJbiBzb21lIGNpcmN1bXN0YW5jZXMgdXNlciBhY3RpdmF0aW9uIGlzIG5vdCByZXF1aXJlZCAod2l0aCBtdWx0aXBsZSB0YWJzLCBhbmQgcG90ZW50aWFsbHkgd2l0aCBodHRwczovL2RldmVsb3Blci5jaHJvbWUuY29tL2Jsb2cvcGVyc2lzdGVudC1wZXJtaXNzaW9ucy1mb3ItdGhlLWZpbGUtc3lzdGVtLWFjY2Vzcy1hcGkpLCBzby4uLiB0cnlpbmcgdG8gY2FsbCBvblVzZXJBY3RpdmF0aW9uIGltbW1lZGlhdGVseSBpcyBhIGdvb2QgaWRlYSAoYWx0aG91Z2ggaXQgbWlnaHQgdGhyb3cpLlxuICAgIG9uVXNlckFjdGl2YXRpb24obW9kZU92ZXJyaWRlPzogXCJyZWFkXCIgfCBcInJlYWR3cml0ZVwiKTogUHJvbWlzZTxGaWxlU3lzdGVtRmlsZUhhbmRsZSB8IEZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGU+XG59IHwgdW5kZWZpbmVkXG4+IHtcbiAgICBjb25zdCBoYW5kbGUgPSBhd2FpdCByZWFkKGNvbmZpZy5wb2ludGVyKTtcbiAgICBpZiAoIWhhbmRsZSkgcmV0dXJuO1xuICAgIGxldCBtb2RlID0gY29uZmlnLnBvaW50ZXIuc3BsaXQoXCJfXCIpLmF0KC0xKTtcbiAgICByZXR1cm4ge1xuICAgICAgICBhc3luYyBvblVzZXJBY3RpdmF0aW9uKG1vZGVPdmVycmlkZSkge1xuICAgICAgICAgICAgbGV0IHRlc3RNb2RlID0gYXdhaXQgKGhhbmRsZSBhcyBhbnkpLnF1ZXJ5UGVybWlzc2lvbih7IG1vZGU6IG1vZGUgfSk7XG4gICAgICAgICAgICBpZiAodGVzdE1vZGUgIT09IG1vZGUpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCAoaGFuZGxlIGFzIGFueSkucmVxdWVzdFBlcm1pc3Npb24oeyBtb2RlOiBtb2RlT3ZlcnJpZGUgPz8gbW9kZSB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBoYW5kbGU7XG4gICAgICAgIH1cbiAgICB9O1xufSJdfQ==
|
|
107
|
+
/* _JS_SOURCE_HASH = "5b1826d0226e44d46f66b62f35662bac3249e8fcc29abaa50adc7de02c44b21a"; */
|