@bitgo/abstract-utxo 13.0.0 → 13.1.0

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 (48) hide show
  1. package/dist/cjs/src/impl/zec/index.d.ts +1 -0
  2. package/dist/cjs/src/impl/zec/index.d.ts.map +1 -1
  3. package/dist/cjs/src/impl/zec/index.js +2 -1
  4. package/dist/cjs/src/impl/zec/shieldedAddress.d.ts +36 -0
  5. package/dist/cjs/src/impl/zec/shieldedAddress.d.ts.map +1 -0
  6. package/dist/cjs/src/impl/zec/shieldedAddress.js +51 -0
  7. package/dist/cjs/src/impl/zec/signIronwoodTransaction.d.ts +29 -0
  8. package/dist/cjs/src/impl/zec/signIronwoodTransaction.d.ts.map +1 -0
  9. package/dist/cjs/src/impl/zec/signIronwoodTransaction.js +57 -0
  10. package/dist/cjs/src/impl/zec/zec.d.ts +16 -2
  11. package/dist/cjs/src/impl/zec/zec.d.ts.map +1 -1
  12. package/dist/cjs/src/impl/zec/zec.js +38 -1
  13. package/dist/cjs/src/transaction/fixedScript/signPsbtWasm.d.ts +7 -0
  14. package/dist/cjs/src/transaction/fixedScript/signPsbtWasm.d.ts.map +1 -1
  15. package/dist/cjs/src/transaction/fixedScript/signPsbtWasm.js +32 -20
  16. package/dist/cjs/src/transaction/fixedScript/signTransaction.d.ts +9 -0
  17. package/dist/cjs/src/transaction/fixedScript/signTransaction.d.ts.map +1 -1
  18. package/dist/cjs/src/transaction/fixedScript/signTransaction.js +18 -9
  19. package/dist/cjs/src/transaction/signTransaction.d.ts +12 -0
  20. package/dist/cjs/src/transaction/signTransaction.d.ts.map +1 -1
  21. package/dist/cjs/src/transaction/signTransaction.js +16 -7
  22. package/dist/cjs/test/unit/impl/zec/shieldedPrebuildAndSign.js +142 -1
  23. package/dist/cjs/test/unit/impl/zec/unit/shieldedAddress.d.ts +2 -0
  24. package/dist/cjs/test/unit/impl/zec/unit/shieldedAddress.d.ts.map +1 -0
  25. package/dist/cjs/test/unit/impl/zec/unit/shieldedAddress.js +57 -0
  26. package/dist/cjs/tsconfig.tsbuildinfo +1 -1
  27. package/dist/esm/impl/zec/index.d.ts +1 -0
  28. package/dist/esm/impl/zec/index.d.ts.map +1 -1
  29. package/dist/esm/impl/zec/index.js +2 -1
  30. package/dist/esm/impl/zec/shieldedAddress.d.ts +36 -0
  31. package/dist/esm/impl/zec/shieldedAddress.d.ts.map +1 -0
  32. package/dist/esm/impl/zec/shieldedAddress.js +48 -0
  33. package/dist/esm/impl/zec/signIronwoodTransaction.d.ts +29 -0
  34. package/dist/esm/impl/zec/signIronwoodTransaction.d.ts.map +1 -0
  35. package/dist/esm/impl/zec/signIronwoodTransaction.js +50 -0
  36. package/dist/esm/impl/zec/zec.d.ts +16 -2
  37. package/dist/esm/impl/zec/zec.d.ts.map +1 -1
  38. package/dist/esm/impl/zec/zec.js +36 -2
  39. package/dist/esm/transaction/fixedScript/signPsbtWasm.d.ts +7 -0
  40. package/dist/esm/transaction/fixedScript/signPsbtWasm.d.ts.map +1 -1
  41. package/dist/esm/transaction/fixedScript/signPsbtWasm.js +30 -20
  42. package/dist/esm/transaction/fixedScript/signTransaction.d.ts +9 -0
  43. package/dist/esm/transaction/fixedScript/signTransaction.d.ts.map +1 -1
  44. package/dist/esm/transaction/fixedScript/signTransaction.js +17 -9
  45. package/dist/esm/transaction/signTransaction.d.ts +12 -0
  46. package/dist/esm/transaction/signTransaction.d.ts.map +1 -1
  47. package/dist/esm/transaction/signTransaction.js +15 -8
  48. package/package.json +6 -6
@@ -4,6 +4,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.signAndVerifyPsbt = signAndVerifyPsbt;
7
+ exports.finalizeSignedPsbt = finalizeSignedPsbt;
7
8
  exports.signTransaction = signTransaction;
8
9
  const assert_1 = __importDefault(require("assert"));
9
10
  const sdk_core_1 = require("@bitgo/sdk-core");
@@ -16,6 +17,21 @@ function signAndVerifyPsbt(psbt, signerKeychain, rootWalletKeys, replayProtectio
16
17
  (0, assert_1.default)(replayProtection, 'replayProtection required for wasm-utxo signing');
17
18
  return (0, signPsbtWasm_1.signAndVerifyPsbtWasm)(psbt, signerKeychain, rootWalletKeys, replayProtection, options);
18
19
  }
20
+ /**
21
+ * Finalize a signed PSBT into its final form: the extracted transaction bytes on the last
22
+ * signature round (unless the caller asked to keep the PSBT), otherwise the signed PSBT itself.
23
+ * Shared by the generic signing path and Zec's Ironwood (v6) signing path.
24
+ */
25
+ function finalizeSignedPsbt(signedPsbt, { isLastSignature = false, extractTransaction = true }) {
26
+ if (!isLastSignature) {
27
+ return signedPsbt;
28
+ }
29
+ if (extractTransaction) {
30
+ signedPsbt.finalizeAllInputs();
31
+ return Buffer.from(signedPsbt.extractTransaction().toBytes());
32
+ }
33
+ return signedPsbt;
34
+ }
19
35
  async function signTransaction(coin, tx, signerKeychain, coinName, params) {
20
36
  let isLastSignature = false;
21
37
  if (lodash_1.default.isBoolean(params.isLastSignature)) {
@@ -34,13 +50,6 @@ async function signTransaction(coin, tx, signerKeychain, coinName, params) {
34
50
  walletId: params.walletId,
35
51
  writeSignedWith: params.writeSignedWith,
36
52
  });
37
- if (isLastSignature) {
38
- if (extractTransaction) {
39
- signedPsbt.finalizeAllInputs();
40
- return Buffer.from(signedPsbt.extractTransaction().toBytes());
41
- }
42
- return signedPsbt;
43
- }
44
- return signedPsbt;
53
+ return finalizeSignedPsbt(signedPsbt, { isLastSignature, extractTransaction });
45
54
  }
46
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnblRyYW5zYWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL3RyYW5zYWN0aW9uL2ZpeGVkU2NyaXB0L3NpZ25UcmFuc2FjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQWFBLDhDQVVDO0FBRUQsMENBNENDO0FBckVELG9EQUE0QjtBQUU1Qiw4Q0FBMkM7QUFDM0Msb0RBQXVCO0FBQ3ZCLGdEQUFtRTtBQU1uRSxpREFBZ0g7QUFDaEgseURBQWdFO0FBRWhFLFNBQWdCLGlCQUFpQixDQUMvQixJQUFpQyxFQUNqQyxjQUE0QyxFQUM1QyxjQUFnRCxFQUNoRCxnQkFBc0MsRUFDdEMsVUFBeUMsRUFBRTtJQUUzQyxJQUFBLGdCQUFNLEVBQUMsY0FBYyxFQUFFLCtDQUErQyxDQUFDLENBQUM7SUFDeEUsSUFBQSxnQkFBTSxFQUFDLGdCQUFnQixFQUFFLGlEQUFpRCxDQUFDLENBQUM7SUFDNUUsT0FBTyxJQUFBLG9DQUFxQixFQUFDLElBQUksRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGdCQUFnQixFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ2hHLENBQUM7QUFFTSxLQUFLLFVBQVUsZUFBZSxDQUNuQyxJQUFvRCxFQUNwRCxFQUErQixFQUMvQixjQUFnRCxFQUNoRCxRQUF5QyxFQUN6QyxNQVVDO0lBRUQsSUFBSSxlQUFlLEdBQUcsS0FBSyxDQUFDO0lBQzVCLElBQUksZ0JBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUM7UUFDeEMsc0dBQXNHO1FBQ3RHLGVBQWUsR0FBRyxNQUFNLENBQUMsZUFBZSxDQUFDO0lBQzNDLENBQUM7SUFFRCxNQUFNLEVBQUUsa0JBQWtCLEdBQUcsSUFBSSxFQUFFLEdBQUcsTUFBTSxDQUFDO0lBRTdDLElBQUEsZ0JBQU0sRUFBQyxNQUFNLENBQUMsSUFBSSxFQUFFLDRDQUE0QyxDQUFDLENBQUM7SUFDbEUsSUFBQSxnQkFBTSxFQUFDLElBQUEsbUJBQVEsRUFBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsdUJBQXVCLENBQUMsQ0FBQztJQUN2RCxNQUFNLGNBQWMsR0FBRyw2QkFBaUIsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMvRSxNQUFNLFVBQVUsR0FBRyxNQUFNLElBQUEsZ0RBQWlDLEVBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFO1FBQ25HLGdCQUFnQixFQUFFO1lBQ2hCLFVBQVUsRUFBRSxJQUFBLDZDQUEwQixFQUFDLFFBQVEsQ0FBQztTQUNqRDtRQUNELFdBQVcsRUFBRSxNQUFNLENBQUMsV0FBVztRQUMvQixRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVE7UUFDekIsZUFBZSxFQUFFLE1BQU0sQ0FBQyxlQUFlO0tBQ3hDLENBQUMsQ0FBQztJQUNILElBQUksZUFBZSxFQUFFLENBQUM7UUFDcEIsSUFBSSxrQkFBa0IsRUFBRSxDQUFDO1lBQ3ZCLFVBQVUsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQy9CLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQ2hFLENBQUM7UUFDRCxPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDO0lBQ0QsT0FBTyxVQUFVLENBQUM7QUFDcEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxuaW1wb3J0IHsgaXNUcmlwbGUgfSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IEJJUDMyLCBiaXAzMiwgZml4ZWRTY3JpcHRXYWxsZXQgfSBmcm9tICdAYml0Z28vd2FzbS11dHhvJztcblxuaW1wb3J0IHsgVXR4b0NvaW5OYW1lLCBXYXNtVXR4b0NvaW5OYW1lIH0gZnJvbSAnLi4vLi4vbmFtZXMnO1xuaW1wb3J0IHR5cGUgeyBVbnNwZW50IH0gZnJvbSAnLi4vLi4vdW5zcGVudCc7XG5cbmltcG9ydCB7IE11c2lnMlBhcnRpY2lwYW50IH0gZnJvbSAnLi9tdXNpZzInO1xuaW1wb3J0IHsgc2lnblBzYnRXaXRoTXVzaWcyUGFydGljaXBhbnRXYXNtLCBzaWduQW5kVmVyaWZ5UHNidFdhc20sIFJlcGxheVByb3RlY3Rpb25LZXlzIH0gZnJvbSAnLi9zaWduUHNidFdhc20nO1xuaW1wb3J0IHsgZ2V0UmVwbGF5UHJvdGVjdGlvblB1YmtleXMgfSBmcm9tICcuL3JlcGxheVByb3RlY3Rpb24nO1xuXG5leHBvcnQgZnVuY3Rpb24gc2lnbkFuZFZlcmlmeVBzYnQoXG4gIHBzYnQ6IGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidCxcbiAgc2lnbmVyS2V5Y2hhaW46IGJpcDMyLkJJUDMySW50ZXJmYWNlIHwgQklQMzIsXG4gIHJvb3RXYWxsZXRLZXlzOiBmaXhlZFNjcmlwdFdhbGxldC5Sb290V2FsbGV0S2V5cyxcbiAgcmVwbGF5UHJvdGVjdGlvbjogUmVwbGF5UHJvdGVjdGlvbktleXMsXG4gIG9wdGlvbnM6IHsgd3JpdGVTaWduZWRXaXRoPzogYm9vbGVhbiB9ID0ge31cbik6IGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidCB7XG4gIGFzc2VydChyb290V2FsbGV0S2V5cywgJ3Jvb3RXYWxsZXRLZXlzIHJlcXVpcmVkIGZvciB3YXNtLXV0eG8gc2lnbmluZycpO1xuICBhc3NlcnQocmVwbGF5UHJvdGVjdGlvbiwgJ3JlcGxheVByb3RlY3Rpb24gcmVxdWlyZWQgZm9yIHdhc20tdXR4byBzaWduaW5nJyk7XG4gIHJldHVybiBzaWduQW5kVmVyaWZ5UHNidFdhc20ocHNidCwgc2lnbmVyS2V5Y2hhaW4sIHJvb3RXYWxsZXRLZXlzLCByZXBsYXlQcm90ZWN0aW9uLCBvcHRpb25zKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNpZ25UcmFuc2FjdGlvbihcbiAgY29pbjogTXVzaWcyUGFydGljaXBhbnQ8Zml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0PixcbiAgdHg6IGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidCxcbiAgc2lnbmVyS2V5Y2hhaW46IGJpcDMyLkJJUDMySW50ZXJmYWNlIHwgdW5kZWZpbmVkLFxuICBjb2luTmFtZTogVXR4b0NvaW5OYW1lIHwgV2FzbVV0eG9Db2luTmFtZSxcbiAgcGFyYW1zOiB7XG4gICAgd2FsbGV0SWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICB0eEluZm86IHsgdW5zcGVudHM/OiBVbnNwZW50PGJpZ2ludCB8IG51bWJlcj5bXSB9IHwgdW5kZWZpbmVkO1xuICAgIGlzTGFzdFNpZ25hdHVyZTogYm9vbGVhbjtcbiAgICBzaWduaW5nU3RlcDogJ3NpZ25lck5vbmNlJyB8ICdjb3NpZ25lck5vbmNlJyB8ICdzaWduZXJTaWduYXR1cmUnIHwgdW5kZWZpbmVkO1xuICAgIHB1YnM6IHN0cmluZ1tdIHwgdW5kZWZpbmVkO1xuICAgIGNvc2lnbmVyUHViOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgLyoqIFdoZW4gdHJ1ZSAoZGVmYXVsdCksIGV4dHJhY3QgZmluYWxpemVkIFBTQlQgdG8gbGVnYWN5IHRyYW5zYWN0aW9uIGZvcm1hdC4gV2hlbiBmYWxzZSwgcmV0dXJuIGZpbmFsaXplZCBQU0JULiAqL1xuICAgIGV4dHJhY3RUcmFuc2FjdGlvbj86IGJvb2xlYW47XG4gICAgd3JpdGVTaWduZWRXaXRoPzogYm9vbGVhbjtcbiAgfVxuKTogUHJvbWlzZTxmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnQgfCBCdWZmZXI+IHtcbiAgbGV0IGlzTGFzdFNpZ25hdHVyZSA9IGZhbHNlO1xuICBpZiAoXy5pc0Jvb2xlYW4ocGFyYW1zLmlzTGFzdFNpZ25hdHVyZSkpIHtcbiAgICAvLyBpZiBidWlsZCBpcyBjYWxsZWQgaW5zdGVhZCBvZiBidWlsZEluY29tcGxldGUsIG5vIHNpZ25hdHVyZSBwbGFjZWhvbGRlcnMgYXJlIGxlZnQgaW4gdGhlIHNpZyBzY3JpcHRcbiAgICBpc0xhc3RTaWduYXR1cmUgPSBwYXJhbXMuaXNMYXN0U2lnbmF0dXJlO1xuICB9XG5cbiAgY29uc3QgeyBleHRyYWN0VHJhbnNhY3Rpb24gPSB0cnVlIH0gPSBwYXJhbXM7XG5cbiAgYXNzZXJ0KHBhcmFtcy5wdWJzLCAncHVicyBhcmUgcmVxdWlyZWQgZm9yIGZpeGVkIHNjcmlwdCBzaWduaW5nJyk7XG4gIGFzc2VydChpc1RyaXBsZShwYXJhbXMucHVicyksICdwdWJzIG11c3QgYmUgYSB0cmlwbGUnKTtcbiAgY29uc3Qgcm9vdFdhbGxldEtleXMgPSBmaXhlZFNjcmlwdFdhbGxldC5Sb290V2FsbGV0S2V5cy5mcm9tWHB1YnMocGFyYW1zLnB1YnMpO1xuICBjb25zdCBzaWduZWRQc2J0ID0gYXdhaXQgc2lnblBzYnRXaXRoTXVzaWcyUGFydGljaXBhbnRXYXNtKGNvaW4sIHR4LCBzaWduZXJLZXljaGFpbiwgcm9vdFdhbGxldEtleXMsIHtcbiAgICByZXBsYXlQcm90ZWN0aW9uOiB7XG4gICAgICBwdWJsaWNLZXlzOiBnZXRSZXBsYXlQcm90ZWN0aW9uUHVia2V5cyhjb2luTmFtZSksXG4gICAgfSxcbiAgICBzaWduaW5nU3RlcDogcGFyYW1zLnNpZ25pbmdTdGVwLFxuICAgIHdhbGxldElkOiBwYXJhbXMud2FsbGV0SWQsXG4gICAgd3JpdGVTaWduZWRXaXRoOiBwYXJhbXMud3JpdGVTaWduZWRXaXRoLFxuICB9KTtcbiAgaWYgKGlzTGFzdFNpZ25hdHVyZSkge1xuICAgIGlmIChleHRyYWN0VHJhbnNhY3Rpb24pIHtcbiAgICAgIHNpZ25lZFBzYnQuZmluYWxpemVBbGxJbnB1dHMoKTtcbiAgICAgIHJldHVybiBCdWZmZXIuZnJvbShzaWduZWRQc2J0LmV4dHJhY3RUcmFuc2FjdGlvbigpLnRvQnl0ZXMoKSk7XG4gICAgfVxuICAgIHJldHVybiBzaWduZWRQc2J0O1xuICB9XG4gIHJldHVybiBzaWduZWRQc2J0O1xufVxuIl19
55
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnblRyYW5zYWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL3RyYW5zYWN0aW9uL2ZpeGVkU2NyaXB0L3NpZ25UcmFuc2FjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQWFBLDhDQVVDO0FBT0QsZ0RBWUM7QUFFRCwwQ0FxQ0M7QUFqRkQsb0RBQTRCO0FBRTVCLDhDQUEyQztBQUMzQyxvREFBdUI7QUFDdkIsZ0RBQW1FO0FBTW5FLGlEQUFnSDtBQUNoSCx5REFBZ0U7QUFFaEUsU0FBZ0IsaUJBQWlCLENBQy9CLElBQWlDLEVBQ2pDLGNBQTRDLEVBQzVDLGNBQWdELEVBQ2hELGdCQUFzQyxFQUN0QyxVQUF5QyxFQUFFO0lBRTNDLElBQUEsZ0JBQU0sRUFBQyxjQUFjLEVBQUUsK0NBQStDLENBQUMsQ0FBQztJQUN4RSxJQUFBLGdCQUFNLEVBQUMsZ0JBQWdCLEVBQUUsaURBQWlELENBQUMsQ0FBQztJQUM1RSxPQUFPLElBQUEsb0NBQXFCLEVBQUMsSUFBSSxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsZ0JBQWdCLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDaEcsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFnQixrQkFBa0IsQ0FDaEMsVUFBdUMsRUFDdkMsRUFBRSxlQUFlLEdBQUcsS0FBSyxFQUFFLGtCQUFrQixHQUFHLElBQUksRUFBK0Q7SUFFbkgsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3JCLE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUM7SUFDRCxJQUFJLGtCQUFrQixFQUFFLENBQUM7UUFDdkIsVUFBVSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDL0IsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUNELE9BQU8sVUFBVSxDQUFDO0FBQ3BCLENBQUM7QUFFTSxLQUFLLFVBQVUsZUFBZSxDQUNuQyxJQUFvRCxFQUNwRCxFQUErQixFQUMvQixjQUFnRCxFQUNoRCxRQUF5QyxFQUN6QyxNQVVDO0lBRUQsSUFBSSxlQUFlLEdBQUcsS0FBSyxDQUFDO0lBQzVCLElBQUksZ0JBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUM7UUFDeEMsc0dBQXNHO1FBQ3RHLGVBQWUsR0FBRyxNQUFNLENBQUMsZUFBZSxDQUFDO0lBQzNDLENBQUM7SUFFRCxNQUFNLEVBQUUsa0JBQWtCLEdBQUcsSUFBSSxFQUFFLEdBQUcsTUFBTSxDQUFDO0lBRTdDLElBQUEsZ0JBQU0sRUFBQyxNQUFNLENBQUMsSUFBSSxFQUFFLDRDQUE0QyxDQUFDLENBQUM7SUFDbEUsSUFBQSxnQkFBTSxFQUFDLElBQUEsbUJBQVEsRUFBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsdUJBQXVCLENBQUMsQ0FBQztJQUN2RCxNQUFNLGNBQWMsR0FBRyw2QkFBaUIsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMvRSxNQUFNLFVBQVUsR0FBRyxNQUFNLElBQUEsZ0RBQWlDLEVBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFO1FBQ25HLGdCQUFnQixFQUFFO1lBQ2hCLFVBQVUsRUFBRSxJQUFBLDZDQUEwQixFQUFDLFFBQVEsQ0FBQztTQUNqRDtRQUNELFdBQVcsRUFBRSxNQUFNLENBQUMsV0FBVztRQUMvQixRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVE7UUFDekIsZUFBZSxFQUFFLE1BQU0sQ0FBQyxlQUFlO0tBQ3hDLENBQUMsQ0FBQztJQUNILE9BQU8sa0JBQWtCLENBQUMsVUFBVSxFQUFFLEVBQUUsZUFBZSxFQUFFLGtCQUFrQixFQUFFLENBQUMsQ0FBQztBQUNqRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG5pbXBvcnQgeyBpc1RyaXBsZSB9IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgQklQMzIsIGJpcDMyLCBmaXhlZFNjcmlwdFdhbGxldCB9IGZyb20gJ0BiaXRnby93YXNtLXV0eG8nO1xuXG5pbXBvcnQgeyBVdHhvQ29pbk5hbWUsIFdhc21VdHhvQ29pbk5hbWUgfSBmcm9tICcuLi8uLi9uYW1lcyc7XG5pbXBvcnQgdHlwZSB7IFVuc3BlbnQgfSBmcm9tICcuLi8uLi91bnNwZW50JztcblxuaW1wb3J0IHsgTXVzaWcyUGFydGljaXBhbnQgfSBmcm9tICcuL211c2lnMic7XG5pbXBvcnQgeyBzaWduUHNidFdpdGhNdXNpZzJQYXJ0aWNpcGFudFdhc20sIHNpZ25BbmRWZXJpZnlQc2J0V2FzbSwgUmVwbGF5UHJvdGVjdGlvbktleXMgfSBmcm9tICcuL3NpZ25Qc2J0V2FzbSc7XG5pbXBvcnQgeyBnZXRSZXBsYXlQcm90ZWN0aW9uUHVia2V5cyB9IGZyb20gJy4vcmVwbGF5UHJvdGVjdGlvbic7XG5cbmV4cG9ydCBmdW5jdGlvbiBzaWduQW5kVmVyaWZ5UHNidChcbiAgcHNidDogZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0LFxuICBzaWduZXJLZXljaGFpbjogYmlwMzIuQklQMzJJbnRlcmZhY2UgfCBCSVAzMixcbiAgcm9vdFdhbGxldEtleXM6IGZpeGVkU2NyaXB0V2FsbGV0LlJvb3RXYWxsZXRLZXlzLFxuICByZXBsYXlQcm90ZWN0aW9uOiBSZXBsYXlQcm90ZWN0aW9uS2V5cyxcbiAgb3B0aW9uczogeyB3cml0ZVNpZ25lZFdpdGg/OiBib29sZWFuIH0gPSB7fVxuKTogZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0IHtcbiAgYXNzZXJ0KHJvb3RXYWxsZXRLZXlzLCAncm9vdFdhbGxldEtleXMgcmVxdWlyZWQgZm9yIHdhc20tdXR4byBzaWduaW5nJyk7XG4gIGFzc2VydChyZXBsYXlQcm90ZWN0aW9uLCAncmVwbGF5UHJvdGVjdGlvbiByZXF1aXJlZCBmb3Igd2FzbS11dHhvIHNpZ25pbmcnKTtcbiAgcmV0dXJuIHNpZ25BbmRWZXJpZnlQc2J0V2FzbShwc2J0LCBzaWduZXJLZXljaGFpbiwgcm9vdFdhbGxldEtleXMsIHJlcGxheVByb3RlY3Rpb24sIG9wdGlvbnMpO1xufVxuXG4vKipcbiAqIEZpbmFsaXplIGEgc2lnbmVkIFBTQlQgaW50byBpdHMgZmluYWwgZm9ybTogdGhlIGV4dHJhY3RlZCB0cmFuc2FjdGlvbiBieXRlcyBvbiB0aGUgbGFzdFxuICogc2lnbmF0dXJlIHJvdW5kICh1bmxlc3MgdGhlIGNhbGxlciBhc2tlZCB0byBrZWVwIHRoZSBQU0JUKSwgb3RoZXJ3aXNlIHRoZSBzaWduZWQgUFNCVCBpdHNlbGYuXG4gKiBTaGFyZWQgYnkgdGhlIGdlbmVyaWMgc2lnbmluZyBwYXRoIGFuZCBaZWMncyBJcm9ud29vZCAodjYpIHNpZ25pbmcgcGF0aC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmFsaXplU2lnbmVkUHNidChcbiAgc2lnbmVkUHNidDogZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0LFxuICB7IGlzTGFzdFNpZ25hdHVyZSA9IGZhbHNlLCBleHRyYWN0VHJhbnNhY3Rpb24gPSB0cnVlIH06IHsgaXNMYXN0U2lnbmF0dXJlPzogYm9vbGVhbjsgZXh0cmFjdFRyYW5zYWN0aW9uPzogYm9vbGVhbiB9XG4pOiBmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnQgfCBCdWZmZXIge1xuICBpZiAoIWlzTGFzdFNpZ25hdHVyZSkge1xuICAgIHJldHVybiBzaWduZWRQc2J0O1xuICB9XG4gIGlmIChleHRyYWN0VHJhbnNhY3Rpb24pIHtcbiAgICBzaWduZWRQc2J0LmZpbmFsaXplQWxsSW5wdXRzKCk7XG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHNpZ25lZFBzYnQuZXh0cmFjdFRyYW5zYWN0aW9uKCkudG9CeXRlcygpKTtcbiAgfVxuICByZXR1cm4gc2lnbmVkUHNidDtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNpZ25UcmFuc2FjdGlvbihcbiAgY29pbjogTXVzaWcyUGFydGljaXBhbnQ8Zml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0PixcbiAgdHg6IGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidCxcbiAgc2lnbmVyS2V5Y2hhaW46IGJpcDMyLkJJUDMySW50ZXJmYWNlIHwgdW5kZWZpbmVkLFxuICBjb2luTmFtZTogVXR4b0NvaW5OYW1lIHwgV2FzbVV0eG9Db2luTmFtZSxcbiAgcGFyYW1zOiB7XG4gICAgd2FsbGV0SWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICB0eEluZm86IHsgdW5zcGVudHM/OiBVbnNwZW50PGJpZ2ludCB8IG51bWJlcj5bXSB9IHwgdW5kZWZpbmVkO1xuICAgIGlzTGFzdFNpZ25hdHVyZTogYm9vbGVhbjtcbiAgICBzaWduaW5nU3RlcDogJ3NpZ25lck5vbmNlJyB8ICdjb3NpZ25lck5vbmNlJyB8ICdzaWduZXJTaWduYXR1cmUnIHwgdW5kZWZpbmVkO1xuICAgIHB1YnM6IHN0cmluZ1tdIHwgdW5kZWZpbmVkO1xuICAgIGNvc2lnbmVyUHViOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgLyoqIFdoZW4gdHJ1ZSAoZGVmYXVsdCksIGV4dHJhY3QgZmluYWxpemVkIFBTQlQgdG8gbGVnYWN5IHRyYW5zYWN0aW9uIGZvcm1hdC4gV2hlbiBmYWxzZSwgcmV0dXJuIGZpbmFsaXplZCBQU0JULiAqL1xuICAgIGV4dHJhY3RUcmFuc2FjdGlvbj86IGJvb2xlYW47XG4gICAgd3JpdGVTaWduZWRXaXRoPzogYm9vbGVhbjtcbiAgfVxuKTogUHJvbWlzZTxmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnQgfCBCdWZmZXI+IHtcbiAgbGV0IGlzTGFzdFNpZ25hdHVyZSA9IGZhbHNlO1xuICBpZiAoXy5pc0Jvb2xlYW4ocGFyYW1zLmlzTGFzdFNpZ25hdHVyZSkpIHtcbiAgICAvLyBpZiBidWlsZCBpcyBjYWxsZWQgaW5zdGVhZCBvZiBidWlsZEluY29tcGxldGUsIG5vIHNpZ25hdHVyZSBwbGFjZWhvbGRlcnMgYXJlIGxlZnQgaW4gdGhlIHNpZyBzY3JpcHRcbiAgICBpc0xhc3RTaWduYXR1cmUgPSBwYXJhbXMuaXNMYXN0U2lnbmF0dXJlO1xuICB9XG5cbiAgY29uc3QgeyBleHRyYWN0VHJhbnNhY3Rpb24gPSB0cnVlIH0gPSBwYXJhbXM7XG5cbiAgYXNzZXJ0KHBhcmFtcy5wdWJzLCAncHVicyBhcmUgcmVxdWlyZWQgZm9yIGZpeGVkIHNjcmlwdCBzaWduaW5nJyk7XG4gIGFzc2VydChpc1RyaXBsZShwYXJhbXMucHVicyksICdwdWJzIG11c3QgYmUgYSB0cmlwbGUnKTtcbiAgY29uc3Qgcm9vdFdhbGxldEtleXMgPSBmaXhlZFNjcmlwdFdhbGxldC5Sb290V2FsbGV0S2V5cy5mcm9tWHB1YnMocGFyYW1zLnB1YnMpO1xuICBjb25zdCBzaWduZWRQc2J0ID0gYXdhaXQgc2lnblBzYnRXaXRoTXVzaWcyUGFydGljaXBhbnRXYXNtKGNvaW4sIHR4LCBzaWduZXJLZXljaGFpbiwgcm9vdFdhbGxldEtleXMsIHtcbiAgICByZXBsYXlQcm90ZWN0aW9uOiB7XG4gICAgICBwdWJsaWNLZXlzOiBnZXRSZXBsYXlQcm90ZWN0aW9uUHVia2V5cyhjb2luTmFtZSksXG4gICAgfSxcbiAgICBzaWduaW5nU3RlcDogcGFyYW1zLnNpZ25pbmdTdGVwLFxuICAgIHdhbGxldElkOiBwYXJhbXMud2FsbGV0SWQsXG4gICAgd3JpdGVTaWduZWRXaXRoOiBwYXJhbXMud3JpdGVTaWduZWRXaXRoLFxuICB9KTtcbiAgcmV0dXJuIGZpbmFsaXplU2lnbmVkUHNidChzaWduZWRQc2J0LCB7IGlzTGFzdFNpZ25hdHVyZSwgZXh0cmFjdFRyYW5zYWN0aW9uIH0pO1xufVxuIl19
@@ -1,5 +1,17 @@
1
1
  import { BitGoBase } from '@bitgo/sdk-core';
