sliftutils 1.7.88 → 1.7.90

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 (126) hide show
  1. package/.claude/settings.local.json +3 -1
  2. package/dist/treeSummary.ts.cache +2 -2
  3. package/index.d.ts +679 -300
  4. package/misc/dist/environment.ts.cache +2 -2
  5. package/misc/dist/getSecret.ts.cache +2 -2
  6. package/misc/dist/strings.ts.cache +2 -2
  7. package/misc/dist/zip.ts.cache +2 -2
  8. package/misc/https/dist/certs.ts.cache +2 -2
  9. package/misc/https/dist/cloudflareHelpers.ts.cache +2 -2
  10. package/misc/https/dist/dns.ts.cache +2 -2
  11. package/misc/https/dist/hostServer.ts.cache +49 -21
  12. package/misc/https/dist/hostsFile.ts.cache +82 -0
  13. package/misc/https/dist/httpsCerts.ts.cache +2 -2
  14. package/misc/https/dist/persistentLocalStorage.ts.cache +2 -2
  15. package/misc/https/hostServer.d.ts +6 -2
  16. package/misc/https/hostServer.ts +52 -19
  17. package/misc/https/hostsFile.d.ts +7 -0
  18. package/misc/https/hostsFile.ts +66 -0
  19. package/package.json +1 -1
  20. package/render-utils/dist/observer.tsx.cache +2 -2
  21. package/storage/ArchivesDisk.d.ts +3 -6
  22. package/storage/ArchivesDisk.ts +26 -2
  23. package/storage/BulkDatabase2/BulkDatabaseReader.ts +1 -1
  24. package/storage/BulkDatabase2/dist/BulkDatabaseBase.ts.cache +2 -2
  25. package/storage/BulkDatabase2/dist/BulkDatabaseFormat.ts.cache +2 -2
  26. package/storage/BulkDatabase2/dist/BulkDatabaseMerge.ts.cache +2 -2
  27. package/storage/BulkDatabase2/dist/BulkDatabaseReader.ts.cache +3 -3
  28. package/storage/BulkDatabase2/dist/LoadedIndex.ts.cache +2 -2
  29. package/storage/BulkDatabase2/dist/WriteOverlay.ts.cache +2 -2
  30. package/storage/BulkDatabase2/dist/blockCache.ts.cache +2 -2
  31. package/storage/BulkDatabase2/dist/mergeLock.ts.cache +2 -2
  32. package/storage/BulkDatabase2/dist/mergeMarkers.ts.cache +2 -2
  33. package/storage/BulkDatabase2/dist/streamLog.ts.cache +2 -2
  34. package/storage/BulkDatabase2/dist/syncClient.ts.cache +2 -2
  35. package/storage/IArchives.d.ts +37 -24
  36. package/storage/IArchives.ts +47 -62
  37. package/storage/LogMap.d.ts +56 -0
  38. package/storage/LogMap.ts +220 -0
  39. package/storage/archiveHelpers.d.ts +36 -0
  40. package/storage/archiveHelpers.ts +103 -0
  41. package/storage/backblaze.d.ts +7 -12
  42. package/storage/backblaze.ts +53 -48
  43. package/storage/dist/ArchivesDisk.ts.cache +29 -3
  44. package/storage/dist/FileFolderAPI.tsx.cache +2 -2
  45. package/storage/dist/IArchives.ts.cache +17 -53
  46. package/storage/dist/IndexedDBFileFolderAPI.ts.cache +2 -2
  47. package/storage/dist/JSONStorage.ts.cache +2 -2
  48. package/storage/dist/LogMap.ts.cache +212 -0
  49. package/storage/dist/PendingManager.tsx.cache +2 -2
  50. package/storage/dist/TransactionStorage.ts.cache +2 -2
  51. package/storage/dist/archiveHelpers.ts.cache +87 -0
  52. package/storage/dist/backblaze.ts.cache +59 -45
  53. package/storage/dist/fileSystemPointer.ts.cache +2 -2
  54. package/storage/dist/remoteFileStorage.ts.cache +2 -2
  55. package/storage/remoteStorage/ArchivesDelayed.d.ts +66 -0
  56. package/storage/remoteStorage/ArchivesDelayed.ts +237 -0
  57. package/storage/remoteStorage/ArchivesRemote.d.ts +5 -6
  58. package/storage/remoteStorage/ArchivesRemote.ts +26 -5
  59. package/storage/remoteStorage/ArchivesUrl.d.ts +2 -5
  60. package/storage/remoteStorage/ArchivesUrl.ts +2 -2
  61. package/storage/remoteStorage/accessPage.tsx +12 -0
  62. package/storage/remoteStorage/blobStore.d.ts +162 -189
  63. package/storage/remoteStorage/blobStore.ts +495 -952
  64. package/storage/remoteStorage/bucketDisk.d.ts +24 -3
  65. package/storage/remoteStorage/bucketDisk.ts +56 -22
  66. package/storage/remoteStorage/certTrustModal.d.ts +1 -0
  67. package/storage/remoteStorage/certTrustModal.tsx +48 -0
  68. package/storage/remoteStorage/cliArgs.d.ts +2 -0
  69. package/storage/remoteStorage/cliArgs.ts +5 -0
  70. package/storage/remoteStorage/createArchives.d.ts +8 -7
  71. package/storage/remoteStorage/createArchives.ts +65 -26
  72. package/storage/remoteStorage/deployTakeover.ts +1 -1
  73. package/storage/remoteStorage/dist/ArchivesDelayed.ts.cache +220 -0
  74. package/storage/remoteStorage/dist/ArchivesRemote.ts.cache +26 -6
  75. package/storage/remoteStorage/dist/ArchivesUrl.ts.cache +3 -3
  76. package/storage/remoteStorage/dist/accessPage.tsx.cache +13 -3
  77. package/storage/remoteStorage/dist/accessStats.ts.cache +2 -2
  78. package/storage/remoteStorage/dist/blobStore.ts.cache +484 -966
  79. package/storage/remoteStorage/dist/bucketDisk.ts.cache +60 -29
  80. package/storage/remoteStorage/dist/certTrustModal.tsx.cache +55 -0
  81. package/storage/remoteStorage/dist/cliArgs.ts.cache +9 -4
  82. package/storage/remoteStorage/dist/createArchives.ts.cache +64 -27
  83. package/storage/remoteStorage/dist/deployTakeover.ts.cache +5 -5
  84. package/storage/remoteStorage/dist/intermediateManagement.ts.cache +286 -0
  85. package/storage/remoteStorage/dist/intermediateSources.ts.cache +2 -2
  86. package/storage/remoteStorage/dist/remoteConfig.ts.cache +122 -56
  87. package/storage/remoteStorage/dist/serverConfig.ts.cache +4 -4
  88. package/storage/remoteStorage/dist/sourceWrapper.ts.cache +7 -11
  89. package/storage/remoteStorage/dist/sourcesList.ts.cache +3 -6
  90. package/storage/remoteStorage/dist/storageClientController.ts.cache +2 -2
  91. package/storage/remoteStorage/dist/storageController.ts.cache +33 -36
  92. package/storage/remoteStorage/dist/storageServer.ts.cache +27 -7
  93. package/storage/remoteStorage/dist/storageServerCli.ts.cache +7 -3
  94. package/storage/remoteStorage/dist/storageServerState.ts.cache +138 -707
  95. package/storage/remoteStorage/dist/storeConfig.ts.cache +52 -0
  96. package/storage/remoteStorage/dist/storePlan.ts.cache +110 -81
  97. package/storage/remoteStorage/dist/storeSources.ts.cache +51 -0
  98. package/storage/remoteStorage/dist/storeSync.ts.cache +651 -0
  99. package/storage/remoteStorage/dist/validation.ts.cache +14 -4
  100. package/storage/remoteStorage/intermediateManagement.d.ts +12 -0
  101. package/storage/remoteStorage/intermediateManagement.ts +264 -0
  102. package/storage/remoteStorage/remoteConfig.d.ts +32 -0
  103. package/storage/remoteStorage/remoteConfig.ts +115 -50
  104. package/storage/remoteStorage/serverConfig.d.ts +1 -1
  105. package/storage/remoteStorage/serverConfig.ts +1 -1
  106. package/storage/remoteStorage/sourceWrapper.ts +4 -8
  107. package/storage/remoteStorage/sourcesList.d.ts +0 -2
  108. package/storage/remoteStorage/sourcesList.ts +0 -3
  109. package/storage/remoteStorage/spec.md +18 -4
  110. package/storage/remoteStorage/storageController.d.ts +10 -0
  111. package/storage/remoteStorage/storageController.ts +37 -41
  112. package/storage/remoteStorage/storageServer.d.ts +2 -0
  113. package/storage/remoteStorage/storageServer.ts +28 -4
  114. package/storage/remoteStorage/storageServerCli.ts +5 -1
  115. package/storage/remoteStorage/storageServerState.d.ts +39 -26
  116. package/storage/remoteStorage/storageServerState.ts +149 -669
  117. package/storage/remoteStorage/storeConfig.d.ts +30 -0
  118. package/storage/remoteStorage/storeConfig.ts +62 -0
  119. package/storage/remoteStorage/storePlan.d.ts +29 -17
  120. package/storage/remoteStorage/storePlan.ts +112 -85
  121. package/storage/remoteStorage/storeSources.d.ts +11 -0
  122. package/storage/remoteStorage/storeSources.ts +47 -0
  123. package/storage/remoteStorage/storeSync.d.ts +53 -0
  124. package/storage/remoteStorage/storeSync.ts +632 -0
  125. package/storage/remoteStorage/validation.d.ts +2 -0
  126. package/storage/remoteStorage/validation.ts +10 -0
