@bitgo-beta/unspents 0.13.2-beta.207 → 0.13.2-beta.2071

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 (41) hide show
  1. package/README.md +0 -9
  2. package/dist/bin/generate_tables.js +25 -12
  3. package/dist/src/codes.d.ts +10 -10
  4. package/dist/src/codes.d.ts.map +1 -1
  5. package/dist/src/codes.js +27 -13
  6. package/dist/src/dimensions.d.ts +13 -15
  7. package/dist/src/dimensions.d.ts.map +1 -1
  8. package/dist/src/dimensions.js +30 -16
  9. package/dist/src/index.d.ts +1 -0
  10. package/dist/src/index.d.ts.map +1 -1
  11. package/dist/src/index.js +26 -10
  12. package/dist/src/inputWeights.d.ts +3 -3
  13. package/dist/src/inputWeights.d.ts.map +1 -1
  14. package/dist/src/inputWeights.js +6 -6
  15. package/dist/src/scriptSizes.js +3 -4
  16. package/dist/src/types.js +23 -9
  17. package/dist/src/virtualSizes.d.ts +12 -12
  18. package/dist/src/virtualSizes.js +2 -2
  19. package/dist/src/zcash.js +4 -6
  20. package/dist/test/dimensions.js +26 -12
  21. package/dist/test/signedTx/inputWeights.js +27 -13
  22. package/dist/test/signedTx/txCombinations.d.ts +1 -1
  23. package/dist/test/signedTx/txCombinations.d.ts.map +1 -1
  24. package/dist/test/signedTx/txCombinations.js +29 -15
  25. package/dist/test/signedTx/txGen.d.ts +2 -3
  26. package/dist/test/signedTx/txGen.d.ts.map +1 -1
  27. package/dist/test/signedTx/txGen.js +26 -12
  28. package/dist/test/testutils.d.ts +2 -2
  29. package/dist/test/testutils.d.ts.map +1 -1
  30. package/dist/test/testutils.js +28 -14
  31. package/dist/test/zcash.js +8 -8
  32. package/dist/tsconfig.build.tsbuildinfo +1 -1
  33. package/dist/tsconfig.tsbuildinfo +1 -1
  34. package/package.json +9 -6
  35. package/.eslintignore +0 -1
  36. package/.eslintrc.js +0 -3
  37. package/.mocharc.js +0 -6
  38. package/.prettierrc.yml +0 -3
  39. package/CHANGELOG.md +0 -479
  40. package/bin/generate_tables.ts +0 -94
  41. package/docs/input-costs.md +0 -13
@@ -1,4 +1,3 @@
1
- /// <reference types="node" />
2
1
  import * as utxolib from '@bitgo-beta/utxo-lib';
3
2
  import { BIP32Interface } from '@bitgo-beta/utxo-lib';
4
3
  import 'lodash.combinations';
@@ -24,11 +23,11 @@ declare class TxCombo {
24
23
  inputTypes: string[];
25
24
  outputTypes: TestUnspentType[];
26
25
  expectedDims: Readonly<Dimensions>;
27
- signKeys?: utxolib.BIP32Interface[] | undefined;
26
+ signKeys?: BIP32Interface[];
28
27
  inputValue: number;
29
28
  unspents: IUnspent[];
30
29
  inputTx: any;
31
- constructor(walletKeys: BIP32Interface[], inputTypes: string[], outputTypes: TestUnspentType[], expectedDims?: Readonly<Dimensions>, signKeys?: utxolib.BIP32Interface[] | undefined, inputValue?: number);
30
+ constructor(walletKeys: BIP32Interface[], inputTypes: string[], outputTypes: TestUnspentType[], expectedDims?: Readonly<Dimensions>, signKeys?: BIP32Interface[], inputValue?: number);
32
31
  getBuilderWithUnsignedTx(): utxolib.bitgo.UtxoTransactionBuilder;
33
32
  getUnsignedTx(): utxolib.bitgo.UtxoTransaction;
34
33
  getSignedTx(): utxolib.Transaction;
@@ -1 +1 @@
1
- {"version":3,"file":"txGen.d.ts","sourceRoot":"","sources":["../../../test/signedTx/txGen.ts"],"names":[],"mappings":";AAEA,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAS,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE7D,OAAO,qBAAqB,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EACL,eAAe,EACf,eAAe,EAKhB,MAAM,cAAc,CAAC;AAEtB,UAAU,QAAQ;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,UAAU,CAAC;CACnD;AAoBD;;;;;;GAMG;AACH,eAAO,MAAM,kBAAkB,SAAU,cAAc,EAAE,eAAe,eAAe,KAAG,MAoBzF,CAAC;AAqCF,cAAM,OAAO;IAKF,UAAU,EAAE,cAAc,EAAE;IAC5B,UAAU,EAAE,MAAM,EAAE;IACpB,WAAW,EAAE,eAAe,EAAE;IAC9B,YAAY,EAAE,QAAQ,CAAC,UAAU,CAAC;IAClC,QAAQ,CAAC;IACT,UAAU,EAAE,MAAM;IATpB,QAAQ,EAAE,QAAQ,EAAE,CAAC;IACrB,OAAO,EAAE,GAAG,CAAC;gBAGX,UAAU,EAAE,cAAc,EAAE,EAC5B,UAAU,EAAE,MAAM,EAAE,EACpB,WAAW,EAAE,eAAe,EAAE,EAC9B,YAAY,GAAE,QAAQ,CAAC,UAAU,CAAmB,EACpD,QAAQ,CAAC,sCAAkB,EAC3B,UAAU,GAAE,MAAW;IAYzB,wBAAwB,IAAI,OAAO,CAAC,KAAK,CAAC,sBAAsB;IAShE,aAAa,IAAI,OAAO,CAAC,KAAK,CAAC,eAAe;IAI9C,WAAW,IAAI,OAAO,CAAC,WAAW;CAO1C;AAED,QAAA,MAAM,eAAe;gBAOL,eAAe,EAAE;gBACjB,MAAM;iBACL,eAAe,EAAE;iBACjB,MAAM;0BAEE,eAAe,EAAE,eAAe,eAAe,EAAE,KAAK,IAAI,KAChF,IAgBF,CAAC;AAEF,cAAM,SAAS;IAGM,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;IAFpC,KAAK,SAAK;gBAEE,GAAG,GAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAa;IAEhD,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAKvB,aAAa,IAAI,MAAM,EAAE,EAAE;IAI3B,iBAAiB,IAAI,MAAM,EAAE,EAAE;IAI/B,aAAa,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM;IAgBhC,QAAQ,IAAI,MAAM;CAI1B;AAOD;;;;;;;;;;;;GAYG;AACH,QAAA,MAAM,qBAAqB;gBAOX,MAAM;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;uBACpC,MAAM;iBACZ,eAAe,EAAE;wBACV,MAAM;yBAEN,MAAM,cAAc,MAAM,cAAc,eAAe,OAAO,GAAG,KAAK,IAAI,KAC/F,IAyCF,CAAC;AAEF,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,qBAAqB,EAAE,CAAC"}
1
+ {"version":3,"file":"txGen.d.ts","sourceRoot":"","sources":["../../../test/signedTx/txGen.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAS,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE7D,OAAO,qBAAqB,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EACL,eAAe,EACf,eAAe,EAKhB,MAAM,cAAc,CAAC;AAEtB,UAAU,QAAQ;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,UAAU,CAAC;CACnD;AAoBD;;;;;;GAMG;AACH,eAAO,MAAM,kBAAkB,SAAU,cAAc,EAAE,eAAe,eAAe,KAAG,MAoBzF,CAAC;AAqCF,cAAM,OAAO;IACJ,UAAU,EAAE,cAAc,EAAE,CAAC;IAC7B,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,WAAW,EAAE,eAAe,EAAE,CAAC;IAC/B,YAAY,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;IACnC,QAAQ,CAAC,EAAE,cAAc,EAAE,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,QAAQ,EAAE,CAAC;IACrB,OAAO,EAAE,GAAG,CAAC;gBAGlB,UAAU,EAAE,cAAc,EAAE,EAC5B,UAAU,EAAE,MAAM,EAAE,EACpB,WAAW,EAAE,eAAe,EAAE,EAC9B,YAAY,GAAE,QAAQ,CAAC,UAAU,CAAmB,EACpD,QAAQ,CAAC,EAAE,cAAc,EAAE,EAC3B,UAAU,SAAK;IAkBV,wBAAwB,IAAI,OAAO,CAAC,KAAK,CAAC,sBAAsB;IAShE,aAAa,IAAI,OAAO,CAAC,KAAK,CAAC,eAAe;IAI9C,WAAW,IAAI,OAAO,CAAC,WAAW;CAO1C;AAED,QAAA,MAAM,eAAe,0DAMhB;IACD,UAAU,EAAE,eAAe,EAAE,CAAC;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,eAAe,EAAE,CAAC;IAC/B,WAAW,EAAE,MAAM,CAAC;CACrB,YACS,CAAC,UAAU,EAAE,eAAe,EAAE,EAAE,WAAW,EAAE,eAAe,EAAE,KAAK,IAAI,KAChF,IAgBF,CAAC;AAEF,cAAM,SAAS;IACN,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzB,KAAK,SAAK;gBAEL,GAAG,GAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAa;IAIzC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAKvB,aAAa,IAAI,MAAM,EAAE,EAAE;IAI3B,iBAAiB,IAAI,MAAM,EAAE,EAAE;IAI/B,aAAa,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM;IAgBhC,QAAQ,IAAI,MAAM;CAI1B;AAOD;;;;;;;;;;;;GAYG;AACH,QAAA,MAAM,qBAAqB,wEAMtB;IACD,UAAU,EAAE,KAAK,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACxD,iBAAiB,EAAE,MAAM,CAAC;IAC1B,WAAW,EAAE,eAAe,EAAE,CAAC;IAC/B,kBAAkB,EAAE,MAAM,CAAC;CAC5B,YACS,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,eAAe,EAAE,GAAG,EAAE,GAAG,KAAK,IAAI,KAC/F,IAyCF,CAAC;AAEF,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,qBAAqB,EAAE,CAAC"}
@@ -2,7 +2,11 @@
2
2
  /* eslint-disable @typescript-eslint/ban-ts-comment */
3
3
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4
4
  if (k2 === undefined) k2 = k;
5
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ var desc = Object.getOwnPropertyDescriptor(m, k);
6
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
+ desc = { enumerable: true, get: function() { return m[k]; } };
8
+ }
9
+ Object.defineProperty(o, k2, desc);
6
10
  }) : (function(o, m, k, k2) {
7
11
  if (k2 === undefined) k2 = k;
8
12
  o[k2] = m[k];
@@ -12,13 +16,23 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
12
16
  }) : function(o, v) {
13
17
  o["default"] = v;
14
18
  });
15
- var __importStar = (this && this.__importStar) || function (mod) {
16
- if (mod && mod.__esModule) return mod;
17
- var result = {};
18
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
19
- __setModuleDefault(result, mod);
20
- return result;
21
- };
19
+ var __importStar = (this && this.__importStar) || (function () {
20
+ var ownKeys = function(o) {
21
+ ownKeys = Object.getOwnPropertyNames || function (o) {
22
+ var ar = [];
23
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
24
+ return ar;
25
+ };
26
+ return ownKeys(o);
27
+ };
28
+ return function (mod) {
29
+ if (mod && mod.__esModule) return mod;
30
+ var result = {};
31
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
32
+ __setModuleDefault(result, mod);
33
+ return result;
34
+ };
35
+ })();
22
36
  var __importDefault = (this && this.__importDefault) || function (mod) {
23
37
  return (mod && mod.__esModule) ? mod : { "default": mod };
24
38
  };