2
+ import { BIP32, fixedScriptWallet } from '@bitgo/wasm-utxo';
2
3
  import { AbstractUtxoCoin, SignTransactionOptions } from '../abstractUtxoCoin';
4
+ export declare function getSignerKeychain(userPrv: unknown): BIP32 | undefined;
5
+ /**
6
+ * Wrap a signed transaction (finalized PSBT or extracted bytes) into the signTransaction result
7
+ * shape, honoring the caller's legacy-format request.
8
+ * Shared by the generic signing path and Zec's Ironwood (v6) signing path.
9
+ */
10
+ export declare function toSignTransactionResult(signedTx: fixedScriptWallet.BitGoPsbt | Buffer, { returnLegacyFormat }: {
11
+ returnLegacyFormat?: boolean;
12
+ }): {
13
+ txHex: string;
14
+ };
3
15
  export declare function signTransaction<TNumber extends number | bigint>(coin: AbstractUtxoCoin, bitgo: BitGoBase, params: SignTransactionOptions<TNumber>): Promise<{
4
16
  txHex: string;
5
17
  }>;
@@ -1 +1 @@
1
- {"version":3,"file":"signTransaction.d.ts","sourceRoot":"","sources":["../../../../src/transaction/signTransaction.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAI5C,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAyB/E,wBAAsB,eAAe,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EACnE,IAAI,EAAE,gBAAgB,EACtB,KAAK,EAAE,SAAS,EAChB,MAAM,EAAE,sBAAsB,CAAC,OAAO,CAAC,GACtC,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CA+C5B"}
1
+ {"version":3,"file":"signTransaction.d.ts","sourceRoot":"","sources":["../../../../src/transaction/signTransaction.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAG5D,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAU/E,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,KAAK,GAAG,SAAS,CAarE;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,iBAAiB,CAAC,SAAS,GAAG,MAAM,EAC9C,EAAE,kBAAkB,EAAE,EAAE;IAAE,kBAAkB,CAAC,EAAE,OAAO,CAAA;CAAE,GACvD;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAMnB;AAED,wBAAsB,eAAe,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EACnE,IAAI,EAAE,gBAAgB,EACtB,KAAK,EAAE,SAAS,EAChB,MAAM,EAAE,sBAAsB,CAAC,OAAO,CAAC,GACtC,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAyC5B"}
@@ -36,6 +36,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
36
36
  return (mod && mod.__esModule) ? mod : { "default": mod };
37
37
  };
38
38
  Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.getSignerKeychain = getSignerKeychain;
40
+ exports.toSignTransactionResult = toSignTransactionResult;
39
41
  exports.signTransaction = signTransaction;
40
42
  const lodash_1 = __importDefault(require("lodash"));
41
43
  const wasm_utxo_1 = require("@bitgo/wasm-utxo");
@@ -60,6 +62,18 @@ function getSignerKeychain(userPrv) {
60
62
  debug(`Here is the public key of the xprv you used to sign: ${signerKeychain.neutered().toBase58()}`);
61
63
  return signerKeychain;
62
64
  }
65
+ /**
66
+ * Wrap a signed transaction (finalized PSBT or extracted bytes) into the signTransaction result
67
+ * shape, honoring the caller's legacy-format request.
68
+ * Shared by the generic signing path and Zec's Ironwood (v6) signing path.
69
+ */
70
+ function toSignTransactionResult(signedTx, { returnLegacyFormat }) {
71
+ if (returnLegacyFormat && signedTx instanceof wasm_utxo_1.fixedScriptWallet.BitGoPsbt) {
72
+ return { txHex: Buffer.from(signedTx.getHalfSignedLegacyFormat()).toString('hex') };
73
+ }
74
+ const buffer = Buffer.isBuffer(signedTx) ? signedTx : (0, decode_1.encodeTransaction)(signedTx);
75
+ return { txHex: buffer.toString('hex') };
76
+ }
63
77
  async function signTransaction(coin, bitgo, params) {
64
78
  const txPrebuild = params.txPrebuild;
65
79
  if (lodash_1.default.isUndefined(txPrebuild) || !lodash_1.default.isObject(txPrebuild)) {
@@ -94,12 +108,7 @@ async function signTransaction(coin, bitgo, params) {
94
108
  extractTransaction: params.extractTransaction,
95
109
  writeSignedWith: params.writeSignedWith,
96
110
  });
97
- // Convert half-signed PSBT to legacy format when the caller explicitly requested txFormat: 'legacy'
98
- if (params.returnLegacyFormat && signedTx instanceof wasm_utxo_1.fixedScriptWallet.BitGoPsbt) {
99
- return { txHex: Buffer.from(signedTx.getHalfSignedLegacyFormat()).toString('hex') };
100
- }
101
- const buffer = Buffer.isBuffer(signedTx) ? signedTx : (0, decode_1.encodeTransaction)(signedTx);
102
- return { txHex: buffer.toString('hex') };
111
+ return toSignTransactionResult(signedTx, params);
103
112
  }
104
113
  }
105
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnblRyYW5zYWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3RyYW5zYWN0aW9uL3NpZ25UcmFuc2FjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQThCQSwwQ0FtREM7QUFqRkQsb0RBQXVCO0FBRXZCLGdEQUE0RDtBQUM1RCxrREFBK0I7QUFHL0IsOENBQWdHO0FBQ2hHLDRDQUE2RDtBQUU3RCwyREFBNkM7QUFDN0MseURBQTJDO0FBQzNDLHFDQUFtRTtBQUVuRSxNQUFNLEtBQUssR0FBRyxJQUFBLGVBQVUsRUFBQyxpREFBaUQsQ0FBQyxDQUFDO0FBRTVFLFNBQVMsaUJBQWlCLENBQUMsT0FBZ0I7SUFDekMsSUFBSSxPQUFPLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDMUIsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUNELElBQUksT0FBTyxPQUFPLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDaEMsTUFBTSxJQUFJLEtBQUssQ0FBQywwQ0FBMEMsQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFDRCxNQUFNLGNBQWMsR0FBRyxpQkFBSyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNqRCxJQUFJLGNBQWMsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDO1FBQ2hDLE1BQU0sSUFBSSxLQUFLLENBQUMsbURBQW1ELENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBQ0QsS0FBSyxDQUFDLHdEQUF3RCxjQUFjLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3RHLE9BQU8sY0FBYyxDQUFDO0FBQ3hCLENBQUM7QUFFTSxLQUFLLFVBQVUsZUFBZSxDQUNuQyxJQUFzQixFQUN0QixLQUFnQixFQUNoQixNQUF1QztJQUV2QyxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDO0lBRXJDLElB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QUFpQixFQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2xGLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO0lBQzNDLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IEJpdEdvQmFzZSB9IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5pbXBvcnQgeyBCSVAzMiwgZml4ZWRTY3JpcHRXYWxsZXQgfSBmcm9tICdAYml0Z28vd2FzbS11dHhvJztcbmltcG9ydCBidWlsZERlYnVnIGZyb20gJ2RlYnVnJztcblxuaW1wb3J0IHsgQWJzdHJhY3RVdHhvQ29pbiwgU2lnblRyYW5zYWN0aW9uT3B0aW9ucyB9IGZyb20gJy4uL2Fic3RyYWN0VXR4b0NvaW4nO1xuaW1wb3J0IHsgZ2V0RGVzY3JpcHRvck1hcEZyb21XYWxsZXQsIGdldFBvbGljeUZvckVudiwgaXNEZXNjcmlwdG9yV2FsbGV0IH0gZnJvbSAnLi4vZGVzY3JpcHRvcic7XG5pbXBvcnQgeyBmZXRjaEtleWNoYWlucywgdG9CaXAzMlRyaXBsZSB9IGZyb20gJy4uL2tleWNoYWlucyc7XG5cbmltcG9ydCAqIGFzIGZpeGVkU2NyaXB0IGZyb20gJy4vZml4ZWRTY3JpcHQnO1xuaW1wb3J0ICogYXMgZGVzY3JpcHRvciBmcm9tICcuL2Rlc2NyaXB0b3InO1xuaW1wb3J0IHsgZGVjb2RlRGVzY3JpcHRvclBzYnQsIGVuY29kZVRyYW5zYWN0aW9uIH0gZnJvbSAnLi9kZWNvZGUnO1xuXG5jb25zdCBkZWJ1ZyA9IGJ1aWxkRGVidWcoJ2JpdGdvOmFic3RyYWN0LXV0eG86dHJhbnNhY3Rpb246c2lnblRyYW5zYWN0aW9uJyk7XG5cbmZ1bmN0aW9uIGdldFNpZ25lcktleWNoYWluKHVzZXJQcnY6IHVua25vd24pOiBCSVAzMiB8IHVuZGVmaW5lZCB7XG4gIGlmICh1c2VyUHJ2ID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGlmICh0eXBlb2YgdXNlclBydiAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2V4cGVjdGVkIHVzZXIgcHJpdmF0ZSBrZXkgdG8gYmUgYSBzdHJpbmcnKTtcbiAgfVxuICBjb25zdCBzaWduZXJLZXljaGFpbiA9IEJJUDMyLmZyb21CYXNlNTgodXNlclBydik7XG4gIGlmIChzaWduZXJLZXljaGFpbi5pc05ldXRlcmVkKCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2V4cGVjdGVkIHVzZXIgcHJpdmF0ZSBrZXkgYnV0IHJlY2VpdmVkIHB1YmxpYyBrZXknKTtcbiAgfVxuICBkZWJ1ZyhgSGVyZSBpcyB0aGUgcHVibGljIGtleSBvZiB0aGUgeHBydiB5b3UgdXNlZCB0byBzaWduOiAke3NpZ25lcktleWNoYWluLm5ldXRlcmVkKCkudG9CYXNlNTgoKX1gKTtcbiAgcmV0dXJuIHNpZ25lcktleWNoYWluO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2lnblRyYW5zYWN0aW9uPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQ+KFxuICBjb2luOiBBYnN0cmFjdFV0eG9Db2luLFxuICBiaXRnbzogQml0R29CYXNlLFxuICBwYXJhbXM6IFNpZ25UcmFuc2FjdGlvbk9wdGlvbnM8VE51bWJlcj5cbik6IFByb21pc2U8eyB0eEhleDogc3RyaW5nIH0+IHtcbiAgY29uc3QgdHhQcmVidWlsZCA9IHBhcmFtcy50eFByZWJ1aWxkO1xuXG4gIGlmIChfLmlzVW5kZWZpbmVkKHR4UHJlYnVpbGQpIHx8ICFfLmlzT2JqZWN0KHR4UHJlYnVpbGQpKSB7XG4gICAgaWYgKCFfLmlzVW5kZWZpbmVkKHR4UHJlYnVpbGQpICYmICFfLmlzT2JqZWN0KHR4UHJlYnVpbGQpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHR4UHJlYnVpbGQgbXVzdCBiZSBhbiBvYmplY3QsIGdvdCB0eXBlICR7dHlwZW9mIHR4UHJlYnVpbGR9YCk7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcignbWlzc2luZyB0eFByZWJ1aWxkIHBhcmFtZXRlcicpO1xuICB9XG5cbiAgY29uc3Qgc2lnbmVyS2V5Y2hhaW4gPSBnZXRTaWduZXJLZXljaGFpbihwYXJhbXMucHJ2KTtcblxuICBjb25zdCB7IHdhbGxldCB9ID0gcGFyYW1zO1xuXG4gIGlmICh3YWxsZXQgJiYgaXNEZXNjcmlwdG9yV2FsbGV0KHdhbGxldCkpIHtcbiAgICBpZiAoIXNpZ25lcktleWNoYWluKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ21pc3Npbmcgc2lnbmVyJyk7XG4gICAgfVxuICAgIGNvbnN0IHBzYnQgPSBkZWNvZGVEZXNjcmlwdG9yUHNidChwYXJhbXMudHhQcmVidWlsZCk7XG4gICAgY29uc3Qgd2FsbGV0S2V5cyA9IHRvQmlwMzJUcmlwbGUoYXdhaXQgZmV0Y2hLZXljaGFpbnMoY29pbiwgd2FsbGV0KSk7XG4gICAgY29uc3QgZGVzY3JpcHRvck1hcCA9IGdldERlc2NyaXB0b3JNYXBGcm9tV2FsbGV0KHdhbGxldCwgd2FsbGV0S2V5cywgZ2V0UG9saWN5Rm9yRW52KGJpdGdvLmVudikpO1xuICAgIGRlc2NyaXB0b3Iuc2lnblBzYnQocHNidCwgZGVzY3JpcHRvck1hcCwgc2lnbmVyS2V5Y2hhaW4sIHtcbiAgICAgIG9uVW5rbm93bklucHV0OiAndGhyb3cnLFxuICAgIH0pO1xuICAgIHJldHVybiB7IHR4SGV4OiBCdWZmZXIuZnJvbShwc2J0LnNlcmlhbGl6ZSgpKS50b1N0cmluZygnaGV4JykgfTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCB0eCA9IGNvaW4uZGVjb2RlVHJhbnNhY3Rpb25Gcm9tUHJlYnVpbGQocGFyYW1zLnR4UHJlYnVpbGQpO1xuXG4gICAgY29uc3Qgc2lnbmVkVHggPSBhd2FpdCBmaXhlZFNjcmlwdC5zaWduVHJhbnNhY3Rpb24oY29pbiwgdHgsIGdldFNpZ25lcktleWNoYWluKHBhcmFtcy5wcnYpLCBjb2luLndhc21OYW1lLCB7XG4gICAgICB3YWxsZXRJZDogcGFyYW1zLnR4UHJlYnVpbGQud2FsbGV0SWQsXG4gICAgICB0eEluZm86IHBhcmFtcy50eFByZWJ1aWxkLnR4SW5mbyxcbiAgICAgIGlzTGFzdFNpZ25hdHVyZTogcGFyYW1zLmlzTGFzdFNpZ25hdHVyZSA/PyBmYWxzZSxcbiAgICAgIHNpZ25pbmdTdGVwOiBwYXJhbXMuc2lnbmluZ1N0ZXAsXG4gICAgICBwdWJzOiBwYXJhbXMucHVicyxcbiAgICAgIGNvc2lnbmVyUHViOiBwYXJhbXMuY29zaWduZXJQdWIsXG4gICAgICBleHRyYWN0VHJhbnNhY3Rpb246IHBhcmFtcy5leHRyYWN0VHJhbnNhY3Rpb24sXG4gICAgICB3cml0ZVNpZ25lZFdpdGg6IHBhcmFtcy53cml0ZVNpZ25lZFdpdGgsXG4gICAgfSk7XG5cbiAgICAvLyBDb252ZXJ0IGhhbGYtc2lnbmVkIFBTQlQgdG8gbGVnYWN5IGZvcm1hdCB3aGVuIHRoZSBjYWxsZXIgZXhwbGljaXRseSByZXF1ZXN0ZWQgdHhGb3JtYXQ6ICdsZWdhY3knXG4gICAgaWYgKHBhcmFtcy5yZXR1cm5MZWdhY3lGb3JtYXQgJiYgc2lnbmVkVHggaW5zdGFuY2VvZiBmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnQpIHtcbiAgICAgIHJldHVybiB7IHR4SGV4OiBCdWZmZXIuZnJvbShzaWduZWRUeC5nZXRIYWxmU2lnbmVkTGVnYWN5Rm9ybWF0KCkpLnRvU3RyaW5nKCdoZXgnKSB9O1xuICAgIH1cblxuICAgIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5pc0J1ZmZlcihzaWduZWRUeCkgPyBzaWduZWRUeCA6IGVuY29kZVRyYW5zYWN0aW9uKHNpZ25lZFR4KTtcbiAgICByZXR1cm4geyB0eEhleDogYnVmZmVyLnRvU3RyaW5nKCdoZXgnKSB9O1xuICB9XG59XG4iXX0=
114
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnblRyYW5zYWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3RyYW5zYWN0aW9uL3NpZ25UcmFuc2FjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWVBLDhDQWFDO0FBT0QsMERBU0M7QUFFRCwwQ0E2Q0M7QUEzRkQsb0RBQXVCO0FBRXZCLGdEQUE0RDtBQUM1RCxrREFBK0I7QUFHL0IsOENBQWdHO0FBQ2hHLDRDQUE2RDtBQUU3RCwyREFBNkM7QUFDN0MseURBQTJDO0FBQzNDLHFDQUFtRTtBQUVuRSxNQUFNLEtBQUssR0FBRyxJQUFBLGVBQVUsRUFBQyxpREFBaUQsQ0FBQyxDQUFDO0FBRTVFLFNBQWdCLGlCQUFpQixDQUFDLE9BQWdCO0lBQ2hELElBQUksT0FBTyxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQzFCLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFDRCxJQUFJLE9BQU8sT0FBTyxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQ2hDLE1BQU0sSUFBSSxLQUFLLENBQUMsMENBQTBDLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBQ0QsTUFBTSxjQUFjLEdBQUcsaUJBQUssQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDakQsSUFBSSxjQUFjLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQztRQUNoQyxNQUFNLElBQUksS0FBSyxDQUFDLG1EQUFtRCxDQUFDLENBQUM7SUFDdkUsQ0FBQztJQUNELEtBQUssQ0FBQyx3REFBd0QsY0FBYyxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN0RyxPQUFPLGNBQWMsQ0FBQztBQUN4QixDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQWdCLHVCQUF1QixDQUNyQyxRQUE4QyxFQUM5QyxFQUFFLGtCQUFrQixFQUFvQztJQUV4RCxJQUFJLGtCQUFr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V0FBVyxFQUFFLE1BQU0sQ0FBQyxXQUFXO1lBQy9CLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSTtZQUNqQixXQUFXLEVBQUUsTUFBTSxDQUFDLFdBQVc7WUFDL0Isa0JBQWtCLEVBQUUsTUFBTSxDQUFDLGtCQUFrQjtZQUM3QyxlQUFlLEVBQUUsTUFBTSxDQUFDLGVBQWU7U0FDeEMsQ0FBQyxDQUFDO1FBRUgsT0FBTyx1QkFBdUIsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDbkQsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgQml0R29CYXNlIH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmltcG9ydCB7IEJJUDMyLCBmaXhlZFNjcmlwdFdhbGxldCB9IGZyb20gJ0BiaXRnby93YXNtLXV0eG8nO1xuaW1wb3J0IGJ1aWxkRGVidWcgZnJvbSAnZGVidWcnO1xuXG5pbXBvcnQgeyBBYnN0cmFjdFV0eG9Db2luLCBTaWduVHJhbnNhY3Rpb25PcHRpb25zIH0gZnJvbSAnLi4vYWJzdHJhY3RVdHhvQ29pbic7XG5pbXBvcnQgeyBnZXREZXNjcmlwdG9yTWFwRnJvbVdhbGxldCwgZ2V0UG9saWN5Rm9yRW52LCBpc0Rlc2NyaXB0b3JXYWxsZXQgfSBmcm9tICcuLi9kZXNjcmlwdG9yJztcbmltcG9ydCB7IGZldGNoS2V5Y2hhaW5zLCB0b0JpcDMyVHJpcGxlIH0gZnJvbSAnLi4va2V5Y2hhaW5zJztcblxuaW1wb3J0ICogYXMgZml4ZWRTY3JpcHQgZnJvbSAnLi9maXhlZFNjcmlwdCc7XG5pbXBvcnQgKiBhcyBkZXNjcmlwdG9yIGZyb20gJy4vZGVzY3JpcHRvcic7XG5pbXBvcnQgeyBkZWNvZGVEZXNjcmlwdG9yUHNidCwgZW5jb2RlVHJhbnNhY3Rpb24gfSBmcm9tICcuL2RlY29kZSc7XG5cbmNvbnN0IGRlYnVnID0gYnVpbGREZWJ1ZygnYml0Z286YWJzdHJhY3QtdXR4bzp0cmFuc2FjdGlvbjpzaWduVHJhbnNhY3Rpb24nKTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNpZ25lcktleWNoYWluKHVzZXJQcnY6IHVua25vd24pOiBCSVAzMiB8IHVuZGVmaW5lZCB7XG4gIGlmICh1c2VyUHJ2ID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGlmICh0eXBlb2YgdXNlclBydiAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2V4cGVjdGVkIHVzZXIgcHJpdmF0ZSBrZXkgdG8gYmUgYSBzdHJpbmcnKTtcbiAgfVxuICBjb25zdCBzaWduZXJLZXljaGFpbiA9IEJJUDMyLmZyb21CYXNlNTgodXNlclBydik7XG4gIGlmIChzaWduZXJLZXljaGFpbi5pc05ldXRlcmVkKCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2V4cGVjdGVkIHVzZXIgcHJpdmF0ZSBrZXkgYnV0IHJlY2VpdmVkIHB1YmxpYyBrZXknKTtcbiAgfVxuICBkZWJ1ZyhgSGVyZSBpcyB0aGUgcHVibGljIGtleSBvZiB0aGUgeHBydiB5b3UgdXNlZCB0byBzaWduOiAke3NpZ25lcktleWNoYWluLm5ldXRlcmVkKCkudG9CYXNlNTgoKX1gKTtcbiAgcmV0dXJuIHNpZ25lcktleWNoYWluO1xufVxuXG4vKipcbiAqIFdyYXAgYSBzaWduZWQgdHJhbnNhY3Rpb24gKGZpbmFsaXplZCBQU0JUIG9yIGV4dHJhY3RlZCBieXRlcykgaW50byB0aGUgc2lnblRyYW5zYWN0aW9uIHJlc3VsdFxuICogc2hhcGUsIGhvbm9yaW5nIHRoZSBjYWxsZXIncyBsZWdhY3ktZm9ybWF0IHJlcXVlc3QuXG4gKiBTaGFyZWQgYnkgdGhlIGdlbmVyaWMgc2lnbmluZyBwYXRoIGFuZCBaZWMncyBJcm9ud29vZCAodjYpIHNpZ25pbmcgcGF0aC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvU2lnblRyYW5zYWN0aW9uUmVzdWx0KFxuICBzaWduZWRUeDogZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0IHwgQnVmZmVyLFxuICB7IHJldHVybkxlZ2FjeUZvcm1hdCB9OiB7IHJldHVybkxlZ2FjeUZvcm1hdD86IGJvb2xlYW4gfVxuKTogeyB0eEhleDogc3RyaW5nIH0ge1xuICBpZiAocmV0dXJuTGVnYWN5Rm9ybWF0ICYmIHNpZ25lZFR4IGluc3RhbmNlb2YgZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0KSB7XG4gICAgcmV0dXJuIHsgdHhIZXg6IEJ1ZmZlci5mcm9tKHNpZ25lZFR4LmdldEhhbGZTaWduZWRMZWdhY3lGb3JtYXQoKSkudG9TdHJpbmcoJ2hleCcpIH07XG4gIH1cbiAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmlzQnVmZmVyKHNpZ25lZFR4KSA/IHNpZ25lZFR4IDogZW5jb2RlVHJhbnNhY3Rpb24oc2lnbmVkVHgpO1xuICByZXR1cm4geyB0eEhleDogYnVmZmVyLnRvU3RyaW5nKCdoZXgnKSB9O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2lnblRyYW5zYWN0aW9uPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQ+KFxuICBjb2luOiBBYnN0cmFjdFV0eG9Db2luLFxuICBiaXRnbzogQml0R29CYXNlLFxuICBwYXJhbXM6IFNpZ25UcmFuc2FjdGlvbk9wdGlvbnM8VE51bWJlcj5cbik6IFByb21pc2U8eyB0eEhleDogc3RyaW5nIH0+IHtcbiAgY29uc3QgdHhQcmVidWlsZCA9IHBhcmFtcy50eFByZWJ1aWxkO1xuXG4gIGlmIChfLmlzVW5kZWZpbmVkKHR4UHJlYnVpbGQpIHx8ICFfLmlzT2JqZWN0KHR4UHJlYnVpbGQpKSB7XG4gICAgaWYgKCFfLmlzVW5kZWZpbmVkKHR4UHJlYnVpbGQpICYmICFfLmlzT2JqZWN0KHR4UHJlYnVpbGQpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHR4UHJlYnVpbGQgbXVzdCBiZSBhbiBvYmplY3QsIGdvdCB0eXBlICR7dHlwZW9mIHR4UHJlYnVpbGR9YCk7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcignbWlzc2luZyB0eFByZWJ1aWxkIHBhcmFtZXRlcicpO1xuICB9XG5cbiAgY29uc3Qgc2lnbmVyS2V5Y2hhaW4gPSBnZXRTaWduZXJLZXljaGFpbihwYXJhbXMucHJ2KTtcblxuICBjb25zdCB7IHdhbGxldCB9ID0gcGFyYW1zO1xuXG4gIGlmICh3YWxsZXQgJiYgaXNEZXNjcmlwdG9yV2FsbGV0KHdhbGxldCkpIHtcbiAgICBpZiAoIXNpZ25lcktleWNoYWluKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ21pc3Npbmcgc2lnbmVyJyk7XG4gICAgfVxuICAgIGNvbnN0IHBzYnQgPSBkZWNvZGVEZXNjcmlwdG9yUHNidChwYXJhbXMudHhQcmVidWlsZCk7XG4gICAgY29uc3Qgd2FsbGV0S2V5cyA9IHRvQmlwMzJUcmlwbGUoYXdhaXQgZmV0Y2hLZXljaGFpbnMoY29pbiwgd2FsbGV0KSk7XG4gICAgY29uc3QgZGVzY3JpcHRvck1hcCA9IGdldERlc2NyaXB0b3JNYXBGcm9tV2FsbGV0KHdhbGxldCwgd2FsbGV0S2V5cywgZ2V0UG9saWN5Rm9yRW52KGJpdGdvLmVudikpO1xuICAgIGRlc2NyaXB0b3Iuc2lnblBzYnQocHNidCwgZGVzY3JpcHRvck1hcCwgc2lnbmVyS2V5Y2hhaW4sIHtcbiAgICAgIG9uVW5rbm93bklucHV0OiAndGhyb3cnLFxuICAgIH0pO1xuICAgIHJldHVybiB7IHR4SGV4OiBCdWZmZXIuZnJvbShwc2J0LnNlcmlhbGl6ZSgpKS50b1N0cmluZygnaGV4JykgfTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCB0eCA9IGNvaW4uZGVjb2RlVHJhbnNhY3Rpb25Gcm9tUHJlYnVpbGQocGFyYW1zLnR4UHJlYnVpbGQpO1xuXG4gICAgY29uc3Qgc2lnbmVkVHggPSBhd2FpdCBmaXhlZFNjcmlwdC5zaWduVHJhbnNhY3Rpb24oY29pbiwgdHgsIGdldFNpZ25lcktleWNoYWluKHBhcmFtcy5wcnYpLCBjb2luLndhc21OYW1lLCB7XG4gICAgICB3YWxsZXRJZDogcGFyYW1zLnR4UHJlYnVpbGQud2FsbGV0SWQsXG4gICAgICB0eEluZm86IHBhcmFtcy50eFByZWJ1aWxkLnR4SW5mbyxcbiAgICAgIGlzTGFzdFNpZ25hdHVyZTogcGFyYW1zLmlzTGFzdFNpZ25hdHVyZSA/PyBmYWxzZSxcbiAgICAgIHNpZ25pbmdTdGVwOiBwYXJhbXMuc2lnbmluZ1N0ZXAsXG4gICAgICBwdWJzOiBwYXJhbXMucHVicyxcbiAgICAgIGNvc2lnbmVyUHViOiBwYXJhbXMuY29zaWduZXJQdWIsXG4gICAgICBleHRyYWN0VHJhbnNhY3Rpb246IHBhcmFtcy5leHRyYWN0VHJhbnNhY3Rpb24sXG4gICAgICB3cml0ZVNpZ25lZFdpdGg6IHBhcmFtcy53cml0ZVNpZ25lZFdpdGgsXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdG9TaWduVHJhbnNhY3Rpb25SZXN1bHQoc2lnbmVkVHgsIHBhcmFtcyk7XG4gIH1cbn1cbiJdfQ==
@@ -326,4 +326,145 @@ describe('Zec getExtraPrebuildParams (unifiedRecipientPreference forwarding)', f
326
326
  assert.strictEqual(result.txFormat, 'psbt-lite');
327
327
  });
