sliftutils 1.7.83 → 1.7.84

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.
Files changed (53) hide show
  1. package/dist/treeSummary.ts.cache +2 -2
  2. package/index.d.ts +1 -1
  3. package/misc/dist/environment.ts.cache +2 -2
  4. package/misc/dist/getSecret.ts.cache +2 -2
  5. package/misc/dist/strings.ts.cache +2 -2
  6. package/misc/dist/zip.ts.cache +2 -2
  7. package/misc/https/dist/certs.ts.cache +2 -2
  8. package/misc/https/dist/persistentLocalStorage.ts.cache +2 -2
  9. package/package.json +2 -2
  10. package/storage/BulkDatabase2/dist/BulkDatabaseBase.ts.cache +2 -2
  11. package/storage/BulkDatabase2/dist/BulkDatabaseFormat.ts.cache +2 -2
  12. package/storage/BulkDatabase2/dist/BulkDatabaseMerge.ts.cache +2 -2
  13. package/storage/BulkDatabase2/dist/BulkDatabaseReader.ts.cache +2 -2
  14. package/storage/BulkDatabase2/dist/LoadedIndex.ts.cache +2 -2
  15. package/storage/BulkDatabase2/dist/WriteOverlay.ts.cache +2 -2
  16. package/storage/BulkDatabase2/dist/blockCache.ts.cache +2 -2
  17. package/storage/BulkDatabase2/dist/mergeLock.ts.cache +2 -2
  18. package/storage/BulkDatabase2/dist/mergeMarkers.ts.cache +2 -2
  19. package/storage/BulkDatabase2/dist/streamLog.ts.cache +2 -2
  20. package/storage/BulkDatabase2/dist/syncClient.ts.cache +2 -2
  21. package/storage/dist/ArchivesDisk.ts.cache +2 -2
  22. package/storage/dist/FileFolderAPI.tsx.cache +2 -2
  23. package/storage/dist/IArchives.ts.cache +2 -2
  24. package/storage/dist/IndexedDBFileFolderAPI.ts.cache +2 -2
  25. package/storage/dist/JSONStorage.ts.cache +2 -2
  26. package/storage/dist/PendingManager.tsx.cache +2 -2
  27. package/storage/dist/TransactionStorage.ts.cache +2 -2
  28. package/storage/dist/backblaze.ts.cache +2 -2
  29. package/storage/dist/fileSystemPointer.ts.cache +2 -2
  30. package/storage/dist/remoteFileStorage.ts.cache +2 -2
  31. package/storage/remoteStorage/accessStats.d.ts +1 -1
  32. package/storage/remoteStorage/accessStats.ts +5 -8
  33. package/storage/remoteStorage/createArchives.ts +19 -9
  34. package/storage/remoteStorage/dist/ArchivesRemote.ts.cache +2 -2
  35. package/storage/remoteStorage/dist/ArchivesUrl.ts.cache +2 -2
  36. package/storage/remoteStorage/dist/accessStats.ts.cache +8 -12
  37. package/storage/remoteStorage/dist/blobStore.ts.cache +2 -2
  38. package/storage/remoteStorage/dist/bucketDisk.ts.cache +2 -2
  39. package/storage/remoteStorage/dist/cliArgs.ts.cache +2 -2
  40. package/storage/remoteStorage/dist/createArchives.ts.cache +20 -11
  41. package/storage/remoteStorage/dist/deployTakeover.ts.cache +2 -2
  42. package/storage/remoteStorage/dist/intermediateSources.ts.cache +2 -2
  43. package/storage/remoteStorage/dist/remoteConfig.ts.cache +2 -2
  44. package/storage/remoteStorage/dist/serverConfig.ts.cache +2 -2
  45. package/storage/remoteStorage/dist/sourceWrapper.ts.cache +5 -4
  46. package/storage/remoteStorage/dist/sourcesList.ts.cache +2 -2
  47. package/storage/remoteStorage/dist/storageClientController.ts.cache +2 -2
  48. package/storage/remoteStorage/dist/storageController.ts.cache +2 -2
  49. package/storage/remoteStorage/dist/storageServerState.ts.cache +2 -2
  50. package/storage/remoteStorage/dist/storePlan.ts.cache +2 -2
  51. package/storage/remoteStorage/dist/validation.ts.cache +2 -2
  52. package/storage/remoteStorage/sourceWrapper.ts +2 -1
  53. package/yarn.lock +4 -4
@@ -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.testRemoteConnection = exports.getRemoteDirectoryHandle = void 0;
4
4
  const typesafecss_1 = require("typesafecss");
@@ -473,4 +473,4 @@ async function testRemoteConnection(url, password, options = {}) {
473
473
  }
474
474
  exports.testRemoteConnection = testRemoteConnection;
