sliftutils 1.7.137 → 1.7.138

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 (40) 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/https/certs.d.ts +1 -0
  5. package/misc/https/certs.ts +6 -1
  6. package/misc/https/dist/certs.ts.cache +8 -3
  7. package/misc/https/dist/persistentLocalStorage.ts.cache +13 -3
  8. package/misc/https/persistentLocalStorage.d.ts +1 -0
  9. package/misc/https/persistentLocalStorage.ts +10 -0
  10. package/package.json +5 -3
  11. package/security/authorizedKeys/daemon/dist/changes.ts.cache +2 -2
  12. package/security/authorizedKeys/daemon/dist/git.ts.cache +2 -2
  13. package/security/authorizedKeys/daemon/dist/notify.ts.cache +2 -2
  14. package/security/authorizedKeys/daemon/dist/paths.ts.cache +2 -2
  15. package/security/authorizedKeys/daemon/dist/repoFiles.ts.cache +2 -2
  16. package/security/authorizedKeys/daemon/dist/sessions.ts.cache +2 -2
  17. package/security/authorizedKeys/daemon/dist/state.ts.cache +2 -2
  18. package/security/authorizedKeys/dist/authorizedKeys.ts.cache +2 -2
  19. package/security/authorizedKeys/dist/keysRepo.ts.cache +2 -2
  20. package/security/authorizedKeys/dist/revokeSource.ts.cache +2 -2
  21. package/security/authorizedKeys/dist/sources.ts.cache +2 -2
  22. package/security/helpers/dist/paths.ts.cache +2 -2
  23. package/security/helpers/dist/remoteSSH.ts.cache +2 -2
  24. package/security/helpers/dist/spawn.ts.cache +2 -2
  25. package/security/keys/dist/deriveKey.ts.cache +2 -2
  26. package/security/keys/dist/sshKeyFile.ts.cache +2 -2
  27. package/security/machines/dist/printMachineId.ts.cache +21 -0
  28. package/security/machines/identity2.ts +94 -6
  29. package/security/machines/machines.ts +11 -11
  30. package/security/machines/printMachineId.ts +19 -0
  31. package/security/notifications/dist/discord.ts.cache +2 -2
  32. package/security/signedFiles/dist/manifest.ts.cache +2 -2
  33. package/security/signedFiles/dist/sshsig.ts.cache +2 -2
  34. package/storage/remoteStorage/ArchivesRemote.d.ts +0 -1
  35. package/storage/remoteStorage/ArchivesRemote.ts +2 -3
  36. package/storage/remoteStorage/createArchives.d.ts +0 -1
  37. package/storage/remoteStorage/createArchives.ts +1 -1
  38. package/storage/remoteStorage/sourceWrapper.ts +1 -1
  39. package/storage/remoteStorage/storageController.d.ts +0 -1
  40. package/storage/remoteStorage/storageController.ts +2 -4
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ // Prints this machine's machine id under a domain.
4
+ require("typenode");
5
+ require("../security/machines/printMachineId");
@@ -27,7 +27,7 @@ class ExampleStoragePage extends preact.Component {
27
27
  content: "",
28
28
  contentLoaded: false,
29
29
  newFileName: "",
30
- access: undefined as { machineId: string; ip: string; reason: string; addMachineCommand: string } | undefined,
30
+ access: undefined as { machineId: string; ip: string; reason: string } | undefined,
31
31
  error: "",
32
32
  });
33
33
 
@@ -91,7 +91,6 @@ class ExampleStoragePage extends preact.Component {
91
91
  <div>Machine: {synced.access.machineId}</div>
92
92
  <div>IP: {synced.access.ip}</div>
93
93
  <div>{synced.access.reason}</div>
94
- <div><code>{synced.access.addMachineCommand}</code></div>
95
94
  </div>}
