sliftutils 1.7.137 → 1.7.139

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 (46) hide show
  1. package/bin/printmachineid.js +5 -0
  2. package/examplestorage/browser.tsx +1 -2
  3. package/index.d.ts +2 -3
  4. package/misc/dist/strings.ts.cache +2 -2
  5. package/misc/https/certs.d.ts +1 -0
  6. package/misc/https/certs.ts +6 -1
  7. package/misc/https/dist/certs.ts.cache +9 -4
  8. package/misc/https/dist/persistentLocalStorage.ts.cache +14 -4
  9. package/misc/https/persistentLocalStorage.d.ts +1 -0
  10. package/misc/https/persistentLocalStorage.ts +10 -0
  11. package/package.json +5 -3
  12. package/security/authorizedKeys/daemon/dist/changes.ts.cache +2 -2
  13. package/security/authorizedKeys/daemon/dist/git.ts.cache +2 -2
  14. package/security/authorizedKeys/daemon/dist/notify.ts.cache +2 -2
  15. package/security/authorizedKeys/daemon/dist/paths.ts.cache +2 -2
  16. package/security/authorizedKeys/daemon/dist/repoFiles.ts.cache +2 -2
  17. package/security/authorizedKeys/daemon/dist/sessions.ts.cache +2 -2
  18. package/security/authorizedKeys/daemon/dist/state.ts.cache +2 -2
  19. package/security/authorizedKeys/dist/authorizedKeys.ts.cache +2 -2
  20. package/security/authorizedKeys/dist/keysRepo.ts.cache +2 -2
  21. package/security/authorizedKeys/dist/revokeSource.ts.cache +2 -2
  22. package/security/authorizedKeys/dist/sources.ts.cache +2 -2
  23. package/security/helpers/dist/paths.ts.cache +2 -2
  24. package/security/helpers/dist/remoteSSH.ts.cache +2 -2
  25. package/security/helpers/dist/spawn.ts.cache +2 -2
  26. package/security/keys/dist/deriveKey.ts.cache +2 -2
  27. package/security/keys/dist/sshKeyFile.ts.cache +2 -2
  28. package/security/machines/dist/machines.ts.cache +13 -13
  29. package/security/machines/dist/printMachineId.ts.cache +21 -0
  30. package/security/machines/identity2.ts +94 -6
  31. package/security/machines/machines.ts +11 -11
  32. package/security/machines/printMachineId.ts +19 -0
  33. package/security/notifications/dist/discord.ts.cache +2 -2
  34. package/security/signedFiles/dist/manifest.ts.cache +2 -2
  35. package/security/signedFiles/dist/sshsig.ts.cache +2 -2
  36. package/storage/remoteStorage/ArchivesRemote.d.ts +0 -1
  37. package/storage/remoteStorage/ArchivesRemote.ts +2 -3
  38. package/storage/remoteStorage/createArchives.d.ts +0 -1
  39. package/storage/remoteStorage/createArchives.ts +56 -45
  40. package/storage/remoteStorage/dist/ArchivesRemote.ts.cache +3 -4
  41. package/storage/remoteStorage/dist/createArchives.ts.cache +2 -2
  42. package/storage/remoteStorage/dist/sourceWrapper.ts.cache +3 -3
  43. package/storage/remoteStorage/dist/storageController.ts.cache +3 -4
  44. package/storage/remoteStorage/sourceWrapper.ts +1 -1
  45. package/storage/remoteStorage/storageController.d.ts +0 -1
  46. package/storage/remoteStorage/storageController.ts +2 -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
  var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule && mod.default) ? mod : { "default": mod };
4
4
  };
@@ -135,4 +135,4 @@ function verifySSHSIG(config) {
135
135
  }
136
136
  exports.verifySSHSIG = verifySSHSIG;
137
137
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Noc2lnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsic3Noc2lnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLG9EQUE0QjtBQUU1QixtR0FBbUc7QUFDbkcsOEZBQThGO0FBQzlGLHFDQUFxQztBQUNyQyxFQUFFO0FBQ0YsNkZBQTZGO0FBQzdGLG1HQUFtRztBQUNuRyxvRUFBb0U7QUFFcEUsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDO0FBQ3ZCLGdHQUFnRztBQUNoRyxNQUFNLG1CQUFtQixHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsMEJBQTBCLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFFM0UsbUVBQW1FO0FBQ25FLE1BQU0sTUFBTTtJQUVSLFlBQW9CLE1BQWM7UUFBZCxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBRDFCLFdBQU0sR0FBRyxDQUFDLENBQUM7SUFDbUIsQ0FBQztJQUN2QyxFQUFFO1FBQ0UsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBQ0QsR0FBRztRQUNDLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNsRCxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQztRQUNqQixPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBQ0QsTUFBTTtRQUNGLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUN4QixJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLENBQUM7UUFDcEUsSUFBSSxDQUFDLE1BQU0sSUFBSSxNQUFNLENBQUM7UUFDdEIsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztJQUNE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LE1BQU0sSUFBSSxLQUFLLENBQUMsK0JBQStCLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzlFLENBQUM7SUFFRCxJQUFJLENBQUMsZ0JBQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsRUFBRSxZQUFZLENBQUMsRUFBRSxDQUFDO1FBQ3pFLE1BQU0sSUFBSSxLQUFLLENBQUMsc0NBQXNDLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRUQsSUFBSSxXQUFXLEdBQUcsU0FBUyxHQUFHLGdCQUFNLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNwSCxPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUcsT0FBTyxJQUFJLGFBQWEsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxXQUFXLEVBQUUsQ0FBQztBQUN4RixDQUFDO0FBMUVELG9DQTBFQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjcnlwdG8gZnJvbSBcImNyeXB0b1wiO1xuXG4vLyBWZXJpZmllcyBhbiBTU0hTSUcgc2lnbmF0dXJlICh0aGUgZm9ybWF0IHNzaC1rZXlnZW4gLVkgc2lnbiBwcm9kdWNlcykgaW4gcHJvY2Vzcywgc28gbm90aGluZyBoYXNcbi8vIHRvIHNoZWxsIG91dCB0byBzc2gta2V5Z2VuIHRvIGNoZWNrIG9uZS4gVGhlIHdpcmUgZm9ybWF0IGlzIFBST1RPQ09MLnNzaHNpZywgYW5kIHRoZSBhY3R1YWxcbi8vIGNoZWNrIGlzIG9uZSBlZDI1NTE5IHZlcmlmaWNhdGlvbi5cbi8vXG4vLyBCb3RoIGVkMjU1MTkgYW5kIHRoZSBoYXJkd2FyZSBzay1lZDI1NTE5IHZhcmlhbnQgYXJlIGhhbmRsZWQsIHNpbmNlIHNpZ25maWxlcyBzaWducyB3aXRoIGFcbi8vIGhhcmR3YXJlIGVkMjU1MTktc2sga2V5LiBUaGUgc2sgdmFyaWFudCBzaWducyBhIGxpdHRsZSBtb3JlIHRoYW4gdGhlIG1lc3NhZ2UgLSB0aGUgYXV0aGVudGljYXRvclxuLy8gZmxhZ3MgYW5kIGNvdW50ZXIgZ28gaW4gdG9vIC0gYnV0IGl0IGlzIHN0aWxsIGVkMjU1MTkgdW5kZXJuZWF0aC5cblxuY29uc3QgTUFHSUMgPSBcIlNTSFNJR1wiO1xuLy8gQW4gZWQyNTUxOSBwdWJsaWMga2V5IGFzIGEgREVSIFNQS0kgaXMgdGhpcyBmaXhlZCAxMiBieXRlIGhlYWRlciBmb2xsb3dlZCBieSB0aGUgMzIgYnl0ZSBrZXkuXG5jb25zdCBFRDI1NTE5X1NQS0lfUFJFRklYID0gQnVmZmVyLmZyb20oXCIzMDJhMzAwNTA2MDMyYjY1NzAwMzIxMDBcIiwgXCJoZXhcIik7XG5cbi8qKiBSZWFkcyB0aGUgbGVuZ3RoIHByZWZpeGVkIGZpZWxkcyBTU0ggd2lyZSBmb3JtYXQgaXMgbWFkZSBvZi4gKi9cbmNsYXNzIFJlYWRlciB7XG4gICAgcHJpdmF0ZSBvZmZzZXQgPSAwO1xuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgYnVmZmVyOiBCdWZmZXIpIHsgfVxuICAgIHU4KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5idWZmZXIucmVhZFVJbnQ4KHRoaXMub2Zmc2V0KyspO1xuICAgIH1cbiAgICB1MzIoKSB7XG4gICAgICAgIGxldCB2YWx1ZSA9IHRoaXMuYnVmZmVyLnJlYWRVSW50MzJCRSh0aGlzLm9mZnNldCk7XG4gICAgICAgIHRoaXMub2Zmc2V0ICs9IDQ7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgc3RyaW5nKCkge1xuICAgICAgICBsZXQgbGVuZ3RoID0gdGhpcy51MzIoKTtcbiAgICAgICAgbGV0IHZhbHVlID0gdGhpcy5idWZmZXIuc3ViYXJyYXkodGhpcy5vZmZzZXQsIHRoaXMub2Zmc2V0ICsgbGVuZ3RoKTtcbiAgICAgICAgdGhpcy5vZmZzZXQgKz0gbGVuZ3RoO1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIHJlbWFpbmluZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYnVmZmVyLmxlbmd0aCAtIHRoaXMub2Zmc2V0O1xuICAgIH1cbn1cblxuLyoqIE9uZSBsZW5ndGggcHJlZml4ZWQgZmllbGQsIHRoZSB3YXkgU1NIIHdyaXRlcyB0aGVtLiAqL1xuZnVuY3Rpb24gc3NoU3RyaW5nKGJ5dGVzOiBCdWZmZXIpIHtcbiAgICBsZXQgbGVuZ3RoID0gQnVmZmVyLmFsbG9jKDQpO1xuICAgIGxlbmd0aC53cml0ZVVJbnQzMkJFKGJ5dGVzLmxlbmd0aCk7XG4gICAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoW2xlbmd0aCwgYnl0ZXNdKTtcbn1cblxuZnVuY3Rpb24gaGFzaChhbGdvcml0aG06IHN0cmluZywgZGF0YTogQnVmZmVyKSB7XG4gICAgLy8gU1NIU0lHIG5hbWVzIHNoYTI1NiBvciBzaGE1MTI7IG5vZGUgdXNlcyB0aGUgc2FtZSBuYW1lcy5cbiAgICBpZiAoYWxnb3JpdGhtICE9PSBcInNoYTI1NlwiICYmIGFsZ29yaXRobSAhPT0gXCJzaGE1MTJcIikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIFNTSFNJRyBoYXNoIGFsZ29yaXRobSAke0pTT04uc3RyaW5naWZ5KGFsZ29yaXRobSl9YCk7XG4gICAgfVxuICAgIHJldHVybiBjcnlwdG8uY3JlYXRlSGFzaChhbGdvcml0aG0pLnVwZGF0ZShkYXRhKS5kaWdlc3QoKTtcbn1cblxuZnVuY3Rpb24gZWQyNTUxOVB1YmxpY0tleShyYXdLZXk6IEJ1ZmZlcikge1xuICAgIGlmIChyYXdLZXkubGVuZ3RoICE9PSAzMikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGEgMzIgYnl0ZSBlZDI1NTE5IGtleSwgd2FzICR7cmF3S2V5Lmxlbmd0aH1gKTtcbiAgICB9XG4gICAgcmV0dXJuIGNyeXB0by5jcmVhdGVQdWJsaWNLZXkoe1xuICAgICAgICBrZXk6IEJ1ZmZlci5jb25jYXQoW0VEMjU1MTlfU1BLSV9QUkVGSVgsIHJhd0tleV0pLFxuICAgICAgICBmb3JtYXQ6IFwiZGVyXCIsXG4gICAgICAgIHR5cGU6IFwic3BraVwiLFxuICAgIH0pO1xufVxuXG4vKiogVmVyaWZpZXMgYW4gU1NIU0lHIHNpZ25hdHVyZSBvdmVyIGEgbWVzc2FnZSwgYW5kIHRoYXQgaXQgd2FzIG1hZGUgZm9yIHRoZSBnaXZlbiBuYW1lc3BhY2UuXG4gICAgUmV0dXJucyB0aGUgc2lnbmluZyBwdWJsaWMga2V5IGFuZCBpdHMgZmluZ2VycHJpbnQsIGluIHRoZSBmb3JtcyBzc2gta2V5Z2VuIHJlcG9ydHMgdGhlbS5cbiAgICBUaHJvd3MgaWYgaXQgZG9lcyBub3QgdmVyaWZ5LCBvciBpcyBub3QgZm9yIHRoaXMgbmFtZXNwYWNlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZlcmlmeVNTSFNJRyhjb25maWc6IHsgc2lnbmF0dXJlOiBzdHJpbmc7IG1lc3NhZ2U6IEJ1ZmZlcjsgbmFtZXNwYWNlOiBzdHJpbmcgfSkge1xuICAgIGxldCB7IHNpZ25hdHVyZSwgbWVzc2FnZSwgbmFtZXNwYWNlIH0gPSBjb25maWc7XG5cbiAgICBsZXQgYm9keSA9IHNpZ25hdHVyZS5zcGxpdChcIlxcblwiKS5maWx0ZXIobGluZSA9PiBsaW5lICYmICFsaW5lLnN0YXJ0c1dpdGgoXCItLS0tLVwiKSkuam9pbihcIlwiKTtcbiAgICBsZXQgYmxvYiA9IEJ1ZmZlci5mcm9tKGJvZHksIFwiYmFzZTY0XCIpO1xuICAgIGlmIChibG9iLnN1YmFycmF5KDAsIE1BR0lDLmxlbmd0aCkudG9TdHJpbmcoKSAhPT0gTUFHSUMpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBhbiAke01BR0lDfSBzaWduYXR1cmUsIHN0YXJ0ZWQgd2l0aCAke0pTT04uc3RyaW5naWZ5KGJsb2Iuc3ViYXJyYXkoMCwgTUFHSUMubGVuZ3RoKS50b1N0cmluZygpKX1gKTtcbiAgICB9XG5cbiAgICBsZXQgcmVhZGVyID0gbmV3IFJlYWRlcihibG9iLnN1YmFycmF5KE1BR0lDLmxlbmd0aCkpO1xuICAgIGxldCB2ZXJzaW9uID0gcmVhZGVyLnUzMigpO1xuICAgIGlmICh2ZXJzaW9uICE9PSAxKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgU1NIU0lHIHZlcnNpb24gMSwgd2FzICR7dmVyc2lvbn1gKTtcbiAgICB9XG4gICAgbGV0IHB1YmxpY0tleUJsb2IgPSByZWFkZXIuc3RyaW5nKCk7XG4gICAgbGV0IHNpZ25hdHVyZU5hbWVzcGFjZSA9IHJlYWRlci5zdHJpbmcoKS50b1N0cmluZygpO1xuICAgIHJlYWRlci5zdHJpbmcoKTsgLy8gcmVzZXJ2ZWRcbiAgICBsZXQgaGFzaEFsZ29yaXRobSA9IHJlYWRlci5zdHJpbmcoKS50b1N0cmluZygpO1xuICAgIGxldCBzaWduYXR1cmVCbG9iID0gcmVhZGVyLnN0cmluZygpO1xuXG4gICAgaWYgKHNpZ25hdHVyZU5hbWVzcGFjZSAhPT0gbmFtZXNwYWNlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgU2lnbmF0dXJlIGlzIGZvciBuYW1lc3BhY2UgJHtKU09OLnN0cmluZ2lmeShzaWduYXR1cmVOYW1lc3BhY2UpfSwgZXhwZWN0ZWQgJHtKU09OLnN0cmluZ2lmeShuYW1lc3BhY2UpfWApO1xuICAgIH1cblxuICAgIGxldCBwdWJsaWNLZXlSZWFkZXIgPSBuZXcgUmVhZGVyKHB1YmxpY0tleUJsb2IpO1xuICAgIGxldCBrZXlUeXBlID0gcHVibGljS2V5UmVhZGVyLnN0cmluZygpLnRvU3RyaW5nKCk7XG4gICAgbGV0IHJhd0tleSA9IHB1YmxpY0tleVJlYWRlci5zdHJpbmcoKTtcbiAgICBsZXQgYXBwbGljYXRpb24gPSBwdWJsaWNLZXlSZWFkZXIucmVtYWluaW5nKCkgPyBwdWJsaWNLZXlSZWFkZXIuc3RyaW5nKCkgOiBCdWZmZXIuYWxsb2MoMCk7XG5cbiAgICBsZXQgc2lnbmF0dXJlUmVhZGVyID0gbmV3IFJlYWRlcihzaWduYXR1cmVCbG9iKTtcbiAgICBsZXQgc2lnbmF0dXJlVHlwZSA9IHNpZ25hdHVyZVJlYWRlci5zdHJpbmcoKS50b1N0cmluZygpO1xuICAgIGxldCByYXdTaWduYXR1cmUgPSBzaWduYXR1cmVSZWFkZXIuc3RyaW5nKCk7XG4gICAgaWYgKHNpZ25hdHVyZVR5cGUgIT09IGtleVR5cGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBTaWduYXR1cmUgdHlwZSAke3NpZ25hdHVyZVR5cGV9IGRvZXMgbm90IG1hdGNoIGtleSB0eXBlICR7a2V5VHlwZX1gKTtcbiAgICB9XG5cbiAgICAvLyBUaGUgYnl0ZXMgdGhlIHNpZ25hdHVyZSBpcyBvdmVyOiB0aGUgbWFnaWMsIHRoZSBuYW1lc3BhY2UsIHRoZSByZXNlcnZlZCBmaWVsZCwgdGhlIGhhc2hcbiAgICAvLyBhbGdvcml0aG0sIGFuZCB0aGUgaGFzaCBvZiB0aGUgbWVzc2FnZS4gTmV2ZXIgdGhlIG1lc3NhZ2UgaXRzZWxmLCBzbyBhIGh1Z2UgZmlsZSBzdGlsbCBzaWduc1xuICAgIC8vIGEgZml4ZWQgc2l6ZSBibG9iLlxuICAgIGxldCBzaWduZWQgPSBCdWZmZXIuY29uY2F0KFtcbiAgICAgICAgQnVmZmVyLmZyb20oTUFHSUMpLFxuICAgICAgICBzc2hTdHJpbmcoQnVmZmVyLmZyb20oc2lnbmF0dXJlTmFtZXNwYWNlKSksXG4gICAgICAgIHNzaFN0cmluZyhCdWZmZXIuYWxsb2MoMCkpLFxuICAgICAgICBzc2hTdHJpbmcoQnVmZmVyLmZyb20oaGFzaEFsZ29yaXRobSkpLFxuICAgICAgICBzc2hTdHJpbmcoaGFzaChoYXNoQWxnb3JpdGhtLCBtZXNzYWdlKSksXG4gICAgXSk7XG5cbiAgICBsZXQgdG9WZXJpZnk6IEJ1ZmZlcjtcbiAgICBpZiAoa2V5VHlwZSA9PT0gXCJzc2gtZWQyNTUxOVwiKSB7XG4gICAgICAgIHRvVmVyaWZ5ID0gc2lnbmVkO1xuICAgIH0gZWxzZSBpZiAoa2V5VHlwZSA9PT0gXCJzay1zc2gtZWQyNTUxOUBvcGVuc3NoLmNvbVwiKSB7XG4gICAgICAgIC8vIEEgaGFyZHdhcmUga2V5IHNpZ25zIG92ZXIgd2hhdCB0aGUgYXV0aGVudGljYXRvciBzYXcsIG5vdCB0aGUgYmxvYiBkaXJlY3RseTogdGhlIGhhc2ggb2ZcbiAgICAgICAgLy8gdGhlIGFwcGxpY2F0aW9uIGl0IGlzIHNjb3BlZCB0bywgdGhlIGZsYWdzIGFuZCBjb3VudGVyIGl0IHJldHVybmVkLCBhbmQgdGhlIGhhc2ggb2YgdGhlXG4gICAgICAgIC8vIGJsb2IuIFJlY29uc3RydWN0aW5nIHRoYXQgaXMgdGhlIHdob2xlIGRpZmZlcmVuY2UgZnJvbSBhIHBsYWluIGVkMjU1MTkgc2lnbmF0dXJlLlxuICAgICAgICBsZXQgZmxhZ3MgPSBzaWduYXR1cmVSZWFkZXIudTgoKTtcbiAgICAgICAgbGV0IGNvdW50ZXIgPSBzaWduYXR1cmVSZWFkZXIudTMyKCk7XG4gICAgICAgIGxldCBjb3VudGVyQnl0ZXMgPSBCdWZmZXIuYWxsb2MoNCk7XG4gICAgICAgIGNvdW50ZXJCeXRlcy53cml0ZVVJbnQzMkJFKGNvdW50ZXIpO1xuICAgICAgICB0b1ZlcmlmeSA9IEJ1ZmZlci5jb25jYXQoW1xuICAgICAgICAgICAgaGFzaChcInNoYTI1NlwiLCBhcHBsaWNhdGlvbiksXG4gICAgICAgICAgICBCdWZmZXIuZnJvbShbZmxhZ3NdKSxcbiAgICAgICAgICAgIGNvdW50ZXJCeXRlcyxcbiAgICAgICAgICAgIGhhc2goXCJzaGEyNTZcIiwgc2lnbmVkKSxcbiAgICAgICAgXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBTU0hTSUcga2V5IHR5cGUgJHtKU09OLnN0cmluZ2lmeShrZXlUeXBlKX1gKTtcbiAgICB9XG5cbiAgICBpZiAoIWNyeXB0by52ZXJpZnkobnVsbCwgdG9WZXJpZnksIGVkMjU1MTlQdWJsaWNLZXkocmF3S2V5KSwgcmF3U2lnbmF0dXJlKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBTU0hTSUcgc2lnbmF0dXJlIGRvZXMgbm90IHZlcmlmeWApO1xuICAgIH1cblxuICAgIGxldCBmaW5nZXJwcmludCA9IFwiU0hBMjU2OlwiICsgY3J5cHRvLmNyZWF0ZUhhc2goXCJzaGEyNTZcIikudXBkYXRlKHB1YmxpY0tleUJsb2IpLmRpZ2VzdChcImJhc2U2NFwiKS5yZXBsYWNlKC89KyQvLCBcIlwiKTtcbiAgICByZXR1cm4geyBwdWJsaWNLZXk6IGAke2tleVR5cGV9ICR7cHVibGljS2V5QmxvYi50b1N0cmluZyhcImJhc2U2NFwiKX1gLCBmaW5nZXJwcmludCB9O1xufVxuIl19
138
- /* _JS_SOURCE_HASH = "7f324bd09b189e332acb445a653f428bd350f4d85014651c38ccff1d18f10d20"; */
138
+ /* _JS_SOURCE_HASH = "7806dd475f184dc11a03815e46fb4e4e3f975c3a65ac16bd167b7b6936c9149b"; */
@@ -39,7 +39,6 @@ export declare class ArchivesRemote implements IArchives {
39
39
  machineId: string;
40
40
  ip: string;
41
41
  reason: string;
42
- addMachineCommand: string;
43
42
  } | undefined>;