@@ -1,4 +1,4 @@
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";
1
+ "use strict";
2
2
  var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
3
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
4
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
@@ -208,11 +208,21 @@ let AccessPage = class AccessPage extends preact_1.default.Component {
208
208
  AccessPage = __decorate([
209
209
  observer_1.observer
210
210
  ], AccessPage);
211
+ // Reached via the cert-trust flow (showCertTrustModal links here as ?trustCert=1). The browser only loads this page if it has ACCEPTED the certificate - so the mere fact that it rendered is the confirmation. Once accepted, the app's background connection to this same server works, so the user just returns.
212
+ function CertTrustedPage() {
213
+ return preact_1.default.createElement("div", { className: typesafecss_1.css.vbox(8).pad2(16) },
214
+ preact_1.default.createElement("div", null, "This server's certificate is now trusted by this browser."),
215
+ preact_1.default.createElement("div", null, "Close this tab and return to the page you came from - it will connect to the storage server automatically."));
216
+ }
211
217
  async function main() {
212
218
  if ((0, misc_1.isNode)())
213
219
  return;
220
+ if (new URLSearchParams(location.search).has("trustCert")) {
221
+ preact_1.default.render(preact_1.default.createElement(CertTrustedPage, null), document.body);
222
+ return;
223
+ }
214
224
  preact_1.default.render(preact_1.default.createElement(AccessPage, null), document.body);
215
225
  }
216
226
  main().catch(console.error);
217
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjZXNzUGFnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImFjY2Vzc1BhZ2UudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEdBQUcsWUFBWSxDQUFDO0FBRXBDLG9EQUE0QjtBQUM1QiwrQkFBa0M7QUFDbEMsMERBQXVEO0FBQ3ZELG1EQUFrRDtBQUNsRCw2Q0FBa0M7QUFDbEMsbUVBQWdFO0FBQ2hFLDJEQUEwRjtBQUMxRixxREFBdUQ7QUFFdkQsdVpBQXVaO0FBRXZaLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUNuQyxNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQztBQUdoQyxJQUFNLGVBQWUsR0FBckIsTUFBTSxlQUFnQixTQUFRLGdCQUFNLENBQUMsU0FBOEI7SUFBbkU7O1FBQ0ksV0FBTSxHQUFHLElBQUEsaUJBQVUsRUFBQztZQUNoQixNQUFNLEVBQUUsS0FBSztTQUNoQixDQUFDLENBQUM7SUFtQlAsQ0FBQztJQWpCRyxNQUFNO1FBQ0YsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUM7UUFDakMsT0FBTyx3Q0FBSyxTQUFTLEVBQUUsaUJBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQztZQUN2RCwyQ0FBUSxPQUFPLEVBQUUsS0FBSyxJQUFJLEVBQUU7b0JBQ3hCLE1BQU0sU0FBUyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7b0JBQzdDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztvQkFDMUIsVUFBVSxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO2dCQUMxRSxDQUFDLElBQ0ks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IFwicHJvZHVjdGlvblwiO1xuXG5pbXBvcnQgcHJlYWN0IGZyb20gXCJwcmVhY3RcIjtcbmltcG9ydCB7IG9ic2VydmFibGUgfSBmcm9tIFwibW9ieFwiO1xuaW1wb3J0IHsgb2JzZXJ2ZXIgfSBmcm9tIFwiLi4vLi4vcmVuZGVyLXV0aWxzL29ic2VydmVyXCI7XG5pbXBvcnQgeyBpc05vZGUgfSBmcm9tIFwic29ja2V0LWZ1bmN0aW9uL3NyYy9taXNjXCI7XG5pbXBvcnQgeyBjc3MgfSBmcm9tIFwidHlwZXNhZmVjc3NcIjtcbmltcG9ydCB7IFNvY2tldEZ1bmN0aW9uIH0gZnJvbSBcInNvY2tldC1mdW5jdGlvbi9Tb2NrZXRGdW5jdGlvblwiO1xuaW1wb3J0IHsgUmVtb3RlU3RvcmFnZUNvbnRyb2xsZXIsIEFjY2Vzc1N0YXRlLCBBY2Nlc3NSZXF1ZXN0IH0gZnJvbSBcIi4vc3RvcmFnZUNvbnRyb2xsZXJcIjtcbmltcG9ydCB7IGF1dGhlbnRpY2F0ZVN0b3JhZ2UgfSBmcm9tIFwiLi9BcmNoaXZlc1JlbW90ZVwiO1xuXG4vLyBUaGUgc3RvcmFnZSBzZXJ2ZXIncyBhY2Nlc3MgcGFnZS4gVmlzaXQgaHR0cHM6Ly88c3RvcmFnZURvbWFpbj46PHBvcnQ+LzxhY2NvdW50TmFtZT4gdG8gcmVxdWVzdCBhY2Nlc3MgdG8gdGhhdCBhY2NvdW50IGZvciB0aGlzIGJyb3dzZXIncyBtYWNoaW5lIGlkZW50aXR5LiBPbmNlIGdyYW50ZWQsIGxpc3RzIHRoZSBtYWNoaW5lcyB0aGF0IGhhdmUgYWNjZXNzLiBUbyBhcHByb3ZlIHNvbWVvbmUgZWxzZSdzIHJlcXVlc3QsIHRoZSB1c2VyIG11c3QgdHlwZSBpbiB0aGUgcmVxdWVzdGVyJ3MgSVAg4oCUIHBlbmRpbmcgcmVxdWVzdHMgYXJlIE5FVkVSIHNob3duIHVuc29saWNpdGVkIChzbyBhIHRydXN0ZWQgdXNlciBjYW4ndCBhY2NpZGVudGFsbHkgYXBwcm92ZSBhIHJhbmRvbSBtYWNoaW5lJ3MgcmVxdWVzdCkuXG5cbmNvbnN0IFJFRlJFU0hfSU5URVJWQUwgPSAxMDAwICogMTU7XG5jb25zdCBDT1BJRURfUkVTRVRfREVMQVkgPSAyMDAwO1xuXG5Ab2JzZXJ2ZXJcbmNsYXNzIENvcHlhYmxlQ29tbWFuZCBleHRlbmRzIHByZWFjdC5Db21wb25lbnQ8eyBjb21tYW5kOiBzdHJpbmcgfT4ge1xuICAgIHN5bmNlZCA9IG9ic2VydmFibGUoe1xuICAgICAgICBjb3BpZWQ6IGZhbHNlLFxuICAgIH0pO1xuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICBsZXQgY29tbWFuZCA9IHRoaXMucHJvcHMuY29tbWFuZDtcbiAgICAgICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPXtjc3MuaGJveCg4KS5hbGlnbkl0ZW1zKFwiZmxleC1zdGFydFwiKX0+XG4gICAgICAgICAgICA8YnV0dG9uIG9uQ2xpY2s9e2FzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICBhd2FpdCBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dChjb21tYW5kKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN5bmNlZC5jb3BpZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4geyB0aGlzLnN5bmNlZC5jb3BpZWQgPSBmYWxzZTsgfSwgQ09QSUVEX1JFU0VUX0RFTEFZKTtcbiAgICAgICAgICAgIH19PlxuICAgICAgICAgICAgICAgIHt0aGlzLnN5bmNlZC5jb3BpZWQgJiYgXCJDb3BpZWQhXCIgfHwgXCJDb3B5XCJ9XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxjb2RlIGNsYXNzTmFtZT17Y3NzLmZvbnRGYW1pbHkoXCJtb25vc3BhY2VcIikud2hpdGVTcGFjZShcInByZS13cmFwXCIpXG4gICAgICAgICAgICAgICAgLmhzbCgwLCAwLCA5MikucGFkMig4LCA0KS5ib3JkZXJSYWRpdXMoNClcbiAgICAgICAgICAgIH0+XG4gICAgICAgICAgICAgICAge2NvbW1hbmR9XG4gICAgICAgICAgICA8L2NvZGU+XG4gICAgICAgIDwvZGl2PjtcbiAgICB9XG59XG5cbkBvYnNlcnZlclxuY2xhc3MgQWNjZXNzUGFnZSBleHRlbmRzIHByZWFjdC5Db21wb25lbnQge1xuICAgIHN5bmNlZCA9IG9ic2VydmFibGUoe1xuICAgICAgICBhY2NvdW50OiBcIlwiLFxuICAgICAgICBzdGF0ZTogdW5kZWZpbmVkIGFzIEFjY2Vzc1N0YXRlIHwgdW5kZWZpbmVkLFxuICAgICAgICBlcnJvcjogXCJcIixcbiAgICAgICAgbG9va3VwSXA6IFwiXCIsXG4gICAgICAgIGxvb2t1cFJlc3VsdHM6IHVuZGVmaW5lZCBhcyB7IGlwOiBzdHJpbmc7IHJlcXVlc3RzOiBBY2Nlc3NSZXF1ZXN0W10gfSB8IHVuZGVmaW5lZCxcbiAgICAgICAgbG9va3VwRXJyb3I6IFwiXCIsXG4gICAgICAgIGxvb2tpbmc6IGZhbHNlLFxuICAgICAgICBncmFudGluZzogXCJcIixcbiAgICB9KTtcblxuICAgIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgICBsZXQgYWNjb3VudCA9IGRlY29kZVVSSUNvbXBvbmVudChsb2NhdGlvbi5wYXRobmFtZS5zcGxpdChcIi9cIilbMV0gfHwgXCJcIik7XG4gICAgICAgIHRoaXMuc3luY2VkLmFjY291bnQgPSBhY2NvdW50O1xuICAgICAgICBpZiAoIWFjY291bnQpIHJldHVybjtcbiAgICAgICAgdm9pZCAoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnJlZnJlc2goYWNjb3VudCk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN5bmNlZC5lcnJvciA9IFN0cmluZyhlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc3luY2VkLnN0YXRlPy5oYXNBY2Nlc3MpIGJyZWFrO1xuICAgICAgICAgICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCBSRUZSRVNIX0lOVEVSVkFMKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhdXRoZW50aWNhdGVkID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBhc3luYyBjb250cm9sbGVyKCkge1xuICAgICAgICBsZXQgYWRkcmVzcyA9IGxvY2F0aW9uLmhvc3RuYW1lO1xuICAgICAgICBsZXQgcG9ydCA9ICtsb2NhdGlvbi5wb3J0IHx8IDQ0MztcbiAgICAgICAgbGV0IG5vZGVJZCA9IFNvY2tldEZ1bmN0aW9uLmNvbm5lY3QoeyBhZGRyZXNzLCBwb3J0IH0pO1xuICAgICAgICBpZiAoIXRoaXMuYXV0aGVudGljYXRlZCkge1xuICAgICAgICAgICAgYXdhaXQgYXV0aGVudGljYXRlU3RvcmFnZSh7IGFkZHJlc3MsIHBvcnQsIG5vZGVJZCB9KTtcbiAgICAgICAgICAgIHRoaXMuYXV0aGVudGljYXRlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFJlbW90ZVN0b3JhZ2VDb250cm9sbGVyLm5vZGVzW25vZGVJZF07XG4gICAgfVxuICAgIHByaXZhdGUgYXN5bmMgcmVmcmVzaChhY2NvdW50OiBzdHJpbmcpIHtcbiAgICAgICAgbGV0IGNvbnRyb2xsZXIgPSBhd2FpdCB0aGlzLmNvbnRyb2xsZXIoKTtcbiAgICAgICAgYXdhaXQgY29udHJvbGxlci5yZXF1ZXN0QWNjZXNzKHsgYWNjb3VudCB9KTtcbiAgICAgICAgdGhpcy5zeW5jZWQuc3RhdGUgPSBhd2FpdCBjb250cm9sbGVyLmdldEFjY2Vzc1N0YXRlKHsgYWNjb3VudCB9KTtcbiAgICAgICAgdGhpcy5zeW5jZWQuZXJyb3IgPSBcIlwiO1xuICAgIH1cblxuICAgIHByaXZhdGUgbG9va3VwSVAgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgIGxldCBpcCA9IHRoaXMuc3luY2VkLmxvb2t1cElwLnRyaW0oKTtcbiAgICAgICAgaWYgKCFpcCkgcmV0dXJuO1xuICAgICAgICB0aGlzLnN5bmNlZC5sb29raW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zeW5jZWQubG9va3VwRXJyb3IgPSBcIlwiO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbGV0IGNvbnRyb2xsZXIgPSBhd2FpdCB0aGlzLmNvbnRyb2xsZXIoKTtcbiAgICAgICAgICAgIGxldCByZXF1ZXN0cyA9IGF3YWl0IGNvbnRyb2xsZXIubGlzdFJlcXVlc3RzRm9ySVAoeyBhY2NvdW50OiB0aGlzLnN5bmNlZC5hY2NvdW50LCBpcCB9KTtcbiAgICAgICAgICAgIHRoaXMuc3luY2VkLmxvb2t1cFJlc3VsdHMgPSB7IGlwLCByZXF1ZXN0cyB9O1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICB0aGlzLnN5bmNlZC5sb29rdXBFcnJvciA9IFN0cmluZyhlKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRoaXMuc3luY2VkLmxvb2tpbmcgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBwcml2YXRlIGFwcHJvdmUgPSBhc3luYyAocmVxdWVzdDogQWNjZXNzUmVxdWVzdCkgPT4ge1xuICAgICAgICB0aGlzLnN5bmNlZC5ncmFudGluZyA9IHJlcXVlc3QucmVxdWVzdElkO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbGV0IGNvbnRyb2xsZXIgPSBhd2FpdCB0aGlzLmNvbnRyb2xsZXIoKTtcbiAgICAgICAgICAgIGF3YWl0IGNvbnRyb2xsZXIuZ3JhbnRBY2Nlc3MoeyByZXF1ZXN0SWQ6IHJlcXVlc3QucmVxdWVzdElkIH0pO1xuICAgICAgICAgICAgaWYgKHRoaXMuc3luY2VkLmxvb2t1cFJlc3VsdHMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN5bmNlZC5sb29rdXBSZXN1bHRzLnJlcXVlc3RzID0gdGhpcy5zeW5jZWQubG9va3VwUmVzdWx0cy5yZXF1ZXN0cy5maWx0ZXIociA9PiByLnJlcXVlc3RJZCAhPT0gcmVxdWVzdC5yZXF1ZXN0SWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXdhaXQgdGhpcy5yZWZyZXNoKHRoaXMuc3luY2VkLmFjY291bnQpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICB0aGlzLnN5bmNlZC5sb29rdXBFcnJvciA9IFN0cmluZyhlKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRoaXMuc3luY2VkLmdyYW50aW5nID0gXCJcIjtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGxldCBzeW5jZWQgPSB0aGlzLnN5bmNlZDtcbiAgICAgICAgbGV0IHsgYWNjb3VudCwgc3RhdGUsIGVycm9yIH0gPSBzeW5jZWQ7XG4gICAgICAgIGlmICghYWNjb3VudCkge1xuICAgICAgICAgICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPXtjc3MudmJveCg4KS5wYWQyKDE2KX0+XG4gICAgICAgICAgICAgICAgPGRpdj5SZW1vdGUgc3RvcmFnZSBzZXJ2ZXIuPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdj5WaXNpdCAvKGFjY291bnQgbmFtZSkgdG8gcmVxdWVzdCBhY2Nlc3MgdG8gYW4gYWNjb3VudCBmb3IgdGhpcyBicm93c2VyLjwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT17Y3NzLnZib3goMTIpLnBhZDIoMTYpfT5cbiAgICAgICAgICAgIDxkaXY+U3RvcmFnZSBhY2NvdW50OiB7YWNjb3VudH08L2Rpdj5cbiAgICAgICAgICAgIHtlcnJvciAmJiA8ZGl2PkVycm9yOiB7ZXJyb3J9PC9kaXY+fVxuICAgICAgICAgICAgeyFzdGF0ZSAmJiAhZXJyb3IgJiYgPGRpdj5SZXF1ZXN0aW5nIGFjY2Vzcy4uLjwvZGl2Pn1cbiAgICAgICAgICAgIHtzdGF0ZSAmJiAhc3RhdGUuaGFzQWNjZXNzICYmIDxkaXYgY2xhc3NOYW1lPXtjc3MudmJveCg4KX0+XG4gICAgICAgICAgICAgICAgPGRpdj5UaGlzIG1hY2hpbmUgKHtzdGF0ZS5tYWNoaW5lSWR9LCBpcCB7c3RhdGUuaXB9KSBkb2VzIE5PVCBoYXZlIGFjY2VzcyB5ZXQuPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdj5BbiBhY2Nlc3MgcmVxdWVzdCBoYXMgYmVlbiBtYWRlLiBUbyBncmFudCBpdCwgcnVuIHRoaXMgY29tbWFuZDo8L2Rpdj5cbiAgICAgICAgICAgICAgICB7c3RhdGUuZ3JhbnRBY2Nlc3NDb21tYW5kICYmIDxDb3B5YWJsZUNvbW1hbmQgY29tbWFuZD17c3RhdGUuZ3JhbnRBY2Nlc3NDb21tYW5kfSAvPn1cbiAgICAgICAgICAgICAgICA8ZGl2PlRoaXMgcGFnZSByZWNoZWNrcyBldmVyeSB7UkVGUkVTSF9JTlRFUlZBTCAvIDEwMDB9IHNlY29uZHMuPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj59XG4gICAgICAgICAgICB7c3RhdGUgJiYgc3RhdGUuaGFzQWNjZXNzICYmIDxkaXYgY2xhc3NOYW1lPXtjc3MudmJveCgxNil9PlxuICAgICAgICAgICAgICAgIDxkaXY+VGhpcyBtYWNoaW5lICh7c3RhdGUubWFjaGluZUlkfSwgaXAge3N0YXRlLmlwfSkgaGFzIGFjY2Vzcy48L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Y3NzLnZib3goNil9PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2Pk1hY2hpbmVzIHdpdGggYWNjZXNzOjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8dGFibGU+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3NOYW1lPXtjc3MucGFkMig4LCAyKS50ZXh0QWxpZ24oXCJsZWZ0XCIpfT5NYWNoaW5lPC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzTmFtZT17Y3NzLnBhZDIoOCwgMikudGV4dEFsaWduKFwibGVmdFwiKX0+SVA8L3RoPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3NOYW1lPXtjc3MucGFkMig4LCAyKS50ZXh0QWxpZ24oXCJsZWZ0XCIpfT5HcmFudGVkPC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC90aGVhZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7KHN0YXRlLnRydXN0ZWRNYWNoaW5lcyB8fCBbXSkubWFwKG0gPT4gPHRyIGtleT17bS5tYWNoaW5lSWR9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3NOYW1lPXtjc3MucGFkMig4LCAyKX0+e20ubWFjaGluZUlkfTwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzc05hbWU9e2Nzcy5wYWQyKDgsIDIpfT57bS5pcH08L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3NOYW1lPXtjc3MucGFkMig4LCAyKX0+e25ldyBEYXRlKG0udGltZSkudG9Mb2NhbGVTdHJpbmcoKX08L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+KX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgICAgICAgICAgICAgIDwvdGFibGU+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Nzcy52Ym94KDYpfT5cbiAgICAgICAgICAgICAgICAgICAgPGRpdj5BcHByb3ZlIHJlcXVlc3Q8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Nzcy5oYm94KDgpLmFsaWduSXRlbXMoXCJjZW50ZXJcIil9PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJpcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3N5bmNlZC5sb29rdXBJcH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbklucHV0PXtlID0+IHsgc3luY2VkLmxvb2t1cElwID0gKGUuY3VycmVudFRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZTsgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbktleURvd249e2UgPT4geyBpZiAoZS5rZXkgPT09IFwiRW50ZXJcIikgdm9pZCB0aGlzLmxvb2t1cElQKCk7IH19XG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBkaXNhYmxlZD17c3luY2VkLmxvb2tpbmcgfHwgIXN5bmNlZC5sb29rdXBJcC50cmltKCl9IG9uQ2xpY2s9e3RoaXMubG9va3VwSVB9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaFxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICB7c3luY2VkLmxvb2t1cEVycm9yICYmIDxkaXY+RXJyb3I6IHtzeW5jZWQubG9va3VwRXJyb3J9PC9kaXY+fVxuICAgICAgICAgICAgICAgICAgICB7c3luY2VkLmxvb2t1cFJlc3VsdHMgJiYgc3luY2VkLmxvb2t1cFJlc3VsdHMucmVxdWVzdHMubGVuZ3RoID09PSAwICYmIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICBObyBwZW5kaW5nIHJlcXVlc3RzIGZvciB7c3luY2VkLmxvb2t1cFJlc3VsdHMuaXB9IG9uIHRoaXMgYWNjb3VudC5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+fVxuICAgICAgICAgICAgICAgICAgICB7c3luY2VkLmxvb2t1cFJlc3VsdHMgJiYgc3luY2VkLmxvb2t1cFJlc3VsdHMucmVxdWVzdHMubGVuZ3RoID4gMCAmJiA8dGFibGU+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3NOYW1lPXtjc3MucGFkMig4LCAyKS50ZXh0QWxpZ24oXCJsZWZ0XCIpfT5NYWNoaW5lPC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzTmFtZT17Y3NzLnBhZDIoOCwgMikudGV4dEFsaWduKFwibGVmdFwiKX0+SVA8L3RoPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3NOYW1lPXtjc3MucGFkMig4LCAyKS50ZXh0QWxpZ24oXCJsZWZ0XCIpfT5SZXF1ZXN0ZWQ8L3RoPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3NOYW1lPXtjc3MucGFkMig4LCAyKS50ZXh0QWxpZ24oXCJsZWZ0XCIpfT48L3RoPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtzeW5jZWQubG9va3VwUmVzdWx0cy5yZXF1ZXN0cy5tYXAociA9PiA8dHIga2V5PXtyLnJlcXVlc3RJZH0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzc05hbWU9e2Nzcy5wYWQyKDgsIDIpfT57ci5tYWNoaW5lSWR9PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzTmFtZT17Y3NzLnBhZDIoOCwgMil9PntyLmlwfTwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzc05hbWU9e2Nzcy5wYWQyKDgsIDIpfT57bmV3IERhdGUoci50aW1lKS50b0xvY2FsZVN0cmluZygpfTwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzc05hbWU9e2Nzcy5wYWQyKDgsIDIpfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gZGlzYWJsZWQ9eyEhc3luY2VkLmdyYW50aW5nfSBvbkNsaWNrPXthc3luYyAoKSA9PiB0aGlzLmFwcHJvdmUocil9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtzeW5jZWQuZ3JhbnRpbmcgPT09IHIucmVxdWVzdElkICYmIFwiQXBwcm92aW5nLi4uXCIgfHwgXCJBcHByb3ZlXCJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPil9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICAgICAgICAgICAgICA8L3RhYmxlPn1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2Pn1cbiAgICAgICAgPC9kaXY+O1xuICAgIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gbWFpbigpIHtcbiAgICBpZiAoaXNOb2RlKCkpIHJldHVybjtcbiAgICBwcmVhY3QucmVuZGVyKDxBY2Nlc3NQYWdlIC8+LCBkb2N1bWVudC5ib2R5KTtcbn1cblxubWFpbigpLmNhdGNoKGNvbnNvbGUuZXJyb3IpO1xuIl1//9
218
- /* _JS_SOURCE_HASH = "3b56f693258b989114902a4523264ffb4c20e0f0db75775f9dbf14100c8b6a30"; */
227
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjZXNzUGFnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImFjY2Vzc1BhZ2UudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEdBQUcsWUFBWSxDQUFDO0FBRXBDLG9EQUE0QjtBQUM1QiwrQkFBa0M7QUFDbEMsMERBQXVEO0FBQ3ZELG1EQUFrRDtBQUNsRCw2Q0FBa0M7QUFDbEMsbUVBQWdFO0FBQ2hFLDJEQUEwRjtBQUMxRixxREFBdUQ7QUFFdkQsdVpBQXVaO0FBRXZaLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUNuQyxNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQztBQUdoQyxJQUFNLGVBQWUsR0FBckIsTUFBTSxlQUFnQixTQUFRLGdCQUFNLENBQUMsU0FBOEI7SUFBbkU7O1FBQ0ksV0FBTSxHQUFHLElBQUEsaUJBQVUsRUFBQztZQUNoQixNQUFNLEVBQUUsS0FBSztTQUNoQixDQUFDLENBQUM7SUFtQlAsQ0FBQztJQWpCRyxNQUFNO1FBQ0YsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUM7UUFDakMsT0FBTyx3Q0FBSyxTQUFTLEVBQUUsaUJBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQztZQUN2RCwyQ0FBUSxPQUFPLEVBQUUsS0FBSyxJQUFJLEVBQUU7b0JBQ3hCLE1BQU0sU0FBUyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7b0JBQzdDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztvQkFDMUIsVUFBVSxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO2dCQUMxRSxDQUFDLElBQ0ks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QUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO1FBQ3hELGdCQUFNLENBQUMsTUFBTSxDQUFDLCtCQUFDLGVBQWUsT0FBRyxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsRCxPQUFPO0lBQ1gsQ0FBQztJQUNELGdCQUFNLENBQUMsTUFBTSxDQUFDLCtCQUFDLFVBQVUsT0FBRyxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNqRCxDQUFDO0FBRUQsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbInByb2Nlc3MuZW52Lk5PREVfRU5WID0gXCJwcm9kdWN0aW9uXCI7XG5cbmltcG9ydCBwcmVhY3QgZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IHsgb2JzZXJ2YWJsZSB9IGZyb20gXCJtb2J4XCI7XG5pbXBvcnQgeyBvYnNlcnZlciB9IGZyb20gXCIuLi8uLi9yZW5kZXItdXRpbHMvb2JzZXJ2ZXJcIjtcbmltcG9ydCB7IGlzTm9kZSB9IGZyb20gXCJzb2NrZXQtZnVuY3Rpb24vc3JjL21pc2NcIjtcbmltcG9ydCB7IGNzcyB9IGZyb20gXCJ0eXBlc2FmZWNzc1wiO1xuaW1wb3J0IHsgU29ja2V0RnVuY3Rpb24gfSBmcm9tIFwic29ja2V0LWZ1bmN0aW9uL1NvY2tldEZ1bmN0aW9uXCI7XG5pbXBvcnQgeyBSZW1vdGVTdG9yYWdlQ29udHJvbGxlciwgQWNjZXNzU3RhdGUsIEFjY2Vzc1JlcXVlc3QgfSBmcm9tIFwiLi9zdG9yYWdlQ29udHJvbGxlclwiO1xuaW1wb3J0IHsgYXV0aGVudGljYXRlU3RvcmFnZSB9IGZyb20gXCIuL0FyY2hpdmVzUmVtb3RlXCI7XG5cbi8vIFRoZSBzdG9yYWdlIHNlcnZlcidzIGFjY2VzcyBwYWdlLiBWaXNpdCBodHRwczovLzxzdG9yYWdlRG9tYWluPjo8cG9ydD4vPGFjY291bnROYW1lPiB0byByZXF1ZXN0IGFjY2VzcyB0byB0aGF0IGFjY291bnQgZm9yIHRoaXMgYnJvd3NlcidzIG1hY2hpbmUgaWRlbnRpdHkuIE9uY2UgZ3JhbnRlZCwgbGlzdHMgdGhlIG1hY2hpbmVzIHRoYXQgaGF2ZSBhY2Nlc3MuIFRvIGFwcHJvdmUgc29tZW9uZSBlbHNlJ3MgcmVxdWVzdCwgdGhlIHVzZXIgbXVzdCB0eXBlIGluIHRoZSByZXF1ZXN0ZXIncyBJUCDigJQgcGVuZGluZyByZXF1ZXN0cyBhcmUgTkVWRVIgc2hvd24gdW5zb2xpY2l0ZWQgKHNvIGEgdHJ1c3RlZCB1c2VyIGNhbid0IGFjY2lkZW50YWxseSBhcHByb3ZlIGEgcmFuZG9tIG1hY2hpbmUncyByZXF1ZXN0KS5cblxuY29uc3QgUkVGUkVTSF9JTlRFUlZBTCA9IDEwMDAgKiAxNTtcbmNvbnN0IENPUElFRF9SRVNFVF9ERUxBWSA9IDIwMDA7XG5cbkBvYnNlcnZlclxuY2xhc3MgQ29weWFibGVDb21tYW5kIGV4dGVuZHMgcHJlYWN0LkNvbXBvbmVudDx7IGNvbW1hbmQ6IHN0cmluZyB9PiB7XG4gICAgc3luY2VkID0gb2JzZXJ2YWJsZSh7XG4gICAgICAgIGNvcGllZDogZmFsc2UsXG4gICAgfSk7XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGxldCBjb21tYW5kID0gdGhpcy5wcm9wcy5jb21tYW5kO1xuICAgICAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9e2Nzcy5oYm94KDgpLmFsaWduSXRlbXMoXCJmbGV4LXN0YXJ0XCIpfT5cbiAgICAgICAgICAgIDxidXR0b24gb25DbGljaz17YXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGF3YWl0IG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KGNvbW1hbmQpO1xuICAgICAgICAgICAgICAgIHRoaXMuc3luY2VkLmNvcGllZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7IHRoaXMuc3luY2VkLmNvcGllZCA9IGZhbHNlOyB9LCBDT1BJRURfUkVTRVRfREVMQVkpO1xuICAgICAgICAgICAgfX0+XG4gICAgICAgICAgICAgICAge3RoaXMuc3luY2VkLmNvcGllZCAmJiBcIkNvcGllZCFcIiB8fCBcIkNvcHlcIn1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPGNvZGUgY2xhc3NOYW1lPXtjc3MuZm9udEZhbWlseShcIm1vbm9zcGFjZVwiKS53aGl0ZVNwYWNlKFwicHJlLXdyYXBcIilcbiAgICAgICAgICAgICAgICAuaHNsKDAsIDAsIDkyKS5wYWQyKDgsIDQpLmJvcmRlclJhZGl1cyg0KVxuICAgICAgICAgICAgfT5cbiAgICAgICAgICAgICAgICB7Y29tbWFuZH1cbiAgICAgICAgICAgIDwvY29kZT5cbiAgICAgICAgPC9kaXY+O1xuICAgIH1cbn1cblxuQG9ic2VydmVyXG5jbGFzcyBBY2Nlc3NQYWdlIGV4dGVuZHMgcHJlYWN0LkNvbXBvbmVudCB7XG4gICAgc3luY2VkID0gb2JzZXJ2YWJsZSh7XG4gICAgICAgIGFjY291bnQ6IFwiXCIsXG4gICAgICAgIHN0YXRlOiB1bmRlZmluZWQgYXMgQWNjZXNzU3RhdGUgfCB1bmRlZmluZWQsXG4gICAgICAgIGVycm9yOiBcIlwiLFxuICAgICAgICBsb29rdXBJcDogXCJcIixcbiAgICAgICAgbG9va3VwUmVzdWx0czogdW5kZWZpbmVkIGFzIHsgaXA6IHN0cmluZzsgcmVxdWVzdHM6IEFjY2Vzc1JlcXVlc3RbXSB9IHwgdW5kZWZpbmVkLFxuICAgICAgICBsb29rdXBFcnJvcjogXCJcIixcbiAgICAgICAgbG9va2luZzogZmFsc2UsXG4gICAgICAgIGdyYW50aW5nOiBcIlwiLFxuICAgIH0pO1xuXG4gICAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICAgIGxldCBhY2NvdW50ID0gZGVjb2RlVVJJQ29tcG9uZW50KGxvY2F0aW9uLnBhdGhuYW1lLnNwbGl0KFwiL1wiKVsxXSB8fCBcIlwiKTtcbiAgICAgICAgdGhpcy5zeW5jZWQuYWNjb3VudCA9IGFjY291bnQ7XG4gICAgICAgIGlmICghYWNjb3VudCkgcmV0dXJuO1xuICAgICAgICB2b2lkIChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucmVmcmVzaChhY2NvdW50KTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3luY2VkLmVycm9yID0gU3RyaW5nKGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zeW5jZWQuc3RhdGU/Lmhhc0FjY2VzcykgYnJlYWs7XG4gICAgICAgICAgICAgICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIFJFRlJFU0hfSU5URVJWQUwpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGF1dGhlbnRpY2F0ZWQgPSBmYWxzZTtcbiAgICBwcml2YXRlIGFzeW5jIGNvbnRyb2xsZXIoKSB7XG4gICAgICAgIGxldCBhZGRyZXNzID0gbG9jYXRpb24uaG9zdG5hbWU7XG4gICAgICAgIGxldCBwb3J0ID0gK2xvY2F0aW9uLnBvcnQgfHwgNDQzO1xuICAgICAgICBsZXQgbm9kZUlkID0gU29ja2V0RnVuY3Rpb24uY29ubmVjdCh7IGFkZHJlc3MsIHBvcnQgfSk7XG4gICAgICAgIGlmICghdGhpcy5hdXRoZW50aWNhdGVkKSB7XG4gICAgICAgICAgICBhd2FpdCBhdXRoZW50aWNhdGVTdG9yYWdlKHsgYWRkcmVzcywgcG9ydCwgbm9kZUlkIH0pO1xuICAgICAgICAgICAgdGhpcy5hdXRoZW50aWNhdGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gUmVtb3RlU3RvcmFnZUNvbnRyb2xsZXIubm9kZXNbbm9kZUlkXTtcbiAgICB9XG4gICAgcHJpdmF0ZSBhc3luYyByZWZyZXNoKGFjY291bnQ6IHN0cmluZykge1xuICAgICAgICBsZXQgY29udHJvbGxlciA9IGF3YWl0IHRoaXMuY29udHJvbGxlcigpO1xuICAgICAgICBhd2FpdCBjb250cm9sbGVyLnJlcXVlc3RBY2Nlc3MoeyBhY2NvdW50IH0pO1xuICAgICAgICB0aGlzLnN5bmNlZC5zdGF0ZSA9IGF3YWl0IGNvbnRyb2xsZXIuZ2V0QWNjZXNzU3RhdGUoeyBhY2NvdW50IH0pO1xuICAgICAgICB0aGlzLnN5bmNlZC5lcnJvciA9IFwiXCI7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBsb29rdXBJUCA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgbGV0IGlwID0gdGhpcy5zeW5jZWQubG9va3VwSXAudHJpbSgpO1xuICAgICAgICBpZiAoIWlwKSByZXR1cm47XG4gICAgICAgIHRoaXMuc3luY2VkLmxvb2tpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLnN5bmNlZC5sb29rdXBFcnJvciA9IFwiXCI7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBsZXQgY29udHJvbGxlciA9IGF3YWl0IHRoaXMuY29udHJvbGxlcigpO1xuICAgICAgICAgICAgbGV0IHJlcXVlc3RzID0gYXdhaXQgY29udHJvbGxlci5saXN0UmVxdWVzdHNGb3JJUCh7IGFjY291bnQ6IHRoaXMuc3luY2VkLmFjY291bnQsIGlwIH0pO1xuICAgICAgICAgICAgdGhpcy5zeW5jZWQubG9va3VwUmVzdWx0cyA9IHsgaXAsIHJlcXVlc3RzIH07XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHRoaXMuc3luY2VkLmxvb2t1cEVycm9yID0gU3RyaW5nKGUpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgdGhpcy5zeW5jZWQubG9va2luZyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHByaXZhdGUgYXBwcm92ZSA9IGFzeW5jIChyZXF1ZXN0OiBBY2Nlc3NSZXF1ZXN0KSA9PiB7XG4gICAgICAgIHRoaXMuc3luY2VkLmdyYW50aW5nID0gcmVxdWVzdC5yZXF1ZXN0SWQ7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBsZXQgY29udHJvbGxlciA9IGF3YWl0IHRoaXMuY29udHJvbGxlcigpO1xuICAgICAgICAgICAgYXdhaXQgY29udHJvbGxlci5ncmFudEFjY2Vzcyh7IHJlcXVlc3RJZDogcmVxdWVzdC5yZXF1ZXN0SWQgfSk7XG4gICAgICAgICAgICBpZiAodGhpcy5zeW5jZWQubG9va3VwUmVzdWx0cykge1xuICAgICAgICAgICAgICAgIHRoaXMuc3luY2VkLmxvb2t1cFJlc3VsdHMucmVxdWVzdHMgPSB0aGlzLnN5bmNlZC5sb29rdXBSZXN1bHRzLnJlcXVlc3RzLmZpbHRlcihyID0+IHIucmVxdWVzdElkICE9PSByZXF1ZXN0LnJlcXVlc3RJZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnJlZnJlc2godGhpcy5zeW5jZWQuYWNjb3VudCk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHRoaXMuc3luY2VkLmxvb2t1cEVycm9yID0gU3RyaW5nKGUpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgdGhpcy5zeW5jZWQuZ3JhbnRpbmcgPSBcIlwiO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgbGV0IHN5bmNlZCA9IHRoaXMuc3luY2VkO1xuICAgICAgICBsZXQgeyBhY2NvdW50LCBzdGF0ZSwgZXJyb3IgfSA9IHN5bmNlZDtcbiAgICAgICAgaWYgKCFhY2NvdW50KSB7XG4gICAgICAgICAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9e2Nzcy52Ym94KDgpLnBhZDIoMTYpfT5cbiAgICAgICAgICAgICAgICA8ZGl2PlJlbW90ZSBzdG9yYWdlIHNlcnZlci48L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2PlZpc2l0IC8oYWNjb3VudCBuYW1lKSB0byByZXF1ZXN0IGFjY2VzcyB0byBhbiBhY2NvdW50IGZvciB0aGlzIGJyb3dzZXIuPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPXtjc3MudmJveCgxMikucGFkMigxNil9PlxuICAgICAgICAgICAgPGRpdj5TdG9yYWdlIGFjY291bnQ6IHthY2NvdW50fTwvZGl2PlxuICAgICAgICAgICAge2Vycm9yICYmIDxkaXY+RXJyb3I6IHtlcnJvcn08L2Rpdj59XG4gICAgICAgICAgICB7IXN0YXRlICYmICFlcnJvciAmJiA8ZGl2PlJlcXVlc3RpbmcgYWNjZXNzLi4uPC9kaXY+fVxuICAgICAgICAgICAge3N0YXRlICYmICFzdGF0ZS5oYXNBY2Nlc3MgJiYgPGRpdiBjbGFzc05hbWU9e2Nzcy52Ym94KDgpfT5cbiAgICAgICAgICAgICAgICA8ZGl2PlRoaXMgbWFjaGluZSAoe3N0YXRlLm1hY2hpbmVJZH0sIGlwIHtzdGF0ZS5pcH0pIGRvZXMgTk9UIGhhdmUgYWNjZXNzIHlldC48L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2PkFuIGFjY2VzcyByZXF1ZXN0IGhhcyBiZWVuIG1hZGUuIFRvIGdyYW50IGl0LCBydW4gdGhpcyBjb21tYW5kOjwvZGl2PlxuICAgICAgICAgICAgICAgIHtzdGF0ZS5ncmFudEFjY2Vzc0NvbW1hbmQgJiYgPENvcHlhYmxlQ29tbWFuZCBjb21tYW5kPXtzdGF0ZS5ncmFudEFjY2Vzc0NvbW1hbmR9IC8+fVxuICAgICAgICAgICAgICAgIDxkaXY+VGhpcyBwYWdlIHJlY2hlY2tzIGV2ZXJ5IHtSRUZSRVNIX0lOVEVSVkFMIC8gMTAwMH0gc2Vjb25kcy48L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2Pn1cbiAgICAgICAgICAgIHtzdGF0ZSAmJiBzdGF0ZS5oYXNBY2Nlc3MgJiYgPGRpdiBjbGFzc05hbWU9e2Nzcy52Ym94KDE2KX0+XG4gICAgICAgICAgICAgICAgPGRpdj5UaGlzIG1hY2hpbmUgKHtzdGF0ZS5tYWNoaW5lSWR9LCBpcCB7c3RhdGUuaXB9KSBoYXMgYWNjZXNzLjwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtjc3MudmJveCg2KX0+XG4gICAgICAgICAgICAgICAgICAgIDxkaXY+TWFjaGluZXMgd2l0aCBhY2Nlc3M6PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDx0YWJsZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aGVhZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzc05hbWU9e2Nzcy5wYWQyKDgsIDIpLnRleHRBbGlnbihcImxlZnRcIil9Pk1hY2hpbmU8L3RoPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3NOYW1lPXtjc3MucGFkMig4LCAyKS50ZXh0QWxpZ24oXCJsZWZ0XCIpfT5JUDwvdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzc05hbWU9e2Nzcy5wYWQyKDgsIDIpLnRleHRBbGlnbihcImxlZnRcIil9PkdyYW50ZWQ8L3RoPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsoc3RhdGUudHJ1c3RlZE1hY2hpbmVzIHx8IFtdKS5tYXAobSA9PiA8dHIga2V5PXttLm1hY2hpbmVJZH0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzc05hbWU9e2Nzcy5wYWQyKDgsIDIpfT57bS5tYWNoaW5lSWR9PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzTmFtZT17Y3NzLnBhZDIoOCwgMil9PnttLmlwfTwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzc05hbWU9e2Nzcy5wYWQyKDgsIDIpfT57bmV3IERhdGUobS50aW1lKS50b0xvY2FsZVN0cmluZygpfTwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4pfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgICAgICAgICAgICAgPC90YWJsZT5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Y3NzLnZib3goNil9PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2PkFwcHJvdmUgcmVxdWVzdDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Y3NzLmhib3goOCkuYWxpZ25JdGVtcyhcImNlbnRlclwiKX0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cImlwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17c3luY2VkLmxvb2t1cElwfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uSW5wdXQ9e2UgPT4geyBzeW5jZWQubG9va3VwSXAgPSAoZS5jdXJyZW50VGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlOyB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uS2V5RG93bj17ZSA9PiB7IGlmIChlLmtleSA9PT0gXCJFbnRlclwiKSB2b2lkIHRoaXMubG9va3VwSVAoKTsgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGRpc2FibGVkPXtzeW5jZWQubG9va2luZyB8fCAhc3luY2VkLmxvb2t1cElwLnRyaW0oKX0gb25DbGljaz17dGhpcy5sb29rdXBJUH0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIHtzeW5jZWQubG9va3VwRXJyb3IgJiYgPGRpdj5FcnJvcjoge3N5bmNlZC5sb29rdXBFcnJvcn08L2Rpdj59XG4gICAgICAgICAgICAgICAgICAgIHtzeW5jZWQubG9va3VwUmVzdWx0cyAmJiBzeW5jZWQubG9va3VwUmVzdWx0cy5yZXF1ZXN0cy5sZW5ndGggPT09IDAgJiYgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIE5vIHBlbmRpbmcgcmVxdWVzdHMgZm9yIHtzeW5jZWQubG9va3VwUmVzdWx0cy5pcH0gb24gdGhpcyBhY2NvdW50LlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj59XG4gICAgICAgICAgICAgICAgICAgIHtzeW5jZWQubG9va3VwUmVzdWx0cyAmJiBzeW5jZWQubG9va3VwUmVzdWx0cy5yZXF1ZXN0cy5sZW5ndGggPiAwICYmIDx0YWJsZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aGVhZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzc05hbWU9e2Nzcy5wYWQyKDgsIDIpLnRleHRBbGlnbihcImxlZnRcIil9Pk1hY2hpbmU8L3RoPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3NOYW1lPXtjc3MucGFkMig4LCAyKS50ZXh0QWxpZ24oXCJsZWZ0XCIpfT5JUDwvdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzc05hbWU9e2Nzcy5wYWQyKDgsIDIpLnRleHRBbGlnbihcImxlZnRcIil9PlJlcXVlc3RlZDwvdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzc05hbWU9e2Nzcy5wYWQyKDgsIDIpLnRleHRBbGlnbihcImxlZnRcIil9PjwvdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3N5bmNlZC5sb29rdXBSZXN1bHRzLnJlcXVlc3RzLm1hcChyID0+IDx0ciBrZXk9e3IucmVxdWVzdElkfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzTmFtZT17Y3NzLnBhZDIoOCwgMil9PntyLm1hY2hpbmVJZH08L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3NOYW1lPXtjc3MucGFkMig4LCAyKX0+e3IuaXB9PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzTmFtZT17Y3NzLnBhZDIoOCwgMil9PntuZXcgRGF0ZShyLnRpbWUpLnRvTG9jYWxlU3RyaW5nKCl9PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzTmFtZT17Y3NzLnBhZDIoOCwgMil9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBkaXNhYmxlZD17ISFzeW5jZWQuZ3JhbnRpbmd9IG9uQ2xpY2s9e2FzeW5jICgpID0+IHRoaXMuYXBwcm92ZShyKX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3N5bmNlZC5ncmFudGluZyA9PT0gci5yZXF1ZXN0SWQgJiYgXCJBcHByb3ZpbmcuLi5cIiB8fCBcIkFwcHJvdmVcIn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+KX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgICAgICAgICAgICAgIDwvdGFibGU+fVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+fVxuICAgICAgICA8L2Rpdj47XG4gICAgfVxufVxuXG4vLyBSZWFjaGVkIHZpYSB0aGUgY2VydC10cnVzdCBmbG93IChzaG93Q2VydFRydXN0TW9kYWwgbGlua3MgaGVyZSBhcyA/dHJ1c3RDZXJ0PTEpLiBUaGUgYnJvd3NlciBvbmx5IGxvYWRzIHRoaXMgcGFnZSBpZiBpdCBoYXMgQUNDRVBURUQgdGhlIGNlcnRpZmljYXRlIC0gc28gdGhlIG1lcmUgZmFjdCB0aGF0IGl0IHJlbmRlcmVkIGlzIHRoZSBjb25maXJtYXRpb24uIE9uY2UgYWNjZXB0ZWQsIHRoZSBhcHAncyBiYWNrZ3JvdW5kIGNvbm5lY3Rpb24gdG8gdGhpcyBzYW1lIHNlcnZlciB3b3Jrcywgc28gdGhlIHVzZXIganVzdCByZXR1cm5zLlxuZnVuY3Rpb24gQ2VydFRydXN0ZWRQYWdlKCkge1xuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT17Y3NzLnZib3goOCkucGFkMigxNil9PlxuICAgICAgICA8ZGl2PlRoaXMgc2VydmVyJ3MgY2VydGlmaWNhdGUgaXMgbm93IHRydXN0ZWQgYnkgdGhpcyBicm93c2VyLjwvZGl2PlxuICAgICAgICA8ZGl2PkNsb3NlIHRoaXMgdGFiIGFuZCByZXR1cm4gdG8gdGhlIHBhZ2UgeW91IGNhbWUgZnJvbSAtIGl0IHdpbGwgY29ubmVjdCB0byB0aGUgc3RvcmFnZSBzZXJ2ZXIgYXV0b21hdGljYWxseS48L2Rpdj5cbiAgICA8L2Rpdj47XG59XG5cbmFzeW5jIGZ1bmN0aW9uIG1haW4oKSB7XG4gICAgaWYgKGlzTm9kZSgpKSByZXR1cm47XG4gICAgaWYgKG5ldyBVUkxTZWFyY2hQYXJhbXMobG9jYXRpb24uc2VhcmNoKS5oYXMoXCJ0cnVzdENlcnRcIikpIHtcbiAgICAgICAgcHJlYWN0LnJlbmRlcig8Q2VydFRydXN0ZWRQYWdlIC8+LCBkb2N1bWVudC5ib2R5KTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBwcmVhY3QucmVuZGVyKDxBY2Nlc3NQYWdlIC8+LCBkb2N1bWVudC5ib2R5KTtcbn1cblxubWFpbigpLmNhdGNoKGNvbnNvbGUuZXJyb3IpO1xuIl1//9
228
+ /* _JS_SOURCE_HASH = "128dcbde014fedd2e3acb2d8453459300e1cc948856aa0d011f60487a5f2795c"; */
@@ -1,4 +1,4 @@
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";
1
+ "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");
@@ -106,4 +106,4 @@ function clearAccountAccessStats(account) {
106
106
  }