328
328
  });
329
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hpZWxkZWRQcmVidWlsZEFuZFNpZ24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZXN0L3VuaXQvaW1wbC96ZWMvc2hpZWxkZWRQcmVidWlsZEFuZFNpZ24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwrQ0FBaUM7QUFFakMsNkNBQStCO0FBQy9CLDZCQUE4QjtBQUM5Qiw4Q0FBc0U7QUFDdEUsOENBQTBDO0FBQzFDLGdEQUFxRDtBQUVyRCxxQ0FBd0U7QUFDeEUsb0RBQWdFO0FBSWhFLHVGQUF1RjtBQUN2RixNQUFNLGVBQWUsR0FDbkIsMk5BQTJOLENBQUM7QUFDOU4sTUFBTSwyQkFBMkIsR0FBRyxxQ0FBcUMsQ0FBQztBQUUxRTs7Ozs7O0dBTUc7QUFDSCxNQUFNLGlCQUFpQixHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQ25DLHdGQUF3RixFQUN4RixLQUFLLENBQ04sQ0FBQztBQUNGLElBQUksY0FBc0IsQ0FBQztBQUMzQixJQUFJLFVBQTRDLENBQUM7QUFFakQsTUFBTSxDQUFDO0lBQ0wsY0FBYyxHQUFHLDZCQUFpQixDQUFDLG1CQUFtQixDQUFDLHFCQUFxQixDQUMxRSxJQUFJLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxFQUNqQyxNQUFNLENBQ1AsQ0FBQztJQUNGLFVBQVUsR0FBRyxJQUFBLG9DQUF3QixHQUFFLENBQUMsVUFBVSxDQUFDO0FBQ3JELENBQUMsQ0FBQyxDQUFDO0FBRUgsU0FBUywwQkFBMEI7SUFDakMsTUFBTSxJQUFJLEdBQUcsNkJBQWlCLENBQUMsc0JBQXNCLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUNoSCxJQUFJLENBQUMsY0FBYyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEVB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QUFXLENBQUMsQ0FBQztJQUNuRCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5cbmltcG9ydCAqIGFzIHNpbm9uIGZyb20gJ3Npbm9uJztcbmltcG9ydCBub2NrID0gcmVxdWlyZSgnbm9jaycpO1xuaW1wb3J0IHsgY29tbW9uLCBWZXJpZmljYXRpb25PcHRpb25zLCBXYWxsZXQgfSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuaW1wb3J0IHsgZ2V0U2VlZCB9IGZyb20gJ0BiaXRnby9zZGstdGVzdCc7XG5pbXBvcnQgeyBmaXhlZFNjcmlwdFdhbGxldCB9IGZyb20gJ0BiaXRnby93YXNtLXV0eG8nO1xuXG5pbXBvcnQgeyBkZWZhdWx0Qml0R28sIGdldFV0eG9Db2luLCBrZXljaGFpbnNCYXNlNTggfSBmcm9tICcuLi8uLi91dGlsJztcbmltcG9ydCB7IGdldERlZmF1bHRXYXNtV2FsbGV0S2V5cyB9IGZyb20gJy4uLy4uL3V0aWwva2V5Y2hhaW5zJztcbmltcG9ydCB0eXBlIHsgWmVjIH0gZnJvbSAnLi4vLi4vLi4vLi4vc3JjL2ltcGwvemVjJztcbmltcG9ydCB7IFV0eG9XYWxsZXQgfSBmcm9tICcuLi8uLi8uLi8uLi9zcmMvd2FsbGV0JztcblxuLy8gWklQLTMxNiB0ZXN0bmV0IHZlY3RvcnMgKHRlc3RuZXRXYWxsZXQgZnJvbSB0aGUgd2FzbS11dHhvIHVuaWZpZWRfYWRkcmVzcyBmaXh0dXJlcykuXG5jb25zdCBURVNUTkVUX1VOSUZJRUQgPVxuICAndXRlc3QxdzVtMHFjbnA4ZWdsOHFhMjk2bjcwbjhudmowdHFuems5MHA3ZjQ4djdtamhoZHJkcXM4dmdxeWRzbGc1cGxtemVmYXdlZm5wbWdtbG02aGN5MzhtOTcyZXJ3eHMwNHMwMmNxMnByaGd1ejhrcWx5NzVtNnpqeTU2bTA4ZDVqbnljZ3RwcXRqZXBydGU1NzZna21yeHlzemVwZ3g3Nnl6dXdoaDdtNGxmejlqYXE3dW5qazB4NWFudDQ2anV4ejczaHNjNnE0djNkcXR6d3cwMHZwcyc7XG5jb25zdCBURVNUTkVUX1RSQU5TUEFSRU5UX0FERFJFU1MgPSAndG1NNER2TFZKS1hadDV5ZG4xdHFZVEh2YWhwS1N3Z2p1UmsnO1xuXG4vKipcbiAqIEV4ZXJjaXNlcyBldmVyeSBjbGllbnQtc2lkZSBmbG93IHRoYXQgcnVucyBCRUZPUkUgdmVyaWZ5VHJhbnNhY3Rpb24vc2lnblRyYW5zYWN0aW9uIG9uIGFcbiAqIHNoaWVsZGVkICh2NiBJcm9ud29vZCkgcHJlYnVpbGQ6IHByZWJ1aWxkIHBvc3QtcHJvY2Vzc2luZywgZXhwbGFuYXRpb24sIGFuZCByZWNpcGllbnRcbiAqIHZhbGlkYXRpb24uIEVhY2ggb2YgdGhlbSBtdXN0IGRlY29kZSB0aGUgdjYgUFNCVCDigJQgdmlhIGBaZWMuZGVjb2RlVHJhbnNhY3Rpb25gIC0+XG4gKiBgWmNhc2hQc2J0LmZyb21CeXRlc2AsIHdoaWNoIGF1dG8tZGV0ZWN0cyB0aGUgdHJhbnNhY3Rpb24gdmVyc2lvbiDigJQgYW5kIGhhbmRsZSB0aGUgc2hpZWxkZWRcbiAqIHJlY2lwaWVudCB3aXRob3V0IGVycm9yLlxuICovXG5jb25zdCBJUk9OV09PRF9SRUNFSVZFUiA9IEJ1ZmZlci5mcm9tKFxuICAnZDYzMmMyOGFhMDgzMWQ2NzFiZTE3NzA5YTQyYzk2MjdlMmViNjg3YTFiMmE1NTc2OGVhNDcwYzliYWU3NDk5Y2QwYmQzZDBlYjA0ODRlMzA3MjM2YjUnLFxuICAnaGV4J1xuKTtcbmxldCB1bmlmaWVkQWRkcmVzczogc3RyaW5nO1xubGV0IHdhbGxldEtleXM6IGZpeGVkU2NyaXB0V2FsbGV0LlJvb3RXYWxsZXRLZXlzO1xuXG5iZWZvcmUoZnVuY3Rpb24gKCkge1xuICB1bmlmaWVkQWRkcmVzcyA9IGZpeGVkU2NyaXB0V2FsbGV0LlpjYXNoVW5pZmllZEFkZHJlc3MuZW5jb2RlT3JjaGFyZFJlY2VpdmVyKFxuICAgIG5ldyBVaW50OEFycmF5KElST05XT09EX1JFQ0VJVkVSKSxcbiAgICAndHplYydcbiAgKTtcbiAgd2FsbGV0S2V5cyA9IGdldERlZmF1bHRXYXNtV2FsbGV0S2V5cygpLndhbGxldEtleXM7XG59KTtcblxuZnVuY3Rpb24gYnVpbGRTaGllbGRlZFY2UHJlYnVpbGRIZXgoKTogc3RyaW5nIHtcbiAgY29uc3QgcHNidCA9IGZpeGVkU2NyaXB0V2FsbGV0LlpjYXNoSXJvbndvb2RCaXRHb1BzYnQuY3JlYXRlRW1wdHkoJ3R6ZWMnLCB3YWxsZXRLZXlzLCB7IGJsb2NrSGVpZ2h0OiA0MjAwMDAwIH0pO1xuICBwc2J0LmFkZFdhbGxldElucHV0KHsgdHhpZDogJzExJy5yZXBlYXQoMzIpLCB2b3V0OiAwLCB2YWx1ZTogMTAwMDAwbiB9LCB3YWxsZXRLZXlzLCB7XG4gICAgc2NyaXB0SWQ6IHsgY2hhaW46IDAsIGluZGV4OiAwIH0sXG4gIH0pO1xuICBwc2J0LmFkZFdhbGxldE91dHB1dCh3YWxsZXRLZXlzLCB7IGNoYWluOiAxLCBpbmRleDogMCwgdmFsdWU6IDkwMDAwbiB9KTtcbiAgcHNidC5hZGRTaGllbGRlZE91dHB1dHMoXG4gICAgW3sgcmVjaXBpZW50OiBuZXcgVWludDhBcnJheShJUk9OV09PRF9SRUNFSVZFUiksIGFtb3VudDogNTAwMG4sIHVuaWZpZWRBZGRyZXNzIH1dLFxuICAgIG5ldyBVaW50OEFycmF5KDMyKVxuICApO1xuICByZXR1cm4gQnVmZmVyLmZyb20ocHNidC5zZXJpYWxpemUoKSkudG9TdHJpbmcoJ2hleCcpO1xufVxuXG5mdW5jdGlvbiBtdXRhdGVTZXJpYWxpemVkVW5pZmllZEFkZHJlc3MocHNidEhleDogc3RyaW5nLCB1bmlmaWVkQWRkcmVzczogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgYnl0ZXMgPSBCdWZmZXIuZnJvbShwc2J0SGV4LCAnaGV4Jyk7XG4gIGNvbnN0IG1ldGFkYXRhID0gQnVmZmVyLmZyb20odW5pZmllZEFkZHJlc3MsICd1dGY4Jyk7XG4gIGNvbnN0IG9mZnNldCA9IGJ5dGVzLmluZGV4T2YobWV0YWRhdGEpO1xuICBhc3NlcnQubm90U3RyaWN0RXF1YWwob2Zmc2V0LCAtMSwgJ1VuaWZpZWQgQWRkcmVzcyBtZXRhZGF0YSBtdXN0IGJlIHByZXNlbnQgaW4gdGhlIHNlcmlhbGl6ZWQgUFNCVCcpO1xuICAvLyBDaGFuZ2Ugb25seSB0aGUgbWV0YWRhdGEgYnl0ZXMuIFRoZSByZXN1bHRpbmcgYWRkcmVzcyBpcyBpbnRlbnRpb25hbGx5IGludmFsaWQsIHdoaWNoXG4gIC8vIHZlcmlmaWVzIHRoYXQgZGVzZXJpYWxpemF0aW9uIGRvZXMgbm90IGV4cG9zZSBhdHRhY2tlci1jb250cm9sbGVkIHByb3ByaWV0YXJ5IG1ldGFkYXRhLlxuICBieXRlc1tvZmZzZXRdID0gYnl0ZXNbb2Zmc2V0XSA9PT0gMHg3NSA/IDB4NzYgOiAweDc1O1xuICByZXR1cm4gYnl0ZXMudG9TdHJpbmcoJ2hleCcpO1xufVxuZGVzY3JpYmUoJ1plYyBzaGllbGRlZCBwcmUtdmVyaWZ5IGZsb3dzICh2NiBJcm9ud29vZCBQU0JUKScsIGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgemVjID0gZ2V0VXR4b0NvaW4oJ3R6ZWMnKTtcbiAgY29uc3QgYmdVcmwgPSBjb21tb24uRW52aXJvbm1lbnRzW2RlZmF1bHRCaXRHby5nZXRFbnYoKV0udXJpO1xuXG4gIGNvbnN0IGtleURvY3VtZW50T2JqZWN0cyA9IGtleWNoYWluc0Jhc2U1OC5tYXAoKGtleWNoYWluLCBrZXlJZHgpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IGdldFNlZWQoa2V5Y2hhaW4ucHViKS50b1N0cmluZygnaGV4JyksXG4gICAgICBwdWI6IGtleWNoYWluLnB1YixcbiAgICAgIHNvdXJjZTogWyd1c2VyJywgJ2JhY2t1cCcsICdiaXRnbyddW2tleUlkeF0sXG4gICAgICBjb2luU3BlY2lmaWM6IHt9LFxuICAgIH07XG4gIH0pO1xuXG4gIGFmdGVyRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgbm9jay5jbGVhbkFsbCgpO1xuICB9KTtcblxuICBpdCgnc2VuZE1hbnkgcmVjaXBpZW50IHZhbGlkYXRpb24gYWNjZXB0cyB0aGUgdW5pZmllZCBhZGRyZXNzJywgZnVuY3Rpb24gKCkge1xuICAgIHplYy5jaGVja1JlY2lwaWVudCh7IGFkZHJlc3M6IHVuaWZpZWRBZGRyZXNzLCBhbW91bnQ6ICc1MDAwJyB9KTtcbiAgfSk7XG5cbiAgaXQoJ3Bvc3RQcm9jZXNzUHJlYnVpbGQgZGVjb2RlcyB0aGUgdjYgcHNidCBhbmQgcmUtZW5jb2RlcyBpdCB1bmNoYW5nZWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgcHJlYnVpbGRIZXggPSBidWlsZFNoaWVsZGVkVjZQcmVidWlsZEhleCgpO1xuICAgIG5vY2soYmdVcmwpLmdldCgnL2FwaS92Mi90emVjL3B1YmxpYy9ibG9jay9sYXRlc3QnKS5yZXBseSgyMDAsIHsgaGVpZ2h0OiA0MjAwMDAwIH0pO1xuICAgIGNvbnN0IHByZWJ1aWxkID0gYXdhaXQgemVjLnBvc3RQcm9jZXNzUHJlYnVpbGQoeyB0eEhleDogcHJlYnVpbGRIZXgsIHR4SW5mbzoge30gfSk7XG4gICAgYXNzZXJ0Lm1hdGNoKHByZWJ1aWxkLnR4SGV4IGFzIHN0cmluZywgL143MDczNjI3NC8pOyAvLyBQU0JUIG1hZ2ljIHByZXNlcnZlZFxuICAgIGNvbnN0IGRlY29kZWQgPSB6ZWMuZGVjb2RlVHJhbnNhY3Rpb24ocHJlYnVpbGQudHhIZXggYXMgc3RyaW5nKTtcbiAgICBhc3NlcnQub2soZGVjb2RlZCBpbnN0YW5jZW9mIGZpeGVkU2NyaXB0V2FsbGV0LlpjYXNoSXJvbndvb2RCaXRHb1BzYnQpO1xuICB9KTtcblxuICBpdCgnZXhwbGFpblRyYW5zYWN0aW9uIGRlY29kZXMgdGhlIHY2IHBzYnQgYW5kIHJlc29sdmVzIHRoZSBzaGllbGRlZCByZWNpcGllbnQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgZXhwbGFpbmVkID0gYXdhaXQgemVjLmV4cGxhaW5UcmFuc2FjdGlvbih7XG4gICAgICB0eEhleDogYnVpbGRTaGllbGRlZFY2UHJlYnVpbGRIZXgoKSxcbiAgICAgIHB1YnM6IFtrZXlEb2N1bWVudE9iamVjdHNbMF0ucHViLCBrZXlEb2N1bWVudE9iamVjdHNbMV0ucHViLCBrZXlEb2N1bWVudE9iamVjdHNbMl0ucHViXSxcbiAgICB9KTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZXhwbGFpbmVkLm91dHB1dHMubGVuZ3RoLCAxKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZXhwbGFpbmVkLm91dHB1dHNbMF0uYWRkcmVzcywgdW5pZmllZEFkZHJlc3MpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChleHBsYWluZWQub3V0cHV0c1swXS5hbW91bnQudG9TdHJpbmcoKSwgJzUwMDAnKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZXhwbGFpbmVkLmNoYW5nZU91dHB1dHMubGVuZ3RoLCAxKTtcbiAgfSk7XG5cbiAgaXQoJ3JlamVjdHMgYSB2NiBQU0JUIHdob3NlIHByZXNlcnZlZCBVQSBtZXRhZGF0YSB3YXMgbXV0YXRlZCBhZnRlciBzZXJpYWxpemF0aW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IG11dGF0ZWRIZXggPSBtdXRhdGVTZXJpYWxpemVkVW5pZmllZEFkZHJlc3MoYnVpbGRTaGllbGRlZFY2UHJlYnVpbGRIZXgoKSwgdW5pZmllZEFkZHJlc3MpO1xuICAgIGF3YWl0IGFzc2VydC5yZWplY3RzKFxuICAgICAgemVjLmV4cGxhaW5UcmFuc2FjdGlvbih7XG4gICAgICAgIHR4SGV4OiBtdXRhdGVkSGV4LFxuICAgICAgICBwdWJzOiBba2V5RG9jdW1lbnRPYmplY3RzWzBdLnB1Yiwga2V5RG9jdW1lbnRPYmplY3RzWzFdLnB1Yiwga2V5RG9jdW1lbnRPYmplY3RzWzJdLnB1Yl0sXG4gICAgICB9KSxcbiAgICAgIC9kb2VzIG5vdCBtYXRjaCBpdHMgcmF3IHNjcmlwdC9cbiAgICApO1xuICB9KTtcbn0pO1xuXG4vKipcbiAqIGBwYXJzZVRyYW5zYWN0aW9uYCBtdXN0IHRha2UgYHVuaWZpZWRSZWNpcGllbnRQcmVmZXJlbmNlYCBpbnRvIGFjY291bnQgd2hlbiBkZWNvZGluZyBhXG4gKiBwcmVidWlsZDogYSBzaGllbGRlZCByZWNpcGllbnQgcmVzb2x2ZXMgdG8gaXRzIDQzLWJ5dGUgT3JjaGFyZCByZWNlaXZlciwgd2hpY2ggb25seSBtYXRjaGVzXG4gKiB0aGUgUFNCVCdzIHNoaWVsZGVkIG91dHB1dCB3aGVuIHRoZSBkZWNvZGUgdXNlcyB0aGUgJ3NoaWVsZGVkJyBwcmVmZXJlbmNlLiBUaGUgcHJlZmVyZW5jZSBpc1xuICogdGhlIGNhbGxlcidzIGV4cGxpY2l0IGB1bmlmaWVkUmVjaXBpZW50UHJlZmVyZW5jZWAsIG9yIOKAlCB3aGVuIGFic2VudCDigJQgaW5mZXJyZWQgZnJvbSB0aGVcbiAqIHJlY2lwaWVudHMgdGhlbXNlbHZlcy5cbiAqL1xuZGVzY3JpYmUoJ1plYyBwYXJzZVRyYW5zYWN0aW9uIHVuaWZpZWRSZWNpcGllbnRQcmVmZXJlbmNlICh2NiBJcm9ud29vZCBQU0JUKScsIGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgdHplYyA9IGdldFV0eG9Db2luKCd0emVjJyk7XG5cbiAgZnVuY3Rpb24gZ2V0TW9ja1dhbGxldCgpOiBVdHhvV2FsbGV0IHtcbiAgICBjb25zdCBtb2NrV2FsbGV0ID0gc2lub24uY3JlYXRlU3R1Ykluc3RhbmNlKFdhbGxldCk7XG4gICAgbW9ja1dhbGxldC5pZC5yZXR1cm5zKCd0ZXN0LXdhbGxldC1pZCcpO1xuICAgIG1vY2tXYWxsZXQuY29pbi5yZXR1cm5zKCd0emVjJyk7XG4gICAgbW9ja1dhbGxldC5jb2luU3BlY2lmaWMucmV0dXJucyh1bmRlZmluZWQpO1xuICAgIHJldHVybiBtb2NrV2FsbGV0IGFzIHVua25vd24gYXMgVXR4b1dhbGxldDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFZlcmlmaWNhdGlvbigpOiBWZXJpZmljYXRpb25PcHRpb25zIHtcbiAgICBjb25zdCBwdWJzID0ga2V5Y2hhaW5zQmFzZTU4Lm1hcCgoaykgPT4gay5wdWIpO1xuICAgIHJldHVybiB7XG4gICAgICBkaXNhYmxlTmV0d29ya2luZzogdHJ1ZSxcbiAgICAgIGtleWNoYWluczoge1xuICAgICAgICB1c2VyOiB7IGlkOiAnMCcsIHB1YjogcHVic1swXSwgdHlwZTogJ2luZGVwZW5kZW50JyB9LFxuICAgICAgICBiYWNrdXA6IHsgaWQ6ICcxJywgcHViOiBwdWJzWzFdLCB0eXBlOiAnaW5kZXBlbmRlbnQnIH0sXG4gICAgICAgIGJpdGdvOiB7IGlkOiAnMicsIHB1YjogcHVic1syXSwgdHlwZTogJ2luZGVwZW5kZW50JyB9LFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gcGFyc2VTaGllbGRlZFY2UHJlYnVpbGQoXG4gICAgdHhQYXJhbXM6IHtcbiAgICAgIHJlY2lwaWVudHM6IHsgYWRkcmVzczogc3RyaW5nOyBhbW91bnQ6IHN0cmluZyB9W107XG4gICAgICB1bmlmaWVkUmVjaXBpZW50UHJlZmVyZW5jZT86ICdzaGllbGRlZCcgfCAndHJhbnNwYXJlbnQnO1xuICAgIH0sXG4gICAgdHhIZXggPSBidWlsZFNoaWVsZGVkVjZQcmVidWlsZEhleCgpXG4gICkge1xuICAgIHJldHVybiB0emVjLnBhcnNlVHJhbnNhY3Rpb24oe1xuICAgICAgd2FsbGV0OiBnZXRNb2NrV2FsbGV0KCksXG4gICAgICB0eFBhcmFtcyxcbiAgICAgIHR4UHJlYnVpbGQ6IHsgdHhIZXggfSxcbiAgICAgIHZlcmlmaWNhdGlvbjogZ2V0VmVyaWZpY2F0aW9uKCksXG4gICAgfSk7XG4gIH1cblxuICBpdCgnaW5mZXJzIHRoZSBzaGllbGRlZCBwcmVmZXJlbmNlIGZyb20gYW4gT3JjaGFyZC1vbmx5IFVuaWZpZWQgQWRkcmVzcyByZWNpcGllbnQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgcGFyc2VkID0gYXdhaXQgcGFyc2VTaGllbGRlZFY2UHJlYnVpbGQoe1xuICAgICAgcmVjaXBpZW50czogW3sgYWRkcmVzczogdW5pZmllZEFkZHJlc3MsIGFtb3VudDogJzUwMDAnIH1dLFxuICAgIH0pO1xuICAgIGNvbnN0IGV4dGVybmFsT3V0cHV0cyA9IHBhcnNlZC5vdXRwdXRzLmZpbHRlcigobykgPT4gby5leHRlcm5hbCk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGV4dGVybmFsT3V0cHV0cy5sZW5ndGgsIDEpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChleHRlcm5hbE91dHB1dHNbMF0uYWRkcmVzcywgdW5pZmllZEFkZHJlc3MpO1xuICB9KTtcbiAgaXQoJ3JlamVjdHMgYSB2NiBQU0JUIHdpdGggbXV0YXRlZCBVQSBtZXRhZGF0YSBkdXJpbmcgcGFyc2VUcmFuc2FjdGlvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBtdXRhdGVkSGV4ID0gbXV0YXRlU2VyaWFsaXplZFVuaWZpZWRBZGRyZXNzKGJ1aWxkU2hpZWxkZWRWNlByZWJ1aWxkSGV4KCksIHVuaWZpZWRBZGRyZXNzKTtcbiAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhcbiAgICAgIHBhcnNlU2hpZWxkZWRWNlByZWJ1aWxkKHsgcmVjaXBpZW50czogW3sgYWRkcmVzczogdW5pZmllZEFkZHJlc3MsIGFtb3VudDogJzUwMDAnIH1dIH0sIG11dGF0ZWRIZXgpLFxuICAgICAgL2RvZXMgbm90IG1hdGNoIGl0cyByYXcgc2NyaXB0L1xuICAgICk7XG4gIH0pO1xuICBpdCgnaG9ub3JzIGFuIGV4cGxpY2l0IHNoaWVsZGVkIHByZWZlcmVuY2UnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgcGFyc2VkID0gYXdhaXQgcGFyc2VTaGllbGRlZFY2UHJlYnVpbGQoe1xuICAgICAgcmVjaXBpZW50czogW3sgYWRkcmVzczogdW5pZmllZEFkZHJlc3MsIGFtb3VudDogJzUwMDAnIH1dLFxuICAgICAgdW5pZmllZFJlY2lwaWVudFByZWZlcmVuY2U6ICdzaGllbGRlZCcsXG4gICAgfSk7XG4gICAgY29uc3QgZXh0ZXJuYWxPdXRwdXRzID0gcGFyc2VkLm91dHB1dHMuZmlsdGVyKChvKSA9PiBvLmV4dGVybmFsKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZXh0ZXJuYWxPdXRwdXRzLmxlbmd0aCwgMSk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGV4dGVybmFsT3V0cHV0c1swXS5hZGRyZXNzLCB1bmlmaWVkQWRkcmVzcyk7XG4gIH0pO1xuXG4gIGl0KCdyZWplY3RzIGEgdHJhbnNwYXJlbnQgcmVzb2x1dGlvbiBvZiBhIHNoaWVsZGVkIHJlY2lwaWVudCAoaW50ZW50IG1pc21hdGNoKScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAvLyBGb3JjaW5nIHRoZSAndHJhbnNwYXJlbnQnIHByZWZlcmVuY2UgcmVzb2x2ZXMgdGhlIHJlY2lwaWVudCdzIHNjcmlwdCDigJQgYnV0IGFuXG4gICAgLy8gT3JjaGFyZC1vbmx5IFVBIGhhcyBubyB0cmFuc3BhcmVudCByZWNlaXZlciwgc28gdGhlIGRlY29kZSBtdXN0IGZhaWwgcmF0aGVyIHRoYW5cbiAgICAvLyBzaWxlbnRseSBtaXNtYXRjaC5cbiAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhcbiAgICAgIHBhcnNlU2hpZWxkZWRWNlByZWJ1aWxkKHtcbiAgICAgICAgcmVjaXBpZW50czogW3sgYWRkcmVzczogdW5pZmllZEFkZHJlc3MsIGFtb3VudDogJzUwMDAnIH1dLFxuICAgICAgICB1bmlmaWVkUmVjaXBpZW50UHJlZmVyZW5jZTogJ3RyYW5zcGFyZW50JyxcbiAgICAgIH0pXG4gICAgKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoJ1plYyByZXNvbHZlUmVjaXBpZW50c0Zyb21Qc2J0IChkZWNvZGUgKyByZWNpcGllbnQgcmVzb2x1dGlvbiknLCBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IHR6ZWMgPSBnZXRVdHhvQ29pbigndHplYycpIGFzIFplYztcbiAgY29uc3QgeyB3YWxsZXRLZXlzIH0gPSBnZXREZWZhdWx0V2FzbVdhbGxldEtleXMoKTtcbiAgY29uc3QgSVJPTldPT0RfSEVJR0hUID0gNDIwMDAwMDsgLy8gYWZ0ZXIgdGhlIE5VNi4zIHRlc3RuZXQgYWN0aXZhdGlvbiAoNDEzNDAwMClcblxuICBmdW5jdGlvbiBidWlsZFNoaWVsZGVkVjZQc2J0KFxuICAgIHVuaWZpZWRBZGRyZXNzID0gZml4ZWRTY3JpcHRXYWxsZXQuWmNhc2hVbmlmaWVkQWRkcmVzcy5lbmNvZGVPcmNoYXJkUmVjZWl2ZXIoXG4gICAgICBuZXcgVWludDhBcnJheShJUk9OV09PRF9SRUNFSVZFUiksXG4gICAgICAndHplYydcbiAgICApXG4gICk6IGZpeGVkU2NyaXB0V2FsbGV0LlpjYXNoSXJvbndvb2RCaXRHb1BzYnQge1xuICAgIGNvbnN0IHBzYnQgPSBmaXhlZFNjcmlwdFdhbGxldC5aY2FzaElyb253b29kQml0R29Qc2J0LmNyZWF0ZUVtcHR5KCd0emVjJywgd2FsbGV0S2V5cywge1xuICAgICAgYmxvY2tIZWlnaHQ6IElST05XT09EX0hFSUdIVCxcbiAgICB9KTtcbiAgICBwc2J0LmFkZFdhbGxldElucHV0KHsgdHhpZDogJzExJy5yZXBlYXQoMzIpLCB2b3V0OiAwLCB2YWx1ZTogMTAwMDAwbiB9LCB3YWxsZXRLZXlzLCB7XG4gICAgICBzY3JpcHRJZDogeyBjaGFpbjogMCwgaW5kZXg6IDAgfSxcbiAgICB9KTtcbiAgICBwc2J0LmFkZFdhbGxldE91dHB1dCh3YWxsZXRLZXlzLCB7IGNoYWluOiAxLCBpbmRleDogMCwgdmFsdWU6IDkwMDAwbiB9KTtcbiAgICBwc2J0LmFkZFNoaWVsZGVkT3V0cHV0cyhcbiAgICAgIFt7IHJlY2lwaWVudDogbmV3IFVpbnQ4QXJyYXkoSVJPTldPT0RfUkVDRUlWRVIpLCBhbW91bnQ6IDUwMDBuLCB1bmlmaWVkQWRkcmVzcyB9XSxcbiAgICAgIG5ldyBVaW50OEFycmF5KDMyKSAvLyBhbGwtemVybyBhbmNob3IsIGFzIGluIHRoZSB1dHhvLWNvcmUgc2hpZWxkZWQgYnVpbGQgdGVzdHNcbiAgICApO1xuICAgIHJldHVybiBwc2J0O1xuICB9XG5cbiAgZnVuY3Rpb24gYnVpbGRUcmFuc3BhcmVudFY0UHNidCh1bmlmaWVkQWRkcmVzcz86IHN0cmluZyk6IGZpeGVkU2NyaXB0V2FsbGV0LlpjYXNoQml0R29Qc2J0IHtcbiAgICBjb25zdCBwc2J0ID0gZml4ZWRTY3JpcHRXYWxsZXQuWmNhc2hCaXRHb1BzYnQuY3JlYXRlRW1wdHkoJ3R6ZWMnLCB3YWxsZXRLZXlzLCB7IGJsb2NrSGVpZ2h0OiAzMTQ2NDAwIH0pO1xuICAgIHBzYnQuYWRkV2FsbGV0SW5wdXQoeyB0eGlkOiAnMjInLnJlcGVhdCgzMiksIHZvdXQ6IDAsIHZhbHVlOiAyMDAwMDBuIH0sIHdhbGxldEtleXMsIHtcbiAgICAgIHNjcmlwdElkOiB7IGNoYWluOiAwLCBpbmRleDogMSB9LFxuICAgIH0pO1xuICAgIHBzYnQuYWRkV2FsbGV0T3V0cHV0KHdhbGxldEtleXMsIHsgY2hhaW46IDEsIGluZGV4OiAwLCB2YWx1ZTogMTAwMDAwbiB9KTtcbiAgICBjb25zdCBleHRlcm5hbFNjcmlwdCA9IHR6ZWMuYWRkcmVzc0NvZGVjLmRlY29kZShURVNUTkVUX1RSQU5TUEFSRU5UX0FERFJFU1MpO1xuICAgIHBzYnQuYWRkVHJhbnNwYXJlbnRPdXRwdXQoZXh0ZXJuYWxTY3JpcHQsIDEyMzQ1biwgdW5pZmllZEFkZHJlc3MpO1xuICAgIHJldHVybiBwc2J0O1xuICB9XG5cbiAgLyoqIERlY29kZSBhIFVBIGJhY2sgdG8gaXRzIHJlY2VpdmVycyBhbmQgYXNzZXJ0IHRoZXkgbWF0Y2ggdGhlIHRlc3RuZXQgZml4dHVyZS4gKi9cbiAgZnVuY3Rpb24gYXNzZXJ0RGVjb2Rlc0JhY2tUb0ZpeHR1cmVSZWNpcGllbnRzKHVuaWZpZWRBZGRyZXNzOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBwYXJzZWQgPSBmaXhlZFNjcmlwdFdhbGxldC5aY2FzaFVuaWZpZWRBZGRyZXNzLnBhcnNlKHVuaWZpZWRBZGRyZXNzLCAndHplYycpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChwYXJzZWQuaGFzT3JjaGFyZFJlY2VpdmVyLCB0cnVlKTtcbiAgICBhc3NlcnQub2socGFyc2VkLm9yY2hhcmRSZWNlaXZlcik7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKEJ1ZmZlci5mcm9tKHBhcnNlZC5vcmNoYXJkUmVjZWl2ZXIpLnRvU3RyaW5nKCdoZXgnKSwgSVJPTldPT0RfUkVDRUlWRVIudG9TdHJpbmcoJ2hleCcpKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwocGFyc2VkLmhhc1RyYW5zcGFyZW50UmVjZWl2ZXIsIHRydWUpO1xuICAgIGFzc2VydC5vayhwYXJzZWQudHJhbnNwYXJlbnRTY3JpcHQpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChcbiAgICAgIEJ1ZmZlci5mcm9tKHBhcnNlZC50cmFuc3BhcmVudFNjcmlwdCkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgQnVmZmVyLmZyb20odHplYy5hZGRyZXNzQ29kZWMuZGVjb2RlKFRFU1RORVRfVFJBTlNQQVJFTlRfQUREUkVTUykpLnRvU3RyaW5nKCdoZXgnKVxuICAgICk7XG4gIH1cbiAgaXQoJ3JlamVjdHMgYSB2NCBQU0JUIHdob3NlIHByZXNlcnZlZCBVQSBtZXRhZGF0YSB3YXMgbXV0YXRlZCBhZnRlciBzZXJpYWxpemF0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IG11dGF0ZWRIZXggPSBtdXRhdGVTZXJpYWxpemVkVW5pZmllZEFkZHJlc3MoXG4gICAgICBCdWZmZXIuZnJvbShidWlsZFRyYW5zcGFyZW50VjRQc2J0KFRFU1RORVRfVU5JRklFRCkuc2VyaWFsaXplKCkpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgIFRFU1RORVRfVU5JRklFRFxuICAgICk7XG4gICAgYXNzZXJ0LnRocm93cygoKSA9PiB0emVjLnJlc29sdmVSZWNpcGllbnRzRnJvbVBzYnQobXV0YXRlZEhleCwgd2FsbGV0S2V5cyksIC9kb2VzIG5vdCBtYXRjaCBpdHMgcmF3IHJlY2lwaWVudC8pO1xuICB9KTtcblxuICBpdCgnZXhwbGFpblRyYW5zYWN0aW9uIHJlamVjdHMgYSB2NCBQU0JUIHdob3NlIHByZXNlcnZlZCBVQSBtZXRhZGF0YSB3YXMgbXV0YXRlZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBtdXRhdGVkSGV4ID0gbXV0YXRlU2VyaWFsaXplZFVuaWZpZWRBZGRyZXNzKFxuICAgICAgQnVmZmVyLmZyb20oYnVpbGRUcmFuc3BhcmVudFY0UHNidChURVNUTkVUX1VOSUZJRUQpLnNlcmlhbGl6ZSgpKS50b1N0cmluZygnaGV4JyksXG4gICAgICBURVNUTkVUX1VOSUZJRURcbiAgICApO1xuICAgIGF3YWl0IGFzc2VydC5yZWplY3RzKFxuICAgICAgdHplYy5leHBsYWluVHJhbnNhY3Rpb24oe1xuICAgICAgICB0eEhleDogbXV0YXRlZEhleCxcbiAgICAgICAgcHViczoga2V5Y2hhaW5zQmFzZTU4Lm1hcCgoa2V5Y2hhaW4pID0+IGtleWNoYWluLnB1YikgYXMgW3N0cmluZywgc3RyaW5nLCBzdHJpbmddLFxuICAgICAgfSksXG4gICAgICAvZG9lcyBub3QgbWF0Y2ggaXRzIHJhdyBzY3JpcHQvXG4gICAgKTtcbiAgfSk7XG4gIGl0KCdyZXNvbHZlcyBhIHNoaWVsZGVkIHY2IChJcm9ud29vZCkgb3V0cHV0IHRvIGl0cyBPcmNoYXJkIFVuaWZpZWQgQWRkcmVzcyByZWNpcGllbnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgcmVjaXBpZW50cyA9IHR6ZWMucmVzb2x2ZVJlY2lwaWVudHNGcm9tUHNidChCdWZmZXIuZnJvbShidWlsZFNoaWVsZGVkVjZQc2J0KCkuc2VyaWFsaXplKCkpLCB3YWxsZXRLZXlzKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVjaXBpZW50cy5sZW5ndGgsIDEpO1xuICAgIGNvbnN0IHJlY2lwaWVudCA9IHJlY2lwaWVudHNbMF07XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlY2lwaWVudC5kZXN0aW5hdGlvbi5raW5kLCAnemNhc2hTaGllbGRlZCcpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZWNpcGllbnQuYW1vdW50LCA1MDAwbik7XG4gICAgYXNzZXJ0Lm9rKHJlY2lwaWVudC5hZGRyZXNzLnN0YXJ0c1dpdGgoJ3V0ZXN0MScpKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVjaXBpZW50LmFkZHJlc3MsIHJlY2lwaWVudC5kZXN0aW5hdGlvbi51bmlmaWVkQWRkcmVzcyk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKEJ1ZmZlci5mcm9tKHJlY2lwaWVudC5zY3JpcHQpLnRvU3RyaW5nKCdoZXgnKSwgSVJPTldPT0RfUkVDRUlWRVIudG9TdHJpbmcoJ2hleCcpKTtcbiAgfSk7XG5cbiAgaXQoJ3JlamVjdHMgYSB2NiBQU0JUIHdob3NlIHByZXNlcnZlZCBVQSBtZXRhZGF0YSB3YXMgbXV0YXRlZCBhZnRlciBzZXJpYWxpemF0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IG11dGF0ZWRIZXggPSBtdXRhdGVTZXJpYWxpemVkVW5pZmllZEFkZHJlc3MoXG4gICAgICBCdWZmZXIuZnJvbShidWlsZFNoaWVsZGVkVjZQc2J0KFRFU1RORVRfVU5JRklFRCkuc2VyaWFsaXplKCkpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgIFRFU1RORVRfVU5JRklFRFxuICAgICk7XG4gICAgYXNzZXJ0LnRocm93cygoKSA9PiB0emVjLnJlc29sdmVSZWNpcGllbnRzRnJvbVBzYnQobXV0YXRlZEhleCwgd2FsbGV0S2V5cyksIC9kb2VzIG5vdCBtYXRjaCBpdHMgcmF3IHJlY2lwaWVudC8pO1xuICB9KTtcblxuICBpdCgnZXhwbGFpblRyYW5zYWN0aW9uIHJlamVjdHMgYSB2NiBQU0JUIHdob3NlIHByZXNlcnZlZCBVQSBtZXRhZGF0YSB3YXMgbXV0YXRlZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBtdXRhdGVkSGV4ID0gbXV0YXRlU2VyaWFsaXplZFVuaWZpZWRBZGRyZXNzKFxuICAgICAgQnVmZmVyLmZyb20oYnVpbGRTaGllbGRlZFY2UHNidChURVNUTkVUX1VOSUZJRUQpLnNlcmlhbGl6ZSgpKS50b1N0cmluZygnaGV4JyksXG4gICAgICBURVNUTkVUX1VOSUZJRURcbiAgICApO1xuICAgIGF3YWl0IGFzc2VydC5yZWplY3RzKFxuICAgICAgdHplYy5leHBsYWluVHJhbnNhY3Rpb24oe1xuICAgICAgICB0eEhleDogbXV0YXRlZEhleCxcbiAgICAgICAgcHViczoga2V5Y2hhaW5zQmFzZTU4Lm1hcCgoa2V5Y2hhaW4pID0+IGtleWNoYWluLnB1YikgYXMgW3N0cmluZywgc3RyaW5nLCBzdHJpbmddLFxuICAgICAgfSksXG4gICAgICAvZG9lcyBub3QgbWF0Y2ggaXRzIHJhdyBzY3JpcHQvXG4gICAgKTtcbiAgfSk7XG4gIGl0KCdyZXNvbHZlcyB0cmFuc3BhcmVudCBleHRlcm5hbCBvdXRwdXRzIGFuZCBleGNsdWRlcyBjaGFuZ2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgcmVjaXBpZW50cyA9IHR6ZWMucmVzb2x2ZVJlY2lwaWVudHNGcm9tUHNidChCdWZmZXIuZnJvbShidWlsZFRyYW5zcGFyZW50VjRQc2J0KCkuc2VyaWFsaXplKCkpLCB3YWxsZXRLZXlzKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVjaXBpZW50cy5sZW5ndGgsIDEpO1xuICAgIGNvbnN0IHJlY2lwaWVudCA9IHJlY2lwaWVudHNbMF07XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlY2lwaWVudC5kZXN0aW5hdGlvbi5raW5kLCAndHJhbnNwYXJlbnQnKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVjaXBpZW50LmFkZHJlc3MsIFRFU1RORVRfVFJBTlNQQVJFTlRfQUREUkVTUyk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlY2lwaWVudC5hbW91bnQsIDEyMzQ1bik7XG4gIH0pO1xuXG4gIGl0KCdyZXBvcnRzIHRoZSBvcmlnaW5hbCBtdWx0aS1yZWNlaXZlciBVQSBmb3IgYSBzaGllbGRlZCBvdXRwdXQgYW5kIGRlY29kZXMgaXQgYmFjaycsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCByZWNpcGllbnRzID0gdHplYy5yZXNvbHZlUmVjaXBpZW50c0Zyb21Qc2J0KFxuICAgICAgQnVmZmVyLmZyb20oYnVpbGRTaGllbGRlZFY2UHNidChURVNUTkVUX1VOSUZJRUQpLnNlcmlhbGl6ZSgpKSxcbiAgICAgIHdhbGxldEtleXNcbiAgICApO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZWNpcGllbnRzLmxlbmd0aCwgMSk7XG4gICAgY29uc3QgcmVjaXBpZW50ID0gcmVjaXBpZW50c1swXTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVjaXBpZW50LmRlc3RpbmF0aW9uLmtpbmQsICd6Y2FzaFNoaWVsZGVkJyk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlY2lwaWVudC5hZGRyZXNzLCBURVNUTkVUX1VOSUZJRUQpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZWNpcGllbnQudW5pZmllZEFkZHJlc3MsIFRFU1RORVRfVU5JRklFRCk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlY2lwaWVudC5kZXN0aW5hdGlvbi51bmlmaWVkQWRkcmVzcywgVEVTVE5FVF9VTklGSUVEKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoQnVmZmVyLmZyb20ocmVjaXBpZW50LnNjcmlwdCkudG9TdHJpbmcoJ2hleCcpLCBJUk9OV09PRF9SRUNFSVZFUi50b1N0cmluZygnaGV4JykpO1xuICAgIGFzc2VydERlY29kZXNCYWNrVG9GaXh0dXJlUmVjaXBpZW50cyhyZWNpcGllbnQudW5pZmllZEFkZHJlc3MgYXMgc3RyaW5nKTtcbiAgfSk7XG5cbiAgaXQoJ3JlcG9ydHMgdGhlIG9yaWdpbmFsIG11bHRpLXJlY2VpdmVyIFVBIGZvciBhIHRyYW5zcGFyZW50IHY0IG91dHB1dCBhbmQgZGVjb2RlcyBpdCBiYWNrJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHJlY2lwaWVudHMgPSB0emVjLnJlc29sdmVSZWNpcGllbnRzRnJvbVBzYnQoXG4gICAgICBCdWZmZXIuZnJvbShidWlsZFRyYW5zcGFyZW50VjRQc2J0KFRFU1RORVRfVU5JRklFRCkuc2VyaWFsaXplKCkpLFxuICAgICAgd2FsbGV0S2V5c1xuICAgICk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlY2lwaWVudHMubGVuZ3RoLCAxKTtcbiAgICBjb25zdCByZWNpcGllbnQgPSByZWNpcGllbnRzWzBdO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZWNpcGllbnQuZGVzdGluYXRpb24ua2luZCwgJ3pjYXNoVW5pZmllZFRyYW5zcGFyZW50Jyk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlY2lwaWVudC5hZGRyZXNzLCBURVNUTkVUX1VOSUZJRUQpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZWNpcGllbnQudW5pZmllZEFkZHJlc3MsIFRFU1RORVRfVU5JRklFRCk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlY2lwaWVudC5kZXN0aW5hdGlvbi51bmlmaWVkQWRkcmVzcywgVEVTVE5FVF9VTklGSUVEKTtcbiAgICBhc3NlcnREZWNvZGVzQmFja1RvRml4dHVyZVJlY2lwaWVudHMocmVjaXBpZW50LnVuaWZpZWRBZGRyZXNzIGFzIHN0cmluZyk7XG4gIH0pO1xuXG4gIGl0KCdyZXNvbHZlcyByZWNpcGllbnRzIGZyb20gYSBoZXggUFNCVCBzdHJpbmcnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgaGV4ID0gQnVmZmVyLmZyb20oYnVpbGRTaGllbGRlZFY2UHNidCgpLnNlcmlhbGl6ZSgpKS50b1N0cmluZygnaGV4Jyk7XG4gICAgY29uc3QgcmVjaXBpZW50cyA9IHR6ZWMucmVzb2x2ZVJlY2lwaWVudHNGcm9tUHNidChoZXgsIHdhbGxldEtleXMpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZWNpcGllbnRzLmxlbmd0aCwgMSk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlY2lwaWVudHNbMF0uZGVzdGluYXRpb24ua2luZCwgJ3pjYXNoU2hpZWxkZWQnKTtcbiAgfSk7XG5cbiAgaXQoJ3Rocm93cyBmb3IgYSBub24tWmNhc2ggUFNCVCcsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBwc2J0ID0gZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0LmNyZWF0ZUVtcHR5KCdidGMnLCB3YWxsZXRLZXlzLCB7fSk7XG4gICAgcHNidC5hZGRXYWxsZXRJbnB1dCh7IHR4aWQ6ICczMycucmVwZWF0KDMyKSwgdm91dDogMCwgdmFsdWU6IDEwMDBuIH0sIHdhbGxldEtleXMsIHtcbiAgICAgIHNjcmlwdElkOiB7IGNoYWluOiAwLCBpbmRleDogMCB9LFxuICAgIH0pO1xuICAgIC8vIFplYy5kZWNvZGVUcmFuc2FjdGlvbiBoYW5kcyB0aGUgYnRjIFBTQlQgdG8gWmNhc2hQc2J0LmZyb21CeXRlcywgd2hpY2ggcmVqZWN0cyBpdCBmb3JcbiAgICAvLyBpdHMgbWlzc2luZyBaY2FzaCBjb25zZW5zdXMgYnJhbmNoIElEIGJlZm9yZSB0aGUgWmNhc2gtdHlwZSBndWFyZCBpcyBldmVyIHJlYWNoZWQuXG4gICAgYXNzZXJ0LnRocm93cygoKSA9PiB0emVjLnJlc29sdmVSZWNpcGllbnRzRnJvbVBzYnQoQnVmZmVyLmZyb20ocHNidC5zZXJpYWxpemUoKSksIHdhbGxldEtleXMpKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoJ1plYyBnZXRFeHRyYVByZWJ1aWxkUGFyYW1zICh1bmlmaWVkUmVjaXBpZW50UHJlZmVyZW5jZSBmb3J3YXJkaW5nKScsIGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgemVjID0gZ2V0VXR4b0NvaW4oJ3plYycpO1xuXG4gIGZ1bmN0aW9uIG1vY2tXYWxsZXQoY29pbiA9IHplYyk6IFdhbGxldCB7XG4gICAgcmV0dXJuIG5ldyBXYWxsZXQoZGVmYXVsdEJpdEdvLCBjb2luLCB7IGlkOiAnNWIzNDI1MmYxYmYzNDk5MzBlMzQwMjBhJywgY29pbjogY29pbi5nZXRDaGFpbigpLCB0eXBlOiAnaG90JyB9KTtcbiAgfVxuXG4gIGl0KCdmb3J3YXJkcyB1bmlmaWVkUmVjaXBpZW50UHJlZmVyZW5jZSB3aGVuIHByZXNlbnQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3Qgd2FsbGV0ID0gbW9ja1dhbGxldCgpO1xuICAgIGNvbnN0IHJlc3VsdDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSBhd2FpdCB6ZWMuZ2V0RXh0cmFQcmVidWlsZFBhcmFtcyh7XG4gICAgICB3YWxsZXQsXG4gICAgICB1bmlmaWVkUmVjaXBpZW50UHJlZmVyZW5jZTogJ3NoaWVsZGVkJyxcbiAgICB9KTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0LnVuaWZpZWRSZWNpcGllbnRQcmVmZXJlbmNlLCAnc2hpZWxkZWQnKTtcbiAgfSk7XG5cbiAgaXQoJ2RvZXMgbm90IHNldCB1bmlmaWVkUmVjaXBpZW50UHJlZmVyZW5jZSB3aGVuIGFic2VudCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCB3YWxsZXQgPSBtb2NrV2FsbGV0KCk7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgemVjLmdldEV4dHJhUHJlYnVpbGRQYXJhbXMoeyB3YWxsZXQgfSk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKCd1bmlmaWVkUmVjaXBpZW50UHJlZmVyZW5jZScgaW4gcmVzdWx0LCBmYWxzZSk7XG4gIH0pO1xuXG4gIGl0KCdzdGlsbCByZXR1cm5zIHRoZSBzdGFuZGFyZCBleHRyYSBwcmVidWlsZCBwYXJhbXMgKHR4Rm9ybWF0KSB1bmNoYW5nZWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3Qgd2FsbGV0ID0gbW9ja1dhbGxldCgpO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHplYy5nZXRFeHRyYVByZWJ1aWxkUGFyYW1zKHtcbiAgICAgIHdhbGxldCxcbiAgICAgIHVuaWZpZWRSZWNpcGllbnRQcmVmZXJlbmNlOiAnc2hpZWxkZWQnLFxuICAgIH0pO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQudHhGb3JtYXQsICdwc2J0LWxpdGUnKTtcbiAgfSk7XG59KTtcbiJdfQ==
329
+ describe('Zec signTransaction (v6 Ironwood transparent-input signing)', function () {
330
+ const zec = (0, util_1.getUtxoCoin)('tzec');
331
+ const { xpubs } = (0, keychains_1.getDefaultWasmWalletKeys)();
332
+ const [userKeychain, backupKeychain, bitgoKeychain] = util_1.keychainsBase58;
333
+ const pubs = [userKeychain.pub, backupKeychain.pub, bitgoKeychain.pub];
334
+ it('signs the transparent inputs with the user key and finalizes the shielded out_ciphertext (ovk via ECDH)', async function () {
335
+ const signed = await zec.signTransaction({
336
+ txPrebuild: { txHex: buildShieldedV6PrebuildHex() },
337
+ prv: userKeychain.prv,
338
+ pubs,
339
+ });
340
+ assert.ok('txHex' in signed);
341
+ const { txHex } = signed;
342
+ // The half-signed result is the v6 PSBT with the user's ECDSA signatures over the
343
+ // ZIP-244 transparent sighash. Deriving the ovk (ECDH of the BitGo root pubkey and the
344
+ // user root key) and finalizing out_ciphertext happens inside sign(), before any
345
+ // sighash is computed — a failing ovk step aborts the whole round.
346
+ const psbt = zec.decodeTransaction(Buffer.from(txHex, 'hex'));
347
+ assert.ok(psbt instanceof wasm_utxo_1.fixedScriptWallet.ZcashIronwoodBitGoPsbt);
348
+ assert.strictEqual(psbt.verifySignature(0, xpubs[0]), true);
349
+ assert.strictEqual(psbt.verifySignature(0, xpubs[2]), false);
350
+ });
351
+ it('out_ciphertext survives the serialize round-trip: the BitGo countersigning round succeeds on it', async function () {
352
+ const userRound = await zec.signTransaction({
353
+ txPrebuild: { txHex: buildShieldedV6PrebuildHex() },
354
+ prv: userKeychain.prv,
355
+ pubs,
356
+ });
357
+ assert.ok('txHex' in userRound);
358
+ const bitgoRound = await zec.signTransaction({
359
+ txPrebuild: { txHex: userRound.txHex },
360
+ prv: bitgoKeychain.prv,
361
+ pubs,
362
+ });
363
+ assert.ok('txHex' in bitgoRound);
364
+ const psbt = zec.decodeTransaction(Buffer.from(bitgoRound.txHex, 'hex'));
365
+ assert.ok(psbt instanceof wasm_utxo_1.fixedScriptWallet.ZcashIronwoodBitGoPsbt);
366
+ // Fully signed transparent inputs: both the user and BitGo signatures verify against
367
+ // the v6 (ZIP-244) sighash — the proof service takes it from here via combineProof.
368
+ assert.strictEqual(psbt.verifySignature(0, xpubs[0]), true);
369
+ assert.strictEqual(psbt.verifySignature(0, xpubs[2]), true);
370
+ assert.strictEqual(psbt.verifySignature(0, xpubs[1]), false);
371
+ });
372
+ it('rejects a first signing round opened by a non-user key', async function () {
373
+ // The wasm derives the ovk from the first-round signer's key: a round opened by the
374
+ // backup or BitGo key would produce an out_ciphertext neither the user nor the server
375
+ // can re-derive, leaving the shielded output unrecoverable.
376
+ await assert.rejects(zec.signTransaction({
377
+ txPrebuild: { txHex: buildShieldedV6PrebuildHex() },
378
+ prv: bitgoKeychain.prv,
379
+ pubs,
380
+ }), /user/);
381
+ });
382
+ it('requires rootWalletKeys when signing an Ironwood PSBT', function () {
383
+ const psbt = wasm_utxo_1.fixedScriptWallet.ZcashIronwoodBitGoPsbt.fromBytes(Buffer.from(buildShieldedV6PrebuildHex(), 'hex'), 'tzec');
384
+ const { xprivs } = (0, keychains_1.getDefaultWasmWalletKeys)();
385
+ // Without rootWalletKeys the ovk step cannot run, so sign() throws at runtime rather
386
+ // than silently skipping it — the signing dispatch must always pass rootWalletKeys.
387
+ assert.throws(() => psbt.sign(xprivs[0]));
388
+ });
389
+ it('signs a v4 (Sapling-shaped) psbt through the generic signing path', async function () {
390
+ // The signTransaction override routes only v6 (Ironwood) prebuilds; a v4 prebuild must
391
+ // keep flowing through the generic path unchanged.
392
+ const psbt = wasm_utxo_1.fixedScriptWallet.ZcashBitGoPsbt.createEmpty('tzec', walletKeys, { blockHeight: 3146400 });
393
+ psbt.addWalletInput({ txid: '44'.repeat(32), vout: 0, value: 100000n }, walletKeys, {
394
+ scriptId: { chain: 0, index: 0 },
395
+ });
396
+ psbt.addWalletOutput(walletKeys, { chain: 1, index: 0, value: 90000n });
397
+ const signed = await zec.signTransaction({
398
+ txPrebuild: { txHex: Buffer.from(psbt.serialize()).toString('hex') },
399
+ prv: userKeychain.prv,
400
+ pubs,
401
+ });
402
+ assert.ok('txHex' in signed);
403
+ const decoded = zec.decodeTransaction(Buffer.from(signed.txHex, 'hex'));
404
+ assert.ok(decoded instanceof wasm_utxo_1.fixedScriptWallet.ZcashBitGoPsbt);
405
+ assert.ok(!(decoded instanceof wasm_utxo_1.fixedScriptWallet.ZcashIronwoodBitGoPsbt));
406
+ assert.strictEqual(decoded.verifySignature(0, xpubs[0]), true);
407
+ });
408
+ });
409
+ describe('Zec shielded out_ciphertext (ovk derivation)', function () {
410
+ const { xprivs } = (0, keychains_1.getDefaultWasmWalletKeys)();
411
+ function buildPsbt(buildOvk) {
412
+ const psbt = wasm_utxo_1.fixedScriptWallet.ZcashIronwoodBitGoPsbt.createEmpty('tzec', walletKeys, { blockHeight: 4200000 });
413
+ psbt.addWalletInput({ txid: '11'.repeat(32), vout: 0, value: 100000n }, walletKeys, {
414
+ scriptId: { chain: 0, index: 0 },
415
+ });
416
+ psbt.addWalletOutput(walletKeys, { chain: 1, index: 0, value: 90000n });
417
+ psbt.addShieldedOutputs([
418
+ {
419
+ recipient: new Uint8Array(IRONWOOD_RECEIVER),
420
+ amount: 5000n,
421
+ unifiedAddress,
422
+ ...(buildOvk ? { ovk: buildOvk } : {}),
423
+ },
424
+ ], new Uint8Array(32));
425
+ return psbt;
426
+ }
427
+ function pcztOf(psbt) {
428
+ const pczt = psbt.getPczt();
429
+ assert.ok(pczt, 'expected the orchard PCZT to be present');
430
+ return Buffer.from(pczt);
431
+ }
432
+ it('sign() finalizes out_ciphertext to the same bytes as the explicit client-managed-ovk derivation', function () {
433
+ // out_ciphertext encryption is deterministic given the (identical) orchard action and the
434
+ // ovk, so byte-equality of the PCZT proves sign()'s implicit derivation is exactly the
435
+ // documented one: the ECDH agreement of rootWalletKeys.bitgoKey() and the user root key.
436
+ const bytes = buildPsbt().serialize();
437
+ const autoPsbt = wasm_utxo_1.fixedScriptWallet.ZcashIronwoodBitGoPsbt.fromBytes(bytes, 'tzec');
438
+ autoPsbt.sign(xprivs[0], walletKeys);
439
+ const manualPsbt = wasm_utxo_1.fixedScriptWallet.ZcashIronwoodBitGoPsbt.fromBytes(bytes, 'tzec');
440
+ manualPsbt.setShieldedOutCiphertext(0, xprivs[0], walletKeys);
441
+ assert.deepStrictEqual(pcztOf(autoPsbt), pcztOf(manualPsbt));
442
+ });
443
+ it('out_ciphertext differs when encrypted under different ovks', function () {
444
+ // The binding between out_ciphertext and the ovk is real: two builds identical except for
445
+ // the build-time ovk produce different PCZTs, so the equality assertions here are not
446
+ // vacuous (out_ciphertext cannot be a constant).
447
+ assert.notDeepStrictEqual(pcztOf(buildPsbt(new Uint8Array(32).fill(1))), pcztOf(buildPsbt(new Uint8Array(32).fill(2))));
448
+ });
449
+ it('sign() overrides a build-time ovk with the wallet ovk', function () {
450
+ const bytes = buildPsbt(new Uint8Array(32).fill(1)).serialize();
451
+ const builtPsbt = wasm_utxo_1.fixedScriptWallet.ZcashIronwoodBitGoPsbt.fromBytes(bytes, 'tzec');
452
+ const signedPsbt = wasm_utxo_1.fixedScriptWallet.ZcashIronwoodBitGoPsbt.fromBytes(bytes, 'tzec');
453
+ signedPsbt.sign(xprivs[0], walletKeys);
454
+ // The first signing round re-encrypts out_ciphertext under the wallet ovk, discarding the
455
+ // build-time one...
456
+ assert.notDeepStrictEqual(pcztOf(signedPsbt), pcztOf(builtPsbt));
457
+ // ...and the result is byte-identical to the explicit wallet-ovk derivation.
458
+ const manualPsbt = wasm_utxo_1.fixedScriptWallet.ZcashIronwoodBitGoPsbt.fromBytes(bytes, 'tzec');
459
+ manualPsbt.setShieldedOutCiphertext(0, xprivs[0], walletKeys);
460
+ assert.deepStrictEqual(pcztOf(signedPsbt), pcztOf(manualPsbt));
461
+ });
462
+ it('rejects an ovk derived from a non-user key', function () {
463
+ // An ovk from the backup or BitGo key is one neither the user nor the server can
464
+ // reproduce, which would leave the shielded output unrecoverable after broadcast.
465
+ const psbt = buildPsbt();
466
+ assert.throws(() => psbt.setShieldedOutCiphertext(0, xprivs[1], walletKeys));
467
+ assert.throws(() => psbt.setShieldedOutCiphertext(0, xprivs[2], walletKeys));
468
+ });
469
+ });
470
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hpZWxkZWRQcmVidWlsZEFuZFNpZ24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZXN0L3VuaXQvaW1wbC96ZWMvc2hpZWxkZWRQcmVidWlsZEFuZFNpZ24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwrQ0FBaUM7QUFFakMsNkNBQStCO0FBQy9CLDZCQUE4QjtBQUM5Qiw4Q0FBOEU7QUFDOUUsOENBQTBDO0FBQzFDLGdEQUFxRDtBQUVyRCxxQ0FBd0U7QUFDeEUsb0RBQWdFO0FBSWhFLHVGQUF1RjtBQUN2RixNQUFNLGVBQWUsR0FDbkIsMk5BQTJOLENBQUM7QUFDOU4sTUFBTSwyQkFBMkIsR0FBRyxxQ0FBcUMsQ0FBQztBQUUxRTs7Ozs7O0dBTUc7QUFDSCxNQUFNLGlCQUFpQixHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQ25DLHdGQUF3RixFQUN4RixLQUFLLENBQ04sQ0FBQztBQUNGLElBQUksY0FBc0IsQ0FBQztBQUMzQixJQUFJLFVBQTRDLENBQUM7QUFFakQsTUFBTSxDQUFDO0lBQ0wsY0FBYyxHQUFHLDZCQUFpQixDQUFDLG1CQUFtQixDQUFDLHFCQUFxQixDQUMxRSxJQUFJLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxFQUNqQyxNQUFNLENBQ1AsQ0FBQztJQUNGLFVBQVUsR0FBRyxJQUFBLG9DQUF3QixHQUFFLENBQUMsVUFBVSxDQUFDO0FBQ3JELENBQUMsQ0FBQyxDQUFDO0FBRUgsU0FBUywwQkFBMEI7SUFDakMsTUFBTSxJQUFJLEdBQUcsNkJBQWlCLENBQUMsc0JBQXNCLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUNoSCxJQUFJLENBQUMsY0FBYyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEVB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RUFBRSxDQUFDLDRDQUE0QyxFQUFFO1FBQy9DLGlGQUFpRjtRQUNqRixrRkFBa0Y7UUFDbEYsTUFBTSxJQUFJLEdBQUcsU0FBUyxFQUFFLENBQUM7UUFDekIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDO1FBQzdFLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQztJQUMvRSxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5cbmltcG9ydCAqIGFzIHNpbm9uIGZyb20gJ3Npbm9uJztcbmltcG9ydCBub2NrID0gcmVxdWlyZSgnbm9jaycpO1xuaW1wb3J0IHsgY29tbW9uLCBUcmlwbGUsIFZlcmlmaWNhdGlvbk9wdGlvbnMsIFdhbGxldCB9IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5pbXBvcnQgeyBnZXRTZWVkIH0gZnJvbSAnQGJpdGdvL3Nkay10ZXN0JztcbmltcG9ydCB7IGZpeGVkU2NyaXB0V2FsbGV0IH0gZnJvbSAnQGJpdGdvL3dhc20tdXR4byc7XG5cbmltcG9ydCB7IGRlZmF1bHRCaXRHbywgZ2V0VXR4b0NvaW4sIGtleWNoYWluc0Jhc2U1OCB9IGZyb20gJy4uLy4uL3V0aWwnO1xuaW1wb3J0IHsgZ2V0RGVmYXVsdFdhc21XYWxsZXRLZXlzIH0gZnJvbSAnLi4vLi4vdXRpbC9rZXljaGFpbnMnO1xuaW1wb3J0IHR5cGUgeyBaZWMgfSBmcm9tICcuLi8uLi8uLi8uLi9zcmMvaW1wbC96ZWMnO1xuaW1wb3J0IHsgVXR4b1dhbGxldCB9IGZyb20gJy4uLy4uLy4uLy4uL3NyYy93YWxsZXQnO1xuXG4vLyBaSVAtMzE2IHRlc3RuZXQgdmVjdG9ycyAodGVzdG5ldFdhbGxldCBmcm9tIHRoZSB3YXNtLXV0eG8gdW5pZmllZF9hZGRyZXNzIGZpeHR1cmVzKS5cbmNvbnN0IFRFU1RORVRfVU5JRklFRCA9XG4gICd1dGVzdDF3NW0wcWNucDhlZ2w4cWEyOTZuNzBuOG52ajB0cW56azkwcDdmNDh2N21qaGhkcmRxczh2Z3F5ZHNsZzVwbG16ZWZhd2VmbnBtZ21sbTZoY3kzOG05NzJlcnd4czA0czAyY3EycHJoZ3V6OGtxbHk3NW02emp5NTZtMDhkNWpueWNndHBxdGplcHJ0ZTU3NmdrbXJ4eXN6ZXBneDc2eXp1d2hoN200bGZ6OWphcTd1bmprMHg1YW50NDZqdXh6NzNoc2M2cTR2M2RxdHp3dzAwdnBzJztcbmNvbnN0IFRFU1RORVRfVFJBTlNQQVJFTlRfQUREUkVTUyA9ICd0bU00RHZMVkpLWFp0NXlkbjF0cVlUSHZhaHBLU3dnanVSayc7XG5cbi8qKlxuICogRXhlcmNpc2VzIGV2ZXJ5IGNsaWVudC1zaWRlIGZsb3cgdGhhdCBydW5zIEJFRk9SRSB2ZXJpZnlUcmFuc2FjdGlvbi9zaWduVHJhbnNhY3Rpb24gb24gYVxuICogc2hpZWxkZWQgKHY2IElyb253b29kKSBwcmVidWlsZDogcHJlYnVpbGQgcG9zdC1wcm9jZXNzaW5nLCBleHBsYW5hdGlvbiwgYW5kIHJlY2lwaWVudFxuICogdmFsaWRhdGlvbi4gRWFjaCBvZiB0aGVtIG11c3QgZGVjb2RlIHRoZSB2NiBQU0JUIOKAlCB2aWEgYFplYy5kZWNvZGVUcmFuc2FjdGlvbmAgLT5cbiAqIGBaY2FzaFBzYnQuZnJvbUJ5dGVzYCwgd2hpY2ggYXV0by1kZXRlY3RzIHRoZSB0cmFuc2FjdGlvbiB2ZXJzaW9uIOKAlCBhbmQgaGFuZGxlIHRoZSBzaGllbGRlZFxuICogcmVjaXBpZW50IHdpdGhvdXQgZXJyb3IuXG4gKi9cbmNvbnN0IElST05XT09EX1JFQ0VJVkVSID0gQnVmZmVyLmZyb20oXG4gICdkNjMyYzI4YWEwODMxZDY3MWJlMTc3MDlhNDJjOTYyN2UyZWI2ODdhMWIyYTU1NzY4ZWE0NzBjOWJhZTc0OTljZDBiZDNkMGViMDQ4NGUzMDcyMzZiNScsXG4gICdoZXgnXG4pO1xubGV0IHVuaWZpZWRBZGRyZXNzOiBzdHJpbmc7XG5sZXQgd2FsbGV0S2V5czogZml4ZWRTY3JpcHRXYWxsZXQuUm9vdFdhbGxldEtleXM7XG5cbmJlZm9yZShmdW5jdGlvbiAoKSB7XG4gIHVuaWZpZWRBZGRyZXNzID0gZml4ZWRTY3JpcHRXYWxsZXQuWmNhc2hVbmlmaWVkQWRkcmVzcy5lbmNvZGVPcmNoYXJkUmVjZWl2ZXIoXG4gICAgbmV3IFVpbnQ4QXJyYXkoSVJPTldPT0RfUkVDRUlWRVIpLFxuICAgICd0emVjJ1xuICApO1xuICB3YWxsZXRLZXlzID0gZ2V0RGVmYXVsdFdhc21XYWxsZXRLZXlzKCkud2FsbGV0S2V5cztcbn0pO1xuXG5mdW5jdGlvbiBidWlsZFNoaWVsZGVkVjZQcmVidWlsZEhleCgpOiBzdHJpbmcge1xuICBjb25zdCBwc2J0ID0gZml4ZWRTY3JpcHRXYWxsZXQuWmNhc2hJcm9ud29vZEJpdEdvUHNidC5jcmVhdGVFbXB0eSgndHplYycsIHdhbGxldEtleXMsIHsgYmxvY2tIZWlnaHQ6IDQyMDAwMDAgfSk7XG4gIHBzYnQuYWRkV2FsbGV0SW5wdXQoeyB0eGlkOiAnMTEnLnJlcGVhdCgzMiksIHZvdXQ6IDAsIHZhbHVlOiAxMDAwMDBuIH0sIHdhbGxldEtleXMsIHtcbiAgICBzY3JpcHRJZDogeyBjaGFpbjogMCwgaW5kZXg6IDAgfSxcbiAgfSk7XG4gIHBzYnQuYWRkV2FsbGV0T3V0cHV0KHdhbGxldEtleXMsIHsgY2hhaW46IDEsIGluZGV4OiAwLCB2YWx1ZTogOTAwMDBuIH0pO1xuICBwc2J0LmFkZFNoaWVsZGVkT3V0cHV0cyhcbiAgICBbeyByZWNpcGllbnQ6IG5ldyBVaW50OEFycmF5KElST05XT09EX1JFQ0VJVkVSKSwgYW1vdW50OiA1MDAwbiwgdW5pZmllZEFkZHJlc3MgfV0sXG4gICAgbmV3IFVpbnQ4QXJyYXkoMzIpXG4gICk7XG4gIHJldHVybiBCdWZmZXIuZnJvbShwc2J0LnNlcmlhbGl6ZSgpKS50b1N0cmluZygnaGV4Jyk7XG59XG5cbmZ1bmN0aW9uIG11dGF0ZVNlcmlhbGl6ZWRVbmlmaWVkQWRkcmVzcyhwc2J0SGV4OiBzdHJpbmcsIHVuaWZpZWRBZGRyZXNzOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBieXRlcyA9IEJ1ZmZlci5mcm9tKHBzYnRIZXgsICdoZXgnKTtcbiAgY29uc3QgbWV0YWRhdGEgPSBCdWZmZXIuZnJvbSh1bmlmaWVkQWRkcmVzcywgJ3V0ZjgnKTtcbiAgY29uc3Qgb2Zmc2V0ID0gYnl0ZXMuaW5kZXhPZihtZXRhZGF0YSk7XG4gIGFzc2VydC5ub3RTdHJpY3RFcXVhbChvZmZzZXQsIC0xLCAnVW5pZmllZCBBZGRyZXNzIG1ldGFkYXRhIG11c3QgYmUgcHJlc2VudCBpbiB0aGUgc2VyaWFsaXplZCBQU0JUJyk7XG4gIC8vIENoYW5nZSBvbmx5IHRoZSBtZXRhZGF0YSBieXRlcy4gVGhlIHJlc3VsdGluZyBhZGRyZXNzIGlzIGludGVudGlvbmFsbHkgaW52YWxpZCwgd2hpY2hcbiAgLy8gdmVyaWZpZXMgdGhhdCBkZXNlcmlhbGl6YXRpb24gZG9lcyBub3QgZXhwb3NlIGF0dGFja2VyLWNvbnRyb2xsZWQgcHJvcHJpZXRhcnkgbWV0YWRhdGEuXG4gIGJ5dGVzW29mZnNldF0gPSBieXRlc1tvZmZzZXRdID09PSAweDc1ID8gMHg3NiA6IDB4NzU7XG4gIHJldHVybiBieXRlcy50b1N0cmluZygnaGV4Jyk7XG59XG5kZXNjcmliZSgnWmVjIHNoaWVsZGVkIHByZS12ZXJpZnkgZmxvd3MgKHY2IElyb253b29kIFBTQlQpJywgZnVuY3Rpb24gKCkge1xuICBjb25zdCB6ZWMgPSBnZXRVdHhvQ29pbigndHplYycpO1xuICBjb25zdCBiZ1VybCA9IGNvbW1vbi5FbnZpcm9ubWVudHNbZGVmYXVsdEJpdEdvLmdldEVudigpXS51cmk7XG5cbiAgY29uc3Qga2V5RG9jdW1lbnRPYmplY3RzID0ga2V5Y2hhaW5zQmFzZTU4Lm1hcCgoa2V5Y2hhaW4sIGtleUlkeCkgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICBpZDogZ2V0U2VlZChrZXljaGFpbi5wdWIpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgIHB1Yjoga2V5Y2hhaW4ucHViLFxuICAgICAgc291cmNlOiBbJ3VzZXInLCAnYmFja3VwJywgJ2JpdGdvJ11ba2V5SWR4XSxcbiAgICAgIGNvaW5TcGVjaWZpYzoge30sXG4gICAgfTtcbiAgfSk7XG5cbiAgYWZ0ZXJFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICBub2NrLmNsZWFuQWxsKCk7XG4gIH0pO1xuXG4gIGl0KCdzZW5kTWFueSByZWNpcGllbnQgdmFsaWRhdGlvbiBhY2NlcHRzIHRoZSB1bmlmaWVkIGFkZHJlc3MnLCBmdW5jdGlvbiAoKSB7XG4gICAgemVjLmNoZWNrUmVjaXBpZW50KHsgYWRkcmVzczogdW5pZmllZEFkZHJlc3MsIGFtb3VudDogJzUwMDAnIH0pO1xuICB9KTtcblxuICBpdCgncG9zdFByb2Nlc3NQcmVidWlsZCBkZWNvZGVzIHRoZSB2NiBwc2J0IGFuZCByZS1lbmNvZGVzIGl0IHVuY2hhbmdlZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBwcmVidWlsZEhleCA9IGJ1aWxkU2hpZWxkZWRWNlByZWJ1aWxkSGV4KCk7XG4gICAgbm9jayhiZ1VybCkuZ2V0KCcvYXBpL3YyL3R6ZWMvcHVibGljL2Jsb2NrL2xhdGVzdCcpLnJlcGx5KDIwMCwgeyBoZWlnaHQ6IDQyMDAwMDAgfSk7XG4gICAgY29uc3QgcHJlYnVpbGQgPSBhd2FpdCB6ZWMucG9zdFByb2Nlc3NQcmVidWlsZCh7IHR4SGV4OiBwcmVidWlsZEhleCwgdHhJbmZvOiB7fSB9KTtcbiAgICBhc3NlcnQubWF0Y2gocHJlYnVpbGQudHhIZXggYXMgc3RyaW5nLCAvXjcwNzM2Mjc0Lyk7IC8vIFBTQlQgbWFnaWMgcHJlc2VydmVkXG4gICAgY29uc3QgZGVjb2RlZCA9IHplYy5kZWNvZGVUcmFuc2FjdGlvbihwcmVidWlsZC50eEhleCBhcyBzdHJpbmcpO1xuICAgIGFzc2VydC5vayhkZWNvZGVkIGluc3RhbmNlb2YgZml4ZWRTY3JpcHRXYWxsZXQuWmNhc2hJcm9ud29vZEJpdEdvUHNidCk7XG4gIH0pO1xuXG4gIGl0KCdleHBsYWluVHJhbnNhY3Rpb24gZGVjb2RlcyB0aGUgdjYgcHNidCBhbmQgcmVzb2x2ZXMgdGhlIHNoaWVsZGVkIHJlY2lwaWVudCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBleHBsYWluZWQgPSBhd2FpdCB6ZWMuZXhwbGFpblRyYW5zYWN0aW9uKHtcbiAgICAgIHR4SGV4OiBidWlsZFNoaWVsZGVkVjZQcmVidWlsZEhleCgpLFxuICAgICAgcHViczogW2tleURvY3VtZW50T2JqZWN0c1swXS5wdWIsIGtleURvY3VtZW50T2JqZWN0c1sxXS5wdWIsIGtleURvY3VtZW50T2JqZWN0c1syXS5wdWJdLFxuICAgIH0pO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChleHBsYWluZWQub3V0cHV0cy5sZW5ndGgsIDEpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChleHBsYWluZWQub3V0cHV0c1swXS5hZGRyZXNzLCB1bmlmaWVkQWRkcmVzcyk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGV4cGxhaW5lZC5vdXRwdXRzWzBdLmFtb3VudC50b1N0cmluZygpLCAnNTAwMCcpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChleHBsYWluZWQuY2hhbmdlT3V0cHV0cy5sZW5ndGgsIDEpO1xuICB9KTtcblxuICBpdCgncmVqZWN0cyBhIHY2IFBTQlQgd2hvc2UgcHJlc2VydmVkIFVBIG1ldGFkYXRhIHdhcyBtdXRhdGVkIGFmdGVyIHNlcmlhbGl6YXRpb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgbXV0YXRlZEhleCA9IG11dGF0ZVNlcmlhbGl6ZWRVbmlmaWVkQWRkcmVzcyhidWlsZFNoaWVsZGVkVjZQcmVidWlsZEhleCgpLCB1bmlmaWVkQWRkcmVzcyk7XG4gICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoXG4gICAgICB6ZWMuZXhwbGFpblRyYW5zYWN0aW9uKHtcbiAgICAgICAgdHhIZXg6IG11dGF0ZWRIZXgsXG4gICAgICAgIHB1YnM6IFtrZXlEb2N1bWVudE9iamVjdHNbMF0ucHViLCBrZXlEb2N1bWVudE9iamVjdHNbMV0ucHViLCBrZXlEb2N1bWVudE9iamVjdHNbMl0ucHViXSxcbiAgICAgIH0pLFxuICAgICAgL2RvZXMgbm90IG1hdGNoIGl0cyByYXcgc2NyaXB0L1xuICAgICk7XG4gIH0pO1xufSk7XG5cbi8qKlxuICogYHBhcnNlVHJhbnNhY3Rpb25gIG11c3QgdGFrZSBgdW5pZmllZFJlY2lwaWVudFByZWZlcmVuY2VgIGludG8gYWNjb3VudCB3aGVuIGRlY29kaW5nIGFcbiAqIHByZWJ1aWxkOiBhIHNoaWVsZGVkIHJlY2lwaWVudCByZXNvbHZlcyB0byBpdHMgNDMtYnl0ZSBPcmNoYXJkIHJlY2VpdmVyLCB3aGljaCBvbmx5IG1hdGNoZXNcbiAqIHRoZSBQU0JUJ3Mgc2hpZWxkZWQgb3V0cHV0IHdoZW4gdGhlIGRlY29kZSB1c2VzIHRoZSAnc2hpZWxkZWQnIHByZWZlcmVuY2UuIFRoZSBwcmVmZXJlbmNlIGlzXG4gKiB0aGUgY2FsbGVyJ3MgZXhwbGljaXQgYHVuaWZpZWRSZWNpcGllbnRQcmVmZXJlbmNlYCwgb3Ig4oCUIHdoZW4gYWJzZW50IOKAlCBpbmZlcnJlZCBmcm9tIHRoZVxuICogcmVjaXBpZW50cyB0aGVtc2VsdmVzLlxuICovXG5kZXNjcmliZSgnWmVjIHBhcnNlVHJhbnNhY3Rpb24gdW5pZmllZFJlY2lwaWVudFByZWZlcmVuY2UgKHY2IElyb253b29kIFBTQlQpJywgZnVuY3Rpb24gKCkge1xuICBjb25zdCB0emVjID0gZ2V0VXR4b0NvaW4oJ3R6ZWMnKTtcblxuICBmdW5jdGlvbiBnZXRNb2NrV2FsbGV0KCk6IFV0eG9XYWxsZXQge1xuICAgIGNvbnN0IG1vY2tXYWxsZXQgPSBzaW5vbi5jcmVhdGVTdHViSW5zdGFuY2UoV2FsbGV0KTtcbiAgICBtb2NrV2FsbGV0LmlkLnJldHVybnMoJ3Rlc3Qtd2FsbGV0LWlkJyk7XG4gICAgbW9ja1dhbGxldC5jb2luLnJldHVybnMoJ3R6ZWMnKTtcbiAgICBtb2NrV2FsbGV0LmNvaW5TcGVjaWZpYy5yZXR1cm5zKHVuZGVmaW5lZCk7XG4gICAgcmV0dXJuIG1vY2tXYWxsZXQgYXMgdW5rbm93biBhcyBVdHhvV2FsbGV0O1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0VmVyaWZpY2F0aW9uKCk6IFZlcmlmaWNhdGlvbk9wdGlvbnMge1xuICAgIGNvbnN0IHB1YnMgPSBrZXljaGFpbnNCYXNlNTgubWFwKChrKSA9PiBrLnB1Yik7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRpc2FibGVOZXR3b3JraW5nOiB0cnVlLFxuICAgICAga2V5Y2hhaW5zOiB7XG4gICAgICAgIHVzZXI6IHsgaWQ6ICcwJywgcHViOiBwdWJzWzBdLCB0eXBlOiAnaW5kZXBlbmRlbnQnIH0sXG4gICAgICAgIGJhY2t1cDogeyBpZDogJzEnLCBwdWI6IHB1YnNbMV0sIHR5cGU6ICdpbmRlcGVuZGVudCcgfSxcbiAgICAgICAgYml0Z286IHsgaWQ6ICcyJywgcHViOiBwdWJzWzJdLCB0eXBlOiAnaW5kZXBlbmRlbnQnIH0sXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBwYXJzZVNoaWVsZGVkVjZQcmVidWlsZChcbiAgICB0eFBhcmFtczoge1xuICAgICAgcmVjaXBpZW50czogeyBhZGRyZXNzOiBzdHJpbmc7IGFtb3VudDogc3RyaW5nIH1bXTtcbiAgICAgIHVuaWZpZWRSZWNpcGllbnRQcmVmZXJlbmNlPzogJ3NoaWVsZGVkJyB8ICd0cmFuc3BhcmVudCc7XG4gICAgfSxcbiAgICB0eEhleCA9IGJ1aWxkU2hpZWxkZWRWNlByZWJ1aWxkSGV4KClcbiAgKSB7XG4gICAgcmV0dXJuIHR6ZWMucGFyc2VUcmFuc2FjdGlvbih7XG4gICAgICB3YWxsZXQ6IGdldE1vY2tXYWxsZXQoKSxcbiAgICAgIHR4UGFyYW1zLFxuICAgICAgdHhQcmVidWlsZDogeyB0eEhleCB9LFxuICAgICAgdmVyaWZpY2F0aW9uOiBnZXRWZXJpZmljYXRpb24oKSxcbiAgICB9KTtcbiAgfVxuXG4gIGl0KCdpbmZlcnMgdGhlIHNoaWVsZGVkIHByZWZlcmVuY2UgZnJvbSBhbiBPcmNoYXJkLW9ubHkgVW5pZmllZCBBZGRyZXNzIHJlY2lwaWVudCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBwYXJzZWQgPSBhd2FpdCBwYXJzZVNoaWVsZGVkVjZQcmVidWlsZCh7XG4gICAgICByZWNpcGllbnRzOiBbeyBhZGRyZXNzOiB1bmlmaWVkQWRkcmVzcywgYW1vdW50OiAnNTAwMCcgfV0sXG4gICAgfSk7XG4gICAgY29uc3QgZXh0ZXJuYWxPdXRwdXRzID0gcGFyc2VkLm91dHB1dHMuZmlsdGVyKChvKSA9PiBvLmV4dGVybmFsKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZXh0ZXJuYWxPdXRwdXRzLmxlbmd0aCwgMSk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGV4dGVybmFsT3V0cHV0c1swXS5hZGRyZXNzLCB1bmlmaWVkQWRkcmVzcyk7XG4gIH0pO1xuICBpdCgncmVqZWN0cyBhIHY2IFBTQlQgd2l0aCBtdXRhdGVkIFVBIG1ldGFkYXRhIGR1cmluZyBwYXJzZVRyYW5zYWN0aW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IG11dGF0ZWRIZXggPSBtdXRhdGVTZXJpYWxpemVkVW5pZmllZEFkZHJlc3MoYnVpbGRTaGllbGRlZFY2UHJlYnVpbGRIZXgoKSwgdW5pZmllZEFkZHJlc3MpO1xuICAgIGF3YWl0IGFzc2VydC5yZWplY3RzKFxuICAgICAgcGFyc2VTaGllbGRlZFY2UHJlYnVpbGQoeyByZWNpcGllbnRzOiBbeyBhZGRyZXNzOiB1bmlmaWVkQWRkcmVzcywgYW1vdW50OiAnNTAwMCcgfV0gfSwgbXV0YXRlZEhleCksXG4gICAgICAvZG9lcyBub3QgbWF0Y2ggaXRzIHJhdyBzY3JpcHQvXG4gICAgKTtcbiAgfSk7XG4gIGl0KCdob25vcnMgYW4gZXhwbGljaXQgc2hpZWxkZWQgcHJlZmVyZW5jZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBwYXJzZWQgPSBhd2FpdCBwYXJzZVNoaWVsZGVkVjZQcmVidWlsZCh7XG4gICAgICByZWNpcGllbnRzOiBbeyBhZGRyZXNzOiB1bmlmaWVkQWRkcmVzcywgYW1vdW50OiAnNTAwMCcgfV0sXG4gICAgICB1bmlmaWVkUmVjaXBpZW50UHJlZmVyZW5jZTogJ3NoaWVsZGVkJyxcbiAgICB9KTtcbiAgICBjb25zdCBleHRlcm5hbE91dHB1dHMgPSBwYXJzZWQub3V0cHV0cy5maWx0ZXIoKG8pID0+IG8uZXh0ZXJuYWwpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChleHRlcm5hbE91dHB1dHMubGVuZ3RoLCAxKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZXh0ZXJuYWxPdXRwdXRzWzBdLmFkZHJlc3MsIHVuaWZpZWRBZGRyZXNzKTtcbiAgfSk7XG5cbiAgaXQoJ3JlamVjdHMgYSB0cmFuc3BhcmVudCByZXNvbHV0aW9uIG9mIGEgc2hpZWxkZWQgcmVjaXBpZW50IChpbnRlbnQgbWlzbWF0Y2gpJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIC8vIEZvcmNpbmcgdGhlICd0cmFuc3BhcmVudCcgcHJlZmVyZW5jZSByZXNvbHZlcyB0aGUgcmVjaXBpZW50J3Mgc2NyaXB0IOKAlCBidXQgYW5cbiAgICAvLyBPcmNoYXJkLW9ubHkgVUEgaGFzIG5vIHRyYW5zcGFyZW50IHJlY2VpdmVyLCBzbyB0aGUgZGVjb2RlIG11c3QgZmFpbCByYXRoZXIgdGhhblxuICAgIC8vIHNpbGVudGx5IG1pc21hdGNoLlxuICAgIGF3YWl0IGFzc2VydC5yZWplY3RzKFxuICAgICAgcGFyc2VTaGllbGRlZFY2UHJlYnVpbGQoe1xuICAgICAgICByZWNpcGllbnRzOiBbeyBhZGRyZXNzOiB1bmlmaWVkQWRkcmVzcywgYW1vdW50OiAnNTAwMCcgfV0sXG4gICAgICAgIHVuaWZpZWRSZWNpcGllbnRQcmVmZXJlbmNlOiAndHJhbnNwYXJlbnQnLFxuICAgICAgfSlcbiAgICApO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZSgnWmVjIHJlc29sdmVSZWNpcGllbnRzRnJvbVBzYnQgKGRlY29kZSArIHJlY2lwaWVudCByZXNvbHV0aW9uKScsIGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgdHplYyA9IGdldFV0eG9Db2luKCd0emVjJykgYXMgWmVjO1xuICBjb25zdCB7IHdhbGxldEtleXMgfSA9IGdldERlZmF1bHRXYXNtV2FsbGV0S2V5cygpO1xuICBjb25zdCBJUk9OV09PRF9IRUlHSFQgPSA0MjAwMDAwOyAvLyBhZnRlciB0aGUgTlU2LjMgdGVzdG5ldCBhY3RpdmF0aW9uICg0MTM0MDAwKVxuXG4gIGZ1bmN0aW9uIGJ1aWxkU2hpZWxkZWRWNlBzYnQoXG4gICAgdW5pZmllZEFkZHJlc3MgPSBmaXhlZFNjcmlwdFdhbGxldC5aY2FzaFVuaWZpZWRBZGRyZXNzLmVuY29kZU9yY2hhcmRSZWNlaXZlcihcbiAgICAgIG5ldyBVaW50OEFycmF5KElST05XT09EX1JFQ0VJVkVSKSxcbiAgICAgICd0emVjJ1xuICAgIClcbiAgKTogZml4ZWRTY3JpcHRXYWxsZXQuWmNhc2hJcm9ud29vZEJpdEdvUHNidCB7XG4gICAgY29uc3QgcHNidCA9IGZpeGVkU2NyaXB0V2FsbGV0LlpjYXNoSXJvbndvb2RCaXRHb1BzYnQuY3JlYXRlRW1wdHkoJ3R6ZWMnLCB3YWxsZXRLZXlzLCB7XG4gICAgICBibG9ja0hlaWdodDogSVJPTldPT0RfSEVJR0hULFxuICAgIH0pO1xuICAgIHBzYnQuYWRkV2FsbGV0SW5wdXQoeyB0eGlkOiAnMTEnLnJlcGVhdCgzMiksIHZvdXQ6IDAsIHZhbHVlOiAxMDAwMDBuIH0sIHdhbGxldEtleXMsIHtcbiAgICAgIHNjcmlwdElkOiB7IGNoYWluOiAwLCBpbmRleDogMCB9LFxuICAgIH0pO1xuICAgIHBzYnQuYWRkV2FsbGV0T3V0cHV0KHdhbGxldEtleXMsIHsgY2hhaW46IDEsIGluZGV4OiAwLCB2YWx1ZTogOTAwMDBuIH0pO1xuICAgIHBzYnQuYWRkU2hpZWxkZWRPdXRwdXRzKFxuICAgICAgW3sgcmVjaXBpZW50OiBuZXcgVWludDhBcnJheShJUk9OV09PRF9SRUNFSVZFUiksIGFtb3VudDogNTAwMG4sIHVuaWZpZWRBZGRyZXNzIH1dLFxuICAgICAgbmV3IFVpbnQ4QXJyYXkoMzIpIC8vIGFsbC16ZXJvIGFuY2hvciwgYXMgaW4gdGhlIHV0eG8tY29yZSBzaGllbGRlZCBidWlsZCB0ZXN0c1xuICAgICk7XG4gICAgcmV0dXJuIHBzYnQ7XG4gIH1cblxuICBmdW5jdGlvbiBidWlsZFRyYW5zcGFyZW50VjRQc2J0KHVuaWZpZWRBZGRyZXNzPzogc3RyaW5nKTogZml4ZWRTY3JpcHRXYWxsZXQuWmNhc2hCaXRHb1BzYnQge1xuICAgIGNvbnN0IHBzYnQgPSBmaXhlZFNjcmlwdFdhbGxldC5aY2FzaEJpdEdvUHNidC5jcmVhdGVFbXB0eSgndHplYycsIHdhbGxldEtleXMsIHsgYmxvY2tIZWlnaHQ6IDMxNDY0MDAgfSk7XG4gICAgcHNidC5hZGRXYWxsZXRJbnB1dCh7IHR4aWQ6ICcyMicucmVwZWF0KDMyKSwgdm91dDogMCwgdmFsdWU6IDIwMDAwMG4gfSwgd2FsbGV0S2V5cywge1xuICAgICAgc2NyaXB0SWQ6IHsgY2hhaW46IDAsIGluZGV4OiAxIH0sXG4gICAgfSk7XG4gICAgcHNidC5hZGRXYWxsZXRPdXRwdXQod2FsbGV0S2V5cywgeyBjaGFpbjogMSwgaW5kZXg6IDAsIHZhbHVlOiAxMDAwMDBuIH0pO1xuICAgIGNvbnN0IGV4dGVybmFsU2NyaXB0ID0gdHplYy5hZGRyZXNzQ29kZWMuZGVjb2RlKFRFU1RORVRfVFJBTlNQQVJFTlRfQUREUkVTUyk7XG4gICAgcHNidC5hZGRUcmFuc3BhcmVudE91dHB1dChleHRlcm5hbFNjcmlwdCwgMTIzNDVuLCB1bmlmaWVkQWRkcmVzcyk7XG4gICAgcmV0dXJuIHBzYnQ7XG4gIH1cblxuICAvKiogRGVjb2RlIGEgVUEgYmFjayB0byBpdHMgcmVjZWl2ZXJzIGFuZCBhc3NlcnQgdGhleSBtYXRjaCB0aGUgdGVzdG5ldCBmaXh0dXJlLiAqL1xuICBmdW5jdGlvbiBhc3NlcnREZWNvZGVzQmFja1RvRml4dHVyZVJlY2lwaWVudHModW5pZmllZEFkZHJlc3M6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IHBhcnNlZCA9IGZpeGVkU2NyaXB0V2FsbGV0LlpjYXNoVW5pZmllZEFkZHJlc3MucGFyc2UodW5pZmllZEFkZHJlc3MsICd0emVjJyk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHBhcnNlZC5oYXNPcmNoYXJkUmVjZWl2ZXIsIHRydWUpO1xuICAgIGFzc2VydC5vayhwYXJzZWQub3JjaGFyZFJlY2VpdmVyKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoQnVmZmVyLmZyb20ocGFyc2VkLm9yY2hhcmRSZWNlaXZlcikudG9TdHJpbmcoJ2hleCcpLCBJUk9OV09PRF9SRUNFSVZFUi50b1N0cmluZygnaGV4JykpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChwYXJzZWQuaGFzVHJhbnNwYXJlbnRSZWNlaXZlciwgdHJ1ZSk7XG4gICAgYXNzZXJ0Lm9rKHBhcnNlZC50cmFuc3BhcmVudFNjcmlwdCk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKFxuICAgICAgQnVmZmVyLmZyb20ocGFyc2VkLnRyYW5zcGFyZW50U2NyaXB0KS50b1N0cmluZygnaGV4JyksXG4gICAgICBCdWZmZXIuZnJvbSh0emVjLmFkZHJlc3NDb2RlYy5kZWNvZGUoVEVTVE5FVF9UUkFOU1BBUkVOVF9BRERSRVNTKSkudG9TdHJpbmcoJ2hleCcpXG4gICAgKTtcbiAgfVxuICBpdCgncmVqZWN0cyBhIHY0IFBTQlQgd2hvc2UgcHJlc2VydmVkIFVBIG1ldGFkYXRhIHdhcyBtdXRhdGVkIGFmdGVyIHNlcmlhbGl6YXRpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgbXV0YXRlZEhleCA9IG11dGF0ZVNlcmlhbGl6ZWRVbmlmaWVkQWRkcmVzcyhcbiAgICAgIEJ1ZmZlci5mcm9tKGJ1aWxkVHJhbnNwYXJlbnRWNFBzYnQoVEVTVE5FVF9VTklGSUVEKS5zZXJpYWxpemUoKSkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgVEVTVE5FVF9VTklGSUVEXG4gICAgKTtcbiAgICBhc3NlcnQudGhyb3dzKCgpID0+IHR6ZWMucmVzb2x2ZVJlY2lwaWVudHNGcm9tUHNidChtdXRhdGVkSGV4LCB3YWxsZXRLZXlzKSwgL2RvZXMgbm90IG1hdGNoIGl0cyByYXcgcmVjaXBpZW50Lyk7XG4gIH0pO1xuXG4gIGl0KCdleHBsYWluVHJhbnNhY3Rpb24gcmVqZWN0cyBhIHY0IFBTQlQgd2hvc2UgcHJlc2VydmVkIFVBIG1ldGFkYXRhIHdhcyBtdXRhdGVkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IG11dGF0ZWRIZXggPSBtdXRhdGVTZXJpYWxpemVkVW5pZmllZEFkZHJlc3MoXG4gICAgICBCdWZmZXIuZnJvbShidWlsZFRyYW5zcGFyZW50VjRQc2J0KFRFU1RORVRfVU5JRklFRCkuc2VyaWFsaXplKCkpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgIFRFU1RORVRfVU5JRklFRFxuICAgICk7XG4gICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoXG4gICAgICB0emVjLmV4cGxhaW5UcmFuc2FjdGlvbih7XG4gICAgICAgIHR4SGV4OiBtdXRhdGVkSGV4LFxuICAgICAgICBwdWJzOiBrZXljaGFpbnNCYXNlNTgubWFwKChrZXljaGFpbikgPT4ga2V5Y2hhaW4ucHViKSBhcyBbc3RyaW5nLCBzdHJpbmcsIHN0cmluZ10sXG4gICAgICB9KSxcbiAgICAgIC9kb2VzIG5vdCBtYXRjaCBpdHMgcmF3IHNjcmlwdC9cbiAgICApO1xuICB9KTtcbiAgaXQoJ3Jlc29sdmVzIGEgc2hpZWxkZWQgdjYgKElyb253b29kKSBvdXRwdXQgdG8gaXRzIE9yY2hhcmQgVW5pZmllZCBBZGRyZXNzIHJlY2lwaWVudCcsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCByZWNpcGllbnRzID0gdHplYy5yZXNvbHZlUmVjaXBpZW50c0Zyb21Qc2J0KEJ1ZmZlci5mcm9tKGJ1aWxkU2hpZWxkZWRWNlBzYnQoKS5zZXJpYWxpemUoKSksIHdhbGxldEtleXMpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZWNpcGllbnRzLmxlbmd0aCwgMSk7XG4gICAgY29uc3QgcmVjaXBpZW50ID0gcmVjaXBpZW50c1swXTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVjaXBpZW50LmRlc3RpbmF0aW9uLmtpbmQsICd6Y2FzaFNoaWVsZGVkJyk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlY2lwaWVudC5hbW91bnQsIDUwMDBuKTtcbiAgICBhc3NlcnQub2socmVjaXBpZW50LmFkZHJlc3Muc3RhcnRzV2l0aCgndXRlc3QxJykpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZWNpcGllbnQuYWRkcmVzcywgcmVjaXBpZW50LmRlc3RpbmF0aW9uLnVuaWZpZWRBZGRyZXNzKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoQnVmZmVyLmZyb20ocmVjaXBpZW50LnNjcmlwdCkudG9TdHJpbmcoJ2hleCcpLCBJUk9OV09PRF9SRUNFSVZFUi50b1N0cmluZygnaGV4JykpO1xuICB9KTtcblxuICBpdCgncmVqZWN0cyBhIHY2IFBTQlQgd2hvc2UgcHJlc2VydmVkIFVBIG1ldGFkYXRhIHdhcyBtdXRhdGVkIGFmdGVyIHNlcmlhbGl6YXRpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgbXV0YXRlZEhleCA9IG11dGF0ZVNlcmlhbGl6ZWRVbmlmaWVkQWRkcmVzcyhcbiAgICAgIEJ1ZmZlci5mcm9tKGJ1aWxkU2hpZWxkZWRWNlBzYnQoVEVTVE5FVF9VTklGSUVEKS5zZXJpYWxpemUoKSkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgVEVTVE5FVF9VTklGSUVEXG4gICAgKTtcbiAgICBhc3NlcnQudGhyb3dzKCgpID0+IHR6ZWMucmVzb2x2ZVJlY2lwaWVudHNGcm9tUHNidChtdXRhdGVkSGV4LCB3YWxsZXRLZXlzKSwgL2RvZXMgbm90IG1hdGNoIGl0cyByYXcgcmVjaXBpZW50Lyk7XG4gIH0pO1xuXG4gIGl0KCdleHBsYWluVHJhbnNhY3Rpb24gcmVqZWN0cyBhIHY2IFBTQlQgd2hvc2UgcHJlc2VydmVkIFVBIG1ldGFkYXRhIHdhcyBtdXRhdGVkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IG11dGF0ZWRIZXggPSBtdXRhdGVTZXJpYWxpemVkVW5pZmllZEFkZHJlc3MoXG4gICAgICBCdWZmZXIuZnJvbShidWlsZFNoaWVsZGVkVjZQc2J0KFRFU1RORVRfVU5JRklFRCkuc2VyaWFsaXplKCkpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgIFRFU1RORVRfVU5JRklFRFxuICAgICk7XG4gICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoXG4gICAgICB0emVjLmV4cGxhaW5UcmFuc2FjdGlvbih7XG4gICAgICAgIHR4SGV4OiBtdXRhdGVkSGV4LFxuICAgICAgICBwdWJzOiBrZXljaGFpbnNCYXNlNTgubWFwKChrZXljaGFpbikgPT4ga2V5Y2hhaW4ucHViKSBhcyBbc3RyaW5nLCBzdHJpbmcsIHN0cmluZ10sXG4gICAgICB9KSxcbiAgICAgIC9kb2VzIG5vdCBtYXRjaCBpdHMgcmF3IHNjcmlwdC9cbiAgICApO1xuICB9KTtcbiAgaXQoJ3Jlc29sdmVzIHRyYW5zcGFyZW50IGV4dGVybmFsIG91dHB1dHMgYW5kIGV4Y2x1ZGVzIGNoYW5nZScsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCByZWNpcGllbnRzID0gdHplYy5yZXNvbHZlUmVjaXBpZW50c0Zyb21Qc2J0KEJ1ZmZlci5mcm9tKGJ1aWxkVHJhbnNwYXJlbnRWNFBzYnQoKS5zZXJpYWxpemUoKSksIHdhbGxldEtleXMpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZWNpcGllbnRzLmxlbmd0aCwgMSk7XG4gICAgY29uc3QgcmVjaXBpZW50ID0gcmVjaXBpZW50c1swXTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVjaXBpZW50LmRlc3RpbmF0aW9uLmtpbmQsICd0cmFuc3BhcmVudCcpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZWNpcGllbnQuYWRkcmVzcywgVEVTVE5FVF9UUkFOU1BBUkVOVF9BRERSRVNTKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVjaXBpZW50LmFtb3VudCwgMTIzNDVuKTtcbiAgfSk7XG5cbiAgaXQoJ3JlcG9ydHMgdGhlIG9yaWdpbmFsIG11bHRpLXJlY2VpdmVyIFVBIGZvciBhIHNoaWVsZGVkIG91dHB1dCBhbmQgZGVjb2RlcyBpdCBiYWNrJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHJlY2lwaWVudHMgPSB0emVjLnJlc29sdmVSZWNpcGllbnRzRnJvbVBzYnQoXG4gICAgICBCdWZmZXIuZnJvbShidWlsZFNoaWVsZGVkVjZQc2J0KFRFU1RORVRfVU5JRklFRCkuc2VyaWFsaXplKCkpLFxuICAgICAgd2FsbGV0S2V5c1xuICAgICk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlY2lwaWVudHMubGVuZ3RoLCAxKTtcbiAgICBjb25zdCByZWNpcGllbnQgPSByZWNpcGllbnRzWzBdO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZWNpcGllbnQuZGVzdGluYXRpb24ua2luZCwgJ3pjYXNoU2hpZWxkZWQnKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVjaXBpZW50LmFkZHJlc3MsIFRFU1RORVRfVU5JRklFRCk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlY2lwaWVudC51bmlmaWVkQWRkcmVzcywgVEVTVE5FVF9VTklGSUVEKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVjaXBpZW50LmRlc3RpbmF0aW9uLnVuaWZpZWRBZGRyZXNzLCBURVNUTkVUX1VOSUZJRUQpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChCdWZmZXIuZnJvbShyZWNpcGllbnQuc2NyaXB0KS50b1N0cmluZygnaGV4JyksIElST05XT09EX1JFQ0VJVkVSLnRvU3RyaW5nKCdoZXgnKSk7XG4gICAgYXNzZXJ0RGVjb2Rlc0JhY2tUb0ZpeHR1cmVSZWNpcGllbnRzKHJlY2lwaWVudC51bmlmaWVkQWRkcmVzcyBhcyBzdHJpbmcpO1xuICB9KTtcblxuICBpdCgncmVwb3J0cyB0aGUgb3JpZ2luYWwgbXVsdGktcmVjZWl2ZXIgVUEgZm9yIGEgdHJhbnNwYXJlbnQgdjQgb3V0cHV0IGFuZCBkZWNvZGVzIGl0IGJhY2snLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgcmVjaXBpZW50cyA9IHR6ZWMucmVzb2x2ZVJlY2lwaWVudHNGcm9tUHNidChcbiAgICAgIEJ1ZmZlci5mcm9tKGJ1aWxkVHJhbnNwYXJlbnRWNFBzYnQoVEVTVE5FVF9VTklGSUVEKS5zZXJpYWxpemUoKSksXG4gICAgICB3YWxsZXRLZXlzXG4gICAgKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVjaXBpZW50cy5sZW5ndGgsIDEpO1xuICAgIGNvbnN0IHJlY2lwaWVudCA9IHJlY2lwaWVudHNbMF07XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlY2lwaWVudC5kZXN0aW5hdGlvbi5raW5kLCAnemNhc2hVbmlmaWVkVHJhbnNwYXJlbnQnKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVjaXBpZW50LmFkZHJlc3MsIFRFU1RORVRfVU5JRklFRCk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlY2lwaWVudC51bmlmaWVkQWRkcmVzcywgVEVTVE5FVF9VTklGSUVEKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVjaXBpZW50LmRlc3RpbmF0aW9uLnVuaWZpZWRBZGRyZXNzLCBURVNUTkVUX1VOSUZJRUQpO1xuICAgIGFzc2VydERlY29kZXNCYWNrVG9GaXh0dXJlUmVjaXBpZW50cyhyZWNpcGllbnQudW5pZmllZEFkZHJlc3MgYXMgc3RyaW5nKTtcbiAgfSk7XG5cbiAgaXQoJ3Jlc29sdmVzIHJlY2lwaWVudHMgZnJvbSBhIGhleCBQU0JUIHN0cmluZycsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBoZXggPSBCdWZmZXIuZnJvbShidWlsZFNoaWVsZGVkVjZQc2J0KCkuc2VyaWFsaXplKCkpLnRvU3RyaW5nKCdoZXgnKTtcbiAgICBjb25zdCByZWNpcGllbnRzID0gdHplYy5yZXNvbHZlUmVjaXBpZW50c0Zyb21Qc2J0KGhleCwgd2FsbGV0S2V5cyk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlY2lwaWVudHMubGVuZ3RoLCAxKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVjaXBpZW50c1swXS5kZXN0aW5hdGlvbi5raW5kLCAnemNhc2hTaGllbGRlZCcpO1xuICB9KTtcblxuICBpdCgndGhyb3dzIGZvciBhIG5vbi1aY2FzaCBQU0JUJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHBzYnQgPSBmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnQuY3JlYXRlRW1wdHkoJ2J0YycsIHdhbGxldEtleXMsIHt9KTtcbiAgICBwc2J0LmFkZFdhbGxldElucHV0KHsgdHhpZDogJzMzJy5yZXBlYXQoMzIpLCB2b3V0OiAwLCB2YWx1ZTogMTAwMG4gfSwgd2FsbGV0S2V5cywge1xuICAgICAgc2NyaXB0SWQ6IHsgY2hhaW46IDAsIGluZGV4OiAwIH0sXG4gICAgfSk7XG4gICAgLy8gWmVjLmRlY29kZVRyYW5zYWN0aW9uIGhhbmRzIHRoZSBidGMgUFNCVCB0byBaY2FzaFBzYnQuZnJvbUJ5dGVzLCB3aGljaCByZWplY3RzIGl0IGZvclxuICAgIC8vIGl0cyBtaXNzaW5nIFpjYXNoIGNvbnNlbnN1cyBicmFuY2ggSUQgYmVmb3JlIHRoZSBaY2FzaC10eXBlIGd1YXJkIGlzIGV2ZXIgcmVhY2hlZC5cbiAgICBhc3NlcnQudGhyb3dzKCgpID0+IHR6ZWMucmVzb2x2ZVJlY2lwaWVudHNGcm9tUHNidChCdWZmZXIuZnJvbShwc2J0LnNlcmlhbGl6ZSgpKSwgd2FsbGV0S2V5cykpO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZSgnWmVjIGdldEV4dHJhUHJlYnVpbGRQYXJhbXMgKHVuaWZpZWRSZWNpcGllbnRQcmVmZXJlbmNlIGZvcndhcmRpbmcpJywgZnVuY3Rpb24gKCkge1xuICBjb25zdCB6ZWMgPSBnZXRVdHhvQ29pbignemVjJyk7XG5cbiAgZnVuY3Rpb24gbW9ja1dhbGxldChjb2luID0gemVjKTogV2FsbGV0IHtcbiAgICByZXR1cm4gbmV3IFdhbGxldChkZWZhdWx0Qml0R28sIGNvaW4sIHsgaWQ6ICc1YjM0MjUyZjFiZjM0OTkzMGUzNDAyMGEnLCBjb2luOiBjb2luLmdldENoYWluKCksIHR5cGU6ICdob3QnIH0pO1xuICB9XG5cbiAgaXQoJ2ZvcndhcmRzIHVuaWZpZWRSZWNpcGllbnRQcmVmZXJlbmNlIHdoZW4gcHJlc2VudCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCB3YWxsZXQgPSBtb2NrV2FsbGV0KCk7XG4gICAgY29uc3QgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IGF3YWl0IHplYy5nZXRFeHRyYVByZWJ1aWxkUGFyYW1zKHtcbiAgICAgIHdhbGxldCxcbiAgICAgIHVuaWZpZWRSZWNpcGllbnRQcmVmZXJlbmNlOiAnc2hpZWxkZWQnLFxuICAgIH0pO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQudW5pZmllZFJlY2lwaWVudFByZWZlcmVuY2UsICdzaGllbGRlZCcpO1xuICB9KTtcblxuICBpdCgnZG9lcyBub3Qgc2V0IHVuaWZpZWRSZWNpcGllbnRQcmVmZXJlbmNlIHdoZW4gYWJzZW50JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHdhbGxldCA9IG1vY2tXYWxsZXQoKTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB6ZWMuZ2V0RXh0cmFQcmVidWlsZFBhcmFtcyh7IHdhbGxldCB9KTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoJ3VuaWZpZWRSZWNpcGllbnRQcmVmZXJlbmNlJyBpbiByZXN1bHQsIGZhbHNlKTtcbiAgfSk7XG5cbiAgaXQoJ3N0aWxsIHJldHVybnMgdGhlIHN0YW5kYXJkIGV4dHJhIHByZWJ1aWxkIHBhcmFtcyAodHhGb3JtYXQpIHVuY2hhbmdlZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCB3YWxsZXQgPSBtb2NrV2FsbGV0KCk7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgemVjLmdldEV4dHJhUHJlYnVpbGRQYXJhbXMoe1xuICAgICAgd2FsbGV0LFxuICAgICAgdW5pZmllZFJlY2lwaWVudFByZWZlcmVuY2U6ICdzaGllbGRlZCcsXG4gICAgfSk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdC50eEZvcm1hdCwgJ3BzYnQtbGl0ZScpO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZSgnWmVjIHNpZ25UcmFuc2FjdGlvbiAodjYgSXJvbndvb2QgdHJhbnNwYXJlbnQtaW5wdXQgc2lnbmluZyknLCBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IHplYyA9IGdldFV0eG9Db2luKCd0emVjJykgYXMgWmVjO1xuICBjb25zdCB7IHhwdWJzIH0gPSBnZXREZWZhdWx0V2FzbVdhbGxldEtleXMoKTtcbiAgY29uc3QgW3VzZXJLZXljaGFpbiwgYmFja3VwS2V5Y2hhaW4sIGJpdGdvS2V5Y2hhaW5dID0ga2V5Y2hhaW5zQmFzZTU4O1xuICBjb25zdCBwdWJzOiBUcmlwbGU8c3RyaW5nPiA9IFt1c2VyS2V5Y2hhaW4ucHViLCBiYWNrdXBLZXljaGFpbi5wdWIsIGJpdGdvS2V5Y2hhaW4ucHViXTtcblxuICBpdCgnc2lnbnMgdGhlIHRyYW5zcGFyZW50IGlucHV0cyB3aXRoIHRoZSB1c2VyIGtleSBhbmQgZmluYWxpemVzIHRoZSBzaGllbGRlZCBvdXRfY2lwaGVydGV4dCAob3ZrIHZpYSBFQ0RIKScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBzaWduZWQgPSBhd2FpdCB6ZWMuc2lnblRyYW5zYWN0aW9uKHtcbiAgICAgIHR4UHJlYnVpbGQ6IHsgdHhIZXg6IGJ1aWxkU2hpZWxkZWRWNlByZWJ1aWxkSGV4KCkgfSxcbiAgICAgIHBydjogdXNlcktleWNoYWluLnBydixcbiAgICAgIHB1YnMsXG4gICAgfSk7XG4gICAgYXNzZXJ0Lm9rKCd0eEhleCcgaW4gc2lnbmVkKTtcbiAgICBjb25zdCB7IHR4SGV4IH0gPSBzaWduZWQ7XG4gICAgLy8gVGhlIGhhbGYtc2lnbmVkIHJlc3VsdCBpcyB0aGUgdjYgUFNCVCB3aXRoIHRoZSB1c2VyJ3MgRUNEU0Egc2lnbmF0dXJlcyBvdmVyIHRoZVxuICAgIC8vIFpJUC0yNDQgdHJhbnNwYXJlbnQgc2lnaGFzaC4gRGVyaXZpbmcgdGhlIG92ayAoRUNESCBvZiB0aGUgQml0R28gcm9vdCBwdWJrZXkgYW5kIHRoZVxuICAgIC8vIHVzZXIgcm9vdCBrZXkpIGFuZCBmaW5hbGl6aW5nIG91dF9jaXBoZXJ0ZXh0IGhhcHBlbnMgaW5zaWRlIHNpZ24oKSwgYmVmb3JlIGFueVxuICAgIC8vIHNpZ2hhc2ggaXMgY29tcHV0ZWQg4oCUIGEgZmFpbGluZyBvdmsgc3RlcCBhYm9ydHMgdGhlIHdob2xlIHJvdW5kLlxuICAgIGNvbnN0IHBzYnQgPSB6ZWMuZGVjb2RlVHJhbnNhY3Rpb24oQnVmZmVyLmZyb20odHhIZXgsICdoZXgnKSk7XG4gICAgYXNzZXJ0Lm9rKHBzYnQgaW5zdGFuY2VvZiBmaXhlZFNjcmlwdFdhbGxldC5aY2FzaElyb253b29kQml0R29Qc2J0KTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwocHNidC52ZXJpZnlTaWduYXR1cmUoMCwgeHB1YnNbMF0pLCB0cnVlKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwocHNidC52ZXJpZnlTaWduYXR1cmUoMCwgeHB1YnNbMl0pLCBmYWxzZSk7XG4gIH0pO1xuXG4gIGl0KCdvdXRfY2lwaGVydGV4dCBzdXJ2aXZlcyB0aGUgc2VyaWFsaXplIHJvdW5kLXRyaXA6IHRoZSBCaXRHbyBjb3VudGVyc2lnbmluZyByb3VuZCBzdWNjZWVkcyBvbiBpdCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCB1c2VyUm91bmQgPSBhd2FpdCB6ZWMuc2lnblRyYW5zYWN0aW9uKHtcbiAgICAgIHR4UHJlYnVpbGQ6IHsgdHhIZXg6IGJ1aWxkU2hpZWxkZWRWNlByZWJ1aWxkSGV4KCkgfSxcbiAgICAgIHBydjogdXNlcktleWNoYWluLnBydixcbiAgICAgIHB1YnMsXG4gICAgfSk7XG4gICAgYXNzZXJ0Lm9rKCd0eEhleCcgaW4gdXNlclJvdW5kKTtcbiAgICBjb25zdCBiaXRnb1JvdW5kID0gYXdhaXQgemVjLnNpZ25UcmFuc2FjdGlvbih7XG4gICAgICB0eFByZWJ1aWxkOiB7IHR4SGV4OiB1c2VyUm91bmQudHhIZXggfSxcbiAgICAgIHBydjogYml0Z29LZXljaGFpbi5wcnYsXG4gICAgICBwdWJzLFxuICAgIH0pO1xuICAgIGFzc2VydC5vaygndHhIZXgnIGluIGJpdGdvUm91bmQpO1xuICAgIGNvbnN0IHBzYnQgPSB6ZWMuZGVjb2RlVHJhbnNhY3Rpb24oQnVmZmVyLmZyb20oYml0Z29Sb3VuZC50eEhleCwgJ2hleCcpKTtcbiAgICBhc3NlcnQub2socHNidCBpbnN0YW5jZW9mIGZpeGVkU2NyaXB0V2FsbGV0LlpjYXNoSXJvbndvb2RCaXRHb1BzYnQpO1xuICAgIC8vIEZ1bGx5IHNpZ25lZCB0cmFuc3BhcmVudCBpbnB1dHM6IGJvdGggdGhlIHVzZXIgYW5kIEJpdEdvIHNpZ25hdHVyZXMgdmVyaWZ5IGFnYWluc3RcbiAgICAvLyB0aGUgdjYgKFpJUC0yNDQpIHNpZ2hhc2gg4oCUIHRoZSBwcm9vZiBzZXJ2aWNlIHRha2VzIGl0IGZyb20gaGVyZSB2aWEgY29tYmluZVByb29mLlxuICAgIGFzc2VydC5zdHJpY3RFcXVhbChwc2J0LnZlcmlmeVNpZ25hdHVyZSgwLCB4cHVic1swXSksIHRydWUpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChwc2J0LnZlcmlmeVNpZ25hdHVyZSgwLCB4cHVic1syXSksIHRydWUpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChwc2J0LnZlcmlmeVNpZ25hdHVyZSgwLCB4cHVic1sxXSksIGZhbHNlKTtcbiAgfSk7XG5cbiAgaXQoJ3JlamVjdHMgYSBmaXJzdCBzaWduaW5nIHJvdW5kIG9wZW5lZCBieSBhIG5vbi11c2VyIGtleScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAvLyBUaGUgd2FzbSBkZXJpdmVzIHRoZSBvdmsgZnJvbSB0aGUgZmlyc3Qtcm91bmQgc2lnbmVyJ3Mga2V5OiBhIHJvdW5kIG9wZW5lZCBieSB0aGVcbiAgICAvLyBiYWNrdXAgb3IgQml0R28ga2V5IHdvdWxkIHByb2R1Y2UgYW4gb3V0X2NpcGhlcnRleHQgbmVpdGhlciB0aGUgdXNlciBub3IgdGhlIHNlcnZlclxuICAgIC8vIGNhbiByZS1kZXJpdmUsIGxlYXZpbmcgdGhlIHNoaWVsZGVkIG91dHB1dCB1bnJlY292ZXJhYmxlLlxuICAgIGF3YWl0IGFzc2VydC5yZWplY3RzKFxuICAgICAgemVjLnNpZ25UcmFuc2FjdGlvbih7XG4gICAgICAgIHR4UHJlYnVpbGQ6IHsgdHhIZXg6IGJ1aWxkU2hpZWxkZWRWNlByZWJ1aWxkSGV4KCkgfSxcbiAgICAgICAgcHJ2OiBiaXRnb0tleWNoYWluLnBydixcbiAgICAgICAgcHVicyxcbiAgICAgIH0pLFxuICAgICAgL3VzZXIvXG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoJ3JlcXVpcmVzIHJvb3RXYWxsZXRLZXlzIHdoZW4gc2lnbmluZyBhbiBJcm9ud29vZCBQU0JUJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHBzYnQgPSBmaXhlZFNjcmlwdFdhbGxldC5aY2FzaElyb253b29kQml0R29Qc2J0LmZyb21CeXRlcyhcbiAgICAgIEJ1ZmZlci5mcm9tKGJ1aWxkU2hpZWxkZWRWNlByZWJ1aWxkSGV4KCksICdoZXgnKSxcbiAgICAgICd0emVjJ1xuICAgICk7XG4gICAgY29uc3QgeyB4cHJpdnMgfSA9IGdldERlZmF1bHRXYXNtV2FsbGV0S2V5cygpO1xuICAgIC8vIFdpdGhvdXQgcm9vdFdhbGxldEtleXMgdGhlIG92ayBzdGVwIGNhbm5vdCBydW4sIHNvIHNpZ24oKSB0aHJvd3MgYXQgcnVudGltZSByYXRoZXJcbiAgICAvLyB0aGFuIHNpbGVudGx5IHNraXBwaW5nIGl0IOKAlCB0aGUgc2lnbmluZyBkaXNwYXRjaCBtdXN0IGFsd2F5cyBwYXNzIHJvb3RXYWxsZXRLZXlzLlxuICAgIGFzc2VydC50aHJvd3MoKCkgPT4gcHNidC5zaWduKHhwcml2c1swXSkpO1xuICB9KTtcblxuICBpdCgnc2lnbnMgYSB2NCAoU2FwbGluZy1zaGFwZWQpIHBzYnQgdGhyb3VnaCB0aGUgZ2VuZXJpYyBzaWduaW5nIHBhdGgnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgLy8gVGhlIHNpZ25UcmFuc2FjdGlvbiBvdmVycmlkZSByb3V0ZXMgb25seSB2NiAoSXJvbndvb2QpIHByZWJ1aWxkczsgYSB2NCBwcmVidWlsZCBtdXN0XG4gICAgLy8ga2VlcCBmbG93aW5nIHRocm91Z2ggdGhlIGdlbmVyaWMgcGF0aCB1bmNoYW5nZWQuXG4gICAgY29uc3QgcHNidCA9IGZpeGVkU2NyaXB0V2FsbGV0LlpjYXNoQml0R29Qc2J0LmNyZWF0ZUVtcHR5KCd0emVjJywgd2FsbGV0S2V5cywgeyBibG9ja0hlaWdodDogMzE0NjQwMCB9KTtcbiAgICBwc2J0LmFkZFdhbGxldElucHV0KHsgdHhpZDogJzQ0Jy5yZXBlYXQoMzIpLCB2b3V0OiAwLCB2YWx1ZTogMTAwMDAwbiB9LCB3YWxsZXRLZXlzLCB7XG4gICAgICBzY3JpcHRJZDogeyBjaGFpbjogMCwgaW5kZXg6IDAgfSxcbiAgICB9KTtcbiAgICBwc2J0LmFkZFdhbGxldE91dHB1dCh3YWxsZXRLZXlzLCB7IGNoYWluOiAxLCBpbmRleDogMCwgdmFsdWU6IDkwMDAwbiB9KTtcbiAgICBjb25zdCBzaWduZWQgPSBhd2FpdCB6ZWMuc2lnblRyYW5zYWN0aW9uKHtcbiAgICAgIHR4UHJlYnVpbGQ6IHsgdHhIZXg6IEJ1ZmZlci5mcm9tKHBzYnQuc2VyaWFsaXplKCkpLnRvU3RyaW5nKCdoZXgnKSB9LFxuICAgICAgcHJ2OiB1c2VyS2V5Y2hhaW4ucHJ2LFxuICAgICAgcHVicyxcbiAgICB9KTtcbiAgICBhc3NlcnQub2soJ3R4SGV4JyBpbiBzaWduZWQpO1xuICAgIGNvbnN0IGRlY29kZWQgPSB6ZWMuZGVjb2RlVHJhbnNhY3Rpb24oQnVmZmVyLmZyb20oc2lnbmVkLnR4SGV4LCAnaGV4JykpO1xuICAgIGFzc2VydC5vayhkZWNvZGVkIGluc3RhbmNlb2YgZml4ZWRTY3JpcHRXYWxsZXQuWmNhc2hCaXRHb1BzYnQpO1xuICAgIGFzc2VydC5vayghKGRlY29kZWQgaW5zdGFuY2VvZiBmaXhlZFNjcmlwdFdhbGxldC5aY2FzaElyb253b29kQml0R29Qc2J0KSk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGRlY29kZWQudmVyaWZ5U2lnbmF0dXJlKDAsIHhwdWJzWzBdKSwgdHJ1ZSk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKCdaZWMgc2hpZWxkZWQgb3V0X2NpcGhlcnRleHQgKG92ayBkZXJpdmF0aW9uKScsIGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgeyB4cHJpdnMgfSA9IGdldERlZmF1bHRXYXNtV2FsbGV0S2V5cygpO1xuXG4gIGZ1bmN0aW9uIGJ1aWxkUHNidChidWlsZE92az86IFVpbnQ4QXJyYXkpOiBmaXhlZFNjcmlwdFdhbGxldC5aY2FzaElyb253b29kQml0R29Qc2J0IHtcbiAgICBjb25zdCBwc2J0ID0gZml4ZWRTY3JpcHRXYWxsZXQuWmNhc2hJcm9ud29vZEJpdEdvUHNidC5jcmVhdGVFbXB0eSgndHplYycsIHdhbGxldEtleXMsIHsgYmxvY2tIZWlnaHQ6IDQyMDAwMDAgfSk7XG4gICAgcHNidC5hZGRXYWxsZXRJbnB1dCh7IHR4aWQ6ICcxMScucmVwZWF0KDMyKSwgdm91dDogMCwgdmFsdWU6IDEwMDAwMG4gfSwgd2FsbGV0S2V5cywge1xuICAgICAgc2NyaXB0SWQ6IHsgY2hhaW46IDAsIGluZGV4OiAwIH0sXG4gICAgfSk7XG4gICAgcHNidC5hZGRXYWxsZXRPdXRwdXQod2FsbGV0S2V5cywgeyBjaGFpbjogMSwgaW5kZXg6IDAsIHZhbHVlOiA5MDAwMG4gfSk7XG4gICAgcHNidC5hZGRTaGllbGRlZE91dHB1dHMoXG4gICAgICBbXG4gICAgICAgIHtcbiAgICAgICAgICByZWNpcGllbnQ6IG5ldyBVaW50OEFycmF5KElST05XT09EX1JFQ0VJVkVSKSxcbiAgICAgICAgICBhbW91bnQ6IDUwMDBuLFxuICAgICAgICAgIHVuaWZpZWRBZGRyZXNzLFxuICAgICAgICAgIC4uLihidWlsZE92ayA/IHsgb3ZrOiBidWlsZE92ayB9IDoge30pLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIG5ldyBVaW50OEFycmF5KDMyKVxuICAgICk7XG4gICAgcmV0dXJuIHBzYnQ7XG4gIH1cblxuICBmdW5jdGlvbiBwY3p0T2YocHNidDogZml4ZWRTY3JpcHRXYWxsZXQuWmNhc2hJcm9ud29vZEJpdEdvUHNidCk6IEJ1ZmZlciB7XG4gICAgY29uc3QgcGN6dCA9IHBzYnQuZ2V0UGN6dCgpO1xuICAgIGFzc2VydC5vayhwY3p0LCAnZXhwZWN0ZWQgdGhlIG9yY2hhcmQgUENaVCB0byBiZSBwcmVzZW50Jyk7XG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHBjenQpO1xuICB9XG5cbiAgaXQoJ3NpZ24oKSBmaW5hbGl6ZXMgb3V0X2NpcGhlcnRleHQgdG8gdGhlIHNhbWUgYnl0ZXMgYXMgdGhlIGV4cGxpY2l0IGNsaWVudC1tYW5hZ2VkLW92ayBkZXJpdmF0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgIC8vIG91dF9jaXBoZXJ0ZXh0IGVuY3J5cHRpb24gaXMgZGV0ZXJtaW5pc3RpYyBnaXZlbiB0aGUgKGlkZW50aWNhbCkgb3JjaGFyZCBhY3Rpb24gYW5kIHRoZVxuICAgIC8vIG92aywgc28gYnl0ZS1lcXVhbGl0eSBvZiB0aGUgUENaVCBwcm92ZXMgc2lnbigpJ3MgaW1wbGljaXQgZGVyaXZhdGlvbiBpcyBleGFjdGx5IHRoZVxuICAgIC8vIGRvY3VtZW50ZWQgb25lOiB0aGUgRUNESCBhZ3JlZW1lbnQgb2Ygcm9vdFdhbGxldEtleXMuYml0Z29LZXkoKSBhbmQgdGhlIHVzZXIgcm9vdCBrZXkuXG4gICAgY29uc3QgYnl0ZXMgPSBidWlsZFBzYnQoKS5zZXJpYWxpemUoKTtcbiAgICBjb25zdCBhdXRvUHNidCA9IGZpeGVkU2NyaXB0V2FsbGV0LlpjYXNoSXJvbndvb2RCaXRHb1BzYnQuZnJvbUJ5dGVzKGJ5dGVzLCAndHplYycpO1xuICAgIGF1dG9Qc2J0LnNpZ24oeHByaXZzWzBdLCB3YWxsZXRLZXlzKTtcbiAgICBjb25zdCBtYW51YWxQc2J0ID0gZml4ZWRTY3JpcHRXYWxsZXQuWmNhc2hJcm9ud29vZEJpdEdvUHNidC5mcm9tQnl0ZXMoYnl0ZXMsICd0emVjJyk7XG4gICAgbWFudWFsUHNidC5zZXRTaGllbGRlZE91dENpcGhlcnRleHQoMCwgeHByaXZzWzBdLCB3YWxsZXRLZXlzKTtcbiAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKHBjenRPZihhdXRvUHNidCksIHBjenRPZihtYW51YWxQc2J0KSk7XG4gIH0pO1xuXG4gIGl0KCdvdXRfY2lwaGVydGV4dCBkaWZmZXJzIHdoZW4gZW5jcnlwdGVkIHVuZGVyIGRpZmZlcmVudCBvdmtzJywgZnVuY3Rpb24gKCkge1xuICAgIC8vIFRoZSBiaW5kaW5nIGJldHdlZW4gb3V0X2NpcGhlcnRleHQgYW5kIHRoZSBvdmsgaXMgcmVhbDogdHdvIGJ1aWxkcyBpZGVudGljYWwgZXhjZXB0IGZvclxuICAgIC8vIHRoZSBidWlsZC10aW1lIG92ayBwcm9kdWNlIGRpZmZlcmVudCBQQ1pUcywgc28gdGhlIGVxdWFsaXR5IGFzc2VydGlvbnMgaGVyZSBhcmUgbm90XG4gICAgLy8gdmFjdW91cyAob3V0X2NpcGhlcnRleHQgY2Fubm90IGJlIGEgY29uc3RhbnQpLlxuICAgIGFzc2VydC5ub3REZWVwU3RyaWN0RXF1YWwoXG4gICAgICBwY3p0T2YoYnVpbGRQc2J0KG5ldyBVaW50OEFycmF5KDMyKS5maWxsKDEpKSksXG4gICAgICBwY3p0T2YoYnVpbGRQc2J0KG5ldyBVaW50OEFycmF5KDMyKS5maWxsKDIpKSlcbiAgICApO1xuICB9KTtcblxuICBpdCgnc2lnbigpIG92ZXJyaWRlcyBhIGJ1aWxkLXRpbWUgb3ZrIHdpdGggdGhlIHdhbGxldCBvdmsnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgYnl0ZXMgPSBidWlsZFBzYnQobmV3IFVpbnQ4QXJyYXkoMzIpLmZpbGwoMSkpLnNlcmlhbGl6ZSgpO1xuICAgIGNvbnN0IGJ1aWx0UHNidCA9IGZpeGVkU2NyaXB0V2FsbGV0LlpjYXNoSXJvbndvb2RCaXRHb1BzYnQuZnJvbUJ5dGVzKGJ5dGVzLCAndHplYycpO1xuICAgIGNvbnN0IHNpZ25lZFBzYnQgPSBmaXhlZFNjcmlwdFdhbGxldC5aY2FzaElyb253b29kQml0R29Qc2J0LmZyb21CeXRlcyhieXRlcywgJ3R6ZWMnKTtcbiAgICBzaWduZWRQc2J0LnNpZ24oeHByaXZzWzBdLCB3YWxsZXRLZXlzKTtcbiAgICAvLyBUaGUgZmlyc3Qgc2lnbmluZyByb3VuZCByZS1lbmNyeXB0cyBvdXRfY2lwaGVydGV4dCB1bmRlciB0aGUgd2FsbGV0IG92aywgZGlzY2FyZGluZyB0aGVcbiAgICAvLyBidWlsZC10aW1lIG9uZS4uLlxuICAgIGFzc2VydC5ub3REZWVwU3RyaWN0RXF1YWwocGN6dE9mKHNpZ25lZFBzYnQpLCBwY3p0T2YoYnVpbHRQc2J0KSk7XG4gICAgLy8gLi4uYW5kIHRoZSByZXN1bHQgaXMgYnl0ZS1pZGVudGljYWwgdG8gdGhlIGV4cGxpY2l0IHdhbGxldC1vdmsgZGVyaXZhdGlvbi5cbiAgICBjb25zdCBtYW51YWxQc2J0ID0gZml4ZWRTY3JpcHRXYWxsZXQuWmNhc2hJcm9ud29vZEJpdEdvUHNidC5mcm9tQnl0ZXMoYnl0ZXMsICd0emVjJyk7XG4gICAgbWFudWFsUHNidC5zZXRTaGllbGRlZE91dENpcGhlcnRleHQoMCwgeHByaXZzWzBdLCB3YWxsZXRLZXlzKTtcbiAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKHBjenRPZihzaWduZWRQc2J0KSwgcGN6dE9mKG1hbnVhbFBzYnQpKTtcbiAgfSk7XG5cbiAgaXQoJ3JlamVjdHMgYW4gb3ZrIGRlcml2ZWQgZnJvbSBhIG5vbi11c2VyIGtleScsIGZ1bmN0aW9uICgpIHtcbiAgICAvLyBBbiBvdmsgZnJvbSB0aGUgYmFja3VwIG9yIEJpdEdvIGtleSBpcyBvbmUgbmVpdGhlciB0aGUgdXNlciBub3IgdGhlIHNlcnZlciBjYW5cbiAgICAvLyByZXByb2R1Y2UsIHdoaWNoIHdvdWxkIGxlYXZlIHRoZSBzaGllbGRlZCBvdXRwdXQgdW5yZWNvdmVyYWJsZSBhZnRlciBicm9hZGNhc3QuXG4gICAgY29uc3QgcHNidCA9IGJ1aWxkUHNidCgpO1xuICAgIGFzc2VydC50aHJvd3MoKCkgPT4gcHNidC5zZXRTaGllbGRlZE91dENpcGhlcnRleHQoMCwgeHByaXZzWzFdLCB3YWxsZXRLZXlzKSk7XG4gICAgYXNzZXJ0LnRocm93cygoKSA9PiBwc2J0LnNldFNoaWVsZGVkT3V0Q2lwaGVydGV4dCgwLCB4cHJpdnNbMl0sIHdhbGxldEtleXMpKTtcbiAgfSk7XG59KTtcbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=shieldedAddress.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shieldedAddress.d.ts","sourceRoot":"","sources":["../../../../../../../test/unit/impl/zec/unit/shieldedAddress.ts"],"names":[],"mappings":""}