44
43
  hasWriteAccess(): Promise<boolean>;
45
44
  private registerAccessRequest;
@@ -106,14 +106,13 @@ export class ArchivesRemote implements IArchives {
106
106
  }
107
107
 
108
108
  // Returns undefined if this machine has access to the account. Otherwise returns our machineId + ip as the server sees them, why we were refused, and the exact command that grants access.
109
- public async waitingForAccess(): Promise<{ machineId: string; ip: string; reason: string; addMachineCommand: string } | undefined> {
109
+ public async waitingForAccess(): Promise<{ machineId: string; ip: string; reason: string } | undefined> {
110
110
  let state = await this.callAuthed(() => this.controller.getAccessState({ account: this.account }));
111
111
  if (state.hasAccess) return undefined;
112
112
  return {
113
113
  machineId: state.machineId,
114
114
  ip: state.ip,
115
115
  reason: state.reason || "",
116
- addMachineCommand: state.addMachineCommand || "",
117
116
  };
118
117
  }
119
118
 
@@ -127,7 +126,7 @@ export class ArchivesRemote implements IArchives {
127
126
  if (Date.now() - this.lastDeniedLog < timeInMinute) return;
128
127
  let state = await this.callAuthed(() => this.controller.getAccessState({ account: this.account }));
129
128
  this.lastDeniedLog = Date.now();
130
- console.log(`No access to storage account ${JSON.stringify(this.account)} on ${this.parsed.address}:${this.parsed.port} (our machine ${state.machineId}, ip ${state.ip}). ${state.reason || ""} Grant it with: ${state.addMachineCommand || ""}`);
129
+ console.log(`No access to storage account ${JSON.stringify(this.account)} on ${this.parsed.address}:${this.parsed.port}. ${state.reason || ""}`);
131
130
  }
132
131
 
133
132
  // Runs a call, authenticating (and re-authenticating after reconnects) and waiting for account access as needed. With waitForAccess false, denied calls throw immediately instead - but the access request is still registered (in the background), so the denial is grantable.
@@ -26,7 +26,6 @@ export declare class ArchivesChain implements IArchives {
26
26
  machineId: string;
27
27
  ip: string;
28
28
  reason: string;
29
- addMachineCommand: string;
30
29
  } | undefined>;
31
30
  /** The sources that can serve a file right now, in dispatch order - the first is the write node, the one a plain read asks first. Each entry's url is what GetConfig.sourceUrl / GetInfoConfig.sourceUrl accept, so listing these and then reading with sourceUrl compares the copies the sources actually hold. */
32
31
  getFileSources(fileName: string): Promise<SourceConfig[]>;
@@ -319,7 +319,7 @@ export class ArchivesChain implements IArchives {
319
319
  return await this.run(state, config, run);
320
320
  }
321
321
 
322
- public async waitingForAccess(): Promise<{ machineId: string; ip: string; reason: string; addMachineCommand: string } | undefined> {
322
+ public async waitingForAccess(): Promise<{ machineId: string; ip: string; reason: string } | undefined> {
323
323
  let state = await this.state.getState();
324
324
  for (let source of state.sources) {
325
325
  // A source whose window has passed is never read or written again, so its access state is irrelevant - and asking a dead intermediate would just hang or throw. Future windows DO matter: access should be granted before their window starts.
@@ -419,58 +419,69 @@ export class ArchivesChain implements IArchives {
419
419
  let deadline = Date.now() + COVERING_RETRY_TIMEOUT;
420
420
  // Sources that failed during this call - with fallbacks, the next attempt covers their routes with the next source holding them instead
421
421
  let failed = new Set<SourceWrapper>();
422
+ // Why each of them failed, kept for the whole call: when the fallbacks run out, the error names every source that was tried and what each one said, not just whichever covering set happened to be last
423
+ let allFailures = new Map<SourceWrapper, Error>();
422
424
  let tries = 0;
423
425
  while (true) {
424
426
  tries++;
425
427
  let state = await this.state.getState();
426
- // 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
427
- let outcome = await (async (): Promise<{ values: T[] } | { error: Error }> => {
428
- let covering: SourceWrapper[];
429
- try {
430
- covering = this.selectCoveringSources(state, { fallbacks: config?.fallbacks, exclude: failed });
431
- } catch (e) {
432
- return { error: new Error(`${operation} cannot run: ${(e as Error).message}`) };
428
+ let selected: SourceWrapper[] | undefined;
429
+ let coverGap: Error | undefined;
430
+ try {
431
+ selected = this.selectCoveringSources(state, { fallbacks: config?.fallbacks, exclude: failed });
432
+ } catch (e) {
433
+ coverGap = e as Error;
434
+ }
435
+ if (!selected) {
436
+ let described = [...allFailures].map(([source, sourceError]) => `${source.getDebugName()}: ${sourceError.message ?? sourceError}`).join(" | ");
437
+ let error = new Error(
438
+ `${operation} cannot run: ${coverGap!.message}`
439
+ + (described ? ` ${allFailures.size} source(s) failed first: ${described}.` : "")
440
+ + ` Fallbacks = ${!!config?.fallbacks}. Tries = ${tries}, Took ${formatTime(Date.now() - startTime)}`
441
+ );
442
+ // With fallbacks the loop only lands here after every substitute was tried, so waiting will not produce a new source - the caller gets the whole cascade now
443
+ if (config?.fallbacks && allFailures.size) {
444
+ throw error;
433
445
  }
434
- let values: T[] = [];
435
- let failures: { source: SourceWrapper; error: Error }[] = [];
436
- let time = Date.now();
437
- await Promise.all(covering.map(async (source, index) => {
438
- let api = source.api;
439
- if (!api) {
440
- failed.add(source);
441
- failures.push({ source, error: new Error(`URL-only access, which cannot serve ${operation}`) });
442
- return;
443
- }
444
- try {
445
- values.push(await run(api));
446
- } catch (e) {
447
- if (!source.isConnected()) source.noteFailure();
448
- failed.add(source);
449
- failures.push({ source, error: e as Error });
450
- console.log(`Failed after ${formatTime(Date.now() - time)} index ${index} of ${covering.length}`);
451
- }
452
- }));
453
- if (!failures.length) return { values };
454
- if (failures.length === 1) {
455
- 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)}`) };
446
+ if (Date.now() >= deadline) {
447
+ throw error;
448
+ }
449
+ console.error(`${error.message}. Retrying in ${COVERING_RETRY_DELAY / 1000}s (giving up at ${formatDateTimeDetailed(deadline)}).`);
450
+ void this.state.recheckAvailability();
451
+ await delay(COVERING_RETRY_DELAY);
452
+ continue;
453
+ }
454
+ let covering = selected;
455
+ // 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
456
+ let values: T[] = [];
457
+ let failures: { source: SourceWrapper; error: Error }[] = [];
458
+ let time = Date.now();
459
+ await Promise.all(covering.map(async (source, index) => {
460
+ let api = source.api;
461
+ if (!api) {
462
+ failures.push({ source, error: new Error(`URL-only access, which cannot serve ${operation}`) });
463
+ return;
456
464
  }
457
- 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)}`) };
458
- })();
459
- if ("values" in outcome) return outcome.values;
460
- let error = outcome.error;
461
- // Substitution comes BEFORE the deadline check: a single connect timeout can eat the entire deadline, and giving up then - without ever trying the substitute that fallbacks exist for - throws exactly when falling back matters most. Substitution cannot loop past the deadline forever: every pass adds its failures to `failed`, so the substitutes run out with the sources.
462
- if (config?.fallbacks && failed.size) {
463
- let substitutable = false;
464
465
  try {
465
- this.selectCoveringSources(state, { fallbacks: true, exclude: failed });
466
- substitutable = true;
467
- } catch { }
468
- if (substitutable) {
469
- console.warn(`(retrying with fallbacks) ${error.message}`);
470
- continue;
466
+ values.push(await run(api));
467
+ } catch (e) {
468
+ if (!source.isConnected()) source.noteFailure();
469
+ failures.push({ source, error: e as Error });
470
+ console.log(`Failed after ${formatTime(Date.now() - time)} index ${index} of ${covering.length}`);
471
471
  }
472
- // No substitute covers the failed routes - retry the failed sources themselves after the delay
473
- failed.clear();
472
+ }));
473
+ if (!failures.length) return values;
474
+ for (let failure of failures) {
475
+ failed.add(failure.source);
476
+ allFailures.set(failure.source, failure.error);
477
+ }
478
+ let error = failures.length === 1
479
+ ? 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)}`)
480
+ : new Error(`${operation} failed because ${failures.length} of the ${covering.length} sources covering this attempt are unavailable: ${failures.map(x => `${x.source.getDebugName()}: ${x.error.message ?? x.error}`).join(" | ")}. Fallbacks = ${!!config?.fallbacks}. Tries = ${tries}, Took ${formatTime(Date.now() - startTime)}`);
481
+ // Substitution comes BEFORE the deadline check: a single connect timeout can eat the entire deadline, and giving up then - without ever trying the substitute that fallbacks exist for - throws exactly when falling back matters most. The loop keeps substituting for as long as a covering set exists; every pass adds its failures to `failed`, so it always terminates at the no-covering branch above, which throws everything collected here.
482
+ if (config?.fallbacks) {
483
+ console.warn(`(retrying with fallbacks) ${error.message}`);
484
+ continue;
474
485
  }
475
486
  if (Date.now() >= deadline) {
476
487
  throw error;
@@ -96,7 +96,6 @@ class ArchivesRemote {
96
96
  machineId: state.machineId,
97
97
  ip: state.ip,
98
98
  reason: state.reason || "",
99
- addMachineCommand: state.addMachineCommand || "",
100
99
  };
101
100
  }
102
101
  async hasWriteAccess() {
@@ -109,7 +108,7 @@ class ArchivesRemote {
109
108
  return;
110
109
  let state = await this.callAuthed(() => this.controller.getAccessState({ account: this.account }));
111
110
  this.lastDeniedLog = Date.now();
112
- console.log(`No access to storage account ${JSON.stringify(this.account)} on ${this.parsed.address}:${this.parsed.port} (our machine ${state.machineId}, ip ${state.ip}). ${state.reason || ""} Grant it with: ${state.addMachineCommand || ""}`);
111
+ console.log(`No access to storage account ${JSON.stringify(this.account)} on ${this.parsed.address}:${this.parsed.port}. ${state.reason || ""}`);
113
112
  }
114
113
  // Runs a call, authenticating (and re-authenticating after reconnects) and waiting for account access as needed. With waitForAccess false, denied calls throw immediately instead - but the access request is still registered (in the background), so the denial is grantable.
115
114
  async call(fnc) {
@@ -238,5 +237,5 @@ class ArchivesRemote {
238
237
  }
239
238
  }
240
239
  exports.ArchivesRemote = ArchivesRemote;
241
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXJjaGl2ZXNSZW1vdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJBcmNoaXZlc1JlbW90ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtRUFBZ0U7QUFDaEUsbURBQXdEO0FBQ3hELDJEQUFxRDtBQUNyRCxrREFBK0Y7QUFDL0YsNENBQXdRO0FBQ3hRLGlEQUFnRjtBQUNoRiwyREFHNkI7QUFFN0Isa1ZBQWtWO0FBRWxWLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUNyQyxNQUFNLG9CQUFvQixHQUFHLENBQUMsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQzdDLDRLQUE0SztBQUM1SyxNQUFNLHVCQUF1QixHQUFHLENBQUMsQ0FBQztBQUNsQyxNQUFNLDJCQUEyQixHQUFHLElBQUksR0FBRyxDQUFDLENBQUM7QUFZN0MsU0FBZ0IsZUFBZSxDQUFDLEdBQVc7SUFDdkMsSUFBSSxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDckIsSUFBSSxDQUFDLENBQUMsUUFBUSxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQzFCLE1BQU0sSUFBSSxLQUFLLENBQUMsbUNBQW1DLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQy9HLENBQUM7SUFDRCxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUN6RCxDQUFDO0FBTkQsMENBTUM7QUFFRCx1RkFBdUY7QUFDaEYsS0FBSyxVQUFVLG1CQUFtQixDQUFDLE1BQXlEO0lBQy9GLG9KQUFvSjtJQUNwSiwrQkFBYyxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQztJQUN6QyxJQUFJLFVBQVUsR0FBRyxNQUFN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QkFDTCxDQUFDO2dCQUNMLENBQUM7WUFDTCxDQUFDO1lBQ0QsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDeEQsQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDVCxJQUFJLENBQUM7Z0JBQ0QsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFDeEQsQ0FBQztZQUFDLFdBQU0sQ0FBQyxDQUFDLENBQUM7WUFDWCxNQUFNLENBQUMsQ0FBQztRQUNaLENBQUM7SUFDTCxDQUFDO0lBRU0sS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFZO1FBQzVCLHdGQUF3RjtRQUN4RixPQUFPLElBQUEsMkJBQVksRUFBQyxJQUFBLCtCQUFnQixFQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDakUsQ0FBQztDQUNKO0FBbE1ELHdDQWtNQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNvY2tldEZ1bmN0aW9uIH0gZnJvbSBcInNvY2tldC1mdW5jdGlvbi9Tb2NrZXRGdW5jdGlvblwiO1xuaW1wb3J0IHsgdGltZUluTWludXRlIH0gZnJvbSBcInNvY2tldC1mdW5jdGlvbi9zcmMvbWlzY1wiO1xuaW1wb3J0IHsgZGVsYXkgfSBmcm9tIFwic29ja2V0LWZ1bmN0aW9uL3NyYy9iYXRjaGluZ1wiO1xuaW1wb3J0IHsgZ2V0SWRlbnRpdHlDQSwgZ2V0VGhyZWFkS2V5Q2VydCwgbG9hZElkZW50aXR5Q0EsIHNpZ24gfSBmcm9tIFwiLi4vLi4vbWlzYy9odHRwcy9jZXJ0c1wiO1xuaW1wb3J0IHsgSUFyY2hpdmVzLCBBcmNoaXZlRmlsZUluZm8sIEFyY2hpdmVzQ29uZmlnLCBBcmNoaXZlc1N5bmNTdGF0dXMsIENoYW5nZXNBZnRlckNvbmZpZywgRGVsQ29uZmlnLCBGaW5kQ29uZmlnLCBHZXRDb25maWcsIEdldEluZm9Db25maWcsIE1vdmVGaWxlQ29uZmlnLCBTb3VyY2VDb25maWcsIFNldENvbmZpZywgU2V0TGFyZ2VGaWxlQ29uZmlnLCBMQVJHRV9TRVRfVEhSRVNIT0xELCBidWZmZXJDaHVua1N0cmVhbSB9IGZyb20gXCIuLi9JQXJjaGl2ZXNcIjtcbmltcG9ydCB7IHBhcnNlSG9zdGVkVXJsLCBnZXRCdWNrZXRCYXNlVXJsLCBidWlsZEZpbGVVcmwgfSBmcm9tIFwiLi9yZW1vdGVDb25maWdcIjtcbmltcG9ydCB7XG4gICAgUmVtb3RlU3RvcmFnZUNvbnRyb2xsZXIsIFNUT1JBR0VfQVVUSF9QVVJQT1NFLFxuICAgIFNUT1JBR0VfTk9UX0FVVEhFTlRJQ0FURUQsIFNUT1JBR0VfQUNDRVNTX0RFTklFRCxcbn0gZnJvbSBcIi4vc3RvcmFnZUNvbnRyb2xsZXJcIjtcblxuLy8gQSBidWNrZXQgb24gb3VyIHJlbW90ZSBzdG9yYWdlIHNlcnZlciAoc3RvcmFnZVNlcnZlci50cyksIHVzZWQgbGlrZSBBcmNoaXZlc0JhY2tibGF6ZS4gV29ya3MgaW4gTm9kZS5qcyBhbmQgdGhlIGJyb3dzZXIuIEF1dGhlbnRpY2F0ZXMgd2l0aCB0aGlzIG1hY2hpbmUncyBjZXJ0cy50cyBpZGVudGl0eTsgaWYgdGhlIGFjY291bnQgaGFzbid0IHRydXN0ZWQgdGhpcyBtYWNoaW5lIHlldCBpdCByZXF1ZXN0cyBhY2Nlc3MsIGFuZCBieSBkZWZhdWx0IHdhaXRzLCBsb2dnaW5nIGluc3RydWN0aW9ucyBldmVyeSBtaW51dGUgKGNhbGxzIGJsb2NrIHVudGlsIGFjY2VzcyBpcyBncmFudGVkKS5cblxuY29uc3QgQUNDRVNTX1JFVFJZX0RFTEFZID0gMTAwMCAqIDMwO1xuY29uc3QgTEFSR0VfRklMRV9QQVJUX1NJWkUgPSA4ICogMTAyNCAqIDEwMjQ7XG4vLyBPbmUgZmFpbGVkIHBhcnQgbXVzdCBub3QgZmFpbCBhIHdob2xlIGxhcmdlIHVwbG9hZDogcGFydHMgYXJlIHdyaXR0ZW4gYXQgZXhwbGljaXQgb2Zmc2V0cyAoc2VlIHVwbG9hZFBhcnQpLCBzbyBhIHJlLXNlbnQgcGFydCBpcyBpZGVtcG90ZW50IGFuZCBjYW4gc2ltcGx5IGJlIHRyaWVkIGFnYWluXG5jb25zdCBMQVJHRV9GSUxFX1BBUlRfUkVUUklFUyA9IDM7XG5jb25zdCBMQVJHRV9GSUxFX1BBUlRfUkVUUllfREVMQVkgPSAxMDAwICogNTtcblxuZXhwb3J0IHR5cGUgQXJjaGl2ZXNSZW1vdGVDb25maWcgPSB7XG4gICAgLy8gVGhlIGJ1Y2tldCdzIHJvdXRpbmcgVVJMLCB3aGljaCBhZGRyZXNzZXMgdGhlIHNlcnZlciwgYWNjb3VudCwgYW5kIGJ1Y2tldCBpbiBvbmU6XG4gICAgLy8gIGh0dHBzOi8vc3RvcmFnZS5leGFtcGxlLmNvbTo0NDQ0L2ZpbGUvPGFjY291bnQ+LzxidWNrZXROYW1lPi9zdG9yYWdlL3N0b3JhZ2Vyb3V0aW5nLmpzb25cbiAgICB1cmw6IHN0cmluZztcbiAgICAvLyBmYWxzZTogYWNjZXNzLWRlbmllZCBjYWxscyB0aHJvdyBpbW1lZGlhdGVseSAodGhlIGVycm9yIGluY2x1ZGVzIHRoZSBhY2Nlc3MgcGFnZSBsaW5rKSBpbnN0ZWFkIG9mIHJlcXVlc3RpbmcgYWNjZXNzIGFuZCBibG9ja2luZyB1bnRpbCBpdCBpcyBncmFudGVkICh0aGUgZGVmYXVsdCkuXG4gICAgd2FpdEZvckFjY2Vzcz86IGJvb2xlYW47XG4gICAgLyoqIFRoZSBleGFjdCByb3V0aW5nLWNvbmZpZyBlbnRyeSB0aGlzIGNvbm5lY3Rpb24gcmVwcmVzZW50cywgc2VudCB3aXRoIGV2ZXJ5IGNhbGwgc28gdGhlIHNlcnZlciBwaWNrcyB0aGUgbWF0Y2hpbmcgcGVyLXJvdXRlIHN0b3JlIChvbmUgc2VydmVyIGhvc3RzIG9uZSBzdG9yZSBwZXIgcm91dGUpLiBJbnN0YW5jZXMgYnVpbHQgZnJvbSBhIGJhcmUgVVJMIGZhYnJpY2F0ZSBvbmUgLSBpdCB3aWxsIG5ldmVyIG1hdGNoLCB3aGljaCBvbmx5IHdvcmtzIGZvciBjYWxscyB0aGF0IGRvbid0IHNlbGVjdCBhIHN0b3JlIChpbnRlcm5hbCByZWFkcywgUk9VVElOR19GSUxFLCBnZXRDb25maWcpLiAqL1xuICAgIHNvdXJjZUNvbmZpZzogU291cmNlQ29uZmlnO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlU3RvcmFnZVVybCh1cmw6IHN0cmluZyk6IHsgYWRkcmVzczogc3RyaW5nOyBwb3J0OiBudW1iZXIgfSB7XG4gICAgbGV0IHUgPSBuZXcgVVJMKHVybCk7XG4gICAgaWYgKHUucHJvdG9jb2wgIT09IFwiaHR0cHM6XCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBTdG9yYWdlIFVSTCBtdXN0IHVzZSBodHRwcywgZ290ICR7SlNPTi5zdHJpbmdpZnkodS5wcm90b2NvbCl9IGluICR7SlNPTi5zdHJpbmdpZnkodXJsKX1gKTtcbiAgICB9XG4gICAgcmV0dXJuIHsgYWRkcmVzczogdS5ob3N0bmFtZSwgcG9ydDogK3UucG9ydCB8fCA0NDMgfTtcbn1cblxuLy8gQXV0aGVudGljYXRlcyBhIGNvbm5lY3Rpb24gdG8gYSBzdG9yYWdlIHNlcnZlciB3aXRoIHRoaXMgbWFjaGluZSdzIGNlcnRzLnRzIGlkZW50aXR5XG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYXV0aGVudGljYXRlU3RvcmFnZShjb25maWc6IHsgYWRkcmVzczogc3RyaW5nOyBwb3J0OiBudW1iZXI7IG5vZGVJZDogc3RyaW5nIH0pOiBQcm9taXNlPHsgbWFjaGluZUlkOiBzdHJpbmc7IGlwOiBzdHJpbmcgfT4ge1xuICAgIC8vIGhvc3RTZXJ2ZXIgbm9kZUlkcyBhcmUgbWFjaGluZS1zcGVjaWZpYywgc28gY29ubmVjdGlvbnMgYnkgZG9tYWluIG11c3QgdGFyZ2V0IFwiYW55IHNlcnZlciBhdCB0aGlzIGFkZHJlc3NcIiAod2hpY2ggaXMgaG93IGJyb3dzZXJzIGFsd2F5cyBjb25uZWN0KVxuICAgIFNvY2tldEZ1bmN0aW9uLkVOQUJMRV9DTElFTlRfTU9ERSA9IHRydWU7XG4gICAgbGV0IHJvb3REb21haW4gPSBjb25maWcuYWRkcmVzcy5zcGxpdChcIi5cIikuc2xpY2UoLTIpLmpvaW4oXCIuXCIpO1xuICAgIGF3YWl0IGxvYWRJZGVudGl0eUNBKHJvb3REb21haW4pO1xuICAgIGxldCB0aHJlYWRLZXlDZXJ0ID0gZ2V0VGhyZWFkS2V5Q2VydChyb290RG9tYWluKTtcbiAgICBsZXQgaXNzdWVyID0gZ2V0SWRlbnRpdHlDQShyb290RG9tYWluKTtcbiAgICBsZXQgZGF0YSA9IHtcbiAgICAgICAgcHVycG9zZTogU1RPUkFHRV9BVVRIX1BVUlBPU0UsXG4gICAgICAgIHRpbWU6IERhdGUubm93KCksXG4gICAgICAgIHNlcnZlcjogYCR7Y29uZmlnLmFkZHJlc3N9OiR7Y29uZmlnLnBvcnR9YCxcbiAgICB9O1xuICAgIGxldCBzaWduYXR1cmUgPSBzaWduKHRocmVhZEtleUNlcnQsIGRhdGEpO1xuICAgIHJldHVybiBhd2FpdCBSZW1vdGVTdG9yYWdlQ29udHJvbGxlci5ub2Rlc1tjb25maWcubm9kZUlkXS5hdXRoZW50aWNhdGUoe1xuICAgICAgICBjZXJ0UGVtOiB0aHJlYWRLZXlDZXJ0LmNlcnQudG9TdHJpbmcoKSxcbiAgICAgICAgaXNzdWVyUGVtOiBpc3N1ZXIuY2VydC50b1N0cmluZygpLFxuICAgICAgICBzaWduYXR1cmUsXG4gICAgICAgIGRhdGEsXG4gICAgfSk7XG59XG5cbmV4cG9ydCBjbGFzcyBBcmNoaXZlc1JlbW90ZSBpbXBsZW1lbnRzIElBcmNoaXZlcyB7XG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBjb25maWc6IEFyY2hpdmVzUmVtb3RlQ29uZmlnKSB7XG4gICAgICAgIC8vIGhvc3RTZXJ2ZXIgbm9kZUlkcyBhcmUgbWFjaGluZS1zcGVjaWZpYywgc28gY29ubmVjdGlvbnMgYnkgZG9tYWluIG11c3QgdGFyZ2V0IFwiYW55IHNlcnZlciBhdCB0aGlzIGFkZHJlc3NcIiAod2hpY2ggaXMgaG93IGJyb3dzZXJzIGFsd2F5cyBjb25uZWN0KVxuICAgICAgICBTb2NrZXRGdW5jdGlvbi5FTkFCTEVfQ0xJRU5UX01PREUgPSB0cnVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgcGFyc2VkID0gcGFyc2VIb3N0ZWRVcmwodGhpcy5jb25maWcudXJsKTtcbiAgICBwcml2YXRlIGFjY291bnQgPSB0aGlzLnBhcnNlZC5hY2NvdW50O1xuICAgIHByaXZhdGUgYnVja2V0TmFtZSA9IHRoaXMucGFyc2VkLmJ1Y2tldE5hbWU7XG4gICAgcHJpdmF0ZSBub2RlSWQgPSBTb2NrZXRGdW5jdGlvbi5jb25uZWN0KHsgYWRkcmVzczogdGhpcy5wYXJzZWQuYWRkcmVzcywgcG9ydDogdGhpcy5wYXJzZWQucG9ydCB9KTtcbiAgICBwcml2YXRlIGNvbnRyb2xsZXIgPSBSZW1vdGVTdG9yYWdlQ29udHJvbGxlci5ub2Rlc1t0aGlzLm5vZGVJZF07XG4gICAgcHJpdmF0ZSBsYXN0RGVuaWVkTG9nID0gMDtcblxuICAgIHB1YmxpYyBnZXREZWJ1Z05hbWUoKSB7XG4gICAgICAgIHJldHVybiBgcmVtb3RlU3RvcmFnZSAke3RoaXMucGFyc2VkLmFkZHJlc3N9OiR7dGhpcy5wYXJzZWQucG9ydH0gYWNjb3VudCAke3RoaXMuYWNjb3VudH0gYnVja2V0ICR7dGhpcy5idWNrZXROYW1lfWA7XG4gICAgfVxuXG4gICAgLyoqIFRoZSBjb25maWcgdHJhdmVscyB3aXRoIGV2ZXJ5IHJlcXVlc3QgKHRoZSBzZXJ2ZXIgbWF0Y2hlcyBpdCBhZ2FpbnN0IGl0cyBvd24gZW50cmllcyB0byBwaWNrIHRoZSBzdG9yZSksIHNvIGEgY29uZmlnIGNoYW5nZSBoYXMgdG8gbGFuZCBoZXJlIC0gb3RoZXJ3aXNlIHdlIGtlZXAgYXNraW5nIGZvciBhIHNvdXJjZSBkZXNjcmlwdGlvbiB0aGUgc2VydmVyIG5vIGxvbmdlciByZWNvZ25pemVzLiBPbmx5IGV2ZXIgY2FsbGVkIHdpdGggYSBjb25maWcgZm9yIHRoZSBTQU1FIGVuZHBvaW50IChzZWUgc291cmNlSWRlbnRpdHkpLCBzbyB0aGUgY29ubmVjdGlvbiwgYWNjb3VudCwgYW5kIGJ1Y2tldCBjYW5ub3QgY2hhbmdlIHVuZGVyIHVzLiAqL1xuICAgIHB1YmxpYyB1cGRhdGVTb3VyY2VDb25maWcoc291cmNlQ29uZmlnOiBTb3VyY2VDb25maWcpOiB2b2lkIHtcbiAgICAgICAgaWYgKHNvdXJjZUNvbmZpZy51cmwgIT09IHRoaXMuY29uZmlnLnVybCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGB1cGRhdGVTb3VyY2VDb25maWcgY2hhbmdlZCBlbmRwb2ludHMuIEl0IG11c3Qgc3RheSBvbiB0aGUgc2FtZSBlbmRwb2ludCwgZ290ICR7SlNPTi5zdHJpbmdpZnkoc291cmNlQ29uZmlnLnVybCl9IGZvciAke3RoaXMuZ2V0RGVidWdOYW1lKCl9ICgke0pTT04uc3RyaW5naWZ5KHRoaXMuY29uZmlnLnVybCl9KWApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY29uZmlnLnNvdXJjZUNvbmZpZyA9IHNvdXJjZUNvbmZpZztcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNDb25uZWN0ZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBTb2NrZXRGdW5jdGlvbi5pc05vZGVDb25uZWN0ZWQodGhpcy5ub2RlSWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBwaW5nKCk6IFByb21pc2U8e30+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuY29udHJvbGxlci5waW5nKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBhdXRoZW50aWNhdGUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IGF1dGhlbnRpY2F0ZVN0b3JhZ2UoeyBhZGRyZXNzOiB0aGlzLnBhcnNlZC5hZGRyZXNzLCBwb3J0OiB0aGlzLnBhcnNlZC5wb3J0LCBub2RlSWQ6IHRoaXMubm9kZUlkIH0pO1xuICAgIH1cblxuICAgIC8vIFJ1bnMgYSBjYWxsLCBhdXRoZW50aWNhdGluZyAoYW5kIHJlLWF1dGhlbnRpY2F0aW5nIGFmdGVyIHJlY29ubmVjdHMpIGFzIG5lZWRlZC4gVW5saWtlIGNhbGwoKSwgZG9lcyBOT1Qgd2FpdCBmb3IgYWNjb3VudCBhY2Nlc3MuXG4gICAgcHJpdmF0ZSBhc3luYyBjYWxsQXV0aGVkPFQ+KGZuYzogKCkgPT4gUHJvbWlzZTxUPik6IFByb21pc2U8VD4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IGZuYygpO1xuICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgICAgICAgIGlmICghU3RyaW5nKGUuc3RhY2sgfHwgZSkuaW5jbHVkZXMoU1RPUkFHRV9OT1RfQVVUSEVOVElDQVRFRCkpIHRocm93IGU7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmF1dGhlbnRpY2F0ZSgpO1xuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IGZuYygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmV0dXJucyB1bmRlZmluZWQgaWYgdGhpcyBtYWNoaW5lIGhhcyBhY2Nlc3MgdG8gdGhlIGFjY291bnQuIE90aGVyd2lzZSByZXR1cm5zIG91ciBtYWNoaW5lSWQgKyBpcCBhcyB0aGUgc2VydmVyIHNlZXMgdGhlbSwgd2h5IHdlIHdlcmUgcmVmdXNlZCwgYW5kIHRoZSBleGFjdCBjb21tYW5kIHRoYXQgZ3JhbnRzIGFjY2Vzcy5cbiAgICBwdWJsaWMgYXN5bmMgd2FpdGluZ0ZvckFjY2VzcygpOiBQcm9taXNlPHsgbWFjaGluZUlkOiBzdHJpbmc7IGlwOiBzdHJpbmc7IHJlYXNvbjogc3RyaW5nOyBhZGRNYWNoaW5lQ29tbWFuZDogc3RyaW5nIH0gfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgbGV0IHN0YXRlID0gYXdhaXQgdGhpcy5jYWxsQXV0aGVkKCgpID0+IHRoaXMuY29udHJvbGxlci5nZXRBY2Nlc3NTdGF0ZSh7IGFjY291bnQ6IHRoaXMuYWNjb3VudCB9KSk7XG4gICAgICAgIGlmIChzdGF0ZS5oYXNBY2Nlc3MpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBtYWNoaW5lSWQ6IHN0YXRlLm1hY2hpbmVJZCxcbiAgICAgICAgICAgIGlwOiBzdGF0ZS5pcCxcbiAgICAgICAgICAgIHJlYXNvbjogc3RhdGUucmVhc29uIHx8IFwiXCIsXG4gICAgICAgICAgICBhZGRNYWNoaW5lQ29tbWFuZDogc3RhdGUuYWRkTWFjaGluZUNvbW1hbmQgfHwgXCJcIixcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgaGFzV3JpdGVBY2Nlc3MoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgICAgIGxldCBzdGF0ZSA9IGF3YWl0IHRoaXMuY2FsbEF1dGhlZCgoKSA9PiB0aGlzLmNvbnRyb2xsZXIuZ2V0QWNjZXNzU3RhdGUoeyBhY2NvdW50OiB0aGlzLmFjY291bnQgfSkpO1xuICAgICAgICByZXR1cm4gISFzdGF0ZS5oYXNBY2Nlc3M7XG4gICAgfVxuXG4gICAgLy8gTG9ncyBob3cgdG8gZ2V0IGFjY2VzcywgYXQgbW9zdCBvbmNlIGEgbWludXRlLiBUaGVyZSBpcyBub3RoaW5nIHRvIHJlZ2lzdGVyIGFueSBtb3JlOiB0aGUgc2VydmVyIGRlY2lkZXMgZnJvbSB0aGUgc2lnbmVkIHJlcG8sIHNvIHdoYXQgaXQgaGFuZHMgYmFjayBpcyB0aGUgY29tbWFuZCB0aGF0IHB1dHMgdXMgaW4gaXQuXG4gICAgcHJpdmF0ZSBhc3luYyByZWdpc3RlckFjY2Vzc1JlcXVlc3QoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmIChEYXRlLm5vdygpIC0gdGhpcy5sYXN0RGVuaWVkTG9nIDwgdGltZUluTWludXRlKSByZXR1cm47XG4gICAgICAgIGxldCBzdGF0ZSA9IGF3YWl0IHRoaXMuY2FsbEF1dGhlZCgoKSA9PiB0aGlzLmNvbnRyb2xsZXIuZ2V0QWNjZXNzU3RhdGUoeyBhY2NvdW50OiB0aGlzLmFjY291bnQgfSkpO1xuICAgICAgICB0aGlzLmxhc3REZW5pZWRMb2cgPSBEYXRlLm5vdygpO1xuICAgICAgICBjb25zb2xlLmxvZyhgTm8gYWNjZXNzIHRvIHN0b3JhZ2UgYWNjb3VudCAke0pTT04uc3RyaW5naWZ5KHRoaXMuYWNjb3VudCl9IG9uICR7dGhpcy5wYXJzZWQuYWRkcmVzc306JHt0aGlzLnBhcnNlZC5wb3J0fSAob3VyIG1hY2hpbmUgJHtzdGF0ZS5tYWNoaW5lSWR9LCBpcCAke3N0YXRlLmlwfSkuICR7c3RhdGUucmVhc29uIHx8IFwiXCJ9IEdyYW50IGl0IHdpdGg6ICR7c3RhdGUuYWRkTWFjaGluZUNvbW1hbmQgfHwgXCJcIn1gKTtcbiAgICB9XG5cbiAgICAvLyBSdW5zIGEgY2FsbCwgYXV0aGVudGljYXRpbmcgKGFuZCByZS1hdXRoZW50aWNhdGluZyBhZnRlciByZWNvbm5lY3RzKSBhbmQgd2FpdGluZyBmb3IgYWNjb3VudCBhY2Nlc3MgYXMgbmVlZGVkLiBXaXRoIHdhaXRGb3JBY2Nlc3MgZmFsc2UsIGRlbmllZCBjYWxscyB0aHJvdyBpbW1lZGlhdGVseSBpbnN0ZWFkIC0gYnV0IHRoZSBhY2Nlc3MgcmVxdWVzdCBpcyBzdGlsbCByZWdpc3RlcmVkIChpbiB0aGUgYmFja2dyb3VuZCksIHNvIHRoZSBkZW5pYWwgaXMgZ3JhbnRhYmxlLlxuICAgIHByaXZhdGUgYXN5bmMgY2FsbDxUPihmbmM6ICgpID0+IFByb21pc2U8VD4pOiBQcm9taXNlPFQ+IHtcbiAgICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IGZuYygpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICAgICAgICAgICAgbGV0IG1lc3NhZ2UgPSBTdHJpbmcoZS5zdGFjayB8fCBlKTtcbiAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5pbmNsdWRlcyhTVE9SQUdFX05PVF9BVVRIRU5USUNBVEVEKSkge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmF1dGhlbnRpY2F0ZSgpO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuaW5jbHVkZXMoU1RPUkFHRV9BQ0NFU1NfREVOSUVEKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jb25maWcud2FpdEZvckFjY2VzcyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgdGhpcy5yZWdpc3RlckFjY2Vzc1JlcXVlc3QoKS5jYXRjaCgoKSA9PiB7IH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnJlZ2lzdGVyQWNjZXNzUmVxdWVzdCgpO1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCBkZWxheShBQ0NFU1NfUkVUUllfREVMQVkpO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXQoZmlsZU5hbWU6IHN0cmluZywgY29uZmlnPzogR2V0Q29uZmlnKTogUHJvbWlzZTxCdWZmZXIgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IHRoaXMuZ2V0MihmaWxlTmFtZSwgY29uZmlnKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdCAmJiByZXN1bHQuZGF0YSB8fCB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHB1YmxpYyBhc3luYyBnZXQyKGZpbGVOYW1lOiBzdHJpbmcsIGNvbmZpZz86IEdldENvbmZpZyk6IFByb21pc2U8eyBkYXRhOiBCdWZmZXI7IHdyaXRlVGltZTogbnVtYmVyOyBzaXplOiBudW1iZXIgfSB8IHVuZGVmaW5lZD4ge1xuICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgdGhpcy5jYWxsKCgpID0+IHRoaXMuY29udHJvbGxlci5nZXQyKHsgYWNjb3VudDogdGhpcy5hY2NvdW50LCBidWNrZXROYW1lOiB0aGlzLmJ1Y2tldE5hbWUsIHBhdGg6IGZpbGVOYW1lLCBzb3VyY2VDb25maWc6IHRoaXMuY29uZmlnLnNvdXJjZUNvbmZpZywgcmFuZ2U6IGNvbmZpZz8ucmFuZ2UsIGludGVybmFsOiBjb25maWc/LmludGVybmFsLCBpbmNsdWRlVG9tYnN0b25lczogY29uZmlnPy5pbmNsdWRlVG9tYnN0b25lcywgaW5jbHVkZU1hcmtlZDogY29uZmlnPy5pbmNsdWRlTWFya2VkIH0pKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdCAmJiB7IGRhdGE6IEJ1ZmZlci5mcm9tKHJlc3VsdC5kYXRhKSwgd3JpdGVUaW1lOiByZXN1bHQud3JpdGVUaW1lLCBzaXplOiByZXN1bHQuc2l6ZSB9IHx8IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcHVibGljIGFzeW5jIHNldChmaWxlTmFtZTogc3RyaW5nLCBkYXRhOiBCdWZmZXIsIGNvbmZpZz86IFNldENvbmZpZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICAgIGlmICghZGF0YS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRW1wdHkgd3JpdGUgcmVmdXNlZDogc2V0IHdhcyBjYWxsZWQgd2l0aCBhbiBlbXB0eSBidWZmZXIgZm9yICR7SlNPTi5zdHJpbmdpZnkoZmlsZU5hbWUpfSBvbiAke3RoaXMuZ2V0RGVidWdOYW1lKCl9OiBhbiBlbXB0eSBmaWxlIElTIGEgZGVsZXRpb24gaW4gdGhpcyBzeXN0ZW0gYW5kIHdvdWxkIHJlYWQgYmFjayBhcyBtaXNzaW5nIC0gY2FsbCBkZWwgaW5zdGVhZGApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkYXRhLmxlbmd0aCA+IExBUkdFX1NFVF9USFJFU0hPTEQpIHtcbiAgICAgICAgICAgIC8vIE9uZSBnaWFudCBtZXNzYWdlIHdvdWxkIGV4Y2VlZCB0aGUgd2lyZSBsaW1pdCBhbmQgbGFnIGV2ZXJ5IG90aGVyIGNsaWVudCBzaGFyaW5nIHRoaXMgY29ubmVjdGlvbiAtIHN0cmVhbSBpdCBpbnN0ZWFkLiBUaGUgY29uZmlnIHRyYXZlbHMgd2l0aCBpdCwgc28gY3Jvc3NpbmcgdGhlIHRocmVzaG9sZCBjaGFuZ2VzIG9ubHkgSE9XIHRoZSBieXRlcyBtb3ZlLCBuZXZlciB3aGF0IHRoZSB3cml0ZSBtZWFucy5cbiAgICAgICAgICAgIGF3YWl0IHRoaXMuc2V0TGFyZ2VGaWxlKHsgcGF0aDogZmlsZU5hbWUsIC4uLmNvbmZpZywgLi4uYnVmZmVyQ2h1bmtTdHJlYW0oZGF0YSkgfSk7XG4gICAgICAgICAgICByZXR1cm4gZmlsZU5hbWU7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgdGhpcy5jYWxsKCgpID0+IHRoaXMuY29udHJvbGxlci5zZXQoeyBhY2NvdW50OiB0aGlzLmFjY291bnQsIGJ1Y2tldE5hbWU6IHRoaXMuYnVja2V0TmFtZSwgcGF0aDogZmlsZU5hbWUsIGRhdGEsIHNvdXJjZUNvbmZpZzogdGhpcy5jb25maWcuc291cmNlQ29uZmlnLCBsYXN0TW9kaWZpZWQ6IGNvbmZpZz8ubGFzdE1vZGlmaWVkLCBmb3JjZVNldEltbXV0YWJsZTogY29uZmlnPy5mb3JjZVNldEltbXV0YWJsZSwgaW50ZXJuYWw6IGNvbmZpZz8uaW50ZXJuYWwsIHVuZGVsZXRlOiBjb25maWc/LnVuZGVsZXRlIH0pKTtcbiAgICAgICAgcmV0dXJuIGZpbGVOYW1lO1xuICAgIH1cbiAgICBwdWJsaWMgYXN5bmMgZGVsKGZpbGVOYW1lOiBzdHJpbmcsIGNvbmZpZz86IERlbENvbmZpZyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLmNhbGwoKCkgPT4gdGhpcy5jb250cm9sbGVyLmRlbCh7IGFjY291bnQ6IHRoaXMuYWNjb3VudCwgYnVja2V0TmFtZTogdGhpcy5idWNrZXROYW1lLCBwYXRoOiBmaWxlTmFtZSwgc291cmNlQ29uZmlnOiB0aGlzLmNvbmZpZy5zb3VyY2VDb25maWcsIGxhc3RNb2RpZmllZDogY29uZmlnPy5sYXN0TW9kaWZpZWQsIGludGVybmFsOiBjb25maWc/LmludGVybmFsIH0pKTtcbiAgICB9XG4gICAgcHVibGljIGFzeW5jIG1vdmUoY29uZmlnOiBNb3ZlRmlsZUNvbmZpZyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLmNhbGwoKCkgPT4gdGhpcy5jb250cm9sbGVyLm1vdmUoeyBhY2NvdW50OiB0aGlzLmFjY291bnQsIGJ1Y2tldE5hbWU6IHRoaXMuYnVja2V0TmFtZSwgZnJvbVBhdGg6IGNvbmZpZy5mcm9tUGF0aCwgdG9QYXRoOiBjb25maWcudG9QYXRoLCBzb3VyY2VDb25maWc6IHRoaXMuY29uZmlnLnNvdXJjZUNvbmZpZyB9KSk7XG4gICAgfVxuICAgIHB1YmxpYyBhc3luYyBnZXRJbmZvKGZpbGVOYW1lOiBzdHJpbmcsIGNvbmZpZz86IEdldEluZm9Db25maWcpOiBQcm9taXNlPHsgd3JpdGVUaW1lOiBudW1iZXI7IHNpemU6IG51bWJlciB9IHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmNhbGwoKCkgPT4gdGhpcy5jb250cm9sbGVyLmdldEluZm8oeyBhY2NvdW50OiB0aGlzLmFjY291bnQsIGJ1Y2tldE5hbWU6IHRoaXMuYnVja2V0TmFtZSwgcGF0aDogZmlsZU5hbWUsIHNvdXJjZUNvbmZpZzogdGhpcy5jb25maWcuc291cmNlQ29uZmlnLCBpbmNsdWRlVG9tYnN0b25lczogY29uZmlnPy5pbmNsdWRlVG9tYnN0b25lcyB9KSk7XG4gICAgfVxuICAgIHB1YmxpYyBhc3luYyBmaW5kSW5mbyhwcmVmaXg6IHN0cmluZywgY29uZmlnPzogRmluZENvbmZpZyk6IFByb21pc2U8QXJjaGl2ZUZpbGVJbmZvW10+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuY2FsbCgoKSA9PiB0aGlzLmNvbnRyb2xsZXIuZmluZEluZm8oeyBhY2NvdW50OiB0aGlzLmFjY291bnQsIGJ1Y2tldE5hbWU6IHRoaXMuYnVja2V0TmFtZSwgcHJlZml4LCBzb3VyY2VDb25maWc6IHRoaXMuY29uZmlnLnNvdXJjZUNvbmZpZywgc2hhbGxvdzogY29uZmlnPy5zaGFsbG93LCB0eXBlOiBjb25maWc/LnR5cGUsIGluY2x1ZGVNYXJrZWQ6IGNvbmZpZz8uaW5jbHVkZU1hcmtlZCwgaW50ZXJuYWw6IGNvbmZpZz8uaW50ZXJuYWwgfSkpO1xuICAgIH1cbiAgICBwdWJsaWMgYXN5bmMgZmluZChwcmVmaXg6IHN0cmluZywgY29uZmlnPzogRmluZENvbmZpZyk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICAgICAgcmV0dXJuIChhd2FpdCB0aGlzLmZpbmRJbmZvKHByZWZpeCwgY29uZmlnKSkubWFwKHggPT4geC5wYXRoKTtcbiAgICB9XG4gICAgcHVibGljIGFzeW5jIGdldENoYW5nZXNBZnRlcjIoY29uZmlnOiBDaGFuZ2VzQWZ0ZXJDb25maWcpOiBQcm9taXNlPEFyY2hpdmVGaWxlSW5mb1tdPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmNhbGwoKCkgPT4gdGhpcy5jb250cm9sbGVyLmdldENoYW5nZXNBZnRlcjIoeyBhY2NvdW50OiB0aGlzLmFjY291bnQsIGJ1Y2tldE5hbWU6IHRoaXMuYnVja2V0TmFtZSwgc291cmNlQ29uZmlnOiB0aGlzLmNvbmZpZy5zb3VyY2VDb25maWcsIHRpbWU6IGNvbmZpZy50aW1lLCByb3V0ZXM6IGNvbmZpZy5yb3V0ZXMsIGludGVybmFsOiBjb25maWcuaW50ZXJuYWwgfSkpO1xuICAgIH1cbiAgICBwdWJsaWMgYXN5bmMgZ2V0Q29uZmlnKCk6IFByb21pc2U8QXJjaGl2ZXNDb25maWc+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuY2FsbCgoKSA9PiB0aGlzLmNvbnRyb2xsZXIuZ2V0QXJjaGl2ZXNDb25maWcoeyBhY2NvdW50OiB0aGlzLmFjY291bnQsIGJ1Y2tldE5hbWU6IHRoaXMuYnVja2V0TmFtZSB9KSk7XG4gICAgfVxuICAgIHB1YmxpYyBhc3luYyBnZXRTeW5jU3RhdHVzKCk6IFByb21pc2U8QXJjaGl2ZXNTeW5jU3RhdHVzPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmNhbGwoKCkgPT4gdGhpcy5jb250cm9sbGVyLmdldFN5bmNTdGF0dXMoeyBhY2NvdW50OiB0aGlzLmFjY291bnQsIGJ1Y2tldE5hbWU6IHRoaXMuYnVja2V0TmFtZSB9KSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHNldExhcmdlRmlsZShjb25maWc6IFNldExhcmdlRmlsZUNvbmZpZyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICAvLyBFbnN1cmUgd2UncmUgYXV0aGVudGljYXRlZCB3aXRoIGFjY2VzcyBCRUZPUkUgY29uc3VtaW5nIGFueSBkYXRhICh0aGUgc3RyZWFtIGNhbm5vdCBiZSByZXdvdW5kLCBzbyB3ZSBjYW4ndCB1c2UgdGhlIHJldHJ5IGxvb3AgYXJvdW5kIHRoZSBhY3R1YWwgdXBsb2FkKVxuICAgICAgICBhd2FpdCB0aGlzLmNhbGwoKCkgPT4gdGhpcy5jb250cm9sbGVyLmdldEluZm8oeyBhY2NvdW50OiB0aGlzLmFjY291bnQsIGJ1Y2tldE5hbWU6IHRoaXMuYnVja2V0TmFtZSwgcGF0aDogY29uZmlnLnBhdGgsIHNvdXJjZUNvbmZpZzogdGhpcy5jb25maWcuc291cmNlQ29uZmlnIH0pKTtcbiAgICAgICAgLy8gVGhlIHdyaXRlJ3Mgc2VtYW50aWNzIChpbW11dGFiaWxpdHksIG9yZGVyaW5nLCBpbnRlcm5hbCkgYXJlIGRlY2lkZWQgYnkgdGhlIHNlcnZlciBhdCBzdGFydCwgYmVmb3JlIGFueSBieXRlcyBtb3ZlIC0gYSByZWplY3Rpb24gdGhlbiBjb3N0cyBub3RoaW5nLCB3aGlsZSBvbmUgYXQgZmluaXNoIHdvdWxkIHdhc3RlIHRoZSB3aG9sZSB0cmFuc2ZlclxuICAgICAgICBsZXQgdXBsb2FkSWQgPSBhd2FpdCB0aGlzLmNvbnRyb2xsZXIuc3RhcnRMYXJnZUZpbGUoe1xuICAgICAgICAgICAgYWNjb3VudDogdGhpcy5hY2NvdW50LFxuICAgICAgICAgICAgYnVja2V0TmFtZTogdGhpcy5idWNrZXROYW1lLFxuICAgICAgICAgICAgcGF0aDogY29uZmlnLnBhdGgsXG4gICAgICAgICAgICBzb3VyY2VDb25maWc6IHRoaXMuY29uZmlnLnNvdXJjZUNvbmZpZyxcbiAgICAgICAgICAgIGxhc3RNb2RpZmllZDogY29uZmlnLmxhc3RNb2RpZmllZCxcbiAgICAgICAgICAgIGZvcmNlU2V0SW1tdXRhYmxlOiBjb25maWcuZm9yY2VTZXRJbW11dGFibGUsXG4gICAgICAgICAgICBub0NoZWNrczogY29uZmlnLm5vQ2hlY2tzLFxuICAgICAgICAgICAgaW50ZXJuYWw6IGNvbmZpZy5pbnRlcm5hbCxcbiAgICAgICAgfSk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBUaGUgdXBsb2FkJ3MgYWJzb2x1dGUgcG9zaXRpb246IGV2ZXJ5IHBhcnQgY2FycmllcyBpdHMgb2Zmc2V0LCBzbyB0aGUgc2VydmVyIHdyaXRlcyBpdCBwb3NpdGlvbmFsbHkgYW5kIGEgcmV0cmllZCBwYXJ0IGxhbmRzIG9uIHRoZSBzYW1lIGJ5dGVzIGluc3RlYWQgb2YgYXBwZW5kaW5nIHR3aWNlXG4gICAgICAgICAgICBsZXQgdXBsb2FkT2Zmc2V0ID0gMDtcbiAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgICAgICAgbGV0IGRhdGEgPSBhd2FpdCBjb25maWcuZ2V0TmV4dERhdGEoKTtcbiAgICAgICAgICAgICAgICBpZiAoIWRhdGEpIGJyZWFrO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGNodW5rU3RhcnQgPSAwOyBjaHVua1N0YXJ0IDwgZGF0YS5sZW5ndGg7IGNodW5rU3RhcnQgKz0gTEFSR0VfRklMRV9QQVJUX1NJWkUpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHBhcnQgPSBkYXRhLnN1YmFycmF5KGNodW5rU3RhcnQsIGNodW5rU3RhcnQgKyBMQVJHRV9GSUxFX1BBUlRfU0laRSk7XG4gICAgICAgICAgICAgICAgICAgIGxldCBwYXJ0T2Zmc2V0ID0gdXBsb2FkT2Zmc2V0O1xuICAgICAgICAgICAgICAgICAgICB1cGxvYWRPZmZzZXQgKz0gcGFydC5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIGxldCBhdHRlbXB0ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5jb250cm9sbGVyLnVwbG9hZFBhcnQoeyB1cGxvYWRJZCwgZGF0YTogcGFydCwgb2Zmc2V0OiBwYXJ0T2Zmc2V0IH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dGVtcHQrKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXR0ZW1wdCA+IExBUkdFX0ZJTEVfUEFSVF9SRVRSSUVTKSB0aHJvdyBlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihgUGFydCBhdCBvZmZzZXQgJHtwYXJ0T2Zmc2V0fSAoJHtwYXJ0Lmxlbmd0aH0gYnl0ZXMpIG9mICR7SlNPTi5zdHJpbmdpZnkoY29uZmlnLnBhdGgpfSB0byAke3RoaXMuZ2V0RGVidWdOYW1lKCl9IGZhaWxlZCAoYXR0ZW1wdCAke2F0dGVtcHR9IG9mICR7TEFSR0VfRklMRV9QQVJUX1JFVFJJRVMgKyAxfSksIHJldHJ5aW5nIGluICR7TEFSR0VfRklMRV9QQVJUX1JFVFJZX0RFTEFZIC8gMTAwMH1zOiAkeyhlIGFzIEVycm9yKS5zdGFjayA/PyBlfWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IGRlbGF5KExBUkdFX0ZJTEVfUEFSVF9SRVRSWV9ERUxBWSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNvbnRyb2xsZXIuZmluaXNoTGFyZ2VGaWxlKHsgdXBsb2FkSWQgfSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5jb250cm9sbGVyLmNhbmNlbExhcmdlRmlsZSh7IHVwbG9hZElkIH0pO1xuICAgICAgICAgICAgfSBjYXRjaCB7IH1cbiAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0VVJMKHBhdGg6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICAgIC8vIE9ubHkgYWN0dWFsbHkgbG9hZHMgZm9yIHB1YmxpYyBidWNrZXRzICh0aGUgc2VydmVyIHJlamVjdHMgcGxhaW4gVVJMIHJlYWRzIG90aGVyd2lzZSlcbiAgICAgICAgcmV0dXJuIGJ1aWxkRmlsZVVybChnZXRCdWNrZXRCYXNlVXJsKHRoaXMuY29uZmlnLnVybCksIHBhdGgpO1xuICAgIH1cbn1cbiJdfQ==
242
- /* _JS_SOURCE_HASH = "fa6a039860b926d976cd922ce78372b7e6220754ba3771a93b6fb1722b320e5e"; */
240
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXJjaGl2ZXNSZW1vdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJBcmNoaXZlc1JlbW90ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtRUFBZ0U7QUFDaEUsbURBQXdEO0FBQ3hELDJEQUFxRDtBQUNyRCxrREFBK0Y7QUFDL0YsNENBQXdRO0FBQ3hRLGlEQUFnRjtBQUNoRiwyREFHNkI7QUFFN0Isa1ZBQWtWO0FBRWxWLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUNyQyxNQUFNLG9CQUFvQixHQUFHLENBQUMsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQzdDLDRLQUE0SztBQUM1SyxNQUFNLHVCQUF1QixHQUFHLENBQUMsQ0FBQztBQUNsQyxNQUFNLDJCQUEyQixHQUFHLElBQUksR0FBRyxDQUFDLENBQUM7QUFZN0MsU0FBZ0IsZUFBZSxDQUFDLEdBQVc7SUFDdkMsSUFBSSxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDckIsSUFBSSxDQUFDLENBQUMsUUFBUSxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQzFCLE1BQU0sSUFBSSxLQUFLLENBQUMsbUNBQW1DLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQy9HLENBQUM7SUFDRCxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUN6RCxDQUFDO0FBTkQsMENBTUM7QUFFRCx1RkFBdUY7QUFDaEYsS0FBSyxVQUFVLG1CQUFtQixDQUFDLE1BQXlEO0lBQy9GLG9KQUFvSjtJQUNwSiwrQkFBYyxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQztJQUN6QyxJQUFJLFVBQVUsR0FBRyxNQUFN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LEVBQUUsQ0FBQztZQUNULElBQUksQ0FBQztnQkFDRCxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsZUFBZSxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUN4RCxDQUFDO1lBQUMsV0FBTSxDQUFDLENBQUMsQ0FBQztZQUNYLE1BQU0sQ0FBQyxDQUFDO1FBQ1osQ0FBQztJQUNMLENBQUM7SUFFTSxLQUFLLENBQUMsTUFBTSxDQUFDLElBQVk7UUFDNUIsd0ZBQXdGO1FBQ3hGLE9BQU8sSUFBQSwyQkFBWSxFQUFDLElBQUEsK0JBQWdCLEVBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNqRSxDQUFDO0NBQ0o7QUFqTUQsd0NBaU1DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU29ja2V0RnVuY3Rpb24gfSBmcm9tIFwic29ja2V0LWZ1bmN0aW9uL1NvY2tldEZ1bmN0aW9uXCI7XG5pbXBvcnQgeyB0aW1lSW5NaW51dGUgfSBmcm9tIFwic29ja2V0LWZ1bmN0aW9uL3NyYy9taXNjXCI7XG5pbXBvcnQgeyBkZWxheSB9IGZyb20gXCJzb2NrZXQtZnVuY3Rpb24vc3JjL2JhdGNoaW5nXCI7XG5pbXBvcnQgeyBnZXRJZGVudGl0eUNBLCBnZXRUaHJlYWRLZXlDZXJ0LCBsb2FkSWRlbnRpdHlDQSwgc2lnbiB9IGZyb20gXCIuLi8uLi9taXNjL2h0dHBzL2NlcnRzXCI7XG5pbXBvcnQgeyBJQXJjaGl2ZXMsIEFyY2hpdmVGaWxlSW5mbywgQXJjaGl2ZXNDb25maWcsIEFyY2hpdmVzU3luY1N0YXR1cywgQ2hhbmdlc0FmdGVyQ29uZmlnLCBEZWxDb25maWcsIEZpbmRDb25maWcsIEdldENvbmZpZywgR2V0SW5mb0NvbmZpZywgTW92ZUZpbGVDb25maWcsIFNvdXJjZUNvbmZpZywgU2V0Q29uZmlnLCBTZXRMYXJnZUZpbGVDb25maWcsIExBUkdFX1NFVF9USFJFU0hPTEQsIGJ1ZmZlckNodW5rU3RyZWFtIH0gZnJvbSBcIi4uL0lBcmNoaXZlc1wiO1xuaW1wb3J0IHsgcGFyc2VIb3N0ZWRVcmwsIGdldEJ1Y2tldEJhc2VVcmwsIGJ1aWxkRmlsZVVybCB9IGZyb20gXCIuL3JlbW90ZUNvbmZpZ1wiO1xuaW1wb3J0IHtcbiAgICBSZW1vdGVTdG9yYWdlQ29udHJvbGxlciwgU1RPUkFHRV9BVVRIX1BVUlBPU0UsXG4gICAgU1RPUkFHRV9OT1RfQVVUSEVOVElDQVRFRCwgU1RPUkFHRV9BQ0NFU1NfREVOSUVELFxufSBmcm9tIFwiLi9zdG9yYWdlQ29udHJvbGxlclwiO1xuXG4vLyBBIGJ1Y2tldCBvbiBvdXIgcmVtb3RlIHN0b3JhZ2Ugc2VydmVyIChzdG9yYWdlU2VydmVyLnRzKSwgdXNlZCBsaWtlIEFyY2hpdmVzQmFja2JsYXplLiBXb3JrcyBpbiBOb2RlLmpzIGFuZCB0aGUgYnJvd3Nlci4gQXV0aGVudGljYXRlcyB3aXRoIHRoaXMgbWFjaGluZSdzIGNlcnRzLnRzIGlkZW50aXR5OyBpZiB0aGUgYWNjb3VudCBoYXNuJ3QgdHJ1c3RlZCB0aGlzIG1hY2hpbmUgeWV0IGl0IHJlcXVlc3RzIGFjY2VzcywgYW5kIGJ5IGRlZmF1bHQgd2FpdHMsIGxvZ2dpbmcgaW5zdHJ1Y3Rpb25zIGV2ZXJ5IG1pbnV0ZSAoY2FsbHMgYmxvY2sgdW50aWwgYWNjZXNzIGlzIGdyYW50ZWQpLlxuXG5jb25zdCBBQ0NFU1NfUkVUUllfREVMQVkgPSAxMDAwICogMzA7XG5jb25zdCBMQVJHRV9GSUxFX1BBUlRfU0laRSA9IDggKiAxMDI0ICogMTAyNDtcbi8vIE9uZSBmYWlsZWQgcGFydCBtdXN0IG5vdCBmYWlsIGEgd2hvbGUgbGFyZ2UgdXBsb2FkOiBwYXJ0cyBhcmUgd3JpdHRlbiBhdCBleHBsaWNpdCBvZmZzZXRzIChzZWUgdXBsb2FkUGFydCksIHNvIGEgcmUtc2VudCBwYXJ0IGlzIGlkZW1wb3RlbnQgYW5kIGNhbiBzaW1wbHkgYmUgdHJpZWQgYWdhaW5cbmNvbnN0IExBUkdFX0ZJTEVfUEFSVF9SRVRSSUVTID0gMztcbmNvbnN0IExBUkdFX0ZJTEVfUEFSVF9SRVRSWV9ERUxBWSA9IDEwMDAgKiA1O1xuXG5leHBvcnQgdHlwZSBBcmNoaXZlc1JlbW90ZUNvbmZpZyA9IHtcbiAgICAvLyBUaGUgYnVja2V0J3Mgcm91dGluZyBVUkwsIHdoaWNoIGFkZHJlc3NlcyB0aGUgc2VydmVyLCBhY2NvdW50LCBhbmQgYnVja2V0IGluIG9uZTpcbiAgICAvLyAgaHR0cHM6Ly9zdG9yYWdlLmV4YW1wbGUuY29tOjQ0NDQvZmlsZS88YWNjb3VudD4vPGJ1Y2tldE5hbWU+L3N0b3JhZ2Uvc3RvcmFnZXJvdXRpbmcuanNvblxuICAgIHVybDogc3RyaW5nO1xuICAgIC8vIGZhbHNlOiBhY2Nlc3MtZGVuaWVkIGNhbGxzIHRocm93IGltbWVkaWF0ZWx5ICh0aGUgZXJyb3IgaW5jbHVkZXMgdGhlIGFjY2VzcyBwYWdlIGxpbmspIGluc3RlYWQgb2YgcmVxdWVzdGluZyBhY2Nlc3MgYW5kIGJsb2NraW5nIHVudGlsIGl0IGlzIGdyYW50ZWQgKHRoZSBkZWZhdWx0KS5cbiAgICB3YWl0Rm9yQWNjZXNzPzogYm9vbGVhbjtcbiAgICAvKiogVGhlIGV4YWN0IHJvdXRpbmctY29uZmlnIGVudHJ5IHRoaXMgY29ubmVjdGlvbiByZXByZXNlbnRzLCBzZW50IHdpdGggZXZlcnkgY2FsbCBzbyB0aGUgc2VydmVyIHBpY2tzIHRoZSBtYXRjaGluZyBwZXItcm91dGUgc3RvcmUgKG9uZSBzZXJ2ZXIgaG9zdHMgb25lIHN0b3JlIHBlciByb3V0ZSkuIEluc3RhbmNlcyBidWlsdCBmcm9tIGEgYmFyZSBVUkwgZmFicmljYXRlIG9uZSAtIGl0IHdpbGwgbmV2ZXIgbWF0Y2gsIHdoaWNoIG9ubHkgd29ya3MgZm9yIGNhbGxzIHRoYXQgZG9uJ3Qgc2VsZWN0IGEgc3RvcmUgKGludGVybmFsIHJlYWRzLCBST1VUSU5HX0ZJTEUsIGdldENvbmZpZykuICovXG4gICAgc291cmNlQ29uZmlnOiBTb3VyY2VDb25maWc7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VTdG9yYWdlVXJsKHVybDogc3RyaW5nKTogeyBhZGRyZXNzOiBzdHJpbmc7IHBvcnQ6IG51bWJlciB9IHtcbiAgICBsZXQgdSA9IG5ldyBVUkwodXJsKTtcbiAgICBpZiAodS5wcm90b2NvbCAhPT0gXCJodHRwczpcIikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFN0b3JhZ2UgVVJMIG11c3QgdXNlIGh0dHBzLCBnb3QgJHtKU09OLnN0cmluZ2lmeSh1LnByb3RvY29sKX0gaW4gJHtKU09OLnN0cmluZ2lmeSh1cmwpfWApO1xuICAgIH1cbiAgICByZXR1cm4geyBhZGRyZXNzOiB1Lmhvc3RuYW1lLCBwb3J0OiArdS5wb3J0IHx8IDQ0MyB9O1xufVxuXG4vLyBBdXRoZW50aWNhdGVzIGEgY29ubmVjdGlvbiB0byBhIHN0b3JhZ2Ugc2VydmVyIHdpdGggdGhpcyBtYWNoaW5lJ3MgY2VydHMudHMgaWRlbnRpdHlcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhdXRoZW50aWNhdGVTdG9yYWdlKGNvbmZpZzogeyBhZGRyZXNzOiBzdHJpbmc7IHBvcnQ6IG51bWJlcjsgbm9kZUlkOiBzdHJpbmcgfSk6IFByb21pc2U8eyBtYWNoaW5lSWQ6IHN0cmluZzsgaXA6IHN0cmluZyB9PiB7XG4gICAgLy8gaG9zdFNlcnZlciBub2RlSWRzIGFyZSBtYWNoaW5lLXNwZWNpZmljLCBzbyBjb25uZWN0aW9ucyBieSBkb21haW4gbXVzdCB0YXJnZXQgXCJhbnkgc2VydmVyIGF0IHRoaXMgYWRkcmVzc1wiICh3aGljaCBpcyBob3cgYnJvd3NlcnMgYWx3YXlzIGNvbm5lY3QpXG4gICAgU29ja2V0RnVuY3Rpb24uRU5BQkxFX0NMSUVOVF9NT0RFID0gdHJ1ZTtcbiAgICBsZXQgcm9vdERvbWFpbiA9IGNvbmZpZy5hZGRyZXNzLnNwbGl0KFwiLlwiKS5zbGljZSgtMikuam9pbihcIi5cIik7XG4gICAgYXdhaXQgbG9hZElkZW50aXR5Q0Eocm9vdERvbWFpbik7XG4gICAgbGV0IHRocmVhZEtleUNlcnQgPSBnZXRUaHJlYWRLZXlDZXJ0KHJvb3REb21haW4pO1xuICAgIGxldCBpc3N1ZXIgPSBnZXRJZGVudGl0eUNBKHJvb3REb21haW4pO1xuICAgIGxldCBkYXRhID0ge1xuICAgICAgICBwdXJwb3NlOiBTVE9SQUdFX0FVVEhfUFVSUE9TRSxcbiAgICAgICAgdGltZTogRGF0ZS5ub3coKSxcbiAgICAgICAgc2VydmVyOiBgJHtjb25maWcuYWRkcmVzc306JHtjb25maWcucG9ydH1gLFxuICAgIH07XG4gICAgbGV0IHNpZ25hdHVyZSA9IHNpZ24odGhyZWFkS2V5Q2VydCwgZGF0YSk7XG4gICAgcmV0dXJuIGF3YWl0IFJlbW90ZVN0b3JhZ2VDb250cm9sbGVyLm5vZGVzW2NvbmZpZy5ub2RlSWRdLmF1dGhlbnRpY2F0ZSh7XG4gICAgICAgIGNlcnRQZW06IHRocmVhZEtleUNlcnQuY2VydC50b1N0cmluZygpLFxuICAgICAgICBpc3N1ZXJQZW06IGlzc3Vlci5jZXJ0LnRvU3RyaW5nKCksXG4gICAgICAgIHNpZ25hdHVyZSxcbiAgICAgICAgZGF0YSxcbiAgICB9KTtcbn1cblxuZXhwb3J0IGNsYXNzIEFyY2hpdmVzUmVtb3RlIGltcGxlbWVudHMgSUFyY2hpdmVzIHtcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNvbmZpZzogQXJjaGl2ZXNSZW1vdGVDb25maWcpIHtcbiAgICAgICAgLy8gaG9zdFNlcnZlciBub2RlSWRzIGFyZSBtYWNoaW5lLXNwZWNpZmljLCBzbyBjb25uZWN0aW9ucyBieSBkb21haW4gbXVzdCB0YXJnZXQgXCJhbnkgc2VydmVyIGF0IHRoaXMgYWRkcmVzc1wiICh3aGljaCBpcyBob3cgYnJvd3NlcnMgYWx3YXlzIGNvbm5lY3QpXG4gICAgICAgIFNvY2tldEZ1bmN0aW9uLkVOQUJMRV9DTElFTlRfTU9ERSA9IHRydWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwYXJzZWQgPSBwYXJzZUhvc3RlZFVybCh0aGlzLmNvbmZpZy51cmwpO1xuICAgIHByaXZhdGUgYWNjb3VudCA9IHRoaXMucGFyc2VkLmFjY291bnQ7XG4gICAgcHJpdmF0ZSBidWNrZXROYW1lID0gdGhpcy5wYXJzZWQuYnVja2V0TmFtZTtcbiAgICBwcml2YXRlIG5vZGVJZCA9IFNvY2tldEZ1bmN0aW9uLmNvbm5lY3QoeyBhZGRyZXNzOiB0aGlzLnBhcnNlZC5hZGRyZXNzLCBwb3J0OiB0aGlzLnBhcnNlZC5wb3J0IH0pO1xuICAgIHByaXZhdGUgY29udHJvbGxlciA9IFJlbW90ZVN0b3JhZ2VDb250cm9sbGVyLm5vZGVzW3RoaXMubm9kZUlkXTtcbiAgICBwcml2YXRlIGxhc3REZW5pZWRMb2cgPSAwO1xuXG4gICAgcHVibGljIGdldERlYnVnTmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIGByZW1vdGVTdG9yYWdlICR7dGhpcy5wYXJzZWQuYWRkcmVzc306JHt0aGlzLnBhcnNlZC5wb3J0fSBhY2NvdW50ICR7dGhpcy5hY2NvdW50fSBidWNrZXQgJHt0aGlzLmJ1Y2tldE5hbWV9YDtcbiAgICB9XG5cbiAgICAvKiogVGhlIGNvbmZpZyB0cmF2ZWxzIHdpdGggZXZlcnkgcmVxdWVzdCAodGhlIHNlcnZlciBtYXRjaGVzIGl0IGFnYWluc3QgaXRzIG93biBlbnRyaWVzIHRvIHBpY2sgdGhlIHN0b3JlKSwgc28gYSBjb25maWcgY2hhbmdlIGhhcyB0byBsYW5kIGhlcmUgLSBvdGhlcndpc2Ugd2Uga2VlcCBhc2tpbmcgZm9yIGEgc291cmNlIGRlc2NyaXB0aW9uIHRoZSBzZXJ2ZXIgbm8gbG9uZ2VyIHJlY29nbml6ZXMuIE9ubHkgZXZlciBjYWxsZWQgd2l0aCBhIGNvbmZpZyBmb3IgdGhlIFNBTUUgZW5kcG9pbnQgKHNlZSBzb3VyY2VJZGVudGl0eSksIHNvIHRoZSBjb25uZWN0aW9uLCBhY2NvdW50LCBhbmQgYnVja2V0IGNhbm5vdCBjaGFuZ2UgdW5kZXIgdXMuICovXG4gICAgcHVibGljIHVwZGF0ZVNvdXJjZUNvbmZpZyhzb3VyY2VDb25maWc6IFNvdXJjZUNvbmZpZyk6IHZvaWQge1xuICAgICAgICBpZiAoc291cmNlQ29uZmlnLnVybCAhPT0gdGhpcy5jb25maWcudXJsKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHVwZGF0ZVNvdXJjZUNvbmZpZyBjaGFuZ2VkIGVuZHBvaW50cy4gSXQgbXVzdCBzdGF5IG9uIHRoZSBzYW1lIGVuZHBvaW50LCBnb3QgJHtKU09OLnN0cmluZ2lmeShzb3VyY2VDb25maWcudXJsKX0gZm9yICR7dGhpcy5nZXREZWJ1Z05hbWUoKX0gKCR7SlNPTi5zdHJpbmdpZnkodGhpcy5jb25maWcudXJsKX0pYCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jb25maWcuc291cmNlQ29uZmlnID0gc291cmNlQ29uZmlnO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc0Nvbm5lY3RlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIFNvY2tldEZ1bmN0aW9uLmlzTm9kZUNvbm5lY3RlZCh0aGlzLm5vZGVJZCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHBpbmcoKTogUHJvbWlzZTx7fT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5jb250cm9sbGVyLnBpbmcoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGF1dGhlbnRpY2F0ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgYXV0aGVudGljYXRlU3RvcmFnZSh7IGFkZHJlc3M6IHRoaXMucGFyc2VkLmFkZHJlc3MsIHBvcnQ6IHRoaXMucGFyc2VkLnBvcnQsIG5vZGVJZDogdGhpcy5ub2RlSWQgfSk7XG4gICAgfVxuXG4gICAgLy8gUnVucyBhIGNhbGwsIGF1dGhlbnRpY2F0aW5nIChhbmQgcmUtYXV0aGVudGljYXRpbmcgYWZ0ZXIgcmVjb25uZWN0cykgYXMgbmVlZGVkLiBVbmxpa2UgY2FsbCgpLCBkb2VzIE5PVCB3YWl0IGZvciBhY2NvdW50IGFjY2Vzcy5cbiAgICBwcml2YXRlIGFzeW5jIGNhbGxBdXRoZWQ8VD4oZm5jOiAoKSA9PiBQcm9taXNlPFQ+KTogUHJvbWlzZTxUPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgZm5jKCk7XG4gICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgICAgICAgaWYgKCFTdHJpbmcoZS5zdGFjayB8fCBlKS5pbmNsdWRlcyhTVE9SQUdFX05PVF9BVVRIRU5USUNBVEVEKSkgdGhyb3cgZTtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuYXV0aGVudGljYXRlKCk7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgZm5jKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBSZXR1cm5zIHVuZGVmaW5lZCBpZiB0aGlzIG1hY2hpbmUgaGFzIGFjY2VzcyB0byB0aGUgYWNjb3VudC4gT3RoZXJ3aXNlIHJldHVybnMgb3VyIG1hY2hpbmVJZCArIGlwIGFzIHRoZSBzZXJ2ZXIgc2VlcyB0aGVtLCB3aHkgd2Ugd2VyZSByZWZ1c2VkLCBhbmQgdGhlIGV4YWN0IGNvbW1hbmQgdGhhdCBncmFudHMgYWNjZXNzLlxuICAgIHB1YmxpYyBhc3luYyB3YWl0aW5nRm9yQWNjZXNzKCk6IFByb21pc2U8eyBtYWNoaW5lSWQ6IHN0cmluZzsgaXA6IHN0cmluZzsgcmVhc29uOiBzdHJpbmcgfSB8IHVuZGVmaW5lZD4ge1xuICAgICAgICBsZXQgc3RhdGUgPSBhd2FpdCB0aGlzLmNhbGxBdXRoZWQoKCkgPT4gdGhpcy5jb250cm9sbGVyLmdldEFjY2Vzc1N0YXRlKHsgYWNjb3VudDogdGhpcy5hY2NvdW50IH0pKTtcbiAgICAgICAgaWYgKHN0YXRlLmhhc0FjY2VzcykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG1hY2hpbmVJZDogc3RhdGUubWFjaGluZUlkLFxuICAgICAgICAgICAgaXA6IHN0YXRlLmlwLFxuICAgICAgICAgICAgcmVhc29uOiBzdGF0ZS5yZWFzb24gfHwgXCJcIixcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgaGFzV3JpdGVBY2Nlc3MoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgICAgIGxldCBzdGF0ZSA9IGF3YWl0IHRoaXMuY2FsbEF1dGhlZCgoKSA9PiB0aGlzLmNvbnRyb2xsZXIuZ2V0QWNjZXNzU3RhdGUoeyBhY2NvdW50OiB0aGlzLmFjY291bnQgfSkpO1xuICAgICAgICByZXR1cm4gISFzdGF0ZS5oYXNBY2Nlc3M7XG4gICAgfVxuXG4gICAgLy8gTG9ncyBob3cgdG8gZ2V0IGFjY2VzcywgYXQgbW9zdCBvbmNlIGEgbWludXRlLiBUaGVyZSBpcyBub3RoaW5nIHRvIHJlZ2lzdGVyIGFueSBtb3JlOiB0aGUgc2VydmVyIGRlY2lkZXMgZnJvbSB0aGUgc2lnbmVkIHJlcG8sIHNvIHdoYXQgaXQgaGFuZHMgYmFjayBpcyB0aGUgY29tbWFuZCB0aGF0IHB1dHMgdXMgaW4gaXQuXG4gICAgcHJpdmF0ZSBhc3luYyByZWdpc3RlckFjY2Vzc1JlcXVlc3QoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmIChEYXRlLm5vdygpIC0gdGhpcy5sYXN0RGVuaWVkTG9nIDwgdGltZUluTWludXRlKSByZXR1cm47XG4gICAgICAgIGxldCBzdGF0ZSA9IGF3YWl0IHRoaXMuY2FsbEF1dGhlZCgoKSA9PiB0aGlzLmNvbnRyb2xsZXIuZ2V0QWNjZXNzU3RhdGUoeyBhY2NvdW50OiB0aGlzLmFjY291bnQgfSkpO1xuICAgICAgICB0aGlzLmxhc3REZW5pZWRMb2cgPSBEYXRlLm5vdygpO1xuICAgICAgICBjb25zb2xlLmxvZyhgTm8gYWNjZXNzIHRvIHN0b3JhZ2UgYWNjb3VudCAke0pTT04uc3RyaW5naWZ5KHRoaXMuYWNjb3VudCl9IG9uICR7dGhpcy5wYXJzZWQuYWRkcmVzc306JHt0aGlzLnBhcnNlZC5wb3J0fS4gJHtzdGF0ZS5yZWFzb24gfHwgXCJcIn1gKTtcbiAgICB9XG5cbiAgICAvLyBSdW5zIGEgY2FsbCwgYXV0aGVudGljYXRpbmcgKGFuZCByZS1hdXRoZW50aWNhdGluZyBhZnRlciByZWNvbm5lY3RzKSBhbmQgd2FpdGluZyBmb3IgYWNjb3VudCBhY2Nlc3MgYXMgbmVlZGVkLiBXaXRoIHdhaXRGb3JBY2Nlc3MgZmFsc2UsIGRlbmllZCBjYWxscyB0aHJvdyBpbW1lZGlhdGVseSBpbnN0ZWFkIC0gYnV0IHRoZSBhY2Nlc3MgcmVxdWVzdCBpcyBzdGlsbCByZWdpc3RlcmVkIChpbiB0aGUgYmFja2dyb3VuZCksIHNvIHRoZSBkZW5pYWwgaXMgZ3JhbnRhYmxlLlxuICAgIHByaXZhdGUgYXN5bmMgY2FsbDxUPihmbmM6ICgpID0+IFByb21pc2U8VD4pOiBQcm9taXNlPFQ+IHtcbiAgICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IGZuYygpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICAgICAgICAgICAgbGV0IG1lc3NhZ2UgPSBTdHJpbmcoZS5zdGFjayB8fCBlKTtcbiAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5pbmNsdWRlcyhTVE9SQUdFX05PVF9BVVRIRU5USUNBVEVEKSkge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmF1dGhlbnRpY2F0ZSgpO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuaW5jbHVkZXMoU1RPUkFHRV9BQ0NFU1NfREVOSUVEKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jb25maWcud2FpdEZvckFjY2VzcyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgdGhpcy5yZWdpc3RlckFjY2Vzc1JlcXVlc3QoKS5jYXRjaCgoKSA9PiB7IH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnJlZ2lzdGVyQWNjZXNzUmVxdWVzdCgpO1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCBkZWxheShBQ0NFU1NfUkVUUllfREVMQVkpO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXQoZmlsZU5hbWU6IHN0cmluZywgY29uZmlnPzogR2V0Q29uZmlnKTogUHJvbWlzZTxCdWZmZXIgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IHRoaXMuZ2V0MihmaWxlTmFtZSwgY29uZmlnKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdCAmJiByZXN1bHQuZGF0YSB8fCB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHB1YmxpYyBhc3luYyBnZXQyKGZpbGVOYW1lOiBzdHJpbmcsIGNvbmZpZz86IEdldENvbmZpZyk6IFByb21pc2U8eyBkYXRhOiBCdWZmZXI7IHdyaXRlVGltZTogbnVtYmVyOyBzaXplOiBudW1iZXIgfSB8IHVuZGVmaW5lZD4ge1xuICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgdGhpcy5jYWxsKCgpID0+IHRoaXMuY29udHJvbGxlci5nZXQyKHsgYWNjb3VudDogdGhpcy5hY2NvdW50LCBidWNrZXROYW1lOiB0aGlzLmJ1Y2tldE5hbWUsIHBhdGg6IGZpbGVOYW1lLCBzb3VyY2VDb25maWc6IHRoaXMuY29uZmlnLnNvdXJjZUNvbmZpZywgcmFuZ2U6IGNvbmZpZz8ucmFuZ2UsIGludGVybmFsOiBjb25maWc/LmludGVybmFsLCBpbmNsdWRlVG9tYnN0b25lczogY29uZmlnPy5pbmNsdWRlVG9tYnN0b25lcywgaW5jbHVkZU1hcmtlZDogY29uZmlnPy5pbmNsdWRlTWFya2VkIH0pKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdCAmJiB7IGRhdGE6IEJ1ZmZlci5mcm9tKHJlc3VsdC5kYXRhKSwgd3JpdGVUaW1lOiByZXN1bHQud3JpdGVUaW1lLCBzaXplOiByZXN1bHQuc2l6ZSB9IHx8IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcHVibGljIGFzeW5jIHNldChmaWxlTmFtZTogc3RyaW5nLCBkYXRhOiBCdWZmZXIsIGNvbmZpZz86IFNldENvbmZpZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICAgIGlmICghZGF0YS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRW1wdHkgd3JpdGUgcmVmdXNlZDogc2V0IHdhcyBjYWxsZWQgd2l0aCBhbiBlbXB0eSBidWZmZXIgZm9yICR7SlNPTi5zdHJpbmdpZnkoZmlsZU5hbWUpfSBvbiAke3RoaXMuZ2V0RGVidWdOYW1lKCl9OiBhbiBlbXB0eSBmaWxlIElTIGEgZGVsZXRpb24gaW4gdGhpcyBzeXN0ZW0gYW5kIHdvdWxkIHJlYWQgYmFjayBhcyBtaXNzaW5nIC0gY2FsbCBkZWwgaW5zdGVhZGApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkYXRhLmxlbmd0aCA+IExBUkdFX1NFVF9USFJFU0hPTEQpIHtcbiAgICAgICAgICAgIC8vIE9uZSBnaWFudCBtZXNzYWdlIHdvdWxkIGV4Y2VlZCB0aGUgd2lyZSBsaW1pdCBhbmQgbGFnIGV2ZXJ5IG90aGVyIGNsaWVudCBzaGFyaW5nIHRoaXMgY29ubmVjdGlvbiAtIHN0cmVhbSBpdCBpbnN0ZWFkLiBUaGUgY29uZmlnIHRyYXZlbHMgd2l0aCBpdCwgc28gY3Jvc3NpbmcgdGhlIHRocmVzaG9sZCBjaGFuZ2VzIG9ubHkgSE9XIHRoZSBieXRlcyBtb3ZlLCBuZXZlciB3aGF0IHRoZSB3cml0ZSBtZWFucy5cbiAgICAgICAgICAgIGF3YWl0IHRoaXMuc2V0TGFyZ2VGaWxlKHsgcGF0aDogZmlsZU5hbWUsIC4uLmNvbmZpZywgLi4uYnVmZmVyQ2h1bmtTdHJlYW0oZGF0YSkgfSk7XG4gICAgICAgICAgICByZXR1cm4gZmlsZU5hbWU7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgdGhpcy5jYWxsKCgpID0+IHRoaXMuY29udHJvbGxlci5zZXQoeyBhY2NvdW50OiB0aGlzLmFjY291bnQsIGJ1Y2tldE5hbWU6IHRoaXMuYnVja2V0TmFtZSwgcGF0aDogZmlsZU5hbWUsIGRhdGEsIHNvdXJjZUNvbmZpZzogdGhpcy5jb25maWcuc291cmNlQ29uZmlnLCBsYXN0TW9kaWZpZWQ6IGNvbmZpZz8ubGFzdE1vZGlmaWVkLCBmb3JjZVNldEltbXV0YWJsZTogY29uZmlnPy5mb3JjZVNldEltbXV0YWJsZSwgaW50ZXJuYWw6IGNvbmZpZz8uaW50ZXJuYWwsIHVuZGVsZXRlOiBjb25maWc/LnVuZGVsZXRlIH0pKTtcbiAgICAgICAgcmV0dXJuIGZpbGVOYW1lO1xuICAgIH1cbiAgICBwdWJsaWMgYXN5bmMgZGVsKGZpbGVOYW1lOiBzdHJpbmcsIGNvbmZpZz86IERlbENvbmZpZyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLmNhbGwoKCkgPT4gdGhpcy5jb250cm9sbGVyLmRlbCh7IGFjY291bnQ6IHRoaXMuYWNjb3VudCwgYnVja2V0TmFtZTogdGhpcy5idWNrZXROYW1lLCBwYXRoOiBmaWxlTmFtZSwgc291cmNlQ29uZmlnOiB0aGlzLmNvbmZpZy5zb3VyY2VDb25maWcsIGxhc3RNb2RpZmllZDogY29uZmlnPy5sYXN0TW9kaWZpZWQsIGludGVybmFsOiBjb25maWc/LmludGVybmFsIH0pKTtcbiAgICB9XG4gICAgcHVibGljIGFzeW5jIG1vdmUoY29uZmlnOiBNb3ZlRmlsZUNvbmZpZyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLmNhbGwoKCkgPT4gdGhpcy5jb250cm9sbGVyLm1vdmUoeyBhY2NvdW50OiB0aGlzLmFjY291bnQsIGJ1Y2tldE5hbWU6IHRoaXMuYnVja2V0TmFtZSwgZnJvbVBhdGg6IGNvbmZpZy5mcm9tUGF0aCwgdG9QYXRoOiBjb25maWcudG9QYXRoLCBzb3VyY2VDb25maWc6IHRoaXMuY29uZmlnLnNvdXJjZUNvbmZpZyB9KSk7XG4gICAgfVxuICAgIHB1YmxpYyBhc3luYyBnZXRJbmZvKGZpbGVOYW1lOiBzdHJpbmcsIGNvbmZpZz86IEdldEluZm9Db25maWcpOiBQcm9taXNlPHsgd3JpdGVUaW1lOiBudW1iZXI7IHNpemU6IG51bWJlciB9IHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmNhbGwoKCkgPT4gdGhpcy5jb250cm9sbGVyLmdldEluZm8oeyBhY2NvdW50OiB0aGlzLmFjY291bnQsIGJ1Y2tldE5hbWU6IHRoaXMuYnVja2V0TmFtZSwgcGF0aDogZmlsZU5hbWUsIHNvdXJjZUNvbmZpZzogdGhpcy5jb25maWcuc291cmNlQ29uZmlnLCBpbmNsdWRlVG9tYnN0b25lczogY29uZmlnPy5pbmNsdWRlVG9tYnN0b25lcyB9KSk7XG4gICAgfVxuICAgIHB1YmxpYyBhc3luYyBmaW5kSW5mbyhwcmVmaXg6IHN0cmluZywgY29uZmlnPzogRmluZENvbmZpZyk6IFByb21pc2U8QXJjaGl2ZUZpbGVJbmZvW10+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuY2FsbCgoKSA9PiB0aGlzLmNvbnRyb2xsZXIuZmluZEluZm8oeyBhY2NvdW50OiB0aGlzLmFjY291bnQsIGJ1Y2tldE5hbWU6IHRoaXMuYnVja2V0TmFtZSwgcHJlZml4LCBzb3VyY2VDb25maWc6IHRoaXMuY29uZmlnLnNvdXJjZUNvbmZpZywgc2hhbGxvdzogY29uZmlnPy5zaGFsbG93LCB0eXBlOiBjb25maWc/LnR5cGUsIGluY2x1ZGVNYXJrZWQ6IGNvbmZpZz8uaW5jbHVkZU1hcmtlZCwgaW50ZXJuYWw6IGNvbmZpZz8uaW50ZXJuYWwgfSkpO1xuICAgIH1cbiAgICBwdWJsaWMgYXN5bmMgZmluZChwcmVmaXg6IHN0cmluZywgY29uZmlnPzogRmluZENvbmZpZyk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICAgICAgcmV0dXJuIChhd2FpdCB0aGlzLmZpbmRJbmZvKHByZWZpeCwgY29uZmlnKSkubWFwKHggPT4geC5wYXRoKTtcbiAgICB9XG4gICAgcHVibGljIGFzeW5jIGdldENoYW5nZXNBZnRlcjIoY29uZmlnOiBDaGFuZ2VzQWZ0ZXJDb25maWcpOiBQcm9taXNlPEFyY2hpdmVGaWxlSW5mb1tdPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmNhbGwoKCkgPT4gdGhpcy5jb250cm9sbGVyLmdldENoYW5nZXNBZnRlcjIoeyBhY2NvdW50OiB0aGlzLmFjY291bnQsIGJ1Y2tldE5hbWU6IHRoaXMuYnVja2V0TmFtZSwgc291cmNlQ29uZmlnOiB0aGlzLmNvbmZpZy5zb3VyY2VDb25maWcsIHRpbWU6IGNvbmZpZy50aW1lLCByb3V0ZXM6IGNvbmZpZy5yb3V0ZXMsIGludGVybmFsOiBjb25maWcuaW50ZXJuYWwgfSkpO1xuICAgIH1cbiAgICBwdWJsaWMgYXN5bmMgZ2V0Q29uZmlnKCk6IFByb21pc2U8QXJjaGl2ZXNDb25maWc+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuY2FsbCgoKSA9PiB0aGlzLmNvbnRyb2xsZXIuZ2V0QXJjaGl2ZXNDb25maWcoeyBhY2NvdW50OiB0aGlzLmFjY291bnQsIGJ1Y2tldE5hbWU6IHRoaXMuYnVja2V0TmFtZSB9KSk7XG4gICAgfVxuICAgIHB1YmxpYyBhc3luYyBnZXRTeW5jU3RhdHVzKCk6IFByb21pc2U8QXJjaGl2ZXNTeW5jU3RhdHVzPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmNhbGwoKCkgPT4gdGhpcy5jb250cm9sbGVyLmdldFN5bmNTdGF0dXMoeyBhY2NvdW50OiB0aGlzLmFjY291bnQsIGJ1Y2tldE5hbWU6IHRoaXMuYnVja2V0TmFtZSB9KSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHNldExhcmdlRmlsZShjb25maWc6IFNldExhcmdlRmlsZUNvbmZpZyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICAvLyBFbnN1cmUgd2UncmUgYXV0aGVudGljYXRlZCB3aXRoIGFjY2VzcyBCRUZPUkUgY29uc3VtaW5nIGFueSBkYXRhICh0aGUgc3RyZWFtIGNhbm5vdCBiZSByZXdvdW5kLCBzbyB3ZSBjYW4ndCB1c2UgdGhlIHJldHJ5IGxvb3AgYXJvdW5kIHRoZSBhY3R1YWwgdXBsb2FkKVxuICAgICAgICBhd2FpdCB0aGlzLmNhbGwoKCkgPT4gdGhpcy5jb250cm9sbGVyLmdldEluZm8oeyBhY2NvdW50OiB0aGlzLmFjY291bnQsIGJ1Y2tldE5hbWU6IHRoaXMuYnVja2V0TmFtZSwgcGF0aDogY29uZmlnLnBhdGgsIHNvdXJjZUNvbmZpZzogdGhpcy5jb25maWcuc291cmNlQ29uZmlnIH0pKTtcbiAgICAgICAgLy8gVGhlIHdyaXRlJ3Mgc2VtYW50aWNzIChpbW11dGFiaWxpdHksIG9yZGVyaW5nLCBpbnRlcm5hbCkgYXJlIGRlY2lkZWQgYnkgdGhlIHNlcnZlciBhdCBzdGFydCwgYmVmb3JlIGFueSBieXRlcyBtb3ZlIC0gYSByZWplY3Rpb24gdGhlbiBjb3N0cyBub3RoaW5nLCB3aGlsZSBvbmUgYXQgZmluaXNoIHdvdWxkIHdhc3RlIHRoZSB3aG9sZSB0cmFuc2ZlclxuICAgICAgICBsZXQgdXBsb2FkSWQgPSBhd2FpdCB0aGlzLmNvbnRyb2xsZXIuc3RhcnRMYXJnZUZpbGUoe1xuICAgICAgICAgICAgYWNjb3VudDogdGhpcy5hY2NvdW50LFxuICAgICAgICAgICAgYnVja2V0TmFtZTogdGhpcy5idWNrZXROYW1lLFxuICAgICAgICAgICAgcGF0aDogY29uZmlnLnBhdGgsXG4gICAgICAgICAgICBzb3VyY2VDb25maWc6IHRoaXMuY29uZmlnLnNvdXJjZUNvbmZpZyxcbiAgICAgICAgICAgIGxhc3RNb2RpZmllZDogY29uZmlnLmxhc3RNb2RpZmllZCxcbiAgICAgICAgICAgIGZvcmNlU2V0SW1tdXRhYmxlOiBjb25maWcuZm9yY2VTZXRJbW11dGFibGUsXG4gICAgICAgICAgICBub0NoZWNrczogY29uZmlnLm5vQ2hlY2tzLFxuICAgICAgICAgICAgaW50ZXJuYWw6IGNvbmZpZy5pbnRlcm5hbCxcbiAgICAgICAgfSk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBUaGUgdXBsb2FkJ3MgYWJzb2x1dGUgcG9zaXRpb246IGV2ZXJ5IHBhcnQgY2FycmllcyBpdHMgb2Zmc2V0LCBzbyB0aGUgc2VydmVyIHdyaXRlcyBpdCBwb3NpdGlvbmFsbHkgYW5kIGEgcmV0cmllZCBwYXJ0IGxhbmRzIG9uIHRoZSBzYW1lIGJ5dGVzIGluc3RlYWQgb2YgYXBwZW5kaW5nIHR3aWNlXG4gICAgICAgICAgICBsZXQgdXBsb2FkT2Zmc2V0ID0gMDtcbiAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgICAgICAgbGV0IGRhdGEgPSBhd2FpdCBjb25maWcuZ2V0TmV4dERhdGEoKTtcbiAgICAgICAgICAgICAgICBpZiAoIWRhdGEpIGJyZWFrO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGNodW5rU3RhcnQgPSAwOyBjaHVua1N0YXJ0IDwgZGF0YS5sZW5ndGg7IGNodW5rU3RhcnQgKz0gTEFSR0VfRklMRV9QQVJUX1NJWkUpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHBhcnQgPSBkYXRhLnN1YmFycmF5KGNodW5rU3RhcnQsIGNodW5rU3RhcnQgKyBMQVJHRV9GSUxFX1BBUlRfU0laRSk7XG4gICAgICAgICAgICAgICAgICAgIGxldCBwYXJ0T2Zmc2V0ID0gdXBsb2FkT2Zmc2V0O1xuICAgICAgICAgICAgICAgICAgICB1cGxvYWRPZmZzZXQgKz0gcGFydC5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIGxldCBhdHRlbXB0ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5jb250cm9sbGVyLnVwbG9hZFBhcnQoeyB1cGxvYWRJZCwgZGF0YTogcGFydCwgb2Zmc2V0OiBwYXJ0T2Zmc2V0IH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dGVtcHQrKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXR0ZW1wdCA+IExBUkdFX0ZJTEVfUEFSVF9SRVRSSUVTKSB0aHJvdyBlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihgUGFydCBhdCBvZmZzZXQgJHtwYXJ0T2Zmc2V0fSAoJHtwYXJ0Lmxlbmd0aH0gYnl0ZXMpIG9mICR7SlNPTi5zdHJpbmdpZnkoY29uZmlnLnBhdGgpfSB0byAke3RoaXMuZ2V0RGVidWdOYW1lKCl9IGZhaWxlZCAoYXR0ZW1wdCAke2F0dGVtcHR9IG9mICR7TEFSR0VfRklMRV9QQVJUX1JFVFJJRVMgKyAxfSksIHJldHJ5aW5nIGluICR7TEFSR0VfRklMRV9QQVJUX1JFVFJZX0RFTEFZIC8gMTAwMH1zOiAkeyhlIGFzIEVycm9yKS5zdGFjayA/PyBlfWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IGRlbGF5KExBUkdFX0ZJTEVfUEFSVF9SRVRSWV9ERUxBWSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNvbnRyb2xsZXIuZmluaXNoTGFyZ2VGaWxlKHsgdXBsb2FkSWQgfSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5jb250cm9sbGVyLmNhbmNlbExhcmdlRmlsZSh7IHVwbG9hZElkIH0pO1xuICAgICAgICAgICAgfSBjYXRjaCB7IH1cbiAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0VVJMKHBhdGg6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICAgIC8vIE9ubHkgYWN0dWFsbHkgbG9hZHMgZm9yIHB1YmxpYyBidWNrZXRzICh0aGUgc2VydmVyIHJlamVjdHMgcGxhaW4gVVJMIHJlYWRzIG90aGVyd2lzZSlcbiAgICAgICAgcmV0dXJuIGJ1aWxkRmlsZVVybChnZXRCdWNrZXRCYXNlVXJsKHRoaXMuY29uZmlnLnVybCksIHBhdGgpO1xuICAgIH1cbn1cbiJdfQ==
241
+ /* _JS_SOURCE_HASH = "0762b5f2ba7bf006bde84fac70547f73f9672822870429aba858b9fed43c07e9"; */