@@ -108,7 +122,7 @@ class TxCombo {
108
122
  getBuilderWithUnsignedTx() {
109
123
  const txBuilder = utxolib.bitgo.createTransactionBuilderForNetwork(utxolib.networks.bitcoin);
110
124
  this.inputTx.outs.forEach(({}, i) => txBuilder.addInput(this.inputTx, i));
111
- this.outputTypes.forEach((unspentType) => txBuilder.addOutput(exports.createScriptPubKey(this.walletKeys, unspentType), this.inputValue));
125
+ this.outputTypes.forEach((unspentType) => txBuilder.addOutput((0, exports.createScriptPubKey)(this.walletKeys, unspentType), this.inputValue));
112
126
  return txBuilder;
113
127
  }
114
128
  getUnsignedTx() {
@@ -138,8 +152,8 @@ const runCombinations = ({ inputTypes, maxNInputs, outputTypes, maxNOutputs, },
138
152
  exports.runCombinations = runCombinations;
139
153
  class Histogram {
140
154
  constructor(map = new Map()) {
141
- this.map = map;
142
155
  this.total = 0;
156
+ this.map = map;
143
157
  }
144
158
  add(size) {
145
159
  this.map.set(size, (this.map.get(size) || 0) + 1);
@@ -195,7 +209,7 @@ const runSignedTransactions = ({ inputTypes, nInputKeyTriplets, outputTypes, nOu
195
209
  return { inputKeys, unspents, inputTx };
196
210
  });
197
211
  outputTypes.forEach((outputType) => {
198
- const outputs = outputKeyTriplets.map((outputKeys) => exports.createScriptPubKey(outputKeys, outputType));
212
+ const outputs = outputKeyTriplets.map((outputKeys) => (0, exports.createScriptPubKey)(outputKeys, outputType));
199
213
  const txs = {
200
214
  forEach(cb) {
201
215
  inputTxs.forEach(({ inputKeys, unspents, inputTx }) => {
@@ -216,4 +230,4 @@ const runSignedTransactions = ({ inputTypes, nInputKeyTriplets, outputTypes, nOu
216
230
  });
217
231
  };
218
232
  exports.runSignedTransactions = runSignedTransactions;
219
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHhHZW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZXN0L3NpZ25lZFR4L3R4R2VuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxzREFBc0Q7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFdEQsOERBQWdEO0FBQ2hELG1EQUE2RDtBQUM3RCxvREFBdUI7QUFDdkIsK0JBQTZCO0FBQzdCLG1DQUF1QztBQUN2Qyw0Q0FPc0I7QUFVdEIsU0FBUyxhQUFhLENBQUMsT0FBaUIsRUFBRSxTQUFpQixFQUFFLEtBQWE7SUFDeEUsSUFBSSxlQUFlLENBQUM7SUFDcEIsTUFBTSxVQUFVLEdBQUcsU0FBUyxLQUFLLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUNsRixJQUFJLFVBQVUsS0FBSywrQkFBbUIsRUFBRTtRQUN0QyxlQUFlLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsMEJBQTBCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDdEY7U0FBTSxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxFQUFFO1FBQ25FLGVBQWUsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxzQkFBc0IsQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLENBQUM7S0FDM0Y7U0FBTTtRQUNMLE1BQU0sSUFBSSxLQUFLLENBQUMsd0JBQXdCLFVBQVUsRUFBRSxDQUFDLENBQUM7S0FDdkQ7SUFFRCxPQUFPO1FBQ0wsR0FBRyxlQUFlO1FBQ2xCLEtBQUs7UUFDTCxTQUFTLEVBQUUsVUFBVTtLQUN0QixDQUFDO0FBQ0osQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNJLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxJQUFzQixFQUFFLFdBQTRCLEVBQVUsRUFBRTtJQUNqRyxNQUFNLE9BQU8sR0FBRyxJQUFJ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LFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQzs0QkFDNUUsU0FBUyxDQUFDLFNBQVMsQ0FBQyxZQUFZLEVBQUUsV0FBVyxDQUFDLENBQUM7NEJBQy9DLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0NBQzlCLFNBQVMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQzs0QkFDOUMsQ0FBQyxDQUFDLENBQUM7NEJBRUgsRUFBRSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO3dCQUN4QixDQUFDLENBQUMsQ0FBQztvQkFDTCxDQUFDLENBQUMsQ0FBQztnQkFDTCxDQUFDO2FBQ0YsQ0FBQztZQUVGLFFBQVEsQ0FBQyxTQUFTLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNuRCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDO0FBRTRDLHNEQUFxQiIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudCAqL1xuXG5pbXBvcnQgKiBhcyB1dHhvbGliIGZyb20gJ0BiaXRnby1iZXRhL3V0eG8tbGliJztcbmltcG9ydCB7IGJpcDMyLCBCSVAzMkludGVyZmFjZSB9IGZyb20gJ0BiaXRnby1iZXRhL3V0eG8tbGliJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgJ2xvZGFzaC5jb21iaW5hdGlvbnMnO1xuaW1wb3J0IHsgRGltZW5zaW9ucyB9IGZyb20gJy4uLy4uL3NyYyc7XG5pbXBvcnQge1xuICBJbnB1dFNjcmlwdFR5cGUsXG4gIFRlc3RVbnNwZW50VHlwZSxcbiAgVW5zcGVudFR5cGVPcFJldHVybixcbiAgVW5zcGVudFR5cGVQMnNoUDJwayxcbiAgVW5zcGVudFR5cGVQdWJLZXlIYXNoLFxuICBVbnNwZW50VHlwZVNjcmlwdDJvZjMsXG59IGZyb20gJy4uL3Rlc3R1dGlscyc7XG5cbmludGVyZmFjZSBJVW5zcGVudCB7XG4gIHNjcmlwdFB1YktleTogQnVmZmVyO1xuICByZWRlZW1TY3JpcHQ/OiBCdWZmZXI7XG4gIHdpdG5lc3NTY3JpcHQ/OiBCdWZmZXI7XG4gIHZhbHVlOiBudW1iZXI7XG4gIGlucHV0VHlwZTogdXR4b2xpYi5iaXRnby5vdXRwdXRTY3JpcHRzLlNjcmlwdFR5cGU7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVVuc3BlbnQocHVia2V5czogQnVmZmVyW10sIGlucHV0VHlwZTogc3RyaW5nLCB2YWx1ZTogbnVtYmVyKTogSVVuc3BlbnQge1xuICBsZXQgc3BlbmRhYmxlU2NyaXB0O1xuICBjb25zdCBzY3JpcHRUeXBlID0gaW5wdXRUeXBlID09PSAndGFwcm9vdEtleVBhdGhTcGVuZCcgPyAncDJ0ck11c2lnMicgOiBpbnB1dFR5cGU7XG4gIGlmIChzY3JpcHRUeXBlID09PSBVbnNwZW50VHlwZVAyc2hQMnBrKSB7XG4gICAgc3BlbmRhYmxlU2NyaXB0ID0gdXR4b2xpYi5iaXRnby5vdXRwdXRTY3JpcHRzLmNyZWF0ZU91dHB1dFNjcmlwdFAyc2hQMnBrKHB1YmtleXNbMF0pO1xuICB9IGVsc2UgaWYgKHV0eG9saWIuYml0Z28ub3V0cHV0U2NyaXB0cy5pc1NjcmlwdFR5cGUyT2YzKHNjcmlwdFR5cGUpKSB7XG4gICAgc3BlbmRhYmxlU2NyaXB0ID0gdXR4b2xpYi5iaXRnby5vdXRwdXRTY3JpcHRzLmNyZWF0ZU91dHB1dFNjcmlwdDJvZjMocHVia2V5cywgc2NyaXB0VHlwZSk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGB1bmV4cGVjdGVkIGlucHV0VHlwZSAke3NjcmlwdFR5cGV9YCk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIC4uLnNwZW5kYWJsZVNjcmlwdCxcbiAgICB2YWx1ZSxcbiAgICBpbnB1dFR5cGU6IHNjcmlwdFR5cGUsXG4gIH07XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBrZXlzIC0gUHVia2V5cyB0byB1c2UgZm9yIGdlbmVyYXRpbmcgdGhlIGFkZHJlc3MuXG4gKiAgICAgICAgICAgICAgIElmIHVuc3BlbnRUeXBlIGlzIG9uZSBvZiBVbnNwZW50VHlwZVB1YktleUhhc2ggaXMgdXNlZCwgdGhlIGZpcnN0IGtleSB3aWxsIGJlIHVzZWQuXG4gKiBAcGFyYW0gdW5zcGVudFR5cGUge1N0cmluZ30gLSBvbmUgb2YgVW5zcGVudFR5cGVTY3JpcHQyb2YzIG9yIFVuc3BlbnRUeXBlUHViS2V5SGFzaFxuICogQHJldHVybiB7U3RyaW5nfSBhZGRyZXNzXG4gKi9cbmV4cG9ydCBjb25zdCBjcmVhdGVTY3JpcHRQdWJLZXkgPSAoa2V5czogQklQMzJJbnRlcmZhY2VbXSwgdW5zcGVudFR5cGU6IFRlc3RVbnNwZW50VHlwZSk6IEJ1ZmZlciA9PiB7XG4gIGNvbnN0IHB1YmtleXMgPSBrZXlzLm1hcCgoa2V5KSA9PiBrZXkucHVibGljS2V5KTtcbiAgaWYgKHR5cGVvZiB1bnNwZW50VHlwZSA9PT0gJ3N0cmluZycgJiYgdW5zcGVudFR5cGUgaW4gVW5zcGVudFR5cGVTY3JpcHQyb2YzKSB7XG4gICAgcmV0dXJuIGNyZWF0ZVVuc3BlbnQocHVia2V5cywgdW5zcGVudFR5cGUsIDApLnNjcmlwdFB1YktleTtcbiAgfVxuXG4gIGNvbnN0IHBrSGFzaCA9IHV0eG9saWIuY3J5cHRvLmhhc2gxNjAocHVia2V5c1swXSk7XG4gIHN3aXRjaCAodW5zcGVudFR5cGUpIHtcbiAgICBjYXNlIFVuc3BlbnRUeXBlUHViS2V5SGFzaC5wMnBraDpcbiAgICAgIHJldHVybiB1dHhvbGliLnBheW1lbnRzLnAycGtoKHsgaGFzaDogcGtIYXNoIH0pLm91dHB1dCE7XG4gICAgY2FzZSBVbnNwZW50VHlwZVB1YktleUhhc2gucDJ3cGtoOlxuICAgICAgcmV0dXJuIHV0eG9saWIucGF5bWVudHMucDJ3cGtoKHsgaGFzaDogcGtIYXNoIH0pLm91dHB1dCE7XG4gIH1cblxuICBpZiAodW5zcGVudFR5cGUgaW5zdGFuY2VvZiBVbnNwZW50VHlwZU9wUmV0dXJuKSB7XG4gICAgY29uc3QgcGF5bG9hZCA9IEJ1ZmZlci5hbGxvYyh1bnNwZW50VHlwZS5zaXplKS5maWxsKHB1YmtleXNbMF0pO1xuICAgIHJldHVybiB1dHhvbGliLnNjcmlwdC5jb21waWxlKFsweDZhLCBwYXlsb2FkXSk7XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoYHVuc3VwcG9ydGVkIG91dHB1dCB0eXBlICR7dW5zcGVudFR5cGV9YCk7XG59O1xuXG5jb25zdCBjcmVhdGVJbnB1dFR4ID0gKHVuc3BlbnRzOiBhbnlbXSwgaW5wdXRWYWx1ZTogbnVtYmVyKSA9PiB7XG4gIGNvbnN0IHR4SW5wdXRCdWlsZGVyID0gbmV3IHV0eG9saWIuYml0Z28uVXR4b1RyYW5zYWN0aW9uQnVpbGRlcih1dHhvbGliLm5ldHdvcmtzLmJpdGNvaW4pO1xuICB0eElucHV0QnVpbGRlci5hZGRJbnB1dChBcnJheSgzMikuZmlsbCgnMDEnKS5qb2luKCcnKSwgMCk7XG4gIHVuc3BlbnRzLmZvckVhY2goKHsgc2NyaXB0UHViS2V5IH0pID0+IHR4SW5wdXRCdWlsZGVyLmFkZE91dHB1dChzY3JpcHRQdWJLZXksIGlucHV0VmFsdWUpKTtcbiAgcmV0dXJuIHR4SW5wdXRCdWlsZGVyLmJ1aWxkSW5jb21wbGV0ZSgpO1xufTtcblxuZnVuY3Rpb24gc2lnbklucHV0KFxuICB0eEJ1aWxkZXI6IHV0eG9saWIuYml0Z28uVXR4b1RyYW5zYWN0aW9uQnVpbGRlcixcbiAgaW5kZXg6IG51bWJlcixcbiAgd2FsbGV0S2V5czogQklQMzJJbnRlcmZhY2VbXSxcbiAgdW5zcGVudDogSVVuc3BlbnQsXG4gIHNpZ25LZXlzOiBCSVAzMkludGVyZmFjZVtdID0gdW5zcGVudC5pbnB1dFR5cGUgPT09ICdwMnNoUDJwaycgPyBbd2FsbGV0S2V5c1swXV0gOiBbd2FsbGV0S2V5c1swXSwgd2FsbGV0S2V5c1syXV1cbikge1xuICBzaWduS2V5cy5mb3JFYWNoKChrZXlQYWlyKSA9PiB7XG4gICAgaWYgKHVuc3BlbnQuaW5wdXRUeXBlID09PSAncDJzaFAycGsnKSB7XG4gICAgICB1dHhvbGliLmJpdGdvLnNpZ25JbnB1dFAyc2hQMnBrKHR4QnVpbGRlciwgaW5kZXgsIGtleVBhaXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoc2lnbktleXMubGVuZ3RoICE9PSAyKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBzaWduS2V5cyBsZW5ndGhgKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGNvc2lnbmVyID0ga2V5UGFpciA9PT0gc2lnbktleXNbMF0gPyBzaWduS2V5c1sxXSA6IHNpZ25LZXlzWzBdO1xuICAgICAgdXR4b2xpYi5iaXRnby5zaWduSW5wdXQyT2YzKFxuICAgICAgICB0eEJ1aWxkZXIsXG4gICAgICAgIGluZGV4LFxuICAgICAgICB1bnNwZW50LmlucHV0VHlwZSxcbiAgICAgICAgd2FsbGV0S2V5cy5tYXAoKGspID0+IGsucHVibGljS2V5KSBhcyB1dHhvbGliLmJpdGdvLlRyaXBsZTxCdWZmZXI+LFxuICAgICAgICBrZXlQYWlyLFxuICAgICAgICBjb3NpZ25lci5wdWJsaWNLZXksXG4gICAgICAgIHVuc3BlbnQudmFsdWVcbiAgICAgICk7XG4gICAgfVxuICB9KTtcbn1cblxuY2xhc3MgVHhDb21ibyB7XG4gIHB1YmxpYyB1bnNwZW50czogSVVuc3BlbnRbXTtcbiAgcHVibGljIGlucHV0VHg6IGFueTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgd2FsbGV0S2V5czogQklQMzJJbnRlcmZhY2VbXSxcbiAgICBwdWJsaWMgaW5wdXRUeXBlczogc3RyaW5nW10sXG4gICAgcHVibGljIG91dHB1dFR5cGVzOiBUZXN0VW5zcGVudFR5cGVbXSxcbiAgICBwdWJsaWMgZXhwZWN0ZWREaW1zOiBSZWFkb25seTxEaW1lbnNpb25zPiA9IERpbWVuc2lvbnMuWkVSTyxcbiAgICBwdWJsaWMgc2lnbktleXM/OiBCSVAzMkludGVyZmFjZVtdLFxuICAgIHB1YmxpYyBpbnB1dFZhbHVlOiBudW1iZXIgPSAxMFxuICApIHtcbiAgICB0aGlzLnVuc3BlbnRzID0gaW5wdXRUeXBlcy5tYXAoKGlucHV0VHlwZSkgPT5cbiAgICAgIGNyZWF0ZVVuc3BlbnQoXG4gICAgICAgIHdhbGxldEtleXMubWFwKChrZXkpID0+IGtleS5wdWJsaWNLZXkpLFxuICAgICAgICBpbnB1dFR5cGUsXG4gICAgICAgIHRoaXMuaW5wdXRWYWx1ZVxuICAgICAgKVxuICAgICk7XG4gICAgdGhpcy5pbnB1dFR4ID0gY3JlYXRlSW5wdXRUeCh0aGlzLnVuc3BlbnRzLCBpbnB1dFZhbHVlKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRCdWlsZGVyV2l0aFVuc2lnbmVkVHgoKTogdXR4b2xpYi5iaXRnby5VdHhvVHJhbnNhY3Rpb25CdWlsZGVyIHtcbiAgICBjb25zdCB0eEJ1aWxkZXIgPSB1dHhvbGliLmJpdGdvLmNyZWF0ZVRyYW5zYWN0aW9uQnVpbGRlckZvck5ldHdvcmsodXR4b2xpYi5uZXR3b3Jrcy5iaXRjb2luKTtcbiAgICB0aGlzLmlucHV0VHgub3V0cy5mb3JFYWNoKCh7fSwgaTogbnVtYmVyKSA9PiB0eEJ1aWxkZXIuYWRkSW5wdXQodGhpcy5pbnB1dFR4LCBpKSk7XG4gICAgdGhpcy5vdXRwdXRUeXBlcy5mb3JFYWNoKCh1bnNwZW50VHlwZSkgPT5cbiAgICAgIHR4QnVpbGRlci5hZGRPdXRwdXQoY3JlYXRlU2NyaXB0UHViS2V5KHRoaXMud2FsbGV0S2V5cywgdW5zcGVudFR5cGUpLCB0aGlzLmlucHV0VmFsdWUpXG4gICAgKTtcbiAgICByZXR1cm4gdHhCdWlsZGVyO1xuICB9XG5cbiAgcHVibGljIGdldFVuc2lnbmVkVHgoKTogdXR4b2xpYi5iaXRnby5VdHhvVHJhbnNhY3Rpb24ge1xuICAgIHJldHVybiB0aGlzLmdldEJ1aWxkZXJXaXRoVW5zaWduZWRUeCgpLmJ1aWxkSW5jb21wbGV0ZSgpO1xuICB9XG5cbiAgcHVibGljIGdldFNpZ25lZFR4KCk6IHV0eG9saWIuVHJhbnNhY3Rpb24ge1xuICAgIGNvbnN0IHR4QnVpbGRlciA9IHRoaXMuZ2V0QnVpbGRlcldpdGhVbnNpZ25lZFR4KCk7XG4gICAgdGhpcy51bnNwZW50cy5mb3JFYWNoKCh1bnNwZW50LCBpKSA9PiB7XG4gICAgICBzaWduSW5wdXQodHhCdWlsZGVyLCBpLCB0aGlzLndhbGxldEtleXMsIHVuc3BlbnQsIHRoaXMuc2lnbktleXMpO1xuICAgIH0pO1xuICAgIHJldHVybiB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgfVxufVxuXG5jb25zdCBydW5Db21iaW5hdGlvbnMgPSAoXG4gIHtcbiAgICBpbnB1dFR5cGVzLFxuICAgIG1heE5JbnB1dHMsXG4gICAgb3V0cHV0VHlwZXMsXG4gICAgbWF4Tk91dHB1dHMsXG4gIH06IHtcbiAgICBpbnB1dFR5cGVzOiBJbnB1dFNjcmlwdFR5cGVbXTtcbiAgICBtYXhOSW5wdXRzOiBudW1iZXI7XG4gICAgb3V0cHV0VHlwZXM6IFRlc3RVbnNwZW50VHlwZVtdO1xuICAgIG1heE5PdXRwdXRzOiBudW1iZXI7XG4gIH0sXG4gIGNhbGxiYWNrOiAoaW5wdXRDb21ibzogSW5wdXRTY3JpcHRUeXBlW10sIG91dHB1dENvbWJvOiBUZXN0VW5zcGVudFR5cGVbXSkgPT4gdm9pZFxuKTogdm9pZCA9PiB7XG4gIC8vIENyZWF0ZSBjb21iaW5hdGlvbnMgb2YgZGlmZmVyZW50IGlucHV0IGFuZCBvdXRwdXQgdHlwZXMuIExlbmd0aCBiZXR3ZWVuIDEgYW5kIDMuXG4gIGNvbnN0IGlucHV0Q29tYmluYXRpb25zID0gXy5mbGF0dGVuKFxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBbLi4uQXJyYXkobWF4TklucHV0cyldLm1hcCgoX18sIGkpID0+IF8uY29tYmluYXRpb25zKGlucHV0VHlwZXMsIGkgKyAxKSlcbiAgKTtcbiAgY29uc3Qgb3V0cHV0Q29tYmluYXRpb25zID0gXy5mbGF0dGVuKFxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBbLi4uQXJyYXkobWF4Tk91dHB1dHMpXS5tYXAoKF9fLCBpKSA9PiBfLmNvbWJpbmF0aW9ucyhvdXRwdXRUeXBlcywgaSArIDEpKVxuICApO1xuXG4gIGlucHV0Q29tYmluYXRpb25zLmZvckVhY2goKGlucHV0VHlwZUNvbWJvKSA9PlxuICAgIG91dHB1dENvbWJpbmF0aW9ucy5mb3JFYWNoKChvdXRwdXRUeXBlQ29tYm8pID0+IHtcbiAgICAgIGNhbGxiYWNrKGlucHV0VHlwZUNvbWJvLCBvdXRwdXRUeXBlQ29tYm8pO1xuICAgIH0pXG4gICk7XG59O1xuXG5jbGFzcyBIaXN0b2dyYW0ge1xuICBwdWJsaWMgdG90YWwgPSAwO1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBtYXA6IE1hcDxudW1iZXIsIG51bWJlcj4gPSBuZXcgTWFwKCkpIHt9XG5cbiAgcHVibGljIGFkZChzaXplOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLm1hcC5zZXQoc2l6ZSwgKHRoaXMubWFwLmdldChzaXplKSB8fCAwKSArIDEpO1xuICAgIHRoaXMudG90YWwrKztcbiAgfVxuXG4gIHB1YmxpYyBhc1NvcnRlZEFycmF5KCk6IG51bWJlcltdW10ge1xuICAgIHJldHVybiBbLi4udGhpcy5tYXAuZW50cmllcygpXS5zb3J0KChbYV0sIFtiXSkgPT4gYSAtIGIpO1xuICB9XG5cbiAgcHVibGljIGFzRnVsbFNvcnRlZEFycmF5KCk6IG51bWJlcltdW10ge1xuICAgIHJldHVybiBfLnJhbmdlKHRoaXMuZ2V0UGVyY2VudGlsZSgwKSwgdGhpcy5nZXRQZXJjZW50aWxlKDEpKS5tYXAoKHYpID0+IFt2LCB0aGlzLm1hcC5nZXQodikgfHwgMF0pO1xuICB9XG5cbiAgcHVibGljIGdldFBlcmNlbnRpbGUocDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBpZiAoMCA+IHAgfHwgcCA+IDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgcCBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMWApO1xuICAgIH1cblxuICAgIGxldCBzdW0gPSAwO1xuICAgIGZvciAoY29uc3QgW2ssIHZdIG9mIHRoaXMuYXNTb3J0ZWRBcnJheSgpKSB7XG4gICAgICBzdW0gKz0gdjtcbiAgICAgIGlmIChzdW0gLyB0aGlzLnRvdGFsID49IHApIHtcbiAgICAgICAgcmV0dXJuIGs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKCdjb3VsZCBub3QgZmluZCBwZXJjZW50aWxlJyk7XG4gIH1cblxuICBwdWJsaWMgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICBjb25zdCBrZXlzID0gWy4uLnRoaXMubWFwLmtleXMoKV0uc29ydCgoYSwgYikgPT4gYSAtIGIpO1xuICAgIHJldHVybiBgWyR7a2V5cy5tYXAoKGspID0+IGBbJHtrfSwgJHt0aGlzLm1hcC5nZXQoayl9XWApLmpvaW4oJyAnKX1dYDtcbiAgfVxufVxuXG5jb25zdCBnZXRLZXlUcmlwbGV0cyA9IChwcmVmaXg6IHN0cmluZywgY291bnQ6IG51bWJlcikgPT5cbiAgWy4uLkFycmF5KGNvdW50KV0ubWFwKCh2LCBpKSA9PlxuICAgIFsxLCAyLCAzXS5tYXAoKGopID0+IGJpcDMyLmZyb21TZWVkKEJ1ZmZlci5hbGxvYygxNiwgYCR7cHJlZml4fS8ke2l9LyR7an1gKSwgdXR4b2xpYi5uZXR3b3Jrcy5iaXRjb2luKSlcbiAgKTtcblxuLyoqXG4gKlxuICogQ2FsbHMgYGNhbGxiYWNrYCB3aXRoIGEgdmFyaWV0eSBvZiBzaWduZWQgdHhzLCBiYXNlZCBvbiBpbnB1dCBwYXJhbWV0ZXJzXG4gKiBDYWxsYmFjayBhcmd1bWVudHMgYXJlXG4gKiAgIGlucHV0VHlwZSwgaW5wdXRDb3VudCwgb3V0cHV0VHlwZSwgdHhzXG4gKiAgd2hlcmUgYHR4c2AgaW1wbGVtZW50cyBgZm9yRWFjaCgpYFxuICpcbiAqIEBwYXJhbSBpbnB1dFR5cGVzIC0gaW5wdXQgdHlwZXMgdG8gdGVzdFxuICogQHBhcmFtIG5JbnB1dEtleVRyaXBsZXRzIC0gbnVtYmVyIG9mIGRpZmZlcmVudCBpbnB1dCBrZXkgdHJpcGxlcyB0byBjeWNsZSB0aHJvdWdoXG4gKiBAcGFyYW0gb3V0cHV0VHlwZXMgLSBvdXRwdXQgdHlwZXMgdG8gdGVzdFxuICogQHBhcmFtIG5PdXRwdXRLZXlUcmlwbGV0cyAtIG51bWJlciBvZiBkaWZmZXJlbnQgb3V0cHV0IGtleSB0cmlwbGV0cyB0byBjeWNsZSB0aHJvdWdoXG4gKiBAcGFyYW0gY2FsbGJhY2tcbiAqL1xuY29uc3QgcnVuU2lnbmVkVHJhbnNhY3Rpb25zID0gKFxuICB7XG4gICAgaW5wdXRUeXBlcyxcbiAgICBuSW5wdXRLZXlUcmlwbGV0cyxcbiAgICBvdXRwdXRUeXBlcyxcbiAgICBuT3V0cHV0S2V5VHJpcGxldHMsXG4gIH06IHtcbiAgICBpbnB1dFR5cGVzOiBBcnJheTx7IGlucHV0VHlwZTogc3RyaW5nOyBjb3VudDogbnVtYmVyIH0+O1xuICAgIG5JbnB1dEtleVRyaXBsZXRzOiBudW1iZXI7XG4gICAgb3V0cHV0VHlwZXM6IFRlc3RVbnNwZW50VHlwZVtdO1xuICAgIG5PdXRwdXRLZXlUcmlwbGV0czogbnVtYmVyO1xuICB9LFxuICBjYWxsYmFjazogKGlucHV0VHlwZTogc3RyaW5nLCBpbnB1dENvdW50OiBudW1iZXIsIG91dHB1dFR5cGU6IFRlc3RVbnNwZW50VHlwZSwgdHhzOiBhbnkpID0+IHZvaWRcbik6IHZvaWQgPT4ge1xuICBjb25zdCBpbnB1dEtleVRyaXBsZXRzID0gZ2V0S2V5VHJpcGxldHMoJ3Rlc3QvaW5wdXQvJywgbklucHV0S2V5VHJpcGxldHMpO1xuICBjb25zdCBvdXRwdXRLZXlUcmlwbGV0cyA9IGdldEtleVRyaXBsZXRzKCd0ZXN0L291dHB1dC8nLCBuT3V0cHV0S2V5VHJpcGxldHMpO1xuICBjb25zdCBvdXRwdXRWYWx1ZSA9IDFlODtcblxuICBpbnB1dFR5cGVzLmZvckVhY2goKHsgaW5wdXRUeXBlLCBjb3VudDogaW5wdXRDb3VudCB9KSA9PiB7XG4gICAgY29uc3QgaW5wdXRUeHMgPSBpbnB1dEtleVRyaXBsZXRzLm1hcCgoaW5wdXRLZXlzKSA9PiB7XG4gICAgICBjb25zdCB1bnNwZW50cyA9IFsuLi5BcnJheShpbnB1dENvdW50KV0ubWFwKCgpID0+XG4gICAgICAgIGNyZWF0ZVVuc3BlbnQoXG4gICAgICAgICAgaW5wdXRLZXlzLm1hcCgoa2V5KSA9PiBrZXkucHVibGljS2V5KSxcbiAgICAgICAgICBpbnB1dFR5cGUsXG4gICAgICAgICAgb3V0cHV0VmFsdWVcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICAgIGNvbnN0IGlucHV0VHggPSBjcmVhdGVJbnB1dFR4KHVuc3BlbnRzLCBvdXRwdXRWYWx1ZSk7XG4gICAgICByZXR1cm4geyBpbnB1dEtleXMsIHVuc3BlbnRzLCBpbnB1dFR4IH07XG4gICAgfSk7XG5cbiAgICBvdXRwdXRUeXBlcy5mb3JFYWNoKChvdXRwdXRUeXBlKSA9PiB7XG4gICAgICBjb25zdCBvdXRwdXRzID0gb3V0cHV0S2V5VHJpcGxldHMubWFwKChvdXRwdXRLZXlzKSA9PiBjcmVhdGVTY3JpcHRQdWJLZXkob3V0cHV0S2V5cywgb3V0cHV0VHlwZSkpO1xuXG4gICAgICBjb25zdCB0eHMgPSB7XG4gICAgICAgIGZvckVhY2goY2I6ICh0eDogdXR4b2xpYi5UcmFuc2FjdGlvbikgPT4gdm9pZCkge1xuICAgICAgICAgIGlucHV0VHhzLmZvckVhY2goKHsgaW5wdXRLZXlzLCB1bnNwZW50cywgaW5wdXRUeCB9KSA9PiB7XG4gICAgICAgICAgICBvdXRwdXRzLmZvckVhY2goKHNjcmlwdFB1YktleSkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCB0eEJ1aWxkZXIgPSB1dHhvbGliLmJpdGdvLmNyZWF0ZVRyYW5zYWN0aW9uQnVpbGRlckZvck5ldHdvcmsodXR4b2xpYi5uZXR3b3Jrcy5iaXRjb2luKTtcbiAgICAgICAgICAgICAgaW5wdXRUeC5vdXRzLmZvckVhY2goKHY6IGFueSwgaTogbnVtYmVyKSA9PiB0eEJ1aWxkZXIuYWRkSW5wdXQoaW5wdXRUeCwgaSkpO1xuICAgICAgICAgICAgICB0eEJ1aWxkZXIuYWRkT3V0cHV0KHNjcmlwdFB1YktleSwgb3V0cHV0VmFsdWUpO1xuICAgICAgICAgICAgICB1bnNwZW50cy5mb3JFYWNoKCh1bnNwZW50LCBpKSA9PiB7XG4gICAgICAgICAgICAgICAgc2lnbklucHV0KHR4QnVpbGRlciwgaSwgaW5wdXRLZXlzLCB1bnNwZW50KTtcbiAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgY2IodHhCdWlsZGVyLmJ1aWxkKCkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICB9O1xuXG4gICAgICBjYWxsYmFjayhpbnB1dFR5cGUsIGlucHV0Q291bnQsIG91dHB1dFR5cGUsIHR4cyk7XG4gICAgfSk7XG4gIH0pO1xufTtcblxuZXhwb3J0IHsgVHhDb21ibywgSGlzdG9ncmFtLCBydW5Db21iaW5hdGlvbnMsIHJ1blNpZ25lZFRyYW5zYWN0aW9ucyB9O1xuIl19
233
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHhHZW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZXN0L3NpZ25lZFR4L3R4R2VuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxzREFBc0Q7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUV0RCw4REFBZ0Q7QUFDaEQsbURBQTZEO0FBQzdELG9EQUF1QjtBQUN2QiwrQkFBNkI7QUFDN0IsbUNBQXVDO0FBQ3ZDLDRDQU9zQjtBQVV0QixTQUFTLGFBQWEsQ0FBQyxPQUFpQixFQUFFLFNBQWlCLEVBQUUsS0FBYTtJQUN4RSxJQUFJLGVBQWUsQ0FBQztJQUNwQixNQUFNLFVBQVUsR0FBRyxTQUFTLEtBQUsscUJBQXFCLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQ2xGLElBQUksVUFBVSxLQUFLLCtCQUFtQixFQUFFLENBQUM7UUFDdkMsZUFBZSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLDBCQUEwQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3ZGLENBQUM7U0FBTSxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7UUFDcEUsZUFBZSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLHNCQUFzQixDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQztJQUM1RixDQUFDO1NBQU0sQ0FBQztRQUNOLE1BQU0sSUFBSSxLQUFLLENBQUMsd0JBQXdCLFVBQVUsRUFBRSxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVELE9BQU87UUFDTCxHQUFHLGVBQWU7UUFDbEIsS0FBSztRQUNMLFNBQVMsRUFBRSxVQUFVO0tBQ3RCLENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0ksTUFBTSxrQkFBa0IsR0FBRyxDQUFDLElBQXNCLEVB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TyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFlBQVksRUFBRSxFQUFFOzRCQUMvQixNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLGtDQUFrQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7NEJBQzdGLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBTSxFQUFFLENBQVMsRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQzs0QkFDNUUsU0FBUyxDQUFDLFNBQVMsQ0FBQyxZQUFZLEVBQUUsV0FBVyxDQUFDLENBQUM7NEJBQy9DLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0NBQzlCLFNBQVMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQzs0QkFDOUMsQ0FBQyxDQUFDLENBQUM7NEJBRUgsRUFBRSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO3dCQUN4QixDQUFDLENBQUMsQ0FBQztvQkFDTCxDQUFDLENBQUMsQ0FBQztnQkFDTCxDQUFDO2FBQ0YsQ0FBQztZQUVGLFFBQVEsQ0FBQyxTQUFTLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNuRCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDO0FBRTRDLHNEQUFxQiIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudCAqL1xuXG5pbXBvcnQgKiBhcyB1dHhvbGliIGZyb20gJ0BiaXRnby1iZXRhL3V0eG8tbGliJztcbmltcG9ydCB7IGJpcDMyLCBCSVAzMkludGVyZmFjZSB9IGZyb20gJ0BiaXRnby1iZXRhL3V0eG8tbGliJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgJ2xvZGFzaC5jb21iaW5hdGlvbnMnO1xuaW1wb3J0IHsgRGltZW5zaW9ucyB9IGZyb20gJy4uLy4uL3NyYyc7XG5pbXBvcnQge1xuICBJbnB1dFNjcmlwdFR5cGUsXG4gIFRlc3RVbnNwZW50VHlwZSxcbiAgVW5zcGVudFR5cGVPcFJldHVybixcbiAgVW5zcGVudFR5cGVQMnNoUDJwayxcbiAgVW5zcGVudFR5cGVQdWJLZXlIYXNoLFxuICBVbnNwZW50VHlwZVNjcmlwdDJvZjMsXG59IGZyb20gJy4uL3Rlc3R1dGlscyc7XG5cbmludGVyZmFjZSBJVW5zcGVudCB7XG4gIHNjcmlwdFB1YktleTogQnVmZmVyO1xuICByZWRlZW1TY3JpcHQ/OiBCdWZmZXI7XG4gIHdpdG5lc3NTY3JpcHQ/OiBCdWZmZXI7XG4gIHZhbHVlOiBudW1iZXI7XG4gIGlucHV0VHlwZTogdXR4b2xpYi5iaXRnby5vdXRwdXRTY3JpcHRzLlNjcmlwdFR5cGU7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVVuc3BlbnQocHVia2V5czogQnVmZmVyW10sIGlucHV0VHlwZTogc3RyaW5nLCB2YWx1ZTogbnVtYmVyKTogSVVuc3BlbnQge1xuICBsZXQgc3BlbmRhYmxlU2NyaXB0O1xuICBjb25zdCBzY3JpcHRUeXBlID0gaW5wdXRUeXBlID09PSAndGFwcm9vdEtleVBhdGhTcGVuZCcgPyAncDJ0ck11c2lnMicgOiBpbnB1dFR5cGU7XG4gIGlmIChzY3JpcHRUeXBlID09PSBVbnNwZW50VHlwZVAyc2hQMnBrKSB7XG4gICAgc3BlbmRhYmxlU2NyaXB0ID0gdXR4b2xpYi5iaXRnby5vdXRwdXRTY3JpcHRzLmNyZWF0ZU91dHB1dFNjcmlwdFAyc2hQMnBrKHB1YmtleXNbMF0pO1xuICB9IGVsc2UgaWYgKHV0eG9saWIuYml0Z28ub3V0cHV0U2NyaXB0cy5pc1NjcmlwdFR5cGUyT2YzKHNjcmlwdFR5cGUpKSB7XG4gICAgc3BlbmRhYmxlU2NyaXB0ID0gdXR4b2xpYi5iaXRnby5vdXRwdXRTY3JpcHRzLmNyZWF0ZU91dHB1dFNjcmlwdDJvZjMocHVia2V5cywgc2NyaXB0VHlwZSk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGB1bmV4cGVjdGVkIGlucHV0VHlwZSAke3NjcmlwdFR5cGV9YCk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIC4uLnNwZW5kYWJsZVNjcmlwdCxcbiAgICB2YWx1ZSxcbiAgICBpbnB1dFR5cGU6IHNjcmlwdFR5cGUsXG4gIH07XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBrZXlzIC0gUHVia2V5cyB0byB1c2UgZm9yIGdlbmVyYXRpbmcgdGhlIGFkZHJlc3MuXG4gKiAgICAgICAgICAgICAgIElmIHVuc3BlbnRUeXBlIGlzIG9uZSBvZiBVbnNwZW50VHlwZVB1YktleUhhc2ggaXMgdXNlZCwgdGhlIGZpcnN0IGtleSB3aWxsIGJlIHVzZWQuXG4gKiBAcGFyYW0gdW5zcGVudFR5cGUge1N0cmluZ30gLSBvbmUgb2YgVW5zcGVudFR5cGVTY3JpcHQyb2YzIG9yIFVuc3BlbnRUeXBlUHViS2V5SGFzaFxuICogQHJldHVybiB7U3RyaW5nfSBhZGRyZXNzXG4gKi9cbmV4cG9ydCBjb25zdCBjcmVhdGVTY3JpcHRQdWJLZXkgPSAoa2V5czogQklQMzJJbnRlcmZhY2VbXSwgdW5zcGVudFR5cGU6IFRlc3RVbnNwZW50VHlwZSk6IEJ1ZmZlciA9PiB7XG4gIGNvbnN0IHB1YmtleXMgPSBrZXlzLm1hcCgoa2V5KSA9PiBrZXkucHVibGljS2V5KTtcbiAgaWYgKHR5cGVvZiB1bnNwZW50VHlwZSA9PT0gJ3N0cmluZycgJiYgdW5zcGVudFR5cGUgaW4gVW5zcGVudFR5cGVTY3JpcHQyb2YzKSB7XG4gICAgcmV0dXJuIGNyZWF0ZVVuc3BlbnQocHVia2V5cywgdW5zcGVudFR5cGUsIDApLnNjcmlwdFB1YktleTtcbiAgfVxuXG4gIGNvbnN0IHBrSGFzaCA9IHV0eG9saWIuY3J5cHRvLmhhc2gxNjAocHVia2V5c1swXSk7XG4gIHN3aXRjaCAodW5zcGVudFR5cGUpIHtcbiAgICBjYXNlIFVuc3BlbnRUeXBlUHViS2V5SGFzaC5wMnBraDpcbiAgICAgIHJldHVybiB1dHhvbGliLnBheW1lbnRzLnAycGtoKHsgaGFzaDogcGtIYXNoIH0pLm91dHB1dCE7XG4gICAgY2FzZSBVbnNwZW50VHlwZVB1YktleUhhc2gucDJ3cGtoOlxuICAgICAgcmV0dXJuIHV0eG9saWIucGF5bWVudHMucDJ3cGtoKHsgaGFzaDogcGtIYXNoIH0pLm91dHB1dCE7XG4gIH1cblxuICBpZiAodW5zcGVudFR5cGUgaW5zdGFuY2VvZiBVbnNwZW50VHlwZU9wUmV0dXJuKSB7XG4gICAgY29uc3QgcGF5bG9hZCA9IEJ1ZmZlci5hbGxvYyh1bnNwZW50VHlwZS5zaXplKS5maWxsKHB1YmtleXNbMF0pO1xuICAgIHJldHVybiB1dHhvbGliLnNjcmlwdC5jb21waWxlKFsweDZhLCBwYXlsb2FkXSk7XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoYHVuc3VwcG9ydGVkIG91dHB1dCB0eXBlICR7dW5zcGVudFR5cGV9YCk7XG59O1xuXG5jb25zdCBjcmVhdGVJbnB1dFR4ID0gKHVuc3BlbnRzOiBhbnlbXSwgaW5wdXRWYWx1ZTogbnVtYmVyKSA9PiB7XG4gIGNvbnN0IHR4SW5wdXRCdWlsZGVyID0gbmV3IHV0eG9saWIuYml0Z28uVXR4b1RyYW5zYWN0aW9uQnVpbGRlcih1dHhvbGliLm5ldHdvcmtzLmJpdGNvaW4pO1xuICB0eElucHV0QnVpbGRlci5hZGRJbnB1dChBcnJheSgzMikuZmlsbCgnMDEnKS5qb2luKCcnKSwgMCk7XG4gIHVuc3BlbnRzLmZvckVhY2goKHsgc2NyaXB0UHViS2V5IH0pID0+IHR4SW5wdXRCdWlsZGVyLmFkZE91dHB1dChzY3JpcHRQdWJLZXksIGlucHV0VmFsdWUpKTtcbiAgcmV0dXJuIHR4SW5wdXRCdWlsZGVyLmJ1aWxkSW5jb21wbGV0ZSgpO1xufTtcblxuZnVuY3Rpb24gc2lnbklucHV0KFxuICB0eEJ1aWxkZXI6IHV0eG9saWIuYml0Z28uVXR4b1RyYW5zYWN0aW9uQnVpbGRlcixcbiAgaW5kZXg6IG51bWJlcixcbiAgd2FsbGV0S2V5czogQklQMzJJbnRlcmZhY2VbXSxcbiAgdW5zcGVudDogSVVuc3BlbnQsXG4gIHNpZ25LZXlzOiBCSVAzMkludGVyZmFjZVtdID0gdW5zcGVudC5pbnB1dFR5cGUgPT09ICdwMnNoUDJwaycgPyBbd2FsbGV0S2V5c1swXV0gOiBbd2FsbGV0S2V5c1swXSwgd2FsbGV0S2V5c1syXV1cbikge1xuICBzaWduS2V5cy5mb3JFYWNoKChrZXlQYWlyKSA9PiB7XG4gICAgaWYgKHVuc3BlbnQuaW5wdXRUeXBlID09PSAncDJzaFAycGsnKSB7XG4gICAgICB1dHhvbGliLmJpdGdvLnNpZ25JbnB1dFAyc2hQMnBrKHR4QnVpbGRlciwgaW5kZXgsIGtleVBhaXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoc2lnbktleXMubGVuZ3RoICE9PSAyKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBzaWduS2V5cyBsZW5ndGhgKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGNvc2lnbmVyID0ga2V5UGFpciA9PT0gc2lnbktleXNbMF0gPyBzaWduS2V5c1sxXSA6IHNpZ25LZXlzWzBdO1xuICAgICAgdXR4b2xpYi5iaXRnby5zaWduSW5wdXQyT2YzKFxuICAgICAgICB0eEJ1aWxkZXIsXG4gICAgICAgIGluZGV4LFxuICAgICAgICB1bnNwZW50LmlucHV0VHlwZSxcbiAgICAgICAgd2FsbGV0S2V5cy5tYXAoKGspID0+IGsucHVibGljS2V5KSBhcyB1dHhvbGliLmJpdGdvLlRyaXBsZTxCdWZmZXI+LFxuICAgICAgICBrZXlQYWlyLFxuICAgICAgICBjb3NpZ25lci5wdWJsaWNLZXksXG4gICAgICAgIHVuc3BlbnQudmFsdWVcbiAgICAgICk7XG4gICAgfVxuICB9KTtcbn1cblxuY2xhc3MgVHhDb21ibyB7XG4gIHB1YmxpYyB3YWxsZXRLZXlzOiBCSVAzMkludGVyZmFjZVtdO1xuICBwdWJsaWMgaW5wdXRUeXBlczogc3RyaW5nW107XG4gIHB1YmxpYyBvdXRwdXRUeXBlczogVGVzdFVuc3BlbnRUeXBlW107XG4gIHB1YmxpYyBleHBlY3RlZERpbXM6IFJlYWRvbmx5PERpbWVuc2lvbnM+O1xuICBwdWJsaWMgc2lnbktleXM/OiBCSVAzMkludGVyZmFjZVtdO1xuICBwdWJsaWMgaW5wdXRWYWx1ZTogbnVtYmVyO1xuICBwdWJsaWMgdW5zcGVudHM6IElVbnNwZW50W107XG4gIHB1YmxpYyBpbnB1dFR4OiBhbnk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgd2FsbGV0S2V5czogQklQMzJJbnRlcmZhY2VbXSxcbiAgICBpbnB1dFR5cGVzOiBzdHJpbmdbXSxcbiAgICBvdXRwdXRUeXBlczogVGVzdFVuc3BlbnRUeXBlW10sXG4gICAgZXhwZWN0ZWREaW1zOiBSZWFkb25seTxEaW1lbnNpb25zPiA9IERpbWVuc2lvbnMuWkVSTyxcbiAgICBzaWduS2V5cz86IEJJUDMySW50ZXJmYWNlW10sXG4gICAgaW5wdXRWYWx1ZSA9IDEwXG4gICkge1xuICAgIHRoaXMud2FsbGV0S2V5cyA9IHdhbGxldEtleXM7XG4gICAgdGhpcy5pbnB1dFR5cGVzID0gaW5wdXRUeXBlcztcbiAgICB0aGlzLm91dHB1dFR5cGVzID0gb3V0cHV0VHlwZXM7XG4gICAgdGhpcy5leHBlY3RlZERpbXMgPSBleHBlY3RlZERpbXM7XG4gICAgdGhpcy5zaWduS2V5cyA9IHNpZ25LZXlzO1xuICAgIHRoaXMuaW5wdXRWYWx1ZSA9IGlucHV0VmFsdWU7XG4gICAgdGhpcy51bnNwZW50cyA9IGlucHV0VHlwZXMubWFwKChpbnB1dFR5cGUpID0+XG4gICAgICBjcmVhdGVVbnNwZW50KFxuICAgICAgICB3YWxsZXRLZXlzLm1hcCgoa2V5KSA9PiBrZXkucHVibGljS2V5KSxcbiAgICAgICAgaW5wdXRUeXBlLFxuICAgICAgICB0aGlzLmlucHV0VmFsdWVcbiAgICAgIClcbiAgICApO1xuICAgIHRoaXMuaW5wdXRUeCA9IGNyZWF0ZUlucHV0VHgodGhpcy51bnNwZW50cywgaW5wdXRWYWx1ZSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0QnVpbGRlcldpdGhVbnNpZ25lZFR4KCk6IHV0eG9saWIuYml0Z28uVXR4b1RyYW5zYWN0aW9uQnVpbGRlciB7XG4gICAgY29uc3QgdHhCdWlsZGVyID0gdXR4b2xpYi5iaXRnby5jcmVhdGVUcmFuc2FjdGlvbkJ1aWxkZXJGb3JOZXR3b3JrKHV0eG9saWIubmV0d29ya3MuYml0Y29pbik7XG4gICAgdGhpcy5pbnB1dFR4Lm91dHMuZm9yRWFjaCgoe30sIGk6IG51bWJlcikgPT4gdHhCdWlsZGVyLmFkZElucHV0KHRoaXMuaW5wdXRUeCwgaSkpO1xuICAgIHRoaXMub3V0cHV0VHlwZXMuZm9yRWFjaCgodW5zcGVudFR5cGUpID0+XG4gICAgICB0eEJ1aWxkZXIuYWRkT3V0cHV0KGNyZWF0ZVNjcmlwdFB1YktleSh0aGlzLndhbGxldEtleXMsIHVuc3BlbnRUeXBlKSwgdGhpcy5pbnB1dFZhbHVlKVxuICAgICk7XG4gICAgcmV0dXJuIHR4QnVpbGRlcjtcbiAgfVxuXG4gIHB1YmxpYyBnZXRVbnNpZ25lZFR4KCk6IHV0eG9saWIuYml0Z28uVXR4b1RyYW5zYWN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5nZXRCdWlsZGVyV2l0aFVuc2lnbmVkVHgoKS5idWlsZEluY29tcGxldGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRTaWduZWRUeCgpOiB1dHhvbGliLlRyYW5zYWN0aW9uIHtcbiAgICBjb25zdCB0eEJ1aWxkZXIgPSB0aGlzLmdldEJ1aWxkZXJXaXRoVW5zaWduZWRUeCgpO1xuICAgIHRoaXMudW5zcGVudHMuZm9yRWFjaCgodW5zcGVudCwgaSkgPT4ge1xuICAgICAgc2lnbklucHV0KHR4QnVpbGRlciwgaSwgdGhpcy53YWxsZXRLZXlzLCB1bnNwZW50LCB0aGlzLnNpZ25LZXlzKTtcbiAgICB9KTtcbiAgICByZXR1cm4gdHhCdWlsZGVyLmJ1aWxkKCk7XG4gIH1cbn1cblxuY29uc3QgcnVuQ29tYmluYXRpb25zID0gKFxuICB7XG4gICAgaW5wdXRUeXBlcyxcbiAgICBtYXhOSW5wdXRzLFxuICAgIG91dHB1dFR5cGVzLFxuICAgIG1heE5PdXRwdXRzLFxuICB9OiB7XG4gICAgaW5wdXRUeXBlczogSW5wdXRTY3JpcHRUeXBlW107XG4gICAgbWF4TklucHV0czogbnVtYmVyO1xuICAgIG91dHB1dFR5cGVzOiBUZXN0VW5zcGVudFR5cGVbXTtcbiAgICBtYXhOT3V0cHV0czogbnVtYmVyO1xuICB9LFxuICBjYWxsYmFjazogKGlucHV0Q29tYm86IElucHV0U2NyaXB0VHlwZVtdLCBvdXRwdXRDb21ibzogVGVzdFVuc3BlbnRUeXBlW10pID0+IHZvaWRcbik6IHZvaWQgPT4ge1xuICAvLyBDcmVhdGUgY29tYmluYXRpb25zIG9mIGRpZmZlcmVudCBpbnB1dCBhbmQgb3V0cHV0IHR5cGVzLiBMZW5ndGggYmV0d2VlbiAxIGFuZCAzLlxuICBjb25zdCBpbnB1dENvbWJpbmF0aW9ucyA9IF8uZmxhdHRlbihcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgWy4uLkFycmF5KG1heE5JbnB1dHMpXS5tYXAoKF9fLCBpKSA9PiBfLmNvbWJpbmF0aW9ucyhpbnB1dFR5cGVzLCBpICsgMSkpXG4gICk7XG4gIGNvbnN0IG91dHB1dENvbWJpbmF0aW9ucyA9IF8uZmxhdHRlbihcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgWy4uLkFycmF5KG1heE5PdXRwdXRzKV0ubWFwKChfXywgaSkgPT4gXy5jb21iaW5hdGlvbnMob3V0cHV0VHlwZXMsIGkgKyAxKSlcbiAgKTtcblxuICBpbnB1dENvbWJpbmF0aW9ucy5mb3JFYWNoKChpbnB1dFR5cGVDb21ibykgPT5cbiAgICBvdXRwdXRDb21iaW5hdGlvbnMuZm9yRWFjaCgob3V0cHV0VHlwZUNvbWJvKSA9PiB7XG4gICAgICBjYWxsYmFjayhpbnB1dFR5cGVDb21ibywgb3V0cHV0VHlwZUNvbWJvKTtcbiAgICB9KVxuICApO1xufTtcblxuY2xhc3MgSGlzdG9ncmFtIHtcbiAgcHVibGljIG1hcDogTWFwPG51bWJlciwgbnVtYmVyPjtcbiAgcHVibGljIHRvdGFsID0gMDtcblxuICBjb25zdHJ1Y3RvcihtYXA6IE1hcDxudW1iZXIsIG51bWJlcj4gPSBuZXcgTWFwKCkpIHtcbiAgICB0aGlzLm1hcCA9IG1hcDtcbiAgfVxuXG4gIHB1YmxpYyBhZGQoc2l6ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5tYXAuc2V0KHNpemUsICh0aGlzLm1hcC5nZXQoc2l6ZSkgfHwgMCkgKyAxKTtcbiAgICB0aGlzLnRvdGFsKys7XG4gIH1cblxuICBwdWJsaWMgYXNTb3J0ZWRBcnJheSgpOiBudW1iZXJbXVtdIHtcbiAgICByZXR1cm4gWy4uLnRoaXMubWFwLmVudHJpZXMoKV0uc29ydCgoW2FdLCBbYl0pID0+IGEgLSBiKTtcbiAgfVxuXG4gIHB1YmxpYyBhc0Z1bGxTb3J0ZWRBcnJheSgpOiBudW1iZXJbXVtdIHtcbiAgICByZXR1cm4gXy5yYW5nZSh0aGlzLmdldFBlcmNlbnRpbGUoMCksIHRoaXMuZ2V0UGVyY2VudGlsZSgxKSkubWFwKCh2KSA9PiBbdiwgdGhpcy5tYXAuZ2V0KHYpIHx8IDBdKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRQZXJjZW50aWxlKHA6IG51bWJlcik6IG51bWJlciB7XG4gICAgaWYgKDAgPiBwIHx8IHAgPiAxKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHAgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDFgKTtcbiAgICB9XG5cbiAgICBsZXQgc3VtID0gMDtcbiAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiB0aGlzLmFzU29ydGVkQXJyYXkoKSkge1xuICAgICAgc3VtICs9IHY7XG4gICAgICBpZiAoc3VtIC8gdGhpcy50b3RhbCA+PSBwKSB7XG4gICAgICAgIHJldHVybiBrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcignY291bGQgbm90IGZpbmQgcGVyY2VudGlsZScpO1xuICB9XG5cbiAgcHVibGljIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgY29uc3Qga2V5cyA9IFsuLi50aGlzLm1hcC5rZXlzKCldLnNvcnQoKGEsIGIpID0+IGEgLSBiKTtcbiAgICByZXR1cm4gYFske2tleXMubWFwKChrKSA9PiBgWyR7a30sICR7dGhpcy5tYXAuZ2V0KGspfV1gKS5qb2luKCcgJyl9XWA7XG4gIH1cbn1cblxuY29uc3QgZ2V0S2V5VHJpcGxldHMgPSAocHJlZml4OiBzdHJpbmcsIGNvdW50OiBudW1iZXIpID0+XG4gIFsuLi5BcnJheShjb3VudCldLm1hcCgodiwgaSkgPT5cbiAgICBbMSwgMiwgM10ubWFwKChqKSA9PiBiaXAzMi5mcm9tU2VlZChCdWZmZXIuYWxsb2MoMTYsIGAke3ByZWZpeH0vJHtpfS8ke2p9YCksIHV0eG9saWIubmV0d29ya3MuYml0Y29pbikpXG4gICk7XG5cbi8qKlxuICpcbiAqIENhbGxzIGBjYWxsYmFja2Agd2l0aCBhIHZhcmlldHkgb2Ygc2lnbmVkIHR4cywgYmFzZWQgb24gaW5wdXQgcGFyYW1ldGVyc1xuICogQ2FsbGJhY2sgYXJndW1lbnRzIGFyZVxuICogICBpbnB1dFR5cGUsIGlucHV0Q291bnQsIG91dHB1dFR5cGUsIHR4c1xuICogIHdoZXJlIGB0eHNgIGltcGxlbWVudHMgYGZvckVhY2goKWBcbiAqXG4gKiBAcGFyYW0gaW5wdXRUeXBlcyAtIGlucHV0IHR5cGVzIHRvIHRlc3RcbiAqIEBwYXJhbSBuSW5wdXRLZXlUcmlwbGV0cyAtIG51bWJlciBvZiBkaWZmZXJlbnQgaW5wdXQga2V5IHRyaXBsZXMgdG8gY3ljbGUgdGhyb3VnaFxuICogQHBhcmFtIG91dHB1dFR5cGVzIC0gb3V0cHV0IHR5cGVzIHRvIHRlc3RcbiAqIEBwYXJhbSBuT3V0cHV0S2V5VHJpcGxldHMgLSBudW1iZXIgb2YgZGlmZmVyZW50IG91dHB1dCBrZXkgdHJpcGxldHMgdG8gY3ljbGUgdGhyb3VnaFxuICogQHBhcmFtIGNhbGxiYWNrXG4gKi9cbmNvbnN0IHJ1blNpZ25lZFRyYW5zYWN0aW9ucyA9IChcbiAge1xuICAgIGlucHV0VHlwZXMsXG4gICAgbklucHV0S2V5VHJpcGxldHMsXG4gICAgb3V0cHV0VHlwZXMsXG4gICAgbk91dHB1dEtleVRyaXBsZXRzLFxuICB9OiB7XG4gICAgaW5wdXRUeXBlczogQXJyYXk8eyBpbnB1dFR5cGU6IHN0cmluZzsgY291bnQ6IG51bWJlciB9PjtcbiAgICBuSW5wdXRLZXlUcmlwbGV0czogbnVtYmVyO1xuICAgIG91dHB1dFR5cGVzOiBUZXN0VW5zcGVudFR5cGVbXTtcbiAgICBuT3V0cHV0S2V5VHJpcGxldHM6IG51bWJlcjtcbiAgfSxcbiAgY2FsbGJhY2s6IChpbnB1dFR5cGU6IHN0cmluZywgaW5wdXRDb3VudDogbnVtYmVyLCBvdXRwdXRUeXBlOiBUZXN0VW5zcGVudFR5cGUsIHR4czogYW55KSA9PiB2b2lkXG4pOiB2b2lkID0+IHtcbiAgY29uc3QgaW5wdXRLZXlUcmlwbGV0cyA9IGdldEtleVRyaXBsZXRzKCd0ZXN0L2lucHV0LycsIG5JbnB1dEtleVRyaXBsZXRzKTtcbiAgY29uc3Qgb3V0cHV0S2V5VHJpcGxldHMgPSBnZXRLZXlUcmlwbGV0cygndGVzdC9vdXRwdXQvJywgbk91dHB1dEtleVRyaXBsZXRzKTtcbiAgY29uc3Qgb3V0cHV0VmFsdWUgPSAxZTg7XG5cbiAgaW5wdXRUeXBlcy5mb3JFYWNoKCh7IGlucHV0VHlwZSwgY291bnQ6IGlucHV0Q291bnQgfSkgPT4ge1xuICAgIGNvbnN0IGlucHV0VHhzID0gaW5wdXRLZXlUcmlwbGV0cy5tYXAoKGlucHV0S2V5cykgPT4ge1xuICAgICAgY29uc3QgdW5zcGVudHMgPSBbLi4uQXJyYXkoaW5wdXRDb3VudCldLm1hcCgoKSA9PlxuICAgICAgICBjcmVhdGVVbnNwZW50KFxuICAgICAgICAgIGlucHV0S2V5cy5tYXAoKGtleSkgPT4ga2V5LnB1YmxpY0tleSksXG4gICAgICAgICAgaW5wdXRUeXBlLFxuICAgICAgICAgIG91dHB1dFZhbHVlXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgICBjb25zdCBpbnB1dFR4ID0gY3JlYXRlSW5wdXRUeCh1bnNwZW50cywgb3V0cHV0VmFsdWUpO1xuICAgICAgcmV0dXJuIHsgaW5wdXRLZXlzLCB1bnNwZW50cywgaW5wdXRUeCB9O1xuICAgIH0pO1xuXG4gICAgb3V0cHV0VHlwZXMuZm9yRWFjaCgob3V0cHV0VHlwZSkgPT4ge1xuICAgICAgY29uc3Qgb3V0cHV0cyA9IG91dHB1dEtleVRyaXBsZXRzLm1hcCgob3V0cHV0S2V5cykgPT4gY3JlYXRlU2NyaXB0UHViS2V5KG91dHB1dEtleXMsIG91dHB1dFR5cGUpKTtcblxuICAgICAgY29uc3QgdHhzID0ge1xuICAgICAgICBmb3JFYWNoKGNiOiAodHg6IHV0eG9saWIuVHJhbnNhY3Rpb24pID0+IHZvaWQpIHtcbiAgICAgICAgICBpbnB1dFR4cy5mb3JFYWNoKCh7IGlucHV0S2V5cywgdW5zcGVudHMsIGlucHV0VHggfSkgPT4ge1xuICAgICAgICAgICAgb3V0cHV0cy5mb3JFYWNoKChzY3JpcHRQdWJLZXkpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgdHhCdWlsZGVyID0gdXR4b2xpYi5iaXRnby5jcmVhdGVUcmFuc2FjdGlvbkJ1aWxkZXJGb3JOZXR3b3JrKHV0eG9saWIubmV0d29ya3MuYml0Y29pbik7XG4gICAgICAgICAgICAgIGlucHV0VHgub3V0cy5mb3JFYWNoKCh2OiBhbnksIGk6IG51bWJlcikgPT4gdHhCdWlsZGVyLmFkZElucHV0KGlucHV0VHgsIGkpKTtcbiAgICAgICAgICAgICAgdHhCdWlsZGVyLmFkZE91dHB1dChzY3JpcHRQdWJLZXksIG91dHB1dFZhbHVlKTtcbiAgICAgICAgICAgICAgdW5zcGVudHMuZm9yRWFjaCgodW5zcGVudCwgaSkgPT4ge1xuICAgICAgICAgICAgICAgIHNpZ25JbnB1dCh0eEJ1aWxkZXIsIGksIGlucHV0S2V5cywgdW5zcGVudCk7XG4gICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgIGNiKHR4QnVpbGRlci5idWlsZCgpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgfTtcblxuICAgICAgY2FsbGJhY2soaW5wdXRUeXBlLCBpbnB1dENvdW50LCBvdXRwdXRUeXBlLCB0eHMpO1xuICAgIH0pO1xuICB9KTtcbn07XG5cbmV4cG9ydCB7IFR4Q29tYm8sIEhpc3RvZ3JhbSwgcnVuQ29tYmluYXRpb25zLCBydW5TaWduZWRUcmFuc2FjdGlvbnMgfTtcbiJdfQ==
@@ -13,13 +13,13 @@ export declare const UnspentTypePubKeyHash: {
13
13
  p2pkh: 'p2pkh';
14
14
  p2wpkh: 'p2wpkh';
15
15
  };
16
- export declare type TestUnspentType = string | UnspentTypeOpReturn;
16
+ export type TestUnspentType = string | UnspentTypeOpReturn;
17
17
  export declare class UnspentTypeOpReturn {
18
18
  size: number;
19
19
  constructor(size: number);
20
20
  toString(): string;
21
21
  }
22
- export declare type InputScriptType = utxolib.bitgo.outputScripts.ScriptType | 'taprootKeyPathSpend';
22
+ export type InputScriptType = utxolib.bitgo.outputScripts.ScriptType | 'taprootKeyPathSpend';
23
23
  export declare function getInputScriptTypes(): InputScriptType[];
24
24
  /**
25
25
  * Return the input dimensions based on unspent type
@@ -1 +1 @@
1
- {"version":3,"file":"testutils.d.ts","sourceRoot":"","sources":["../../test/testutils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,QAAQ,CAAC;AACnC,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAC;AAYhD,eAAO,MAAM,mBAAmB,aAAa,CAAC;AAG9C,eAAO,MAAM,qBAAqB,EAAE;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,mBAAmB,EAAE,MAAM,CAAC;CACyD,CAAC;AAExF,eAAO,MAAM,qBAAqB,EAAE;IAClC,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,QAAQ,CAAC;CACY,CAAC;AAEhC,oBAAY,eAAe,GAAG,MAAM,GAAG,mBAAmB,CAAC;AAE3D,qBAAa,mBAAmB;IACX,IAAI,EAAE,MAAM;gBAAZ,IAAI,EAAE,MAAM;IAExB,QAAQ,IAAI,MAAM;CAG1B;AAED,oBAAY,eAAe,GAAG,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,UAAU,GAAG,qBAAqB,CAAC;AAE7F,wBAAgB,mBAAmB,IAAI,eAAe,EAAE,CAEvD;AAED;;;;GAIG;AACH,eAAO,MAAM,gCAAgC,gBAAiB,eAAe,KAAG,SAAS,UAiBxF,CAAC;AAEF,eAAO,MAAM,iCAAiC,gBAAiB,eAAe,KAAG,SAAS,UAuBzF,CAAC;AAkBF,wBAAgB,aAAa,CAC3B,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,cAAc,EAClC,UAAU,EAAE,eAAe,EAAE,EAC7B,WAAW,EAAE,eAAe,EAAE,EAC9B,eAAe,EAAE,UAAU,GAAG,YAAY,GAAG,aAAa,EAC1D,OAAO,CAAC,EAAE;IAAE,UAAU,EAAE,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC;IAAC,YAAY,EAAE,OAAO,CAAC,KAAK,CAAC,OAAO,CAAA;CAAE,GACnF,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAwD/D;AAED,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,cAAc,EAClC,UAAU,EAAE,OAAO,CAAC,KAAK,CAAC,OAAO,EACjC,YAAY,EAAE,OAAO,CAAC,KAAK,CAAC,OAAO,EACnC,UAAU,EAAE,eAAe,EAAE,EAC7B,WAAW,EAAE,eAAe,EAAE,GAC7B,OAAO,CAAC,KAAK,CAAC,eAAe,CAI/B"}
1
+ {"version":3,"file":"testutils.d.ts","sourceRoot":"","sources":["../../test/testutils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,QAAQ,CAAC;AACnC,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAC;AAYhD,eAAO,MAAM,mBAAmB,aAAa,CAAC;AAG9C,eAAO,MAAM,qBAAqB,EAAE;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,mBAAmB,EAAE,MAAM,CAAC;CACyD,CAAC;AAExF,eAAO,MAAM,qBAAqB,EAAE;IAClC,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,QAAQ,CAAC;CACY,CAAC;AAEhC,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,mBAAmB,CAAC;AAE3D,qBAAa,mBAAmB;IACvB,IAAI,EAAE,MAAM,CAAC;gBACR,IAAI,EAAE,MAAM;IAIjB,QAAQ,IAAI,MAAM;CAG1B;AAED,MAAM,MAAM,eAAe,GAAG,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,UAAU,GAAG,qBAAqB,CAAC;AAE7F,wBAAgB,mBAAmB,IAAI,eAAe,EAAE,CAEvD;AAED;;;;GAIG;AACH,eAAO,MAAM,gCAAgC,gBAAiB,eAAe,KAAG,QAAQ,CAAC,UAiBxF,CAAC;AAEF,eAAO,MAAM,iCAAiC,gBAAiB,eAAe,KAAG,QAAQ,CAAC,UAuBzF,CAAC;AAkBF,wBAAgB,aAAa,CAC3B,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,cAAc,EAClC,UAAU,EAAE,eAAe,EAAE,EAC7B,WAAW,EAAE,eAAe,EAAE,EAC9B,eAAe,EAAE,UAAU,GAAG,YAAY,GAAG,aAAa,EAC1D,OAAO,CAAC,EAAE;IAAE,UAAU,EAAE,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC;IAAC,YAAY,EAAE,OAAO,CAAC,KAAK,CAAC,OAAO,CAAA;CAAE,GACnF,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAwD/D;AAED,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,cAAc,EAClC,UAAU,EAAE,OAAO,CAAC,KAAK,CAAC,OAAO,EACjC,YAAY,EAAE,OAAO,CAAC,KAAK,CAAC,OAAO,EACnC,UAAU,EAAE,eAAe,EAAE,EAC7B,WAAW,EAAE,eAAe,EAAE,GAC7B,OAAO,CAAC,KAAK,CAAC,eAAe,CAI/B"}
@@ -1,7 +1,11 @@
1
1
  "use strict";
2
2
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
3
  if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
5
9
  }) : (function(o, m, k, k2) {
6
10
  if (k2 === undefined) k2 = k;
7
11
  o[k2] = m[k];
@@ -11,18 +15,31 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
11
15
  }) : function(o, v) {
12
16
  o["default"] = v;
13
17
  });
14
- var __importStar = (this && this.__importStar) || function (mod) {
15
- if (mod && mod.__esModule) return mod;
16
- var result = {};
17
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
- __setModuleDefault(result, mod);
19
- return result;
20
- };
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
21
35
  var __importDefault = (this && this.__importDefault) || function (mod) {
22
36
  return (mod && mod.__esModule) ? mod : { "default": mod };
23
37
  };
24
38
  Object.defineProperty(exports, "__esModule", { value: true });
25
- exports.getSignedTransaction = exports.constructPsbt = exports.getOutputDimensionsForUnspentType = exports.getInputDimensionsForUnspentType = exports.getInputScriptTypes = exports.UnspentTypeOpReturn = exports.UnspentTypePubKeyHash = exports.UnspentTypeScript2of3 = exports.UnspentTypeP2shP2pk = void 0;
39
+ exports.getOutputDimensionsForUnspentType = exports.getInputDimensionsForUnspentType = exports.UnspentTypeOpReturn = exports.UnspentTypePubKeyHash = exports.UnspentTypeScript2of3 = exports.UnspentTypeP2shP2pk = void 0;
40
+ exports.getInputScriptTypes = getInputScriptTypes;
41
+ exports.constructPsbt = constructPsbt;
42
+ exports.getSignedTransaction = getSignedTransaction;
26
43
  const unspents = __importStar(require("../src"));
27
44
  const utxolib = __importStar(require("@bitgo-beta/utxo-lib"));
28
45
  const assert_1 = __importDefault(require("assert"));
@@ -50,7 +67,6 @@ exports.UnspentTypeOpReturn = UnspentTypeOpReturn;
50
67
  function getInputScriptTypes() {
51
68
  return [...utxolib.bitgo.outputScripts.scriptTypes2Of3, 'p2shP2pk', 'taprootKeyPathSpend'];
52
69
  }
53
- exports.getInputScriptTypes = getInputScriptTypes;
54
70
  /**
55
71
  * Return the input dimensions based on unspent type
56
72
  * @param unspentType - one of UnspentTypeScript2of3
@@ -138,7 +154,7 @@ function constructPsbt(keys, inputTypes, outputTypes, signatureStatus, signers)
138
154
  });
139
155
  outputTypes.forEach((t, index) => {
140
156
  psbt.addOutput({
141
- script: txGen_1.createScriptPubKey(keys.triple, t),
157
+ script: (0, txGen_1.createScriptPubKey)(keys.triple, t),
142
158
  value: BigInt(10),
143
159
  });
144
160
  });
@@ -166,11 +182,9 @@ function constructPsbt(keys, inputTypes, outputTypes, signatureStatus, signers)
166
182
  }
167
183
  return psbt;
168
184
  }
169
- exports.constructPsbt = constructPsbt;
170
185
  function getSignedTransaction(keys, signerName, cosignerName, inputTypes, outputTypes) {
171
186
  const psbt = constructPsbt(keys, inputTypes, outputTypes, 'fullysigned', { signerName, cosignerName });
172
187
  psbt.finalizeAllInputs();
173
188
  return psbt.extractTransaction().clone('number');
174
189
  }
175
- exports.getSignedTransaction = getSignedTransaction;
176
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdHV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdGVzdC90ZXN0dXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGlEQUFtQztBQUNuQyw4REFBZ0Q7QUFDaEQsb0RBQTRCO0FBQzVCLDRDQUFzRDtBQUV0RDs7Ozs7R0FLRztBQUNILE1BQU0sUUFBUSxHQUFHLENBQUMsR0FBRyxJQUFjLEVBQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUVsRyxRQUFBLG1CQUFtQixHQUFHLFVBQVUsQ0FBQztBQUU5QywrRkFBK0Y7QUFDbEYsUUFBQSxxQkFBcUIsR0FPOUIsUUFBUSxDQUFDLE1BQU0sRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUscUJBQXFCLENBQUMsQ0FBQztBQUUzRSxRQUFBLHFCQUFxQixHQUc5QixRQUFRLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBSWhDLE1BQWEsbUJBQW1CO0lBQzlCLFlBQW1CLElBQVk7UUFBWixTQUFJLEdBQUosSUFBSSxDQUFRO0lBQUcsQ0FBQztJQUU1QixRQUFRO1FBQ2IsT0FBTyxZQUFZLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQztJQUNsQyxDQUFDO0NBQ0Y7QUFORCxrREFNQztBQUlELFNBQWdCLG1CQUFtQjtJQUNqQyxPQUFPLENBQUMsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxlQUFlLEVBQUUsVUFBVSxFQUFFLHFCQUFxQixDQUFDLENBQUM7QUFDN0YsQ0FBQztBQUZELGtEQUVDO0FBRUQ7Ozs7R0FJRztBQUNJLE1B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QUFDLEtBQUssQ0FBUyxRQUFRLENBQUMsQ0FBQztBQUN0RyxDQUFDO0FBVkQsb0RBVUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyB1bnNwZW50cyBmcm9tICcuLi9zcmMnO1xuaW1wb3J0ICogYXMgdXR4b2xpYiBmcm9tICdAYml0Z28tYmV0YS91dHhvLWxpYic7XG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgeyBjcmVhdGVTY3JpcHRQdWJLZXkgfSBmcm9tICcuL3NpZ25lZFR4L3R4R2VuJztcblxuLyoqXG4gKiBtYWtlRW51bSgnYScsICdiJykgcmV0dXJucyBgeyBhOiAnYScsIGI6ICdiJyB9YFxuICpcbiAqIEBwYXJhbSBhcmdzXG4gKiBAcmV0dXJuIG1hcCB3aXRoIHN0cmluZyBrZXlzIGFuZCBzeW1ib2wgdmFsdWVzXG4gKi9cbmNvbnN0IG1ha2VFbnVtID0gKC4uLmFyZ3M6IHN0cmluZ1tdKTogYW55ID0+IGFyZ3MucmVkdWNlKChvYmosIGtleSkgPT4gT2JqZWN0LmFzc2lnbihvYmosIHsgW2tleV06IGtleSB9KSwge30pO1xuXG5leHBvcnQgY29uc3QgVW5zcGVudFR5cGVQMnNoUDJwayA9ICdwMnNoUDJwayc7XG5cbi8vIHAydHJNdXNpZzIgaXMgYXNzdW1lZCB0byBiZSBzY3JpcHQgcGF0aCBvbmx5LiB0YXByb290S2V5UGF0aFNwZW5kIGlzIGZvciBwMnRyTXVzaWcyIGtleSBwYXRoXG5leHBvcnQgY29uc3QgVW5zcGVudFR5cGVTY3JpcHQyb2YzOiB7XG4gIHAyc2g6IHN0cmluZztcbiAgcDJzaFAyd3NoOiBzdHJpbmc7XG4gIHAyd3NoOiBzdHJpbmc7XG4gIHAydHI6IHN0cmluZztcbiAgcDJ0ck11c2lnMjogc3RyaW5nO1xuICB0YXByb290S2V5UGF0aFNwZW5kOiBzdHJpbmc7XG59ID0gbWFrZUVudW0oJ3Ayc2gnLCAncDJzaFAyd3NoJywgJ3Ayd3NoJywgJ3AydHInLCAncDJ0ck11c2lnMicsICd0YXByb290S2V5UGF0aFNwZW5kJyk7XG5cbmV4cG9ydCBjb25zdCBVbnNwZW50VHlwZVB1YktleUhhc2g6IHtcbiAgcDJwa2g6ICdwMnBraCc7XG4gIHAyd3BraDogJ3Ayd3BraCc7XG59ID0gbWFrZUVudW0oJ3AycGtoJywgJ3Ayd3BraCcpO1xuXG5leHBvcnQgdHlwZSBUZXN0VW5zcGVudFR5cGUgPSBzdHJpbmcgfCBVbnNwZW50VHlwZU9wUmV0dXJuO1xuXG5leHBvcnQgY2xhc3MgVW5zcGVudFR5cGVPcFJldHVybiB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBzaXplOiBudW1iZXIpIHt9XG5cbiAgcHVibGljIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBvcFJldHVybigke3RoaXMuc2l6ZX0pYDtcbiAgfVxufVxuXG5leHBvcnQgdHlwZSBJbnB1dFNjcmlwdFR5cGUgPSB1dHhvbGliLmJpdGdvLm91dHB1dFNjcmlwdHMuU2NyaXB0VHlwZSB8ICd0YXByb290S2V5UGF0aFNwZW5kJztcblxuZXhwb3J0IGZ1bmN0aW9uIGdldElucHV0U2NyaXB0VHlwZXMoKTogSW5wdXRTY3JpcHRUeXBlW10ge1xuICByZXR1cm4gWy4uLnV0eG9saWIuYml0Z28ub3V0cHV0U2NyaXB0cy5zY3JpcHRUeXBlczJPZjMsICdwMnNoUDJwaycsICd0YXByb290S2V5UGF0aFNwZW5kJ107XG59XG5cbi8qKlxuICogUmV0dXJuIHRoZSBpbnB1dCBkaW1lbnNpb25zIGJhc2VkIG9uIHVuc3BlbnQgdHlwZVxuICogQHBhcmFtIHVuc3BlbnRUeXBlIC0gb25lIG9mIFVuc3BlbnRUeXBlU2NyaXB0Mm9mM1xuICogQHJldHVybiBEaW1lbnNpb25zXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRJbnB1dERpbWVuc2lvbnNGb3JVbnNwZW50VHlwZSA9ICh1bnNwZW50VHlwZTogVGVzdFVuc3BlbnRUeXBlKTogdW5zcGVudHMuRGltZW5zaW9ucyA9PiB7XG4gIHN3aXRjaCAodW5zcGVudFR5cGUpIHtcbiAgICBjYXNlIFVuc3BlbnRUeXBlU2NyaXB0Mm9mMy5wMnNoOlxuICAgICAgcmV0dXJuIHVuc3BlbnRzLkRpbWVuc2lvbnMuc3VtKHsgblAyc2hJbnB1dHM6IDEgfSk7XG4gICAgY2FzZSBVbnNwZW50VHlwZVNjcmlwdDJvZjMucDJzaFAyd3NoOlxuICAgICAgcmV0dXJuIHVuc3BlbnRzLkRpbWVuc2lvbnMuc3VtKHsgblAyc2hQMndzaElucHV0czogMSB9KTtcbiAgICBjYXNlIFVuc3BlbnRUeXBlU2NyaXB0Mm9mMy5wMndzaDpcbiAgICAgIHJldHVybiB1bnNwZW50cy5EaW1lbnNpb25zLnN1bSh7IG5QMndzaElucHV0czogMSB9KTtcbiAgICBjYXNlIFVuc3BlbnRUeXBlU2NyaXB0Mm9mMy5wMnRyOlxuICAgIGNhc2UgVW5zcGVudFR5cGVTY3JpcHQyb2YzLnAydHJNdXNpZzI6XG4gICAgICByZXR1cm4gdW5zcGVudHMuRGltZW5zaW9ucy5zdW0oeyBuUDJ0clNjcmlwdFBhdGhMZXZlbDFJbnB1dHM6IDEgfSk7XG4gICAgY2FzZSBVbnNwZW50VHlwZVNjcmlwdDJvZjMudGFwcm9vdEtleVBhdGhTcGVuZDpcbiAgICAgIHJldHVybiB1bnNwZW50cy5EaW1lbnNpb25zLnN1bSh7IG5QMnRyS2V5cGF0aElucHV0czogMSB9KTtcbiAgICBjYXNlIFVuc3BlbnRUeXBlUDJzaFAycGs6XG4gICAgICByZXR1cm4gdW5zcGVudHMuRGltZW5zaW9ucy5zdW0oeyBuUDJzaFAycGtJbnB1dHM6IDEgfSk7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKGBubyBpbnB1dCBkaW1lbnNpb25zIGZvciAke3Vuc3BlbnRUeXBlfWApO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldE91dHB1dERpbWVuc2lvbnNGb3JVbnNwZW50VHlwZSA9ICh1bnNwZW50VHlwZTogVGVzdFVuc3BlbnRUeXBlKTogdW5zcGVudHMuRGltZW5zaW9ucyA9PiB7XG4gIC8qIFRoZSB2YWx1ZXMgaGVyZSBhcmUgdmFsaWRhdGVkIGluIHRoZSB0ZXN0ICdjYWxjdWxhdGVzIG91dHB1dCBkaW1lbnNpb25zIGR5bmFtaWNhbGx5JyAqL1xuICBzd2l0Y2ggKHVuc3BlbnRUeXBlKSB7XG4gICAgY2FzZSBVbnNwZW50VHlwZVNjcmlwdDJvZjMucDJzaDpcbiAgICBjYXNlIFVuc3BlbnRUeXBlU2NyaXB0Mm9mMy5wMnNoUDJ3c2g6XG4gICAgY2FzZSBVbnNwZW50VHlwZVAyc2hQMnBrOlxuICAgICAgcmV0dXJuIHVuc3BlbnRzLkRpbWVuc2lvbnMuZnJvbU91dHB1dFNjcmlwdExlbmd0aCgyMyk7XG4gICAgY2FzZSBVbnNwZW50VHlwZVNjcmlwdDJvZjMucDJ3c2g6XG4gICAgICByZXR1cm4gdW5zcGVudHMuRGltZW5zaW9ucy5mcm9tT3V0cHV0U2NyaXB0TGVuZ3RoKDM0KTtcbiAgICBjYXNlIFVuc3BlbnRUeXBlU2NyaXB0Mm9mMy5wMnRyOlxuICAgIGNhc2UgVW5zcGVudFR5cGVTY3JpcHQyb2YzLnAydHJNdXNpZzI6XG4gICAgY2FzZSBVbnNwZW50VHlwZVNjcmlwdDJvZjMudGFwcm9vdEtleVBhdGhTcGVuZDpcbiAgICAgIHJldHVybiB1bnNwZW50cy5EaW1lbnNpb25zLmZyb21PdXRwdXRTY3JpcHRMZW5ndGgoMzQpO1xuICAgIGNhc2UgVW5zcGVudFR5cGVQdWJLZXlIYXNoLnAycGtoOlxuICAgICAgcmV0dXJuIHVuc3BlbnRzLkRpbWVuc2lvbnMuZnJvbU91dHB1dFNjcmlwdExlbmd0aCgyNSk7XG4gICAgY2FzZSBVbnNwZW50VHlwZVB1YktleUhhc2gucDJ3cGtoOlxuICAgICAgcmV0dXJuIHVuc3BlbnRzLkRpbWVuc2lvbnMuZnJvbU91dHB1dFNjcmlwdExlbmd0aCgyMik7XG4gICAgZGVmYXVsdDpcbiAgICAgIGlmICh1bnNwZW50VHlwZSBpbnN0YW5jZW9mIFVuc3BlbnRUeXBlT3BSZXR1cm4pIHtcbiAgICAgICAgcmV0dXJuIHVuc3BlbnRzLkRpbWVuc2lvbnMuZnJvbU91dHB1dFNjcmlwdExlbmd0aCgxICsgdW5zcGVudFR5cGUuc2l6ZSk7XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGB1bmtub3duIHVuc3BlbnRUeXBlICR7dW5zcGVudFR5cGV9YCk7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGdldERlZmF1bHRTaWduZXJOYW1lcyhcbiAgaW5wdXRUeXBlOiBJbnB1dFNjcmlwdFR5cGUsXG4gIHNpZ25lcnM/OiB7IHNpZ25lck5hbWU6IHV0eG9saWIuYml0Z28uS2V5TmFtZTsgY29zaWduZXJOYW1lOiB1dHhvbGliLmJpdGdvLktleU5hbWUgfVxuKTogdXR4b2xpYi5iaXRnby5LZXlOYW1lW10ge1xuICBpZiAoc2lnbmVycykge1xuICAgIHJldHVybiBbc2lnbmVycy5zaWduZXJOYW1lLCBzaWduZXJzLmNvc2lnbmVyTmFtZV07XG4gIH1cbiAgaWYgKGlucHV0VHlwZSA9PT0gJ3Ayc2hQMnBrJykge1xuICAgIHJldHVybiBbJ3VzZXInXTtcbiAgfVxuICBpZiAoaW5wdXRUeXBlID09PSAncDJ0ck11c2lnMicpIHtcbiAgICByZXR1cm4gWyd1c2VyJywgJ2JhY2t1cCddO1xuICB9XG4gIHJldHVybiBbJ3VzZXInLCAnYml0Z28nXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnN0cnVjdFBzYnQoXG4gIGtleXM6IHV0eG9saWIuYml0Z28uUm9vdFdhbGxldEtleXMsXG4gIGlucHV0VHlwZXM6IElucHV0U2NyaXB0VHlwZVtdLFxuICBvdXRwdXRUeXBlczogVGVzdFVuc3BlbnRUeXBlW10sXG4gIHNpZ25hdHVyZVN0YXR1czogJ3Vuc2lnbmVkJyB8ICdoYWxmc2lnbmVkJyB8ICdmdWxseXNpZ25lZCcsXG4gIHNpZ25lcnM/OiB7IHNpZ25lck5hbWU6IHV0eG9saWIuYml0Z28uS2V5TmFtZTsgY29zaWduZXJOYW1lOiB1dHhvbGliLmJpdGdvLktleU5hbWUgfVxuKTogdXR4b2xpYi5iaXRnby5VdHhvUHNidDx1dHhvbGliLmJpdGdvLlV0eG9UcmFuc2FjdGlvbjxiaWdpbnQ+PiB7XG4gIGNvbnN0IHBzYnQgPSB1dHhvbGliLmJpdGdvLmNyZWF0ZVBzYnRGb3JOZXR3b3JrKHsgbmV0d29yazogdXR4b2xpYi5uZXR3b3Jrcy5iaXRjb2luIH0pO1xuXG4gIGlucHV0VHlwZXMuZm9yRWFjaCgodCwgaSkgPT4ge1xuICAgIGlmICh0ID09PSAncDJzaFAycGsnKSB7XG4gICAgICBjb25zdCBzaWduZXIgPSBrZXlzW2dldERlZmF1bHRTaWduZXJOYW1lcyh0LCBzaWduZXJzKVswXV07XG4gICAgICBjb25zdCB1bnNwZW50ID0gdXR4b2xpYi50ZXN0dXRpbC5tb2NrUmVwbGF5UHJvdGVjdGlvblVuc3BlbnQodXR4b2xpYi5uZXR3b3Jrcy5iaXRjb2luLCBCaWdJbnQoMTApLCB7XG4gICAgICAgIGtleTogc2lnbmVyLFxuICAgICAgICB2b3V0OiBpLFxuICAgICAgfSk7XG4gICAgICBjb25zdCB7IHJlZGVlbVNjcmlwdCB9ID0gdXR4b2xpYi5iaXRnby5vdXRwdXRTY3JpcHRzLmNyZWF0ZU91dHB1dFNjcmlwdFAyc2hQMnBrKHNpZ25lci5wdWJsaWNLZXkpO1xuICAgICAgYXNzZXJ0Lm9rKHJlZGVlbVNjcmlwdCk7XG4gICAgICB1dHhvbGliLmJpdGdvLmFkZFJlcGxheVByb3RlY3Rpb25VbnNwZW50VG9Qc2J0KHBzYnQsIHVuc3BlbnQsIHJlZGVlbVNjcmlwdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHVuc3BlbnQgPSB1dHhvbGliLnRlc3R1dGlsLm1vY2tXYWxsZXRVbnNwZW50KHV0eG9saWIubmV0d29ya3MuYml0Y29pbiwgQmlnSW50KDEwKSwge1xuICAgICAgICBrZXlzLFxuICAgICAgICBjaGFpbjogdXR4b2xpYi5iaXRnby5nZXRFeHRlcm5hbENoYWluQ29kZSh0ID09PSAndGFwcm9vdEtleVBhdGhTcGVuZCcgPyAncDJ0ck11c2lnMicgOiB0KSxcbiAgICAgICAgdm91dDogaSxcbiAgICAgICAgaW5kZXg6IGksXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHNpZ25lck5hbWVzID0gZ2V0RGVmYXVsdFNpZ25lck5hbWVzKHQsIHNpZ25lcnMpO1xuICAgICAgdXR4b2xpYi5iaXRnby5hZGRXYWxsZXRVbnNwZW50VG9Qc2J0KHBzYnQsIHVuc3BlbnQsIGtleXMsIHNpZ25lck5hbWVzWzBdLCBzaWduZXJOYW1lc1sxXSk7XG4gICAgfVxuICB9KTtcblxuICBvdXRwdXRUeXBlcy5mb3JFYWNoKCh0LCBpbmRleCkgPT4ge1xuICAgIHBzYnQuYWRkT3V0cHV0KHtcbiAgICAgIHNjcmlwdDogY3JlYXRlU2NyaXB0UHViS2V5KGtleXMudHJpcGxlLCB0KSxcbiAgICAgIHZhbHVlOiBCaWdJbnQoMTApLFxuICAgIH0pO1xuICB9KTtcblxuICBpZiAoc2lnbmF0dXJlU3RhdHVzID09PSAndW5zaWduZWQnKSB7XG4gICAgcmV0dXJuIHBzYnQ7XG4gIH1cblxuICBwc2J0LnNldEFsbElucHV0c011c2lnMk5vbmNlSEQoa2V5c1sndXNlciddKTtcbiAgcHNidC5zZXRBbGxJbnB1dHNNdXNpZzJOb25jZUhEKGtleXNbJ2JpdGdvJ10pO1xuXG4gIGlucHV0VHlwZXMuZm9yRWFjaCgodCwgaSkgPT4ge1xuICAgIGNvbnN0IHNpZ25lck5hbWVzID0gZ2V0RGVmYXVsdFNpZ25lck5hbWVzKHQsIHNpZ25lcnMpO1xuICAgIGlmICh0ID09PSAncDJzaFAycGsnKSB7XG4gICAgICBpZiAoc2lnbmF0dXJlU3RhdHVzID09PSAnZnVsbHlzaWduZWQnKSB7XG4gICAgICAgIHBzYnQuc2lnbklucHV0KGksIGtleXNbc2lnbmVyTmFtZXNbMF1dKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcHNidC5zaWduSW5wdXRIRChpLCBrZXlzW3NpZ25lck5hbWVzWzBdXSk7XG4gICAgICBpZiAoc2lnbmF0dXJlU3RhdHVzID09PSAnZnVsbHlzaWduZWQnKSB7XG4gICAgICAgIHBzYnQuc2lnbklucHV0SEQoaSwga2V5c1tzaWduZXJOYW1lc1sxXV0pO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIGlmIChzaWduYXR1cmVTdGF0dXMgPT09ICdmdWxseXNpZ25lZCcpIHtcbiAgICBhc3NlcnQub2socHNidC52YWxpZGF0ZVNpZ25hdHVyZXNPZkFsbElucHV0cygpKTtcbiAgfVxuICByZXR1cm4gcHNidDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNpZ25lZFRyYW5zYWN0aW9uKFxuICBrZXlzOiB1dHhvbGliLmJpdGdvLlJvb3RXYWxsZXRLZXlzLFxuICBzaWduZXJOYW1lOiB1dHhvbGliLmJpdGdvLktleU5hbWUsXG4gIGNvc2lnbmVyTmFtZTogdXR4b2xpYi5iaXRnby5LZXlOYW1lLFxuICBpbnB1dFR5cGVzOiBJbnB1dFNjcmlwdFR5cGVbXSxcbiAgb3V0cHV0VHlwZXM6IFRlc3RVbnNwZW50VHlwZVtdXG4pOiB1dHhvbGliLmJpdGdvLlV0eG9UcmFuc2FjdGlvbiB7XG4gIGNvbnN0IHBzYnQgPSBjb25zdHJ1Y3RQc2J0KGtleXMsIGlucHV0VHlwZXMsIG91dHB1dFR5cGVzLCAnZnVsbHlzaWduZWQnLCB7IHNpZ25lck5hbWUsIGNvc2lnbmVyTmFtZSB9KTtcbiAgcHNidC5maW5hbGl6ZUFsbElucHV0cygpO1xuICByZXR1cm4gKHBzYnQuZXh0cmFjdFRyYW5zYWN0aW9uKCkgYXMgdXR4b2xpYi5iaXRnby5VdHhvVHJhbnNhY3Rpb248YmlnaW50PikuY2xvbmU8bnVtYmVyPignbnVtYmVyJyk7XG59XG4iXX0=
190
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdHV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdGVzdC90ZXN0dXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBNkNBLGtEQUVDO0FBbUVELHNDQThEQztBQUVELG9EQVVDO0FBNUxELGlEQUFtQztBQUNuQyw4REFBZ0Q7QUFDaEQsb0RBQTRCO0FBQzVCLDRDQUFzRDtBQUV0RDs7Ozs7R0FLRztBQUNILE1BQU0sUUFBUSxHQUFHLENBQUMsR0FBRyxJQUFjLEVBQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUVsRyxRQUFBLG1CQUFtQixHQUFHLFVBQVUsQ0FBQztBQUU5QywrRkFBK0Y7QUFDbEYsUUFBQSxxQkFBcUIsR0FPOUIsUUFBUSxDQUFDLE1BQU0sRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUscUJBQXFCLENBQUMsQ0FBQztBQUUzRSxRQUFBLHFCQUFxQixHQUc5QixRQUFRLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBSWhDLE1BQWEsbUJBQW1CO0lBRTlCLFlBQVksSUFBWTtRQUN0QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztJQUNuQixDQUFDO0lBRU0sUUFBUTtRQUNiLE9BQU8sWUFBWSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUM7SUFDbEMsQ0FBQztDQUNGO0FBVEQsa0RBU0M7QUFJRCxTQUFnQixtQkFBbUI7SUFDakMsT0FBTyxDQUFDLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsZUFBZSxFQUFFLFVBQVUsRUFB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QixXQUE4QjtJQUU5QixNQUFNLElBQUksR0FBRyxhQUFhLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUM7SUFDdkcsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7SUFDekIsT0FBUSxJQUFJLENBQUMsa0JBQWtCLEVBQTRDLENBQUMsS0FBSyxDQUFTLFFBQVEsQ0FBQyxDQUFDO0FBQ3RHLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyB1bnNwZW50cyBmcm9tICcuLi9zcmMnO1xuaW1wb3J0ICogYXMgdXR4b2xpYiBmcm9tICdAYml0Z28tYmV0YS91dHhvLWxpYic7XG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgeyBjcmVhdGVTY3JpcHRQdWJLZXkgfSBmcm9tICcuL3NpZ25lZFR4L3R4R2VuJztcblxuLyoqXG4gKiBtYWtlRW51bSgnYScsICdiJykgcmV0dXJucyBgeyBhOiAnYScsIGI6ICdiJyB9YFxuICpcbiAqIEBwYXJhbSBhcmdzXG4gKiBAcmV0dXJuIG1hcCB3aXRoIHN0cmluZyBrZXlzIGFuZCBzeW1ib2wgdmFsdWVzXG4gKi9cbmNvbnN0IG1ha2VFbnVtID0gKC4uLmFyZ3M6IHN0cmluZ1tdKTogYW55ID0+IGFyZ3MucmVkdWNlKChvYmosIGtleSkgPT4gT2JqZWN0LmFzc2lnbihvYmosIHsgW2tleV06IGtleSB9KSwge30pO1xuXG5leHBvcnQgY29uc3QgVW5zcGVudFR5cGVQMnNoUDJwayA9ICdwMnNoUDJwayc7XG5cbi8vIHAydHJNdXNpZzIgaXMgYXNzdW1lZCB0byBiZSBzY3JpcHQgcGF0aCBvbmx5LiB0YXByb290S2V5UGF0aFNwZW5kIGlzIGZvciBwMnRyTXVzaWcyIGtleSBwYXRoXG5leHBvcnQgY29uc3QgVW5zcGVudFR5cGVTY3JpcHQyb2YzOiB7XG4gIHAyc2g6IHN0cmluZztcbiAgcDJzaFAyd3NoOiBzdHJpbmc7XG4gIHAyd3NoOiBzdHJpbmc7XG4gIHAydHI6IHN0cmluZztcbiAgcDJ0ck11c2lnMjogc3RyaW5nO1xuICB0YXByb290S2V5UGF0aFNwZW5kOiBzdHJpbmc7XG59ID0gbWFrZUVudW0oJ3Ayc2gnLCAncDJzaFAyd3NoJywgJ3Ayd3NoJywgJ3AydHInLCAncDJ0ck11c2lnMicsICd0YXByb290S2V5UGF0aFNwZW5kJyk7XG5cbmV4cG9ydCBjb25zdCBVbnNwZW50VHlwZVB1YktleUhhc2g6IHtcbiAgcDJwa2g6ICdwMnBraCc7XG4gIHAyd3BraDogJ3Ayd3BraCc7XG59ID0gbWFrZUVudW0oJ3AycGtoJywgJ3Ayd3BraCcpO1xuXG5leHBvcnQgdHlwZSBUZXN0VW5zcGVudFR5cGUgPSBzdHJpbmcgfCBVbnNwZW50VHlwZU9wUmV0dXJuO1xuXG5leHBvcnQgY2xhc3MgVW5zcGVudFR5cGVPcFJldHVybiB7XG4gIHB1YmxpYyBzaXplOiBudW1iZXI7XG4gIGNvbnN0cnVjdG9yKHNpemU6IG51bWJlcikge1xuICAgIHRoaXMuc2l6ZSA9IHNpemU7XG4gIH1cblxuICBwdWJsaWMgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYG9wUmV0dXJuKCR7dGhpcy5zaXplfSlgO1xuICB9XG59XG5cbmV4cG9ydCB0eXBlIElucHV0U2NyaXB0VHlwZSA9IHV0eG9saWIuYml0Z28ub3V0cHV0U2NyaXB0cy5TY3JpcHRUeXBlIHwgJ3RhcHJvb3RLZXlQYXRoU3BlbmQnO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW5wdXRTY3JpcHRUeXBlcygpOiBJbnB1dFNjcmlwdFR5cGVbXSB7XG4gIHJldHVybiBbLi4udXR4b2xpYi5iaXRnby5vdXRwdXRTY3JpcHRzLnNjcmlwdFR5cGVzMk9mMywgJ3Ayc2hQMnBrJywgJ3RhcHJvb3RLZXlQYXRoU3BlbmQnXTtcbn1cblxuLyoqXG4gKiBSZXR1cm4gdGhlIGlucHV0IGRpbWVuc2lvbnMgYmFzZWQgb24gdW5zcGVudCB0eXBlXG4gKiBAcGFyYW0gdW5zcGVudFR5cGUgLSBvbmUgb2YgVW5zcGVudFR5cGVTY3JpcHQyb2YzXG4gKiBAcmV0dXJuIERpbWVuc2lvbnNcbiAqL1xuZXhwb3J0IGNvbnN0IGdldElucHV0RGltZW5zaW9uc0ZvclVuc3BlbnRUeXBlID0gKHVuc3BlbnRUeXBlOiBUZXN0VW5zcGVudFR5cGUpOiB1bnNwZW50cy5EaW1lbnNpb25zID0+IHtcbiAgc3dpdGNoICh1bnNwZW50VHlwZSkge1xuICAgIGNhc2UgVW5zcGVudFR5cGVTY3JpcHQyb2YzLnAyc2g6XG4gICAgICByZXR1cm4gdW5zcGVudHMuRGltZW5zaW9ucy5zdW0oeyBuUDJzaElucHV0czogMSB9KTtcbiAgICBjYXNlIFVuc3BlbnRUeXBlU2NyaXB0Mm9mMy5wMnNoUDJ3c2g6XG4gICAgICByZXR1cm4gdW5zcGVudHMuRGltZW5zaW9ucy5zdW0oeyBuUDJzaFAyd3NoSW5wdXRzOiAxIH0pO1xuICAgIGNhc2UgVW5zcGVudFR5cGVTY3JpcHQyb2YzLnAyd3NoOlxuICAgICAgcmV0dXJuIHVuc3BlbnRzLkRpbWVuc2lvbnMuc3VtKHsgblAyd3NoSW5wdXRzOiAxIH0pO1xuICAgIGNhc2UgVW5zcGVudFR5cGVTY3JpcHQyb2YzLnAydHI6XG4gICAgY2FzZSBVbnNwZW50VHlwZVNjcmlwdDJvZjMucDJ0ck11c2lnMjpcbiAgICAgIHJldHVybiB1bnNwZW50cy5EaW1lbnNpb25zLnN1bSh7IG5QMnRyU2NyaXB0UGF0aExldmVsMUlucHV0czogMSB9KTtcbiAgICBjYXNlIFVuc3BlbnRUeXBlU2NyaXB0Mm9mMy50YXByb290S2V5UGF0aFNwZW5kOlxuICAgICAgcmV0dXJuIHVuc3BlbnRzLkRpbWVuc2lvbnMuc3VtKHsgblAydHJLZXlwYXRoSW5wdXRzOiAxIH0pO1xuICAgIGNhc2UgVW5zcGVudFR5cGVQMnNoUDJwazpcbiAgICAgIHJldHVybiB1bnNwZW50cy5EaW1lbnNpb25zLnN1bSh7IG5QMnNoUDJwa0lucHV0czogMSB9KTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoYG5vIGlucHV0IGRpbWVuc2lvbnMgZm9yICR7dW5zcGVudFR5cGV9YCk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0T3V0cHV0RGltZW5zaW9uc0ZvclVuc3BlbnRUeXBlID0gKHVuc3BlbnRUeXBlOiBUZXN0VW5zcGVudFR5cGUpOiB1bnNwZW50cy5EaW1lbnNpb25zID0+IHtcbiAgLyogVGhlIHZhbHVlcyBoZXJlIGFyZSB2YWxpZGF0ZWQgaW4gdGhlIHRlc3QgJ2NhbGN1bGF0ZXMgb3V0cHV0IGRpbWVuc2lvbnMgZHluYW1pY2FsbHknICovXG4gIHN3aXRjaCAodW5zcGVudFR5cGUpIHtcbiAgICBjYXNlIFVuc3BlbnRUeXBlU2NyaXB0Mm9mMy5wMnNoOlxuICAgIGNhc2UgVW5zcGVudFR5cGVTY3JpcHQyb2YzLnAyc2hQMndzaDpcbiAgICBjYXNlIFVuc3BlbnRUeXBlUDJzaFAycGs6XG4gICAgICByZXR1cm4gdW5zcGVudHMuRGltZW5zaW9ucy5mcm9tT3V0cHV0U2NyaXB0TGVuZ3RoKDIzKTtcbiAgICBjYXNlIFVuc3BlbnRUeXBlU2NyaXB0Mm9mMy5wMndzaDpcbiAgICAgIHJldHVybiB1bnNwZW50cy5EaW1lbnNpb25zLmZyb21PdXRwdXRTY3JpcHRMZW5ndGgoMzQpO1xuICAgIGNhc2UgVW5zcGVudFR5cGVTY3JpcHQyb2YzLnAydHI6XG4gICAgY2FzZSBVbnNwZW50VHlwZVNjcmlwdDJvZjMucDJ0ck11c2lnMjpcbiAgICBjYXNlIFVuc3BlbnRUeXBlU2NyaXB0Mm9mMy50YXByb290S2V5UGF0aFNwZW5kOlxuICAgICAgcmV0dXJuIHVuc3BlbnRzLkRpbWVuc2lvbnMuZnJvbU91dHB1dFNjcmlwdExlbmd0aCgzNCk7XG4gICAgY2FzZSBVbnNwZW50VHlwZVB1YktleUhhc2gucDJwa2g6XG4gICAgICByZXR1cm4gdW5zcGVudHMuRGltZW5zaW9ucy5mcm9tT3V0cHV0U2NyaXB0TGVuZ3RoKDI1KTtcbiAgICBjYXNlIFVuc3BlbnRUeXBlUHViS2V5SGFzaC5wMndwa2g6XG4gICAgICByZXR1cm4gdW5zcGVudHMuRGltZW5zaW9ucy5mcm9tT3V0cHV0U2NyaXB0TGVuZ3RoKDIyKTtcbiAgICBkZWZhdWx0OlxuICAgICAgaWYgKHVuc3BlbnRUeXBlIGluc3RhbmNlb2YgVW5zcGVudFR5cGVPcFJldHVybikge1xuICAgICAgICByZXR1cm4gdW5zcGVudHMuRGltZW5zaW9ucy5mcm9tT3V0cHV0U2NyaXB0TGVuZ3RoKDEgKyB1bnNwZW50VHlwZS5zaXplKTtcbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYHVua25vd24gdW5zcGVudFR5cGUgJHt1bnNwZW50VHlwZX1gKTtcbiAgfVxufTtcblxuZnVuY3Rpb24gZ2V0RGVmYXVsdFNpZ25lck5hbWVzKFxuICBpbnB1dFR5cGU6IElucHV0U2NyaXB0VHlwZSxcbiAgc2lnbmVycz86IHsgc2lnbmVyTmFtZTogdXR4b2xpYi5iaXRnby5LZXlOYW1lOyBjb3NpZ25lck5hbWU6IHV0eG9saWIuYml0Z28uS2V5TmFtZSB9XG4pOiB1dHhvbGliLmJpdGdvLktleU5hbWVbXSB7XG4gIGlmIChzaWduZXJzKSB7XG4gICAgcmV0dXJuIFtzaWduZXJzLnNpZ25lck5hbWUsIHNpZ25lcnMuY29zaWduZXJOYW1lXTtcbiAgfVxuICBpZiAoaW5wdXRUeXBlID09PSAncDJzaFAycGsnKSB7XG4gICAgcmV0dXJuIFsndXNlciddO1xuICB9XG4gIGlmIChpbnB1dFR5cGUgPT09ICdwMnRyTXVzaWcyJykge1xuICAgIHJldHVybiBbJ3VzZXInLCAnYmFja3VwJ107XG4gIH1cbiAgcmV0dXJuIFsndXNlcicsICdiaXRnbyddO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uc3RydWN0UHNidChcbiAga2V5czogdXR4b2xpYi5iaXRnby5Sb290V2FsbGV0S2V5cyxcbiAgaW5wdXRUeXBlczogSW5wdXRTY3JpcHRUeXBlW10sXG4gIG91dHB1dFR5cGVzOiBUZXN0VW5zcGVudFR5cGVbXSxcbiAgc2lnbmF0dXJlU3RhdHVzOiAndW5zaWduZWQnIHwgJ2hhbGZzaWduZWQnIHwgJ2Z1bGx5c2lnbmVkJyxcbiAgc2lnbmVycz86IHsgc2lnbmVyTmFtZTogdXR4b2xpYi5iaXRnby5LZXlOYW1lOyBjb3NpZ25lck5hbWU6IHV0eG9saWIuYml0Z28uS2V5TmFtZSB9XG4pOiB1dHhvbGliLmJpdGdvLlV0eG9Qc2J0PHV0eG9saWIuYml0Z28uVXR4b1RyYW5zYWN0aW9uPGJpZ2ludD4+IHtcbiAgY29uc3QgcHNidCA9IHV0eG9saWIuYml0Z28uY3JlYXRlUHNidEZvck5ldHdvcmsoeyBuZXR3b3JrOiB1dHhvbGliLm5ldHdvcmtzLmJpdGNvaW4gfSk7XG5cbiAgaW5wdXRUeXBlcy5mb3JFYWNoKCh0LCBpKSA9PiB7XG4gICAgaWYgKHQgPT09ICdwMnNoUDJwaycpIHtcbiAgICAgIGNvbnN0IHNpZ25lciA9IGtleXNbZ2V0RGVmYXVsdFNpZ25lck5hbWVzKHQsIHNpZ25lcnMpWzBdXTtcbiAgICAgIGNvbnN0IHVuc3BlbnQgPSB1dHhvbGliLnRlc3R1dGlsLm1vY2tSZXBsYXlQcm90ZWN0aW9uVW5zcGVudCh1dHhvbGliLm5ldHdvcmtzLmJpdGNvaW4sIEJpZ0ludCgxMCksIHtcbiAgICAgICAga2V5OiBzaWduZXIsXG4gICAgICAgIHZvdXQ6IGksXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHsgcmVkZWVtU2NyaXB0IH0gPSB1dHhvbGliLmJpdGdvLm91dHB1dFNjcmlwdHMuY3JlYXRlT3V0cHV0U2NyaXB0UDJzaFAycGsoc2lnbmVyLnB1YmxpY0tleSk7XG4gICAgICBhc3NlcnQub2socmVkZWVtU2NyaXB0KTtcbiAgICAgIHV0eG9saWIuYml0Z28uYWRkUmVwbGF5UHJvdGVjdGlvblVuc3BlbnRUb1BzYnQocHNidCwgdW5zcGVudCwgcmVkZWVtU2NyaXB0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgdW5zcGVudCA9IHV0eG9saWIudGVzdHV0aWwubW9ja1dhbGxldFVuc3BlbnQodXR4b2xpYi5uZXR3b3Jrcy5iaXRjb2luLCBCaWdJbnQoMTApLCB7XG4gICAgICAgIGtleXMsXG4gICAgICAgIGNoYWluOiB1dHhvbGliLmJpdGdvLmdldEV4dGVybmFsQ2hhaW5Db2RlKHQgPT09ICd0YXByb290S2V5UGF0aFNwZW5kJyA/ICdwMnRyTXVzaWcyJyA6IHQpLFxuICAgICAgICB2b3V0OiBpLFxuICAgICAgICBpbmRleDogaSxcbiAgICAgIH0pO1xuICAgICAgY29uc3Qgc2lnbmVyTmFtZXMgPSBnZXREZWZhdWx0U2lnbmVyTmFtZXModCwgc2lnbmVycyk7XG4gICAgICB1dHhvbGliLmJpdGdvLmFkZFdhbGxldFVuc3BlbnRUb1BzYnQocHNidCwgdW5zcGVudCwga2V5cywgc2lnbmVyTmFtZXNbMF0sIHNpZ25lck5hbWVzWzFdKTtcbiAgICB9XG4gIH0pO1xuXG4gIG91dHB1dFR5cGVzLmZvckVhY2goKHQsIGluZGV4KSA9PiB7XG4gICAgcHNidC5hZGRPdXRwdXQoe1xuICAgICAgc2NyaXB0OiBjcmVhdGVTY3JpcHRQdWJLZXkoa2V5cy50cmlwbGUsIHQpLFxuICAgICAgdmFsdWU6IEJpZ0ludCgxMCksXG4gICAgfSk7XG4gIH0pO1xuXG4gIGlmIChzaWduYXR1cmVTdGF0dXMgPT09ICd1bnNpZ25lZCcpIHtcbiAgICByZXR1cm4gcHNidDtcbiAgfVxuXG4gIHBzYnQuc2V0QWxsSW5wdXRzTXVzaWcyTm9uY2VIRChrZXlzWyd1c2VyJ10pO1xuICBwc2J0LnNldEFsbElucHV0c011c2lnMk5vbmNlSEQoa2V5c1snYml0Z28nXSk7XG5cbiAgaW5wdXRUeXBlcy5mb3JFYWNoKCh0LCBpKSA9PiB7XG4gICAgY29uc3Qgc2lnbmVyTmFtZXMgPSBnZXREZWZhdWx0U2lnbmVyTmFtZXModCwgc2lnbmVycyk7XG4gICAgaWYgKHQgPT09ICdwMnNoUDJwaycpIHtcbiAgICAgIGlmIChzaWduYXR1cmVTdGF0dXMgPT09ICdmdWxseXNpZ25lZCcpIHtcbiAgICAgICAgcHNidC5zaWduSW5wdXQoaSwga2V5c1tzaWduZXJOYW1lc1swXV0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwc2J0LnNpZ25JbnB1dEhEKGksIGtleXNbc2lnbmVyTmFtZXNbMF1dKTtcbiAgICAgIGlmIChzaWduYXR1cmVTdGF0dXMgPT09ICdmdWxseXNpZ25lZCcpIHtcbiAgICAgICAgcHNidC5zaWduSW5wdXRIRChpLCBrZXlzW3NpZ25lck5hbWVzWzFdXSk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgaWYgKHNpZ25hdHVyZVN0YXR1cyA9PT0gJ2Z1bGx5c2lnbmVkJykge1xuICAgIGFzc2VydC5vayhwc2J0LnZhbGlkYXRlU2lnbmF0dXJlc09mQWxsSW5wdXRzKCkpO1xuICB9XG4gIHJldHVybiBwc2J0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2lnbmVkVHJhbnNhY3Rpb24oXG4gIGtleXM6IHV0eG9saWIuYml0Z28uUm9vdFdhbGxldEtleXMsXG4gIHNpZ25lck5hbWU6IHV0eG9saWIuYml0Z28uS2V5TmFtZSxcbiAgY29zaWduZXJOYW1lOiB1dHhvbGliLmJpdGdvLktleU5hbWUsXG4gIGlucHV0VHlwZXM6IElucHV0U2NyaXB0VHlwZVtdLFxuICBvdXRwdXRUeXBlczogVGVzdFVuc3BlbnRUeXBlW11cbik6IHV0eG9saWIuYml0Z28uVXR4b1RyYW5zYWN0aW9uIHtcbiAgY29uc3QgcHNidCA9IGNvbnN0cnVjdFBzYnQoa2V5cywgaW5wdXRUeXBlcywgb3V0cHV0VHlwZXMsICdmdWxseXNpZ25lZCcsIHsgc2lnbmVyTmFtZSwgY29zaWduZXJOYW1lIH0pO1xuICBwc2J0LmZpbmFsaXplQWxsSW5wdXRzKCk7XG4gIHJldHVybiAocHNidC5leHRyYWN0VHJhbnNhY3Rpb24oKSBhcyB1dHhvbGliLmJpdGdvLlV0eG9UcmFuc2FjdGlvbjxiaWdpbnQ+KS5jbG9uZTxudW1iZXI+KCdudW1iZXInKTtcbn1cbiJdfQ==
@@ -10,11 +10,11 @@ describe('ZCash', function () {
10
10
  .plus(src_1.Dimensions.SingleOutput.p2sh.times(nOutputs));
11
11
  }
12
12
  it('implements ZIP-0317', function () {
13
- zcash_1.getConventionalFeeForDimensions(getDims(1, 1)).should.equal(10000);
14
- zcash_1.getConventionalFeeForDimensions(getDims(1, 2)).should.equal(10000);
15
- zcash_1.getConventionalFeeForDimensions(getDims(2, 1)).should.equal(20000);
16
- zcash_1.getConventionalFeeForDimensions(getDims(2, 2)).should.equal(20000);
17
- zcash_1.getConventionalFeeForDimensions(getDims(10, 1)).should.equal(100000);
13
+ (0, zcash_1.getConventionalFeeForDimensions)(getDims(1, 1)).should.equal(10000);
14
+ (0, zcash_1.getConventionalFeeForDimensions)(getDims(1, 2)).should.equal(10000);
15
+ (0, zcash_1.getConventionalFeeForDimensions)(getDims(2, 1)).should.equal(20000);
16
+ (0, zcash_1.getConventionalFeeForDimensions)(getDims(2, 2)).should.equal(20000);
17
+ (0, zcash_1.getConventionalFeeForDimensions)(getDims(10, 1)).should.equal(100000);
18
18
  });
19
19
  function getFeeForZatPerKB(d, zatPerKB) {
20
20
  return Math.ceil((d.getVSize() * zatPerKB) / 1000);
@@ -35,14 +35,14 @@ describe('ZCash', function () {
35
35
  ];
36
36
  const diffs = dims.map((d) => {
37
37
  const feePerSize = getFeeForZatPerKB(d, zatPerKilobyte);
38
- const feePerAction = zcash_1.getConventionalFeeForDimensions(d, {
38
+ const feePerAction = (0, zcash_1.getConventionalFeeForDimensions)(d, {
39
39
  marginalFeeZatPerAction: zatPerAction,
40
40
  });
41
41
  return feePerSize - feePerAction;
42
42
  });
43
43
  diffs.should.eql(expectedDiffs);
44
44
  if (expectedEffectiveFeePerAction) {
45
- const effectiveFeePerAction = dims.map((d) => Math.ceil(getFeeForZatPerKB(d, zatPerKilobyte) / zcash_1.getLogicalActions(d)));
45
+ const effectiveFeePerAction = dims.map((d) => Math.ceil(getFeeForZatPerKB(d, zatPerKilobyte) / (0, zcash_1.getLogicalActions)(d)));
46
46
  effectiveFeePerAction.should.eql(expectedEffectiveFeePerAction);
47
47
  }
48
48
  });
@@ -57,4 +57,4 @@ describe('ZCash', function () {
57
57
  // for fanouts we asymptotically approach 5_000 zat/action
58
58
  [25500, 23925, 25125, 22665, 24825, 22494, 24882, 5539, 5324, 5145]);
59
59
  });
60
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiemNhc2guanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90ZXN0L3pjYXNoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsa0JBQWdCO0FBQ2hCLGdDQUFvQztBQUNwQyx3Q0FBa0Y7QUFFbEYsUUFBUSxDQUFDLE9BQU8sRUFBRTtJQUNoQixTQUFTLE9BQU8sQ0FBQyxXQUFtQixFQUFFLFFBQWdCO1FBQ3BELE9BQU8sSUFBSSxnQkFBVSxFQUFFO2FBQ3BCLElBQUksQ0FBQyxnQkFBVSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO2FBQ3BELElBQUksQ0FBQyxnQkFBVSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVELEVBQUUsQ0FBQyxxQkFBcUIsRUFBRTtRQUN4Qix1Q0FBK0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFNLENBQUMsQ0FBQztRQUNwRSx1Q0FBK0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFNLENBQUMsQ0FBQztRQUNwRSx1Q0FBK0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFNLENBQUMsQ0FBQztRQUNwRSx1Q0FBK0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFNLENBQUMsQ0FBQztRQUNwRSx1Q0FBK0IsQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFPLENBQUMsQ0FBQztJQUN4RSxDQUFDLENB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LEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQ3BFLENBQUM7QUFDSixDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAnc2hvdWxkJztcbmltcG9ydCB7IERpbWVuc2lvbnMgfSBmcm9tICcuLi9zcmMnO1xuaW1wb3J0IHsgZ2V0Q29udmVudGlvbmFsRmVlRm9yRGltZW5zaW9ucywgZ2V0TG9naWNhbEFjdGlvbnMgfSBmcm9tICcuLi9zcmMvemNhc2gnO1xuXG5kZXNjcmliZSgnWkNhc2gnLCBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIGdldERpbXMoblAyc2hJbnB1dHM6IG51bWJlciwgbk91dHB1dHM6IG51bWJlcik6IERpbWVuc2lvbnMge1xuICAgIHJldHVybiBuZXcgRGltZW5zaW9ucygpXG4gICAgICAucGx1cyhEaW1lbnNpb25zLlNpbmdsZUlucHV0LnAyc2gudGltZXMoblAyc2hJbnB1dHMpKVxuICAgICAgLnBsdXMoRGltZW5zaW9ucy5TaW5nbGVPdXRwdXQucDJzaC50aW1lcyhuT3V0cHV0cykpO1xuICB9XG5cbiAgaXQoJ2ltcGxlbWVudHMgWklQLTAzMTcnLCBmdW5jdGlvbiAoKSB7XG4gICAgZ2V0Q29udmVudGlvbmFsRmVlRm9yRGltZW5zaW9ucyhnZXREaW1zKDEsIDEpKS5zaG91bGQuZXF1YWwoMTBfMDAwKTtcbiAgICBnZXRDb252ZW50aW9uYWxGZWVGb3JEaW1lbnNpb25zKGdldERpbXMoMSwgMikpLnNob3VsZC5lcXVhbCgxMF8wMDApO1xuICAgIGdldENvbnZlbnRpb25hbEZlZUZvckRpbWVuc2lvbnMoZ2V0RGltcygyLCAxKSkuc2hvdWxkLmVxdWFsKDIwXzAwMCk7XG4gICAgZ2V0Q29udmVudGlvbmFsRmVlRm9yRGltZW5zaW9ucyhnZXREaW1zKDIsIDIpKS5zaG91bGQuZXF1YWwoMjBfMDAwKTtcbiAgICBnZXRDb252ZW50aW9uYWxGZWVGb3JEaW1lbnNpb25zKGdldERpbXMoMTAsIDEpKS5zaG91bGQuZXF1YWwoMTAwXzAwMCk7XG4gIH0pO1xuXG4gIGZ1bmN0aW9uIGdldEZlZUZvclphdFBlcktCKGQ6IERpbWVuc2lvbnMsIHphdFBlcktCOiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiBNYXRoLmNlaWwoKGQuZ2V0VlNpemUoKSAqIHphdFBlcktCKSAvIDEwMDApO1xuICB9XG5cbiAgZnVuY3Rpb24gdGVzdEZlZURpZmZlcmVuY2UoXG4gICAgemF0UGVyS2lsb2J5dGU6IG51bWJlcixcbiAgICB6YXRQZXJBY3Rpb246IG51bWJlcixcbiAgICBleHBlY3RlZERpZmZzOiBudW1iZXJbXSxcbiAgICBleHBlY3RlZEVmZmVjdGl2ZUZlZVBlckFjdGlvbj86IG51bWJlcltdXG4gICkge1xuICAgIGl0KGBkaWZmZXJlbmNlIGJldHdlZW4gZmVlUGVyQnl0ZSBhbmQgZmVlUGVyQWN0aW9uICh6YXRQZXJLYj0ke3phdFBlcktpbG9ieXRlfSwgemF0UGVyQWN0aW9uPSR7emF0UGVyQWN0aW9ufSlgLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBkaW1zID0gW1xuICAgICAgICBnZXREaW1zKDEsIDEpLFxuICAgICAgICBnZXREaW1zKDIsIDEpLFxuICAgICAgICBnZXREaW1zKDIsIDIpLFxuICAgICAgICBnZXREaW1zKDEwLCAxKSxcbiAgICAgICAgZ2V0RGltcygxMCwgMTApLFxuICAgICAgICBnZXREaW1zKDEwMCwgMSksXG4gICAgICAgIGdldERpbXMoMTAwLCAxMDApLFxuICAgICAgICBnZXREaW1zKDEsIDEwMCksXG4gICAgICAgIGdldERpbXMoMSwgMjAwKSxcbiAgICAgICAgZ2V0RGltcygxLCAxMDAwKSxcbiAgICAgIF07XG4gICAgICBjb25zdCBkaWZmcyA9IGRpbXMubWFwKChkKSA9PiB7XG4gICAgICAgIGNvbnN0IGZlZVBlclNpemUgPSBnZXRGZWVGb3JaYXRQZXJLQihkLCB6YXRQZXJLaWxvYnl0ZSk7XG4gICAgICAgIGNvbnN0IGZlZVBlckFjdGlvbiA9IGdldENvbnZlbnRpb25hbEZlZUZvckRpbWVuc2lvbnMoZCwge1xuICAgICAgICAgIG1hcmdpbmFsRmVlWmF0UGVyQWN0aW9uOiB6YXRQZXJBY3Rpb24sXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZmVlUGVyU2l6ZSAtIGZlZVBlckFjdGlvbjtcbiAgICAgIH0pO1xuXG4gICAgICBkaWZmcy5zaG91bGQuZXFsKGV4cGVjdGVkRGlmZnMpO1xuICAgICAgaWYgKGV4cGVjdGVkRWZmZWN0aXZlRmVlUGVyQWN0aW9uKSB7XG4gICAgICAgIGNvbnN0IGVmZmVjdGl2ZUZlZVBlckFjdGlvbiA9IGRpbXMubWFwKChkKSA9PlxuICAgICAgICAgIE1hdGguY2VpbChnZXRGZWVGb3JaYXRQZXJLQihkLCB6YXRQZXJLaWxvYnl0ZSkgLyBnZXRMb2dpY2FsQWN0aW9ucyhkKSlcbiAgICAgICAgKTtcbiAgICAgICAgZWZmZWN0aXZlRmVlUGVyQWN0aW9uLnNob3VsZC5lcWwoZXhwZWN0ZWRFZmZlY3RpdmVGZWVQZXJBY3Rpb24pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIC8vIHdpdGggYSBmZWVSYXRlIG9mIDQwXzAwMCB6YXQva0IsIHdlIGFyZSB1bmRlcnBheWluZyBmb3IgZmFub3V0cyBsYXJnZXIgdGhhbiAxOjEwMFxuICB0ZXN0RmVlRGlmZmVyZW5jZSg0MF8wMDAsIDVfMDAwLCBbMzYwMCwgNTUyMCwgNjgwMCwgMjA4ODAsIDMyNDAwLCAxOTg2ODAsIDMyNTQwMCwgLTMzNDY4MCwgLTY3NjY4MCwgLTM0MTc2ODBdKTtcblxuICAvLyB3aXRoIGEgZmVlIG9mIDE0MF8wMDAgemF0L2tCLCB3ZSBhcmUgc3RpbGwgbm90IHBheWluZyBmb3IgZmFub3V0cyBsYXJnZXIgdGhhbiAxOjIwMFxuICB0ZXN0RmVlRGlmZmVyZW5jZSgxNDBfMDAwLCA1XzAwMCwgWzM3NjAwLCA2OTMyMCwgNzM4MDAsIDMyMzA4MCwgMzYzNDAwLCAzMTgyODgwLCAzNjI2NDAwLCAxNjEyMCwgLTU4ODAsIC0xODY4ODBdKTtcblxuICAvLyB3aXRoIGEgZmVlIG9mIDE1MF8wMDAgemF0L2tCLCB3ZSBhcmUgcGF5aW5nIGZvciBhIDE6MjAwIGZhbm91dFxuICB0ZXN0RmVlRGlmZmVyZW5jZShcbiAgICAxNTBfMDAwLFxuICAgIDVfMDAwLFxuICAgIFs0MTAwMCwgNzU3MDAsIDgwNTAwLCAzNTMzMDAsIDM5NjUwMCwgMzQ4MTMwMCwgMzk1NjUwMCwgNTEyMDAsIDYxMjAwLCAxMzYyMDBdLFxuICAgIC8vIHRoZSBlZmZlY3RpdmUgcGVyLWFjdGlvbiBmZWUtcmF0ZSBpcyAyNV8wMDAgemF0L2FjdGlvbiBmb3Igc21hbGxlciB0cmFuc2FjdGlvbnMgYW5kXG4gICAgLy8gZm9yIGZhbm91dHMgd2UgYXN5bXB0b3RpY2FsbHkgYXBwcm9hY2ggNV8wMDAgemF0L2FjdGlvblxuICAgIFsyNTUwMCwgMjM5MjUsIDI1MTI1LCAyMjY2NSwgMjQ4MjUsIDIyNDk0LCAyNDg4MiwgNTUzOSwgNTMyNCwgNTE0NV1cbiAgKTtcbn0pO1xuIl19
60
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiemNhc2guanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90ZXN0L3pjYXNoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsa0JBQWdCO0FBQ2hCLGdDQUFvQztBQUNwQyx3Q0FBa0Y7QUFFbEYsUUFBUSxDQUFDLE9BQU8sRUFBRTtJQUNoQixTQUFTLE9BQU8sQ0FBQyxXQUFtQixFQUFFLFFBQWdCO1FBQ3BELE9BQU8sSUFBSSxnQkFBVSxFQUFFO2FBQ3BCLElBQUksQ0FBQyxnQkFBVSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO2FBQ3BELElBQUksQ0FBQyxnQkFBVSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVELEVBQUUsQ0FBQyxxQkFBcUIsRUFBRTtRQUN4QixJQUFBLHVDQUErQixFQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQU0sQ0FBQyxDQUFDO1FBQ3BFLElBQUEsdUNBQStCLEVBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBTSxDQUFDLENBQUM7UUFDcEUsSUFBQSx1Q0FBK0IsRUFBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFNLENBQUMsQ0FBQztRQUNwRSxJQUFBLHVDQUErQixFQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQU0sQ0FBQyxDQUFDO1FBQ3BFLElBQUEsdUNBQStCLEVBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFB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QUM3RSxzRkFBc0Y7SUFDdEYsMERBQTBEO0lBQzFELENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQ3BFLENBQUM7QUFDSixDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAnc2hvdWxkJztcbmltcG9ydCB7IERpbWVuc2lvbnMgfSBmcm9tICcuLi9zcmMnO1xuaW1wb3J0IHsgZ2V0Q29udmVudGlvbmFsRmVlRm9yRGltZW5zaW9ucywgZ2V0TG9naWNhbEFjdGlvbnMgfSBmcm9tICcuLi9zcmMvemNhc2gnO1xuXG5kZXNjcmliZSgnWkNhc2gnLCBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIGdldERpbXMoblAyc2hJbnB1dHM6IG51bWJlciwgbk91dHB1dHM6IG51bWJlcik6IERpbWVuc2lvbnMge1xuICAgIHJldHVybiBuZXcgRGltZW5zaW9ucygpXG4gICAgICAucGx1cyhEaW1lbnNpb25zLlNpbmdsZUlucHV0LnAyc2gudGltZXMoblAyc2hJbnB1dHMpKVxuICAgICAgLnBsdXMoRGltZW5zaW9ucy5TaW5nbGVPdXRwdXQucDJzaC50aW1lcyhuT3V0cHV0cykpO1xuICB9XG5cbiAgaXQoJ2ltcGxlbWVudHMgWklQLTAzMTcnLCBmdW5jdGlvbiAoKSB7XG4gICAgZ2V0Q29udmVudGlvbmFsRmVlRm9yRGltZW5zaW9ucyhnZXREaW1zKDEsIDEpKS5zaG91bGQuZXF1YWwoMTBfMDAwKTtcbiAgICBnZXRDb252ZW50aW9uYWxGZWVGb3JEaW1lbnNpb25zKGdldERpbXMoMSwgMikpLnNob3VsZC5lcXVhbCgxMF8wMDApO1xuICAgIGdldENvbnZlbnRpb25hbEZlZUZvckRpbWVuc2lvbnMoZ2V0RGltcygyLCAxKSkuc2hvdWxkLmVxdWFsKDIwXzAwMCk7XG4gICAgZ2V0Q29udmVudGlvbmFsRmVlRm9yRGltZW5zaW9ucyhnZXREaW1zKDIsIDIpKS5zaG91bGQuZXF1YWwoMjBfMDAwKTtcbiAgICBnZXRDb252ZW50aW9uYWxGZWVGb3JEaW1lbnNpb25zKGdldERpbXMoMTAsIDEpKS5zaG91bGQuZXF1YWwoMTAwXzAwMCk7XG4gIH0pO1xuXG4gIGZ1bmN0aW9uIGdldEZlZUZvclphdFBlcktCKGQ6IERpbWVuc2lvbnMsIHphdFBlcktCOiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiBNYXRoLmNlaWwoKGQuZ2V0VlNpemUoKSAqIHphdFBlcktCKSAvIDEwMDApO1xuICB9XG5cbiAgZnVuY3Rpb24gdGVzdEZlZURpZmZlcmVuY2UoXG4gICAgemF0UGVyS2lsb2J5dGU6IG51bWJlcixcbiAgICB6YXRQZXJBY3Rpb246IG51bWJlcixcbiAgICBleHBlY3RlZERpZmZzOiBudW1iZXJbXSxcbiAgICBleHBlY3RlZEVmZmVjdGl2ZUZlZVBlckFjdGlvbj86IG51bWJlcltdXG4gICkge1xuICAgIGl0KGBkaWZmZXJlbmNlIGJldHdlZW4gZmVlUGVyQnl0ZSBhbmQgZmVlUGVyQWN0aW9uICh6YXRQZXJLYj0ke3phdFBlcktpbG9ieXRlfSwgemF0UGVyQWN0aW9uPSR7emF0UGVyQWN0aW9ufSlgLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBkaW1zID0gW1xuICAgICAgICBnZXREaW1zKDEsIDEpLFxuICAgICAgICBnZXREaW1zKDIsIDEpLFxuICAgICAgICBnZXREaW1zKDIsIDIpLFxuICAgICAgICBnZXREaW1zKDEwLCAxKSxcbiAgICAgICAgZ2V0RGltcygxMCwgMTApLFxuICAgICAgICBnZXREaW1zKDEwMCwgMSksXG4gICAgICAgIGdldERpbXMoMTAwLCAxMDApLFxuICAgICAgICBnZXREaW1zKDEsIDEwMCksXG4gICAgICAgIGdldERpbXMoMSwgMjAwKSxcbiAgICAgICAgZ2V0RGltcygxLCAxMDAwKSxcbiAgICAgIF07XG4gICAgICBjb25zdCBkaWZmcyA9IGRpbXMubWFwKChkKSA9PiB7XG4gICAgICAgIGNvbnN0IGZlZVBlclNpemUgPSBnZXRGZWVGb3JaYXRQZXJLQihkLCB6YXRQZXJLaWxvYnl0ZSk7XG4gICAgICAgIGNvbnN0IGZlZVBlckFjdGlvbiA9IGdldENvbnZlbnRpb25hbEZlZUZvckRpbWVuc2lvbnMoZCwge1xuICAgICAgICAgIG1hcmdpbmFsRmVlWmF0UGVyQWN0aW9uOiB6YXRQZXJBY3Rpb24sXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZmVlUGVyU2l6ZSAtIGZlZVBlckFjdGlvbjtcbiAgICAgIH0pO1xuXG4gICAgICBkaWZmcy5zaG91bGQuZXFsKGV4cGVjdGVkRGlmZnMpO1xuICAgICAgaWYgKGV4cGVjdGVkRWZmZWN0aXZlRmVlUGVyQWN0aW9uKSB7XG4gICAgICAgIGNvbnN0IGVmZmVjdGl2ZUZlZVBlckFjdGlvbiA9IGRpbXMubWFwKChkKSA9PlxuICAgICAgICAgIE1hdGguY2VpbChnZXRGZWVGb3JaYXRQZXJLQihkLCB6YXRQZXJLaWxvYnl0ZSkgLyBnZXRMb2dpY2FsQWN0aW9ucyhkKSlcbiAgICAgICAgKTtcbiAgICAgICAgZWZmZWN0aXZlRmVlUGVyQWN0aW9uLnNob3VsZC5lcWwoZXhwZWN0ZWRFZmZlY3RpdmVGZWVQZXJBY3Rpb24pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIC8vIHdpdGggYSBmZWVSYXRlIG9mIDQwXzAwMCB6YXQva0IsIHdlIGFyZSB1bmRlcnBheWluZyBmb3IgZmFub3V0cyBsYXJnZXIgdGhhbiAxOjEwMFxuICB0ZXN0RmVlRGlmZmVyZW5jZSg0MF8wMDAsIDVfMDAwLCBbMzYwMCwgNTUyMCwgNjgwMCwgMjA4ODAsIDMyNDAwLCAxOTg2ODAsIDMyNTQwMCwgLTMzNDY4MCwgLTY3NjY4MCwgLTM0MTc2ODBdKTtcblxuICAvLyB3aXRoIGEgZmVlIG9mIDE0MF8wMDAgemF0L2tCLCB3ZSBhcmUgc3RpbGwgbm90IHBheWluZyBmb3IgZmFub3V0cyBsYXJnZXIgdGhhbiAxOjIwMFxuICB0ZXN0RmVlRGlmZmVyZW5jZSgxNDBfMDAwLCA1XzAwMCwgWzM3NjAwLCA2OTMyMCwgNzM4MDAsIDMyMzA4MCwgMzYzNDAwLCAzMTgyODgwLCAzNjI2NDAwLCAxNjEyMCwgLTU4ODAsIC0xODY4ODBdKTtcblxuICAvLyB3aXRoIGEgZmVlIG9mIDE1MF8wMDAgemF0L2tCLCB3ZSBhcmUgcGF5aW5nIGZvciBhIDE6MjAwIGZhbm91dFxuICB0ZXN0RmVlRGlmZmVyZW5jZShcbiAgICAxNTBfMDAwLFxuICAgIDVfMDAwLFxuICAgIFs0MTAwMCwgNzU3MDAsIDgwNTAwLCAzNTMzMDAsIDM5NjUwMCwgMzQ4MTMwMCwgMzk1NjUwMCwgNTEyMDAsIDYxMjAwLCAxMzYyMDBdLFxuICAgIC8vIHRoZSBlZmZlY3RpdmUgcGVyLWFjdGlvbiBmZWUtcmF0ZSBpcyAyNV8wMDAgemF0L2FjdGlvbiBmb3Igc21hbGxlciB0cmFuc2FjdGlvbnMgYW5kXG4gICAgLy8gZm9yIGZhbm91dHMgd2UgYXN5bXB0b3RpY2FsbHkgYXBwcm9hY2ggNV8wMDAgemF0L2FjdGlvblxuICAgIFsyNTUwMCwgMjM5MjUsIDI1MTI1LCAyMjY2NSwgMjQ4MjUsIDIyNDk0LCAyNDg4MiwgNTUzOSwgNTMyNCwgNTE0NV1cbiAgKTtcbn0pO1xuIl19