96
95
  {synced.loaded && <div className={css.hbox(24).alignItems("flex-start")}>
97
96
  <div className={css.vbox(8)}>
package/index.d.ts CHANGED
@@ -78,6 +78,7 @@ declare module "sliftutils/misc/https/certs" {
78
78
  keyB64: string;
79
79
  };
80
80
  export declare function DEV_getIdentityFilePath(domain: string): string;
81
+ export declare function DEV_listIdentityDomains(): string[];
81
82
  export interface X509KeyPair {
82
83
  domain: string;
83
84
  cert: Buffer;
@@ -329,6 +330,7 @@ declare module "sliftutils/misc/https/persistentLocalStorage" {
329
330
  appName: string;
330
331
  key: string;
331
332
  }): string;
333
+ export declare function DEV_listKeyStoreApps(key: string): string[];
332
334
  export declare function getKeyStore<T>(appName: string, key: string): {
333
335
  get(): T | undefined;
334
336
  set(value: T | null): void;
@@ -3394,7 +3396,6 @@ declare module "sliftutils/storage/remoteStorage/ArchivesRemote" {
3394
3396
  machineId: string;
3395
3397
  ip: string;
3396
3398
  reason: string;
3397
- addMachineCommand: string;
3398
3399
  } | undefined>;
3399
3400
  hasWriteAccess(): Promise<boolean>;
3400
3401
  private registerAccessRequest;
@@ -4042,7 +4043,6 @@ declare module "sliftutils/storage/remoteStorage/createArchives" {
4042
4043
  machineId: string;
4043
4044
  ip: string;
4044
4045
  reason: string;
4045
- addMachineCommand: string;
4046
4046
  } | undefined>;
4047
4047
  /** 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. */
4048
4048
  getFileSources(fileName: string): Promise<SourceConfig[]>;
@@ -4457,7 +4457,6 @@ declare module "sliftutils/storage/remoteStorage/storageController" {
4457
4457
  ip: string;
4458
4458
  hasAccess: boolean;
4459
4459
  reason?: string;
4460
- addMachineCommand?: string;
4461
4460
  trustedMachines?: MachineState[];
4462
4461
  };
4463
4462
  export declare function broadcastRoutingChanged(): void;
@@ -11,6 +11,7 @@ export type IdentityStorageType = {
11
11
  keyB64: string;
12
12
  };
13
13
  export declare function DEV_getIdentityFilePath(domain: string): string;
14
+ export declare function DEV_listIdentityDomains(): string[];
14
15
  export interface X509KeyPair {
15
16
  domain: string;
16
17
  cert: Buffer;
@@ -18,7 +18,7 @@ import { measureBlock, measureFnc, measureWrap } from "socket-function/src/profi
18
18
  import { getNodeIdDomain, getNodeIdDomainMaybeUndefined, getNodeIdLocation } from "socket-function/src/nodeCache";
19
19
  import { SocketFunction } from "socket-function/SocketFunction";
20
20
  import { resetAllNodeCallFactories } from "socket-function/src/nodeCache";
21
- import { getKeyStore, DEV_getKeyStorePath } from "./persistentLocalStorage";
21
+ import { getKeyStore, DEV_getKeyStorePath, DEV_listKeyStoreApps } from "./persistentLocalStorage";
22
22
  import { ellipsize } from "../strings";
23
23
 
24
24
  setFlag(require, "node-forge", "allowclient", true);
@@ -41,6 +41,11 @@ export function DEV_getIdentityFilePath(domain: string): string {
41
41
  return DEV_getKeyStorePath({ appName: domain, key: identityStorageKey });
42
42
  }
43
43
 
44
+ // Every domain this machine has an identity under. Machine maintenance only, like the path above.
45
+ export function DEV_listIdentityDomains(): string[] {
46
+ return DEV_listKeyStoreApps(identityStorageKey);
47
+ }
48
+
44
49
  export interface X509KeyPair { domain: string; cert: Buffer; key: Buffer; }
45
50
 
46
51
  export function getCommonName(cert: Buffer | string) {
@@ -27,7 +27,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
27
27
  return (mod && mod.__esModule && mod.default) ? mod : { "default": mod };
28
28
  };
29
29
  Object.defineProperty(exports, "__esModule", { value: true , configurable: true});
30
- exports.getOwnNodeIdAllowUndefined = exports.getOwnNodeId = exports.getThreadKeyCert = exports.verifyMachineIdForPublicKey = exports.getOwnThreadId = exports.getOwnMachineId = exports.getIdentityCAPromise = exports.getIdentityCA = exports.loadIdentityCA = exports.setIdentityCARaw = exports.encodeNodeId = exports.decodeNodeIdAssert = exports.decodeNodeId = exports.getMachineId = exports.createCertFromCA = exports.generateCA = exports.generateKeyPair = exports.validateCertificate = exports.validateCACert = exports.verify = exports.sign = exports.getPublicIdentifier = exports.parseCert = exports.privateKeyToPem = exports.createX509 = exports.getCommonName = exports.DEV_getIdentityFilePath = exports.identityStorageKey = exports.CA_NOT_FOUND_ERROR = void 0;
30
+ exports.getOwnNodeIdAllowUndefined = exports.getOwnNodeId = exports.getThreadKeyCert = exports.verifyMachineIdForPublicKey = exports.getOwnThreadId = exports.getOwnMachineId = exports.getIdentityCAPromise = exports.getIdentityCA = exports.loadIdentityCA = exports.setIdentityCARaw = exports.encodeNodeId = exports.decodeNodeIdAssert = exports.decodeNodeId = exports.getMachineId = exports.createCertFromCA = exports.generateCA = exports.generateKeyPair = exports.validateCertificate = exports.validateCACert = exports.verify = exports.sign = exports.getPublicIdentifier = exports.parseCert = exports.privateKeyToPem = exports.createX509 = exports.getCommonName = exports.DEV_listIdentityDomains = exports.DEV_getIdentityFilePath = exports.identityStorageKey = exports.CA_NOT_FOUND_ERROR = void 0;
31
31
  // NOTE: We can't use crypto.subtle (non-extractable CryptoKeys) for our keys, because subtle is asynchronous, and everything here (key generation, cert creation, signing) must be available synchronously. The only real benefit of subtle is that a cross-site scripting attack can't exfiltrate the key. Which, while nice, is of minor benefit, as the cross-site script can already do quite a bit of damage anyway with access. And if that happens, the first thing the user is probably going to do is reset all their credentials, which solves the case of the key being exfiltrated anyway (by telling the server to stop trusting all identities).
32
32
  // NOTE: We are just not going to support HTTPS browser certs. Our code is purely for identification, and so it only supports ED25519.
33
33
  // https://www.rfc-editor.org/rfc/rfc5280#page-42
@@ -57,6 +57,11 @@ function DEV_getIdentityFilePath(domain) {
57
57
  return (0, persistentLocalStorage_1.DEV_getKeyStorePath)({ appName: domain, key: exports.identityStorageKey });
58
58
  }
59
59
  exports.DEV_getIdentityFilePath = DEV_getIdentityFilePath;
60
+ // Every domain this machine has an identity under. Machine maintenance only, like the path above.
61
+ function DEV_listIdentityDomains() {
62
+ return (0, persistentLocalStorage_1.DEV_listKeyStoreApps)(exports.identityStorageKey);
63
+ }
64
+ exports.DEV_listIdentityDomains = DEV_listIdentityDomains;
60
65
  function getCommonName(cert) {
61
66
  let subject = new crypto_1.default.X509Certificate(cert).subject;
62
67
  let subjectKVPs = new Map(subject.split(",").map(x => x.trim().split("=")).map(x => [x[0], x.slice(1).join("=")]));
@@ -468,5 +473,5 @@ function getOwnNodeIdAllowUndefined() {
468
473
  return SocketFunction_1.SocketFunction.mountedNodeId;
469
474
  }
470
475
  exports.getOwnNodeIdAllowUndefined = getOwnNodeIdAllowUndefined;
471
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VydHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjZXJ0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsa0RBQWtEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVsRCwrbkJBQStuQjtBQUMvbkIsc0lBQXNJO0FBRXRJLGlEQUFpRDtBQUVqRCx1RUFBK0Q7QUFDL0Qsa0RBQW9DO0FBR3BDLHlEQUEwRDtBQUUxRCwwREFBK0I7QUFDL0Isb0RBQTRCO0FBQzVCLDZEQUFpRTtBQUNqRSxtRUFBOEY7QUFDOUYsNkRBQWtIO0FBQ2xILG1FQUFnRTtBQUNoRSw2REFBMEU7QUFDMUUscUVBQTRFO0FBQzVFLHdDQUF1QztBQUV2QyxJQUFBLHNCQUFPLEVBQUMsT0FBTyxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDcEQsSUFBQSxzQkFBTyxFQUFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBRW5ELE1BQU0sU0FBUyxHQUFHLElBQUksR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUV6QixRQUFBLGtCQUFrQixHQUFHLHNDQUFzQyxDQUFDO0FBRTVELFFBQUEsa0JBQWtCLEdBQUcsY0FBYyxDQUFDO0FBR2pELFNBQVMsZ0JBQWdCLENBQUMsTUFBYztJQUNwQyxPQUFPLElBQUEsb0NBQVcsRUFBc0IsTUFBTSxFQUFFLDBCQUFrQixDQUFDLENBQUM7QUFDeEUsQ0FBQztBQUVELGlHQUFpRztBQUNqRyxtRkFBbUY7QUFDbkYsU0FBZ0IsdUJBQXVCLENBQUMsTUFBYztJQUNsRCxPQUFPLElBQUEsNENBQW1CLEVBQUMsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSwwQkFBa0IsRUFBRSxDQUFDLENBQUM7QUFDN0UsQ0FBQztBQUZELDBEQUVDO0FBSUQsU0FBZ0IsYUFBYSxDQUFDLElBQXFCO0lBQy9DLElBQUksT0FBTyxHQUFHLElB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QyxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQy9DLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFFSixTQUFnQixZQUFZO0lBQ3hCLElBQUksTUFBTSxHQUFHLCtCQUFjLENBQUMsYUFBYSxDQUFDO0lBQzFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNWLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0RBQWdELENBQUMsQ0FBQztJQUN0RSxDQUFDO0lBQ0QsT0FBTyxNQUFNLENBQUM7QUFDbEIsQ0FBQztBQU5ELG9DQU1DO0FBRUQsU0FBZ0IsMEJBQTBCO0lBQ3RDLE9BQU8sK0JBQWMsQ0FBQyxhQUFhLENBQUM7QUFDeEMsQ0FBQztBQUZELGdFQUVDIiwic291cmNlc0NvbnRlbnQiOlsiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4vbm9kZS1mb3JnZS1lZDI1NTE5LmQudHNcIiAvPlxuXG4vLyBOT1RFOiBXZSBjYW4ndCB1c2UgY3J5cHRvLnN1YnRsZSAobm9uLWV4dHJhY3RhYmxlIENyeXB0b0tleXMpIGZvciBvdXIga2V5cywgYmVjYXVzZSBzdWJ0bGUgaXMgYXN5bmNocm9ub3VzLCBhbmQgZXZlcnl0aGluZyBoZXJlIChrZXkgZ2VuZXJhdGlvbiwgY2VydCBjcmVhdGlvbiwgc2lnbmluZykgbXVzdCBiZSBhdmFpbGFibGUgc3luY2hyb25vdXNseS4gVGhlIG9ubHkgcmVhbCBiZW5lZml0IG9mIHN1YnRsZSBpcyB0aGF0IGEgY3Jvc3Mtc2l0ZSBzY3JpcHRpbmcgYXR0YWNrIGNhbid0IGV4ZmlsdHJhdGUgdGhlIGtleS4gV2hpY2gsIHdoaWxlIG5pY2UsIGlzIG9mIG1pbm9yIGJlbmVmaXQsIGFzIHRoZSBjcm9zcy1zaXRlIHNjcmlwdCBjYW4gYWxyZWFkeSBkbyBxdWl0ZSBhIGJpdCBvZiBkYW1hZ2UgYW55d2F5IHdpdGggYWNjZXNzLiBBbmQgaWYgdGhhdCBoYXBwZW5zLCB0aGUgZmlyc3QgdGhpbmcgdGhlIHVzZXIgaXMgcHJvYmFibHkgZ29pbmcgdG8gZG8gaXMgcmVzZXQgYWxsIHRoZWlyIGNyZWRlbnRpYWxzLCB3aGljaCBzb2x2ZXMgdGhlIGNhc2Ugb2YgdGhlIGtleSBiZWluZyBleGZpbHRyYXRlZCBhbnl3YXkgKGJ5IHRlbGxpbmcgdGhlIHNlcnZlciB0byBzdG9wIHRydXN0aW5nIGFsbCBpZGVudGl0aWVzKS5cbi8vIE5PVEU6IFdlIGFyZSBqdXN0IG5vdCBnb2luZyB0byBzdXBwb3J0IEhUVFBTIGJyb3dzZXIgY2VydHMuIE91ciBjb2RlIGlzIHB1cmVseSBmb3IgaWRlbnRpZmljYXRpb24sIGFuZCBzbyBpdCBvbmx5IHN1cHBvcnRzIEVEMjU1MTkuXG5cbi8vIGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM1MjgwI3BhZ2UtNDJcblxuaW1wb3J0IHsgc2V0RmxhZyB9IGZyb20gXCJzb2NrZXQtZnVuY3Rpb24vcmVxdWlyZS9jb21waWxlRmxhZ3NcIjtcbmltcG9ydCAqIGFzIGZvcmdlIGZyb20gXCJub2RlLWZvcmdlXCI7XG5pbXBvcnQgb3MgZnJvbSBcIm9zXCI7XG5pbXBvcnQgZnNTeW5jIGZyb20gXCJmc1wiO1xuaW1wb3J0IHsgY2FjaGUsIGxhenkgfSBmcm9tIFwic29ja2V0LWZ1bmN0aW9uL3NyYy9jYWNoaW5nXCI7XG5pbXBvcnQgeyBpc05vZGUgfSBmcm9tIFwic29ja2V0LWZ1bmN0aW9uL3NyYy9taXNjXCI7XG5pbXBvcnQgc2hhMjY1IGZyb20gXCJqcy1zaGEyNTZcIjtcbmltcG9ydCBjcnlwdG8gZnJvbSBcImNyeXB0b1wiO1xuaW1wb3J0IHsgdHJ1c3RDZXJ0aWZpY2F0ZSB9IGZyb20gXCJzb2NrZXQtZnVuY3Rpb24vc3JjL2NlcnRTdG9yZVwiO1xuaW1wb3J0IHsgbWVhc3VyZUJsb2NrLCBtZWFzdXJlRm5jLCBtZWFzdXJlV3JhcCB9IGZyb20gXCJzb2NrZXQtZnVuY3Rpb24vc3JjL3Byb2ZpbGluZy9tZWFzdXJlXCI7XG5pbXBvcnQgeyBnZXROb2RlSWREb21haW4sIGdldE5vZGVJZERvbWFpbk1heWJlVW5kZWZpbmVkLCBnZXROb2RlSWRMb2NhdGlvbiB9IGZyb20gXCJzb2NrZXQtZnVuY3Rpb24vc3JjL25vZGVDYWNoZVwiO1xuaW1wb3J0IHsgU29ja2V0RnVuY3Rpb24gfSBmcm9tIFwic29ja2V0LWZ1bmN0aW9uL1NvY2tldEZ1bmN0aW9uXCI7XG5pbXBvcnQgeyByZXNldEFsbE5vZGVDYWxsRmFjdG9yaWVzIH0gZnJvbSBcInNvY2tldC1mdW5jdGlvbi9zcmMvbm9kZUNhY2hlXCI7XG5pbXBvcnQgeyBnZXRLZXlTdG9yZSwgREVWX2dldEtleVN0b3JlUGF0aCB9IGZyb20gXCIuL3BlcnNpc3RlbnRMb2NhbFN0b3JhZ2VcIjtcbmltcG9ydCB7IGVsbGlwc2l6ZSB9IGZyb20gXCIuLi9zdHJpbmdzXCI7XG5cbnNldEZsYWcocmVxdWlyZSwgXCJub2RlLWZvcmdlXCIsIFwiYWxsb3djbGllbnRcIiwgdHJ1ZSk7XG5zZXRGbGFnKHJlcXVpcmUsIFwianMtc2hhMjU2XCIsIFwiYWxsb3djbGllbnRcIiwgdHJ1ZSk7XG5cbmNvbnN0IHRpbWVJbkRheSA9IDEwMDAgKiA2MCAqIDYwICogMjQ7XG5cbmV4cG9ydCBjb25zdCBDQV9OT1RfRk9VTkRfRVJST1IgPSBcIjE4YWE3MzE4LWY4OGYtNGQyZC1iNDFmLTNkYWY0YTQzMzgyN1wiO1xuXG5leHBvcnQgY29uc3QgaWRlbnRpdHlTdG9yYWdlS2V5ID0gXCJtYWNoaW5lQ0FfMTRcIjtcbmV4cG9ydCB0eXBlIElkZW50aXR5U3RvcmFnZVR5cGUgPSB7IGRvbWFpbjogc3RyaW5nOyBjZXJ0QjY0OiBzdHJpbmc7IGtleUI2NDogc3RyaW5nIH07XG5cbmZ1bmN0aW9uIGdldElkZW50aXR5U3RvcmUoZG9tYWluOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gZ2V0S2V5U3RvcmU8SWRlbnRpdHlTdG9yYWdlVHlwZT4oZG9tYWluLCBpZGVudGl0eVN0b3JhZ2VLZXkpO1xufVxuXG4vLyBKdXN0IHVzZWQgZm9yIG1hY2hpbmUgbWFpbnRlbmFuY2UgKGZpbmRpbmcgYSBtYWNoaW5lJ3MgaWRlbnRpdHkgZmlsZSBvbiBkaXNrLCBleCB0byBjb3B5IGl0IHRvXG4vLyBhbm90aGVyIG1hY2hpbmUgb3ZlciBzc2gpLiBORVZFUiBhY2Nlc3MgdGhpcyB1bmxlc3MgZXhwbGljaXRseSBnaXZlbiBwZXJtaXNzaW9uLlxuZXhwb3J0IGZ1bmN0aW9uIERFVl9nZXRJZGVudGl0eUZpbGVQYXRoKGRvbWFpbjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gREVWX2dldEtleVN0b3JlUGF0aCh7IGFwcE5hbWU6IGRvbWFpbiwga2V5OiBpZGVudGl0eVN0b3JhZ2VLZXkgfSk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgWDUwOUtleVBhaXIgeyBkb21haW46IHN0cmluZzsgY2VydDogQnVmZmVyOyBrZXk6IEJ1ZmZlcjsgfVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29tbW9uTmFtZShjZXJ0OiBCdWZmZXIgfCBzdHJpbmcpIHtcbiAgICBsZXQgc3ViamVjdCA9IG5ldyBjcnlwdG8uWDUwOUNlcnRpZmljYXRlKGNlcnQpLnN1YmplY3Q7XG4gICAgbGV0IHN1YmplY3RLVlBzID0gbmV3IE1hcChzdWJqZWN0LnNwbGl0KFwiLFwiKS5tYXAoeCA9PiB4LnRyaW0oKS5zcGxpdChcIj1cIikpLm1hcCh4ID0+IFt4WzBdLCB4LnNsaWNlKDEpLmpvaW4oXCI9XCIpXSkpO1xuICAgIGxldCBjb21tb25OYW1lID0gc3ViamVjdEtWUHMuZ2V0KFwiQ05cIik7XG4gICAgaWYgKCFjb21tb25OYW1lKSB0aHJvdyBuZXcgRXJyb3IoYE5vIGNvbW1vbiBuYW1lIGluIHN1YmplY3Q6ICR7c3ViamVjdH1gKTtcbiAgICByZXR1cm4gY29tbW9uTmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVg1MDkoXG4gICAgY29uZmlnOiB7XG4gICAgICAgIGRvbWFpbjogc3RyaW5nO1xuICAgICAgICBpc3N1ZXI6IFg1MDlLZXlQYWlyIHwgXCJzZWxmXCI7XG4gICAgICAgIGxpZmVTcGFuOiBudW1iZXI7XG4gICAgICAgIGtleVBhaXI6IHtcbiAgICAgICAgICAgIHB1YmxpY0tleTogZm9yZ2UuRWQyNTUxOVB1YmxpY0tleTtcbiAgICAgICAgICAgIHByaXZhdGVLZXk6IGZvcmdlLkVkMjU1MTlQcml2YXRlS2V5O1xuICAgICAgICB9O1xuICAgIH1cbik6IFg1MDlLZXlQYWlyIHtcbiAgICByZXR1cm4gbWVhc3VyZUJsb2NrKGZ1bmN0aW9uIGNyZWF0ZVg1MDkoKSB7XG4gICAgICAgIGxldCB7IGRvbWFpbiwgaXNzdWVyLCBsaWZlU3Bhbiwga2V5UGFpciB9ID0gY29uZmlnO1xuXG4gICAgICAgIGxldCBjZXJ0T2JqID0gZm9yZ2UucGtpLmNyZWF0ZUNlcnRpZmljYXRlKCk7XG4gICAgICAgIGNlcnRPYmoucHVibGljS2V5ID0ga2V5UGFpci5wdWJsaWNLZXkgYXMgdW5rbm93biBhcyBmb3JnZS5wa2kuUHVibGljS2V5O1xuICAgICAgICBjZXJ0T2JqLnNlcmlhbE51bWJlciA9IFwiMDFcIjtcbiAgICAgICAgLy8gR2l2ZSBpdCA1IG1pbnV0ZXMgYmVmb3JlIG5vdy4gSWYgd2UgZ2l2ZSBpdCB0b28gbXVjaCB0aW1lLCBpdCBjYW4gbG9vayBsaWtlIHRoZSBjZXJ0IGlzIHJlYWxseSBvbGQsIHdoaWNoIHdpbGwgdHJpZ2dlciB2YXJpb3VzIHByb2Nlc3NlcyB0byB0cnkgdG8gZ2V0IGEgZnJlc2hlciBvbmUgKGFzIGlmIGl0IGxhc3RzIGZvciAxIGhvdXIsIGJ1dCB3ZSBzZXQgbm90QmVmb3JlIHRvIDEgbW9udGggYWdvLCBpdCBsb29rcyAxIG1vbnRoIG9sZCwgYW5kIHNvIGFsbW9zdCBleHBpcmVkLCB3aGVuIGl0IGlzbid0Li4uKVxuICAgICAgICBjZXJ0T2JqLnZhbGlkaXR5Lm5vdEJlZm9yZSA9IG5ldyBEYXRlKERhdGUubm93KCkgLSAxMDAwICogNjAgKiA1KTtcbiAgICAgICAgY2VydE9iai52YWxpZGl0eS5ub3RBZnRlciA9IG5ldyBEYXRlKERhdGUubm93KCkgKyBsaWZlU3Bhbik7XG5cbiAgICAgICAgY29uc3QgY29tbW9uTmFtZUF0dHJzID0gW3sgbmFtZTogXCJjb21tb25OYW1lXCIsIHZhbHVlOiBkb21haW4gfV07XG4gICAgICAgIGNlcnRPYmouc2V0U3ViamVjdChjb21tb25OYW1lQXR0cnMpO1xuXG4gICAgICAgIGlmIChpc3N1ZXIgPT09IFwic2VsZlwiKSB7XG4gICAgICAgICAgICBjZXJ0T2JqLnNldElzc3Vlcihjb21tb25OYW1lQXR0cnMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2VydE9iai5zZXRJc3N1ZXIoZm9yZ2UucGtpLmNlcnRpZmljYXRlRnJvbVBlbShpc3N1ZXIuY2VydC50b1N0cmluZygpKS5zdWJqZWN0LmF0dHJpYnV0ZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGV4dGVuc2lvbnMgPSBbXTtcbiAgICAgICAgY29uc3QgaXNDQSA9IGlzc3VlciA9PT0gXCJzZWxmXCI7XG4gICAgICAgIGlmIChpc0NBKSB7XG4gICAgICAgICAgICBleHRlbnNpb25zLnB1c2goeyBuYW1lOiBcImJhc2ljQ29uc3RyYWludHNcIiwgY0E6IHRydWUgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxIb3N0RG9tYWluID0gXCIxMjctMC0wLTEuXCIgKyBkb21haW4uc3BsaXQoXCIuXCIpLnNsaWNlKC0yKS5qb2luKFwiLlwiKTtcblxuICAgICAgICBleHRlbnNpb25zLnB1c2goLi4uW1xuICAgICAgICAgICAgeyBuYW1lOiBcImtleVVzYWdlXCIsIGtleUNlcnRTaWduOiBpc0NBLCBkaWdpdGFsU2lnbmF0dXJlOiB0cnVlLCBub25SZXB1ZGlhdGlvbjogdHJ1ZSwga2V5RW5jaXBoZXJtZW50OiB0cnVlLCBkYXRhRW5jaXBoZXJtZW50OiB0cnVlIH0sXG4gICAgICAgICAgICB7IG5hbWU6IFwic3ViamVjdEtleUlkZW50aWZpZXJcIiB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6IFwic3ViamVjdEFsdE5hbWVcIixcbiAgICAgICAgICAgICAgICBhbHROYW1lczogW1xuICAgICAgICAgICAgICAgICAgICB7IHR5cGU6IDIsIHZhbHVlOiBkb21haW4gfSxcbiAgICAgICAgICAgICAgICAgICAgeyB0eXBlOiAyLCB2YWx1ZTogXCIqLlwiICsgZG9tYWluIH0sXG4gICAgICAgICAgICAgICAgICAgIHsgdHlwZTogMiwgdmFsdWU6IGxvY2FsSG9zdERvbWFpbiB9LFxuICAgICAgICAgICAgICAgICAgICAvLyBOT1RFOiBObyBsb25nZXIgYWxsb3cgMTI3LjAuMC4xICh7IHR5cGU6IDcsIGlwOiBcIjEyNy4wLjAuMVwiIH0pLCB0byBtYWtlIHRoaXMgbW9yZSBzZWN1cmUuIFdlIG1pZ2h0IGVuYWJsZSB0aGlzIGJlaGF2aW9yIGJlaGluZCBhIGZsYWcsIGZvciBkZXZlbG9wbWVudC5cbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLy8gTk9URTogbmFtZUNvbnN0cmFpbnRzIHJlcXVpcmUgb3VyIGZvcmtlZCBub2RlLWZvcmdlIChcIm5vZGUtZm9yZ2VcIjogXCJodHRwczovL2dpdGh1Yi5jb20vc2xpZnRpc3QvZm9yZ2UjZTYxODE4MWI0NjliMDdiZGM3MGI5NjhiMDM5MWJlYjhlZjVmZWNkNlwiKS4gQ2hyb21lIGlnbm9yZXMgdGhlbSAoaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9MTA3MjA4MyksIGJ1dCBvdXIgb3duIHZhbGlkYXRpb24gKHZhbGlkYXRlQ0FDZXJ0L3ZhbGlkYXRlQ2VydGlmaWNhdGUpIGVuZm9yY2VzIHRoZW0uXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJuYW1lQ29uc3RyYWludHNcIixcbiAgICAgICAgICAgICAgICBwZXJtaXR0ZWRTdWJ0cmVlczogW1xuICAgICAgICAgICAgICAgICAgICB7IHR5cGU6IDIsIHZhbHVlOiBmb3JnZS51dGlsLmVuY29kZVV0ZjgoZG9tYWluKSB9LFxuICAgICAgICAgICAgICAgICAgICB7IHR5cGU6IDIsIHZhbHVlOiBmb3JnZS51dGlsLmVuY29kZVV0ZjgobG9jYWxIb3N0RG9tYWluKSB9LFxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH0sXG4gICAgICAgIF0pO1xuICAgICAgICBjZXJ0T2JqLnNldEV4dGVuc2lvbnMoZXh0ZW5zaW9ucyk7XG5cblxuICAgICAgICBtZWFzdXJlQmxvY2soZnVuY3Rpb24gc2lnbigpIHtcbiAgICAgICAgICAgIGlmIChpc3N1ZXIgPT09IFwic2VsZlwiKSB7XG4gICAgICAgICAgICAgICAgY2VydE9iai5zaWduKGtleVBhaXIucHJpdmF0ZUtleSBhcyBhbnkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjZXJ0T2JqLnNpZ24oZm9yZ2UuZWQyNTUxOS5wcml2YXRlS2V5RnJvbVBlbShpc3N1ZXIua2V5LnRvU3RyaW5nKCkpIGFzIGFueSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBtZWFzdXJlQmxvY2soZnVuY3Rpb24gdG9QZW1zKCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBkb21haW4sXG4gICAgICAgICAgICAgICAgY2VydDogQnVmZmVyLmZyb20oZm9yZ2UucGtpLmNlcnRpZmljYXRlVG9QZW0oY2VydE9iaikpLFxuICAgICAgICAgICAgICAgIGtleTogQnVmZmVyLmZyb20ocHJpdmF0ZUtleVRvUGVtKGtleVBhaXIucHJpdmF0ZUtleSkpLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gcHJpdmF0ZUtleVRvUGVtKGtleTogZm9yZ2UuRWQyNTUxOVByaXZhdGVLZXkpIHtcbiAgICByZXR1cm4gZm9yZ2UuZWQyNTUxOS5wcml2YXRlS2V5VG9QZW0oa2V5KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUNlcnQoUEVNb3JERVI6IHN0cmluZyB8IEJ1ZmZlcikge1xuICAgIHJldHVybiBmb3JnZS5wa2kuY2VydGlmaWNhdGVGcm9tUGVtKG5vcm1hbGl6ZUNlcnRUb1BFTShQRU1vckRFUikpO1xufVxuXG5mdW5jdGlvbiBnZXRFRDI1NTE5UHVibGljS2V5KGNlcnRQYXJzZWQ6IGZvcmdlLnBraS5DZXJ0aWZpY2F0ZSk6IGZvcmdlLkVkMjU1MTlQdWJsaWNLZXkge1xuICAgIGxldCBwdWJsaWNLZXkgPSBjZXJ0UGFyc2VkLnB1YmxpY0tleTtcbiAgICBpZiAoIShcInB1YmxpY0tleUJ5dGVzXCIgaW4gcHVibGljS2V5KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE9ubHkgRUQyNTUxOSBjZXJ0aWZpY2F0ZXMgYXJlIHN1cHBvcnRlZCwgdGhlIGNlcnRpZmljYXRlIHB1YmxpYyBrZXkgaXMgbm90IEVEMjU1MTkgKHN1YmplY3Q6ICR7Y2VydFBhcnNlZC5zdWJqZWN0LmdldEZpZWxkKFwiQ05cIik/LnZhbHVlfSlgKTtcbiAgICB9XG4gICAgcmV0dXJuIHB1YmxpY0tleSBhcyB1bmtub3duIGFzIGZvcmdlLkVkMjU1MTlQdWJsaWNLZXk7XG59XG5cbi8vIEdldHMgYSB1bmlxdWUgdmFsdWUgdG8gcmVwcmVzZW50IHRoZSBwdWJsaWMga2V5XG5leHBvcnQgZnVuY3Rpb24gZ2V0UHVibGljSWRlbnRpZmllcihQRU1vckRFUjogc3RyaW5nIHwgQnVmZmVyKTogQnVmZmVyIHtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20oZ2V0RUQyNTUxOVB1YmxpY0tleShwYXJzZUNlcnQoUEVNb3JERVIpKS5wdWJsaWNLZXlCeXRlcyk7XG59XG5cbmV4cG9ydCBjb25zdCBzaWduID0gbWVhc3VyZVdyYXAoZnVuY3Rpb24gc2lnbihrZXlQYWlyOiB7IGtleTogc3RyaW5nIHwgQnVmZmVyIH0sIGRhdGE6IHVua25vd24pOiBzdHJpbmcge1xuICAgIGxldCBkYXRhU3RyID0gSlNPTi5zdHJpbmdpZnkoZGF0YSk7XG4gICAgbGV0IHByaXZhdGVLZXkgPSBmb3JnZS5lZDI1NTE5LnByaXZhdGVLZXlGcm9tUGVtKGtleVBhaXIua2V5LnRvU3RyaW5nKCkpO1xuICAgIHJldHVybiBwcml2YXRlS2V5LnNpZ24oZGF0YVN0cik7XG59KTtcblxuZXhwb3J0IGZ1bmN0aW9uIHZlcmlmeShjZXJ0OiBzdHJpbmcsIHNpZ25hdHVyZTogc3RyaW5nLCBkYXRhOiB1bmtub3duKSB7XG4gICAgbGV0IGNlcnRPYmogPSBwYXJzZUNlcnQoY2VydCk7XG4gICAgbGV0IHB1YmxpY0tleSA9IGdldEVEMjU1MTlQdWJsaWNLZXkoY2VydE9iaik7XG4gICAgbGV0IGRhdGFTdHIgPSBKU09OLnN0cmluZ2lmeShkYXRhKTtcbiAgICBpZiAoIXB1YmxpY0tleS52ZXJpZnkoZGF0YVN0ciwgc2lnbmF0dXJlKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFNpZ25hdHVyZSB2ZXJpZmljYXRpb24gZmFpbGVkLiBTaWduYXR1cmU6ICR7SlNPTi5zdHJpbmdpZnkoc2lnbmF0dXJlKX0gfCBEYXRhOiAke2VsbGlwc2l6ZShkYXRhU3RyLCAxMDI0KX1gKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUNlcnRUb1BFTShQRU1vckRFUjogc3RyaW5nIHwgQnVmZmVyKTogc3RyaW5nIHtcbiAgICBpZiAoUEVNb3JERVIudG9TdHJpbmcoKS5zdGFydHNXaXRoKFwiLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tXCIpKSB7XG4gICAgICAgIHJldHVybiBQRU1vckRFUi50b1N0cmluZygpO1xuICAgIH1cbiAgICBQRU1vckRFUiA9IFBFTW9yREVSLnRvU3RyaW5nKFwiYmFzZTY0XCIpO1xuICAgIHJldHVybiBcIi0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLVxcblwiICsgUEVNb3JERVIgKyBcIlxcbi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS1cIjtcbn1cblxuLy8gQmFzZTMyIChSRkMgNDY0OCwgbG93ZXJjYXNlLCB1bnBhZGRlZCksIGFzIGRvbWFpbiBuYW1lcyBhcmUgY2FzZS1pbnNlbnNpdGl2ZSwgd2hpY2ggcnVsZXMgb3V0IGJhc2U2NC9oZXgtd2l0aC1jYXNlXG5jb25zdCBiYXNlMzJBbHBoYWJldCA9IFwiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoyMzQ1NjdcIjtcbmZ1bmN0aW9uIGVuY29kZUJhc2UzMihieXRlczogQnVmZmVyKTogc3RyaW5nIHtcbiAgICBsZXQgcmVzdWx0ID0gXCJcIjtcbiAgICBsZXQgYml0Q291bnQgPSAwO1xuICAgIGxldCB2YWx1ZSA9IDA7XG4gICAgZm9yIChsZXQgYnl0ZSBvZiBieXRlcykge1xuICAgICAgICB2YWx1ZSA9ICh2YWx1ZSA8PCA4KSB8IGJ5dGU7XG4gICAgICAgIGJpdENvdW50ICs9IDg7XG4gICAgICAgIHdoaWxlIChiaXRDb3VudCA+PSA1KSB7XG4gICAgICAgICAgICByZXN1bHQgKz0gYmFzZTMyQWxwaGFiZXRbKHZhbHVlID4+PiAoYml0Q291bnQgLSA1KSkgJiAzMV07XG4gICAgICAgICAgICBiaXRDb3VudCAtPSA1O1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChiaXRDb3VudCA+IDApIHtcbiAgICAgICAgcmVzdWx0ICs9IGJhc2UzMkFscGhhYmV0Wyh2YWx1ZSA8PCAoNSAtIGJpdENvdW50KSkgJiAzMV07XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIGdldERvbWFpblBhcnRGcm9tUHVibGljS2V5KHB1YmxpY0tleTogeyBwdWJsaWNLZXlCeXRlczogQnVmZmVyIH0gfCBCdWZmZXIpIHtcbiAgICBsZXQgYnl0ZXM6IEJ1ZmZlcjtcbiAgICBpZiAoXCJwdWJsaWNLZXlCeXRlc1wiIGluIHB1YmxpY0tleSkge1xuICAgICAgICBieXRlcyA9IHB1YmxpY0tleS5wdWJsaWNLZXlCeXRlcztcbiAgICB9IGVsc2Uge1xuICAgICAgICBieXRlcyA9IHB1YmxpY0tleTtcbiAgICB9XG4gICAgcmV0dXJuIFwiYlwiICsgZW5jb2RlQmFzZTMyKEJ1ZmZlci5mcm9tKHNoYTI2NS5zaGEyNTYuYXJyYXkoQnVmZmVyLmZyb20oYnl0ZXMpKSkpLnNsaWNlKDAsIDIwKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlQ0FDZXJ0KGRvbWFpbjogc3RyaW5nLCBjZXJ0OiBzdHJpbmcgfCBCdWZmZXIpIHtcbiAgICBsZXQgY2VydFBhcnNlZCA9IHBhcnNlQ2VydChjZXJ0KTtcblxuICAgIGxldCBzdWJqZWN0ID0gY2VydFBhcnNlZC5zdWJqZWN0LmdldEZpZWxkKFwiQ05cIikudmFsdWUgYXMgc3RyaW5nO1xuICAgIGxldCBsb2NhbGhvc3REb21haW4gPSBcIjEyNy0wLTAtMS5cIiArIHN1YmplY3Quc3BsaXQoXCIuXCIpLnNsaWNlKC0yKS5qb2luKFwiLlwiKTtcblxuICAgIGxldCBkb21haW5QYXJ0cyA9IHN1YmplY3Quc3BsaXQoXCIuXCIpLnJldmVyc2UoKTtcblxuICAgIGxldCByb290RG9tYWluUGFyc2VkID0gW2RvbWFpblBhcnRzLnNoaWZ0KCksIGRvbWFpblBhcnRzLnNoaWZ0KCldLnJldmVyc2UoKS5qb2luKFwiLlwiKTtcbiAgICBpZiAocm9vdERvbWFpblBhcnNlZCAhPT0gZG9tYWluKSB7XG4gICAgICAgIC8vIFRoaXMgaXMgaW1wb3J0YW50LCBhcyBvdXIgdHJ1c3Qgc3RvcmUgY29udGFpbnMgbW9yZSB0aGVuIGp1c3QgT1VSIGNlcnRpZmljYXRlcywgc28gaWYgd2UgYWxsb3cgYW55IGRvbWFpbnMgdGhlbiByZWFsIGRvbWFpbnMgY2FuIGltcGVyc29uYXRlIGFueW9uZSEgSXQgaGFzIHRvIGJlIE9VUiBkb21haW4gdG8gYmUgdHJ1c3RlZCFcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDZXJ0aWZpY2F0ZSByb290IGRvbWFpbiBzaG91bGQgYmUgJHtkb21haW59LCBidXQgaXMgJHtyb290RG9tYWluUGFyc2VkfWApO1xuICAgIH1cbiAgICAvLyBUT0RPOiBNYXliZSBqdXN0IHNraXAgaWYgaXQgaXNuJ3QgYSBoYXNoIHN0cmluZz9cbiAgICBpZiAoZG9tYWluUGFydHNbMF0gPT09IFwibm9wcm94eVwiKSB7XG4gICAgICAgIGRvbWFpblBhcnRzLnNoaWZ0KCk7XG4gICAgfVxuXG4gICAgbGV0IGNlcnRFeHBlY3RlZFB1YmxpY0tleVBhcnQgPSAoZG9tYWluUGFydHMuc2hpZnQoKSB8fCBcIlwiKS5zcGxpdChcIi1cIikuc2xpY2UoLTEpWzBdO1xuICAgIGxldCBjZXJ0QWN0dWFsUHVibGljS2V5UGFydCA9IGdldERvbWFpblBhcnRGcm9tUHVibGljS2V5KGdldEVEMjU1MTlQdWJsaWNLZXkoY2VydFBhcnNlZCkpO1xuICAgIGlmIChjZXJ0RXhwZWN0ZWRQdWJsaWNLZXlQYXJ0ICE9PSBjZXJ0QWN0dWFsUHVibGljS2V5UGFydCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENlcnRpZmljYXRlIHB1YmxpYyBrZXkgaW4gdGhlIHVybCBpcyAke2NlcnRFeHBlY3RlZFB1YmxpY0tleVBhcnR9LCBidXQgaW4gdGhlIGNlcnQgaXMgJHtjZXJ0QWN0dWFsUHVibGljS2V5UGFydH1gKTtcbiAgICB9XG5cbiAgICAvLyBBTFNPLCByZXF1aXJlIG5hbWUgY29uc3RyYWludHMgdG8gYmUgcHJlc2VudCwgYW5kIHRvIHJlc3RyaWN0IHRvIHRoZSBcIkNOXCJcbiAgICBsZXQgbmFtZUNvbnN0cmFpbnRzID0gY2VydFBhcnNlZC5nZXRFeHRlbnNpb24oXCJuYW1lQ29uc3RyYWludHNcIikgYXMgYW55O1xuICAgIGlmICghbmFtZUNvbnN0cmFpbnRzKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2VydGlmaWNhdGUgbXVzdCBoYXZlIG5hbWVDb25zdHJhaW50c2ApO1xuICAgIH1cbiAgICBsZXQgc3VidHJlZXMgPSBuYW1lQ29uc3RyYWludHMucGVybWl0dGVkU3VidHJlZXM7XG4gICAgaWYgKCFzdWJ0cmVlcykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENlcnRpZmljYXRlIG11c3QgaGF2ZSBuYW1lQ29uc3RyYWludHMucGVybWl0dGVkU3VidHJlZXNgKTtcbiAgICB9XG4gICAgbGV0IHN1YnRyZWVWYWx1ZXMgPSBzdWJ0cmVlcy5tYXAoKHg6IGFueSkgPT4geC52YWx1ZSk7XG4gICAgLy8gSWdub3JlIGxvY2FsaG9zdERvbWFpbiwgYXMgaXQgY2FuIGFsd2F5cyBzYWZlbHkgYmUgYWxsb3dlZCAodGhlIHNhbWUgbWFjaGluZSBpcyBhbHdheXMgYWxsb3dlZCkuXG4gICAgc3VidHJlZVZhbHVlcyA9IHN1YnRyZWVWYWx1ZXMuZmlsdGVyKCh4OiBzdHJpbmcpID0+IHggIT09IGxvY2FsaG9zdERvbWFpbik7XG4gICAgaWYgKHN1YnRyZWVWYWx1ZXMubGVuZ3RoICE9PSAxIHx8IHN1YnRyZWVWYWx1ZXNbMF0gIT09IHN1YmplY3QpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDZXJ0aWZpY2F0ZSBtdXN0IGhhdmUgYSBzaW5nbGUgY29uc3RyYWluZWQgZG9tYWluIChoYWQgJHtKU09OLnN0cmluZ2lmeShzdWJ0cmVlVmFsdWVzKX0pYCk7XG4gICAgfVxuXG4gICAgdmFsaWRhdGVBbHROYW1lcyhjZXJ0UGFyc2VkLCBzdWJqZWN0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlQ2VydGlmaWNhdGUoZG9tYWluOiBzdHJpbmcsIGNlcnQ6IEJ1ZmZlciB8IHN0cmluZywgaXNzdWVyQ2VydDogQnVmZmVyIHwgc3RyaW5nKSB7XG4gICAgdmFsaWRhdGVDQUNlcnQoZG9tYWluLCBpc3N1ZXJDZXJ0KTtcblxuICAgIGxldCBjZXJ0UGFyc2VkID0gcGFyc2VDZXJ0KGNlcnQpO1xuICAgIGxldCBzdWJqZWN0ID0gY2VydFBhcnNlZC5zdWJqZWN0LmdldEZpZWxkKFwiQ05cIikudmFsdWUgYXMgc3RyaW5nO1xuICAgIGxldCBsb2NhbGhvc3REb21haW4gPSBcIjEyNy0wLTAtMS5cIiArIHN1YmplY3Quc3BsaXQoXCIuXCIpLnNsaWNlKC0yKS5qb2luKFwiLlwiKTtcblxuICAgIGxldCBkb21haW5QYXJ0cyA9IHN1YmplY3Quc3BsaXQoXCIuXCIpLnJldmVyc2UoKTtcblxuICAgIGxldCByb290RG9tYWluUGFyc2VkID0gW2RvbWFpblBhcnRzLnNoaWZ0KCksIGRvbWFpblBhcnRzLnNoaWZ0KCldLnJldmVyc2UoKS5qb2luKFwiLlwiKTtcbiAgICBpZiAocm9vdERvbWFpblBhcnNlZCAhPT0gZG9tYWluKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2VydGlmaWNhdGUgcm9vdCBkb21haW4gc2hvdWxkIGJlICR7ZG9tYWlufSwgYnV0IGlzICR7cm9vdERvbWFpblBhcnNlZH1gKTtcbiAgICB9XG4gICAgLy8gVE9ETzogTWF5YmUganVzdCBza2lwIGlmIGl0IGlzbid0IGEgaGFzaCBzdHJpbmc/XG4gICAgaWYgKGRvbWFpblBhcnRzWzBdID09PSBcIm5vcHJveHlcIikge1xuICAgICAgICBkb21haW5QYXJ0cy5zaGlmdCgpO1xuICAgIH1cblxuICAgIGxldCBpc3N1ZXJDZXJ0UGFyc2VkID0gcGFyc2VDZXJ0KGlzc3VlckNlcnQpO1xuXG4gICAgbGV0IGlzc3VlckV4cGVjdGVkUHVibGljS2V5UGFydCA9IGRvbWFpblBhcnRzLnNoaWZ0KCkgfHwgXCJcIjtcbiAgICBsZXQgaXNzdWVyQWN0dWFsUHVibGljS2V5UGFydCA9IGdldERvbWFpblBhcnRGcm9tUHVibGljS2V5KGdldEVEMjU1MTlQdWJsaWNLZXkoaXNzdWVyQ2VydFBhcnNlZCkpO1xuICAgIGlmIChpc3N1ZXJFeHBlY3RlZFB1YmxpY0tleVBhcnQgIT09IGlzc3VlckFjdHVhbFB1YmxpY0tleVBhcnQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJc3N1ZXIgcHVibGljIGtleSBpbiB0aGUgdXJsIGlzICR7aXNzdWVyRXhwZWN0ZWRQdWJsaWNLZXlQYXJ0fSwgYnV0IGluIHRoZSBjZXJ0IGlzICR7aXNzdWVyQWN0dWFsUHVibGljS2V5UGFydH1gKTtcbiAgICB9XG5cbiAgICAvLyBUYWtlIHRoZSBsYXN0IHBhcnRcbiAgICBsZXQgY2VydEV4cGVjdGVkUHVibGljS2V5UGFydCA9IGRvbWFpblBhcnRzLnNoaWZ0KCkgfHwgXCJcIjtcbiAgICBsZXQgY2VydEFjdHVhbFB1YmxpY0tleVBhcnQgPSBnZXREb21haW5QYXJ0RnJvbVB1YmxpY0tleShnZXRFRDI1NTE5UHVibGljS2V5KGNlcnRQYXJzZWQpKTtcbiAgICBpZiAoY2VydEV4cGVjdGVkUHVibGljS2V5UGFydCAhPT0gY2VydEFjdHVhbFB1YmxpY0tleVBhcnQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDZXJ0aWZpY2F0ZSBwdWJsaWMga2V5IGluIHRoZSB1cmwgaXMgJHtjZXJ0RXhwZWN0ZWRQdWJsaWNLZXlQYXJ0fSwgYnV0IGluIHRoZSBjZXJ0IGlzICR7Y2VydEFjdHVhbFB1YmxpY0tleVBhcnR9YCk7XG4gICAgfVxuXG5cbiAgICBsZXQgbmFtZUNvbnN0cmFpbnRzID0gaXNzdWVyQ2VydFBhcnNlZC5nZXRFeHRlbnNpb24oXCJuYW1lQ29uc3RyYWludHNcIikgYXMgYW55O1xuICAgIGlmICghbmFtZUNvbnN0cmFpbnRzKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ0EgbXVzdCBoYXZlIG5hbWVDb25zdHJhaW50c2ApO1xuICAgIH1cbiAgICBsZXQgc3VidHJlZXMgPSBuYW1lQ29uc3RyYWludHMucGVybWl0dGVkU3VidHJlZXM7XG4gICAgaWYgKCFzdWJ0cmVlcykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENBIG11c3QgaGF2ZSBuYW1lQ29uc3RyYWludHMucGVybWl0dGVkU3VidHJlZXNgKTtcbiAgICB9XG4gICAgbGV0IHN1YnRyZWVWYWx1ZXMgPSBzdWJ0cmVlcy5tYXAoKHg6IGFueSkgPT4geC52YWx1ZSk7XG4gICAgLy8gSWdub3JlIGxvY2FsaG9zdERvbWFpbiwgYXMgaXQgY2FuIGFsd2F5cyBzYWZlbHkgYmUgYWxsb3dlZCAodGhlIHNhbWUgbWFjaGluZSBpcyBhbHdheXMgYWxsb3dlZCkuXG4gICAgc3VidHJlZVZhbHVlcyA9IHN1YnRyZWVWYWx1ZXMuZmlsdGVyKCh4OiBzdHJpbmcpID0+IHggIT09IGxvY2FsaG9zdERvbWFpbik7XG4gICAgaWYgKHN1YnRyZWVWYWx1ZXMubGVuZ3RoICE9PSAxKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ0EgbXVzdCBoYXZlIGEgc2luZ2xlIGNvbnN0cmFpbmVkIGRvbWFpbiAoaGFkICR7SlNPTi5zdHJpbmdpZnkoc3VidHJlZVZhbHVlcyl9KWApO1xuICAgIH1cblxuICAgIGxldCBzdWJ0cmVlID0gc3VidHJlZVZhbHVlc1swXTtcbiAgICBpZiAoc3VidHJlZSAhPT0gc3ViamVjdCAmJiAhc3ViamVjdC5lbmRzV2l0aChcIi5cIiArIHN1YnRyZWUpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2VydGlmaWNhdGUgbXVzdCBiZSBhIHN1YnRyZWUgb2YgdGhlIENBIChDQTogJHtzdWJ0cmVlfSwgY2VydDogJHtzdWJqZWN0fSlgKTtcbiAgICB9XG5cbiAgICB2YWxpZGF0ZUFsdE5hbWVzKGNlcnRQYXJzZWQsIHN1YmplY3QpO1xuXG4gICAgLy8gVmVyaWZ5IGlzc3VlciBBQ1RVQUxMWSBzaWduZWQgY2VydFBhcnNlZFxuICAgIGlmICghaXNzdWVyQ2VydFBhcnNlZC52ZXJpZnkoY2VydFBhcnNlZCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJc3N1ZXIgZGlkIG5vdCBzaWduIGNlcnRpZmljYXRlYCk7XG4gICAgfVxufVxuXG4vLyBSZXF1aXJlIGFsdCBuYW1lcyB0byBiZSBlaXRoZXIgZXF1YWwgdG8gXCJDTlwiLCBvciBhIHN1YnRyZWUgb2YgXCJDTlwiXG5mdW5jdGlvbiB2YWxpZGF0ZUFsdE5hbWVzKGNlcnRQYXJzZWQ6IGZvcmdlLnBraS5DZXJ0aWZpY2F0ZSwgc3ViamVjdDogc3RyaW5nKSB7XG4gICAgbGV0IGxvY2FsaG9zdERvbWFpbiA9IFwiMTI3LTAtMC0xLlwiICsgc3ViamVjdC5zcGxpdChcIi5cIikuc2xpY2UoLTIpLmpvaW4oXCIuXCIpO1xuXG4gICAgbGV0IGFsdE5hbWVzT2JqID0gY2VydFBhcnNlZC5nZXRFeHRlbnNpb24oXCJzdWJqZWN0QWx0TmFtZVwiKSBhcyBhbnk7XG4gICAgbGV0IGFsdE5hbWVzID0gYWx0TmFtZXNPYmo/LmFsdE5hbWVzLm1hcCgoeDogYW55KSA9PiB4LnZhbHVlKTtcbiAgICAvLyBBbGxvdyBsb2NhbGhvc3REb21haW4sIGFzIGl0IGNhbiBhbHdheXMgc2FmZWx5IGJlIGFsbG93ZWRcbiAgICBhbHROYW1lcyA9IGFsdE5hbWVzLmZpbHRlcigoeDogc3RyaW5nKSA9PiB4ICE9PSBsb2NhbGhvc3REb21haW4pO1xuICAgIGlmIChcbiAgICAgICAgYWx0TmFtZXMuc29tZSgoeDogc3RyaW5nKSA9PlxuICAgICAgICAgICAgIShcbiAgICAgICAgICAgICAgICB4ID09PSBzdWJqZWN0XG4gICAgICAgICAgICAgICAgfHwgeC5lbmRzV2l0aChcIi5cIiArIHN1YmplY3QpXG4gICAgICAgICAgICAgICAgLy8gTk9URTogV2UgZG9uJ3QgYWxsb3cgMTI3LjAuMC4xICh8fCB4ID09PSBCdWZmZXIuZnJvbShbMTI3LCAwLCAwLCAxXSkudG9TdHJpbmcoKSksIGJlY2F1c2UgaXQgaXMgc28gZWFzeSB0byBwdWJsaXNoIGEgMTI3LjAuMC4xIEEgcmVjb3JkLCBhbmQgZXZlbiB0byBnZW5lcmF0ZSBhIHJlYWwgY2VydCwgc28gd2Ugc2hvdWxkIGp1c3QgZG8gdGhhdCwgYW5kIGtlZXAgaXQgc2VjdXJlLiBJZiB3ZSBuZWVkIHRoaXMgZm9yIGRldmVsb3BtZW50IHdlIGNhbiBwdXQgaXQgYmVoaW5kIGEgZmxhZywgc28gbm9uLWRldmVsb3BtZW50IGluc3RhbmNlcyBhcmUgc3RpbGwgc2VjdXJlLlxuICAgICAgICAgICAgKVxuICAgICAgICApXG4gICAgKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBhbHQgbmFtZXMuIE11c3QgYmUgc3VidHJlZXMgb2YgdGhlIHN1YmplY3QgKENOKSAke0pTT04uc3RyaW5naWZ5KHN1YmplY3QpfSwgd2FzICR7SlNPTi5zdHJpbmdpZnkoYWx0TmFtZXMpfWApO1xuICAgIH1cbn1cblxuXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVLZXlQYWlyKCkge1xuICAgIHJldHVybiBtZWFzdXJlQmxvY2soZnVuY3Rpb24gZ2VuZXJhdGVLZXlQYWlyKCkge1xuICAgICAgICAvLyBOT1RFOiBXZSB1c2UgRUQyNTUxOSBiZWNhdXNlIGl0IGNhbiBnZW5lcmF0ZSBrZXlzIGFib3V0IDEwWCBmYXN0ZXIgdGhhbiBSU0EgKHdoaWNoIGlzIHN0aWxsIHNsb3csIH42bXMgb24gbXkgbWFjaGluZSwgc28gd2UgREVGSU5JVEVMWSBkb24ndCB3YW50IGl0IHRvIGJlIDEwWCBzbG93ZXIhKSAtIGh0dHBzOi8vc2VjdXJpdHkuc3RhY2tleGNoYW5nZS5jb20vYS8yMzY5NDMvMjgyMzY3XG4gICAgICAgIHJldHVybiBmb3JnZS5lZDI1NTE5LmdlbmVyYXRlS2V5UGFpcigpO1xuICAgIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVDQShkb21haW46IHN0cmluZykge1xuICAgIGNvbnN0IGtleVBhaXIgPSBnZW5lcmF0ZUtleVBhaXIoKTtcbiAgICBsZXQgY2FQdWJsaWNLZXlQYXJ0ID0gZ2V0RG9tYWluUGFydEZyb21QdWJsaWNLZXkoa2V5UGFpci5wdWJsaWNLZXkpO1xuICAgIGxldCBmdWxsRG9tYWluID0gYCR7Y2FQdWJsaWNLZXlQYXJ0fS4ke2RvbWFpbn1gO1xuICAgIHJldHVybiBjcmVhdGVYNTA5KHsgZG9tYWluOiBmdWxsRG9tYWluLCBpc3N1ZXI6IFwic2VsZlwiLCBrZXlQYWlyLCBsaWZlU3BhbjogdGltZUluRGF5ICogMzY1ICogMjAgfSk7XG59XG5cbmxldCBpZGVudGl0eUNBID0gY2FjaGUoKGRvbWFpbjogc3RyaW5nKSA9PiBsYXp5KCgpOiBYNTA5S2V5UGFpciA9PiB7XG4gICAgbGV0IGlkZW50aXR5Q0FDYWNoZWQgPSBnZXRJZGVudGl0eVN0b3JlKGRvbWFpbik7XG4gICAgbGV0IGNhQ2FjaGVkID0gaWRlbnRpdHlDQUNhY2hlZC5nZXQoKTtcbiAgICBpZiAoIWNhQ2FjaGVkKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBHZW5lcmF0aW5nIG5ldyBpZGVudGl0eSBDQWApO1xuICAgICAgICBsZXQgdmFsdWUgPSBnZW5lcmF0ZUNBKGRvbWFpbik7XG4gICAgICAgIGNhQ2FjaGVkID0ge1xuICAgICAgICAgICAgZG9tYWluOiB2YWx1ZS5kb21haW4sXG4gICAgICAgICAgICBjZXJ0QjY0OiB2YWx1ZS5jZXJ0LnRvU3RyaW5nKFwiYmFzZTY0XCIpLFxuICAgICAgICAgICAga2V5QjY0OiB2YWx1ZS5rZXkudG9TdHJpbmcoXCJiYXNlNjRcIiksXG4gICAgICAgIH07XG4gICAgICAgIGlkZW50aXR5Q0FDYWNoZWQuc2V0KGNhQ2FjaGVkKTtcbiAgICB9XG4gICAgbGV0IHJlc3VsdCA9IHtcbiAgICAgICAgZG9tYWluOiBjYUNhY2hlZC5kb21haW4sXG4gICAgICAgIGNlcnQ6IEJ1ZmZlci5mcm9tKGNhQ2FjaGVkLmNlcnRCNjQsIFwiYmFzZTY0XCIpLFxuICAgICAgICBrZXk6IEJ1ZmZlci5mcm9tKGNhQ2FjaGVkLmtleUI2NCwgXCJiYXNlNjRcIiksXG4gICAgfTtcbiAgICB0cnVzdENlcnRpZmljYXRlKHJlc3VsdC5jZXJ0LnRvU3RyaW5nKCkpO1xuICAgIHJldHVybiByZXN1bHQ7XG59KSk7XG5cbi8vIElNUE9SVEFOVCEgV2UgZG8gbm90IGVtYmVkIGFueSBkZWJ1ZyBpbmZvIGluIHRoaXMgZG9tYWluLiBJZiB3ZSBkaWQsIGl0IHdvdWxkIGJlIHVzZWZ1bCwgYnV0Li4uIHBvdGVudGFsbHkgYSBzZWN1cml0eSB2dWxuZXJhYmlsaXR5LCBhcyBpZiB0aGUgZGVidWcgaW5mbyAoc3VjaCBhcyBhIHByZWZpeCkgaXMgdXNlZCB0byBpZGVudGlmeSB3aGF0IGEgY2VydGlmaWNhdGUgaXMgZm9yLCBpdCB3b3VsZCBiZSBlYXN5IGZvciBhbiBhdHRhY2sgdG8gZm9yZ2UgdGhpcyAoYXMgdGhlIGRlYnVnIGluZm8gd29uJ3QgYmUgc2VjdXJlZCkuIFNvIGl0IGlzIG11Y2ggYmV0dGVyIHRvIGtlZXAgdGhlIGNlcnRpZmljYXRlIG9wYXF1ZSwgYW5kIHRoZW4gcmVxdWlyZSBhbnkgbWV0YWRhdGEgdG8gYmUgYWN0dWFsbHkgdmV0dGVkIChhbmQgaG9wZWZ1bGx5IHN0b3JlZCBpbiBhIFVJLCBzaG93aW5nIElQLCB0aW1lLCBldGMpLlxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNlcnRGcm9tQ0EoY29uZmlnOiB7XG4gICAgQ0FLZXlQYWlyOiBYNTA5S2V5UGFpcjtcbn0pOiBYNTA5S2V5UGFpciB7XG4gICAgcmV0dXJuIG1lYXN1cmVCbG9jayhmdW5jdGlvbiBjcmVhdGVDZXJ0RnJvbUNBKCkge1xuICAgICAgICBsZXQgeyBDQUtleVBhaXIgfSA9IGNvbmZpZztcbiAgICAgICAgY29uc3Qga2V5UGFpciA9IGdlbmVyYXRlS2V5UGFpcigpO1xuICAgICAgICBsZXQgZG9tYWluS2V5UGFydCA9IGdldERvbWFpblBhcnRGcm9tUHVibGljS2V5KGtleVBhaXIucHVibGljS2V5KTtcbiAgICAgICAgbGV0IGZ1bGxEb21haW4gPSBgJHtkb21haW5LZXlQYXJ0fS4ke2NvbmZpZy5DQUtleVBhaXIuZG9tYWlufWA7XG4gICAgICAgIHJldHVybiBjcmVhdGVYNTA5KHtcbiAgICAgICAgICAgIGRvbWFpbjogZnVsbERvbWFpbixcbiAgICAgICAgICAgIGlzc3VlcjogQ0FLZXlQYWlyLFxuICAgICAgICAgICAga2V5UGFpcixcbiAgICAgICAgICAgIGxpZmVTcGFuOiB0aW1lSW5EYXkgKiAzNjUgKiAxMCxcbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRNYWNoaW5lSWQoZG9tYWluTmFtZU9yTm9kZUlkOiBzdHJpbmcsIGRvbWFpbjogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGRlY29kZU5vZGVJZEFzc2VydChkb21haW5OYW1lT3JOb2RlSWQsIGRvbWFpbiwgXCJhbGxvd01pc3NpbmdUaHJlYWRJZFwiKS5tYWNoaW5lSWQ7XG59XG5cbmV4cG9ydCB0eXBlIE5vZGVJZFBhcnRzID0ge1xuICAgIHRocmVhZElkOiBzdHJpbmc7XG4gICAgbWFjaGluZUlkOiBzdHJpbmc7XG4gICAgZG9tYWluOiBzdHJpbmc7XG4gICAgcG9ydDogbnVtYmVyO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGVOb2RlSWQobm9kZUlkOiBzdHJpbmcsIGRvbWFpbjogc3RyaW5nLCBhbGxvd01pc3NpbmdUaHJlYWRJZD86IFwiYWxsb3dNaXNzaW5nVGhyZWFkSWRcIik6IE5vZGVJZFBhcnRzIHwgdW5kZWZpbmVkIHtcbiAgICBsZXQgbG9jYXRpb25PYmogPSBnZXROb2RlSWRMb2NhdGlvbihub2RlSWQpO1xuICAgIGlmICghbG9jYXRpb25PYmopIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgbGV0IHBhcnRzID0gbG9jYXRpb25PYmouYWRkcmVzcy5zcGxpdChcIi5cIik7XG4gICAgLy8gTk9URTogV2UgaGF2ZSB0byBvbmx5IGFsbG93IGxvY2FsaG9zdCBkb21haW5zIG9uIG91ciBvd24gZG9tYWluLCBhcyB0aGUgdW5kZXJseWluZyBkb21haW4gZ2V0cyBzdHJpcHBlZCB3aGVuIHdlJ3JlIGxvb2tpbmcgYXQgdGhlIG1hY2hpbmVJZC4gU28gaWYgd2UgYWxsb3dlZCBsb2NhbGhvc3QgZG9tYWlucyBvbiBvdGhlciBkb21haW5zLCBhIHNlcnZlciBjb3VsZCB0cmljayB1cyBpbnRvIGNvbm5lY3RpbmcgdG8gaXQsIGFuZCB0aGVuIG9uY2UgdGhlIGNvbm5lY3Rpb24gaXMgZXN0YWJsaXNoZWQsIGl0IGNvdWxkIHRhbGsgYmFjayBhbmQgd2Ugd291bGQgdGhpbmsgaXQgaGFzIGEgbG9jYWxob3N0IG1hY2hpbmVJZCwgd2hpY2ggaXMgaW1wbGljaXRseSB0cnVzdGVkLCB3aGljaCB3b3VsZCB0aGVuIGdpdmUgaXQgYWNjZXNzIHRvIGV2ZXJ5dGhpbmcuXG4gICAgaWYgKGxvY2F0aW9uT2JqLmFkZHJlc3MgPT09IGAxMjctMC0wLTEuJHtkb21haW59YCAmJiBub2RlSWQuaW5jbHVkZXMoXCI6XCIpKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0aHJlYWRJZDogXCJcIixcbiAgICAgICAgICAgIG1hY2hpbmVJZDogcGFydHMuYXQoLTMpIHx8IFwiXCIsXG4gICAgICAgICAgICBkb21haW46IHBhcnRzLnNsaWNlKC0yKS5qb2luKFwiLlwiKSxcbiAgICAgICAgICAgIHBvcnQ6IGxvY2F0aW9uT2JqLnBvcnQsXG4gICAgICAgIH07XG4gICAgfVxuICAgIGxldCBpc1ZhbGlkID0gcGFydHMubGVuZ3RoID49IDQgfHwgYWxsb3dNaXNzaW5nVGhyZWFkSWQgJiYgcGFydHMubGVuZ3RoID09PSAzO1xuICAgIGlmICghaXNWYWxpZCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICB0aHJlYWRJZDogcGFydHMuYXQoLTQpIHx8IFwiXCIsXG4gICAgICAgIG1hY2hpbmVJZDogcGFydHMuYXQoLTMpIHx8IFwiXCIsXG4gICAgICAgIGRvbWFpbjogcGFydHMuc2xpY2UoLTIpLmpvaW4oXCIuXCIpIHx8IFwiXCIsXG4gICAgICAgIHBvcnQ6IGxvY2F0aW9uT2JqLnBvcnQsXG4gICAgfTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGVOb2RlSWRBc3NlcnQobm9kZUlkOiBzdHJpbmcsIGRvbWFpbjogc3RyaW5nLCBhbGxvd01pc3NpbmdUaHJlYWRJZD86IFwiYWxsb3dNaXNzaW5nVGhyZWFkSWRcIik6IE5vZGVJZFBhcnRzIHtcbiAgICBsZXQgcmVzdWx0ID0gZGVjb2RlTm9kZUlkKG5vZGVJZCwgZG9tYWluLCBhbGxvd01pc3NpbmdUaHJlYWRJZCk7XG4gICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIG5vZGVJZDogJHtKU09OLnN0cmluZ2lmeShub2RlSWQpfWApO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGVuY29kZU5vZGVJZChwYXJ0czogTm9kZUlkUGFydHMpIHtcbiAgICByZXR1cm4gYCR7cGFydHMudGhyZWFkSWR9LiR7cGFydHMubWFjaGluZUlkfS4ke3BhcnRzLmRvbWFpbn06JHtwYXJ0cy5wb3J0fWA7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZXRJZGVudGl0eUNBUmF3KGRvbWFpbjogc3RyaW5nLCBqc29uOiBzdHJpbmcpIHtcbiAgICBsZXQgaWRlbnRpdHlDQUNhY2hlZCA9IGdldElkZW50aXR5U3RvcmUoZG9tYWluKTtcbiAgICBsZXQgb2JqID0gSlNPTi5wYXJzZShqc29uKSBhcyB7XG4gICAgICAgIGRvbWFpbjogc3RyaW5nO1xuICAgICAgICBjZXJ0QjY0OiBzdHJpbmc7XG4gICAgICAgIGtleUI2NDogc3RyaW5nO1xuICAgIH07XG4gICAgbGV0IGNhID0ge1xuICAgICAgICBkb21haW46IG9iai5kb21haW4sXG4gICAgICAgIGNlcnQ6IEJ1ZmZlci5mcm9tKG9iai5jZXJ0QjY0LCBcImJhc2U2NFwiKSxcbiAgICAgICAga2V5OiBCdWZmZXIuZnJvbShvYmoua2V5QjY0LCBcImJhc2U2NFwiKSxcbiAgICB9O1xuICAgIHRydXN0Q2VydGlmaWNhdGUoY2EuY2VydC50b1N0cmluZygpKTtcbiAgICBpZGVudGl0eUNBKGRvbWFpbikuc2V0KGNhKTtcbiAgICBnZXRUaHJlYWRLZXlDZXJ0QmFzZShkb21haW4pLnJlc2V0KCk7XG4gICAgaWRlbnRpdHlDQUNhY2hlZC5zZXQob2JqKTtcbiAgICByZXNldEFsbE5vZGVDYWxsRmFjdG9yaWVzKCk7XG59XG5cbi8vIE5PVEU6IFRoZSBpZGVudGl0eSBDQSBpcyBhdmFpbGFibGUgc3luY2hyb25vdXNseSAoc3RvcmFnZSBpcyBmcy9sb2NhbFN0b3JhZ2UsIGJvdGggc3luY2hyb25vdXMpLCBzbyB0aGlzIG9ubHkgZXhpc3RzIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoIHN0YXJ0dXAgY29kZSB0aGF0IGF3YWl0cyBpdC5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsb2FkSWRlbnRpdHlDQShkb21haW46IHN0cmluZykge1xuICAgIGlkZW50aXR5Q0EoZG9tYWluKSgpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldElkZW50aXR5Q0EoZG9tYWluOiBzdHJpbmcpOiBYNTA5S2V5UGFpciB7XG4gICAgcmV0dXJuIGlkZW50aXR5Q0EoZG9tYWluKSgpO1xufVxuXG4vLyBUT0RPOiBSZXBsYWNlIHRoaXMgd2l0aCBhIGRhdGFiYXNlLCBzbyBpdCBpcyBlYXN5IGZvciB1cyB0byB0cnVzdCBDQXMgY3Jvc3MgbWFjaGluZSwgYW5kIGV2ZW4gaGF2ZSBtdWx0aXBsZSB1c2VycywgZXRjLCBldGMuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SWRlbnRpdHlDQVByb21pc2UoZG9tYWluOiBzdHJpbmcpOiBYNTA5S2V5UGFpciB7XG4gICAgcmV0dXJuIGlkZW50aXR5Q0EoZG9tYWluKSgpO1xufVxuXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRPd25NYWNoaW5lSWQoZG9tYWluOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gZ2V0TWFjaGluZUlkKGdldElkZW50aXR5Q0EoZG9tYWluKS5kb21haW4sIGRvbWFpbik7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0T3duVGhyZWFkSWQoZG9tYWluOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gZGVjb2RlTm9kZUlkQXNzZXJ0KGdldFRocmVhZEtleUNlcnQoZG9tYWluKS5kb21haW4sIGRvbWFpbikudGhyZWFkSWQ7XG59XG5cbi8qKiBQYXJ0IG9mIHRoZSBtYWNoaW5lSWQgY29tZXMgZnJvbSB0aGUgcHVibGljS2V5LCBzbyB3ZSBjYW4gdXNlIGl0IHRvIHZlcmlmeS5cblxuICAgIEZhaXJseSB3ZWFrOiBpdCBvbmx5IHByb3ZlcyB0aGUgaWQgbmFtZXMgdGhpcyBrZXksIG5vdCB0aGF0IHRoZSBjYWxsZXIgaG9sZHMgdGhlIGtleSAtIHVzdWFsbHkgYVxuICAgIGJldHRlciB3b3JrZmxvdyBzaG91bGQgYmUgdXNlZCwgd2l0aCBhIGJhY2sgYW5kIGZvcnRoIChleCwgdmFsaWRhdGVDZXJ0aWZpY2F0ZSBvdmVyIGEgc2lnbmVkXG4gICAgZXhjaGFuZ2UpLiBJbiBzb21lIGNhc2VzIGl0IGlzIHN1ZmZpY2llbnQsIHN1Y2ggYXMgZXhwb3Npbmcgc291cmNlIG1hcHMgdG8gdGhlIGNsaWVudC4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2ZXJpZnlNYWNoaW5lSWRGb3JQdWJsaWNLZXkoY29uZmlnOiB7XG4gICAgbWFjaGluZUlkOiBzdHJpbmc7XG4gICAgcHVibGljS2V5OiBCdWZmZXI7XG59KTogYm9vbGVhbiB7XG4gICAgbGV0IHsgbWFjaGluZUlkLCBwdWJsaWNLZXkgfSA9IGNvbmZpZztcbiAgICBsZXQgZG9tYWluUGFydCA9IGdldERvbWFpblBhcnRGcm9tUHVibGljS2V5KHB1YmxpY0tleSk7XG4gICAgLy8gbWFjaGluZUlkIGlzIHRoZSBiYXJlIGtleS1oYXNoIGxhYmVsLCBidXQgYWxzbyBhY2NlcHQgbGVnYWN5IFwiaGFzaC5kb21haW4udGxkXCIgZm9ybXNcbiAgICByZXR1cm4gbWFjaGluZUlkLnNwbGl0KFwiLlwiKVswXSA9PT0gZG9tYWluUGFydDtcbn1cblxuLy8gTk9URTogV2UgZG9uJ3QgaGF2ZSBhIGNhY2hlIHBlciBDQSwgYXMuLi4gdGhlIENBIHNob3VsZCBiZSBzZXQgZmlyc3Rcbi8vIFRPRE86IE1heWJlIHRocm93IGlmIHRoZXkgdHJ5IHRvIGNoYW5nZSB0aGUgQ0EgYWZ0ZXIgdGhleSBnZW5lcmF0ZSBhbnkgY2VydGlmaWNhdGVzP1xuLy8gVE9ETzogUmVnZW5lcmF0ZSBjZXJ0aWZpY2F0ZXMgYWZ0ZXIgZW5vdWdoIHRpbWUgKGFzIHRocmVhZCBjZXJ0cyBzaG91bGQgYmUgcmVsYXRpdmVseSBzaG9ydCBsaXZlZCwgc28gaXQgaXMgcGxhdXNpYmxlIGZvciB0aGVtIHRvIGV4cGlyZSkuIFdlIHdpbGwgYWxzbyBuZWVkIHRvIHByb3ZpZGUgYSBjYWxsYmFjayBzbyB0aGF0IHVzZXJzIG9mIHRoZSBjZXJ0IGNhbiB1cGRhdGUgdGhlIGNlcnQgdGhleSBhcmUgdXNpbmcgYXMgd2VsbC5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUaHJlYWRLZXlDZXJ0KGRvbWFpbjogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGdldFRocmVhZEtleUNlcnRCYXNlKGRvbWFpbikoKTtcbn1cbmNvbnN0IGdldFRocmVhZEtleUNlcnRCYXNlID0gY2FjaGUoKGRvbWFpbjogc3RyaW5nKSA9PiBsYXp5KCgpID0+IHtcbiAgICBsZXQgY2EgPSBnZXRJZGVudGl0eUNBKGRvbWFpbik7XG4gICAgcmV0dXJuIGNyZWF0ZUNlcnRGcm9tQ0EoeyBDQUtleVBhaXI6IGNhIH0pO1xufSkpO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0T3duTm9kZUlkKCk6IHN0cmluZyB7XG4gICAgbGV0IG5vZGVJZCA9IFNvY2tldEZ1bmN0aW9uLm1vdW50ZWROb2RlSWQ7XG4gICAgaWYgKCFub2RlSWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBOb2RlIG11c3QgYmUgbW91bnRlZCBiZWZvcmUgbm9kZUlkIGlzIGFjY2Vzc2VkYCk7XG4gICAgfVxuICAgIHJldHVybiBub2RlSWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRPd25Ob2RlSWRBbGxvd1VuZGVmaW5lZCgpIHtcbiAgICByZXR1cm4gU29ja2V0RnVuY3Rpb24ubW91bnRlZE5vZGVJZDtcbn0iXX0=
472
- /* _JS_SOURCE_HASH = "18e0cf4c95470e338c3004e08d10382c7418b898a917fb8878ac7aa88e3fe03e"; */
476
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VydHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjZXJ0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsa0RBQWtEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVsRCwrbkJBQStuQjtBQUMvbkIsc0lBQXNJO0FBRXRJLGlEQUFpRDtBQUVqRCx1RUFBK0Q7QUFDL0Qsa0RBQW9DO0FBR3BDLHlEQUEwRDtBQUUxRCwwREFBK0I7QUFDL0Isb0RBQTRCO0FBQzVCLDZEQUFpRTtBQUNqRSxtRUFBOEY7QUFDOUYsNkRBQWtIO0FBQ2xILG1FQUFnRTtBQUNoRSw2REFBMEU7QUFDMUUscUVBQWtHO0FBQ2xHLHdDQUF1QztBQUV2QyxJQUFBLHNCQUFPLEVBQUMsT0FBTyxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDcEQsSUFBQSxzQkFBTyxFQUFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBRW5ELE1BQU0sU0FBUyxHQUFHLElBQUksR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUV6QixRQUFBLGtCQUFrQixHQUFHLHNDQUFzQyxDQUFDO0FBRTVELFFBQUEsa0JBQWtCLEdBQUcsY0FBYyxDQUFDO0FBR2pELFNBQVMsZ0JBQWdCLENBQUMsTUFBYztJQUNwQyxPQUFPLElBQUEsb0NBQVcsRUFBc0IsTUFBTSxFQUFFLDBCQUFrQixDQUFDLENBQUM7QUFDeEUsQ0FBQztBQUVELGlHQUFpRztBQUNqRyxtRkFBbUY7QUFDbkYsU0FBZ0IsdUJBQXVCLENBQUMsTUFBYztJQUNsRCxPQUFPLElBQUEsNENBQW1CLEVBQUMsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSwwQkFBa0IsRUFBRSxDQUFDLENBQUM7QUFDN0UsQ0FBQztBQUZELDBEQUVDO0FBRUQsa0dBQWtHO0FBQ2xHLFNBQWdCLHVCQUF1QjtJQUNuQyxPQUFPLElBQUEsNkNB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LENBQUMsSUFBQSxjQUFJLEVBQUMsR0FBRyxFQUFFO0lBQzdELElBQUksRUFBRSxHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMvQixPQUFPLGdCQUFnQixDQUFDLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDL0MsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUVKLFNBQWdCLFlBQVk7SUFDeEIsSUFBSSxNQUFNLEdBQUcsK0JBQWMsQ0FBQyxhQUFhLENBQUM7SUFDMUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ1YsTUFBTSxJQUFJLEtBQUssQ0FBQyxnREFBZ0QsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFDRCxPQUFPLE1BQU0sQ0FBQztBQUNsQixDQUFDO0FBTkQsb0NBTUM7QUFFRCxTQUFnQiwwQkFBMEI7SUFDdEMsT0FBTywrQkFBYyxDQUFDLGFBQWEsQ0FBQztBQUN4QyxDQUFDO0FBRkQsZ0VBRUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi9ub2RlLWZvcmdlLWVkMjU1MTkuZC50c1wiIC8+XG5cbi8vIE5PVEU6IFdlIGNhbid0IHVzZSBjcnlwdG8uc3VidGxlIChub24tZXh0cmFjdGFibGUgQ3J5cHRvS2V5cykgZm9yIG91ciBrZXlzLCBiZWNhdXNlIHN1YnRsZSBpcyBhc3luY2hyb25vdXMsIGFuZCBldmVyeXRoaW5nIGhlcmUgKGtleSBnZW5lcmF0aW9uLCBjZXJ0IGNyZWF0aW9uLCBzaWduaW5nKSBtdXN0IGJlIGF2YWlsYWJsZSBzeW5jaHJvbm91c2x5LiBUaGUgb25seSByZWFsIGJlbmVmaXQgb2Ygc3VidGxlIGlzIHRoYXQgYSBjcm9zcy1zaXRlIHNjcmlwdGluZyBhdHRhY2sgY2FuJ3QgZXhmaWx0cmF0ZSB0aGUga2V5LiBXaGljaCwgd2hpbGUgbmljZSwgaXMgb2YgbWlub3IgYmVuZWZpdCwgYXMgdGhlIGNyb3NzLXNpdGUgc2NyaXB0IGNhbiBhbHJlYWR5IGRvIHF1aXRlIGEgYml0IG9mIGRhbWFnZSBhbnl3YXkgd2l0aCBhY2Nlc3MuIEFuZCBpZiB0aGF0IGhhcHBlbnMsIHRoZSBmaXJzdCB0aGluZyB0aGUgdXNlciBpcyBwcm9iYWJseSBnb2luZyB0byBkbyBpcyByZXNldCBhbGwgdGhlaXIgY3JlZGVudGlhbHMsIHdoaWNoIHNvbHZlcyB0aGUgY2FzZSBvZiB0aGUga2V5IGJlaW5nIGV4ZmlsdHJhdGVkIGFueXdheSAoYnkgdGVsbGluZyB0aGUgc2VydmVyIHRvIHN0b3AgdHJ1c3RpbmcgYWxsIGlkZW50aXRpZXMpLlxuLy8gTk9URTogV2UgYXJlIGp1c3Qgbm90IGdvaW5nIHRvIHN1cHBvcnQgSFRUUFMgYnJvd3NlciBjZXJ0cy4gT3VyIGNvZGUgaXMgcHVyZWx5IGZvciBpZGVudGlmaWNhdGlvbiwgYW5kIHNvIGl0IG9ubHkgc3VwcG9ydHMgRUQyNTUxOS5cblxuLy8gaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzUyODAjcGFnZS00MlxuXG5pbXBvcnQgeyBzZXRGbGFnIH0gZnJvbSBcInNvY2tldC1mdW5jdGlvbi9yZXF1aXJlL2NvbXBpbGVGbGFnc1wiO1xuaW1wb3J0ICogYXMgZm9yZ2UgZnJvbSBcIm5vZGUtZm9yZ2VcIjtcbmltcG9ydCBvcyBmcm9tIFwib3NcIjtcbmltcG9ydCBmc1N5bmMgZnJvbSBcImZzXCI7XG5pbXBvcnQgeyBjYWNoZSwgbGF6eSB9IGZyb20gXCJzb2NrZXQtZnVuY3Rpb24vc3JjL2NhY2hpbmdcIjtcbmltcG9ydCB7IGlzTm9kZSB9IGZyb20gXCJzb2NrZXQtZnVuY3Rpb24vc3JjL21pc2NcIjtcbmltcG9ydCBzaGEyNjUgZnJvbSBcImpzLXNoYTI1NlwiO1xuaW1wb3J0IGNyeXB0byBmcm9tIFwiY3J5cHRvXCI7XG5pbXBvcnQgeyB0cnVzdENlcnRpZmljYXRlIH0gZnJvbSBcInNvY2tldC1mdW5jdGlvbi9zcmMvY2VydFN0b3JlXCI7XG5pbXBvcnQgeyBtZWFzdXJlQmxvY2ssIG1lYXN1cmVGbmMsIG1lYXN1cmVXcmFwIH0gZnJvbSBcInNvY2tldC1mdW5jdGlvbi9zcmMvcHJvZmlsaW5nL21lYXN1cmVcIjtcbmltcG9ydCB7IGdldE5vZGVJZERvbWFpbiwgZ2V0Tm9kZUlkRG9tYWluTWF5YmVVbmRlZmluZWQsIGdldE5vZGVJZExvY2F0aW9uIH0gZnJvbSBcInNvY2tldC1mdW5jdGlvbi9zcmMvbm9kZUNhY2hlXCI7XG5pbXBvcnQgeyBTb2NrZXRGdW5jdGlvbiB9IGZyb20gXCJzb2NrZXQtZnVuY3Rpb24vU29ja2V0RnVuY3Rpb25cIjtcbmltcG9ydCB7IHJlc2V0QWxsTm9kZUNhbGxGYWN0b3JpZXMgfSBmcm9tIFwic29ja2V0LWZ1bmN0aW9uL3NyYy9ub2RlQ2FjaGVcIjtcbmltcG9ydCB7IGdldEtleVN0b3JlLCBERVZfZ2V0S2V5U3RvcmVQYXRoLCBERVZfbGlzdEtleVN0b3JlQXBwcyB9IGZyb20gXCIuL3BlcnNpc3RlbnRMb2NhbFN0b3JhZ2VcIjtcbmltcG9ydCB7IGVsbGlwc2l6ZSB9IGZyb20gXCIuLi9zdHJpbmdzXCI7XG5cbnNldEZsYWcocmVxdWlyZSwgXCJub2RlLWZvcmdlXCIsIFwiYWxsb3djbGllbnRcIiwgdHJ1ZSk7XG5zZXRGbGFnKHJlcXVpcmUsIFwianMtc2hhMjU2XCIsIFwiYWxsb3djbGllbnRcIiwgdHJ1ZSk7XG5cbmNvbnN0IHRpbWVJbkRheSA9IDEwMDAgKiA2MCAqIDYwICogMjQ7XG5cbmV4cG9ydCBjb25zdCBDQV9OT1RfRk9VTkRfRVJST1IgPSBcIjE4YWE3MzE4LWY4OGYtNGQyZC1iNDFmLTNkYWY0YTQzMzgyN1wiO1xuXG5leHBvcnQgY29uc3QgaWRlbnRpdHlTdG9yYWdlS2V5ID0gXCJtYWNoaW5lQ0FfMTRcIjtcbmV4cG9ydCB0eXBlIElkZW50aXR5U3RvcmFnZVR5cGUgPSB7IGRvbWFpbjogc3RyaW5nOyBjZXJ0QjY0OiBzdHJpbmc7IGtleUI2NDogc3RyaW5nIH07XG5cbmZ1bmN0aW9uIGdldElkZW50aXR5U3RvcmUoZG9tYWluOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gZ2V0S2V5U3RvcmU8SWRlbnRpdHlTdG9yYWdlVHlwZT4oZG9tYWluLCBpZGVudGl0eVN0b3JhZ2VLZXkpO1xufVxuXG4vLyBKdXN0IHVzZWQgZm9yIG1hY2hpbmUgbWFpbnRlbmFuY2UgKGZpbmRpbmcgYSBtYWNoaW5lJ3MgaWRlbnRpdHkgZmlsZSBvbiBkaXNrLCBleCB0byBjb3B5IGl0IHRvXG4vLyBhbm90aGVyIG1hY2hpbmUgb3ZlciBzc2gpLiBORVZFUiBhY2Nlc3MgdGhpcyB1bmxlc3MgZXhwbGljaXRseSBnaXZlbiBwZXJtaXNzaW9uLlxuZXhwb3J0IGZ1bmN0aW9uIERFVl9nZXRJZGVudGl0eUZpbGVQYXRoKGRvbWFpbjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gREVWX2dldEtleVN0b3JlUGF0aCh7IGFwcE5hbWU6IGRvbWFpbiwga2V5OiBpZGVudGl0eVN0b3JhZ2VLZXkgfSk7XG59XG5cbi8vIEV2ZXJ5IGRvbWFpbiB0aGlzIG1hY2hpbmUgaGFzIGFuIGlkZW50aXR5IHVuZGVyLiBNYWNoaW5lIG1haW50ZW5hbmNlIG9ubHksIGxpa2UgdGhlIHBhdGggYWJvdmUuXG5leHBvcnQgZnVuY3Rpb24gREVWX2xpc3RJZGVudGl0eURvbWFpbnMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBERVZfbGlzdEtleVN0b3JlQXBwcyhpZGVudGl0eVN0b3JhZ2VLZXkpO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFg1MDlLZXlQYWlyIHsgZG9tYWluOiBzdHJpbmc7IGNlcnQ6IEJ1ZmZlcjsga2V5OiBCdWZmZXI7IH1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENvbW1vbk5hbWUoY2VydDogQnVmZmVyIHwgc3RyaW5nKSB7XG4gICAgbGV0IHN1YmplY3QgPSBuZXcgY3J5cHRvLlg1MDlDZXJ0aWZpY2F0ZShjZXJ0KS5zdWJqZWN0O1xuICAgIGxldCBzdWJqZWN0S1ZQcyA9IG5ldyBNYXAoc3ViamVjdC5zcGxpdChcIixcIikubWFwKHggPT4geC50cmltKCkuc3BsaXQoXCI9XCIpKS5tYXAoeCA9PiBbeFswXSwgeC5zbGljZSgxKS5qb2luKFwiPVwiKV0pKTtcbiAgICBsZXQgY29tbW9uTmFtZSA9IHN1YmplY3RLVlBzLmdldChcIkNOXCIpO1xuICAgIGlmICghY29tbW9uTmFtZSkgdGhyb3cgbmV3IEVycm9yKGBObyBjb21tb24gbmFtZSBpbiBzdWJqZWN0OiAke3N1YmplY3R9YCk7XG4gICAgcmV0dXJuIGNvbW1vbk5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVYNTA5KFxuICAgIGNvbmZpZzoge1xuICAgICAgICBkb21haW46IHN0cmluZztcbiAgICAgICAgaXNzdWVyOiBYNTA5S2V5UGFpciB8IFwic2VsZlwiO1xuICAgICAgICBsaWZlU3BhbjogbnVtYmVyO1xuICAgICAgICBrZXlQYWlyOiB7XG4gICAgICAgICAgICBwdWJsaWNLZXk6IGZvcmdlLkVkMjU1MTlQdWJsaWNLZXk7XG4gICAgICAgICAgICBwcml2YXRlS2V5OiBmb3JnZS5FZDI1NTE5UHJpdmF0ZUtleTtcbiAgICAgICAgfTtcbiAgICB9XG4pOiBYNTA5S2V5UGFpciB7XG4gICAgcmV0dXJuIG1lYXN1cmVCbG9jayhmdW5jdGlvbiBjcmVhdGVYNTA5KCkge1xuICAgICAgICBsZXQgeyBkb21haW4sIGlzc3VlciwgbGlmZVNwYW4sIGtleVBhaXIgfSA9IGNvbmZpZztcblxuICAgICAgICBsZXQgY2VydE9iaiA9IGZvcmdlLnBraS5jcmVhdGVDZXJ0aWZpY2F0ZSgpO1xuICAgICAgICBjZXJ0T2JqLnB1YmxpY0tleSA9IGtleVBhaXIucHVibGljS2V5IGFzIHVua25vd24gYXMgZm9yZ2UucGtpLlB1YmxpY0tleTtcbiAgICAgICAgY2VydE9iai5zZXJpYWxOdW1iZXIgPSBcIjAxXCI7XG4gICAgICAgIC8vIEdpdmUgaXQgNSBtaW51dGVzIGJlZm9yZSBub3cuIElmIHdlIGdpdmUgaXQgdG9vIG11Y2ggdGltZSwgaXQgY2FuIGxvb2sgbGlrZSB0aGUgY2VydCBpcyByZWFsbHkgb2xkLCB3aGljaCB3aWxsIHRyaWdnZXIgdmFyaW91cyBwcm9jZXNzZXMgdG8gdHJ5IHRvIGdldCBhIGZyZXNoZXIgb25lIChhcyBpZiBpdCBsYXN0cyBmb3IgMSBob3VyLCBidXQgd2Ugc2V0IG5vdEJlZm9yZSB0byAxIG1vbnRoIGFnbywgaXQgbG9va3MgMSBtb250aCBvbGQsIGFuZCBzbyBhbG1vc3QgZXhwaXJlZCwgd2hlbiBpdCBpc24ndC4uLilcbiAgICAgICAgY2VydE9iai52YWxpZGl0eS5ub3RCZWZvcmUgPSBuZXcgRGF0ZShEYXRlLm5vdygpIC0gMTAwMCAqIDYwICogNSk7XG4gICAgICAgIGNlcnRPYmoudmFsaWRpdHkubm90QWZ0ZXIgPSBuZXcgRGF0ZShEYXRlLm5vdygpICsgbGlmZVNwYW4pO1xuXG4gICAgICAgIGNvbnN0IGNvbW1vbk5hbWVBdHRycyA9IFt7IG5hbWU6IFwiY29tbW9uTmFtZVwiLCB2YWx1ZTogZG9tYWluIH1dO1xuICAgICAgICBjZXJ0T2JqLnNldFN1YmplY3QoY29tbW9uTmFtZUF0dHJzKTtcblxuICAgICAgICBpZiAoaXNzdWVyID09PSBcInNlbGZcIikge1xuICAgICAgICAgICAgY2VydE9iai5zZXRJc3N1ZXIoY29tbW9uTmFtZUF0dHJzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNlcnRPYmouc2V0SXNzdWVyKGZvcmdlLnBraS5jZXJ0aWZpY2F0ZUZyb21QZW0oaXNzdWVyLmNlcnQudG9TdHJpbmcoKSkuc3ViamVjdC5hdHRyaWJ1dGVzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBleHRlbnNpb25zID0gW107XG4gICAgICAgIGNvbnN0IGlzQ0EgPSBpc3N1ZXIgPT09IFwic2VsZlwiO1xuICAgICAgICBpZiAoaXNDQSkge1xuICAgICAgICAgICAgZXh0ZW5zaW9ucy5wdXNoKHsgbmFtZTogXCJiYXNpY0NvbnN0cmFpbnRzXCIsIGNBOiB0cnVlIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsSG9zdERvbWFpbiA9IFwiMTI3LTAtMC0xLlwiICsgZG9tYWluLnNwbGl0KFwiLlwiKS5zbGljZSgtMikuam9pbihcIi5cIik7XG5cbiAgICAgICAgZXh0ZW5zaW9ucy5wdXNoKC4uLltcbiAgICAgICAgICAgIHsgbmFtZTogXCJrZXlVc2FnZVwiLCBrZXlDZXJ0U2lnbjogaXNDQSwgZGlnaXRhbFNpZ25hdHVyZTogdHJ1ZSwgbm9uUmVwdWRpYXRpb246IHRydWUsIGtleUVuY2lwaGVybWVudDogdHJ1ZSwgZGF0YUVuY2lwaGVybWVudDogdHJ1ZSB9LFxuICAgICAgICAgICAgeyBuYW1lOiBcInN1YmplY3RLZXlJZGVudGlmaWVyXCIgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcInN1YmplY3RBbHROYW1lXCIsXG4gICAgICAgICAgICAgICAgYWx0TmFtZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgeyB0eXBlOiAyLCB2YWx1ZTogZG9tYWluIH0sXG4gICAgICAgICAgICAgICAgICAgIHsgdHlwZTogMiwgdmFsdWU6IFwiKi5cIiArIGRvbWFpbiB9LFxuICAgICAgICAgICAgICAgICAgICB7IHR5cGU6IDIsIHZhbHVlOiBsb2NhbEhvc3REb21haW4gfSxcbiAgICAgICAgICAgICAgICAgICAgLy8gTk9URTogTm8gbG9uZ2VyIGFsbG93IDEyNy4wLjAuMSAoeyB0eXBlOiA3LCBpcDogXCIxMjcuMC4wLjFcIiB9KSwgdG8gbWFrZSB0aGlzIG1vcmUgc2VjdXJlLiBXZSBtaWdodCBlbmFibGUgdGhpcyBiZWhhdmlvciBiZWhpbmQgYSBmbGFnLCBmb3IgZGV2ZWxvcG1lbnQuXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC8vIE5PVEU6IG5hbWVDb25zdHJhaW50cyByZXF1aXJlIG91ciBmb3JrZWQgbm9kZS1mb3JnZSAoXCJub2RlLWZvcmdlXCI6IFwiaHR0cHM6Ly9naXRodWIuY29tL3NsaWZ0aXN0L2ZvcmdlI2U2MTgxODFiNDY5YjA3YmRjNzBiOTY4YjAzOTFiZWI4ZWY1ZmVjZDZcIikuIENocm9tZSBpZ25vcmVzIHRoZW0gKGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTEwNzIwODMpLCBidXQgb3VyIG93biB2YWxpZGF0aW9uICh2YWxpZGF0ZUNBQ2VydC92YWxpZGF0ZUNlcnRpZmljYXRlKSBlbmZvcmNlcyB0aGVtLlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6IFwibmFtZUNvbnN0cmFpbnRzXCIsXG4gICAgICAgICAgICAgICAgcGVybWl0dGVkU3VidHJlZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgeyB0eXBlOiAyLCB2YWx1ZTogZm9yZ2UudXRpbC5lbmNvZGVVdGY4KGRvbWFpbikgfSxcbiAgICAgICAgICAgICAgICAgICAgeyB0eXBlOiAyLCB2YWx1ZTogZm9yZ2UudXRpbC5lbmNvZGVVdGY4KGxvY2FsSG9zdERvbWFpbikgfSxcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9LFxuICAgICAgICBdKTtcbiAgICAgICAgY2VydE9iai5zZXRFeHRlbnNpb25zKGV4dGVuc2lvbnMpO1xuXG5cbiAgICAgICAgbWVhc3VyZUJsb2NrKGZ1bmN0aW9uIHNpZ24oKSB7XG4gICAgICAgICAgICBpZiAoaXNzdWVyID09PSBcInNlbGZcIikge1xuICAgICAgICAgICAgICAgIGNlcnRPYmouc2lnbihrZXlQYWlyLnByaXZhdGVLZXkgYXMgYW55KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2VydE9iai5zaWduKGZvcmdlLmVkMjU1MTkucHJpdmF0ZUtleUZyb21QZW0oaXNzdWVyLmtleS50b1N0cmluZygpKSBhcyBhbnkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gbWVhc3VyZUJsb2NrKGZ1bmN0aW9uIHRvUGVtcygpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgZG9tYWluLFxuICAgICAgICAgICAgICAgIGNlcnQ6IEJ1ZmZlci5mcm9tKGZvcmdlLnBraS5jZXJ0aWZpY2F0ZVRvUGVtKGNlcnRPYmopKSxcbiAgICAgICAgICAgICAgICBrZXk6IEJ1ZmZlci5mcm9tKHByaXZhdGVLZXlUb1BlbShrZXlQYWlyLnByaXZhdGVLZXkpKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHByaXZhdGVLZXlUb1BlbShrZXk6IGZvcmdlLkVkMjU1MTlQcml2YXRlS2V5KSB7XG4gICAgcmV0dXJuIGZvcmdlLmVkMjU1MTkucHJpdmF0ZUtleVRvUGVtKGtleSk7XG59XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VDZXJ0KFBFTW9yREVSOiBzdHJpbmcgfCBCdWZmZXIpIHtcbiAgICByZXR1cm4gZm9yZ2UucGtpLmNlcnRpZmljYXRlRnJvbVBlbShub3JtYWxpemVDZXJ0VG9QRU0oUEVNb3JERVIpKTtcbn1cblxuZnVuY3Rpb24gZ2V0RUQyNTUxOVB1YmxpY0tleShjZXJ0UGFyc2VkOiBmb3JnZS5wa2kuQ2VydGlmaWNhdGUpOiBmb3JnZS5FZDI1NTE5UHVibGljS2V5IHtcbiAgICBsZXQgcHVibGljS2V5ID0gY2VydFBhcnNlZC5wdWJsaWNLZXk7XG4gICAgaWYgKCEoXCJwdWJsaWNLZXlCeXRlc1wiIGluIHB1YmxpY0tleSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBPbmx5IEVEMjU1MTkgY2VydGlmaWNhdGVzIGFyZSBzdXBwb3J0ZWQsIHRoZSBjZXJ0aWZpY2F0ZSBwdWJsaWMga2V5IGlzIG5vdCBFRDI1NTE5IChzdWJqZWN0OiAke2NlcnRQYXJzZWQuc3ViamVjdC5nZXRGaWVsZChcIkNOXCIpPy52YWx1ZX0pYCk7XG4gICAgfVxuICAgIHJldHVybiBwdWJsaWNLZXkgYXMgdW5rbm93biBhcyBmb3JnZS5FZDI1NTE5UHVibGljS2V5O1xufVxuXG4vLyBHZXRzIGEgdW5pcXVlIHZhbHVlIHRvIHJlcHJlc2VudCB0aGUgcHVibGljIGtleVxuZXhwb3J0IGZ1bmN0aW9uIGdldFB1YmxpY0lkZW50aWZpZXIoUEVNb3JERVI6IHN0cmluZyB8IEJ1ZmZlcik6IEJ1ZmZlciB7XG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKGdldEVEMjU1MTlQdWJsaWNLZXkocGFyc2VDZXJ0KFBFTW9yREVSKSkucHVibGljS2V5Qnl0ZXMpO1xufVxuXG5leHBvcnQgY29uc3Qgc2lnbiA9IG1lYXN1cmVXcmFwKGZ1bmN0aW9uIHNpZ24oa2V5UGFpcjogeyBrZXk6IHN0cmluZyB8IEJ1ZmZlciB9LCBkYXRhOiB1bmtub3duKTogc3RyaW5nIHtcbiAgICBsZXQgZGF0YVN0ciA9IEpTT04uc3RyaW5naWZ5KGRhdGEpO1xuICAgIGxldCBwcml2YXRlS2V5ID0gZm9yZ2UuZWQyNTUxOS5wcml2YXRlS2V5RnJvbVBlbShrZXlQYWlyLmtleS50b1N0cmluZygpKTtcbiAgICByZXR1cm4gcHJpdmF0ZUtleS5zaWduKGRhdGFTdHIpO1xufSk7XG5cbmV4cG9ydCBmdW5jdGlvbiB2ZXJpZnkoY2VydDogc3RyaW5nLCBzaWduYXR1cmU6IHN0cmluZywgZGF0YTogdW5rbm93bikge1xuICAgIGxldCBjZXJ0T2JqID0gcGFyc2VDZXJ0KGNlcnQpO1xuICAgIGxldCBwdWJsaWNLZXkgPSBnZXRFRDI1NTE5UHVibGljS2V5KGNlcnRPYmopO1xuICAgIGxldCBkYXRhU3RyID0gSlNPTi5zdHJpbmdpZnkoZGF0YSk7XG4gICAgaWYgKCFwdWJsaWNLZXkudmVyaWZ5KGRhdGFTdHIsIHNpZ25hdHVyZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBTaWduYXR1cmUgdmVyaWZpY2F0aW9uIGZhaWxlZC4gU2lnbmF0dXJlOiAke0pTT04uc3RyaW5naWZ5KHNpZ25hdHVyZSl9IHwgRGF0YTogJHtlbGxpcHNpemUoZGF0YVN0ciwgMTAyNCl9YCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBub3JtYWxpemVDZXJ0VG9QRU0oUEVNb3JERVI6IHN0cmluZyB8IEJ1ZmZlcik6IHN0cmluZyB7XG4gICAgaWYgKFBFTW9yREVSLnRvU3RyaW5nKCkuc3RhcnRzV2l0aChcIi0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLVwiKSkge1xuICAgICAgICByZXR1cm4gUEVNb3JERVIudG9TdHJpbmcoKTtcbiAgICB9XG4gICAgUEVNb3JERVIgPSBQRU1vckRFUi50b1N0cmluZyhcImJhc2U2NFwiKTtcbiAgICByZXR1cm4gXCItLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS1cXG5cIiArIFBFTW9yREVSICsgXCJcXG4tLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tXCI7XG59XG5cbi8vIEJhc2UzMiAoUkZDIDQ2NDgsIGxvd2VyY2FzZSwgdW5wYWRkZWQpLCBhcyBkb21haW4gbmFtZXMgYXJlIGNhc2UtaW5zZW5zaXRpdmUsIHdoaWNoIHJ1bGVzIG91dCBiYXNlNjQvaGV4LXdpdGgtY2FzZVxuY29uc3QgYmFzZTMyQWxwaGFiZXQgPSBcImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MjM0NTY3XCI7XG5mdW5jdGlvbiBlbmNvZGVCYXNlMzIoYnl0ZXM6IEJ1ZmZlcik6IHN0cmluZyB7XG4gICAgbGV0IHJlc3VsdCA9IFwiXCI7XG4gICAgbGV0IGJpdENvdW50ID0gMDtcbiAgICBsZXQgdmFsdWUgPSAwO1xuICAgIGZvciAobGV0IGJ5dGUgb2YgYnl0ZXMpIHtcbiAgICAgICAgdmFsdWUgPSAodmFsdWUgPDwgOCkgfCBieXRlO1xuICAgICAgICBiaXRDb3VudCArPSA4O1xuICAgICAgICB3aGlsZSAoYml0Q291bnQgPj0gNSkge1xuICAgICAgICAgICAgcmVzdWx0ICs9IGJhc2UzMkFscGhhYmV0Wyh2YWx1ZSA+Pj4gKGJpdENvdW50IC0gNSkpICYgMzFdO1xuICAgICAgICAgICAgYml0Q291bnQgLT0gNTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoYml0Q291bnQgPiAwKSB7XG4gICAgICAgIHJlc3VsdCArPSBiYXNlMzJBbHBoYWJldFsodmFsdWUgPDwgKDUgLSBiaXRDb3VudCkpICYgMzFdO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBnZXREb21haW5QYXJ0RnJvbVB1YmxpY0tleShwdWJsaWNLZXk6IHsgcHVibGljS2V5Qnl0ZXM6IEJ1ZmZlciB9IHwgQnVmZmVyKSB7XG4gICAgbGV0IGJ5dGVzOiBCdWZmZXI7XG4gICAgaWYgKFwicHVibGljS2V5Qnl0ZXNcIiBpbiBwdWJsaWNLZXkpIHtcbiAgICAgICAgYnl0ZXMgPSBwdWJsaWNLZXkucHVibGljS2V5Qnl0ZXM7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgYnl0ZXMgPSBwdWJsaWNLZXk7XG4gICAgfVxuICAgIHJldHVybiBcImJcIiArIGVuY29kZUJhc2UzMihCdWZmZXIuZnJvbShzaGEyNjUuc2hhMjU2LmFycmF5KEJ1ZmZlci5mcm9tKGJ5dGVzKSkpKS5zbGljZSgwLCAyMCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUNBQ2VydChkb21haW46IHN0cmluZywgY2VydDogc3RyaW5nIHwgQnVmZmVyKSB7XG4gICAgbGV0IGNlcnRQYXJzZWQgPSBwYXJzZUNlcnQoY2VydCk7XG5cbiAgICBsZXQgc3ViamVjdCA9IGNlcnRQYXJzZWQuc3ViamVjdC5nZXRGaWVsZChcIkNOXCIpLnZhbHVlIGFzIHN0cmluZztcbiAgICBsZXQgbG9jYWxob3N0RG9tYWluID0gXCIxMjctMC0wLTEuXCIgKyBzdWJqZWN0LnNwbGl0KFwiLlwiKS5zbGljZSgtMikuam9pbihcIi5cIik7XG5cbiAgICBsZXQgZG9tYWluUGFydHMgPSBzdWJqZWN0LnNwbGl0KFwiLlwiKS5yZXZlcnNlKCk7XG5cbiAgICBsZXQgcm9vdERvbWFpblBhcnNlZCA9IFtkb21haW5QYXJ0cy5zaGlmdCgpLCBkb21haW5QYXJ0cy5zaGlmdCgpXS5yZXZlcnNlKCkuam9pbihcIi5cIik7XG4gICAgaWYgKHJvb3REb21haW5QYXJzZWQgIT09IGRvbWFpbikge1xuICAgICAgICAvLyBUaGlzIGlzIGltcG9ydGFudCwgYXMgb3VyIHRydXN0IHN0b3JlIGNvbnRhaW5zIG1vcmUgdGhlbiBqdXN0IE9VUiBjZXJ0aWZpY2F0ZXMsIHNvIGlmIHdlIGFsbG93IGFueSBkb21haW5zIHRoZW4gcmVhbCBkb21haW5zIGNhbiBpbXBlcnNvbmF0ZSBhbnlvbmUhIEl0IGhhcyB0byBiZSBPVVIgZG9tYWluIHRvIGJlIHRydXN0ZWQhXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2VydGlmaWNhdGUgcm9vdCBkb21haW4gc2hvdWxkIGJlICR7ZG9tYWlufSwgYnV0IGlzICR7cm9vdERvbWFpblBhcnNlZH1gKTtcbiAgICB9XG4gICAgLy8gVE9ETzogTWF5YmUganVzdCBza2lwIGlmIGl0IGlzbid0IGEgaGFzaCBzdHJpbmc/XG4gICAgaWYgKGRvbWFpblBhcnRzWzBdID09PSBcIm5vcHJveHlcIikge1xuICAgICAgICBkb21haW5QYXJ0cy5zaGlmdCgpO1xuICAgIH1cblxuICAgIGxldCBjZXJ0RXhwZWN0ZWRQdWJsaWNLZXlQYXJ0ID0gKGRvbWFpblBhcnRzLnNoaWZ0KCkgfHwgXCJcIikuc3BsaXQoXCItXCIpLnNsaWNlKC0xKVswXTtcbiAgICBsZXQgY2VydEFjdHVhbFB1YmxpY0tleVBhcnQgPSBnZXREb21haW5QYXJ0RnJvbVB1YmxpY0tleShnZXRFRDI1NTE5UHVibGljS2V5KGNlcnRQYXJzZWQpKTtcbiAgICBpZiAoY2VydEV4cGVjdGVkUHVibGljS2V5UGFydCAhPT0gY2VydEFjdHVhbFB1YmxpY0tleVBhcnQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDZXJ0aWZpY2F0ZSBwdWJsaWMga2V5IGluIHRoZSB1cmwgaXMgJHtjZXJ0RXhwZWN0ZWRQdWJsaWNLZXlQYXJ0fSwgYnV0IGluIHRoZSBjZXJ0IGlzICR7Y2VydEFjdHVhbFB1YmxpY0tleVBhcnR9YCk7XG4gICAgfVxuXG4gICAgLy8gQUxTTywgcmVxdWlyZSBuYW1lIGNvbnN0cmFpbnRzIHRvIGJlIHByZXNlbnQsIGFuZCB0byByZXN0cmljdCB0byB0aGUgXCJDTlwiXG4gICAgbGV0IG5hbWVDb25zdHJhaW50cyA9IGNlcnRQYXJzZWQuZ2V0RXh0ZW5zaW9uKFwibmFtZUNvbnN0cmFpbnRzXCIpIGFzIGFueTtcbiAgICBpZiAoIW5hbWVDb25zdHJhaW50cykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENlcnRpZmljYXRlIG11c3QgaGF2ZSBuYW1lQ29uc3RyYWludHNgKTtcbiAgICB9XG4gICAgbGV0IHN1YnRyZWVzID0gbmFtZUNvbnN0cmFpbnRzLnBlcm1pdHRlZFN1YnRyZWVzO1xuICAgIGlmICghc3VidHJlZXMpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDZXJ0aWZpY2F0ZSBtdXN0IGhhdmUgbmFtZUNvbnN0cmFpbnRzLnBlcm1pdHRlZFN1YnRyZWVzYCk7XG4gICAgfVxuICAgIGxldCBzdWJ0cmVlVmFsdWVzID0gc3VidHJlZXMubWFwKCh4OiBhbnkpID0+IHgudmFsdWUpO1xuICAgIC8vIElnbm9yZSBsb2NhbGhvc3REb21haW4sIGFzIGl0IGNhbiBhbHdheXMgc2FmZWx5IGJlIGFsbG93ZWQgKHRoZSBzYW1lIG1hY2hpbmUgaXMgYWx3YXlzIGFsbG93ZWQpLlxuICAgIHN1YnRyZWVWYWx1ZXMgPSBzdWJ0cmVlVmFsdWVzLmZpbHRlcigoeDogc3RyaW5nKSA9PiB4ICE9PSBsb2NhbGhvc3REb21haW4pO1xuICAgIGlmIChzdWJ0cmVlVmFsdWVzLmxlbmd0aCAhPT0gMSB8fCBzdWJ0cmVlVmFsdWVzWzBdICE9PSBzdWJqZWN0KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2VydGlmaWNhdGUgbXVzdCBoYXZlIGEgc2luZ2xlIGNvbnN0cmFpbmVkIGRvbWFpbiAoaGFkICR7SlNPTi5zdHJpbmdpZnkoc3VidHJlZVZhbHVlcyl9KWApO1xuICAgIH1cblxuICAgIHZhbGlkYXRlQWx0TmFtZXMoY2VydFBhcnNlZCwgc3ViamVjdCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUNlcnRpZmljYXRlKGRvbWFpbjogc3RyaW5nLCBjZXJ0OiBCdWZmZXIgfCBzdHJpbmcsIGlzc3VlckNlcnQ6IEJ1ZmZlciB8IHN0cmluZykge1xuICAgIHZhbGlkYXRlQ0FDZXJ0KGRvbWFpbiwgaXNzdWVyQ2VydCk7XG5cbiAgICBsZXQgY2VydFBhcnNlZCA9IHBhcnNlQ2VydChjZXJ0KTtcbiAgICBsZXQgc3ViamVjdCA9IGNlcnRQYXJzZWQuc3ViamVjdC5nZXRGaWVsZChcIkNOXCIpLnZhbHVlIGFzIHN0cmluZztcbiAgICBsZXQgbG9jYWxob3N0RG9tYWluID0gXCIxMjctMC0wLTEuXCIgKyBzdWJqZWN0LnNwbGl0KFwiLlwiKS5zbGljZSgtMikuam9pbihcIi5cIik7XG5cbiAgICBsZXQgZG9tYWluUGFydHMgPSBzdWJqZWN0LnNwbGl0KFwiLlwiKS5yZXZlcnNlKCk7XG5cbiAgICBsZXQgcm9vdERvbWFpblBhcnNlZCA9IFtkb21haW5QYXJ0cy5zaGlmdCgpLCBkb21haW5QYXJ0cy5zaGlmdCgpXS5yZXZlcnNlKCkuam9pbihcIi5cIik7XG4gICAgaWYgKHJvb3REb21haW5QYXJzZWQgIT09IGRvbWFpbikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENlcnRpZmljYXRlIHJvb3QgZG9tYWluIHNob3VsZCBiZSAke2RvbWFpbn0sIGJ1dCBpcyAke3Jvb3REb21haW5QYXJzZWR9YCk7XG4gICAgfVxuICAgIC8vIFRPRE86IE1heWJlIGp1c3Qgc2tpcCBpZiBpdCBpc24ndCBhIGhhc2ggc3RyaW5nP1xuICAgIGlmIChkb21haW5QYXJ0c1swXSA9PT0gXCJub3Byb3h5XCIpIHtcbiAgICAgICAgZG9tYWluUGFydHMuc2hpZnQoKTtcbiAgICB9XG5cbiAgICBsZXQgaXNzdWVyQ2VydFBhcnNlZCA9IHBhcnNlQ2VydChpc3N1ZXJDZXJ0KTtcblxuICAgIGxldCBpc3N1ZXJFeHBlY3RlZFB1YmxpY0tleVBhcnQgPSBkb21haW5QYXJ0cy5zaGlmdCgpIHx8IFwiXCI7XG4gICAgbGV0IGlzc3VlckFjdHVhbFB1YmxpY0tleVBhcnQgPSBnZXREb21haW5QYXJ0RnJvbVB1YmxpY0tleShnZXRFRDI1NTE5UHVibGljS2V5KGlzc3VlckNlcnRQYXJzZWQpKTtcbiAgICBpZiAoaXNzdWVyRXhwZWN0ZWRQdWJsaWNLZXlQYXJ0ICE9PSBpc3N1ZXJBY3R1YWxQdWJsaWNLZXlQYXJ0KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSXNzdWVyIHB1YmxpYyBrZXkgaW4gdGhlIHVybCBpcyAke2lzc3VlckV4cGVjdGVkUHVibGljS2V5UGFydH0sIGJ1dCBpbiB0aGUgY2VydCBpcyAke2lzc3VlckFjdHVhbFB1YmxpY0tleVBhcnR9YCk7XG4gICAgfVxuXG4gICAgLy8gVGFrZSB0aGUgbGFzdCBwYXJ0XG4gICAgbGV0IGNlcnRFeHBlY3RlZFB1YmxpY0tleVBhcnQgPSBkb21haW5QYXJ0cy5zaGlmdCgpIHx8IFwiXCI7XG4gICAgbGV0IGNlcnRBY3R1YWxQdWJsaWNLZXlQYXJ0ID0gZ2V0RG9tYWluUGFydEZyb21QdWJsaWNLZXkoZ2V0RUQyNTUxOVB1YmxpY0tleShjZXJ0UGFyc2VkKSk7XG4gICAgaWYgKGNlcnRFeHBlY3RlZFB1YmxpY0tleVBhcnQgIT09IGNlcnRBY3R1YWxQdWJsaWNLZXlQYXJ0KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2VydGlmaWNhdGUgcHVibGljIGtleSBpbiB0aGUgdXJsIGlzICR7Y2VydEV4cGVjdGVkUHVibGljS2V5UGFydH0sIGJ1dCBpbiB0aGUgY2VydCBpcyAke2NlcnRBY3R1YWxQdWJsaWNLZXlQYXJ0fWApO1xuICAgIH1cblxuXG4gICAgbGV0IG5hbWVDb25zdHJhaW50cyA9IGlzc3VlckNlcnRQYXJzZWQuZ2V0RXh0ZW5zaW9uKFwibmFtZUNvbnN0cmFpbnRzXCIpIGFzIGFueTtcbiAgICBpZiAoIW5hbWVDb25zdHJhaW50cykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENBIG11c3QgaGF2ZSBuYW1lQ29uc3RyYWludHNgKTtcbiAgICB9XG4gICAgbGV0IHN1YnRyZWVzID0gbmFtZUNvbnN0cmFpbnRzLnBlcm1pdHRlZFN1YnRyZWVzO1xuICAgIGlmICghc3VidHJlZXMpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDQSBtdXN0IGhhdmUgbmFtZUNvbnN0cmFpbnRzLnBlcm1pdHRlZFN1YnRyZWVzYCk7XG4gICAgfVxuICAgIGxldCBzdWJ0cmVlVmFsdWVzID0gc3VidHJlZXMubWFwKCh4OiBhbnkpID0+IHgudmFsdWUpO1xuICAgIC8vIElnbm9yZSBsb2NhbGhvc3REb21haW4sIGFzIGl0IGNhbiBhbHdheXMgc2FmZWx5IGJlIGFsbG93ZWQgKHRoZSBzYW1lIG1hY2hpbmUgaXMgYWx3YXlzIGFsbG93ZWQpLlxuICAgIHN1YnRyZWVWYWx1ZXMgPSBzdWJ0cmVlVmFsdWVzLmZpbHRlcigoeDogc3RyaW5nKSA9PiB4ICE9PSBsb2NhbGhvc3REb21haW4pO1xuICAgIGlmIChzdWJ0cmVlVmFsdWVzLmxlbmd0aCAhPT0gMSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENBIG11c3QgaGF2ZSBhIHNpbmdsZSBjb25zdHJhaW5lZCBkb21haW4gKGhhZCAke0pTT04uc3RyaW5naWZ5KHN1YnRyZWVWYWx1ZXMpfSlgKTtcbiAgICB9XG5cbiAgICBsZXQgc3VidHJlZSA9IHN1YnRyZWVWYWx1ZXNbMF07XG4gICAgaWYgKHN1YnRyZWUgIT09IHN1YmplY3QgJiYgIXN1YmplY3QuZW5kc1dpdGgoXCIuXCIgKyBzdWJ0cmVlKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENlcnRpZmljYXRlIG11c3QgYmUgYSBzdWJ0cmVlIG9mIHRoZSBDQSAoQ0E6ICR7c3VidHJlZX0sIGNlcnQ6ICR7c3ViamVjdH0pYCk7XG4gICAgfVxuXG4gICAgdmFsaWRhdGVBbHROYW1lcyhjZXJ0UGFyc2VkLCBzdWJqZWN0KTtcblxuICAgIC8vIFZlcmlmeSBpc3N1ZXIgQUNUVUFMTFkgc2lnbmVkIGNlcnRQYXJzZWRcbiAgICBpZiAoIWlzc3VlckNlcnRQYXJzZWQudmVyaWZ5KGNlcnRQYXJzZWQpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSXNzdWVyIGRpZCBub3Qgc2lnbiBjZXJ0aWZpY2F0ZWApO1xuICAgIH1cbn1cblxuLy8gUmVxdWlyZSBhbHQgbmFtZXMgdG8gYmUgZWl0aGVyIGVxdWFsIHRvIFwiQ05cIiwgb3IgYSBzdWJ0cmVlIG9mIFwiQ05cIlxuZnVuY3Rpb24gdmFsaWRhdGVBbHROYW1lcyhjZXJ0UGFyc2VkOiBmb3JnZS5wa2kuQ2VydGlmaWNhdGUsIHN1YmplY3Q6IHN0cmluZykge1xuICAgIGxldCBsb2NhbGhvc3REb21haW4gPSBcIjEyNy0wLTAtMS5cIiArIHN1YmplY3Quc3BsaXQoXCIuXCIpLnNsaWNlKC0yKS5qb2luKFwiLlwiKTtcblxuICAgIGxldCBhbHROYW1lc09iaiA9IGNlcnRQYXJzZWQuZ2V0RXh0ZW5zaW9uKFwic3ViamVjdEFsdE5hbWVcIikgYXMgYW55O1xuICAgIGxldCBhbHROYW1lcyA9IGFsdE5hbWVzT2JqPy5hbHROYW1lcy5tYXAoKHg6IGFueSkgPT4geC52YWx1ZSk7XG4gICAgLy8gQWxsb3cgbG9jYWxob3N0RG9tYWluLCBhcyBpdCBjYW4gYWx3YXlzIHNhZmVseSBiZSBhbGxvd2VkXG4gICAgYWx0TmFtZXMgPSBhbHROYW1lcy5maWx0ZXIoKHg6IHN0cmluZykgPT4geCAhPT0gbG9jYWxob3N0RG9tYWluKTtcbiAgICBpZiAoXG4gICAgICAgIGFsdE5hbWVzLnNvbWUoKHg6IHN0cmluZykgPT5cbiAgICAgICAgICAgICEoXG4gICAgICAgICAgICAgICAgeCA9PT0gc3ViamVjdFxuICAgICAgICAgICAgICAgIHx8IHguZW5kc1dpdGgoXCIuXCIgKyBzdWJqZWN0KVxuICAgICAgICAgICAgICAgIC8vIE5PVEU6IFdlIGRvbid0IGFsbG93IDEyNy4wLjAuMSAofHwgeCA9PT0gQnVmZmVyLmZyb20oWzEyNywgMCwgMCwgMV0pLnRvU3RyaW5nKCkpLCBiZWNhdXNlIGl0IGlzIHNvIGVhc3kgdG8gcHVibGlzaCBhIDEyNy4wLjAuMSBBIHJlY29yZCwgYW5kIGV2ZW4gdG8gZ2VuZXJhdGUgYSByZWFsIGNlcnQsIHNvIHdlIHNob3VsZCBqdXN0IGRvIHRoYXQsIGFuZCBrZWVwIGl0IHNlY3VyZS4gSWYgd2UgbmVlZCB0aGlzIGZvciBkZXZlbG9wbWVudCB3ZSBjYW4gcHV0IGl0IGJlaGluZCBhIGZsYWcsIHNvIG5vbi1kZXZlbG9wbWVudCBpbnN0YW5jZXMgYXJlIHN0aWxsIHNlY3VyZS5cbiAgICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgYWx0IG5hbWVzLiBNdXN0IGJlIHN1YnRyZWVzIG9mIHRoZSBzdWJqZWN0IChDTikgJHtKU09OLnN0cmluZ2lmeShzdWJqZWN0KX0sIHdhcyAke0pTT04uc3RyaW5naWZ5KGFsdE5hbWVzKX1gKTtcbiAgICB9XG59XG5cblxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlS2V5UGFpcigpIHtcbiAgICByZXR1cm4gbWVhc3VyZUJsb2NrKGZ1bmN0aW9uIGdlbmVyYXRlS2V5UGFpcigpIHtcbiAgICAgICAgLy8gTk9URTogV2UgdXNlIEVEMjU1MTkgYmVjYXVzZSBpdCBjYW4gZ2VuZXJhdGUga2V5cyBhYm91dCAxMFggZmFzdGVyIHRoYW4gUlNBICh3aGljaCBpcyBzdGlsbCBzbG93LCB+Nm1zIG9uIG15IG1hY2hpbmUsIHNvIHdlIERFRklOSVRFTFkgZG9uJ3Qgd2FudCBpdCB0byBiZSAxMFggc2xvd2VyISkgLSBodHRwczovL3NlY3VyaXR5LnN0YWNrZXhjaGFuZ2UuY29tL2EvMjM2OTQzLzI4MjM2N1xuICAgICAgICByZXR1cm4gZm9yZ2UuZWQyNTUxOS5nZW5lcmF0ZUtleVBhaXIoKTtcbiAgICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlQ0EoZG9tYWluOiBzdHJpbmcpIHtcbiAgICBjb25zdCBrZXlQYWlyID0gZ2VuZXJhdGVLZXlQYWlyKCk7XG4gICAgbGV0IGNhUHVibGljS2V5UGFydCA9IGdldERvbWFpblBhcnRGcm9tUHVibGljS2V5KGtleVBhaXIucHVibGljS2V5KTtcbiAgICBsZXQgZnVsbERvbWFpbiA9IGAke2NhUHVibGljS2V5UGFydH0uJHtkb21haW59YDtcbiAgICByZXR1cm4gY3JlYXRlWDUwOSh7IGRvbWFpbjogZnVsbERvbWFpbiwgaXNzdWVyOiBcInNlbGZcIiwga2V5UGFpciwgbGlmZVNwYW46IHRpbWVJbkRheSAqIDM2NSAqIDIwIH0pO1xufVxuXG5sZXQgaWRlbnRpdHlDQSA9IGNhY2hlKChkb21haW46IHN0cmluZykgPT4gbGF6eSgoKTogWDUwOUtleVBhaXIgPT4ge1xuICAgIGxldCBpZGVudGl0eUNBQ2FjaGVkID0gZ2V0SWRlbnRpdHlTdG9yZShkb21haW4pO1xuICAgIGxldCBjYUNhY2hlZCA9IGlkZW50aXR5Q0FDYWNoZWQuZ2V0KCk7XG4gICAgaWYgKCFjYUNhY2hlZCkge1xuICAgICAgICBjb25zb2xlLmxvZyhgR2VuZXJhdGluZyBuZXcgaWRlbnRpdHkgQ0FgKTtcbiAgICAgICAgbGV0IHZhbHVlID0gZ2VuZXJhdGVDQShkb21haW4pO1xuICAgICAgICBjYUNhY2hlZCA9IHtcbiAgICAgICAgICAgIGRvbWFpbjogdmFsdWUuZG9tYWluLFxuICAgICAgICAgICAgY2VydEI2NDogdmFsdWUuY2VydC50b1N0cmluZyhcImJhc2U2NFwiKSxcbiAgICAgICAgICAgIGtleUI2NDogdmFsdWUua2V5LnRvU3RyaW5nKFwiYmFzZTY0XCIpLFxuICAgICAgICB9O1xuICAgICAgICBpZGVudGl0eUNBQ2FjaGVkLnNldChjYUNhY2hlZCk7XG4gICAgfVxuICAgIGxldCByZXN1bHQgPSB7XG4gICAgICAgIGRvbWFpbjogY2FDYWNoZWQuZG9tYWluLFxuICAgICAgICBjZXJ0OiBCdWZmZXIuZnJvbShjYUNhY2hlZC5jZXJ0QjY0LCBcImJhc2U2NFwiKSxcbiAgICAgICAga2V5OiBCdWZmZXIuZnJvbShjYUNhY2hlZC5rZXlCNjQsIFwiYmFzZTY0XCIpLFxuICAgIH07XG4gICAgdHJ1c3RDZXJ0aWZpY2F0ZShyZXN1bHQuY2VydC50b1N0cmluZygpKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufSkpO1xuXG4vLyBJTVBPUlRBTlQhIFdlIGRvIG5vdCBlbWJlZCBhbnkgZGVidWcgaW5mbyBpbiB0aGlzIGRvbWFpbi4gSWYgd2UgZGlkLCBpdCB3b3VsZCBiZSB1c2VmdWwsIGJ1dC4uLiBwb3RlbnRhbGx5IGEgc2VjdXJpdHkgdnVsbmVyYWJpbGl0eSwgYXMgaWYgdGhlIGRlYnVnIGluZm8gKHN1Y2ggYXMgYSBwcmVmaXgpIGlzIHVzZWQgdG8gaWRlbnRpZnkgd2hhdCBhIGNlcnRpZmljYXRlIGlzIGZvciwgaXQgd291bGQgYmUgZWFzeSBmb3IgYW4gYXR0YWNrIHRvIGZvcmdlIHRoaXMgKGFzIHRoZSBkZWJ1ZyBpbmZvIHdvbid0IGJlIHNlY3VyZWQpLiBTbyBpdCBpcyBtdWNoIGJldHRlciB0byBrZWVwIHRoZSBjZXJ0aWZpY2F0ZSBvcGFxdWUsIGFuZCB0aGVuIHJlcXVpcmUgYW55IG1ldGFkYXRhIHRvIGJlIGFjdHVhbGx5IHZldHRlZCAoYW5kIGhvcGVmdWxseSBzdG9yZWQgaW4gYSBVSSwgc2hvd2luZyBJUCwgdGltZSwgZXRjKS5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDZXJ0RnJvbUNBKGNvbmZpZzoge1xuICAgIENBS2V5UGFpcjogWDUwOUtleVBhaXI7XG59KTogWDUwOUtleVBhaXIge1xuICAgIHJldHVybiBtZWFzdXJlQmxvY2soZnVuY3Rpb24gY3JlYXRlQ2VydEZyb21DQSgpIHtcbiAgICAgICAgbGV0IHsgQ0FLZXlQYWlyIH0gPSBjb25maWc7XG4gICAgICAgIGNvbnN0IGtleVBhaXIgPSBnZW5lcmF0ZUtleVBhaXIoKTtcbiAgICAgICAgbGV0IGRvbWFpbktleVBhcnQgPSBnZXREb21haW5QYXJ0RnJvbVB1YmxpY0tleShrZXlQYWlyLnB1YmxpY0tleSk7XG4gICAgICAgIGxldCBmdWxsRG9tYWluID0gYCR7ZG9tYWluS2V5UGFydH0uJHtjb25maWcuQ0FLZXlQYWlyLmRvbWFpbn1gO1xuICAgICAgICByZXR1cm4gY3JlYXRlWDUwOSh7XG4gICAgICAgICAgICBkb21haW46IGZ1bGxEb21haW4sXG4gICAgICAgICAgICBpc3N1ZXI6IENBS2V5UGFpcixcbiAgICAgICAgICAgIGtleVBhaXIsXG4gICAgICAgICAgICBsaWZlU3BhbjogdGltZUluRGF5ICogMzY1ICogMTAsXG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TWFjaGluZUlkKGRvbWFpbk5hbWVPck5vZGVJZDogc3RyaW5nLCBkb21haW46IHN0cmluZykge1xuICAgIHJldHVybiBkZWNvZGVOb2RlSWRBc3NlcnQoZG9tYWluTmFtZU9yTm9kZUlkLCBkb21haW4sIFwiYWxsb3dNaXNzaW5nVGhyZWFkSWRcIikubWFjaGluZUlkO1xufVxuXG5leHBvcnQgdHlwZSBOb2RlSWRQYXJ0cyA9IHtcbiAgICB0aHJlYWRJZDogc3RyaW5nO1xuICAgIG1hY2hpbmVJZDogc3RyaW5nO1xuICAgIGRvbWFpbjogc3RyaW5nO1xuICAgIHBvcnQ6IG51bWJlcjtcbn07XG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlTm9kZUlkKG5vZGVJZDogc3RyaW5nLCBkb21haW46IHN0cmluZywgYWxsb3dNaXNzaW5nVGhyZWFkSWQ/OiBcImFsbG93TWlzc2luZ1RocmVhZElkXCIpOiBOb2RlSWRQYXJ0cyB8IHVuZGVmaW5lZCB7XG4gICAgbGV0IGxvY2F0aW9uT2JqID0gZ2V0Tm9kZUlkTG9jYXRpb24obm9kZUlkKTtcbiAgICBpZiAoIWxvY2F0aW9uT2JqKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGxldCBwYXJ0cyA9IGxvY2F0aW9uT2JqLmFkZHJlc3Muc3BsaXQoXCIuXCIpO1xuICAgIC8vIE5PVEU6IFdlIGhhdmUgdG8gb25seSBhbGxvdyBsb2NhbGhvc3QgZG9tYWlucyBvbiBvdXIgb3duIGRvbWFpbiwgYXMgdGhlIHVuZGVybHlpbmcgZG9tYWluIGdldHMgc3RyaXBwZWQgd2hlbiB3ZSdyZSBsb29raW5nIGF0IHRoZSBtYWNoaW5lSWQuIFNvIGlmIHdlIGFsbG93ZWQgbG9jYWxob3N0IGRvbWFpbnMgb24gb3RoZXIgZG9tYWlucywgYSBzZXJ2ZXIgY291bGQgdHJpY2sgdXMgaW50byBjb25uZWN0aW5nIHRvIGl0LCBhbmQgdGhlbiBvbmNlIHRoZSBjb25uZWN0aW9uIGlzIGVzdGFibGlzaGVkLCBpdCBjb3VsZCB0YWxrIGJhY2sgYW5kIHdlIHdvdWxkIHRoaW5rIGl0IGhhcyBhIGxvY2FsaG9zdCBtYWNoaW5lSWQsIHdoaWNoIGlzIGltcGxpY2l0bHkgdHJ1c3RlZCwgd2hpY2ggd291bGQgdGhlbiBnaXZlIGl0IGFjY2VzcyB0byBldmVyeXRoaW5nLlxuICAgIGlmIChsb2NhdGlvbk9iai5hZGRyZXNzID09PSBgMTI3LTAtMC0xLiR7ZG9tYWlufWAgJiYgbm9kZUlkLmluY2x1ZGVzKFwiOlwiKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdGhyZWFkSWQ6IFwiXCIsXG4gICAgICAgICAgICBtYWNoaW5lSWQ6IHBhcnRzLmF0KC0zKSB8fCBcIlwiLFxuICAgICAgICAgICAgZG9tYWluOiBwYXJ0cy5zbGljZSgtMikuam9pbihcIi5cIiksXG4gICAgICAgICAgICBwb3J0OiBsb2NhdGlvbk9iai5wb3J0LFxuICAgICAgICB9O1xuICAgIH1cbiAgICBsZXQgaXNWYWxpZCA9IHBhcnRzLmxlbmd0aCA+PSA0IHx8IGFsbG93TWlzc2luZ1RocmVhZElkICYmIHBhcnRzLmxlbmd0aCA9PT0gMztcbiAgICBpZiAoIWlzVmFsaWQpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdGhyZWFkSWQ6IHBhcnRzLmF0KC00KSB8fCBcIlwiLFxuICAgICAgICBtYWNoaW5lSWQ6IHBhcnRzLmF0KC0zKSB8fCBcIlwiLFxuICAgICAgICBkb21haW46IHBhcnRzLnNsaWNlKC0yKS5qb2luKFwiLlwiKSB8fCBcIlwiLFxuICAgICAgICBwb3J0OiBsb2NhdGlvbk9iai5wb3J0LFxuICAgIH07XG59XG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlTm9kZUlkQXNzZXJ0KG5vZGVJZDogc3RyaW5nLCBkb21haW46IHN0cmluZywgYWxsb3dNaXNzaW5nVGhyZWFkSWQ/OiBcImFsbG93TWlzc2luZ1RocmVhZElkXCIpOiBOb2RlSWRQYXJ0cyB7XG4gICAgbGV0IHJlc3VsdCA9IGRlY29kZU5vZGVJZChub2RlSWQsIGRvbWFpbiwgYWxsb3dNaXNzaW5nVGhyZWFkSWQpO1xuICAgIGlmICghcmVzdWx0KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBub2RlSWQ6ICR7SlNPTi5zdHJpbmdpZnkobm9kZUlkKX1gKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBlbmNvZGVOb2RlSWQocGFydHM6IE5vZGVJZFBhcnRzKSB7XG4gICAgcmV0dXJuIGAke3BhcnRzLnRocmVhZElkfS4ke3BhcnRzLm1hY2hpbmVJZH0uJHtwYXJ0cy5kb21haW59OiR7cGFydHMucG9ydH1gO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2V0SWRlbnRpdHlDQVJhdyhkb21haW46IHN0cmluZywganNvbjogc3RyaW5nKSB7XG4gICAgbGV0IGlkZW50aXR5Q0FDYWNoZWQgPSBnZXRJZGVudGl0eVN0b3JlKGRvbWFpbik7XG4gICAgbGV0IG9iaiA9IEpTT04ucGFyc2UoanNvbikgYXMge1xuICAgICAgICBkb21haW46IHN0cmluZztcbiAgICAgICAgY2VydEI2NDogc3RyaW5nO1xuICAgICAgICBrZXlCNjQ6IHN0cmluZztcbiAgICB9O1xuICAgIGxldCBjYSA9IHtcbiAgICAgICAgZG9tYWluOiBvYmouZG9tYWluLFxuICAgICAgICBjZXJ0OiBCdWZmZXIuZnJvbShvYmouY2VydEI2NCwgXCJiYXNlNjRcIiksXG4gICAgICAgIGtleTogQnVmZmVyLmZyb20ob2JqLmtleUI2NCwgXCJiYXNlNjRcIiksXG4gICAgfTtcbiAgICB0cnVzdENlcnRpZmljYXRlKGNhLmNlcnQudG9TdHJpbmcoKSk7XG4gICAgaWRlbnRpdHlDQShkb21haW4pLnNldChjYSk7XG4gICAgZ2V0VGhyZWFkS2V5Q2VydEJhc2UoZG9tYWluKS5yZXNldCgpO1xuICAgIGlkZW50aXR5Q0FDYWNoZWQuc2V0KG9iaik7XG4gICAgcmVzZXRBbGxOb2RlQ2FsbEZhY3RvcmllcygpO1xufVxuXG4vLyBOT1RFOiBUaGUgaWRlbnRpdHkgQ0EgaXMgYXZhaWxhYmxlIHN5bmNocm9ub3VzbHkgKHN0b3JhZ2UgaXMgZnMvbG9jYWxTdG9yYWdlLCBib3RoIHN5bmNocm9ub3VzKSwgc28gdGhpcyBvbmx5IGV4aXN0cyBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0aCBzdGFydHVwIGNvZGUgdGhhdCBhd2FpdHMgaXQuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9hZElkZW50aXR5Q0EoZG9tYWluOiBzdHJpbmcpIHtcbiAgICBpZGVudGl0eUNBKGRvbWFpbikoKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRJZGVudGl0eUNBKGRvbWFpbjogc3RyaW5nKTogWDUwOUtleVBhaXIge1xuICAgIHJldHVybiBpZGVudGl0eUNBKGRvbWFpbikoKTtcbn1cblxuLy8gVE9ETzogUmVwbGFjZSB0aGlzIHdpdGggYSBkYXRhYmFzZSwgc28gaXQgaXMgZWFzeSBmb3IgdXMgdG8gdHJ1c3QgQ0FzIGNyb3NzIG1hY2hpbmUsIGFuZCBldmVuIGhhdmUgbXVsdGlwbGUgdXNlcnMsIGV0YywgZXRjLlxuZXhwb3J0IGZ1bmN0aW9uIGdldElkZW50aXR5Q0FQcm9taXNlKGRvbWFpbjogc3RyaW5nKTogWDUwOUtleVBhaXIge1xuICAgIHJldHVybiBpZGVudGl0eUNBKGRvbWFpbikoKTtcbn1cblxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0T3duTWFjaGluZUlkKGRvbWFpbjogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGdldE1hY2hpbmVJZChnZXRJZGVudGl0eUNBKGRvbWFpbikuZG9tYWluLCBkb21haW4pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldE93blRocmVhZElkKGRvbWFpbjogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGRlY29kZU5vZGVJZEFzc2VydChnZXRUaHJlYWRLZXlDZXJ0KGRvbWFpbikuZG9tYWluLCBkb21haW4pLnRocmVhZElkO1xufVxuXG4vKiogUGFydCBvZiB0aGUgbWFjaGluZUlkIGNvbWVzIGZyb20gdGhlIHB1YmxpY0tleSwgc28gd2UgY2FuIHVzZSBpdCB0byB2ZXJpZnkuXG5cbiAgICBGYWlybHkgd2VhazogaXQgb25seSBwcm92ZXMgdGhlIGlkIG5hbWVzIHRoaXMga2V5LCBub3QgdGhhdCB0aGUgY2FsbGVyIGhvbGRzIHRoZSBrZXkgLSB1c3VhbGx5IGFcbiAgICBiZXR0ZXIgd29ya2Zsb3cgc2hvdWxkIGJlIHVzZWQsIHdpdGggYSBiYWNrIGFuZCBmb3J0aCAoZXgsIHZhbGlkYXRlQ2VydGlmaWNhdGUgb3ZlciBhIHNpZ25lZFxuICAgIGV4Y2hhbmdlKS4gSW4gc29tZSBjYXNlcyBpdCBpcyBzdWZmaWNpZW50LCBzdWNoIGFzIGV4cG9zaW5nIHNvdXJjZSBtYXBzIHRvIHRoZSBjbGllbnQuICovXG5leHBvcnQgZnVuY3Rpb24gdmVyaWZ5TWFjaGluZUlkRm9yUHVibGljS2V5KGNvbmZpZzoge1xuICAgIG1hY2hpbmVJZDogc3RyaW5nO1xuICAgIHB1YmxpY0tleTogQnVmZmVyO1xufSk6IGJvb2xlYW4ge1xuICAgIGxldCB7IG1hY2hpbmVJZCwgcHVibGljS2V5IH0gPSBjb25maWc7XG4gICAgbGV0IGRvbWFpblBhcnQgPSBnZXREb21haW5QYXJ0RnJvbVB1YmxpY0tleShwdWJsaWNLZXkpO1xuICAgIC8vIG1hY2hpbmVJZCBpcyB0aGUgYmFyZSBrZXktaGFzaCBsYWJlbCwgYnV0IGFsc28gYWNjZXB0IGxlZ2FjeSBcImhhc2guZG9tYWluLnRsZFwiIGZvcm1zXG4gICAgcmV0dXJuIG1hY2hpbmVJZC5zcGxpdChcIi5cIilbMF0gPT09IGRvbWFpblBhcnQ7XG59XG5cbi8vIE5PVEU6IFdlIGRvbid0IGhhdmUgYSBjYWNoZSBwZXIgQ0EsIGFzLi4uIHRoZSBDQSBzaG91bGQgYmUgc2V0IGZpcnN0XG4vLyBUT0RPOiBNYXliZSB0aHJvdyBpZiB0aGV5IHRyeSB0byBjaGFuZ2UgdGhlIENBIGFmdGVyIHRoZXkgZ2VuZXJhdGUgYW55IGNlcnRpZmljYXRlcz9cbi8vIFRPRE86IFJlZ2VuZXJhdGUgY2VydGlmaWNhdGVzIGFmdGVyIGVub3VnaCB0aW1lIChhcyB0aHJlYWQgY2VydHMgc2hvdWxkIGJlIHJlbGF0aXZlbHkgc2hvcnQgbGl2ZWQsIHNvIGl0IGlzIHBsYXVzaWJsZSBmb3IgdGhlbSB0byBleHBpcmUpLiBXZSB3aWxsIGFsc28gbmVlZCB0byBwcm92aWRlIGEgY2FsbGJhY2sgc28gdGhhdCB1c2VycyBvZiB0aGUgY2VydCBjYW4gdXBkYXRlIHRoZSBjZXJ0IHRoZXkgYXJlIHVzaW5nIGFzIHdlbGwuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGhyZWFkS2V5Q2VydChkb21haW46IHN0cmluZykge1xuICAgIHJldHVybiBnZXRUaHJlYWRLZXlDZXJ0QmFzZShkb21haW4pKCk7XG59XG5jb25zdCBnZXRUaHJlYWRLZXlDZXJ0QmFzZSA9IGNhY2hlKChkb21haW46IHN0cmluZykgPT4gbGF6eSgoKSA9PiB7XG4gICAgbGV0IGNhID0gZ2V0SWRlbnRpdHlDQShkb21haW4pO1xuICAgIHJldHVybiBjcmVhdGVDZXJ0RnJvbUNBKHsgQ0FLZXlQYWlyOiBjYSB9KTtcbn0pKTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldE93bk5vZGVJZCgpOiBzdHJpbmcge1xuICAgIGxldCBub2RlSWQgPSBTb2NrZXRGdW5jdGlvbi5tb3VudGVkTm9kZUlkO1xuICAgIGlmICghbm9kZUlkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgTm9kZSBtdXN0IGJlIG1vdW50ZWQgYmVmb3JlIG5vZGVJZCBpcyBhY2Nlc3NlZGApO1xuICAgIH1cbiAgICByZXR1cm4gbm9kZUlkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0T3duTm9kZUlkQWxsb3dVbmRlZmluZWQoKSB7XG4gICAgcmV0dXJuIFNvY2tldEZ1bmN0aW9uLm1vdW50ZWROb2RlSWQ7XG59Il19
477
+ /* _JS_SOURCE_HASH = "9bd621292edafb5a590aec438fa06192967eec62cfe70a49ca16c6716623d47f"; */
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule && mod.default) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true , configurable: true});
6
- //exports.getKeyStore = exports.DEV_getKeyStorePath = void 0;
6
+ //exports.getKeyStore = exports.DEV_listKeyStoreApps = exports.DEV_getKeyStorePath = void 0;
7
7
  const misc_1 = require("socket-function/src/misc");
8
8
  const fs_1 = __importDefault(require("fs"));
9
9
  const os_1 = __importDefault(require("os"));
@@ -13,6 +13,16 @@ function DEV_getKeyStorePath(config) {
13
13
  return os_1.default.homedir() + `/keystore_${config.appName}_` + config.key + ".json";
14
14
  }
15
15
  exports.DEV_getKeyStorePath = DEV_getKeyStorePath;
16
+ // Every appName that has a store under this key on disk. Machine maintenance only, like the path
17
+ // above, and node only - the browser's localStorage has no appNames to enumerate.
18
+ function DEV_listKeyStoreApps(key) {
19
+ let prefix = "keystore_";
20
+ let suffix = `_${key}.json`;
21
+ return fs_1.default.readdirSync(os_1.default.homedir())
22
+ .filter(name => name.startsWith(prefix) && name.endsWith(suffix))
23
+ .map(name => name.slice(prefix.length, -suffix.length));
24
+ }
25
+ exports.DEV_listKeyStoreApps = DEV_listKeyStoreApps;
16
26
  function getKeyStore(appName, key) {
17
27
  if ((0, misc_1.isNode)()) {
18
28
  let path = DEV_getKeyStorePath({ appName, key });
@@ -47,5 +57,5 @@ function getKeyStore(appName, key) {
47
57
  }
48
58
  }
49
59
  exports.getKeyStore = getKeyStore;
50
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVyc2lzdGVudExvY2FsU3RvcmFnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInBlcnNpc3RlbnRMb2NhbFN0b3JhZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsbURBQWtEO0FBQ2xELDRDQUFvQjtBQUNwQiw0Q0FBb0I7QUFHcEIsZ0dBQWdHO0FBQ2hHLDJFQUEyRTtBQUMzRSxTQUFnQixtQkFBbUIsQ0FBQyxNQUF3QztJQUN4RSxPQUFPLFlBQUUsQ0FBQyxPQUFPLEVBQUUsR0FBRyxhQUFhLE1BQU0sQ0FBQyxPQUFPLEdBQUcsR0FBRyxNQUFNLENBQUMsR0FBRyxHQUFHLE9BQU8sQ0FBQztBQUNoRixDQUFDO0FBRkQsa0RBRUM7QUFFRCxTQUFnQixXQUFXLENBQUksT0FBZSxFQUFFLEdBQVc7SUFJdkQsSUFBSSxJQUFBLGFBQU0sR0FBRSxFQUFFLENBQUM7UUFDWCxJQUFJLElBQUksR0FBRyxtQkFBbUIsQ0FBQyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ2pELE9BQU87WUFDSCxHQUFHO2dCQUNDLElBQUksUUFBUSxHQUF1QixTQUFTLENBQUM7Z0JBQzdDLElBQUksQ0FBQztvQkFBQyxRQUFRLEdBQUcsWUFBRSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7Z0JBQUMsQ0FBQztnQkFBQyxXQUFNLENBQUMsQ0FBQyxDQUFDO2dCQUMzRCxJQUFJLENBQUMsUUFBUTtvQkFBRSxPQUFPLFNBQVMsQ0FBQztnQkFDaEMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBTSxDQUFDO1lBQ3JDLENBQUM7WUFDRCxHQUFHLENBQUMsS0FBZTtnQkFDZixZQUFFLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDbEQsQ0FBQztTQUNKLENBQUM7SUFDTixDQUFDO1NBQU0sQ0FBQztRQUNKLE9BQU87WUFDSCxHQUFHO2dCQUNDLElBQUksSUFBSSxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3JDLElBQUksQ0FBQyxJQUFJO29CQUFFLE9BQU8sU0FBUyxDQUFDO2dCQUM1QixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFNLENBQUM7WUFDakMsQ0FBQztZQUNELEdBQUcsQ0FBQyxLQUFlO2dCQUNmLFlBQVksQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUNyRCxDQUFDO1NBQ0osQ0FBQztJQUNOLENBQUM7QUFDTCxDQUFDO0FBN0JELGtDQTZCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzTm9kZSB9IGZyb20gXCJzb2NrZXQtZnVuY3Rpb24vc3JjL21pc2NcIjtcbmltcG9ydCBmcyBmcm9tIFwiZnNcIjtcbmltcG9ydCBvcyBmcm9tIFwib3NcIjtcbmltcG9ydCB7IGNhY2hlIH0gZnJvbSBcInNvY2tldC1mdW5jdGlvbi9zcmMvY2FjaGluZ1wiO1xuXG4vLyBKdXN0IHVzZWQgZm9yIG1hY2hpbmUgbWFpbnRlbmFuY2UgKGZpbmRpbmcgYSBrZXkgc3RvcmUgZmlsZSBvbiBkaXNrLCBleCB0byBjb3B5IGl0IHRvIGFub3RoZXJcbi8vIG1hY2hpbmUgb3ZlciBzc2gpLiBORVZFUiBhY2Nlc3MgdGhpcyB1bmxlc3MgZXhwbGljaXRseSBnaXZlbiBwZXJtaXNzaW9uLlxuZXhwb3J0IGZ1bmN0aW9uIERFVl9nZXRLZXlTdG9yZVBhdGgoY29uZmlnOiB7IGFwcE5hbWU6IHN0cmluZzsga2V5OiBzdHJpbmcgfSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIG9zLmhvbWVkaXIoKSArIGAva2V5c3RvcmVfJHtjb25maWcuYXBwTmFtZX1fYCArIGNvbmZpZy5rZXkgKyBcIi5qc29uXCI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRLZXlTdG9yZTxUPihhcHBOYW1lOiBzdHJpbmcsIGtleTogc3RyaW5nKToge1xuICAgIGdldCgpOiBUIHwgdW5kZWZpbmVkO1xuICAgIHNldCh2YWx1ZTogVCB8IG51bGwpOiB2b2lkO1xufSB7XG4gICAgaWYgKGlzTm9kZSgpKSB7XG4gICAgICAgIGxldCBwYXRoID0gREVWX2dldEtleVN0b3JlUGF0aCh7IGFwcE5hbWUsIGtleSB9KTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGdldCgpIHtcbiAgICAgICAgICAgICAgICBsZXQgY29udGVudHM6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB0cnkgeyBjb250ZW50cyA9IGZzLnJlYWRGaWxlU3luYyhwYXRoLCBcInV0ZjhcIik7IH0gY2F0Y2ggeyB9XG4gICAgICAgICAgICAgICAgaWYgKCFjb250ZW50cykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShjb250ZW50cykgYXMgVDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZXQodmFsdWU6IFQgfCBudWxsKSB7XG4gICAgICAgICAgICAgICAgZnMud3JpdGVGaWxlU3luYyhwYXRoLCBKU09OLnN0cmluZ2lmeSh2YWx1ZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBnZXQoKSB7XG4gICAgICAgICAgICAgICAgbGV0IGpzb24gPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShrZXkpO1xuICAgICAgICAgICAgICAgIGlmICghanNvbikgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShqc29uKSBhcyBUO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNldCh2YWx1ZTogVCB8IG51bGwpIHtcbiAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShrZXksIEpTT04uc3RyaW5naWZ5KHZhbHVlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxufSJdfQ==
51
- /* _JS_SOURCE_HASH = "eda31a3ba13006b5baae8a9c245281529c344df7293acc20dad7ea5209c3f21d"; */
60
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVyc2lzdGVudExvY2FsU3RvcmFnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInBlcnNpc3RlbnRMb2NhbFN0b3JhZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsbURBQWtEO0FBQ2xELDRDQUFvQjtBQUNwQiw0Q0FBb0I7QUFHcEIsZ0dBQWdHO0FBQ2hHLDJFQUEyRTtBQUMzRSxTQUFnQixtQkFBbUIsQ0FBQyxNQUF3QztJQUN4RSxPQUFPLFlBQUUsQ0FBQyxPQUFPLEVBQUUsR0FBRyxhQUFhLE1BQU0sQ0FBQyxPQUFPLEdBQUcsR0FBRyxNQUFNLENBQUMsR0FBRyxHQUFHLE9BQU8sQ0FBQztBQUNoRixDQUFDO0FBRkQsa0RBRUM7QUFFRCxpR0FBaUc7QUFDakcsa0ZBQWtGO0FBQ2xGLFNBQWdCLG9CQUFvQixDQUFDLEdBQVc7SUFDNUMsSUFBSSxNQUFNLEdBQUcsV0FBVyxDQUFDO0lBQ3pCLElBQUksTUFBTSxHQUFHLElBQUksR0FBRyxPQUFPLENBQUM7SUFDNUIsT0FBTyxZQUFFLENBQUMsV0FBVyxDQUFDLFlBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUM5QixNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDaEUsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDaEUsQ0FBQztBQU5ELG9EQU1DO0FBRUQsU0FBZ0IsV0FBVyxDQUFJLE9BQWUsRUFBRSxHQUFXO0lBSXZELElBQUksSUFBQSxhQUFNLEdBQUUsRUFBRSxDQUFDO1FBQ1gsSUFBSSxJQUFJLEdBQUcsbUJBQW1CLENBQUMsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUNqRCxPQUFPO1lBQ0gsR0FBRztnQkFDQyxJQUFJLFFBQVEsR0FBdUIsU0FBUyxDQUFDO2dCQUM3QyxJQUFJLENBQUM7b0JBQUMsUUFBUSxHQUFHLFlBQUUsQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO2dCQUFDLENBQUM7Z0JBQUMsV0FBTSxDQUFDLENBQUMsQ0FBQztnQkFDM0QsSUFBSSxDQUFDLFFBQVE7b0JBQUUsT0FBTyxTQUFTLENBQUM7Z0JBQ2hDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQU0sQ0FBQztZQUNyQyxDQUFDO1lBQ0QsR0FBRyxDQUFDLEtBQWU7Z0JBQ2YsWUFBRSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQ2xELENBQUM7U0FDSixDQUFDO0lBQ04sQ0FBQztTQUFNLENBQUM7UUFDSixPQUFPO1lBQ0gsR0FBRztnQkFDQyxJQUFJLElBQUksR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNyQyxJQUFJLENBQUMsSUFBSTtvQkFBRSxPQUFPLFNBQVMsQ0FBQztnQkFDNUIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBTSxDQUFDO1lBQ2pDLENBQUM7WUFDRCxHQUFHLENBQUMsS0FBZTtnQkFDZixZQUFZLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDckQsQ0FBQztTQUNKLENBQUM7SUFDTixDQUFDO0FBQ0wsQ0FBQztBQTdCRCxrQ0E2QkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc05vZGUgfSBmcm9tIFwic29ja2V0LWZ1bmN0aW9uL3NyYy9taXNjXCI7XG5pbXBvcnQgZnMgZnJvbSBcImZzXCI7XG5pbXBvcnQgb3MgZnJvbSBcIm9zXCI7XG5pbXBvcnQgeyBjYWNoZSB9IGZyb20gXCJzb2NrZXQtZnVuY3Rpb24vc3JjL2NhY2hpbmdcIjtcblxuLy8gSnVzdCB1c2VkIGZvciBtYWNoaW5lIG1haW50ZW5hbmNlIChmaW5kaW5nIGEga2V5IHN0b3JlIGZpbGUgb24gZGlzaywgZXggdG8gY29weSBpdCB0byBhbm90aGVyXG4vLyBtYWNoaW5lIG92ZXIgc3NoKS4gTkVWRVIgYWNjZXNzIHRoaXMgdW5sZXNzIGV4cGxpY2l0bHkgZ2l2ZW4gcGVybWlzc2lvbi5cbmV4cG9ydCBmdW5jdGlvbiBERVZfZ2V0S2V5U3RvcmVQYXRoKGNvbmZpZzogeyBhcHBOYW1lOiBzdHJpbmc7IGtleTogc3RyaW5nIH0pOiBzdHJpbmcge1xuICAgIHJldHVybiBvcy5ob21lZGlyKCkgKyBgL2tleXN0b3JlXyR7Y29uZmlnLmFwcE5hbWV9X2AgKyBjb25maWcua2V5ICsgXCIuanNvblwiO1xufVxuXG4vLyBFdmVyeSBhcHBOYW1lIHRoYXQgaGFzIGEgc3RvcmUgdW5kZXIgdGhpcyBrZXkgb24gZGlzay4gTWFjaGluZSBtYWludGVuYW5jZSBvbmx5LCBsaWtlIHRoZSBwYXRoXG4vLyBhYm92ZSwgYW5kIG5vZGUgb25seSAtIHRoZSBicm93c2VyJ3MgbG9jYWxTdG9yYWdlIGhhcyBubyBhcHBOYW1lcyB0byBlbnVtZXJhdGUuXG5leHBvcnQgZnVuY3Rpb24gREVWX2xpc3RLZXlTdG9yZUFwcHMoa2V5OiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgbGV0IHByZWZpeCA9IFwia2V5c3RvcmVfXCI7XG4gICAgbGV0IHN1ZmZpeCA9IGBfJHtrZXl9Lmpzb25gO1xuICAgIHJldHVybiBmcy5yZWFkZGlyU3luYyhvcy5ob21lZGlyKCkpXG4gICAgICAgIC5maWx0ZXIobmFtZSA9PiBuYW1lLnN0YXJ0c1dpdGgocHJlZml4KSAmJiBuYW1lLmVuZHNXaXRoKHN1ZmZpeCkpXG4gICAgICAgIC5tYXAobmFtZSA9PiBuYW1lLnNsaWNlKHByZWZpeC5sZW5ndGgsIC1zdWZmaXgubGVuZ3RoKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRLZXlTdG9yZTxUPihhcHBOYW1lOiBzdHJpbmcsIGtleTogc3RyaW5nKToge1xuICAgIGdldCgpOiBUIHwgdW5kZWZpbmVkO1xuICAgIHNldCh2YWx1ZTogVCB8IG51bGwpOiB2b2lkO1xufSB7XG4gICAgaWYgKGlzTm9kZSgpKSB7XG4gICAgICAgIGxldCBwYXRoID0gREVWX2dldEtleVN0b3JlUGF0aCh7IGFwcE5hbWUsIGtleSB9KTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGdldCgpIHtcbiAgICAgICAgICAgICAgICBsZXQgY29udGVudHM6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB0cnkgeyBjb250ZW50cyA9IGZzLnJlYWRGaWxlU3luYyhwYXRoLCBcInV0ZjhcIik7IH0gY2F0Y2ggeyB9XG4gICAgICAgICAgICAgICAgaWYgKCFjb250ZW50cykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShjb250ZW50cykgYXMgVDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZXQodmFsdWU6IFQgfCBudWxsKSB7XG4gICAgICAgICAgICAgICAgZnMud3JpdGVGaWxlU3luYyhwYXRoLCBKU09OLnN0cmluZ2lmeSh2YWx1ZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBnZXQoKSB7XG4gICAgICAgICAgICAgICAgbGV0IGpzb24gPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShrZXkpO1xuICAgICAgICAgICAgICAgIGlmICghanNvbikgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShqc29uKSBhcyBUO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNldCh2YWx1ZTogVCB8IG51bGwpIHtcbiAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShrZXksIEpTT04uc3RyaW5naWZ5KHZhbHVlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxufSJdfQ==
61
+ /* _JS_SOURCE_HASH = "c028b6b7675ba532a4a64628921cec8c0f42b5720eee89a88dcc4f2151dfe56e"; */
@@ -2,6 +2,7 @@ export declare function DEV_getKeyStorePath(config: {
2
2
  appName: string;
3
3
  key: string;
4
4
  }): string;
5
+ export declare function DEV_listKeyStoreApps(key: string): string[];
5
6
  export declare function getKeyStore<T>(appName: string, key: string): {
6
7
  get(): T | undefined;
7
8
  set(value: T | null): void;
@@ -9,6 +9,16 @@ export function DEV_getKeyStorePath(config: { appName: string; key: string }): s
9
9
  return os.homedir() + `/keystore_${config.appName}_` + config.key + ".json";
10
10
  }
11
11
 
12
+ // Every appName that has a store under this key on disk. Machine maintenance only, like the path
13
+ // above, and node only - the browser's localStorage has no appNames to enumerate.
14
+ export function DEV_listKeyStoreApps(key: string): string[] {
15
+ let prefix = "keystore_";
16
+ let suffix = `_${key}.json`;
17
+ return fs.readdirSync(os.homedir())
18
+ .filter(name => name.startsWith(prefix) && name.endsWith(suffix))
19
+ .map(name => name.slice(prefix.length, -suffix.length));
20
+ }
21
+
12
22
  export function getKeyStore<T>(appName: string, key: string): {
13
23
  get(): T | undefined;
14
24
  set(value: T | null): void;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sliftutils",
3
- "version": "1.7.137",
3
+ "version": "1.7.138",
4
4
  "main": "index.js",
5
5
  "license": "MIT",
6
6
  "files": [
@@ -35,7 +35,8 @@
35
35
  "derivekey": "node ./bin/derivekey.js",
36
36
  "unrevoke": "node ./bin/unrevoke.js",
37
37
  "testnotify": "node ./bin/testnotify.js",
38
- "addmachine": "node ./bin/addmachine.js"
38
+ "addmachine": "node ./bin/addmachine.js",
39
+ "printmachineid": "node ./bin/printmachineid.js"
39
40
  },
40
41
  "bin": {
41
42
  "filehoster": "./bin/filehoster.js",
@@ -60,7 +61,8 @@
60
61
  "portsecuredaemon": "./bin/portsecuredaemon.js",
61
62
  "unrevoke": "./bin/unrevoke.js",
62
63
  "testnotify": "./bin/testnotify.js",
63
- "addmachine": "./bin/addmachine.js"
64
+ "addmachine": "./bin/addmachine.js",
65
+ "printmachineid": "./bin/printmachineid.js"
64
66
  },
65
67
  "dependencies": {
66
68
  "@types/chrome": "^0.0.237",
@@ -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
  // Why root's authorized_keys is about to change, collected as it happens.
3
3
  //
4
4
  // Nothing announces itself at the moment it decides something. A revocation arriving, a key being
@@ -37,4 +37,4 @@ function takeChangeReasons() {
37
37
  }
38
38
  exports.takeChangeReasons = takeChangeReasons;
39
39
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhbmdlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNoYW5nZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLDBFQUEwRTtBQUMxRSxFQUFFO0FBQ0Ysa0dBQWtHO0FBQ2xHLCtGQUErRjtBQUMvRixtR0FBbUc7QUFDbkcsbUNBQW1DO0FBQ25DLEVBQUU7QUFDRixtR0FBbUc7QUFDbkcsd0NBQXdDOzs7QUFPeEMsSUFBSSxPQUFPLEdBQWEsRUFBRSxDQUFDO0FBQzNCLElBQUksY0FBYyxHQUFvQixFQUFFLENBQUM7QUFFekMsU0FBZ0IsZUFBZSxDQUFDLE1BQWM7SUFDMUMsbUVBQW1FO0lBQ25FLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7UUFDNUIsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN6QixDQUFDO0FBQ0wsQ0FBQztBQUxELDBDQUtDO0FBRUQ7MkJBQzJCO0FBQzNCLFNBQWdCLHNCQUFzQixDQUFDLE1BQXFCO0lBQ3hELElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLFFBQVEsS0FBSyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztRQUMxRSxjQUFjLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2hDLENBQUM7QUFDTCxDQUFDO0FBSkQsd0RBSUM7QUFFRDt5RkFDeUY7QUFDekYsU0FBZ0IsaUJBQWlCO0lBQzdCLElBQUksS0FBSyxHQUFHLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxPQUFPLEVBQUUsQ0FBQztJQUNqRCxjQUFjLEdBQUcsRUFBRSxDQUFDO0lBQ3BCLE9BQU8sR0FBRyxFQUFFLENBQUM7SUFDYixPQUFPLEtBQUssQ0FBQztBQUNqQixDQUFDO0FBTEQsOENBS0MiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBXaHkgcm9vdCdzIGF1dGhvcml6ZWRfa2V5cyBpcyBhYm91dCB0byBjaGFuZ2UsIGNvbGxlY3RlZCBhcyBpdCBoYXBwZW5zLlxuLy9cbi8vIE5vdGhpbmcgYW5ub3VuY2VzIGl0c2VsZiBhdCB0aGUgbW9tZW50IGl0IGRlY2lkZXMgc29tZXRoaW5nLiBBIHJldm9jYXRpb24gYXJyaXZpbmcsIGEga2V5IGJlaW5nXG4vLyByZXZva2VkIGhlcmUsIGFuIHVucmV2b2tlIHRha2luZyBlZmZlY3QsIGEgcmVwbyBtb3Zpbmcgb246IGVhY2ggb2YgdGhvc2Ugc2F5cyB3aGF0IGl0IGlzIGFuZFxuLy8gbGVhdmVzIGl0IGhlcmUuIFRoZSBmaWxlIGlzIHRoZW4gd3JpdHRlbiwgYW5kIG9ubHkgaWYgaXQgYWN0dWFsbHkgY2FtZSBvdXQgZGlmZmVyZW50IGRvZXMgYW55IG9mXG4vLyBpdCBnZXQgcmVwb3J0ZWQsIGluIG9uZSBtZXNzYWdlLlxuLy9cbi8vIERvaW5nIGl0IHRoZSBvdGhlciB3YXkgcm91bmQgaXMgd2hhdCBwcm9kdWNlZCBzZXZlcmFsIG1lc3NhZ2VzIGZvciBvbmUgZXZlbnQsIGFuZCBtZXNzYWdlcyBhYm91dFxuLy8gcmVtb3ZpbmcgYSBrZXkgdGhhdCBoYWQgYWxyZWFkeSBnb25lLlxuXG4vKiogQSByZWFzb24gaW1wb3J0YW50IGVub3VnaCB0byBuYW1lIHRoZSB3aG9sZSBtZXNzYWdlLiBJdHMgaGVhZGxpbmUgcmVwbGFjZXMgdGhlIG9uZSB0aGUgY2hhbmdlXG4gICAgaXRzZWxmIHdvdWxkIGhhdmUgZ290LCBiZWNhdXNlIFwic29tZWJvZHkgaXMgdXNpbmcgYSBrZXkgdGhleSBzaG91bGQgbm90XCIgb3V0cmFua3MgXCJ0aGUga2V5c1xuICAgIGNoYW5nZWRcIiBpbiB0aGUgb25lIGxpbmUgYSBwaG9uZSBzaG93cy4gKi9cbmV4cG9ydCB0eXBlIExlYWRpbmdSZWFzb24gPSB7IGhlYWRsaW5lOiBzdHJpbmc7IGJvZHk6IHN0cmluZyB9O1xuXG5sZXQgcmVhc29uczogc3RyaW5nW10gPSBbXTtcbmxldCBsZWFkaW5nUmVhc29uczogTGVhZGluZ1JlYXNvbltdID0gW107XG5cbmV4cG9ydCBmdW5jdGlvbiBhZGRDaGFuZ2VSZWFzb24ocmVhc29uOiBzdHJpbmcpIHtcbiAgICAvLyBUaGUgc2FtZSByZWFzb24gdHdpY2UgaW4gb25lIHBhc3Mgc2F5cyBub3RoaW5nIHRoZSBvbmNlIGRpZCBub3QuXG4gICAgaWYgKCFyZWFzb25zLmluY2x1ZGVzKHJlYXNvbikpIHtcbiAgICAgICAgcmVhc29ucy5wdXNoKHJlYXNvbik7XG4gICAgfVxufVxuXG4vKiogRm9yIHRoZSBvbmUgdGhpbmcgd29ydGggcmVhZGluZyBiZWZvcmUgYW55dGhpbmcgZWxzZTogc29tZWJvZHkgdXNpbmcgYSBrZXkgZnJvbSBhbiBhZGRyZXNzIGl0XG4gICAgaXMgbm90IGFsbG93ZWQgZnJvbS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGRMZWFkaW5nQ2hhbmdlUmVhc29uKHJlYXNvbjogTGVhZGluZ1JlYXNvbikge1xuICAgIGlmICghbGVhZGluZ1JlYXNvbnMuc29tZShleGlzdGluZyA9PiBleGlzdGluZy5oZWFkbGluZSA9PT0gcmVhc29uLmhlYWRsaW5lKSkge1xuICAgICAgICBsZWFkaW5nUmVhc29ucy5wdXNoKHJlYXNvbik7XG4gICAgfVxufVxuXG4vKiogVGhlIHJlYXNvbnMgZ2F0aGVyZWQgc2luY2UgdGhlIGxhc3Qgd3JpdGUsIGFuZCBjbGVhcnMgdGhlbS4gQ2FsbGVkIHdoZXRoZXIgb3Igbm90IGFueXRoaW5nXG4gICAgY2hhbmdlZCwgc28gcmVhc29ucyB0aGF0IGNhbWUgdG8gbm90aGluZyBjYW5ub3Qgc2hvdyB1cCBhZ2FpbnN0IHNvbWUgbGF0ZXIgY2hhbmdlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRha2VDaGFuZ2VSZWFzb25zKCkge1xuICAgIGxldCB0YWtlbiA9IHsgbGVhZGluZzogbGVhZGluZ1JlYXNvbnMsIHJlYXNvbnMgfTtcbiAgICBsZWFkaW5nUmVhc29ucyA9IFtdO1xuICAgIHJlYXNvbnMgPSBbXTtcbiAgICByZXR1cm4gdGFrZW47XG59XG4iXX0=
40
- /* _JS_SOURCE_HASH = "6d0282fa2244057d7a106dc14b6b13dd37ddc1ba1ecc4a44b33dfd51c3e409a5"; */
40
+ /* _JS_SOURCE_HASH = "1c4e21fc729f0fdeef2bb7701dbe6d2363e0f5ef8bed27f096594086b9d4f4eb"; */
@@ -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
  };
@@ -143,4 +143,4 @@ async function syncRepo(repoURL, options) {
143
143
  }
144
144
  exports.syncRepo = syncRepo;
145
145
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2l0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZ2l0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLDJEQUE2QjtBQUM3QixnREFBd0I7QUFDeEIsK0NBQW1EO0FBQ25ELHdDQUEwRTtBQUMxRSxtQ0FBNkQ7QUFDN0QsbUNBQXNDO0FBRXRDLEtBQUssVUFBVSxVQUFVLENBQUMsUUFBZ0I7SUFDdEMsSUFBSSxDQUFDO1FBQ0QsTUFBTSxrQkFBRSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMxQixPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUNULE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7QUFDTCxDQUFDO0FBRUQsOEZBQThGO0FBQ3ZGLEtBQUssVUFBVSxNQUFNLENBQUMsTUFBaUY7SUFDMUcsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxHQUFHLE1BQU0sQ0FBQztJQUNsRCxJQUFJLFVBQVUsR0FBRyxVQUFVLE9BQU8sNkVBQTZFLENBQUM7SUFDaEgsSUFBSSxNQUFNLEdBQUcsTUFBTSxJQUFBLG9CQUFZLEVBQUM7UUFDNUIsT0FBTyxFQUFFLEtBQUs7UUFDZCxJQUFJLEVBQUUsQ0FBQyxJQUFJLEVBQUUsbUJBQW1CLFVBQVUsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDO1FBQ3RELEdBQUc7UUFDSCxXQUFXLEVBQUUsbUJBQVc7S0FDM0IsQ0FBQyxDQUFDO0lBQ0gsSUFBSSxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDZixNQUFNLElBQUksS0FBSyxDQUFDLGdCQUFnQixJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyx3QkFBd0IsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ2xHLENBQUM7SUFDRCxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMs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QUU5RyxJQUFJLGdCQUFnQixHQUFHLEtBQUssQ0FBQztJQUM3QixJQUFJLFdBQVcsSUFBSSxXQUFXLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDM0MsMEZBQTBGO1FBQzFGLGtDQUFrQztRQUNsQyxJQUFJLFFBQVEsR0FBRyxNQUFNLE1BQU0sQ0FBQztZQUN4QixJQUFJLEVBQUUsQ0FBQyxZQUFZLEVBQUUsZUFBZSxFQUFFLFdBQVcsRUFBRSxTQUFTLENBQUM7WUFDN0QsR0FBRyxFQUFFLFFBQVE7WUFDYixPQUFPO1lBQ1AsWUFBWSxFQUFFLElBQUk7U0FDckIsQ0FBQyxDQUFDO1FBQ0gsZ0JBQWdCLEdBQUcsUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUNELE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsQ0FBQztBQUN2RSxDQUFDO0FBcENELDRCQW9DQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBmcyBmcm9tIFwiZnMvcHJvbWlzZXNcIjtcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyBzcGF3blByb21pc2UgfSBmcm9tIFwiLi4vLi4vaGVscGVycy9zcGF3blwiO1xuaW1wb3J0IHsgZmluZFNvdXJjZUtleSwgc291cmNlS2V5UGF0aCwgc291cmNlUmVwb1BhdGggfSBmcm9tIFwiLi4vc291cmNlc1wiO1xuaW1wb3J0IHsgR0lUX1RJTUVPVVQsIE1BWF9FUlJPUl9CT0RZX0xFTkdUSCB9IGZyb20gXCIuL3BhdGhzXCI7XG5pbXBvcnQgeyBzb3VyY2VTdGF0ZSB9IGZyb20gXCIuL3N0YXRlXCI7XG5cbmFzeW5jIGZ1bmN0aW9uIHBhdGhFeGlzdHMoZmlsZVBhdGg6IHN0cmluZykge1xuICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGZzLmFjY2VzcyhmaWxlUGF0aCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cblxuLyoqIGNvcmUuc3NoQ29tbWFuZCBrZWVwcyB0aGUga2V5IHNlbGVjdGlvbiB3aXRoIHRoZSBjb21tYW5kIGluc3RlYWQgb2YgaW4gdGhlIGVudmlyb25tZW50LiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1bkdpdChjb25maWc6IHsgYXJnczogc3RyaW5nW107IGN3ZD86IHN0cmluZzsga2V5UGF0aDogc3RyaW5nOyBhbGxvd0ZhaWx1cmU/OiBib29sZWFuIH0pIHtcbiAgICBsZXQgeyBhcmdzLCBjd2QsIGtleVBhdGgsIGFsbG93RmFpbHVyZSB9ID0gY29uZmlnO1xuICAgIGxldCBzc2hDb21tYW5kID0gYHNzaCAtaSAke2tleVBhdGh9IC1vIElkZW50aXRpZXNPbmx5PXllcyAtbyBCYXRjaE1vZGU9eWVzIC1vIFN0cmljdEhvc3RLZXlDaGVja2luZz1hY2NlcHQtbmV3YDtcbiAgICBsZXQgcmVzdWx0ID0gYXdhaXQgc3Bhd25Qcm9taXNlKHtcbiAgICAgICAgY29tbWFuZDogXCJnaXRcIixcbiAgICAgICAgYXJnczogW1wiLWNcIiwgYGNvcmUuc3NoQ29tbWFuZD0ke3NzaENvbW1hbmR9YCwgLi4uYXJnc10sXG4gICAgICAgIGN3ZCxcbiAgICAgICAgdGltZW91dFRpbWU6IEdJVF9USU1FT1VULFxuICAgIH0pO1xuICAgIGlmIChyZXN1bHQuZXJyb3IpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBnaXQgJHthcmdzLmpvaW4oXCIgXCIpfSB0byBydW4sIGZhaWxlZCB3aXRoICR7cmVzdWx0LmVycm9yLm1lc3NhZ2V9YCk7XG4gICAgfVxuICAgIGlmIChyZXN1bHQuc3RhdHVzICE9PSAwICYmICFhbGxvd0ZhaWx1cmUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYEV4cGVjdGVkIGdpdCAke2FyZ3Muam9pbihcIiBcIil9IHRvIGV4aXQgMCwgd2FzICR7cmVzdWx0LnN0YXR1c30uIGBcbiAgICAgICAgICAgICsgYCR7KHJlc3VsdC5zdGRvdXQgKyByZXN1bHQuc3RkZXJyKS50cmltKCkuc2xpY2UoMCwgTUFYX0VSUk9SX0JPRFlfTEVOR1RIKX1gXG4gICAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXBvSXNVc2FibGUoY29uZmlnOiB7IHJlcG9QYXRoOiBzdHJpbmc7IGtleVBhdGg6IHN0cmluZyB9KSB7XG4gICAgbGV0IHsgcmVwb1BhdGgsIGtleVBhdGggfSA9IGNvbmZpZztcbiAgICBpZiAoIWF3YWl0IHBhdGhFeGlzdHMocGF0aC5qb2luKHJlcG9QYXRoLCBcIi5naXRcIikpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgbGV0IHJlc3VsdCA9IGF3YWl0IHJ1bkdpdCh7IGFyZ3M6IFtcInJldi1wYXJzZVwiLCBcIi0tZ2l0LWRpclwiXSwgY3dkOiByZXBvUGF0aCwga2V5UGF0aCwgYWxsb3dGYWlsdXJlOiB0cnVlIH0pO1xuICAgIGlmIChyZXN1bHQuc3RhdHVzICE9PSAwKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBSZXBvIGF0ICR7cmVwb1BhdGh9IGlzIG5vdCB1c2FibGUuICR7KHJlc3VsdC5zdGRvdXQgKyByZXN1bHQuc3RkZXJyKS50cmltKCl9YCk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbi8qKiBDbG9uZWQgYmVzaWRlIHRoZSBvbGQgY2hlY2tvdXQgYW5kIHN3YXBwZWQgaW4sIHNvIGEgY2xvbmUgdGhhdCBmYWlscyBsZWF2ZXMgdGhlIGNvcHkgd2UgYXJlXG4gICAgYWxyZWFkeSB1c2luZyB1bnRvdWNoZWQgcmF0aGVyIHRoYW4gZGVsZXRpbmcgdGhlIG9ubHkga2V5cyB3ZSBoYXZlLiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNsb25lUmVwbyhjb25maWc6IHsgcmVwb1VSTDogc3RyaW5nOyByZXBvUGF0aDogc3RyaW5nOyBrZXlQYXRoOiBzdHJpbmcgfSkge1xuICAgIGxldCB7IHJlcG9VUkwsIHJlcG9QYXRoLCBrZXlQYXRoIH0gPSBjb25maWc7XG4gICAgbGV0IGluY29taW5nUGF0aCA9IGAke3JlcG9QYXRofS5pbmNvbWluZ2A7XG4gICAgYXdhaXQgZnMucm0oaW5jb21pbmdQYXRoLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSk7XG4gICAgYXdhaXQgZnMubWtkaXIocGF0aC5kaXJuYW1lKHJlcG9QYXRoKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgYXdhaXQgcnVuR2l0KHsgYXJnczogW1wiY2xvbmVcIiwgcmVwb1VSTCwgaW5jb21pbmdQYXRoXSwga2V5UGF0aCB9KTtcbiAgICBhd2FpdCBmcy5ybShyZXBvUGF0aCwgeyByZWN1cnNpdmU6IHRydWUsIGZvcmNlOiB0cnVlIH0pO1xuICAgIGF3YWl0IGZzLnJlbmFtZShpbmNvbWluZ1BhdGgsIHJlcG9QYXRoKTtcbiAgICBjb25zb2xlLmxvZyhgQ2xvbmVkICR7cmVwb1VSTH0gaW50byAke3JlcG9QYXRofWApO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3VycmVudEJyYW5jaChjb25maWc6IHsgcmVwb1BhdGg6IHN0cmluZzsga2V5UGF0aDogc3RyaW5nIH0pIHtcbiAgICByZXR1cm4gKGF3YWl0IHJ1bkdpdCh7IGFyZ3M6IFtcInJldi1wYXJzZVwiLCBcIi0tYWJicmV2LXJlZlwiLCBcIkhFQURcIl0sIC4uLmNvbmZpZyB9KSkuc3Rkb3V0LnRyaW0oKTtcbn1cblxuLyoqIEZvcmNlcyBhIGNoZWNrb3V0J3Mgd29ya2luZyB0cmVlIHRvIGEgcmVmLiBBbnl0aGluZyBsb2NhbCAtIGFuIGVkaXRlZCBmaWxlLCBvciBhIHN0cmF5IHVudHJhY2tlZFxuICAgIG9uZSAtIGlzIHN0YWdlZCBhbmQgc3Rhc2hlZCByYXRoZXIgdGhhbiBkZWxldGVkLCBzbyB0aGUgdHJlZSBjb21lcyBvdXQgY2xlYW4gYnV0IG5vdGhpbmcgaXMgbG9zdFxuICAgIGZvciBnb29kOiBpdCBzaXRzIGluIGEgc3Rhc2ggaWYgaXQgaXMgZXZlciB3YW50ZWQuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2V0R2l0UmVmKGNvbmZpZzogeyByZXBvUGF0aDogc3RyaW5nOyBnaXRSZWY6IHN0cmluZzsga2V5UGF0aDogc3RyaW5nIH0pIHtcbiAgICBsZXQgeyByZXBvUGF0aCwgZ2l0UmVmLCBrZXlQYXRoIH0gPSBjb25maWc7XG4gICAgLy8gU3RhZ2luZyB0aGUgdW50cmFja2VkIGZpbGVzIGZpcnN0IGlzIHdoYXQgbGV0cyB0aGUgc3Rhc2ggY2FycnkgdGhlbSBvZmYsIHNvIHRoZSByZXNldCBsYW5kc1xuICAgIC8vIG9uIGEgZ2VudWluZWx5IGNsZWFuIHRyZWUuXG4gICAgYXdhaXQgcnVuR2l0KHsgYXJnczogW1wiYWRkXCIsIFwiLS1hbGxcIl0sIGN3ZDogcmVwb1BhdGgsIGtleVBhdGgsIGFsbG93RmFpbHVyZTogdHJ1ZSB9KTtcbiAgICAvLyBBIGNoZWNrb3V0IHdpdGggbm90aGluZyB0byBzdGFzaCBtYWtlcyBnaXQgc3Rhc2ggZXhpdCBub24temVybywgd2hpY2ggaXMgaGFybWxlc3MgaGVyZSAtIHRoZVxuICAgIC8vIHJlc2V0IGJlbG93IGlzIHdoYXQgYWN0dWFsbHkgZm9yY2VzIHRoZSB0cmVlLlxuICAgIGF3YWl0IHJ1bkdpdCh7IGFyZ3M6IFtcInN0YXNoXCJdLCBjd2Q6IHJlcG9QYXRoLCBrZXlQYXRoLCBhbGxvd0ZhaWx1cmU6IHRydWUgfSk7XG4gICAgYXdhaXQgcnVuR2l0KHsgYXJnczogW1wiZmV0Y2hcIiwgXCItLXBydW5lXCIsIFwib3JpZ2luXCJdLCBjd2Q6IHJlcG9QYXRoLCBrZXlQYXRoIH0pO1xuICAgIGF3YWl0IHJ1bkdpdCh7IGFyZ3M6IFtcInJlc2V0XCIsIFwiLS1oYXJkXCIsIGdpdFJlZl0sIGN3ZDogcmVwb1BhdGgsIGtleVBhdGggfSk7XG4gICAgLy8gRHJvcHMgb2JqZWN0cyBub3RoaW5nIHJlZmVyZW5jZXMgYW55IG1vcmUsIHNvIGEgZmlsZSBjb21taXR0ZWQgYnkgbWlzdGFrZSBjYW5ub3QgYmxvYXQgdGhlXG4gICAgLy8gY2hlY2tvdXQgZm9yZXZlci4gUmVmbG9ncyBrZWVwIHRoZSBqdXN0LXJlcGxhY2VkIGNvbW1pdCByZWFjaGFibGUsIHNvIGEgaGlzdG9yeSByZXdyaXRlIGlzXG4gICAgLy8gc3RpbGwgZGV0ZWN0YWJsZSByaWdodCBhZnRlciB0aGlzLlxuICAgIGF3YWl0IHJ1bkdpdCh7IGFyZ3M6IFtcInBydW5lXCJdLCBjd2Q6IHJlcG9QYXRoLCBrZXlQYXRoLCBhbGxvd0ZhaWx1cmU6IHRydWUgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGVuc3VyZVNvdXJjZVJlcG8ocmVwb1VSTDogc3RyaW5nKSB7XG4gICAgbGV0IHJlcG9QYXRoID0gc291cmNlUmVwb1BhdGgocmVwb1VSTCk7XG4gICAgbGV0IGtleVBhdGggPSBhd2FpdCBmaW5kU291cmNlS2V5KHJlcG9VUkwpIHx8IHNvdXJjZUtleVBhdGgocmVwb1VSTCk7XG4gICAgaWYgKCFhd2FpdCByZXBvSXNVc2FibGUoeyByZXBvUGF0aCwga2V5UGF0aCB9KSkge1xuICAgICAgICBhd2FpdCBjbG9uZVJlcG8oeyByZXBvVVJMLCByZXBvUGF0aCwga2V5UGF0aCB9KTtcbiAgICB9XG4gICAgaWYgKCFzb3VyY2VTdGF0ZShyZXBvVVJMKS5icmFuY2gpIHtcbiAgICAgICAgc291cmNlU3RhdGUocmVwb1VSTCkuYnJhbmNoID0gYXdhaXQgY3VycmVudEJyYW5jaCh7IHJlcG9QYXRoLCBrZXlQYXRoIH0pO1xuICAgIH1cbn1cblxuLyoqIFJldHVybnMgd2hhdCBjaGFuZ2VkLCBzbyB0aGUgY2FsbGVyIGNhbiByZXBvcnQgaXQuIEEgcmV3cml0dGVuIGhpc3RvcnkgaXMgY2FsbGVkIG91dFxuICAgIHNlcGFyYXRlbHkgLSBpdCBtZWFucyB0aGUgcmVtb3RlIG5vIGxvbmdlciBjb250YWlucyB0aGUgY29tbWl0cyB3ZSBhbHJlYWR5IGhhZC5cblxuICAgIGZvcmNlVXBkYXRlIGZvcmNlcyB0aGUgd29ya2luZyB0cmVlIGJhY2sgdG8gdGhlIHJlbW90ZSBldmVuIHdoZW4gdGhlIHJlbW90ZSBoYXMgbm90IG1vdmVkLCB3aGljaFxuICAgIGlzIHdoYXQgaGVhbHMgYSBjaGVja291dCBsZWZ0IGRpcnR5IC0gYW4gZWRpdGVkIG9yIGhhbGYtd3JpdHRlbiBmaWxlIHRoYXQgbm8gbG9uZ2VyIG1hdGNoZXMgaXRzXG4gICAgc2lnbmF0dXJlLiBJdCB3b3VsZCBiZSBtYWRkZW5pbmcgdG8gYSBkZXZlbG9wZXIgZWRpdGluZyB0aGUgcmVwbyBpbiBwbGFjZSwgc2luY2UgaXQgc3Rhc2hlcyB0aGVpclxuICAgIHVuY29tbWl0dGVkIHdvcms7IGJ1dCBtYWtlIHN1cmUgbm90aGluZyB0aGF0IGFuc3dlcnMgdGhpcyBjaGVja291dCBpcyBydW5uaW5nIG9uIHRoZSBtYWNoaW5lIHlvdVxuICAgIGVkaXQgb24uIElmIHRoZSBjaGVja291dCB3ZW50IGRpcnR5IGJlY2F1c2UgYSBtYWNoaW5lIGNvbm5lY3Rpb24gdHJpZ2dlcmVkIGEgcmV2b2NhdGlvbiwga2lsbCB0aGVcbiAgICBzZXJ2aWNlcyBvbiB0aGF0IG1hY2hpbmUgYmVmb3JlIHlvdSB0b3VjaCB0aGUgdHJ1c3RlZCBtYWNoaW5lcywgb3IgdGhleSB3aWxsIGp1c3QgZGlydHkgaXQgYWdhaW4uICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc3luY1JlcG8ocmVwb1VSTDogc3RyaW5nLCBvcHRpb25zPzogeyBmb3JjZVVwZGF0ZT86IGJvb2xlYW4gfSkge1xuICAgIGF3YWl0IGVuc3VyZVNvdXJjZVJlcG8ocmVwb1VSTCk7XG4gICAgbGV0IHJlcG9QYXRoID0gc291cmNlUmVwb1BhdGgocmVwb1VSTCk7XG4gICAgbGV0IGtleVBhdGggPSBhd2FpdCBmaW5kU291cmNlS2V5KHJlcG9VUkwpIHx8IHNvdXJjZUtleVBhdGgocmVwb1VSTCk7XG4gICAgbGV0IGJyYW5jaCA9IHNvdXJjZVN0YXRlKHJlcG9VUkwpLmJyYW5jaDtcbiAgICBsZXQgbG9jYWxTaGEgPSAoYXdhaXQgcnVuR2l0KHsgYXJnczogW1wicmV2LXBhcnNlXCIsIFwiSEVBRFwiXSwgY3dkOiByZXBvUGF0aCwga2V5UGF0aCB9KSkuc3Rkb3V0LnRyaW0oKTtcblxuICAgIC8vIEEgcmVmIGxpc3RpbmcgaXMgYSBmZXcgaHVuZHJlZCBieXRlcyBhbmQgbm8gb2JqZWN0cywgc28gdGhlIHVzdWFsIGNhc2Ugb2Ygbm90aGluZyBoYXZpbmdcbiAgICAvLyBjaGFuZ2VkIGNvc3RzIGFsbW9zdCBub3RoaW5nIGFuZCB3ZSBvbmx5IGZldGNoIHdoZW4gdGhlcmUgaXMgc29tZXRoaW5nIHRvIGZldGNoLlxuICAgIGxldCBsaXN0aW5nID0gKGF3YWl0IHJ1bkdpdCh7IGFyZ3M6IFtcImxzLXJlbW90ZVwiLCBcIm9yaWdpblwiLCBicmFuY2hdLCBjd2Q6IHJlcG9QYXRoLCBrZXlQYXRoIH0pKS5zdGRvdXQ7XG4gICAgbGV0IHJlbW90ZVNoYSA9IChsaXN0aW5nLnNwbGl0KC9cXHMrLylbMF0gfHwgXCJcIikudHJpbSgpO1xuICAgIGlmICghcmVtb3RlU2hhKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgb3JpZ2luIHRvIHJlcG9ydCBhIHNoYSBmb3IgJHticmFuY2h9LCBsaXN0ZWQgJHtsaXN0aW5nLnNsaWNlKDAsIE1BWF9FUlJPUl9CT0RZX0xFTkdUSCl9YCk7XG4gICAgfVxuICAgIGlmICghb3B0aW9ucz8uZm9yY2VVcGRhdGUgJiYgcmVtb3RlU2hhID09PSBsb2NhbFNoYSAmJiByZW1vdGVTaGEgPT09IHNvdXJjZVN0YXRlKHJlcG9VUkwpLmxhc3RTaGEpIHtcbiAgICAgICAgcmV0dXJuIHsgY2hhbmdlZDogZmFsc2UsIGhpc3RvcnlSZXdyaXR0ZW46IGZhbHNlLCByZW1vdGVTaGEsIHByZXZpb3VzU2hhOiBsb2NhbFNoYSB9O1xuICAgIH1cblxuICAgIC8vIFRoZSByZW1vdGUgaGFzIG1vdmVkLCBvciB3ZSBoYXZlIG5vdCBhcHBsaWVkIGl0IHlldCwgc28gZm9yY2UgdGhlIGNoZWNrb3V0IHRvIGl0LlxuICAgIGxldCBwcmV2aW91c1NoYSA9IHNvdXJjZVN0YXRlKHJlcG9VUkwpLmxhc3RTaGEgfHwgbG9jYWxTaGE7XG4gICAgYXdhaXQgc2V0R2l0UmVmKHsgcmVwb1BhdGgsIGdpdFJlZjogYG9yaWdpbi8ke2JyYW5jaH1gLCBrZXlQYXRoIH0pO1xuICAgIHJlbW90ZVNoYSA9IChhd2FpdCBydW5HaXQoeyBhcmdzOiBbXCJyZXYtcGFyc2VcIiwgYG9yaWdpbi8ke2JyYW5jaH1gXSwgY3dkOiByZXBvUGF0aCwga2V5UGF0aCB9KSkuc3Rkb3V0LnRyaW0oKTtcblxuICAgIGxldCBoaXN0b3J5UmV3cml0dGVuID0gZmFsc2U7XG4gICAgaWYgKHByZXZpb3VzU2hhICYmIHByZXZpb3VzU2hhICE9PSByZW1vdGVTaGEpIHtcbiAgICAgICAgLy8gSWYgd2hhdCB3ZSBhbHJlYWR5IGhhZCBpcyBubyBsb25nZXIgYW4gYW5jZXN0b3Igb2YgdGhlIHJlbW90ZSB0aXAsIGNvbW1pdHMgd2VyZSByZW1vdmVkXG4gICAgICAgIC8vIG9yIHJld3JpdHRlbiByYXRoZXIgdGhhbiBhZGRlZC5cbiAgICAgICAgbGV0IGFuY2VzdHJ5ID0gYXdhaXQgcnVuR2l0KHtcbiAgICAgICAgICAgIGFyZ3M6IFtcIm1lcmdlLWJhc2VcIiwgXCItLWlzLWFuY2VzdG9yXCIsIHByZXZpb3VzU2hhLCByZW1vdGVTaGFdLFxuICAgICAgICAgICAgY3dkOiByZXBvUGF0aCxcbiAgICAgICAgICAgIGtleVBhdGgsXG4gICAgICAgICAgICBhbGxvd0ZhaWx1cmU6IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgICBoaXN0b3J5UmV3cml0dGVuID0gYW5jZXN0cnkuc3RhdHVzICE9PSAwO1xuICAgIH1cbiAgICByZXR1cm4geyBjaGFuZ2VkOiB0cnVlLCBoaXN0b3J5UmV3cml0dGVuLCByZW1vdGVTaGEsIHByZXZpb3VzU2hhIH07XG59XG4iXX0=
146
- /* _JS_SOURCE_HASH = "5b3d86f7c2e2742fa1cde29c721a12b86e9fe35bbe00566f214fee4920dc6089"; */
146
+ /* _JS_SOURCE_HASH = "62f9a483fdd197ea6df77cf5efeabfe4654e15b789d07e8ac036f002babc436b"; */
@@ -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
  };
@@ -36,4 +36,4 @@ async function notify(headline, body) {
36
36
  }
37
37
  exports.notify = notify;
38
38
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsibm90aWZ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLDRDQUFvQjtBQUNwQix5REFBc0U7QUFFdEUsSUFBSSxjQUFjLEdBQUcsRUFBRSxDQUFDO0FBRXhCLFNBQWdCLFlBQVksQ0FBQyxLQUFhO0lBQ3RDLGNBQWMsR0FBRyxLQUFLLENBQUM7QUFDM0IsQ0FBQztBQUZELG9DQUVDO0FBRUQsZ0dBQWdHO0FBQ2hHLGlHQUFpRztBQUNqRyxrR0FBa0c7QUFDbEcsK0RBQStEO0FBQy9EOzs7Ozt3RUFLd0U7QUFDakUsS0FBSyxVQUFVLE1BQU0sQ0FBQyxRQUFnQixFQUFFLElBQVk7SUFDdkQsSUFBSSxJQUFJLEdBQUcsS0FBSyxRQUFRLFNBQVMsSUFBSSxPQUFPLGNBQWMsSUFBSSxZQUFFLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQztJQUM5RSwrRkFBK0Y7SUFDL0YsNEZBQTRGO0lBQzVGLE9BQU8sQ0FBQyxHQUFHLENBQUMsWUFBWSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ2hDLElBQUksQ0FBQztRQUNELE1BQU0sSUFBQSxpQ0FBdUIsRUFBQyxJQUFJLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUNULHdGQUF3RjtRQUN4RixPQUFPLENBQUMsR0FBRyxDQUFDLGtEQUFrRCxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7QUFDTCxDQUFDO0FBWEQsd0JBV0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgb3MgZnJvbSBcIm9zXCI7XG5pbXBvcnQgeyBzZW5kRGlzY29yZE5vdGlmaWNhdGlvbiB9IGZyb20gXCIuLi8uLi9ub3RpZmljYXRpb25zL2Rpc2NvcmRcIjtcblxubGV0IGhvc3RMYWJlbFZhbHVlID0gXCJcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHNldEhvc3RMYWJlbCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgaG9zdExhYmVsVmFsdWUgPSB2YWx1ZTtcbn1cblxuLy8gRE8gTk9UIGFkZCBuZXcgY2FsbHMgdG8gdGhpcy4gRXZlcnkgbWVzc2FnZSBnb2VzIHRvIGEgcmVhbCBEaXNjb3JkIHNlcnZlciBzb21lb25lIHJlYWRzLCBzbyBhXG4vLyBub3RpZmljYXRpb24gaXMgb25seSBldmVyIGFkZGVkIHdoZW4gdGhlIHVzZXIgZXhwbGljaXRseSBhc2tzIGZvciB0aGF0IHNwZWNpZmljIGNhc2UuIFN0YXJ0dXAsXG4vLyBzdWNjZXNzLCBlcnJvcnMsIHJldHJpZXMgYW5kIHJlY292ZXJpZXMgYWxsIGJlbG9uZyBpbiBjb25zb2xlLmxvZyBpbnN0ZWFkLiBUaGUgY29tcGxldGUgbGlzdCBvZlxuLy8gY2FzZXMgdGhhdCBhcmUgYWxsb3dlZCB0byBub3RpZnkgaXMgYXQgdGhlIHRvcCBvZiBkYWVtb24udHMuXG4vKiogQSBoZWFkbGluZSBhbmQgdGhlIHJlc3QuXG5cbiAgICBUaGUgaGVhZGxpbmUgaXMgYWxsIGEgcGhvbmUgc2hvd3MuIEl0IGdldHMgdGhlIHdob2xlIHByZXZpZXcgdG8gaXRzZWxmOiBubyBwcm9kdWN0IG5hbWUsIG5vXG4gICAgaG9zdCwgbm8gdGltZXN0YW1wIGluIGZyb250IG9mIGl0LCBiZWNhdXNlIGEgcGVyc29uIGdsYW5jaW5nIGF0IHRoZWlyIGxvY2sgc2NyZWVuIG5lZWRzIHRvIHJlYWRcbiAgICB3aGF0IGhhcHBlbmVkLCBub3Qgd2hpY2ggbWFjaGluZSBzYWlkIGl0IG9yIHdoZW4uIFRob3NlIGdvIGF0IHRoZSBlbmQsIHdoZXJlIHRoZXkgYXJlIHRoZXJlIGZvclxuICAgIHdob2V2ZXIgb3BlbnMgdGhlIG1lc3NhZ2UgYW5kIG91dCBvZiB0aGUgd2F5IG9mIHdob2V2ZXIgZG9lcyBub3QuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbm90aWZ5KGhlYWRsaW5lOiBzdHJpbmcsIGJvZHk6IHN0cmluZykge1xuICAgIGxldCBmdWxsID0gYCoqJHtoZWFkbGluZX0qKlxcblxcbiR7Ym9keX1cXG5cXG4ke2hvc3RMYWJlbFZhbHVlIHx8IG9zLmhvc3RuYW1lKCl9YDtcbiAgICAvLyBMb2dnZWQgYmVmb3JlIGl0IGlzIHNlbnQsIGFuZCB3aGV0aGVyIG9yIG5vdCBpdCBhcnJpdmVzLCBzbyB0aGUgam91cm5hbCBpcyBhIGNvbXBsZXRlIHJlY29yZFxuICAgIC8vIG9mIHdoYXQgdGhpcyBtYWNoaW5lIGhhZCB0byBzYXkgZXZlbiB3aGVuIERpc2NvcmQgaXMgdW5yZWFjaGFibGUgb3IgdGhlIHdlYmhvb2sgaXMgd3JvbmcuXG4gICAgY29uc29sZS5sb2coYERpc2NvcmQ6ICR7ZnVsbH1gKTtcbiAgICB0cnkge1xuICAgICAgICBhd2FpdCBzZW5kRGlzY29yZE5vdGlmaWNhdGlvbihmdWxsKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8vIEEgZmFpbGVkIG5vdGlmaWNhdGlvbiBtdXN0IG5ldmVyIHRha2UgdGhlIGRhZW1vbiBkb3duLCB0aGUgbG9jYWwgbG9nIGlzIHRoZSBmYWxsYmFjay5cbiAgICAgICAgY29uc29sZS5sb2coYEZhaWxlZCB0byBzZW5kIHRoZSBEaXNjb3JkIG5vdGlmaWNhdGlvbiBhYm92ZS4gJHtlfWApO1xuICAgIH1cbn1cbiJdfQ==
39
- /* _JS_SOURCE_HASH = "9fe72e2c338fa1d2d53a34b85265b997cc47def23f019ca77b8a3735088305e5"; */
39
+ /* _JS_SOURCE_HASH = "edf1462978c5a8842ca1de5fd78ec5ec2831c44002ae68f5affb30ee6f61eb33"; */
@@ -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
  // Locations the daemon owns. Fixed rather than configurable, so every machine looks the same and
3
3
  // the config file only carries what genuinely differs between them.
4
4
  Object.defineProperty(exports, "__esModule", { value: true , configurable: true});
@@ -23,4 +23,4 @@ exports.SIGNER_CHANGE_DELAY = 24 * 60 * 60 * 1000;
23
23
  // recovers from corruption and interrupted fetches. Counted in checks, so about a quarter hour.
24
24
  exports.MAX_REPO_FAILURES_BEFORE_RECLONE = 15;
25
25
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF0aHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJwYXRocy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsaUdBQWlHO0FBQ2pHLG9FQUFvRTs7O0FBRXZELFFBQUEsV0FBVyxHQUFHLDZCQUE2QixDQUFDO0FBQzVDLFFBQUEsVUFBVSxHQUFHLGdDQUFnQyxDQUFDO0FBQzlDLFFBQUEsaUJBQWlCLEdBQUcsNkNBQTZDLENBQUM7QUFDbEUsUUFBQSxvQkFBb0IsR0FBRyw0QkFBNEIsQ0FBQztBQUNwRCxRQUFBLGdCQUFnQixHQUFHLHNCQUFzQixDQUFDO0FBQzFDLFFBQUEsZUFBZSxHQUFHLHdCQUF3QixDQUFDO0FBQzNDLFFBQUEsZ0JBQWdCLEdBQUcsMkNBQTJDLENBQUM7QUFDL0QsUUFBQSxXQUFXLEdBQUcsYUFBYSxDQUFDO0FBQzVCLFFBQUEsYUFBYSxHQUFHLG1CQUFtQixDQUFDO0FBRXBDLFFBQUEsY0FBYyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDM0IsUUFBQSxzQkFBc0IsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUN2QyxRQUFBLFdBQVcsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDO0FBQ3pCLFFBQUEscUJBQXFCLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLCtGQUErRjtBQUMvRix3RkFBd0Y7QUFDM0UsUUFBQSxtQkFBbUIsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDdkQsNEZBQTRGO0FBQzVGLGdHQUFnRztBQUNuRixRQUFBLGdDQUFnQyxHQUFHLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIExvY2F0aW9ucyB0aGUgZGFlbW9uIG93bnMuIEZpeGVkIHJhdGhlciB0aGFuIGNvbmZpZ3VyYWJsZSwgc28gZXZlcnkgbWFjaGluZSBsb29rcyB0aGUgc2FtZSBhbmRcbi8vIHRoZSBjb25maWcgZmlsZSBvbmx5IGNhcnJpZXMgd2hhdCBnZW51aW5lbHkgZGlmZmVycyBiZXR3ZWVuIHRoZW0uXG5cbmV4cG9ydCBjb25zdCBDT05GSUdfUEFUSCA9IFwiL2V0Yy9wb3J0c2VjdXJlL2RhZW1vbi5qc29uXCI7XG5leHBvcnQgY29uc3QgU1RBVEVfUEFUSCA9IFwiL3Zhci9saWIvcG9ydHNlY3VyZS9zdGF0ZS5qc29uXCI7XG5leHBvcnQgY29uc3QgS0VZU19ISVNUT1JZX1BBVEggPSBcIi92YXIvbGliL3BvcnRzZWN1cmUvYXV0aG9yaXplZC1rZXlzLWhpc3RvcnlcIjtcbmV4cG9ydCBjb25zdCBST09UX0FVVEhPUklaRURfS0VZUyA9IFwiL3Jvb3QvLnNzaC9hdXRob3JpemVkX2tleXNcIjtcbmV4cG9ydCBjb25zdCBTU0hEX0NPTkZJR19QQVRIID0gXCIvZXRjL3NzaC9zc2hkX2NvbmZpZ1wiO1xuZXhwb3J0IGNvbnN0IFNTSERfRFJPUElOX0RJUiA9IFwiL2V0Yy9zc2gvc3NoZF9jb25maWcuZFwiO1xuZXhwb3J0IGNvbnN0IFNTSERfRFJPUElOX1BBVEggPSBcIi9ldGMvc3NoL3NzaGRfY29uZmlnLmQvMDAtcG9ydHNlY3VyZS5jb25mXCI7XG5leHBvcnQgY29uc3QgUEFTU1dEX1BBVEggPSBcIi9ldGMvcGFzc3dkXCI7XG5leHBvcnQgY29uc3QgQVVUSF9MT0dfUEFUSCA9IFwiL3Zhci9sb2cvYXV0aC5sb2dcIjtcblxuZXhwb3J0IGNvbnN0IENIRUNLX0lOVEVSVkFMID0gNjAgKiAxMDAwO1xuZXhwb3J0IGNvbnN0IFdFQkhPT0tfQ0hFQ0tfSU5URVJWQUwgPSA1ICogNjAgKiAxMDAwO1xuZXhwb3J0IGNvbnN0IEdJVF9USU1FT1VUID0gMTIwICogMTAwMDtcbmV4cG9ydCBjb25zdCBNQVhfRVJST1JfQk9EWV9MRU5HVEggPSA1MDA7XG4vLyBBIHNvdXJjZSB0aGF0IHN0YXJ0cyBiZWluZyBzaWduZWQgYnkgc29tZW9uZSBuZXcgaXMgaGVsZCBhdCBhcm0ncyBsZW5ndGggZm9yIHRoaXMgbG9uZywgc28gYVxuLy8gc3RvbGVuIHNpZ25pbmcga2V5IGNhbm5vdCBwdXNoIGtleXMgb250byBhIG1hY2hpbmUgYmVmb3JlIGFueW9uZSBub3RpY2VzIHRoZSB3YXJuaW5nLlxuZXhwb3J0IGNvbnN0IFNJR05FUl9DSEFOR0VfREVMQVkgPSAyNCAqIDYwICogNjAgKiAxMDAwO1xuLy8gQWZ0ZXIgdGhpcyBtYW55IGNvbnNlY3V0aXZlIGZhaWx1cmVzIGEgcmVwbyBpcyB0aHJvd24gYXdheSBhbmQgY2xvbmVkIGZyb20gc2NyYXRjaCwgd2hpY2hcbi8vIHJlY292ZXJzIGZyb20gY29ycnVwdGlvbiBhbmQgaW50ZXJydXB0ZWQgZmV0Y2hlcy4gQ291bnRlZCBpbiBjaGVja3MsIHNvIGFib3V0IGEgcXVhcnRlciBob3VyLlxuZXhwb3J0IGNvbnN0IE1BWF9SRVBPX0ZBSUxVUkVTX0JFRk9SRV9SRUNMT05FID0gMTU7XG4iXX0=
26
- /* _JS_SOURCE_HASH = "d214733e56571f96efa46794d88b788ac72af825fd2d9633e88572404bbde2ad"; */
26
+ /* _JS_SOURCE_HASH = "c606b0bfd0484c71ea64ce15490c8a5c417cd888ee8184397cc81fed374ef249"; */