107
107
  exports.clearAccountAccessStats = clearAccountAccessStats;
108
108
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjZXNzU3RhdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJhY2Nlc3NTdGF0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtREFBOEQ7QUFFOUQsTUFBTSxxQkFBcUIsR0FBRyxHQUFHLENBQUM7QUFjbEMsTUFBTSxRQUFRLEdBQUcsSUFBSSxHQUFHLEVBQXVDLENBQUM7QUFFaEUsU0FBUyxRQUFRLENBQUMsUUFBd0M7SUFDdEQsT0FBTyxJQUFJLHlCQUFXLENBQWtDO1FBQ3BELE9BQU8sRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJO1FBQzVCLGFBQWEsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO1FBQ25DLFlBQVksRUFBRSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRTtZQUM3QixPQUFPLENBQUMsS0FBSyxJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyQyxDQUFDO1FBQ0QsY0FBYyxFQUFFLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQy9CLE1BQU0sQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQztRQUNqQyxDQUFDO1FBQ0QsU0FBUyxFQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUs7UUFDbkMsbUJBQW1CLEVBQUUscUJBQXFCO0tBQzdDLENBQUMsQ0FBQztBQUNQLENBQUM7QUFFRCx5TUFBeU07QUFDek0sU0FBZ0IsV0FBVyxDQUFDLE1BQTJFO0lBQ25HLElBQUksVUFBVSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzlDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNkLFVBQVUsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLFFBQVEsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxVQUFV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QztJQUN0QixzSEFBc0g7SUFDdEgsSUFBSSxRQUFRLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQztJQUM5QixJQUFJLE1BQU0sQ0FBQyxZQUFZLElBQUksUUFBUSxFQUFFLENBQUM7UUFDbEMsT0FBTyxRQUFRLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBQ0QsT0FBTyxLQUFLLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDekQsQ0FBQztBQVZELGtEQVVDO0FBRUQsU0FBZ0IsdUJBQXVCLENBQUMsT0FBZTtJQUNuRCxJQUFJLFFBQVEsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUMzQixPQUFPLENBQUMsR0FBRyxDQUFDLHVEQUF1RCxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ2xGLENBQUM7QUFDTCxDQUFDO0FBSkQsMERBSUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUcmVlU3VtbWFyeSwgU3VtbWFyeUVudHJ5IH0gZnJvbSBcIi4uLy4uL3RyZWVTdW1tYXJ5XCI7XG5cbmNvbnN0IEVYUEVDVEVEX09VVFBVVF9DT1VOVCA9IDEwMDtcblxuZXhwb3J0IHR5cGUgQWNjZXNzU3VtbWFyeVN0YXRlID0geyB0b3RhbDogbnVtYmVyIH07XG5leHBvcnQgdHlwZSBBY2Nlc3NUb3RhbHMgPSB7IFtvcGVyYXRpb246IHN0cmluZ106IHsgY291bnQ6IG51bWJlcjsgc2l6ZTogbnVtYmVyIH0gfTtcblxudHlwZSBBY2Nlc3NWYWx1ZSA9IHsgcGF0aDogc3RyaW5nOyBzaXplOiBudW1iZXIgfTtcbnR5cGUgT3BlcmF0aW9uU3RhdHMgPSB7XG4gICAgdG90YWxDb3VudDogbnVtYmVyO1xuICAgIHRvdGFsU2l6ZTogbnVtYmVyO1xuICAgIGNvdW50VHJlZTogVHJlZVN1bW1hcnk8QWNjZXNzVmFsdWUsIEFjY2Vzc1N1bW1hcnlTdGF0ZT47XG4gICAgLy8gT25seSBleGlzdHMgZm9yIG9wZXJhdGlvbnMgdHJhY2tlZCB3aXRoIHNpemVzOyBjb3VudC1vbmx5IG9wZXJhdGlvbnMgKGdldEluZm8sIGRlbCwgLi4uKSBoYXZlIG5vIG1lYW5pbmdmdWwgc2l6ZSBicmVha2Rvd24uXG4gICAgc2l6ZVRyZWU/OiBUcmVlU3VtbWFyeTxBY2Nlc3NWYWx1ZSwgQWNjZXNzU3VtbWFyeVN0YXRlPjtcbn07XG5cbmNvbnN0IGFjY291bnRzID0gbmV3IE1hcDxzdHJpbmcsIE1hcDxzdHJpbmcsIE9wZXJhdGlvblN0YXRzPj4oKTtcblxuZnVuY3Rpb24gbWFrZVRyZWUoZ2V0VmFsdWU6ICh2YWx1ZTogQWNjZXNzVmFsdWUpID0+IG51bWJlcik6IFRyZWVTdW1tYXJ5PEFjY2Vzc1ZhbHVlLCBBY2Nlc3NTdW1tYXJ5U3RhdGU+IHtcbiAgICByZXR1cm4gbmV3IFRyZWVTdW1tYXJ5PEFjY2Vzc1ZhbHVlLCBBY2Nlc3NTdW1tYXJ5U3RhdGU+KHtcbiAgICAgICAgZ2V0UGF0aDogdmFsdWUgPT4gdmFsdWUucGF0aCxcbiAgICAgICAgY3JlYXRlU3VtbWFyeTogKCkgPT4gKHsgdG90YWw6IDAgfSksXG4gICAgICAgIGFkZFRvU3VtbWFyeTogKHZhbHVlLCBzdW1tYXJ5KSA9PiB7XG4gICAgICAgICAgICBzdW1tYXJ5LnRvdGFsICs9IGdldFZhbHVlKHZhbHVlKTtcbiAgICAgICAgfSxcbiAgICAgICAgbWVyZ2VTdW1tYXJpZXM6ICh0YXJnZXQsIHNvdXJjZSkgPT4ge1xuICAgICAgICAgICAgdGFyZ2V0LnRvdGFsICs9IHNvdXJjZS50b3RhbDtcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0V2VpZ2h0OiBzdW1tYXJ5ID0+IHN1bW1hcnkudG90YWwsXG4gICAgICAgIGV4cGVjdGVkT3V0cHV0Q291bnQ6IEVYUEVDVEVEX09VVFBVVF9DT1VOVCxcbiAgICB9KTtcbn1cblxuLyoqIENvdW50cyBvbmUgc3RvcmFnZSBhY2Nlc3MsIGluIG1lbW9yeSBvbmx5LiBzaXplIGlzIHRoZSBieXRlcyBpbnZvbHZlZCAoMCB3aGVuIHRoZSB0YXJnZXQgZG9lcyBub3QgZXhpc3QpOyBvbWl0IGl0IGVudGlyZWx5IGZvciBvcGVyYXRpb25zIHRoYXQgb25seSBjb3VudCBjYWxscywgd2hpY2ggdGhlbiBvbmx5IGdldCBhIGNvdW50IHRyZWUuICovXG5leHBvcnQgZnVuY3Rpb24gdHJhY2tBY2Nlc3MoY29uZmlnOiB7IGFjY291bnQ6IHN0cmluZzsgb3BlcmF0aW9uOiBzdHJpbmc7IHBhdGg6IHN0cmluZzsgc2l6ZT86IG51bWJlciB9KTogdm9pZCB7XG4gICAgbGV0IG9wZXJhdGlvbnMgPSBhY2NvdW50cy5nZXQoY29uZmlnLmFjY291bnQpO1xuICAgIGlmICghb3BlcmF0aW9ucykge1xuICAgICAgICBvcGVyYXRpb25zID0gbmV3IE1hcCgpO1xuICAgICAgICBhY2NvdW50cy5zZXQoY29uZmlnLmFjY291bnQsIG9wZXJhdGlvbnMpO1xuICAgIH1cbiAgICBsZXQgc3RhdHMgPSBvcGVyYXRpb25zLmdldChjb25maWcub3BlcmF0aW9uKTtcbiAgICBpZiAoIXN0YXRzKSB7XG4gICAgICAgIHN0YXRzID0geyB0b3RhbENvdW50OiAwLCB0b3RhbFNpemU6IDAsIGNvdW50VHJlZTogbWFrZVRyZWUoKCkgPT4gMSkgfTtcbiAgICAgICAgb3BlcmF0aW9ucy5zZXQoY29uZmlnLm9wZXJhdGlvbiwgc3RhdHMpO1xuICAgIH1cbiAgICBsZXQgdmFsdWU6IEFjY2Vzc1ZhbHVlID0geyBwYXRoOiBjb25maWcucGF0aCwgc2l6ZTogY29uZmlnLnNpemUgfHwgMCB9O1xuICAgIHN0YXRzLnRvdGFsQ291bnQrKztcbiAgICBzdGF0cy5jb3VudFRyZWUuYWRkKHZhbHVlKTtcbiAgICBpZiAoY29uZmlnLnNpemUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgc2l6ZVRyZWUgPSBzdGF0cy5zaXplVHJlZTtcbiAgICAgICAgaWYgKCFzaXplVHJlZSkge1xuICAgICAgICAgICAgc2l6ZVRyZWUgPSBtYWtlVHJlZSh2ID0+IHYuc2l6ZSk7XG4gICAgICAgICAgICBzdGF0cy5zaXplVHJlZSA9IHNpemVUcmVlO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRzLnRvdGFsU2l6ZSArPSBjb25maWcuc2l6ZTtcbiAgICAgICAgc2l6ZVRyZWUuYWRkKHZhbHVlKTtcbiAgICB9XG59XG5cbi8qKiBNZXRob2QgZGVjb3JhdG9yIGZhY3RvcnksIGZvciBBUEkgbWV0aG9kcyB3aG9zZSBzaW5nbGUgY29uZmlnLW9iamVjdCBhcmd1bWVudCBoYXMgYWNjb3VudCBhbmQgYnVja2V0TmFtZTogdHJhY2tzIHRoZSBhY2Nlc3MgKGFzIGBidWNrZXROYW1lL3BhdGhgKSBhZnRlciB0aGUgbWV0aG9kIHN1Y2NlZWRzLiBTaXplcyBjb21lIGZyb20gdGhlIGNvbmZpZydzIGRhdGEgKHdyaXRlcykgb3IgdGhlIHJlc3VsdCdzIGRhdGEgKHJlYWRzKTsgb3BlcmF0aW9ucyB3aXRob3V0IGVpdGhlciBhcmUgY291bnQtb25seS4gQXJyYXkgcmVzdWx0cyAobGlzdGluZ3MgLSBmaW5kSW5mbywgZ2V0Q2hhbmdlc0FmdGVyKSBhcmUgdHJhY2tlZCBhcyB0d28gYnJlYWtkb3duczogXCI8b3A+IHF1ZXJpZXNcIiAtIG9uZSBhY2Nlc3MgcGVyIENBTEwsIGF0IHRoZSBxdWVyeSBwcmVmaXgsIHNpemVkIGJ5IHRoZSBudW1iZXIgb2YgcmVzdWx0cyAoc28gdGhlIHRyZWUgc2hvd3Mgd2hpY2ggUVVFUlkgcmV0dXJucyB0aGUgbW9zdCkgLSBhbmQgXCI8b3A+IHJlc3VsdHNcIiAtIG9uZSBjb3VudC1vbmx5IGFjY2VzcyBwZXIgcmV0dXJuZWQgcGF0aCAoc28gdGhlIHRyZWUgc2hvd3Mgd2hpY2ggUEFUSFMgY29tZSBiYWNrIG1vc3QpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRyYWNrQWNjZXNzQ2FsbChvcGVyYXRpb246IHN0cmluZykge1xuICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0OiB1bmtub3duLCBrZXk6IHN0cmluZywgZGVzY3JpcHRvcjogUHJvcGVydHlEZXNjcmlwdG9yKTogdm9pZCB7XG4gICAgICAgIGxldCBvcmlnaW5hbCA9IGRlc2NyaXB0b3IudmFsdWUgYXMgKC4uLmFyZ3M6IHVua25vd25bXSkgPT4gUHJvbWlzZTx1bmtub3duPjtcbiAgICAgICAgZGVzY3JpcHRvci52YWx1ZSA9IGFzeW5jIGZ1bmN0aW9uICguLi5hcmdzOiB1bmtub3duW10pOiBQcm9taXNlPHVua25vd24+IHtcbiAgICAgICAgICAgIGxldCBjb25maWcgPSBhcmdzWzBdIGFzIHsgYWNjb3VudDogc3RyaW5nOyBidWNrZXROYW1lOiBzdHJpbmc7IHBhdGg/OiBzdHJpbmc7IHByZWZpeD86IHN0cmluZzsgZGF0YT86IEJ1ZmZlciB9O1xuICAgICAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IG9yaWdpbmFsLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgbGV0IGJhc2UgPSBgJHtjb25maWcuYnVja2V0TmFtZX0vYDtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHJlc3VsdCkpIHtcbiAgICAgICAgICAgICAgICAvLyBUaGUgcXVlcnksIHNpemVkIGJ5IGhvdyBtYW55IHJlc3VsdHMgaXQgcmV0dXJuZWQgKHdoaWNoIHF1ZXJ5IGlzIGhlYXZpZXN0KTsgYW5kIGVhY2ggcmV0dXJuZWQgcGF0aCwgY291bnQtb25seSAod2hpY2ggcGF0aHMgY29tZSBiYWNrIG1vc3QpXG4gICAgICAgICAgICAgICAgdHJhY2tBY2Nlc3MoeyBhY2NvdW50OiBjb25maWcuYWNjb3VudCwgb3BlcmF0aW9uOiBgJHtvcGVyYXRpb259IHF1ZXJpZXNgLCBwYXRoOiBiYXNlICsgKGNvbmZpZy5wcmVmaXggfHwgY29uZmlnLnBhdGggfHwgXCJcIiksIHNpemU6IHJlc3VsdC5sZW5ndGggfSk7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgZW50cnkgb2YgcmVzdWx0IGFzIHsgcGF0aDogc3RyaW5nIH1bXSkge1xuICAgICAgICAgICAgICAgICAgICB0cmFja0FjY2Vzcyh7IGFjY291bnQ6IGNvbmZpZy5hY2NvdW50LCBvcGVyYXRpb246IGAke29wZXJhdGlvbn0gcmVzdWx0c2AsIHBhdGg6IGJhc2UgKyBlbnRyeS5wYXRoIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IHNpemU6IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGlmIChjb25maWcuZGF0YSkge1xuICAgICAgICAgICAgICAgIHNpemUgPSBjb25maWcuZGF0YS5sZW5ndGg7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGxldCBkYXRhID0gKHJlc3VsdCBhcyB7IGRhdGE/OiBCdWZmZXIgfSB8IHVuZGVmaW5lZCk/LmRhdGE7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEpIHNpemUgPSBkYXRhLmxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRyYWNrQWNjZXNzKHsgYWNjb3VudDogY29uZmlnLmFjY291bnQsIG9wZXJhdGlvbiwgcGF0aDogYmFzZSArIGNvbmZpZy5wYXRoLCBzaXplIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfTtcbiAgICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0QWNjZXNzVG90YWxzKGFjY291bnQ6IHN0cmluZyk6IEFjY2Vzc1RvdGFscyB7XG4gICAgbGV0IHJlc3VsdDogQWNjZXNzVG90YWxzID0ge307XG4gICAgbGV0IG9wZXJhdGlvbnMgPSBhY2NvdW50cy5nZXQoYWNjb3VudCk7XG4gICAgaWYgKCFvcGVyYXRpb25zKSByZXR1cm4gcmVzdWx0O1xuICAgIGZvciAobGV0IFtvcGVyYXRpb24sIHN0YXRzXSBvZiBvcGVyYXRpb25zKSB7XG4gICAgICAgIHJlc3VsdFtvcGVyYXRpb25dID0geyBjb3VudDogc3RhdHMudG90YWxDb3VudCwgc2l6ZTogc3RhdHMudG90YWxTaXplIH07XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkQWNjZXNzU3VtbWFyaWVzKGNvbmZpZzogeyBhY2NvdW50OiBzdHJpbmc7IG9wZXJhdGlvbjogc3RyaW5nOyBtYXhDb3VudDogbnVtYmVyOyB3ZWlnaHRCeVNpemU/OiBib29sZWFuIH0pOiBTdW1tYXJ5RW50cnk8QWNjZXNzU3VtbWFyeVN0YXRlPltdIHtcbiAgICBsZXQgb3BlcmF0aW9ucyA9IGFjY291bnRzLmdldChjb25maWcuYWNjb3VudCk7XG4gICAgbGV0IHN0YXRzID0gb3BlcmF0aW9ucyAmJiBvcGVyYXRpb25zLmdldChjb25maWcub3BlcmF0aW9uKTtcbiAgICBpZiAoIXN0YXRzKSByZXR1cm4gW107XG4gICAgLy8gQ291bnQtb25seSBvcGVyYXRpb25zIGhhdmUgbm8gc2l6ZSB0cmVlLCBpbiB3aGljaCBjYXNlIHdlaWdodEJ5U2l6ZSBpcyBpZ25vcmVkIGFuZCB0aGUgY291bnQgYnJlYWtkb3duIGlzIHJldHVybmVkLlxuICAgIGxldCBzaXplVHJlZSA9IHN0YXRzLnNpemVUcmVlO1xuICAgIGlmIChjb25maWcud2VpZ2h0QnlTaXplICYmIHNpemVUcmVlKSB7XG4gICAgICAgIHJldHVybiBzaXplVHJlZS5nZXRTdW1tYXJpZXMoY29uZmlnLm1heENvdW50KTtcbiAgICB9XG4gICAgcmV0dXJuIHN0YXRzLmNvdW50VHJlZS5nZXRTdW1tYXJpZXMoY29uZmlnLm1heENvdW50KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNsZWFyQWNjb3VudEFjY2Vzc1N0YXRzKGFjY291bnQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmIChhY2NvdW50cy5kZWxldGUoYWNjb3VudCkpIHtcbiAgICAgICAgY29uc29sZS5sb2coYENsZWFyZWQgdGhlIGluLW1lbW9yeSBhY2Nlc3Mgc3RhdGlzdGljcyBmb3IgYWNjb3VudCAke2FjY291bnR9YCk7XG4gICAgfVxufVxuIl19
109
- /* _JS_SOURCE_HASH = "5b66ff4472e73ddf1389746060571f5212e68ab1dce79a4009302ac81b344188"; */
109
+ /* _JS_SOURCE_HASH = "75c91f8f211e770f7c7d38428d27bc4906e041a99c6da53aa4b8739c930e9b61"; */