475
475
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVtb3RlRmlsZVN0b3JhZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJyZW1vdGVGaWxlU3RvcmFnZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2Q0FBcUM7QUFHckMsMlNBQTJTO0FBQzNTLEdBQUc7QUFDSCw4UEFBOFA7QUFFOVAsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5QixNQUFNLG1CQUFtQixHQUFHLElBQUksR0FBRyxJQUFJLENBQUM7QUFDeEMsTUFBTSxtQkFBbUIsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQztBQVU5QyxTQUFTLE1BQU0sQ0FBQyxDQUFTO0lBQ3JCLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRSxDQUFDLENBQUM7QUFDdkcsQ0FBQztBQUNELFNBQVMsYUFBYSxDQUFDLENBQVM7SUFDNUIsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLFVBQVUsQ0FBZ0IsQ0FBQztBQUNwRixDQUFDO0FBQ0QsTUFBTSxLQUFLLEdBQUcsQ0FBQyxFQUFVLEVBQUUsRUFBRSxDQUFDLElBQUksT0FBTyxDQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBSXhFLDRPQUE0TztBQUM1TyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUM7QUFDekIsaUxBQWlMO0FBQ2pMLE1BQU0sa0JBQWtCLEdBQUcsRUFBRSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUM7QUFDNUMsNklBQTZJO0FBQzdJLE1BQU0sdUJBQXVCLEdBQUcsQ0FBQyxH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QUFFO0lBQy9GLE9BQU8sSUFBSSxzQkFBc0IsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ2xGLENBQUM7QUFGRCw0REFFQztBQUlELG9UQUFvVDtBQUM3UyxLQUFLLFVBQVUsb0JBQW9CLENBQUMsR0FBVyxFQUFFLFFBQWdCLEVBQUUsVUFBeUIsRUFBRTtJQUNqRyxNQUFNLElBQUksR0FBRyxJQUFJLFVBQVUsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3BELElBQUksQ0FBQztRQUNELE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNwQixPQUFPLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ1QsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFXLGFBQVgsQ0FBQyx1QkFBRCxDQUFDLENBQVksT0FBTyxLQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMvQyxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO1lBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQUUsQ0FBQztRQUN6RCxPQUFPLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDakQsQ0FBQztZQUFTLENBQUM7UUFDUCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDakIsQ0FBQztBQUNMLENBQUM7QUFaRCxvREFZQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzTm9kZSB9IGZyb20gXCJ0eXBlc2FmZWNzc1wiO1xuaW1wb3J0IHR5cGUgeyBEaXJlY3RvcnlXcmFwcGVyLCBGaWxlV3JhcHBlciB9IGZyb20gXCIuL0ZpbGVGb2xkZXJBUElcIjtcblxuLy8gQSByZW1vdGUgc2VydmVyIChyZW1vdGVGaWxlU2VydmVyLmpzKSBleHBvc2VkIGFzIGEgRGlyZWN0b3J5V3JhcHBlciDigJQgdGhlIFNBTUUgaW50ZXJmYWNlIGFzIHRoZSBOb2RlLmpzIGFuZCBGaWxlLVN5c3RlbS1BY2Nlc3MgaGFuZGxlcy4gU28gZ2V0RGlyZWN0b3J5SGFuZGxlIGNhbiByZXR1cm4gb25lIG9mIHRoZXNlIGFuZCBldmVyeXRoaW5nIGRvd25zdHJlYW0gKHdyYXBIYW5kbGUsIG5hdmlnYXRpb24sIEJ1bGtEYXRhYmFzZTIpIHdvcmtzIHVuY2hhbmdlZDsgbm90aGluZyBlbHNlIGtub3dzIGl0J3MgcmVtb3RlLlxuLy8gXG4vLyBGaWxlcyBoZXJlIGFyZSBpbW11dGFibGUgKHdyaXR0ZW4gb25jZSkgb3IgYXBwZW5kLW9ubHksIHNvIHRoZSByYW5nZSBjYWNoZSAocmF3IGNvbXByZXNzZWQgYnl0ZXMsIGluIH4xTUIgYWxpZ25lZCBjaHVua3MpIGlzIGFsd2F5cyB2YWxpZCDigJQgb3ZlciB0aGUgbmV0d29yayBsYXRlbmN5IGRvbWluYXRlcywgc28gcmVhZGluZyAxTUIgY29zdHMgYWJvdXQgdGhlIHNhbWUgYXMgNjRLQiBhbmQgZmFyIGZld2VyIHJvdW5kIHRyaXBzIHdpbnMuXG5cbmNvbnN0IEVNUFRZID0gQnVmZmVyLmFsbG9jKDApO1xuY29uc3QgREVGQVVMVF9DSFVOS19CWVRFUyA9IDEwMjQgKiAxMDI0O1xuY29uc3QgREVGQVVMVF9DQUNIRV9CWVRFUyA9IDEyOCAqIDEwMjQgKiAxMDI0O1xuXG5leHBvcnQgdHlwZSBSZW1vdGVPcHRpb25zID0ge1xuICAgIGNodW5rQnl0ZXM/OiBudW1iZXI7XG4gICAgY2FjaGVCeXRlcz86IG51bWJlcjtcbiAgICBtYXhGZXRjaEJ5dGVzPzogbnVtYmVyOyAgICAgIC8vIGNhcCBwZXIgcmVhZCByZXF1ZXN0OyBsYXJnZSByZWFkcyBzcGxpdCBpbnRvIHRoaXMgbWFueSBieXRlcyBlYWNoXG4gICAgbGF0ZW5jeU1zPzogbnVtYmVyOyAgICAgICAgICAvLyBhcnRpZmljaWFsIHBlci1yZXF1ZXN0IGRlbGF5LCBmb3Igc2ltdWxhdGluZyBuZXR3b3JrIGxhdGVuY3kgaW4gdGVzdHNcbiAgICBzdGF0cz86IHsgcmVxdWVzdENvdW50OiBudW1iZXI7IGJ5dGVzRmV0Y2hlZDogbnVtYmVyIH07XG59O1xuXG5mdW5jdGlvbiBlbm9lbnQocDogc3RyaW5nKTogRXJyb3Ige1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKG5ldyBFcnJvcihgRmlsZSBub3QgZm91bmQ6ICR7cH1gKSwgeyBjb2RlOiBcIkVOT0VOVFwiLCBuYW1lOiBcIk5vdEZvdW5kRXJyb3JcIiB9KTtcbn1cbmZ1bmN0aW9uIHRvQXJyYXlCdWZmZXIoYjogQnVmZmVyKTogQXJyYXlCdWZmZXIge1xuICAgIHJldHVybiBiLmJ1ZmZlci5zbGljZShiLmJ5dGVPZmZzZXQsIGIuYnl0ZU9mZnNldCArIGIuYnl0ZUxlbmd0aCkgYXMgQXJyYXlCdWZmZXI7XG59XG5jb25zdCBzbGVlcCA9IChtczogbnVtYmVyKSA9PiBuZXcgUHJvbWlzZTx2b2lkPihyID0+IHNldFRpbWVvdXQociwgbXMpKTtcblxudHlwZSBTdGF0ID0geyBzaXplOiBudW1iZXI7IGxhc3RNb2RpZmllZDogbnVtYmVyOyBkaXI6IGJvb2xlYW4gfTtcblxuLy8gQSBzdGF0IGlzIGNhY2hlZCB0aGlzIGxvbmcsIHNvIHRoZSBidXJzdCBvZiBzaXplIGxvb2t1cHMgZHVyaW5nIGEgc2luZ2xlIHJlYWQgcGFzcyBpcyBvbmUgcmVxdWVzdCBwZXIgZmlsZSwgbm90IG9uZSBwZXIgYmxvY2suIFNob3J0IGVub3VnaCB0aGF0IGFuIGFwcGVuZCBieSBhbm90aGVyIHdyaXRlciBzaG93cyB1cCBwcm9tcHRseTsgb3VyIG93biB3cml0ZXMgaW52YWxpZGF0ZSBpdCBpbW1lZGlhdGVseS5cbmNvbnN0IElORk9fVFRMX01TID0gMjAwMDtcbi8vIFdlIGtlZXAgYXQgbW9zdCB0aGlzIG1hbnkgYnl0ZXMgb2YgcmVhZC93cml0ZSByZXF1ZXN0cyBpbiBmbGlnaHQgYXQgb25jZSAodGhlIHJlc3QgcXVldWUpLCBzbyBhIGJpZyByZWFkIGRvZXNuJ3QgZmlyZSBodW5kcmVkcyBvZiBNQiBvZiByZXF1ZXN0cyBhdCB0aGUgc2VydmVyIHNpbXVsdGFuZW91c2x5LlxuY29uc3QgTUFYX0lORkxJR0hUX0JZVEVTID0gNjQgKiAxMDI0ICogMTAyNDtcbi8vIEEgc2luZ2xlIHJlYWQgcmVxdWVzdCBmZXRjaGVzIGF0IG1vc3QgdGhpcyBtdWNoOyBsYXJnZSByZWFkcyBhcmUgc3BsaXQgaW50byB0aGlzIG1hbnkgY29uY3VycmVudCByZXF1ZXN0cyAoYm91bmRlZCBieSBNQVhfSU5GTElHSFRfQllURVMpLlxuY29uc3QgREVGQVVMVF9NQVhfRkVUQ0hfQllURVMgPSA0ICogMTAyNCAqIDEwMjQ7XG5jb25zdCBTVEFUU19MT0dfSU5URVJWQUxfTVMgPSAxMCAqIDEwMDA7XG5jb25zdCBSRUNWX1dJTkRPV19NUyA9IDYwICogMTAwMDtcblxuZnVuY3Rpb24gZm10Qnl0ZXMobjogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBpZiAobiA8IDEwMjQpIHJldHVybiBuICsgXCJCXCI7XG4gICAgaWYgKG4gPCAxMDI0ICogMTAyNCkgcmV0dXJuIChuIC8gMTAyNCkudG9GaXhlZCgxKSArIFwiS0JcIjtcbiAgICBpZiAobiA8IDEwMjQgKiAxMDI0ICogMTAyNCkgcmV0dXJuIChuIC8gMTAyNCAvIDEwMjQpLnRvRml4ZWQoMSkgKyBcIk1CXCI7XG4gICAgcmV0dXJuIChuIC8gMTAyNCAvIDEwMjQgLyAxMDI0KS50b0ZpeGVkKDIpICsgXCJHQlwiO1xufVxuXG4vLyBNaW5pbWFsIFdlYlNvY2tldCBzdXJmYWNlIGNvbW1vbiB0byB0aGUgYnJvd3NlcidzIFdlYlNvY2tldCBhbmQgdGhlIGB3c2AgcGFja2FnZS5cbnR5cGUgV1NMaWtlID0ge1xuICAgIHJlYWR5U3RhdGU6IG51bWJlcjtcbiAgICBiaW5hcnlUeXBlOiBzdHJpbmc7XG4gICAgc2VuZChkYXRhOiBVaW50OEFycmF5KTogdm9pZDtcbiAgICBjbG9zZSgpOiB2b2lkO1xuICAgIG9ub3BlbjogKCgpID0+IHZvaWQpIHwgbnVsbDtcbiAgICBvbm1lc3NhZ2U6ICgoZXY6IHsgZGF0YTogQXJyYXlCdWZmZXIgfCBCdWZmZXIgfSkgPT4gdm9pZCkgfCBudWxsO1xuICAgIG9uY2xvc2U6ICgoKSA9PiB2b2lkKSB8IG51bGw7XG4gICAgb25lcnJvcjogKChlOiB1bmtub3duKSA9PiB2b2lkKSB8IG51bGw7XG59O1xuZnVuY3Rpb24gbWFrZVdlYlNvY2tldCh1cmw6IHN0cmluZyk6IFdTTGlrZSB7XG4gICAgaWYgKGlzTm9kZSgpKSB7XG4gICAgICAgIC8vIGB3c2AgaXMgYSBOb2RlIGRlcDsgdGhlIGV2YWwgaGlkZXMgaXQgZnJvbSB0aGUgYnJvd3NlciBidW5kbGVyICh0aGlzIGJyYW5jaCBuZXZlciBydW5zIHRoZXJlKS5cbiAgICAgICAgY29uc3QgV1MgPSAoZXZhbChcInJlcXVpcmVcIikgYXMgTm9kZVJlcXVpcmUpKFwid3NcIik7XG4gICAgICAgIHJldHVybiBuZXcgV1ModXJsLCB7IHJlamVjdFVuYXV0aG9yaXplZDogZmFsc2UgfSkgYXMgV1NMaWtlOyAvLyBzZWxmLXNpZ25lZCBjZXJ0XG4gICAgfVxuICAgIHJldHVybiBuZXcgV2ViU29ja2V0KHVybCkgYXMgdW5rbm93biBhcyBXU0xpa2U7XG59XG5cbi8vIEJpbmFyeSBmcmFtZTogW3UzMiBoZWFkZXJMZW4gTEVdW2hlYWRlciBKU09OXVtib2R5IGJ5dGVzXS5cbmZ1bmN0aW9uIGVuY29kZUZyYW1lKGhlYWRlcjogb2JqZWN0LCBib2R5PzogQnVmZmVyKTogQnVmZmVyIHtcbiAgICBjb25zdCBoID0gQnVmZmVyLmZyb20oSlNPTi5zdHJpbmdpZnkoaGVhZGVyKSwgXCJ1dGY4XCIpO1xuICAgIGNvbnN0IGxlbiA9IEJ1ZmZlci5hbGxvYyg0KTtcbiAgICBsZW4ud3JpdGVVSW50MzJMRShoLmxlbmd0aCwgMCk7XG4gICAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoW2xlbiwgaCwgYm9keSB8fCBFTVBUWV0pO1xufVxuZnVuY3Rpb24gZGVjb2RlRnJhbWUoYnVmOiBCdWZmZXIpOiB7IGhlYWRlcjogYW55OyBib2R5OiBCdWZmZXIgfSB7XG4gICAgY29uc3QgaGVhZGVyTGVuID0gYnVmLnJlYWRVSW50MzJMRSgwKTtcbiAgICBjb25zdCBoZWFkZXIgPSBKU09OLnBhcnNlKGJ1Zi5zdWJhcnJheSg0LCA0ICsgaGVhZGVyTGVuKS50b1N0cmluZyhcInV0ZjhcIikpO1xuICAgIHJldHVybiB7IGhlYWRlciwgYm9keTogYnVmLnN1YmFycmF5KDQgKyBoZWFkZXJMZW4pIH07XG59XG5cbnR5cGUgUXVldWVkUmVxdWVzdCA9IHsgaWQ6IG51bWJlcjsgZnJhbWU6IEJ1ZmZlcjsgYnl0ZXM6IG51bWJlcjsgcmVzb2x2ZTogKHI6IHsgc3RhdHVzOiBudW1iZXI7IGJvZHk6IEJ1ZmZlciB9KSA9PiB2b2lkOyByZWplY3Q6IChlOiBFcnJvcikgPT4gdm9pZCB9O1xuXG4vLyBPbmUgV2ViU29ja2V0IHRvIGEgcmVtb3RlIHNlcnZlciwgbXVsdGlwbGV4aW5nIGFsbCBvcHMgb3ZlciBpdC4gUmVxdWVzdHMgYXJlIHF1ZXVlZCBhbmQgb25seSBzZW50IHdoaWxlIDwgTUFYX0lORkxJR0hUX0JZVEVTIGFyZSBvdXRzdGFuZGluZzsgZXZlcnkgMTBzICh3aGVuIHRoZXJlJ3MgdHJhZmZpYykgaXQgbG9ncyB0aGUgcXVldWUgZGVwdGggYW5kIHRocm91Z2hwdXQuXG5jbGFzcyBDb25uZWN0aW9uIHtcbiAgICBwcml2YXRlIGNhY2hlOiBSYW5nZUNhY2hlO1xuICAgIHByaXZhdGUgaW5mb0NhY2hlID0gbmV3IE1hcDxzdHJpbmcsIHsgc3RhdDogU3RhdCB8IHVuZGVmaW5lZDsgYXQ6IG51bWJlciB9PigpO1xuXG4gICAgcHJpdmF0ZSB3czogV1NMaWtlIHwgdW5kZWZpbmVkO1xuICAgIHByaXZhdGUgY29ubmVjdGluZzogUHJvbWlzZTx2b2lkPiB8IHVuZGVmaW5lZDtcbiAgICBwcml2YXRlIG5leHRJZCA9IDE7XG4gICAgcHJpdmF0ZSBwZW5kaW5nID0gbmV3IE1hcDxudW1iZXIsIHsgcmVzb2x2ZTogKHI6IHsgc3RhdHVzOiBudW1iZXI7IGJvZHk6IEJ1ZmZlciB9KSA9PiB2b2lkOyByZWplY3Q6IChlOiBFcnJvcikgPT4gdm9pZDsgYnl0ZXM6IG51bWJlciB9PigpO1xuICAgIHByaXZhdGUgcXVldWU6IFF1ZXVlZFJlcXVlc3RbXSA9IFtdO1xuICAgIHByaXZhdGUgaW5GbGlnaHRCeXRlcyA9IDA7XG5cbiAgICBwcml2YXRlIHJlY2VpdmVkVG90YWwgPSAwO1xuICAgIHByaXZhdGUgcmVjdldpbmRvdzogeyB0OiBudW1iZXI7IG46IG51bWJlciB9W10gPSBbXTtcbiAgICBwcml2YXRlIHdzVXJsOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBob3N0OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBzdGF0c1RpbWVyOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRJbnRlcnZhbD47XG5cbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgdXJsOiBzdHJpbmcsIHB1YmxpYyBwYXNzd29yZDogc3RyaW5nLCBwcml2YXRlIG9wdHM6IFJlbW90ZU9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy51cmwgPSB1cmwucmVwbGFjZSgvXFwvKyQvLCBcIlwiKTtcbiAgICAgICAgdGhpcy53c1VybCA9IHRoaXMudXJsLnJlcGxhY2UoL15odHRwLywgXCJ3c1wiKTsgLy8gaHR0cHPihpJ3c3MsIGh0dHDihpJ3c1xuICAgICAgICB0aGlzLmhvc3QgPSAoKCkgPT4geyB0cnkgeyByZXR1cm4gbmV3IFVSTCh0aGlzLnVybCkuaG9zdDsgfSBjYXRjaCB7IHJldHVybiB0aGlzLnVybDsgfSB9KSgpO1xuICAgICAgICB0aGlzLmNhY2hlID0gbmV3IFJhbmdlQ2FjaGUob3B0cy5jaHVua0J5dGVzIHx8IERFRkFVTFRfQ0hVTktfQllURVMsIG9wdHMuY2FjaGVCeXRlcyB8fCBERUZBVUxUX0NBQ0hFX0JZVEVTLCBvcHRzLm1heEZldGNoQnl0ZXMgfHwgREVGQVVMVF9NQVhfRkVUQ0hfQllURVMpO1xuICAgICAgICB0aGlzLnN0YXRzVGltZXIgPSBzZXRJbnRlcnZhbCgoKSA9PiB0aGlzLmxvZ1N0YXRzKCksIFNUQVRTX0xPR19JTlRFUlZBTF9NUyk7XG4gICAgICAgICh0aGlzLnN0YXRzVGltZXIgYXMgeyB1bnJlZj86ICgpID0+IHZvaWQgfSkudW5yZWY/LigpO1xuICAgIH1cblxuICAgIGNsb3NlKCkge1xuICAgICAgICBjbGVhckludGVydmFsKHRoaXMuc3RhdHNUaW1lcik7XG4gICAgICAgIHRyeSB7IHRoaXMud3M/LmNsb3NlKCk7IH0gY2F0Y2ggeyAvKiAqLyB9XG4gICAgICAgIHRoaXMud3MgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuY29ubmVjdGluZyA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGxvZ1N0YXRzKCkge1xuICAgICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgICAgICB0aGlzLnJlY3ZXaW5kb3cgPSB0aGlzLnJlY3ZXaW5kb3cuZmlsdGVyKGUgPT4gbm93IC0gZS50IDwgUkVDVl9XSU5ET1dfTVMpO1xuICAgICAgICBpZiAodGhpcy5pbkZsaWdodEJ5dGVzID09PSAwICYmIHRoaXMucXVldWUubGVuZ3RoID09PSAwKSByZXR1cm47IC8vIG9ubHkgd2hlbiB0aGVyZSdzIHRyYWZmaWNcbiAgICAgICAgY29uc3QgcmVjdjYwID0gdGhpcy5yZWN2V2luZG93LnJlZHVjZSgoYSwgZSkgPT4gYSArIGUubiwgMCk7XG4gICAgICAgIGNvbnN0IHF1ZXVlZEJ5dGVzID0gdGhpcy5xdWV1ZS5yZWR1Y2UoKGEsIHEpID0+IGEgKyBxLmJ5dGVzLCAwKTtcbiAgICAgICAgY29uc29sZS5sb2coYFtyZW1vdGUgJHt0aGlzLmhvc3R9XSBvdXRzdGFuZGluZyAke2ZtdEJ5dGVzKHRoaXMuaW5GbGlnaHRCeXRlcyl9ICgke3RoaXMucGVuZGluZy5zaXplfSByZXEpLCBxdWV1ZWQgJHtmbXRCeXRlcyhxdWV1ZWRCeXRlcyl9ICgke3RoaXMucXVldWUubGVuZ3RofSByZXEpLCByZWN2LzYwcyAke2ZtdEJ5dGVzKHJlY3Y2MCl9LCByZWN2IHRvdGFsICR7Zm10Qnl0ZXModGhpcy5yZWNlaXZlZFRvdGFsKX1gKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGVuc3VyZUNvbm5lY3RlZCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKHRoaXMud3MgJiYgdGhpcy53cy5yZWFkeVN0YXRlID09PSAxKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICAgIGlmICh0aGlzLmNvbm5lY3RpbmcpIHJldHVybiB0aGlzLmNvbm5lY3Rpbmc7XG4gICAgICAgIHRoaXMuY29ubmVjdGluZyA9IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGxldCBhdXRoZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIGNvbnN0IHdzID0gbWFrZVdlYlNvY2tldCh0aGlzLndzVXJsKTtcbiAgICAgICAgICAgIHdzLmJpbmFyeVR5cGUgPSBcImFycmF5YnVmZmVyXCI7XG4gICAgICAgICAgICB0aGlzLndzID0gd3M7XG4gICAgICAgICAgICB3cy5vbm9wZW4gPSAoKSA9PiB3cy5zZW5kKGVuY29kZUZyYW1lKHsgaWQ6IDAsIG9wOiBcImF1dGhcIiwgcGFzc3dvcmQ6IHRoaXMucGFzc3dvcmQgfSkpO1xuICAgICAgICAgICAgd3Mub25tZXNzYWdlID0gKGV2KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYnVmID0gQnVmZmVyLmlzQnVmZmVyKGV2LmRhdGEpID8gZXYuZGF0YSBhcyBCdWZmZXIgOiBCdWZmZXIuZnJvbShldi5kYXRhIGFzIEFycmF5QnVmZmVyKTtcbiAgICAgICAgICAgICAgICBjb25zdCB7IGhlYWRlciB9ID0gZGVjb2RlRnJhbWUoYnVmKTtcbiAgICAgICAgICAgICAgICBpZiAoIWF1dGhlZCAmJiBoZWFkZXIuaWQgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGhlYWRlci5zdGF0dXMgPT09IDIwMCkgeyBhdXRoZWQgPSB0cnVlOyByZXNvbHZlKCk7IH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7IHJlamVjdChuZXcgRXJyb3IoXCJyZW1vdGU6IGF1dGhlbnRpY2F0aW9uIGZhaWxlZFwiKSk7IHRyeSB7IHdzLmNsb3NlKCk7IH0gY2F0Y2ggeyAvKiAqLyB9IH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLm9uTWVzc2FnZShidWYpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHdzLm9uZXJyb3IgPSAoKSA9PiB7IGlmICghYXV0aGVkKSByZWplY3QobmV3IEVycm9yKFwicmVtb3RlOiB3ZWJzb2NrZXQgY29ubmVjdGlvbiBlcnJvclwiKSk7IH07XG4gICAgICAgICAgICB3cy5vbmNsb3NlID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghYXV0aGVkKSByZWplY3QobmV3IEVycm9yKFwicmVtb3RlOiBjb25uZWN0aW9uIGNsb3NlZCBiZWZvcmUgYXV0aGVudGljYXRpbmdcIikpO1xuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlRGlzY29ubmVjdCgpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIExldCBhIGZhaWxlZCBjb25uZWN0aW9uIGJlIHJldHJpZWQgbmV4dCB0aW1lLlxuICAgICAgICB0aGlzLmNvbm5lY3RpbmcuY2F0Y2goKCkgPT4geyB0aGlzLndzID0gdW5kZWZpbmVkOyB0aGlzLmNvbm5lY3RpbmcgPSB1bmRlZmluZWQ7IH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5jb25uZWN0aW5nO1xuICAgIH1cblxuICAgIHByaXZhdGUgb25NZXNzYWdlKGJ1ZjogQnVmZmVyKSB7XG4gICAgICAgIGNvbnN0IHsgaGVhZGVyLCBib2R5IH0gPSBkZWNvZGVGcmFtZShidWYpO1xuICAgICAgICBjb25zdCBwID0gdGhpcy5wZW5kaW5nLmdldChoZWFkZXIuaWQpO1xuICAgICAgICBpZiAoIXApIHJldHVybjtcbiAgICAgICAgdGhpcy5wZW5kaW5nLmRlbGV0ZShoZWFkZXIuaWQpO1xuICAgICAgICB0aGlzLmluRmxpZ2h0Qnl0ZXMgLT0gcC5ieXRlcztcbiAgICAgICAgdGhpcy5yZWNlaXZlZFRvdGFsICs9IGJvZHkubGVuZ3RoO1xuICAgICAgICBpZiAodGhpcy5vcHRzLnN0YXRzKSB0aGlzLm9wdHMuc3RhdHMuYnl0ZXNGZXRjaGVkICs9IGJvZHkubGVuZ3RoO1xuICAgICAgICB0aGlzLnJlY3ZXaW5kb3cucHVzaCh7IHQ6IERhdGUubm93KCksIG46IGJvZHkubGVuZ3RoIH0pO1xuICAgICAgICBwLnJlc29sdmUoeyBzdGF0dXM6IGhlYWRlci5zdGF0dXMsIGJvZHkgfSk7XG4gICAgICAgIHRoaXMuZHJhaW4oKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZURpc2Nvbm5lY3QoKSB7XG4gICAgICAgIGNvbnN0IGVyciA9IG5ldyBFcnJvcihcInJlbW90ZTogd2Vic29ja2V0IGRpc2Nvbm5lY3RlZFwiKTtcbiAgICAgICAgZm9yIChjb25zdCBwIG9mIHRoaXMucGVuZGluZy52YWx1ZXMoKSkgcC5yZWplY3QoZXJyKTtcbiAgICAgICAgZm9yIChjb25zdCBxIG9mIHRoaXMucXVldWUpIHEucmVqZWN0KGVycik7XG4gICAgICAgIHRoaXMucGVuZGluZy5jbGVhcigpO1xuICAgICAgICB0aGlzLnF1ZXVlID0gW107XG4gICAgICAgIHRoaXMuaW5GbGlnaHRCeXRlcyA9IDA7XG4gICAgICAgIHRoaXMud3MgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuY29ubmVjdGluZyA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGRyYWluKCkge1xuICAgICAgICB3aGlsZSAodGhpcy5xdWV1ZS5sZW5ndGggJiYgdGhpcy53cyAmJiB0aGlzLndzLnJlYWR5U3RhdGUgPT09IDEpIHtcbiAgICAgICAgICAgIGNvbnN0IG5leHQgPSB0aGlzLnF1ZXVlWzBdO1xuICAgICAgICAgICAgaWYgKHRoaXMuaW5GbGlnaHRCeXRlcyA+IDAgJiYgdGhpcy5pbkZsaWdodEJ5dGVzICsgbmV4dC5ieXRlcyA+IE1BWF9JTkZMSUdIVF9CWVRFUykgYnJlYWs7IC8vIGhvbGQgdGhlIHF1ZXVlXG4gICAgICAgICAgICB0aGlzLnF1ZXVlLnNoaWZ0KCk7XG4gICAgICAgICAgICB0aGlzLmluRmxpZ2h0Qnl0ZXMgKz0gbmV4dC5ieXRlcztcbiAgICAgICAgICAgIHRoaXMucGVuZGluZy5zZXQobmV4dC5pZCwgeyByZXNvbHZlOiBuZXh0LnJlc29sdmUsIHJlamVjdDogbmV4dC5yZWplY3QsIGJ5dGVzOiBuZXh0LmJ5dGVzIH0pO1xuICAgICAgICAgICAgaWYgKHRoaXMub3B0cy5zdGF0cykgdGhpcy5vcHRzLnN0YXRzLnJlcXVlc3RDb3VudCsrO1xuICAgICAgICAgICAgdGhpcy53cy5zZW5kKG5leHQuZnJhbWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2VuZHMgb25lIHJlcXVlc3Qgb3ZlciB0aGUgV2ViU29ja2V0IChxdWV1ZWQgKyB0aHJvdHRsZWQpLiBgYnl0ZXNgIGlzIHRoZSBleHBlY3RlZCBwYXlsb2FkIHNpemUsIHVzZWQgZm9yIHRoZSBpbi1mbGlnaHQgY2FwLlxuICAgIHByaXZhdGUgYXN5bmMgcmVxdWVzdChvcDogc3RyaW5nLCBwYXJhbXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBib2R5OiBCdWZmZXIgfCB1bmRlZmluZWQsIGJ5dGVzOiBudW1iZXIpOiBQcm9taXNlPHsgc3RhdHVzOiBudW1iZXI7IGJvZHk6IEJ1ZmZlciB9PiB7XG4gICAgICAgIGlmICh0aGlzLm9wdHMubGF0ZW5jeU1zKSBhd2FpdCBzbGVlcCh0aGlzLm9wdHMubGF0ZW5jeU1zKTtcbiAgICAgICAgYXdhaXQgdGhpcy5lbnN1cmVDb25uZWN0ZWQoKTtcbiAgICAgICAgY29uc3QgaWQgPSB0aGlzLm5leHRJZCsrO1xuICAgICAgICBjb25zdCBmcmFtZSA9IGVuY29kZUZyYW1lKHsgaWQsIG9wLCAuLi5wYXJhbXMgfSwgYm9keSk7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLnF1ZXVlLnB1c2goeyBpZCwgZnJhbWUsIGJ5dGVzOiBNYXRoLm1heChieXRlcywgYm9keSA/IGJvZHkubGVuZ3RoIDogMCwgMSksIHJlc29sdmUsIHJlamVjdCB9KTtcbiAgICAgICAgICAgIHRoaXMuZHJhaW4oKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXN5bmMgc3RhdChwYXRoOiBzdHJpbmcpOiBQcm9taXNlPFN0YXQgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgY29uc3QgY2FjaGVkID0gdGhpcy5pbmZvQ2FjaGUuZ2V0KHBhdGgpO1xuICAgICAgICBpZiAoY2FjaGVkICYmIERhdGUubm93KCkgLSBjYWNoZWQuYXQgPCBJTkZPX1RUTF9NUykgcmV0dXJuIGNhY2hlZC5zdGF0O1xuICAgICAgICBjb25zdCByID0gYXdhaXQgdGhpcy5yZXF1ZXN0KFwiaW5mb1wiLCB7IHBhdGggfSwgdW5kZWZpbmVkLCAyNTYpO1xuICAgICAgICBsZXQgc3RhdDogU3RhdCB8IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKHIuc3RhdHVzID09PSA0MDQpIHN0YXQgPSB1bmRlZmluZWQ7XG4gICAgICAgIGVsc2UgaWYgKHIuc3RhdHVzICE9PSAyMDApIHRocm93IG5ldyBFcnJvcihgcmVtb3RlIGluZm8gZmFpbGVkICgke3Iuc3RhdHVzfSlgKTtcbiAgICAgICAgZWxzZSBzdGF0ID0gSlNPTi5wYXJzZShyLmJvZHkudG9TdHJpbmcoXCJ1dGY4XCIpKSBhcyBTdGF0O1xuICAgICAgICB0aGlzLmluZm9DYWNoZS5zZXQocGF0aCwgeyBzdGF0LCBhdDogRGF0ZS5ub3coKSB9KTtcbiAgICAgICAgcmV0dXJuIHN0YXQ7XG4gICAgfVxuICAgIGFzeW5jIGxpc3QocGF0aDogc3RyaW5nKTogUHJvbWlzZTx7IG5hbWU6IHN0cmluZzsgZGlyOiBib29sZWFuIH1bXT4ge1xuICAgICAgICBjb25zdCByID0gYXdhaXQgdGhpcy5yZXF1ZXN0KFwibGlzdFwiLCB7IHBhdGggfSwgdW5kZWZpbmVkLCA0MDk2KTtcbiAgICAgICAgaWYgKHIuc3RhdHVzICE9PSAyMDApIHRocm93IG5ldyBFcnJvcihgcmVtb3RlIGxpc3QgZmFpbGVkICgke3Iuc3RhdHVzfSlgKTtcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2Uoci5ib2R5LnRvU3RyaW5nKFwidXRmOFwiKSk7XG4gICAgfVxuICAgIGFzeW5jIHJlYWQocGF0aDogc3RyaW5nLCBzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlcik6IFByb21pc2U8QnVmZmVyPiB7XG4gICAgICAgIHJldHVybiAoYXdhaXQgdGhpcy5jYWNoZS5yZWFkKHRoaXMsIHBhdGgsIHN0YXJ0LCBlbmQpKSA/PyBFTVBUWTtcbiAgICB9XG4gICAgYXN5bmMgcmVhZFNlcnZlcihwYXRoOiBzdHJpbmcsIHN0YXJ0OiBudW1iZXIsIGVuZDogbnVtYmVyKTogUHJvbWlzZTxCdWZmZXIgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgY29uc3QgciA9IGF3YWl0IHRoaXMucmVxdWVzdChcInJlYWRcIiwgeyBwYXRoLCBzdGFydCwgZW5kIH0sIHVuZGVmaW5lZCwgZW5kIC0gc3RhcnQpO1xuICAgICAgICBpZiAoci5zdGF0dXMgPT09IDQwNCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKHIuc3RhdHVzICE9PSAyMDApIHRocm93IG5ldyBFcnJvcihgcmVtb3RlIHJlYWQgZmFpbGVkICgke3Iuc3RhdHVzfSlgKTtcbiAgICAgICAgcmV0dXJuIHIuYm9keTtcbiAgICB9XG4gICAgYXN5bmMgYXBwZW5kKHBhdGg6IHN0cmluZywgYm9keTogQnVmZmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IHIgPSBhd2FpdCB0aGlzLnJlcXVlc3QoXCJhcHBlbmRcIiwgeyBwYXRoIH0sIGJvZHksIGJvZHkubGVuZ3RoKTtcbiAgICAgICAgaWYgKHIuc3RhdHVzICE9PSAyMDApIHRocm93IG5ldyBFcnJvcihgcmVtb3RlIGFwcGVuZCBmYWlsZWQgKCR7ci5zdGF0dXN9KWApO1xuICAgICAgICB0aGlzLmluZm9DYWNoZS5kZWxldGUocGF0aCk7IC8vIGFwcGVuZC1vbmx5IGtlZXBzIGV4aXN0aW5nIGJ5dGVzOyBvbmx5IHRoZSBzaXplIGNoYW5nZWRcbiAgICB9XG4gICAgYXN5bmMgc2V0KHBhdGg6IHN0cmluZywgYm9keTogQnVmZmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IHIgPSBhd2FpdCB0aGlzLnJlcXVlc3QoXCJzZXRcIiwgeyBwYXRoIH0sIGJvZHksIGJvZHkubGVuZ3RoKTtcbiAgICAgICAgaWYgKHIuc3RhdHVzICE9PSAyMDApIHRocm93IG5ldyBFcnJvcihgcmVtb3RlIHNldCBmYWlsZWQgKCR7ci5zdGF0dXN9KWApO1xuICAgICAgICB0aGlzLmNhY2hlLmludmFsaWRhdGUocGF0aCk7XG4gICAgICAgIHRoaXMuaW5mb0NhY2hlLmRlbGV0ZShwYXRoKTtcbiAgICB9XG4gICAgYXN5bmMgcmVtb3ZlKHBhdGg6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCByID0gYXdhaXQgdGhpcy5yZXF1ZXN0KFwicmVtb3ZlXCIsIHsgcGF0aCB9LCB1bmRlZmluZWQsIDI1Nik7XG4gICAgICAgIGlmIChyLnN0YXR1cyAhPT0gMjAwKSB0aHJvdyBuZXcgRXJyb3IoYHJlbW90ZSByZW1vdmUgZmFpbGVkICgke3Iuc3RhdHVzfSlgKTtcbiAgICAgICAgdGhpcy5jYWNoZS5pbnZhbGlkYXRlKHBhdGgpO1xuICAgICAgICB0aGlzLmluZm9DYWNoZS5kZWxldGUocGF0aCk7XG4gICAgfVxufVxuXG4vLyBDYWNoZXMgdGhlIGxvbmdlc3Qta25vd24gcHJlZml4IG9mIGVhY2ggYWxpZ25lZCBjaHVuayBwZXIgcGF0aC4gVmFsaWQgYmVjYXVzZSBmaWxlcyBhcmUgaW1tdXRhYmxlIG9yIGFwcGVuZC1vbmx5ICh0aGUgYnl0ZXMgYXQgYW4gb2Zmc2V0IG5ldmVyIGNoYW5nZSkuIEl0IG9ubHkgZG9lcyByYW5nZSByZWFkcyDigJQgaXQgZG9lc24ndCBjYXJlIHdoYXQgdGhlIGZpbGVzIGFyZS5cbmNsYXNzIFJhbmdlQ2FjaGUge1xuICAgIHByaXZhdGUgY2h1bmtzID0gbmV3IE1hcDxzdHJpbmcsIEJ1ZmZlcj4oKTsgLy8gcGF0aCArIFwiXHUwMDAxXCIgKyBjaHVua0luZGV4LCBpbnNlcnRpb24tb3JkZXJlZCAoTFJVKVxuICAgIHByaXZhdGUgYnl0ZXMgPSAwO1xuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgY2h1bmtCeXRlczogbnVtYmVyLCBwcml2YXRlIGJ1ZGdldDogbnVtYmVyLCBwcml2YXRlIG1heEZldGNoQnl0ZXM6IG51bWJlcikgeyB9XG4gICAgcHJpdmF0ZSBrZXkocGF0aDogc3RyaW5nLCBjOiBudW1iZXIpIHsgcmV0dXJuIHBhdGggKyBcIlx1MDAwMVwiICsgYzsgfVxuICAgIHByaXZhdGUgcGVlayhwYXRoOiBzdHJpbmcsIGM6IG51bWJlcik6IEJ1ZmZlciB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGNvbnN0IGsgPSB0aGlzLmtleShwYXRoLCBjKTtcbiAgICAgICAgY29uc3QgdiA9IHRoaXMuY2h1bmtzLmdldChrKTtcbiAgICAgICAgaWYgKHYpIHsgdGhpcy5jaHVua3MuZGVsZXRlKGspOyB0aGlzLmNodW5rcy5zZXQoaywgdik7IH1cbiAgICAgICAgcmV0dXJuIHY7XG4gICAgfVxuICAgIHByaXZhdGUgc3RvcmUocGF0aDogc3RyaW5nLCBjOiBudW1iZXIsIGJ1ZjogQnVmZmVyKSB7XG4gICAgICAgIGNvbnN0IGsgPSB0aGlzLmtleShwYXRoLCBjKTtcbiAgICAgICAgY29uc3QgZXggPSB0aGlzLmNodW5rcy5nZXQoayk7XG4gICAgICAgIGlmIChleCAmJiBleC5sZW5ndGggPj0gYnVmLmxlbmd0aCkgeyB0aGlzLmNodW5rcy5kZWxldGUoayk7IHRoaXMuY2h1bmtzLnNldChrLCBleCk7IHJldHVybjsgfVxuICAgICAgICBpZiAoZXgpIHRoaXMuYnl0ZXMgLT0gZXgubGVuZ3RoO1xuICAgICAgICB0aGlzLmNodW5rcy5kZWxldGUoayk7XG4gICAgICAgIHRoaXMuY2h1bmtzLnNldChrLCBidWYpO1xuICAgICAgICB0aGlzLmJ5dGVzICs9IGJ1Zi5sZW5ndGg7XG4gICAgICAgIHdoaWxlICh0aGlzLmJ5dGVzID4gdGhpcy5idWRnZXQgJiYgdGhpcy5jaHVua3Muc2l6ZSA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IG9sZGVzdCA9IHRoaXMuY2h1bmtzLmtleXMoKS5uZXh0KCkudmFsdWUgYXMgc3RyaW5nO1xuICAgICAgICAgICAgdGhpcy5ieXRlcyAtPSAodGhpcy5jaHVua3MuZ2V0KG9sZGVzdCkgYXMgQnVmZmVyKS5sZW5ndGg7XG4gICAgICAgICAgICB0aGlzLmNodW5rcy5kZWxldGUob2xkZXN0KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpbnZhbGlkYXRlKHBhdGg6IHN0cmluZykge1xuICAgICAgICBjb25zdCBwcmVmaXggPSBwYXRoICsgXCJcdTAwMDFcIjtcbiAgICAgICAgZm9yIChjb25zdCBrIG9mIFsuLi50aGlzLmNodW5rcy5rZXlzKCldKSBpZiAoay5zdGFydHNXaXRoKHByZWZpeCkpIHsgdGhpcy5ieXRlcyAtPSAodGhpcy5jaHVua3MuZ2V0KGspIGFzIEJ1ZmZlcikubGVuZ3RoOyB0aGlzLmNodW5rcy5kZWxldGUoayk7IH1cbiAgICB9XG4gICAgYXN5bmMgcmVhZChjb25uOiBDb25uZWN0aW9uLCBwYXRoOiBzdHJpbmcsIHN0YXJ0OiBudW1iZXIsIGVuZDogbnVtYmVyKTogUHJvbWlzZTxCdWZmZXIgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgaWYgKGVuZCA8PSBzdGFydCkgcmV0dXJuIEVNUFRZO1xuICAgICAgICBjb25zdCBDSFVOSyA9IHRoaXMuY2h1bmtCeXRlcztcbiAgICAgICAgY29uc3QgbWF4UnVuQ2h1bmtzID0gTWF0aC5tYXgoMSwgTWF0aC5mbG9vcih0aGlzLm1heEZldGNoQnl0ZXMgLyBDSFVOSykpO1xuICAgICAgICBjb25zdCBmaXJzdENodW5rID0gTWF0aC5mbG9vcihzdGFydCAvIENIVU5LKTtcbiAgICAgICAgY29uc3QgbGFzdENodW5rID0gTWF0aC5mbG9vcigoZW5kIC0gMSkgLyBDSFVOSyk7XG4gICAgICAgIC8vIENvbGxlY3QgdGhlIGNodW5rcyB3ZSBkb24ndCBoYXZlIGRlZXBseSBlbm91Z2ggaW50byBib3VuZGVkIGNvbnRpZ3VvdXMgcnVucyAoZWFjaCA8PSBtYXhGZXRjaEJ5dGVzKS5cbiAgICAgICAgY29uc3QgcnVuczogeyBmcm9tOiBudW1iZXI7IHRvOiBudW1iZXIgfVtdID0gW107XG4gICAgICAgIGxldCBydW5Gcm9tID0gLTE7XG4gICAgICAgIGZvciAobGV0IGMgPSBmaXJzdENodW5rOyBjIDw9IGxhc3RDaHVuazsgYysrKSB7XG4gICAgICAgICAgICBjb25zdCBjU3RhcnQgPSBjICogQ0hVTks7XG4gICAgICAgICAgICBjb25zdCBuZWVkRW5kID0gTWF0aC5taW4oZW5kLCBjU3RhcnQgKyBDSFVOSykgLSBjU3RhcnQ7XG4gICAgICAgICAgICBjb25zdCBoYXZlID0gdGhpcy5wZWVrKHBhdGgsIGMpO1xuICAgICAgICAgICAgaWYgKCFoYXZlIHx8IGhhdmUubGVuZ3RoIDwgbmVlZEVuZCkge1xuICAgICAgICAgICAgICAgIGlmIChydW5Gcm9tIDwgMCkgcnVuRnJvbSA9IGM7XG4gICAgICAgICAgICAgICAgaWYgKGMgLSBydW5Gcm9tICsgMSA+PSBtYXhSdW5DaHVua3MpIHsgcnVucy5wdXNoKHsgZnJvbTogcnVuRnJvbSwgdG86IGMgfSk7IHJ1bkZyb20gPSAtMTsgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChydW5Gcm9tID49IDApIHtcbiAgICAgICAgICAgICAgICBydW5zLnB1c2goeyBmcm9tOiBydW5Gcm9tLCB0bzogYyAtIDEgfSk7XG4gICAgICAgICAgICAgICAgcnVuRnJvbSA9IC0xO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChydW5Gcm9tID49IDApIHJ1bnMucHVzaCh7IGZyb206IHJ1bkZyb20sIHRvOiBsYXN0Q2h1bmsgfSk7XG4gICAgICAgIC8vIEZldGNoIGFsbCBydW5zIGNvbmN1cnJlbnRseTsgdGhlIGNvbm5lY3Rpb24ncyBxdWV1ZSBjYXBzIHRvdGFsIGluLWZsaWdodCBieXRlcy5cbiAgICAgICAgbGV0IG1pc3NpbmdGaWxlID0gZmFsc2U7XG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKHJ1bnMubWFwKGFzeW5jIHJ1biA9PiB7XG4gICAgICAgICAgICBjb25zdCBieXRlcyA9IGF3YWl0IGNvbm4ucmVhZFNlcnZlcihwYXRoLCBydW4uZnJvbSAqIENIVU5LLCAocnVuLnRvICsgMSkgKiBDSFVOSyk7XG4gICAgICAgICAgICBpZiAoYnl0ZXMgPT09IHVuZGVmaW5lZCkgeyBtaXNzaW5nRmlsZSA9IHRydWU7IHJldHVybjsgfVxuICAgICAgICAgICAgZm9yIChsZXQgYyA9IHJ1bi5mcm9tOyBjIDw9IHJ1bi50bzsgYysrKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgb2ZmID0gKGMgLSBydW4uZnJvbSkgKiBDSFVOSztcbiAgICAgICAgICAgICAgICBpZiAob2ZmID49IGJ5dGVzLmxlbmd0aCkgYnJlYWs7XG4gICAgICAgICAgICAgICAgdGhpcy5zdG9yZShwYXRoLCBjLCBieXRlcy5zdWJhcnJheShvZmYsIE1hdGgubWluKG9mZiArIENIVU5LLCBieXRlcy5sZW5ndGgpKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pKTtcbiAgICAgICAgaWYgKG1pc3NpbmdGaWxlKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICBjb25zdCBwYXJ0czogQnVmZmVyW10gPSBbXTtcbiAgICAgICAgZm9yIChsZXQgYyA9IGZpcnN0Q2h1bms7IGMgPD0gbGFzdENodW5rOyBjKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGNTdGFydCA9IGMgKiBDSFVOSztcbiAgICAgICAgICAgIGNvbnN0IGZyb20gPSBNYXRoLm1heChzdGFydCwgY1N0YXJ0KSAtIGNTdGFydDtcbiAgICAgICAgICAgIGNvbnN0IHRvID0gTWF0aC5taW4oZW5kLCBjU3RhcnQgKyBDSFVOSykgLSBjU3RhcnQ7XG4gICAgICAgICAgICBjb25zdCBjaHVuayA9IHRoaXMucGVlayhwYXRoLCBjKTtcbiAgICAgICAgICAgIGlmICghY2h1bmsgfHwgY2h1bmsubGVuZ3RoIDwgdG8pIHsgaWYgKGNodW5rICYmIGNodW5rLmxlbmd0aCA+IGZyb20pIHBhcnRzLnB1c2goY2h1bmsuc3ViYXJyYXkoZnJvbSwgY2h1bmsubGVuZ3RoKSk7IGJyZWFrOyB9XG4gICAgICAgICAgICBwYXJ0cy5wdXNoKGNodW5rLnN1YmFycmF5KGZyb20sIHRvKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBhcnRzLmxlbmd0aCA9PT0gMSA/IHBhcnRzWzBdIDogQnVmZmVyLmNvbmNhdChwYXJ0cyk7XG4gICAgfVxufVxuXG5jb25zdCBqb2luUGF0aCA9IChiYXNlOiBzdHJpbmcsIGtleTogc3RyaW5nKSA9PiAoYmFzZSA/IGJhc2UgKyBcIi9cIiArIGtleSA6IGtleSk7XG5jb25zdCBiYXNlTmFtZSA9IChwOiBzdHJpbmcpID0+IHAuc3BsaXQoXCIvXCIpLmZpbHRlcihCb29sZWFuKS5wb3AoKSB8fCBcIlwiO1xuXG5jbGFzcyBSZW1vdGVGaWxlV3JhcHBlciBpbXBsZW1lbnRzIEZpbGVXcmFwcGVyIHtcbiAgICAvLyBgc3RhdGAgaXMgc3VwcGxpZWQgd2hlbiB0aGUgcGFyZW50IGFscmVhZHkgc3RhdHRlZCB1cyAoYXZvaWRzIGEgc2Vjb25kIC9pbmZvKS4gYGNyZWF0ZUludGVudGAgbWVhbnMgdGhpcyB3YXMgb3BlbmVkIHdpdGggY3JlYXRlOnRydWUsIHNvIGEgbWlzc2luZyBmaWxlIHJlYWRzIGFzIGVtcHR5IChpdCdsbCBiZSBjcmVhdGVkIG9uIHdyaXRlKS5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNvbm46IENvbm5lY3Rpb24sIHByaXZhdGUgZmlsZVBhdGg6IHN0cmluZywgcHJpdmF0ZSBzdGF0PzogU3RhdCwgcHJpdmF0ZSBjcmVhdGVJbnRlbnQgPSBmYWxzZSkgeyB9XG4gICAgLy8gTWlycm9yIHRoZSBuYXRpdmUgRmlsZVN5c3RlbUZpbGVIYW5kbGUgc2hhcGUgc28gY29kZSB3cml0dGVuIGFnYWluc3QgaXQgd29ya3MgdW5jaGFuZ2VkLlxuICAgIHJlYWRvbmx5IGtpbmQgPSBcImZpbGVcIiBhcyBjb25zdDtcbiAgICBnZXQgbmFtZSgpIHsgcmV0dXJuIGJhc2VOYW1lKHRoaXMuZmlsZVBhdGgpOyB9XG4gICAgYXN5bmMgZ2V0RmlsZSgpIHtcbiAgICAgICAgbGV0IHN0YXQgPSB0aGlzLnN0YXQgPz8gYXdhaXQgdGhpcy5jb25uLnN0YXQodGhpcy5maWxlUGF0aCk7XG4gICAgICAgIGlmICghc3RhdCkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmNyZWF0ZUludGVudCkgdGhyb3cgZW5vZW50KHRoaXMuZmlsZVBhdGgpO1xuICAgICAgICAgICAgc3RhdCA9IHsgc2l6ZTogMCwgbGFzdE1vZGlmaWVkOiBEYXRlLm5vdygpLCBkaXI6IGZhbHNlIH07XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29ubiA9IHRoaXMuY29ubiwgZmlsZVBhdGggPSB0aGlzLmZpbGVQYXRoLCBzaXplID0gc3RhdC5zaXplO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc2l6ZSwgbGFzdE1vZGlmaWVkOiBzdGF0Lmxhc3RNb2RpZmllZCxcbiAgICAgICAgICAgIGFzeW5jIGFycmF5QnVmZmVyKCkgeyByZXR1cm4gdG9BcnJheUJ1ZmZlcihhd2FpdCBjb25uLnJlYWQoZmlsZVBhdGgsIDAsIHNpemUpKTsgfSxcbiAgICAgICAgICAgIHNsaWNlKHN0YXJ0OiBudW1iZXIsIGVuZDogbnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgYXN5bmMgYXJyYXlCdWZmZXIoKSB7IHJldHVybiB0b0FycmF5QnVmZmVyKGF3YWl0IGNvbm4ucmVhZChmaWxlUGF0aCwgc3RhcnQsIGVuZCkpOyB9IH07XG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgIH1cbiAgICBhc3luYyBnZXRVUkwoKSB7XG4gICAgICAgIC8vIEhUVFBTIFVSTCBpbnRvIHRoZSBzZXJ2ZXIncyByYW5nZS1jYXBhYmxlIC9tZWRpYSBlbmRwb2ludC4gVGhlIHRva2VuIHJpZGVzIGluIHRoZSBxdWVyeSBiZWNhdXNlIGEgPHZpZGVvPi88aW1nPiBlbGVtZW50IGNhbid0IHNlbmQgYW4gQXV0aG9yaXphdGlvbiBoZWFkZXIuXG4gICAgICAgIHJldHVybiBgJHt0aGlzLmNvbm4udXJsfS9tZWRpYT9wYXRoPSR7ZW5jb2RlVVJJQ29tcG9uZW50KHRoaXMuZmlsZVBhdGgpfSZ0b2tlbj0ke2VuY29kZVVSSUNvbXBvbmVudCh0aGlzLmNvbm4ucGFzc3dvcmQpfWA7XG4gICAgfVxuICAgIGFzeW5jIGNyZWF0ZVdyaXRhYmxlKGNvbmZpZz86IHsga2VlcEV4aXN0aW5nRGF0YT86IGJvb2xlYW4gfSkge1xuICAgICAgICBjb25zdCBjb25uID0gdGhpcy5jb25uLCBmaWxlUGF0aCA9IHRoaXMuZmlsZVBhdGgsIGFwcGVuZCA9ICEhY29uZmlnPy5rZWVwRXhpc3RpbmdEYXRhO1xuICAgICAgICBjb25zdCBjaHVua3M6IEJ1ZmZlcltdID0gW107XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBhc3luYyBzZWVrKCkgeyAvKiB0aGUgc2VydmVyIGFwcGVuZHMgdG8gdGhlIGVuZCAvIG92ZXJ3cml0ZXMgdGhlIHdob2xlIGZpbGU7IG9mZnNldCB1bnVzZWQgKi8gfSxcbiAgICAgICAgICAgIGFzeW5jIHdyaXRlKHZhbHVlOiBCdWZmZXIpIHsgY2h1bmtzLnB1c2godmFsdWUpOyB9LFxuICAgICAgICAgICAgYXN5bmMgY2xvc2UoKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYm9keSA9IGNodW5rcy5sZW5ndGggPT09IDEgPyBjaHVua3NbMF0gOiBCdWZmZXIuY29uY2F0KGNodW5rcyk7XG4gICAgICAgICAgICAgICAgaWYgKGFwcGVuZCkgYXdhaXQgY29ubi5hcHBlbmQoZmlsZVBhdGgsIGJvZHkpOyBlbHNlIGF3YWl0IGNvbm4uc2V0KGZpbGVQYXRoLCBib2R5KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgfVxufVxuXG5jbGFzcyBSZW1vdGVEaXJlY3RvcnlXcmFwcGVyIGltcGxlbWVudHMgRGlyZWN0b3J5V3JhcHBlciB7XG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBjb25uOiBDb25uZWN0aW9uLCBwcml2YXRlIGRpclBhdGg6IHN0cmluZykgeyB9XG4gICAgLy8gTWlycm9yIHRoZSBuYXRpdmUgRmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZSBzaGFwZSAobmFtZS9raW5kL2VudHJpZXMpIHNvIGNvZGUgd3JpdHRlbiBhZ2FpbnN0IHRoZSBuYXRpdmUgQVBJIOKAlCBlLmcuIHJlY3Vyc2l2ZSB3YWxrcyB1c2luZyBgaGFuZGxlLmVudHJpZXMoKWAg4oCUIHdvcmtzIHRoZSBzYW1lIG92ZXIgdGhlIG5ldHdvcmsuXG4gICAgcmVhZG9ubHkga2luZCA9IFwiZGlyZWN0b3J5XCIgYXMgY29uc3Q7XG4gICAgcmVhZG9ubHkgaXNSZW1vdGUgPSB0cnVlO1xuICAgIGdldCBuYW1lKCkgeyByZXR1cm4gYmFzZU5hbWUodGhpcy5kaXJQYXRoKTsgfVxuICAgIGdldCBmdWxsUGF0aCgpIHsgcmV0dXJuIHRoaXMuZGlyUGF0aDsgfVxuICAgIGFzeW5jIHJlbW92ZUVudHJ5KGtleTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMuY29ubi5yZW1vdmUoam9pblBhdGgodGhpcy5kaXJQYXRoLCBrZXkpKTtcbiAgICB9XG4gICAgYXN5bmMgZ2V0RmlsZUhhbmRsZShrZXk6IHN0cmluZywgb3B0aW9ucz86IHsgY3JlYXRlPzogYm9vbGVhbiB9KTogUHJvbWlzZTxSZW1vdGVGaWxlV3JhcHBlcj4ge1xuICAgICAgICBjb25zdCBwID0gam9pblBhdGgodGhpcy5kaXJQYXRoLCBrZXkpO1xuICAgICAgICBpZiAob3B0aW9ucz8uY3JlYXRlKSByZXR1cm4gbmV3IFJlbW90ZUZpbGVXcmFwcGVyKHRoaXMuY29ubiwgcCwgdW5kZWZpbmVkLCB0cnVlKTtcbiAgICAgICAgY29uc3Qgc3RhdCA9IGF3YWl0IHRoaXMuY29ubi5zdGF0KHApOyAgICAgICAgICAgICAgICAgLy8gbWF0Y2hlcyB0aGUgRmlsZSBBUEk6IHRocm93IGlmIG1pc3NpbmdcbiAgICAgICAgaWYgKCFzdGF0IHx8IHN0YXQuZGlyKSB0aHJvdyBlbm9lbnQocCk7XG4gICAgICAgIHJldHVybiBuZXcgUmVtb3RlRmlsZVdyYXBwZXIodGhpcy5jb25uLCBwLCBzdGF0LCBmYWxzZSk7XG4gICAgfVxuICAgIGFzeW5jIGdldERpcmVjdG9yeUhhbmRsZShrZXk6IHN0cmluZywgb3B0aW9ucz86IHsgY3JlYXRlPzogYm9vbGVhbiB9KTogUHJvbWlzZTxSZW1vdGVEaXJlY3RvcnlXcmFwcGVyPiB7XG4gICAgICAgIGNvbnN0IHAgPSBqb2luUGF0aCh0aGlzLmRpclBhdGgsIGtleSk7XG4gICAgICAgIGlmICghb3B0aW9ucz8uY3JlYXRlKSB7XG4gICAgICAgICAgICBjb25zdCBzdGF0ID0gYXdhaXQgdGhpcy5jb25uLnN0YXQocCk7XG4gICAgICAgICAgICBpZiAoIXN0YXQgfHwgIXN0YXQuZGlyKSB0aHJvdyBlbm9lbnQocCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBSZW1vdGVEaXJlY3RvcnlXcmFwcGVyKHRoaXMuY29ubiwgcCk7ICAgICAgIC8vIGRpcnMgYXJlIGNyZWF0ZWQgbGF6aWx5IG9uIGZpcnN0IHdyaXRlXG4gICAgfVxuICAgIC8vIEVhY2ggZW50cnkgaXMgaXRzZWxmIGEgcmVhbCBoYW5kbGUgKGEgc3ViLXdyYXBwZXIpLCBzbyBhIHJlY3Vyc2l2ZSB3YWxrIG92ZXIgLmVudHJpZXMoKSBrZWVwcyB3b3JraW5nIGF0IGV2ZXJ5IGxldmVsIOKAlCBleGFjdGx5IGxpa2UgdGhlIG5hdGl2ZSBBUEkuXG4gICAgYXN5bmMgKltTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKTogQXN5bmNJdGVyYWJsZUl0ZXJhdG9yPFtzdHJpbmcsIFJlbW90ZUZpbGVXcmFwcGVyIHwgUmVtb3RlRGlyZWN0b3J5V3JhcHBlcl0+IHtcbiAgICAgICAgY29uc3QgZW50cmllcyA9IGF3YWl0IHRoaXMuY29ubi5saXN0KHRoaXMuZGlyUGF0aCk7XG4gICAgICAgIGZvciAoY29uc3QgZSBvZiBlbnRyaWVzKSB7XG4gICAgICAgICAgICBjb25zdCBjaGlsZFBhdGggPSBqb2luUGF0aCh0aGlzLmRpclBhdGgsIGUubmFtZSk7XG4gICAgICAgICAgICB5aWVsZCBbZS5uYW1lLCBlLmRpciA/IG5ldyBSZW1vdGVEaXJlY3RvcnlXcmFwcGVyKHRoaXMuY29ubiwgY2hpbGRQYXRoKSA6IG5ldyBSZW1vdGVGaWxlV3JhcHBlcih0aGlzLmNvbm4sIGNoaWxkUGF0aCldO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVudHJpZXMoKSB7IHJldHVybiB0aGlzW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpOyB9XG4gICAga2V5cygpIHsgcmV0dXJuIG1hcEFzeW5jKHRoaXNbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCksIChbbmFtZV0pID0+IG5hbWUpOyB9XG4gICAgdmFsdWVzKCkgeyByZXR1cm4gbWFwQXN5bmModGhpc1tTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKSwgKFssIGhhbmRsZV0pID0+IGhhbmRsZSk7IH1cbn1cblxuYXN5bmMgZnVuY3Rpb24qIG1hcEFzeW5jPFQsIFU+KGl0OiBBc3luY0l0ZXJhYmxlSXRlcmF0b3I8VD4sIGZuOiAodjogVCkgPT4gVSk6IEFzeW5jSXRlcmFibGVJdGVyYXRvcjxVPiB7XG4gICAgZm9yIGF3YWl0IChjb25zdCB2IG9mIGl0KSB5aWVsZCBmbih2KTtcbn1cblxuLy8gQSBEaXJlY3RvcnlXcmFwcGVyIHJvb3RlZCBhdCBhIHJlbW90ZSBzZXJ2ZXIuIERyb3AtaW4gZm9yIHRoZSBOb2RlIC8gRmlsZS1BUEkgaGFuZGxlcy5cbmV4cG9ydCBmdW5jdGlvbiBnZXRSZW1vdGVEaXJlY3RvcnlIYW5kbGUodXJsOiBzdHJpbmcsIHBhc3N3b3JkOiBzdHJpbmcsIG9wdGlvbnM6IFJlbW90ZU9wdGlvbnMgPSB7fSk6IERpcmVjdG9yeVdyYXBwZXIge1xuICAgIHJldHVybiBuZXcgUmVtb3RlRGlyZWN0b3J5V3JhcHBlcihuZXcgQ29ubmVjdGlvbih1cmwsIHBhc3N3b3JkLCBvcHRpb25zKSwgXCJcIik7XG59XG5cbmV4cG9ydCB0eXBlIFJlbW90ZUNvbm5lY3RSZXN1bHQgPSB7IHN0YXR1czogXCJva1wiIH0gfCB7IHN0YXR1czogXCJ1bmF1dGhvcml6ZWRcIiB9IHwgeyBzdGF0dXM6IFwidW5yZWFjaGFibGVcIjsgZXJyb3I6IHN0cmluZyB9O1xuXG4vLyBWZXJpZmllcyBhIHNlcnZlciBpcyByZWFjaGFibGUgYW5kIHRoZSBwYXNzd29yZCB3b3JrcyDigJQgYnkgb3BlbmluZyB0aGUgV2ViU29ja2V0LCBhdXRoZW50aWNhdGluZywgYW5kIGxpc3RpbmcgdGhlIHJvb3QuIERpc3Rpbmd1aXNoZXMgXCJjb25uZWN0ZWRcIiAvIFwid3JvbmcgcGFzc3dvcmRcIiAvIFwiY291bGRuJ3QgcmVhY2ggaXRcIiAodGhlIGxhc3QgdXN1YWxseSBtZWFuaW5nIHRoZSBzZWxmLXNpZ25lZCBjZXJ0IGlzbid0IHRydXN0ZWQgeWV0IGluIHRoZSBicm93c2VyLCBzaW5jZSB0aGUgc29ja2V0IGp1c3QgZmFpbHMgdG8gb3BlbikuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdGVzdFJlbW90ZUNvbm5lY3Rpb24odXJsOiBzdHJpbmcsIHBhc3N3b3JkOiBzdHJpbmcsIG9wdGlvbnM6IFJlbW90ZU9wdGlvbnMgPSB7fSk6IFByb21pc2U8UmVtb3RlQ29ubmVjdFJlc3VsdD4ge1xuICAgIGNvbnN0IGNvbm4gPSBuZXcgQ29ubmVjdGlvbih1cmwsIHBhc3N3b3JkLCBvcHRpb25zKTtcbiAgICB0cnkge1xuICAgICAgICBhd2FpdCBjb25uLmxpc3QoXCJcIik7XG4gICAgICAgIHJldHVybiB7IHN0YXR1czogXCJva1wiIH07XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjb25zdCBtc2cgPSAoZSBhcyBFcnJvcik/Lm1lc3NhZ2UgfHwgU3RyaW5nKGUpO1xuICAgICAgICBpZiAoL2F1dGgvaS50ZXN0KG1zZykpIHJldHVybiB7IHN0YXR1czogXCJ1bmF1dGhvcml6ZWRcIiB9O1xuICAgICAgICByZXR1cm4geyBzdGF0dXM6IFwidW5yZWFjaGFibGVcIiwgZXJyb3I6IG1zZyB9O1xuICAgIH0gZmluYWxseSB7XG4gICAgICAgIGNvbm4uY2xvc2UoKTtcbiAgICB9XG59XG4iXX0=
476
- /* _JS_SOURCE_HASH = "928bc9c9842fe71d205c14314f3ad0e30712700833966acbd8322943777d1798"; */
476
+ /* _JS_SOURCE_HASH = "30d6e874dda40bc0d9b884b1f7af85740d795b782a5901a2cfa405529d16b602"; */
@@ -15,7 +15,7 @@ export declare function trackAccess(config: {
15
15
  path: string;
16
16
  size?: number;
17
17
  }): void;
18
- /** Method decorator factory, for API methods whose single config-object argument has account and bucketName: tracks the access (as `bucketName/path`) after the method succeeds. Sizes come from the config's data (writes) or the result's data (reads); operations without either are count-only. Array results (listings) track one access per returned path, or a single access at the prefix when empty. */
18
+ /** Method decorator factory, for API methods whose single config-object argument has account and bucketName: tracks the access (as `bucketName/path`) after the method succeeds. Sizes come from the config's data (writes) or the result's data (reads); operations without either are count-only. Array results (listings - findInfo, getChangesAfter) are tracked as two count-only operations: "<op> queries" at the query prefix (one per call), and "<op> results" at each returned path (one per result). */
19
19
  export declare function trackAccessCall(operation: string): (target: unknown, key: string, descriptor: PropertyDescriptor) => void;
20
20
  export declare function getAccessTotals(account: string): AccessTotals;
21
21
  export declare function readAccessSummaries(config: {
@@ -57,7 +57,7 @@ export function trackAccess(config: { account: string; operation: string; path:
57
57
  }
58
58
  }
59
59
 
60
- /** Method decorator factory, for API methods whose single config-object argument has account and bucketName: tracks the access (as `bucketName/path`) after the method succeeds. Sizes come from the config's data (writes) or the result's data (reads); operations without either are count-only. Array results (listings) track one access per returned path, or a single access at the prefix when empty. */
60
+ /** Method decorator factory, for API methods whose single config-object argument has account and bucketName: tracks the access (as `bucketName/path`) after the method succeeds. Sizes come from the config's data (writes) or the result's data (reads); operations without either are count-only. Array results (listings - findInfo, getChangesAfter) are tracked as two count-only operations: "<op> queries" at the query prefix (one per call), and "<op> results" at each returned path (one per result). */
61
61
  export function trackAccessCall(operation: string) {
62
62
  return function (target: unknown, key: string, descriptor: PropertyDescriptor): void {
63
63
  let original = descriptor.value as (...args: unknown[]) => Promise<unknown>;
@@ -66,13 +66,10 @@ export function trackAccessCall(operation: string) {
66
66
  let result = await original.apply(this, args);
67
67
  let base = `${config.bucketName}/`;
68
68
  if (Array.isArray(result)) {
69
- if (result.length) {
70
- for (let entry of result as { path: string }[]) {
71
- trackAccess({ account: config.account, operation, path: base + entry.path });
72
- }
73
- } else {
74
- // The paths are only known once the results are in; an empty result still counts as one access at the prefix
75
- trackAccess({ account: config.account, operation, path: base + (config.prefix || config.path || "") });
69
+ // Two separate breakdowns, both count-only: WHAT was queried, and WHAT was returned
70
+ trackAccess({ account: config.account, operation: `${operation} queries`, path: base + (config.prefix || config.path || "") });
71
+ for (let entry of result as { path: string }[]) {
72
+ trackAccess({ account: config.account, operation: `${operation} results`, path: base + entry.path });
76
73
  }
77
74
  return result;
78
75
  }
@@ -1,4 +1,4 @@
1
- import { isNode, sort, watchSlowPromise } from "socket-function/src/misc";
1
+ import { isNode, sort, timeoutToUndefinedSilent, watchSlowPromise } from "socket-function/src/misc";
2
2
  import { delay } from "socket-function/src/batching";
3
3
  import {
4
4
  IArchives, RemoteConfig, RemoteConfigBase, SourceConfig,
@@ -20,6 +20,7 @@ import { ServerBucketInfo, ActiveBucketInfo, getLocalArchives } from "./storageS
20
20
  import { isOwnAddress } from "./serverConfig";
21
21
  import { RemoteStorageController, STORAGE_NOT_AUTHENTICATED } from "./storageController";
22
22
  import { SourceWrapper, RETRY_START_DELAY, RETRY_MAX_DELAY, RETRY_GROWTH } from "./sourceWrapper";
23
+ import { formatTime } from "socket-function/src/formatting/format";
23
24
 
24
25
  const CONFIG_POLL_INTERVAL = 5 * 60 * 1000;
25
26
  const WRONG_TARGET_BOUNDARY_WINDOW = 30 * 1000;
@@ -643,14 +644,16 @@ export class ArchivesChain implements IArchives {
643
644
  });
644
645
  }
645
646
 
647
+ // Without fallbacks: the AUTHORITATIVE covering ONLY - the first source per route in config order (the same node every write and read targets), down or not. It is NEVER excluded and NEVER substituted, so a listing that can't reach its write nodes retries those same nodes until the deadline and then fails, rather than quietly reading second-hand data off a replica or backblaze. exclude/cooldown/substitution apply ONLY when the caller opted into fallbacks.
646
648
  private selectCoveringSources(state: ChainState, config?: { fallbacks?: boolean; exclude?: Set<SourceWrapper> }): SourceWrapper[] {
647
- // No cooldown preference by default: listings must come from the AUTHORITATIVE sources (the first matching, like every read and write), or they miss just-written data. With fallbacks the caller chose availability over that: known-down sources move to the back so the next source covering their routes substitutes, and sources that failed THIS call are excluded outright.
648
- let candidates = state.sources.filter(x => configWindowCurrent(x.config) && x.api && !config?.exclude?.has(x));
649
649
  if (config?.fallbacks) {
650
+ let candidates = state.sources.filter(x => configWindowCurrent(x.config) && x.api && !config.exclude?.has(x));
650
651
  let usable = candidates.filter(x => !x.isOnCooldown());
651
652
  let chosen = coverRoutes(usable) || coverRoutes(candidates);
652
653
  if (chosen) return chosen;
654
+ throw new Error(`Cannot cover the full route space for ${this.getDebugName()}: the available sources leave a gap (some shards are down or URL-only)`);
653
655
  }
656
+ let candidates = state.sources.filter(x => configWindowCurrent(x.config) && x.api);
654
657
  let chosen = coverRoutes(candidates);
655
658
  if (!chosen) {
656
659
  throw new Error(`Cannot cover the full route space for ${this.getDebugName()}: the available sources leave a gap (some shards are down or URL-only)`);
@@ -659,10 +662,13 @@ export class ArchivesChain implements IArchives {
659
662
  }
660
663
 
661
664
  private async runOnCovering<T>(operation: string, run: (archives: IArchives) => Promise<T>, config?: { fallbacks?: boolean }): Promise<T[]> {
665
+ let startTime = Date.now();
662
666
  let deadline = Date.now() + COVERING_RETRY_TIMEOUT;
663
667
  // Sources that failed during this call - with fallbacks, the next attempt covers their routes with the next source holding them instead
664
668
  let failed = new Set<SourceWrapper>();
669
+ let tries = 0;
665
670
  while (true) {
671
+ tries++;
666
672
  let state = await this.getState();
667
673
  // Errors name the OPERATION and the SPECIFIC sources that failed - "the find failed because source X is unavailable", never an anonymous failure attributed to the whole chain
668
674
  let outcome = await (async (): Promise<{ values: T[] } | { error: Error }> => {
@@ -674,7 +680,8 @@ export class ArchivesChain implements IArchives {
674
680
  }
675
681
  let values: T[] = [];
676
682
  let failures: { source: SourceWrapper; error: Error }[] = [];
677
- await Promise.all(covering.map(async source => {
683
+ let time = Date.now();
684
+ await Promise.all(covering.map(async (source, index) => {
678
685
  let api = source.api;
679
686
  if (!api) {
680
687
  failed.add(source);
@@ -687,17 +694,20 @@ export class ArchivesChain implements IArchives {
687
694
  if (!source.isConnected()) source.noteFailure();
688
695
  failed.add(source);
689
696
  failures.push({ source, error: e as Error });
697
+ console.log(`Failed after ${formatTime(Date.now() - time)} index ${index} of ${covering.length}`);
690
698
  }
691
699
  }));
692
700
  if (!failures.length) return { values };
693
701
  if (failures.length === 1) {
694
- return { error: new Error(`${operation} failed because source ${failures[0].source.getDebugName()} is unavailable: ${failures[0].error.stack ?? failures[0].error}`) };
702
+ return { error: new Error(`${operation} failed because source ${failures[0].source.getDebugName()} is unavailable: ${failures[0].error.message ?? failures[0].error}. Fallbacks = ${!!config?.fallbacks}. Tries = ${tries}, Took ${formatTime(Date.now() - startTime)}`) };
695
703
  }
696
- return { error: new Error(`${operation} failed because ${failures.length} of the ${covering.length} covering sources are unavailable: ${failures.map(x => `${x.source.getDebugName()}: ${x.error.stack ?? x.error}`).join(" | ")}`) };
704
+ return { error: new Error(`${operation} failed because ${failures.length} of the ${covering.length} covering sources are unavailable: ${failures.map(x => `${x.source.getDebugName()}: ${x.error.message ?? x.error}`).join(" | ")}. Fallbacks = ${!!config?.fallbacks}. Tries = ${tries}, Took ${formatTime(Date.now() - startTime)}`) };
697
705
  })();
698
706
  if ("values" in outcome) return outcome.values;
699
707
  let error = outcome.error;
700
- if (Date.now() >= deadline) throw error;
708
+ if (Date.now() >= deadline) {
709
+ throw error;
710
+ }
701
711
  if (config?.fallbacks && failed.size) {
702
712
  let substitutable = false;
703
713
  try {
@@ -705,15 +715,15 @@ export class ArchivesChain implements IArchives {
705
715
  substitutable = true;
706
716
  } catch { }
707
717
  if (substitutable) {
708
- console.error(`${error.message}. Substituting the failed sources' routes with fallback sources.`);
718
+ console.warn(`(retrying with fallbacks) ${error.message}`);
709
719
  continue;
710
720
  }
711
721
  // No substitute covers the failed routes - retry the failed sources themselves after the delay
712
722
  failed.clear();
713
723
  }
714
724
  console.error(`${error.message}. Retrying in ${COVERING_RETRY_DELAY / 1000}s (giving up at ${new Date(deadline).toISOString()}).`);
725
+ void this.recheckAvailability();
715
726
  await delay(COVERING_RETRY_DELAY);
716
- await this.recheckAvailability();
717
727
  }
718
728
  }
719
729
 
@@ -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.ArchivesRemote = exports.authenticateStorage = exports.parseStorageUrl = void 0;
4
4
  const SocketFunction_1 = require("socket-function/SocketFunction");
@@ -191,4 +191,4 @@ class ArchivesRemote {
191
191
  }
192
192
  exports.ArchivesRemote = ArchivesRemote;
193
193
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXJjaGl2ZXNSZW1vdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJBcmNoaXZlc1JlbW90ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtRUFBZ0U7QUFDaEUsbURBQXdEO0FBQ3hELDJEQUFxRDtBQUNyRCxrREFBNkU7QUFDN0UsNENBQW9PO0FBQ3BPLGlEQUFnRjtBQUNoRiwyREFHNkI7QUFFN0Isa1ZBQWtWO0FBRWxWLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUNyQyxNQUFNLG9CQUFvQixHQUFHLENBQUMsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBWTdDLFNBQWdCLGVBQWUsQ0FBQyxHQUFXO0lBQ3ZDLElBQUksQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3JCLElBQUksQ0FBQyxDQUFDLFFBQVEsS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUMxQixNQUFNLElBQUksS0FBSyxDQUFDLG1DQUFtQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMvRyxDQUFDO0lBQ0QsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksR0FBRyxFQUFFLENBQUM7QUFDekQsQ0FBQztBQU5ELDBDQU1DO0FBRUQsdUZBQXVGO0FBQ2hGLEtBQUssVUFBVSxtQkFBbUIsQ0FBQyxNQUF5RDtJQUMvRixvSkFBb0o7SUFDcEosK0JBQWMsQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUM7SUFDekMsSUFBSSxVQUFVLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FB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LENBQUMsSUFBSTtvQkFBRSxNQUFNO2dCQUNqQixLQUFLLElBQUksTUFBTSxHQUFHLENBQUMsRUFBRSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNLElBQUksb0JBQW9CLEVBQUUsQ0FBQztvQkFDeEUsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsTUFBTSxHQUFHLG9CQUFvQixDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUMvRyxDQUFDO1lBQ0wsQ0FBQztZQUNELE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxlQUFlLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ3hELENBQUM7UUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ1QsSUFBSSxDQUFDO2dCQUNELE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxlQUFlLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQ3hELENBQUM7WUFBQyxXQUFNLENBQUMsQ0FBQyxDQUFDO1lBQ1gsTUFBTSxDQUFDLENBQUM7UUFDWixDQUFDO0lBQ0wsQ0FBQztJQUVNLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBWTtRQUM1Qix3RkFBd0Y7UUFDeEYsT0FBTyxJQUFBLDJCQUFZLEVBQUMsSUFBQSwrQkFBZ0IsRUFBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ2pFLENBQUM7Q0FDSjtBQTlKRCx3Q0E4SkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTb2NrZXRGdW5jdGlvbiB9IGZyb20gXCJzb2NrZXQtZnVuY3Rpb24vU29ja2V0RnVuY3Rpb25cIjtcbmltcG9ydCB7IHRpbWVJbk1pbnV0ZSB9IGZyb20gXCJzb2NrZXQtZnVuY3Rpb24vc3JjL21pc2NcIjtcbmltcG9ydCB7IGRlbGF5IH0gZnJvbSBcInNvY2tldC1mdW5jdGlvbi9zcmMvYmF0Y2hpbmdcIjtcbmltcG9ydCB7IGdldElkZW50aXR5Q0EsIGxvYWRJZGVudGl0eUNBLCBzaWduIH0gZnJvbSBcIi4uLy4uL21pc2MvaHR0cHMvY2VydHNcIjtcbmltcG9ydCB7IElBcmNoaXZlcywgQXJjaGl2ZUZpbGVJbmZvLCBBcmNoaXZlc0NvbmZpZywgQXJjaGl2ZXNTeW5jU3RhdHVzLCBDaGFuZ2VzQWZ0ZXJDb25maWcsIERlbENvbmZpZywgRmluZENvbmZpZywgR2V0Q29uZmlnLCBHZXRJbmZvQ29uZmlnLCBTb3VyY2VDb25maWcsIFNldENvbmZpZywgTEFSR0VfU0VUX1RIUkVTSE9MRCwgYnVmZmVyQ2h1bmtTdHJlYW0gfSBmcm9tIFwiLi4vSUFyY2hpdmVzXCI7XG5pbXBvcnQgeyBwYXJzZUhvc3RlZFVybCwgZ2V0QnVja2V0QmFzZVVybCwgYnVpbGRGaWxlVXJsIH0gZnJvbSBcIi4vcmVtb3RlQ29uZmlnXCI7XG5pbXBvcnQge1xuICAgIFJlbW90ZVN0b3JhZ2VDb250cm9sbGVyLCBTVE9SQUdFX0FVVEhfUFVSUE9TRSxcbiAgICBTVE9SQUdFX05PVF9BVVRIRU5USUNBVEVELCBTVE9SQUdFX0FDQ0VTU19ERU5JRUQsXG59IGZyb20gXCIuL3N0b3JhZ2VDb250cm9sbGVyXCI7XG5cbi8vIEEgYnVja2V0IG9uIG91ciByZW1vdGUgc3RvcmFnZSBzZXJ2ZXIgKHN0b3JhZ2VTZXJ2ZXIudHMpLCB1c2VkIGxpa2UgQXJjaGl2ZXNCYWNrYmxhemUuIFdvcmtzIGluIE5vZGUuanMgYW5kIHRoZSBicm93c2VyLiBBdXRoZW50aWNhdGVzIHdpdGggdGhpcyBtYWNoaW5lJ3MgY2VydHMudHMgaWRlbnRpdHk7IGlmIHRoZSBhY2NvdW50IGhhc24ndCB0cnVzdGVkIHRoaXMgbWFjaGluZSB5ZXQgaXQgcmVxdWVzdHMgYWNjZXNzLCBhbmQgYnkgZGVmYXVsdCB3YWl0cywgbG9nZ2luZyBpbnN0cnVjdGlvbnMgZXZlcnkgbWludXRlIChjYWxscyBibG9jayB1bnRpbCBhY2Nlc3MgaXMgZ3JhbnRlZCkuXG5cbmNvbnN0IEFDQ0VTU19SRVRSWV9ERUxBWSA9IDEwMDAgKiAzMDtcbmNvbnN0IExBUkdFX0ZJTEVfUEFSVF9TSVpFID0gOCAqIDEwMjQgKiAxMDI0O1xuXG5leHBvcnQgdHlwZSBBcmNoaXZlc1JlbW90ZUNvbmZpZyA9IHtcbiAgICAvLyBUaGUgYnVja2V0J3Mgcm91dGluZyBVUkwsIHdoaWNoIGFkZHJlc3NlcyB0aGUgc2VydmVyLCBhY2NvdW50LCBhbmQgYnVja2V0IGluIG9uZTpcbiAgICAvLyAgaHR0cHM6Ly9zdG9yYWdlLmV4YW1wbGUuY29tOjQ0NDQvZmlsZS88YWNjb3VudD4vPGJ1Y2tldE5hbWU+L3N0b3JhZ2Uvc3RvcmFnZXJvdXRpbmcuanNvblxuICAgIHVybDogc3RyaW5nO1xuICAgIC8vIGZhbHNlOiBhY2Nlc3MtZGVuaWVkIGNhbGxzIHRocm93IGltbWVkaWF0ZWx5ICh0aGUgZXJyb3IgaW5jbHVkZXMgdGhlIGFjY2VzcyBwYWdlIGxpbmspIGluc3RlYWQgb2YgcmVxdWVzdGluZyBhY2Nlc3MgYW5kIGJsb2NraW5nIHVudGlsIGl0IGlzIGdyYW50ZWQgKHRoZSBkZWZhdWx0KS5cbiAgICB3YWl0Rm9yQWNjZXNzPzogYm9vbGVhbjtcbiAgICAvKiogVGhlIGV4YWN0IHJvdXRpbmctY29uZmlnIGVudHJ5IHRoaXMgY29ubmVjdGlvbiByZXByZXNlbnRzLCBzZW50IHdpdGggZXZlcnkgY2FsbCBzbyB0aGUgc2VydmVyIHBpY2tzIHRoZSBtYXRjaGluZyBwZXItcm91dGUgc3RvcmUgKG9uZSBzZXJ2ZXIgaG9zdHMgb25lIHN0b3JlIHBlciByb3V0ZSkuIEluc3RhbmNlcyBidWlsdCBmcm9tIGEgYmFyZSBVUkwgZmFicmljYXRlIG9uZSAtIGl0IHdpbGwgbmV2ZXIgbWF0Y2gsIHdoaWNoIG9ubHkgd29ya3MgZm9yIGNhbGxzIHRoYXQgZG9uJ3Qgc2VsZWN0IGEgc3RvcmUgKGludGVybmFsIHJlYWRzLCBST1VUSU5HX0ZJTEUsIGdldENvbmZpZykuICovXG4gICAgc291cmNlQ29uZmlnOiBTb3VyY2VDb25maWc7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VTdG9yYWdlVXJsKHVybDogc3RyaW5nKTogeyBhZGRyZXNzOiBzdHJpbmc7IHBvcnQ6IG51bWJlciB9IHtcbiAgICBsZXQgdSA9IG5ldyBVUkwodXJsKTtcbiAgICBpZiAodS5wcm90b2NvbCAhPT0gXCJodHRwczpcIikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFN0b3JhZ2UgVVJMIG11c3QgdXNlIGh0dHBzLCBnb3QgJHtKU09OLnN0cmluZ2lmeSh1LnByb3RvY29sKX0gaW4gJHtKU09OLnN0cmluZ2lmeSh1cmwpfWApO1xuICAgIH1cbiAgICByZXR1cm4geyBhZGRyZXNzOiB1Lmhvc3RuYW1lLCBwb3J0OiArdS5wb3J0IHx8IDQ0MyB9O1xufVxuXG4vLyBBdXRoZW50aWNhdGVzIGEgY29ubmVjdGlvbiB0byBhIHN0b3JhZ2Ugc2VydmVyIHdpdGggdGhpcyBtYWNoaW5lJ3MgY2VydHMudHMgaWRlbnRpdHlcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhdXRoZW50aWNhdGVTdG9yYWdlKGNvbmZpZzogeyBhZGRyZXNzOiBzdHJpbmc7IHBvcnQ6IG51bWJlcjsgbm9kZUlkOiBzdHJpbmcgfSk6IFByb21pc2U8eyBtYWNoaW5lSWQ6IHN0cmluZzsgaXA6IHN0cmluZyB9PiB7XG4gICAgLy8gaG9zdFNlcnZlciBub2RlSWRzIGFyZSBtYWNoaW5lLXNwZWNpZmljLCBzbyBjb25uZWN0aW9ucyBieSBkb21haW4gbXVzdCB0YXJnZXQgXCJhbnkgc2VydmVyIGF0IHRoaXMgYWRkcmVzc1wiICh3aGljaCBpcyBob3cgYnJvd3NlcnMgYWx3YXlzIGNvbm5lY3QpXG4gICAgU29ja2V0RnVuY3Rpb24uRU5BQkxFX0NMSUVOVF9NT0RFID0gdHJ1ZTtcbiAgICBsZXQgcm9vdERvbWFpbiA9IGNvbmZpZy5hZGRyZXNzLnNwbGl0KFwiLlwiKS5zbGljZSgtMikuam9pbihcIi5cIik7XG4gICAgYXdhaXQgbG9hZElkZW50aXR5Q0Eocm9vdERvbWFpbik7XG4gICAgbGV0IGNhID0gZ2V0SWRlbnRpdHlDQShyb290RG9tYWluKTtcbiAgICBsZXQgZGF0YSA9IHtcbiAgICAgICAgcHVycG9zZTogU1RPUkFHRV9BVVRIX1BVUlBPU0UsXG4gICAgICAgIHRpbWU6IERhdGUubm93KCksXG4gICAgICAgIHNlcnZlcjogYCR7Y29uZmlnLmFkZHJlc3N9OiR7Y29uZmlnLnBvcnR9YCxcbiAgICB9O1xuICAgIGxldCBzaWduYXR1cmUgPSBzaWduKHsga2V5OiBjYS5rZXkgfSwgZGF0YSk7XG4gICAgcmV0dXJuIGF3YWl0IFJlbW90ZVN0b3JhZ2VDb250cm9sbGVyLm5vZGVzW2NvbmZpZy5ub2RlSWRdLmF1dGhlbnRpY2F0ZSh7IGNlcnRQZW06IGNhLmNlcnQudG9TdHJpbmcoKSwgc2lnbmF0dXJlLCBkYXRhIH0pO1xufVxuXG5leHBvcnQgY2xhc3MgQXJjaGl2ZXNSZW1vdGUgaW1wbGVtZW50cyBJQXJjaGl2ZXMge1xuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgY29uZmlnOiBBcmNoaXZlc1JlbW90ZUNvbmZpZykge1xuICAgICAgICAvLyBob3N0U2VydmVyIG5vZGVJZHMgYXJlIG1hY2hpbmUtc3BlY2lmaWMsIHNvIGNvbm5lY3Rpb25zIGJ5IGRvbWFpbiBtdXN0IHRhcmdldCBcImFueSBzZXJ2ZXIgYXQgdGhpcyBhZGRyZXNzXCIgKHdoaWNoIGlzIGhvdyBicm93c2VycyBhbHdheXMgY29ubmVjdClcbiAgICAgICAgU29ja2V0RnVuY3Rpb24uRU5BQkxFX0NMSUVOVF9NT0RFID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHBhcnNlZCA9IHBhcnNlSG9zdGVkVXJsKHRoaXMuY29uZmlnLnVybCk7XG4gICAgcHJpdmF0ZSBhY2NvdW50ID0gdGhpcy5wYXJzZWQuYWNjb3VudDtcbiAgICBwcml2YXRlIGJ1Y2tldE5hbWUgPSB0aGlzLnBhcnNlZC5idWNrZXROYW1lO1xuICAgIHByaXZhdGUgbm9kZUlkID0gU29ja2V0RnVuY3Rpb24uY29ubmVjdCh7IGFkZHJlc3M6IHRoaXMucGFyc2VkLmFkZHJlc3MsIHBvcnQ6IHRoaXMucGFyc2VkLnBvcnQgfSk7XG4gICAgcHJpdmF0ZSBjb250cm9sbGVyID0gUmVtb3RlU3RvcmFnZUNvbnRyb2xsZXIubm9kZXNbdGhpcy5ub2RlSWRdO1xuICAgIHByaXZhdGUgbGFzdERlbmllZExvZyA9IDA7XG5cbiAgICBwdWJsaWMgZ2V0RGVidWdOYW1lKCkge1xuICAgICAgICByZXR1cm4gYHJlbW90ZVN0b3JhZ2UgJHt0aGlzLnBhcnNlZC5hZGRyZXNzfToke3RoaXMucGFyc2VkLnBvcnR9IGFjY291bnQgJHt0aGlzLmFjY291bnR9IGJ1Y2tldCAke3RoaXMuYnVja2V0TmFtZX1gO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc0Nvbm5lY3RlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIFNvY2tldEZ1bmN0aW9uLmlzTm9kZUNvbm5lY3RlZCh0aGlzLm5vZGVJZCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHBpbmcoKTogUHJvbWlzZTx7fT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5jb250cm9sbGVyLnBpbmcoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGF1dGhlbnRpY2F0ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgYXV0aGVudGljYXRlU3RvcmFnZSh7IGFkZHJlc3M6IHRoaXMucGFyc2VkLmFkZHJlc3MsIHBvcnQ6IHRoaXMucGFyc2VkLnBvcnQsIG5vZGVJZDogdGhpcy5ub2RlSWQgfSk7XG4gICAgfVxuXG4gICAgLy8gUnVucyBhIGNhbGwsIGF1dGhlbnRpY2F0aW5nIChhbmQgcmUtYXV0aGVudGljYXRpbmcgYWZ0ZXIgcmVjb25uZWN0cykgYXMgbmVlZGVkLiBVbmxpa2UgY2FsbCgpLCBkb2VzIE5PVCB3YWl0IGZvciBhY2NvdW50IGFjY2Vzcy5cbiAgICBwcml2YXRlIGFzeW5jIGNhbGxBdXRoZWQ8VD4oZm5jOiAoKSA9PiBQcm9taXNlPFQ+KTogUHJvbWlzZTxUPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgZm5jKCk7XG4gICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgICAgICAgaWYgKCFTdHJpbmcoZS5zdGFjayB8fCBlKS5pbmNsdWRlcyhTVE9SQUdFX05PVF9BVVRIRU5USUNBVEVEKSkgdGhyb3cgZTtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuYXV0aGVudGljYXRlKCk7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgZm5jKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBSZXR1cm5zIHVuZGVmaW5lZCBpZiB0aGlzIG1hY2hpbmUgaGFzIGFjY2VzcyB0byB0aGUgYWNjb3VudC4gT3RoZXJ3aXNlIHB1dHMgaW4gYW4gYWNjZXNzIHJlcXVlc3QgYW5kIHJldHVybnMgb3VyIG1hY2hpbmVJZCArIGlwIChzbyB0aGUgY2FsbGVyIGNhbiBkaXNwbGF5IHRoZW0gYWxvbmdzaWRlIHRoZSBsaW5rLCBmb3IgdGhlIGFwcHJvdmVyIHRvIG1hdGNoIHRoZSBpbmNvbWluZyByZXF1ZXN0KSBhbmQgdGhlIGxpbmsgdG8gdGhlIGdyYW50IHBhZ2UuXG4gICAgcHVibGljIGFzeW5jIHdhaXRpbmdGb3JBY2Nlc3MoKTogUHJvbWlzZTx7IGxpbms6IHN0cmluZzsgbWFjaGluZUlkOiBzdHJpbmc7IGlwOiBzdHJpbmcgfSB8IHVuZGVmaW5lZD4ge1xuICAgICAgICBsZXQgc3RhdGUgPSBhd2FpdCB0aGlzLmNhbGxBdXRoZWQoKCkgPT4gdGhpcy5jb250cm9sbGVyLmdldEFjY2Vzc1N0YXRlKHsgYWNjb3VudDogdGhpcy5hY2NvdW50IH0pKTtcbiAgICAgICAgaWYgKHN0YXRlLmhhc0FjY2VzcykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgbGV0IHJlcXVlc3RlZCA9IGF3YWl0IHRoaXMuY2FsbEF1dGhlZCgoKSA9PiB0aGlzLmNvbnRyb2xsZXIucmVxdWVzdEFjY2Vzcyh7IGFjY291bnQ6IHRoaXMuYWNjb3VudCB9KSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBsaW5rOiBgaHR0cHM6Ly8ke3RoaXMucGFyc2VkLmFkZHJlc3N9OiR7dGhpcy5wYXJzZWQucG9ydH0vJHt0aGlzLmFjY291bnR9YCxcbiAgICAgICAgICAgIG1hY2hpbmVJZDogcmVxdWVzdGVkLm1hY2hpbmVJZCxcbiAgICAgICAgICAgIGlwOiByZXF1ZXN0ZWQuaXAsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGhhc1dyaXRlQWNjZXNzKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgICBsZXQgc3RhdGUgPSBhd2FpdCB0aGlzLmNhbGxBdXRoZWQoKCkgPT4gdGhpcy5jb250cm9sbGVyLmdldEFjY2Vzc1N0YXRlKHsgYWNjb3VudDogdGhpcy5hY2NvdW50IH0pKTtcbiAgICAgICAgcmV0dXJuICEhc3RhdGUuaGFzQWNjZXNzO1xuICAgIH1cblxuICAgIC8vIFJlZ2lzdGVycyBvdXIgYWNjZXNzIHJlcXVlc3Qgc2VydmVyLXNpZGUgKHNvIGFuIGFkbWluIGhhcyBhIHJlcXVlc3RJZCB0byBncmFudCkgYW5kIGxvZ3MgdGhlIGdyYW50IGluc3RydWN0aW9ucywgYXQgbW9zdCBvbmNlIGEgbWludXRlXG4gICAgcHJpdmF0ZSBhc3luYyByZWdpc3RlckFjY2Vzc1JlcXVlc3QoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGxldCByZXF1ZXN0ZWQgPSBhd2FpdCB0aGlzLmNhbGxBdXRoZWQoKCkgPT4gdGhpcy5jb250cm9sbGVyLnJlcXVlc3RBY2Nlc3MoeyBhY2NvdW50OiB0aGlzLmFjY291bnQgfSkpO1xuICAgICAgICBpZiAoRGF0ZS5ub3coKSAtIHRoaXMubGFzdERlbmllZExvZyA+IHRpbWVJbk1pbnV0ZSkge1xuICAgICAgICAgICAgdGhpcy5sYXN0RGVuaWVkTG9nID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBObyBhY2Nlc3MgdG8gc3RvcmFnZSBhY2NvdW50ICR7SlNPTi5zdHJpbmdpZnkodGhpcy5hY2NvdW50KX0gb24gJHt0aGlzLnBhcnNlZC5hZGRyZXNzfToke3RoaXMucGFyc2VkLnBvcnR9IChvdXIgbWFjaGluZSAke3JlcXVlc3RlZC5tYWNoaW5lSWR9LCBpcCAke3JlcXVlc3RlZC5pcH0pLiBTZWUgaHR0cHM6Ly8ke3RoaXMucGFyc2VkLmFkZHJlc3N9OiR7dGhpcy5wYXJzZWQucG9ydH0vJHt0aGlzLmFjY291bnR9IC0gb3IgZ3JhbnQgaXQgd2l0aDogJHtyZXF1ZXN0ZWQuZ3JhbnRBY2Nlc3NDb21tYW5kfWApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gUnVucyBhIGNhbGwsIGF1dGhlbnRpY2F0aW5nIChhbmQgcmUtYXV0aGVudGljYXRpbmcgYWZ0ZXIgcmVjb25uZWN0cykgYW5kIHdhaXRpbmcgZm9yIGFjY291bnQgYWNjZXNzIGFzIG5lZWRlZC4gV2l0aCB3YWl0Rm9yQWNjZXNzIGZhbHNlLCBkZW5pZWQgY2FsbHMgdGhyb3cgaW1tZWRpYXRlbHkgaW5zdGVhZCAtIGJ1dCB0aGUgYWNjZXNzIHJlcXVlc3QgaXMgc3RpbGwgcmVnaXN0ZXJlZCAoaW4gdGhlIGJhY2tncm91bmQpLCBzbyB0aGUgZGVuaWFsIGlzIGdyYW50YWJsZS5cbiAgICBwcml2YXRlIGFzeW5jIGNhbGw8VD4oZm5jOiAoKSA9PiBQcm9taXNlPFQ+KTogUHJvbWlzZTxUPiB7XG4gICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCBmbmMoKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgICAgICAgICAgIGxldCBtZXNzYWdlID0gU3RyaW5nKGUuc3RhY2sgfHwgZSk7XG4gICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuaW5jbHVkZXMoU1RPUkFHRV9OT1RfQVVUSEVOVElDQVRFRCkpIHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5hdXRoZW50aWNhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmluY2x1ZGVzKFNUT1JBR0VfQUNDRVNTX0RFTklFRCkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY29uZmlnLndhaXRGb3JBY2Nlc3MgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2b2lkIHRoaXMucmVnaXN0ZXJBY2Nlc3NSZXF1ZXN0KCkuY2F0Y2goKCkgPT4geyB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5yZWdpc3RlckFjY2Vzc1JlcXVlc3QoKTtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgZGVsYXkoQUNDRVNTX1JFVFJZX0RFTEFZKTtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0KGZpbGVOYW1lOiBzdHJpbmcsIGNvbmZpZz86IEdldENvbmZpZyk6IFByb21pc2U8QnVmZmVyIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCB0aGlzLmdldDIoZmlsZU5hbWUsIGNvbmZpZyk7XG4gICAgICAgIHJldHVybiByZXN1bHQgJiYgcmVzdWx0LmRhdGEgfHwgdW5kZWZpbmVkO1xuICAgIH1cbiAgICBwdWJsaWMgYXN5bmMgZ2V0MihmaWxlTmFtZTogc3RyaW5nLCBjb25maWc/OiBHZXRDb25maWcpOiBQcm9taXNlPHsgZGF0YTogQnVmZmVyOyB3cml0ZVRpbWU6IG51bWJlcjsgc2l6ZTogbnVtYmVyIH0gfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IHRoaXMuY2FsbCgoKSA9PiB0aGlzLmNvbnRyb2xsZXIuZ2V0Mih7IGFjY291bnQ6IHRoaXMuYWNjb3VudCwgYnVja2V0TmFtZTogdGhpcy5idWNrZXROYW1lLCBwYXRoOiBmaWxlTmFtZSwgc291cmNlQ29uZmlnOiB0aGlzLmNvbmZpZy5zb3VyY2VDb25maWcsIHJhbmdlOiBjb25maWc/LnJhbmdlLCBpbnRlcm5hbDogY29uZmlnPy5pbnRlcm5hbCwgaW5jbHVkZVRvbWJzdG9uZXM6IGNvbmZpZz8uaW5jbHVkZVRvbWJzdG9uZXMgfSkpO1xuICAgICAgICByZXR1cm4gcmVzdWx0ICYmIHsgZGF0YTogQnVmZmVyLmZyb20ocmVzdWx0LmRhdGEpLCB3cml0ZVRpbWU6IHJlc3VsdC53cml0ZVRpbWUsIHNpemU6IHJlc3VsdC5zaXplIH0gfHwgdW5kZWZpbmVkO1xuICAgIH1cbiAgICBwdWJsaWMgYXN5bmMgc2V0KGZpbGVOYW1lOiBzdHJpbmcsIGRhdGE6IEJ1ZmZlciwgY29uZmlnPzogU2V0Q29uZmlnKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgICAgaWYgKCFkYXRhLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBzZXQgd2FzIGNhbGxlZCB3aXRoIGFuIGVtcHR5IGJ1ZmZlciBmb3IgJHtKU09OLnN0cmluZ2lmeShmaWxlTmFtZSl9IG9uICR7dGhpcy5nZXREZWJ1Z05hbWUoKX06IGFuIGVtcHR5IGZpbGUgSVMgYSBkZWxldGlvbiBpbiB0aGlzIHN5c3RlbSBhbmQgd291bGQgcmVhZCBiYWNrIGFzIG1pc3NpbmcgLSBjYWxsIGRlbCBpbnN0ZWFkYCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRhdGEubGVuZ3RoID4gTEFSR0VfU0VUX1RIUkVTSE9MRCkge1xuICAgICAgICAgICAgLy8gT25lIGdpYW50IG1lc3NhZ2Ugd291bGQgZXhjZWVkIHRoZSB3aXJlIGxpbWl0IGFuZCBsYWcgZXZlcnkgb3RoZXIgY2xpZW50IHNoYXJpbmcgdGhpcyBjb25uZWN0aW9uIC0gc3RyZWFtIGl0IGluc3RlYWQuIChUaGUgbGFyZ2UtZmlsZSBwYXRoIGNhbm5vdCBjYXJyeSBmb3JjZVNldEltbXV0YWJsZS9ub0NoZWNrcy9pbnRlcm5hbDsgbGFyZ2UgcHVzaGVzIGFjY2VwdCBwbGFpbi13cml0ZSBzZW1hbnRpY3MsIGFuZCByZWNvbmNpbGlhdGlvbidzIHBlci1maWxlIGVycm9yIGhhbmRsaW5nIGFic29yYnMgdGhlIHJhcmUgaW1tdXRhYmxlIHJlamVjdGlvbi4pXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnNldExhcmdlRmlsZSh7IHBhdGg6IGZpbGVOYW1lLCBsYXN0TW9kaWZpZWQ6IGNvbmZpZz8ubGFzdE1vZGlmaWVkLCBnZXROZXh0RGF0YTogYnVmZmVyQ2h1bmtTdHJlYW0oZGF0YSkgfSk7XG4gICAgICAgICAgICByZXR1cm4gZmlsZU5hbWU7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgdGhpcy5jYWxsKCgpID0+IHRoaXMuY29udHJvbGxlci5zZXQoeyBhY2NvdW50OiB0aGlzLmFjY291bnQsIGJ1Y2tldE5hbWU6IHRoaXMuYnVja2V0TmFtZSwgcGF0aDogZmlsZU5hbWUsIGRhdGEsIHNvdXJjZUNvbmZpZzogdGhpcy5jb25maWcuc291cmNlQ29uZmlnLCBsYXN0TW9kaWZpZWQ6IGNvbmZpZz8ubGFzdE1vZGlmaWVkLCBmb3JjZVNldEltbXV0YWJsZTogY29uZmlnPy5mb3JjZVNldEltbXV0YWJsZSwgaW50ZXJuYWw6IGNvbmZpZz8uaW50ZXJuYWwgfSkpO1xuICAgICAgICByZXR1cm4gZmlsZU5hbWU7XG4gICAgfVxuICAgIHB1YmxpYyBhc3luYyBkZWwoZmlsZU5hbWU6IHN0cmluZywgY29uZmlnPzogRGVsQ29uZmlnKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMuY2FsbCgoKSA9PiB0aGlzLmNvbnRyb2xsZXIuZGVsKHsgYWNjb3VudDogdGhpcy5hY2NvdW50LCBidWNrZXROYW1lOiB0aGlzLmJ1Y2tldE5hbWUsIHBhdGg6IGZpbGVOYW1lLCBzb3VyY2VDb25maWc6IHRoaXMuY29uZmlnLnNvdXJjZUNvbmZpZywgbGFzdE1vZGlmaWVkOiBjb25maWc/Lmxhc3RNb2RpZmllZCwgaW50ZXJuYWw6IGNvbmZpZz8uaW50ZXJuYWwgfSkpO1xuICAgIH1cbiAgICBwdWJsaWMgYXN5bmMgZ2V0SW5mbyhmaWxlTmFtZTogc3RyaW5nLCBjb25maWc/OiBHZXRJbmZvQ29uZmlnKTogUHJvbWlzZTx7IHdyaXRlVGltZTogbnVtYmVyOyBzaXplOiBudW1iZXIgfSB8IHVuZGVmaW5lZD4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5jYWxsKCgpID0+IHRoaXMuY29udHJvbGxlci5nZXRJbmZvKHsgYWNjb3VudDogdGhpcy5hY2NvdW50LCBidWNrZXROYW1lOiB0aGlzLmJ1Y2tldE5hbWUsIHBhdGg6IGZpbGVOYW1lLCBzb3VyY2VDb25maWc6IHRoaXMuY29uZmlnLnNvdXJjZUNvbmZpZywgaW5jbHVkZVRvbWJzdG9uZXM6IGNvbmZpZz8uaW5jbHVkZVRvbWJzdG9uZXMgfSkpO1xuICAgIH1cbiAgICBwdWJsaWMgYXN5bmMgZmluZEluZm8ocHJlZml4OiBzdHJpbmcsIGNvbmZpZz86IEZpbmRDb25maWcpOiBQcm9taXNlPEFyY2hpdmVGaWxlSW5mb1tdPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmNhbGwoKCkgPT4gdGhpcy5jb250cm9sbGVyLmZpbmRJbmZvKHsgYWNjb3VudDogdGhpcy5hY2NvdW50LCBidWNrZXROYW1lOiB0aGlzLmJ1Y2tldE5hbWUsIHByZWZpeCwgc291cmNlQ29uZmlnOiB0aGlzLmNvbmZpZy5zb3VyY2VDb25maWcsIHNoYWxsb3c6IGNvbmZpZz8uc2hhbGxvdywgdHlwZTogY29uZmlnPy50eXBlIH0pKTtcbiAgICB9XG4gICAgcHVibGljIGFzeW5jIGZpbmQocHJlZml4OiBzdHJpbmcsIGNvbmZpZz86IEZpbmRDb25maWcpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgICAgIHJldHVybiAoYXdhaXQgdGhpcy5maW5kSW5mbyhwcmVmaXgsIGNvbmZpZykpLm1hcCh4ID0+IHgucGF0aCk7XG4gICAgfVxuICAgIHB1YmxpYyBhc3luYyBnZXRDaGFuZ2VzQWZ0ZXIyKGNvbmZpZzogQ2hhbmdlc0FmdGVyQ29uZmlnKTogUHJvbWlzZTxBcmNoaXZlRmlsZUluZm9bXT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5jYWxsKCgpID0+IHRoaXMuY29udHJvbGxlci5nZXRDaGFuZ2VzQWZ0ZXIyKHsgYWNjb3VudDogdGhpcy5hY2NvdW50LCBidWNrZXROYW1lOiB0aGlzLmJ1Y2tldE5hbWUsIHNvdXJjZUNvbmZpZzogdGhpcy5jb25maWcuc291cmNlQ29uZmlnLCB0aW1lOiBjb25maWcudGltZSwgcm91dGVzOiBjb25maWcucm91dGVzIH0pKTtcbiAgICB9XG4gICAgcHVibGljIGFzeW5jIGdldENvbmZpZygpOiBQcm9taXNlPEFyY2hpdmVzQ29uZmlnPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmNhbGwoKCkgPT4gdGhpcy5jb250cm9sbGVyLmdldEFyY2hpdmVzQ29uZmlnKHsgYWNjb3VudDogdGhpcy5hY2NvdW50LCBidWNrZXROYW1lOiB0aGlzLmJ1Y2tldE5hbWUgfSkpO1xuICAgIH1cbiAgICBwdWJsaWMgYXN5bmMgZ2V0U3luY1N0YXR1cygpOiBQcm9taXNlPEFyY2hpdmVzU3luY1N0YXR1cz4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5jYWxsKCgpID0+IHRoaXMuY29udHJvbGxlci5nZXRTeW5jU3RhdHVzKHsgYWNjb3VudDogdGhpcy5hY2NvdW50LCBidWNrZXROYW1lOiB0aGlzLmJ1Y2tldE5hbWUgfSkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBzZXRMYXJnZUZpbGUoY29uZmlnOiB7IHBhdGg6IHN0cmluZzsgbGFzdE1vZGlmaWVkPzogbnVtYmVyOyBnZXROZXh0RGF0YSgpOiBQcm9taXNlPEJ1ZmZlciB8IHVuZGVmaW5lZD4gfSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICAvLyBFbnN1cmUgd2UncmUgYXV0aGVudGljYXRlZCB3aXRoIGFjY2VzcyBCRUZPUkUgY29uc3VtaW5nIGFueSBkYXRhICh0aGUgc3RyZWFtIGNhbm5vdCBiZSByZXdvdW5kLCBzbyB3ZSBjYW4ndCB1c2UgdGhlIHJldHJ5IGxvb3AgYXJvdW5kIHRoZSBhY3R1YWwgdXBsb2FkKVxuICAgICAgICBhd2FpdCB0aGlzLmNhbGwoKCkgPT4gdGhpcy5jb250cm9sbGVyLmdldEluZm8oeyBhY2NvdW50OiB0aGlzLmFjY291bnQsIGJ1Y2tldE5hbWU6IHRoaXMuYnVja2V0TmFtZSwgcGF0aDogY29uZmlnLnBhdGgsIHNvdXJjZUNvbmZpZzogdGhpcy5jb25maWcuc291cmNlQ29uZmlnIH0pKTtcbiAgICAgICAgbGV0IHVwbG9hZElkID0gYXdhaXQgdGhpcy5jb250cm9sbGVyLnN0YXJ0TGFyZ2VGaWxlKHsgYWNjb3VudDogdGhpcy5hY2NvdW50LCBidWNrZXROYW1lOiB0aGlzLmJ1Y2tldE5hbWUsIHBhdGg6IGNvbmZpZy5wYXRoLCBzb3VyY2VDb25maWc6IHRoaXMuY29uZmlnLnNvdXJjZUNvbmZpZywgbGFzdE1vZGlmaWVkOiBjb25maWcubGFzdE1vZGlmaWVkIH0pO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgICAgICAgICBsZXQgZGF0YSA9IGF3YWl0IGNvbmZpZy5nZXROZXh0RGF0YSgpO1xuICAgICAgICAgICAgICAgIGlmICghZGF0YSkgYnJlYWs7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgb2Zmc2V0ID0gMDsgb2Zmc2V0IDwgZGF0YS5sZW5ndGg7IG9mZnNldCArPSBMQVJHRV9GSUxFX1BBUlRfU0laRSkge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmNvbnRyb2xsZXIudXBsb2FkUGFydCh7IHVwbG9hZElkLCBkYXRhOiBkYXRhLnN1YmFycmF5KG9mZnNldCwgb2Zmc2V0ICsgTEFSR0VfRklMRV9QQVJUX1NJWkUpIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY29udHJvbGxlci5maW5pc2hMYXJnZUZpbGUoeyB1cGxvYWRJZCB9KTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmNvbnRyb2xsZXIuY2FuY2VsTGFyZ2VGaWxlKHsgdXBsb2FkSWQgfSk7XG4gICAgICAgICAgICB9IGNhdGNoIHsgfVxuICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRVUkwocGF0aDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgICAgLy8gT25seSBhY3R1YWxseSBsb2FkcyBmb3IgcHVibGljIGJ1Y2tldHMgKHRoZSBzZXJ2ZXIgcmVqZWN0cyBwbGFpbiBVUkwgcmVhZHMgb3RoZXJ3aXNlKVxuICAgICAgICByZXR1cm4gYnVpbGRGaWxlVXJsKGdldEJ1Y2tldEJhc2VVcmwodGhpcy5jb25maWcudXJsKSwgcGF0aCk7XG4gICAgfVxufVxuIl19
194
- /* _JS_SOURCE_HASH = "16aacbe0f5652c7c5113d16c38332846ed887760816f3822f06324ae82d30670"; */
194
+ /* _JS_SOURCE_HASH = "5df70282c49e721cd0f066e4cf30d7a2bc1a0dd5bdc2d87fa793cba6918c6d4a"; */
@@ -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.ArchivesUrl = void 0;
4
4
  const https_1 = require("socket-function/src/https");
@@ -102,4 +102,4 @@ class ArchivesUrl {
102
102
  }
103
103
  exports.ArchivesUrl = ArchivesUrl;
104
104
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXJjaGl2ZXNVcmwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJBcmNoaXZlc1VybC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxxREFBNEU7QUFFNUUsaURBQThDO0FBRTlDLGtGQUFrRjtBQUNsRixnTUFBZ007QUFFaE0sTUFBYSxXQUFXO0lBQ3BCLDJGQUEyRjtJQUMzRixZQUFvQixJQUFZO1FBQVosU0FBSSxHQUFKLElBQUksQ0FBUTtJQUFJLENBQUM7SUFFOUIsWUFBWTtRQUNmLE9BQU8sT0FBTyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUVPLGFBQWEsQ0FBQyxTQUFpQjtRQUNuQyxPQUFPLElBQUksS0FBSyxDQUFDLEdBQUcsU0FBUyx5R0FBeUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDdkosQ0FBQztJQUVNLEtBQUssQ0FBQyxHQUFHLENBQUMsUUFBZ0IsRUFBRSxNQUFrQjtRQUNqRCxJQUFJLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQy9DLE9BQU8sTUFBTSxJQUFJLE1BQU0sQ0FBQyxJQUFJLElBQUksU0FBUyxDQUFDO0lBQzlDLENBQUM7SUFDTSxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQWdCLEVBQUUsTUFBa0I7UUFDbEQsSUFBSSxHQUFHLEdBQUcsSUFBQSwyQkFBWSxFQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDNUMsSUFBSSxPQUFPLEdBQTJCLEVBQUUsQ0FBQztRQUN6QyxJQUFJLEtBQUssR0FBRyxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUUsS0FBSyxDQUFDO1FBQzFCLElBQUksS0FBSyxFQUFFLENBQUM7WUFDUixPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsU0FBUyxLQUFLLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQyxFQUFF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SjtBQTVGRCxrQ0E0RkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBodHRwc1JlcXVlc3QsIEh0dHBzUmVzcG9uc2VJbmZvIH0gZnJvbSBcInNvY2tldC1mdW5jdGlvbi9zcmMvaHR0cHNcIjtcbmltcG9ydCB7IElBcmNoaXZlcywgQXJjaGl2ZUZpbGVJbmZvLCBBcmNoaXZlc0NvbmZpZywgQ2hhbmdlc0FmdGVyQ29uZmlnLCBGaW5kQ29uZmlnLCBHZXRDb25maWcsIEdldEluZm9Db25maWcgfSBmcm9tIFwiLi4vSUFyY2hpdmVzXCI7XG5pbXBvcnQgeyBidWlsZEZpbGVVcmwgfSBmcm9tIFwiLi9yZW1vdGVDb25maWdcIjtcblxuLy8gUmVhZC1vbmx5IElBcmNoaXZlcyBvdmVyIGEgcHVibGljIGJ1Y2tldCdzIHBsYWluLVVSTCBmb3JtIChvdXIgc3RvcmFnZSBzZXJ2ZXInc1xuLy8gL2ZpbGUvPGFjY291bnQ+LzxidWNrZXROYW1lPi8uLi4gcm91dGUsIG9yIGEgYmFja2JsYXplIGZyaWVuZGx5IFVSTCkuIFVzZWQgd2hlbiB3ZSBoYXZlIG5vIEFQSSBhY2Nlc3MgdG8gYSBzb3VyY2UuIE9ubHkgc2luZ2xlLWZpbGUgcmVhZHMgd29yazogdGhlcmUgaXMgbm8gbGlzdGluZywgYW5kIHdyaXRlcyBhbHdheXMgdGhyb3cuXG5cbmV4cG9ydCBjbGFzcyBBcmNoaXZlc1VybCBpbXBsZW1lbnRzIElBcmNoaXZlcyB7XG4gICAgLy8gYmFzZSBpcyB0aGUgYnVja2V0J3MgcHVibGljIGJhc2UgVVJMLCBlLmcuIGh0dHBzOi8vaG9zdDpwb3J0L2ZpbGUvPGFjY291bnQ+LzxidWNrZXROYW1lPlxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgYmFzZTogc3RyaW5nKSB7IH1cblxuICAgIHB1YmxpYyBnZXREZWJ1Z05hbWUoKSB7XG4gICAgICAgIHJldHVybiBgdXJsICR7dGhpcy5iYXNlfWA7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZWFkT25seUVycm9yKG9wZXJhdGlvbjogc3RyaW5nKTogRXJyb3Ige1xuICAgICAgICByZXR1cm4gbmV3IEVycm9yKGAke29wZXJhdGlvbn0gaXMgbm90IHN1cHBvcnRlZCBvdmVyIFVSTC1mb3JtIGFjY2VzcyAobm8gQVBJIGFjY2VzcyB0byB0aGlzIHNvdXJjZSwgb25seSBwdWJsaWMgVVJMIHJlYWRzKS4gU291cmNlOiAke3RoaXMuYmFzZX1gKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0KGZpbGVOYW1lOiBzdHJpbmcsIGNvbmZpZz86IEdldENvbmZpZyk6IFByb21pc2U8QnVmZmVyIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCB0aGlzLmdldDIoZmlsZU5hbWUsIGNvbmZpZyk7XG4gICAgICAgIHJldHVybiByZXN1bHQgJiYgcmVzdWx0LmRhdGEgfHwgdW5kZWZpbmVkO1xuICAgIH1cbiAgICBwdWJsaWMgYXN5bmMgZ2V0MihmaWxlTmFtZTogc3RyaW5nLCBjb25maWc/OiBHZXRDb25maWcpOiBQcm9taXNlPHsgZGF0YTogQnVmZmVyOyB3cml0ZVRpbWU6IG51bWJlcjsgc2l6ZTogbnVtYmVyIH0gfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgbGV0IHVybCA9IGJ1aWxkRmlsZVVybCh0aGlzLmJhc2UsIGZpbGVOYW1lKTtcbiAgICAgICAgbGV0IGhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgICAgICAgbGV0IHJhbmdlID0gY29uZmlnPy5yYW5nZTtcbiAgICAgICAgaWYgKHJhbmdlKSB7XG4gICAgICAgICAgICBoZWFkZXJzW1wiUmFuZ2VcIl0gPSBgYnl0ZXM9JHtyYW5nZS5zdGFydH0tJHtyYW5nZS5lbmQgLSAxfWA7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlc3BvbnNlOiBIdHRwc1Jlc3BvbnNlSW5mbyA9IHsgaGVhZGVyczoge30gfTtcbiAgICAgICAgbGV0IGRhdGE6IEJ1ZmZlcjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGRhdGEgPSBhd2FpdCBodHRwc1JlcXVlc3QodXJsLCB1bmRlZmluZWQsIFwiR0VUXCIsIGZhbHNlLCB7IGhlYWRlcnMsIG91dFJlc3BvbnNlOiByZXNwb25zZSB9KTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgLy8gaHR0cHNSZXF1ZXN0IHRocm93cyBvbiBhbnkgbm9uLTJ4eDsgYSBtaXNzaW5nIGZpbGUgaXMgYSBub3JtYWwgYWJzZW50IHJlc3VsdCwgbm90IGFuIGVycm9yLlxuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1c0NvZGUgPT09IDQwNCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQSByZWFsIDIwNiBvbmx5IHJldHVybnMgdGhlIHJlcXVlc3RlZCBzbGljZSwgc28gdGhlIGZ1bGwgc2l6ZSBsaXZlcyBpbiBDb250ZW50LVJhbmdlJ3MgdG90YWwuXG4gICAgICAgIGxldCBzaXplID0gZGF0YS5sZW5ndGg7XG4gICAgICAgIGxldCBjb250ZW50UmFuZ2UgPSByZXNwb25zZS5oZWFkZXJzW1wiY29udGVudC1yYW5nZVwiXTtcbiAgICAgICAgbGV0IHRvdGFsID0gY29udGVudFJhbmdlICYmIE51bWJlcihjb250ZW50UmFuZ2Uuc3BsaXQoXCIvXCIpWzFdKTtcbiAgICAgICAgaWYgKHRvdGFsICYmIE51bWJlci5pc0Zpbml0ZSh0b3RhbCkpIHtcbiAgICAgICAgICAgIHNpemUgPSB0b3RhbDtcbiAgICAgICAgfVxuICAgICAgICAvLyBTZXJ2ZXJzIHRoYXQgZG9uJ3Qgc3VwcG9ydCByYW5nZXMgcmV0dXJuIHRoZSBmdWxsIGZpbGUgd2l0aCBhIDIwMCAob3VycyBzZXJ2ZXMgcmVhbCAyMDZzLCBidXQgYmFja2JsYXplIGZyaWVuZGx5IFVSTHMgYW5kIHByb3hpZXMgbWF5IG5vdClcbiAgICAgICAgaWYgKHJhbmdlICYmIHJlc3BvbnNlLnN0YXR1c0NvZGUgPT09IDIwMCkge1xuICAgICAgICAgICAgZGF0YSA9IGRhdGEuc3ViYXJyYXkoTWF0aC5taW4ocmFuZ2Uuc3RhcnQsIGRhdGEubGVuZ3RoKSwgTWF0aC5taW4ocmFuZ2UuZW5kLCBkYXRhLmxlbmd0aCkpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBsYXN0TW9kaWZpZWQgPSByZXNwb25zZS5oZWFkZXJzW1wibGFzdC1tb2RpZmllZFwiXTtcbiAgICAgICAgbGV0IHdyaXRlVGltZSA9IGxhc3RNb2RpZmllZCAmJiBuZXcgRGF0ZShsYXN0TW9kaWZpZWQpLmdldFRpbWUoKSB8fCAwO1xuICAgICAgICAvLyBBIHNpemUtMCBhbnN3ZXIgaXMgYSB0b21ic3RvbmUgKGJhY2tibGF6ZSBmcmllbmRseSBVUkxzIHNlcnZlIGRlbGV0aW9ucyBhcyByZWFsIGVtcHR5IGZpbGVzOyBvdXIgb3duIHNlcnZlcnMgNDA0IHRoZW0pIC0gYWJzZW50LCB1bmxlc3MgdGhlIGNhbGxlciBhc2tlZCBmb3IgdG9tYnN0b25lcy4gUmFuZ2VkIHJlYWRzIG9mIGEgUkVBTCBmaWxlIGNhbiBsZWdpdGltYXRlbHkgcmV0dXJuIG5vIGJ5dGVzIChyYW5nZSBwYXN0IEVPRiksIHdoaWNoIHRoZSB0b3RhbCBzaXplIGRpc3Rpbmd1aXNoZXMuXG4gICAgICAgIGlmICghc2l6ZSAmJiAhY29uZmlnPy5pbmNsdWRlVG9tYnN0b25lcykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIHsgZGF0YSwgd3JpdGVUaW1lLCBzaXplIH07XG4gICAgfVxuICAgIHB1YmxpYyBhc3luYyBnZXRJbmZvKGZpbGVOYW1lOiBzdHJpbmcsIGNvbmZpZz86IEdldEluZm9Db25maWcpOiBQcm9taXNlPHsgd3JpdGVUaW1lOiBudW1iZXI7IHNpemU6IG51bWJlciB9IHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIC8vIEEgMS1ieXRlIHJhbmdlZCByZWFkOiBDb250ZW50LVJhbmdlIGNhcnJpZXMgdGhlIGZ1bGwgc2l6ZSBhbmQgTGFzdC1Nb2RpZmllZCB0aGUgd3JpdGUgdGltZSwgc28gbWV0YWRhdGEgbmV2ZXIgZG93bmxvYWRzIHRoZSBmaWxlXG4gICAgICAgIGxldCByZXN1bHQ6IHsgd3JpdGVUaW1lOiBudW1iZXI7IHNpemU6IG51bWJlciB9IHwgdW5kZWZpbmVkO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmVzdWx0ID0gYXdhaXQgdGhpcy5nZXQyKGZpbGVOYW1lLCB7IHJhbmdlOiB7IHN0YXJ0OiAwLCBlbmQ6IDEgfSwgaW5jbHVkZVRvbWJzdG9uZXM6IGNvbmZpZz8uaW5jbHVkZVRvbWJzdG9uZXMgfSk7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgLy8gU29tZSBzZXJ2ZXJzIHJlamVjdCByYW5nZWQgcmVhZHMgb2YgZW1wdHkgZmlsZXMgKDQxNiBpbnN0ZWFkIG9mIGFuIGVtcHR5IDIwNik7IGEgZnVsbCByZWFkIGlzIHRoZSBmYWxsYmFjaywgYW5kIGZvciBhbiBlbXB0eSBmaWxlIGl0IGlzIGZyZWUgYW55d2F5XG4gICAgICAgICAgICByZXN1bHQgPSBhd2FpdCB0aGlzLmdldDIoZmlsZU5hbWUsIHsgaW5jbHVkZVRvbWJzdG9uZXM6IGNvbmZpZz8uaW5jbHVkZVRvbWJzdG9uZXMgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFyZXN1bHQpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIGlmICghcmVzdWx0LnNpemUgJiYgIWNvbmZpZz8uaW5jbHVkZVRvbWJzdG9uZXMpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiB7IHdyaXRlVGltZTogcmVzdWx0LndyaXRlVGltZSwgc2l6ZTogcmVzdWx0LnNpemUgfTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgc2V0KGZpbGVOYW1lOiBzdHJpbmcsIGRhdGE6IEJ1ZmZlciwgY29uZmlnPzogeyBsYXN0TW9kaWZpZWQ/OiBudW1iZXIgfSk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICAgIHRocm93IHRoaXMucmVhZE9ubHlFcnJvcihcInNldFwiKTtcbiAgICB9XG4gICAgcHVibGljIGFzeW5jIGRlbChmaWxlTmFtZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRocm93IHRoaXMucmVhZE9ubHlFcnJvcihcImRlbFwiKTtcbiAgICB9XG4gICAgcHVibGljIGFzeW5jIHNldExhcmdlRmlsZShjb25maWc6IHsgcGF0aDogc3RyaW5nOyBnZXROZXh0RGF0YSgpOiBQcm9taXNlPEJ1ZmZlciB8IHVuZGVmaW5lZD4gfSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aHJvdyB0aGlzLnJlYWRPbmx5RXJyb3IoXCJzZXRMYXJnZUZpbGVcIik7XG4gICAgfVxuICAgIHB1YmxpYyBhc3luYyBmaW5kKHByZWZpeDogc3RyaW5nLCBjb25maWc/OiBGaW5kQ29uZmlnKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgICAgICB0aHJvdyB0aGlzLnJlYWRPbmx5RXJyb3IoXCJmaW5kIChsaXN0aW5nKVwiKTtcbiAgICB9XG4gICAgcHVibGljIGFzeW5jIGZpbmRJbmZvKHByZWZpeDogc3RyaW5nLCBjb25maWc/OiBGaW5kQ29uZmlnKTogUHJvbWlzZTxBcmNoaXZlRmlsZUluZm9bXT4ge1xuICAgICAgICB0aHJvdyB0aGlzLnJlYWRPbmx5RXJyb3IoXCJmaW5kSW5mbyAobGlzdGluZylcIik7XG4gICAgfVxuICAgIHB1YmxpYyBhc3luYyBnZXRDaGFuZ2VzQWZ0ZXIyKGNvbmZpZzogQ2hhbmdlc0FmdGVyQ29uZmlnKTogUHJvbWlzZTxBcmNoaXZlRmlsZUluZm9bXT4ge1xuICAgICAgICB0aHJvdyB0aGlzLnJlYWRPbmx5RXJyb3IoXCJnZXRDaGFuZ2VzQWZ0ZXIyIChsaXN0aW5nKVwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0VVJMKHBhdGg6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICAgIHJldHVybiBidWlsZEZpbGVVcmwodGhpcy5iYXNlLCBwYXRoKTtcbiAgICB9XG4gICAgcHVibGljIGFzeW5jIGdldENvbmZpZygpOiBQcm9taXNlPEFyY2hpdmVzQ29uZmlnPiB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgaGFzV3JpdGVBY2Nlc3MoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG4iXX0=
105
- /* _JS_SOURCE_HASH = "cdf64fcde41e1a7394a042025165b581938753e479a7c68817372b4af3ace7b9"; */
105
+ /* _JS_SOURCE_HASH = "29bec06d3f19e45b18f34310d10c29b887a0180ed9d475fc9ed294acd5acbf7f"; */
@@ -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.clearAccountAccessStats = exports.readAccessSummaries = exports.getAccessTotals = exports.trackAccessCall = exports.trackAccess = void 0;
4
4
  const treeSummary_1 = require("../../treeSummary");
@@ -44,7 +44,7 @@ function trackAccess(config) {
44
44
  }
45
45
  }
46
46
  exports.trackAccess = trackAccess;
47
- /** Method decorator factory, for API methods whose single config-object argument has account and bucketName: tracks the access (as `bucketName/path`) after the method succeeds. Sizes come from the config's data (writes) or the result's data (reads); operations without either are count-only. Array results (listings) track one access per returned path, or a single access at the prefix when empty. */
47
+ /** Method decorator factory, for API methods whose single config-object argument has account and bucketName: tracks the access (as `bucketName/path`) after the method succeeds. Sizes come from the config's data (writes) or the result's data (reads); operations without either are count-only. Array results (listings - findInfo, getChangesAfter) are tracked as two count-only operations: "<op> queries" at the query prefix (one per call), and "<op> results" at each returned path (one per result). */
48
48
  function trackAccessCall(operation) {
49
49
  return function (target, key, descriptor) {
50
50
  let original = descriptor.value;
@@ -53,14 +53,10 @@ function trackAccessCall(operation) {
53
53
  let result = await original.apply(this, args);
54
54
  let base = `${config.bucketName}/`;
55
55
  if (Array.isArray(result)) {
56
- if (result.length) {
57
- for (let entry of result) {
58
- trackAccess({ account: config.account, operation, path: base + entry.path });
59
- }
60
- }
61
- else {
62
- // The paths are only known once the results are in; an empty result still counts as one access at the prefix
63
- trackAccess({ account: config.account, operation, path: base + (config.prefix || config.path || "") });
56
+ // Two separate breakdowns, both count-only: WHAT was queried, and WHAT was returned
57
+ trackAccess({ account: config.account, operation: `${operation} queries`, path: base + (config.prefix || config.path || "") });
58
+ for (let entry of result) {
59
+ trackAccess({ account: config.account, operation: `${operation} results`, path: base + entry.path });
64
60
  }
65
61
  return result;
66
62
  }
@@ -109,5 +105,5 @@ function clearAccountAccessStats(account) {
109
105
  }
110
106
  }
111
107
  exports.clearAccountAccessStats = clearAccountAccessStats;
112
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjZXNzU3RhdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJhY2Nlc3NTdGF0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtREFBOEQ7QUFFOUQsTUFBTSxxQkFBcUIsR0FBRyxHQUFHLENBQUM7QUFjbEMsTUFBTSxRQUFRLEdBQUcsSUFBSSxHQUFHLEVBQXVDLENBQUM7QUFFaEUsU0FBUyxRQUFRLENBQUMsUUFBd0M7SUFDdEQsT0FBTyxJQUFJLHlCQUFXLENBQWtDO1FBQ3BELE9BQU8sRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJO1FBQzVCLGFBQWEsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO1FBQ25DLFlBQVksRUFBRSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRTtZQUM3QixPQUFPLENBQUMsS0FBSyxJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyQyxDQUFDO1FBQ0QsY0FBYyxFQUFFLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQy9CLE1BQU0sQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQztRQUNqQyxDQUFDO1FBQ0QsU0FBUyxFQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUs7UUFDbkMsbUJBQW1CLEVBQUUscUJBQXFCO0tBQzdDLENBQUMsQ0FBQztBQUNQLENBQUM7QUFFRCx5TUFBeU07QUFDek0sU0FBZ0IsV0FBVyxDQUFDLE1BQTJFO0lBQ25HLElBQUksVUFBVSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzlDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNkLFVBQVUsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLFFBQVEsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxVQUFV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QUN0QixzSEFBc0g7SUFDdEgsSUFBSSxRQUFRLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQztJQUM5QixJQUFJLE1BQU0sQ0FBQyxZQUFZLElBQUksUUFBUSxFQUFFLENBQUM7UUFDbEMsT0FBTyxRQUFRLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBQ0QsT0FBTyxLQUFLLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDekQsQ0FBQztBQVZELGtEQVVDO0FBRUQsU0FBZ0IsdUJBQXVCLENBQUMsT0FBZTtJQUNuRCxJQUFJLFFBQVEsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUMzQixPQUFPLENBQUMsR0FBRyxDQUFDLHVEQUF1RCxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ2xGLENBQUM7QUFDTCxDQUFDO0FBSkQsMERBSUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUcmVlU3VtbWFyeSwgU3VtbWFyeUVudHJ5IH0gZnJvbSBcIi4uLy4uL3RyZWVTdW1tYXJ5XCI7XG5cbmNvbnN0IEVYUEVDVEVEX09VVFBVVF9DT1VOVCA9IDEwMDtcblxuZXhwb3J0IHR5cGUgQWNjZXNzU3VtbWFyeVN0YXRlID0geyB0b3RhbDogbnVtYmVyIH07XG5leHBvcnQgdHlwZSBBY2Nlc3NUb3RhbHMgPSB7IFtvcGVyYXRpb246IHN0cmluZ106IHsgY291bnQ6IG51bWJlcjsgc2l6ZTogbnVtYmVyIH0gfTtcblxudHlwZSBBY2Nlc3NWYWx1ZSA9IHsgcGF0aDogc3RyaW5nOyBzaXplOiBudW1iZXIgfTtcbnR5cGUgT3BlcmF0aW9uU3RhdHMgPSB7XG4gICAgdG90YWxDb3VudDogbnVtYmVyO1xuICAgIHRvdGFsU2l6ZTogbnVtYmVyO1xuICAgIGNvdW50VHJlZTogVHJlZVN1bW1hcnk8QWNjZXNzVmFsdWUsIEFjY2Vzc1N1bW1hcnlTdGF0ZT47XG4gICAgLy8gT25seSBleGlzdHMgZm9yIG9wZXJhdGlvbnMgdHJhY2tlZCB3aXRoIHNpemVzOyBjb3VudC1vbmx5IG9wZXJhdGlvbnMgKGdldEluZm8sIGRlbCwgLi4uKSBoYXZlIG5vIG1lYW5pbmdmdWwgc2l6ZSBicmVha2Rvd24uXG4gICAgc2l6ZVRyZWU/OiBUcmVlU3VtbWFyeTxBY2Nlc3NWYWx1ZSwgQWNjZXNzU3VtbWFyeVN0YXRlPjtcbn07XG5cbmNvbnN0IGFjY291bnRzID0gbmV3IE1hcDxzdHJpbmcsIE1hcDxzdHJpbmcsIE9wZXJhdGlvblN0YXRzPj4oKTtcblxuZnVuY3Rpb24gbWFrZVRyZWUoZ2V0VmFsdWU6ICh2YWx1ZTogQWNjZXNzVmFsdWUpID0+IG51bWJlcik6IFRyZWVTdW1tYXJ5PEFjY2Vzc1ZhbHVlLCBBY2Nlc3NTdW1tYXJ5U3RhdGU+IHtcbiAgICByZXR1cm4gbmV3IFRyZWVTdW1tYXJ5PEFjY2Vzc1ZhbHVlLCBBY2Nlc3NTdW1tYXJ5U3RhdGU+KHtcbiAgICAgICAgZ2V0UGF0aDogdmFsdWUgPT4gdmFsdWUucGF0aCxcbiAgICAgICAgY3JlYXRlU3VtbWFyeTogKCkgPT4gKHsgdG90YWw6IDAgfSksXG4gICAgICAgIGFkZFRvU3VtbWFyeTogKHZhbHVlLCBzdW1tYXJ5KSA9PiB7XG4gICAgICAgICAgICBzdW1tYXJ5LnRvdGFsICs9IGdldFZhbHVlKHZhbHVlKTtcbiAgICAgICAgfSxcbiAgICAgICAgbWVyZ2VTdW1tYXJpZXM6ICh0YXJnZXQsIHNvdXJjZSkgPT4ge1xuICAgICAgICAgICAgdGFyZ2V0LnRvdGFsICs9IHNvdXJjZS50b3RhbDtcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0V2VpZ2h0OiBzdW1tYXJ5ID0+IHN1bW1hcnkudG90YWwsXG4gICAgICAgIGV4cGVjdGVkT3V0cHV0Q291bnQ6IEVYUEVDVEVEX09VVFBVVF9DT1VOVCxcbiAgICB9KTtcbn1cblxuLyoqIENvdW50cyBvbmUgc3RvcmFnZSBhY2Nlc3MsIGluIG1lbW9yeSBvbmx5LiBzaXplIGlzIHRoZSBieXRlcyBpbnZvbHZlZCAoMCB3aGVuIHRoZSB0YXJnZXQgZG9lcyBub3QgZXhpc3QpOyBvbWl0IGl0IGVudGlyZWx5IGZvciBvcGVyYXRpb25zIHRoYXQgb25seSBjb3VudCBjYWxscywgd2hpY2ggdGhlbiBvbmx5IGdldCBhIGNvdW50IHRyZWUuICovXG5leHBvcnQgZnVuY3Rpb24gdHJhY2tBY2Nlc3MoY29uZmlnOiB7IGFjY291bnQ6IHN0cmluZzsgb3BlcmF0aW9uOiBzdHJpbmc7IHBhdGg6IHN0cmluZzsgc2l6ZT86IG51bWJlciB9KTogdm9pZCB7XG4gICAgbGV0IG9wZXJhdGlvbnMgPSBhY2NvdW50cy5nZXQoY29uZmlnLmFjY291bnQpO1xuICAgIGlmICghb3BlcmF0aW9ucykge1xuICAgICAgICBvcGVyYXRpb25zID0gbmV3IE1hcCgpO1xuICAgICAgICBhY2NvdW50cy5zZXQoY29uZmlnLmFjY291bnQsIG9wZXJhdGlvbnMpO1xuICAgIH1cbiAgICBsZXQgc3RhdHMgPSBvcGVyYXRpb25zLmdldChjb25maWcub3BlcmF0aW9uKTtcbiAgICBpZiAoIXN0YXRzKSB7XG4gICAgICAgIHN0YXRzID0geyB0b3RhbENvdW50OiAwLCB0b3RhbFNpemU6IDAsIGNvdW50VHJlZTogbWFrZVRyZWUoKCkgPT4gMSkgfTtcbiAgICAgICAgb3BlcmF0aW9ucy5zZXQoY29uZmlnLm9wZXJhdGlvbiwgc3RhdHMpO1xuICAgIH1cbiAgICBsZXQgdmFsdWU6IEFjY2Vzc1ZhbHVlID0geyBwYXRoOiBjb25maWcucGF0aCwgc2l6ZTogY29uZmlnLnNpemUgfHwgMCB9O1xuICAgIHN0YXRzLnRvdGFsQ291bnQrKztcbiAgICBzdGF0cy5jb3VudFRyZWUuYWRkKHZhbHVlKTtcbiAgICBpZiAoY29uZmlnLnNpemUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgc2l6ZVRyZWUgPSBzdGF0cy5zaXplVHJlZTtcbiAgICAgICAgaWYgKCFzaXplVHJlZSkge1xuICAgICAgICAgICAgc2l6ZVRyZWUgPSBtYWtlVHJlZSh2ID0+IHYuc2l6ZSk7XG4gICAgICAgICAgICBzdGF0cy5zaXplVHJlZSA9IHNpemVUcmVlO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRzLnRvdGFsU2l6ZSArPSBjb25maWcuc2l6ZTtcbiAgICAgICAgc2l6ZVRyZWUuYWRkKHZhbHVlKTtcbiAgICB9XG59XG5cbi8qKiBNZXRob2QgZGVjb3JhdG9yIGZhY3RvcnksIGZvciBBUEkgbWV0aG9kcyB3aG9zZSBzaW5nbGUgY29uZmlnLW9iamVjdCBhcmd1bWVudCBoYXMgYWNjb3VudCBhbmQgYnVja2V0TmFtZTogdHJhY2tzIHRoZSBhY2Nlc3MgKGFzIGBidWNrZXROYW1lL3BhdGhgKSBhZnRlciB0aGUgbWV0aG9kIHN1Y2NlZWRzLiBTaXplcyBjb21lIGZyb20gdGhlIGNvbmZpZydzIGRhdGEgKHdyaXRlcykgb3IgdGhlIHJlc3VsdCdzIGRhdGEgKHJlYWRzKTsgb3BlcmF0aW9ucyB3aXRob3V0IGVpdGhlciBhcmUgY291bnQtb25seS4gQXJyYXkgcmVzdWx0cyAobGlzdGluZ3MpIHRyYWNrIG9uZSBhY2Nlc3MgcGVyIHJldHVybmVkIHBhdGgsIG9yIGEgc2luZ2xlIGFjY2VzcyBhdCB0aGUgcHJlZml4IHdoZW4gZW1wdHkuICovXG5leHBvcnQgZnVuY3Rpb24gdHJhY2tBY2Nlc3NDYWxsKG9wZXJhdGlvbjogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQ6IHVua25vd24sIGtleTogc3RyaW5nLCBkZXNjcmlwdG9yOiBQcm9wZXJ0eURlc2NyaXB0b3IpOiB2b2lkIHtcbiAgICAgICAgbGV0IG9yaWdpbmFsID0gZGVzY3JpcHRvci52YWx1ZSBhcyAoLi4uYXJnczogdW5rbm93bltdKSA9PiBQcm9taXNlPHVua25vd24+O1xuICAgICAgICBkZXNjcmlwdG9yLnZhbHVlID0gYXN5bmMgZnVuY3Rpb24gKC4uLmFyZ3M6IHVua25vd25bXSk6IFByb21pc2U8dW5rbm93bj4ge1xuICAgICAgICAgICAgbGV0IGNvbmZpZyA9IGFyZ3NbMF0gYXMgeyBhY2NvdW50OiBzdHJpbmc7IGJ1Y2tldE5hbWU6IHN0cmluZzsgcGF0aD86IHN0cmluZzsgcHJlZml4Pzogc3RyaW5nOyBkYXRhPzogQnVmZmVyIH07XG4gICAgICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgb3JpZ2luYWwuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICBsZXQgYmFzZSA9IGAke2NvbmZpZy5idWNrZXROYW1lfS9gO1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocmVzdWx0KSkge1xuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGVudHJ5IG9mIHJlc3VsdCBhcyB7IHBhdGg6IHN0cmluZyB9W10pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNrQWNjZXNzKHsgYWNjb3VudDogY29uZmlnLmFjY291bnQsIG9wZXJhdGlvbiwgcGF0aDogYmFzZSArIGVudHJ5LnBhdGggfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBUaGUgcGF0aHMgYXJlIG9ubHkga25vd24gb25jZSB0aGUgcmVzdWx0cyBhcmUgaW47IGFuIGVtcHR5IHJlc3VsdCBzdGlsbCBjb3VudHMgYXMgb25lIGFjY2VzcyBhdCB0aGUgcHJlZml4XG4gICAgICAgICAgICAgICAgICAgIHRyYWNrQWNjZXNzKHsgYWNjb3VudDogY29uZmlnLmFjY291bnQsIG9wZXJhdGlvbiwgcGF0aDogYmFzZSArIChjb25maWcucHJlZml4IHx8IGNvbmZpZy5wYXRoIHx8IFwiXCIpIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IHNpemU6IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGlmIChjb25maWcuZGF0YSkge1xuICAgICAgICAgICAgICAgIHNpemUgPSBjb25maWcuZGF0YS5sZW5ndGg7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGxldCBkYXRhID0gKHJlc3VsdCBhcyB7IGRhdGE/OiBCdWZmZXIgfSB8IHVuZGVmaW5lZCk/LmRhdGE7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEpIHNpemUgPSBkYXRhLmxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRyYWNrQWNjZXNzKHsgYWNjb3VudDogY29uZmlnLmFjY291bnQsIG9wZXJhdGlvbiwgcGF0aDogYmFzZSArIGNvbmZpZy5wYXRoLCBzaXplIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfTtcbiAgICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0QWNjZXNzVG90YWxzKGFjY291bnQ6IHN0cmluZyk6IEFjY2Vzc1RvdGFscyB7XG4gICAgbGV0IHJlc3VsdDogQWNjZXNzVG90YWxzID0ge307XG4gICAgbGV0IG9wZXJhdGlvbnMgPSBhY2NvdW50cy5nZXQoYWNjb3VudCk7XG4gICAgaWYgKCFvcGVyYXRpb25zKSByZXR1cm4gcmVzdWx0O1xuICAgIGZvciAobGV0IFtvcGVyYXRpb24sIHN0YXRzXSBvZiBvcGVyYXRpb25zKSB7XG4gICAgICAgIHJlc3VsdFtvcGVyYXRpb25dID0geyBjb3VudDogc3RhdHMudG90YWxDb3VudCwgc2l6ZTogc3RhdHMudG90YWxTaXplIH07XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkQWNjZXNzU3VtbWFyaWVzKGNvbmZpZzogeyBhY2NvdW50OiBzdHJpbmc7IG9wZXJhdGlvbjogc3RyaW5nOyBtYXhDb3VudDogbnVtYmVyOyB3ZWlnaHRCeVNpemU/OiBib29sZWFuIH0pOiBTdW1tYXJ5RW50cnk8QWNjZXNzU3VtbWFyeVN0YXRlPltdIHtcbiAgICBsZXQgb3BlcmF0aW9ucyA9IGFjY291bnRzLmdldChjb25maWcuYWNjb3VudCk7XG4gICAgbGV0IHN0YXRzID0gb3BlcmF0aW9ucyAmJiBvcGVyYXRpb25zLmdldChjb25maWcub3BlcmF0aW9uKTtcbiAgICBpZiAoIXN0YXRzKSByZXR1cm4gW107XG4gICAgLy8gQ291bnQtb25seSBvcGVyYXRpb25zIGhhdmUgbm8gc2l6ZSB0cmVlLCBpbiB3aGljaCBjYXNlIHdlaWdodEJ5U2l6ZSBpcyBpZ25vcmVkIGFuZCB0aGUgY291bnQgYnJlYWtkb3duIGlzIHJldHVybmVkLlxuICAgIGxldCBzaXplVHJlZSA9IHN0YXRzLnNpemVUcmVlO1xuICAgIGlmIChjb25maWcud2VpZ2h0QnlTaXplICYmIHNpemVUcmVlKSB7XG4gICAgICAgIHJldHVybiBzaXplVHJlZS5nZXRTdW1tYXJpZXMoY29uZmlnLm1heENvdW50KTtcbiAgICB9XG4gICAgcmV0dXJuIHN0YXRzLmNvdW50VHJlZS5nZXRTdW1tYXJpZXMoY29uZmlnLm1heENvdW50KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNsZWFyQWNjb3VudEFjY2Vzc1N0YXRzKGFjY291bnQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmIChhY2NvdW50cy5kZWxldGUoYWNjb3VudCkpIHtcbiAgICAgICAgY29uc29sZS5sb2coYENsZWFyZWQgdGhlIGluLW1lbW9yeSBhY2Nlc3Mgc3RhdGlzdGljcyBmb3IgYWNjb3VudCAke2FjY291bnR9YCk7XG4gICAgfVxufVxuIl19
113
- /* _JS_SOURCE_HASH = "07a3db5ac262394117d66c1fa72096de9c2c46b66ddf79d07179a3ee9569ed6c"; */
108
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjZXNzU3RhdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJhY2Nlc3NTdGF0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtREFBOEQ7QUFFOUQsTUFBTSxxQkFBcUIsR0FBRyxHQUFHLENBQUM7QUFjbEMsTUFBTSxRQUFRLEdBQUcsSUFBSSxHQUFHLEVBQXVDLENBQUM7QUFFaEUsU0FBUyxRQUFRLENBQUMsUUFBd0M7SUFDdEQsT0FBTyxJQUFJLHlCQUFXLENBQWtDO1FBQ3BELE9BQU8sRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJO1FBQzVCLGFBQWEsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO1FBQ25DLFlBQVksRUFBRSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRTtZQUM3QixPQUFPLENBQUMsS0FBSyxJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyQyxDQUFDO1FBQ0QsY0FBYyxFQUFFLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQy9CLE1BQU0sQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQztRQUNqQyxDQUFDO1FBQ0QsU0FBUyxFQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUs7UUFDbkMsbUJBQW1CLEVBQUUscUJBQXFCO0tBQzdDLENBQUMsQ0FBQztBQUNQLENBQUM7QUFFRCx5TUFBeU07QUFDek0sU0FBZ0IsV0FBVyxDQUFDLE1BQTJFO0lBQ25HLElBQUksVUFBVSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzlDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNkLFVBQVUsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLFFBQVEsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxVQUFV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QUcsS0FBSyxDQUFDLFFBQVEsQ0FBQztJQUM5QixJQUFJLE1BQU0sQ0FBQyxZQUFZLElBQUksUUFBUSxFQUFFLENBQUM7UUFDbEMsT0FBTyxRQUFRLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBQ0QsT0FBTyxLQUFLLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDekQsQ0FBQztBQVZELGtEQVVDO0FBRUQsU0FBZ0IsdUJBQXVCLENBQUMsT0FBZTtJQUNuRCxJQUFJLFFBQVEsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUMzQixPQUFPLENBQUMsR0FBRyxDQUFDLHVEQUF1RCxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ2xGLENBQUM7QUFDTCxDQUFDO0FBSkQsMERBSUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUcmVlU3VtbWFyeSwgU3VtbWFyeUVudHJ5IH0gZnJvbSBcIi4uLy4uL3RyZWVTdW1tYXJ5XCI7XG5cbmNvbnN0IEVYUEVDVEVEX09VVFBVVF9DT1VOVCA9IDEwMDtcblxuZXhwb3J0IHR5cGUgQWNjZXNzU3VtbWFyeVN0YXRlID0geyB0b3RhbDogbnVtYmVyIH07XG5leHBvcnQgdHlwZSBBY2Nlc3NUb3RhbHMgPSB7IFtvcGVyYXRpb246IHN0cmluZ106IHsgY291bnQ6IG51bWJlcjsgc2l6ZTogbnVtYmVyIH0gfTtcblxudHlwZSBBY2Nlc3NWYWx1ZSA9IHsgcGF0aDogc3RyaW5nOyBzaXplOiBudW1iZXIgfTtcbnR5cGUgT3BlcmF0aW9uU3RhdHMgPSB7XG4gICAgdG90YWxDb3VudDogbnVtYmVyO1xuICAgIHRvdGFsU2l6ZTogbnVtYmVyO1xuICAgIGNvdW50VHJlZTogVHJlZVN1bW1hcnk8QWNjZXNzVmFsdWUsIEFjY2Vzc1N1bW1hcnlTdGF0ZT47XG4gICAgLy8gT25seSBleGlzdHMgZm9yIG9wZXJhdGlvbnMgdHJhY2tlZCB3aXRoIHNpemVzOyBjb3VudC1vbmx5IG9wZXJhdGlvbnMgKGdldEluZm8sIGRlbCwgLi4uKSBoYXZlIG5vIG1lYW5pbmdmdWwgc2l6ZSBicmVha2Rvd24uXG4gICAgc2l6ZVRyZWU/OiBUcmVlU3VtbWFyeTxBY2Nlc3NWYWx1ZSwgQWNjZXNzU3VtbWFyeVN0YXRlPjtcbn07XG5cbmNvbnN0IGFjY291bnRzID0gbmV3IE1hcDxzdHJpbmcsIE1hcDxzdHJpbmcsIE9wZXJhdGlvblN0YXRzPj4oKTtcblxuZnVuY3Rpb24gbWFrZVRyZWUoZ2V0VmFsdWU6ICh2YWx1ZTogQWNjZXNzVmFsdWUpID0+IG51bWJlcik6IFRyZWVTdW1tYXJ5PEFjY2Vzc1ZhbHVlLCBBY2Nlc3NTdW1tYXJ5U3RhdGU+IHtcbiAgICByZXR1cm4gbmV3IFRyZWVTdW1tYXJ5PEFjY2Vzc1ZhbHVlLCBBY2Nlc3NTdW1tYXJ5U3RhdGU+KHtcbiAgICAgICAgZ2V0UGF0aDogdmFsdWUgPT4gdmFsdWUucGF0aCxcbiAgICAgICAgY3JlYXRlU3VtbWFyeTogKCkgPT4gKHsgdG90YWw6IDAgfSksXG4gICAgICAgIGFkZFRvU3VtbWFyeTogKHZhbHVlLCBzdW1tYXJ5KSA9PiB7XG4gICAgICAgICAgICBzdW1tYXJ5LnRvdGFsICs9IGdldFZhbHVlKHZhbHVlKTtcbiAgICAgICAgfSxcbiAgICAgICAgbWVyZ2VTdW1tYXJpZXM6ICh0YXJnZXQsIHNvdXJjZSkgPT4ge1xuICAgICAgICAgICAgdGFyZ2V0LnRvdGFsICs9IHNvdXJjZS50b3RhbDtcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0V2VpZ2h0OiBzdW1tYXJ5ID0+IHN1bW1hcnkudG90YWwsXG4gICAgICAgIGV4cGVjdGVkT3V0cHV0Q291bnQ6IEVYUEVDVEVEX09VVFBVVF9DT1VOVCxcbiAgICB9KTtcbn1cblxuLyoqIENvdW50cyBvbmUgc3RvcmFnZSBhY2Nlc3MsIGluIG1lbW9yeSBvbmx5LiBzaXplIGlzIHRoZSBieXRlcyBpbnZvbHZlZCAoMCB3aGVuIHRoZSB0YXJnZXQgZG9lcyBub3QgZXhpc3QpOyBvbWl0IGl0IGVudGlyZWx5IGZvciBvcGVyYXRpb25zIHRoYXQgb25seSBjb3VudCBjYWxscywgd2hpY2ggdGhlbiBvbmx5IGdldCBhIGNvdW50IHRyZWUuICovXG5leHBvcnQgZnVuY3Rpb24gdHJhY2tBY2Nlc3MoY29uZmlnOiB7IGFjY291bnQ6IHN0cmluZzsgb3BlcmF0aW9uOiBzdHJpbmc7IHBhdGg6IHN0cmluZzsgc2l6ZT86IG51bWJlciB9KTogdm9pZCB7XG4gICAgbGV0IG9wZXJhdGlvbnMgPSBhY2NvdW50cy5nZXQoY29uZmlnLmFjY291bnQpO1xuICAgIGlmICghb3BlcmF0aW9ucykge1xuICAgICAgICBvcGVyYXRpb25zID0gbmV3IE1hcCgpO1xuICAgICAgICBhY2NvdW50cy5zZXQoY29uZmlnLmFjY291bnQsIG9wZXJhdGlvbnMpO1xuICAgIH1cbiAgICBsZXQgc3RhdHMgPSBvcGVyYXRpb25zLmdldChjb25maWcub3BlcmF0aW9uKTtcbiAgICBpZiAoIXN0YXRzKSB7XG4gICAgICAgIHN0YXRzID0geyB0b3RhbENvdW50OiAwLCB0b3RhbFNpemU6IDAsIGNvdW50VHJlZTogbWFrZVRyZWUoKCkgPT4gMSkgfTtcbiAgICAgICAgb3BlcmF0aW9ucy5zZXQoY29uZmlnLm9wZXJhdGlvbiwgc3RhdHMpO1xuICAgIH1cbiAgICBsZXQgdmFsdWU6IEFjY2Vzc1ZhbHVlID0geyBwYXRoOiBjb25maWcucGF0aCwgc2l6ZTogY29uZmlnLnNpemUgfHwgMCB9O1xuICAgIHN0YXRzLnRvdGFsQ291bnQrKztcbiAgICBzdGF0cy5jb3VudFRyZWUuYWRkKHZhbHVlKTtcbiAgICBpZiAoY29uZmlnLnNpemUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgc2l6ZVRyZWUgPSBzdGF0cy5zaXplVHJlZTtcbiAgICAgICAgaWYgKCFzaXplVHJlZSkge1xuICAgICAgICAgICAgc2l6ZVRyZWUgPSBtYWtlVHJlZSh2ID0+IHYuc2l6ZSk7XG4gICAgICAgICAgICBzdGF0cy5zaXplVHJlZSA9IHNpemVUcmVlO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRzLnRvdGFsU2l6ZSArPSBjb25maWcuc2l6ZTtcbiAgICAgICAgc2l6ZVRyZWUuYWRkKHZhbHVlKTtcbiAgICB9XG59XG5cbi8qKiBNZXRob2QgZGVjb3JhdG9yIGZhY3RvcnksIGZvciBBUEkgbWV0aG9kcyB3aG9zZSBzaW5nbGUgY29uZmlnLW9iamVjdCBhcmd1bWVudCBoYXMgYWNjb3VudCBhbmQgYnVja2V0TmFtZTogdHJhY2tzIHRoZSBhY2Nlc3MgKGFzIGBidWNrZXROYW1lL3BhdGhgKSBhZnRlciB0aGUgbWV0aG9kIHN1Y2NlZWRzLiBTaXplcyBjb21lIGZyb20gdGhlIGNvbmZpZydzIGRhdGEgKHdyaXRlcykgb3IgdGhlIHJlc3VsdCdzIGRhdGEgKHJlYWRzKTsgb3BlcmF0aW9ucyB3aXRob3V0IGVpdGhlciBhcmUgY291bnQtb25seS4gQXJyYXkgcmVzdWx0cyAobGlzdGluZ3MgLSBmaW5kSW5mbywgZ2V0Q2hhbmdlc0FmdGVyKSBhcmUgdHJhY2tlZCBhcyB0d28gY291bnQtb25seSBvcGVyYXRpb25zOiBcIjxvcD4gcXVlcmllc1wiIGF0IHRoZSBxdWVyeSBwcmVmaXggKG9uZSBwZXIgY2FsbCksIGFuZCBcIjxvcD4gcmVzdWx0c1wiIGF0IGVhY2ggcmV0dXJuZWQgcGF0aCAob25lIHBlciByZXN1bHQpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRyYWNrQWNjZXNzQ2FsbChvcGVyYXRpb246IHN0cmluZykge1xuICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0OiB1bmtub3duLCBrZXk6IHN0cmluZywgZGVzY3JpcHRvcjogUHJvcGVydHlEZXNjcmlwdG9yKTogdm9pZCB7XG4gICAgICAgIGxldCBvcmlnaW5hbCA9IGRlc2NyaXB0b3IudmFsdWUgYXMgKC4uLmFyZ3M6IHVua25vd25bXSkgPT4gUHJvbWlzZTx1bmtub3duPjtcbiAgICAgICAgZGVzY3JpcHRvci52YWx1ZSA9IGFzeW5jIGZ1bmN0aW9uICguLi5hcmdzOiB1bmtub3duW10pOiBQcm9taXNlPHVua25vd24+IHtcbiAgICAgICAgICAgIGxldCBjb25maWcgPSBhcmdzWzBdIGFzIHsgYWNjb3VudDogc3RyaW5nOyBidWNrZXROYW1lOiBzdHJpbmc7IHBhdGg/OiBzdHJpbmc7IHByZWZpeD86IHN0cmluZzsgZGF0YT86IEJ1ZmZlciB9O1xuICAgICAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IG9yaWdpbmFsLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgbGV0IGJhc2UgPSBgJHtjb25maWcuYnVja2V0TmFtZX0vYDtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHJlc3VsdCkpIHtcbiAgICAgICAgICAgICAgICAvLyBUd28gc2VwYXJhdGUgYnJlYWtkb3ducywgYm90aCBjb3VudC1vbmx5OiBXSEFUIHdhcyBxdWVyaWVkLCBhbmQgV0hBVCB3YXMgcmV0dXJuZWRcbiAgICAgICAgICAgICAgICB0cmFja0FjY2Vzcyh7IGFjY291bnQ6IGNvbmZpZy5hY2NvdW50LCBvcGVyYXRpb246IGAke29wZXJhdGlvbn0gcXVlcmllc2AsIHBhdGg6IGJhc2UgKyAoY29uZmlnLnByZWZpeCB8fCBjb25maWcucGF0aCB8fCBcIlwiKSB9KTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBlbnRyeSBvZiByZXN1bHQgYXMgeyBwYXRoOiBzdHJpbmcgfVtdKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyYWNrQWNjZXNzKHsgYWNjb3VudDogY29uZmlnLmFjY291bnQsIG9wZXJhdGlvbjogYCR7b3BlcmF0aW9ufSByZXN1bHRzYCwgcGF0aDogYmFzZSArIGVudHJ5LnBhdGggfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgc2l6ZTogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICAgICAgICAgICAgaWYgKGNvbmZpZy5kYXRhKSB7XG4gICAgICAgICAgICAgICAgc2l6ZSA9IGNvbmZpZy5kYXRhLmxlbmd0aDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbGV0IGRhdGEgPSAocmVzdWx0IGFzIHsgZGF0YT86IEJ1ZmZlciB9IHwgdW5kZWZpbmVkKT8uZGF0YTtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YSkgc2l6ZSA9IGRhdGEubGVuZ3RoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdHJhY2tBY2Nlc3MoeyBhY2NvdW50OiBjb25maWcuYWNjb3VudCwgb3BlcmF0aW9uLCBwYXRoOiBiYXNlICsgY29uZmlnLnBhdGgsIHNpemUgfSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9O1xuICAgIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRBY2Nlc3NUb3RhbHMoYWNjb3VudDogc3RyaW5nKTogQWNjZXNzVG90YWxzIHtcbiAgICBsZXQgcmVzdWx0OiBBY2Nlc3NUb3RhbHMgPSB7fTtcbiAgICBsZXQgb3BlcmF0aW9ucyA9IGFjY291bnRzLmdldChhY2NvdW50KTtcbiAgICBpZiAoIW9wZXJhdGlvbnMpIHJldHVybiByZXN1bHQ7XG4gICAgZm9yIChsZXQgW29wZXJhdGlvbiwgc3RhdHNdIG9mIG9wZXJhdGlvbnMpIHtcbiAgICAgICAgcmVzdWx0W29wZXJhdGlvbl0gPSB7IGNvdW50OiBzdGF0cy50b3RhbENvdW50LCBzaXplOiBzdGF0cy50b3RhbFNpemUgfTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRBY2Nlc3NTdW1tYXJpZXMoY29uZmlnOiB7IGFjY291bnQ6IHN0cmluZzsgb3BlcmF0aW9uOiBzdHJpbmc7IG1heENvdW50OiBudW1iZXI7IHdlaWdodEJ5U2l6ZT86IGJvb2xlYW4gfSk6IFN1bW1hcnlFbnRyeTxBY2Nlc3NTdW1tYXJ5U3RhdGU+W10ge1xuICAgIGxldCBvcGVyYXRpb25zID0gYWNjb3VudHMuZ2V0KGNvbmZpZy5hY2NvdW50KTtcbiAgICBsZXQgc3RhdHMgPSBvcGVyYXRpb25zICYmIG9wZXJhdGlvbnMuZ2V0KGNvbmZpZy5vcGVyYXRpb24pO1xuICAgIGlmICghc3RhdHMpIHJldHVybiBbXTtcbiAgICAvLyBDb3VudC1vbmx5IG9wZXJhdGlvbnMgaGF2ZSBubyBzaXplIHRyZWUsIGluIHdoaWNoIGNhc2Ugd2VpZ2h0QnlTaXplIGlzIGlnbm9yZWQgYW5kIHRoZSBjb3VudCBicmVha2Rvd24gaXMgcmV0dXJuZWQuXG4gICAgbGV0IHNpemVUcmVlID0gc3RhdHMuc2l6ZVRyZWU7XG4gICAgaWYgKGNvbmZpZy53ZWlnaHRCeVNpemUgJiYgc2l6ZVRyZWUpIHtcbiAgICAgICAgcmV0dXJuIHNpemVUcmVlLmdldFN1bW1hcmllcyhjb25maWcubWF4Q291bnQpO1xuICAgIH1cbiAgICByZXR1cm4gc3RhdHMuY291bnRUcmVlLmdldFN1bW1hcmllcyhjb25maWcubWF4Q291bnQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2xlYXJBY2NvdW50QWNjZXNzU3RhdHMoYWNjb3VudDogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKGFjY291bnRzLmRlbGV0ZShhY2NvdW50KSkge1xuICAgICAgICBjb25zb2xlLmxvZyhgQ2xlYXJlZCB0aGUgaW4tbWVtb3J5IGFjY2VzcyBzdGF0aXN0aWNzIGZvciBhY2NvdW50ICR7YWNjb3VudH1gKTtcbiAgICB9XG59XG4iXX0=
109
+ /* _JS_SOURCE_HASH = "7fe1a2df2a18b5f02ab6e6fc532b93a7ed9917acb037f88d21accda0e0d23049"; */