@bitgo/abstract-utxo 9.8.0 → 9.9.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 (25) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/dist/src/transaction/descriptor/parse.d.ts +6 -2
  3. package/dist/src/transaction/descriptor/parse.d.ts.map +1 -1
  4. package/dist/src/transaction/descriptor/parse.js +6 -6
  5. package/dist/src/transaction/descriptor/parseToAmountType.d.ts.map +1 -1
  6. package/dist/src/transaction/descriptor/parseToAmountType.js +4 -1
  7. package/dist/src/transaction/descriptor/verifyTransaction.d.ts +5 -5
  8. package/dist/src/transaction/descriptor/verifyTransaction.d.ts.map +1 -1
  9. package/dist/src/transaction/descriptor/verifyTransaction.js +1 -1
  10. package/dist/src/transaction/fixedScript/parseTransaction.d.ts +5 -7
  11. package/dist/src/transaction/fixedScript/parseTransaction.d.ts.map +1 -1
  12. package/dist/src/transaction/fixedScript/parseTransaction.js +27 -30
  13. package/dist/src/transaction/outputDifference.d.ts +40 -0
  14. package/dist/src/transaction/outputDifference.d.ts.map +1 -0
  15. package/dist/src/transaction/outputDifference.js +47 -0
  16. package/dist/test/transaction/descriptor/outputDifference.js +41 -25
  17. package/dist/test/transaction/descriptor/parse.js +14 -1
  18. package/dist/tsconfig.tsbuildinfo +1 -1
  19. package/package.json +4 -4
  20. package/dist/src/transaction/descriptor/outputDifference.d.ts +0 -30
  21. package/dist/src/transaction/descriptor/outputDifference.d.ts.map +0 -1
  22. package/dist/src/transaction/descriptor/outputDifference.js +0 -38
  23. package/dist/test/outputDifference.d.ts +0 -2
  24. package/dist/test/outputDifference.d.ts.map +0 -1
  25. package/dist/test/outputDifference.js +0 -86
package/CHANGELOG.md CHANGED
@@ -3,6 +3,14 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ # [9.9.0](https://github.com/BitGo/BitGoJS/compare/@bitgo/abstract-utxo@9.8.0...@bitgo/abstract-utxo@9.9.0) (2024-12-24)
7
+
8
+ ### Features
9
+
10
+ - **abstract-utxo:** add support for 'max' value parse.ts ([e664c26](https://github.com/BitGo/BitGoJS/commit/e664c267a2f35f9dcc5d62cbd3386be5943748e9))
11
+ - **abstract-utxo:** allow 'max' value in ExpectedOutput ([470767a](https://github.com/BitGo/BitGoJS/commit/470767ab3e4df7946d12f354dee12906566bc7d4))
12
+ - use descriptor outputDifference method ([663944a](https://github.com/BitGo/BitGoJS/commit/663944af14072b988d80cc69d85d257438f8846b))
13
+
6
14
  # [9.8.0](https://github.com/BitGo/BitGoJS/compare/@bitgo/abstract-utxo@9.7.0...@bitgo/abstract-utxo@9.8.0) (2024-12-19)
7
15
 
8
16
  ### Bug Fixes
@@ -3,8 +3,12 @@ import { ITransactionRecipient } from '@bitgo/sdk-core';
3
3
  import { AbstractUtxoCoin, BaseOutput, BaseParsedTransaction, BaseParsedTransactionOutputs, ParseTransactionOptions } from '../../abstractUtxoCoin';
4
4
  import { IDescriptorWallet } from '../../descriptor/descriptorWallet';
5
5
  import * as coreDescriptors from '../../core/descriptor';
6
- export type ParsedOutputsBigInt = BaseParsedTransactionOutputs<bigint, BaseOutput<bigint>>;
6
+ import { ParsedOutput } from '../../core/descriptor/psbt/parse';
7
+ export type RecipientOutput = Omit<ParsedOutput, 'value'> & {
8
+ value: bigint | 'max';
9
+ };
10
+ export type ParsedOutputsBigInt = BaseParsedTransactionOutputs<bigint, BaseOutput<bigint | 'max'>>;
7
11
  export declare function toBaseParsedTransactionOutputsFromPsbt(psbt: utxolib.bitgo.UtxoPsbt, descriptorMap: coreDescriptors.DescriptorMap, recipients: ITransactionRecipient[], network: utxolib.Network): ParsedOutputsBigInt;
8
- export type ParsedDescriptorTransaction<TAmount extends number | bigint> = BaseParsedTransaction<TAmount, BaseOutput<TAmount>>;
12
+ export type ParsedDescriptorTransaction<TAmount extends number | bigint> = BaseParsedTransaction<TAmount, BaseOutput<TAmount | 'max'>>;
9
13
  export declare function parse(coin: AbstractUtxoCoin, wallet: IDescriptorWallet, params: ParseTransactionOptions<number | bigint>): ParsedDescriptorTransaction<bigint>;
10
14
  //# sourceMappingURL=parse.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../../../src/transaction/descriptor/parse.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAExD,OAAO,EACL,gBAAgB,EAChB,UAAU,EACV,qBAAqB,EACrB,4BAA4B,EAC5B,uBAAuB,EACxB,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,KAAK,eAAe,MAAM,uBAAuB,CAAC;AAiDzD,MAAM,MAAM,mBAAmB,GAAG,4BAA4B,CAAC,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;AAiB3F,wBAAgB,sCAAsC,CACpD,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,QAAQ,EAC5B,aAAa,EAAE,eAAe,CAAC,aAAa,EAC5C,UAAU,EAAE,qBAAqB,EAAE,EACnC,OAAO,EAAE,OAAO,CAAC,OAAO,GACvB,mBAAmB,CASrB;AAED,MAAM,MAAM,2BAA2B,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,IAAI,qBAAqB,CAC9F,OAAO,EACP,UAAU,CAAC,OAAO,CAAC,CACpB,CAAC;AAEF,wBAAgB,KAAK,CACnB,IAAI,EAAE,gBAAgB,EACtB,MAAM,EAAE,iBAAiB,EACzB,MAAM,EAAE,uBAAuB,CAAC,MAAM,GAAG,MAAM,CAAC,GAC/C,2BAA2B,CAAC,MAAM,CAAC,CA4BrC"}
1
+ {"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../../../src/transaction/descriptor/parse.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAExD,OAAO,EACL,gBAAgB,EAChB,UAAU,EACV,qBAAqB,EACrB,4BAA4B,EAC5B,uBAAuB,EACxB,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,KAAK,eAAe,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAIhE,MAAM,MAAM,eAAe,GAAG,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC,GAAG;IAC1D,KAAK,EAAE,MAAM,GAAG,KAAK,CAAC;CACvB,CAAC;AAmDF,MAAM,MAAM,mBAAmB,GAAG,4BAA4B,CAAC,MAAM,EAAE,UAAU,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC;AAiBnG,wBAAgB,sCAAsC,CACpD,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,QAAQ,EAC5B,aAAa,EAAE,eAAe,CAAC,aAAa,EAC5C,UAAU,EAAE,qBAAqB,EAAE,EACnC,OAAO,EAAE,OAAO,CAAC,OAAO,GACvB,mBAAmB,CASrB;AAED,MAAM,MAAM,2BAA2B,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,IAAI,qBAAqB,CAC9F,OAAO,EACP,UAAU,CAAC,OAAO,GAAG,KAAK,CAAC,CAC5B,CAAC;AAEF,wBAAgB,KAAK,CACnB,IAAI,EAAE,gBAAgB,EACtB,MAAM,EAAE,iBAAiB,EACzB,MAAM,EAAE,uBAAuB,CAAC,MAAM,GAAG,MAAM,CAAC,GAC/C,2BAA2B,CAAC,MAAM,CAAC,CA4BrC"}
@@ -40,11 +40,11 @@ const keychains_1 = require("../../keychains");
40
40
  const descriptor_1 = require("../../descriptor");
41
41
  const coreDescriptors = __importStar(require("../../core/descriptor"));
42
42
  const recipient_1 = require("../recipient");
43
- const outputDifference_1 = require("./outputDifference");
44
- function toParsedOutput(recipient, network) {
43
+ const outputDifference_1 = require("../outputDifference");
44
+ function toRecipientOutput(recipient, network) {
45
45
  return {
46
46
  address: recipient.address,
47
- value: BigInt(recipient.amount),
47
+ value: recipient.amount === 'max' ? 'max' : BigInt(recipient.amount),
48
48
  script: (0, recipient_1.fromExtendedAddressFormatToScript)(recipient.address, network),
49
49
  };
50
50
  }
@@ -65,7 +65,7 @@ function sumValues(arr) {
65
65
  function toBaseOutputs(outputs, network) {
66
66
  return outputs.map((o) => ({
67
67
  address: (0, recipient_1.toExtendedAddressFormat)(o.script, network),
68
- amount: BigInt(o.value),
68
+ amount: o.value === 'max' ? 'max' : BigInt(o.value),
69
69
  external: o.scriptId === undefined,
70
70
  }));
71
71
  }
@@ -81,7 +81,7 @@ function toBaseParsedTransactionOutputs({ outputs, changeOutputs, explicitExtern
81
81
  };
82
82
  }
83
83
  function toBaseParsedTransactionOutputsFromPsbt(psbt, descriptorMap, recipients, network) {
84
- return toBaseParsedTransactionOutputs(parseOutputsWithPsbt(psbt, descriptorMap, recipients.map((r) => toParsedOutput(r, psbt.network))), network);
84
+ return toBaseParsedTransactionOutputs(parseOutputsWithPsbt(psbt, descriptorMap, recipients.map((r) => toRecipientOutput(r, psbt.network))), network);
85
85
  }
86
86
  function parse(coin, wallet, params) {
87
87
  if (params.txParams.allowExternalChangeAddress) {
@@ -112,4 +112,4 @@ function parse(coin, wallet, params) {
112
112
  needsCustomChangeKeySignatureVerification: false,
113
113
  };
114
114
  }
115
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdHJhbnNhY3Rpb24vZGVzY3JpcHRvci9wYXJzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQStFQSx3RkFjQztBQU9ELHNCQWdDQztBQXBJRCx5REFBMkM7QUFVM0MsK0NBQXNGO0FBQ3RGLGlEQUErRTtBQUUvRSx1RUFBeUQ7QUFFekQsNENBQTBGO0FBRTFGLHlEQUFpRztBQUVqRyxTQUFTLGNBQWMsQ0FBQyxTQUFnQyxFQUFFLE9BQXdCO0lBQ2hGLE9BQU87UUFDTCxPQUFPLEVBQUUsU0FBUyxDQUFDLE9BQU87UUFDMUIsS0FBSyxFQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDO1FBQy9CLE1BQU0sRUFBRSxJQUFBLDZDQUFpQyxFQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDO0tBQ3RFLENBQUM7QUFDSixDQUFDO0FBT0QsU0FBUyxvQkFBb0IsQ0FDM0IsSUFBNEIsRUFDNUIsYUFBNEMsRUFDNUMsZ0JBQWdDO0lBRWhDLE1BQU0sTUFBTSxHQUFHLGVBQWUsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLGFBQWEsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDeEUsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLEtBQUssU0FBUyxDQUFDLENBQUM7SUFDL0UsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLEtBQUssU0FBUyxDQUFDLENBQUM7SUFDN0UsTUFBTSxXQUFXLEdBQUcsSUFBQSxnREFBNkIsRUFBQyxlQUFlLEVBQUUsZ0JBQWdCLENBQUMs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QUFNLElBQUksR0FBRyxJQUFJLENBQUMsNkJBQTZCLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ25FLElBQUksQ0FBQyxDQUFDLElBQUksWUFBWSxPQUFPLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7UUFDOUMsTUFBTSxJQUFJLEtBQUssQ0FBQyw2Q0FBNkMsQ0FBQyxDQUFDO0lBQ2pFLENBQUM7SUFDRCxNQUFNLFVBQVUsR0FBRyxJQUFBLHlCQUFhLEVBQUMsU0FBUyxDQUFDLENBQUM7SUFDNUMsTUFBTSxhQUFhLEdBQUcsSUFBQSx1Q0FBMEIsRUFBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLElBQUEsNEJBQWUsRUFBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQy9HLE9BQU87UUFDTCxHQUFHLHNDQUFzQyxDQUFDLElBQUksRUFBRSxhQUFhLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUM7UUFDeEYsU0FBUztRQUNULGFBQWEsRUFBRSxJQUFBLDRCQUFnQixFQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUU7UUFDN0MsWUFBWSxFQUFFLFNBQVM7UUFDdkIseUNBQXlDLEVBQUUsS0FBSztLQUNqRCxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHV0eG9saWIgZnJvbSAnQGJpdGdvL3V0eG8tbGliJztcbmltcG9ydCB7IElUcmFuc2FjdGlvblJlY2lwaWVudCB9IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5cbmltcG9ydCB7XG4gIEFic3RyYWN0VXR4b0NvaW4sXG4gIEJhc2VPdXRwdXQsXG4gIEJhc2VQYXJzZWRUcmFuc2FjdGlvbixcbiAgQmFzZVBhcnNlZFRyYW5zYWN0aW9uT3V0cHV0cyxcbiAgUGFyc2VUcmFuc2FjdGlvbk9wdGlvbnMsXG59IGZyb20gJy4uLy4uL2Fic3RyYWN0VXR4b0NvaW4nO1xuaW1wb3J0IHsgZ2V0S2V5U2lnbmF0dXJlcywgdG9CaXAzMlRyaXBsZSwgVXR4b05hbWVkS2V5Y2hhaW5zIH0gZnJvbSAnLi4vLi4va2V5Y2hhaW5zJztcbmltcG9ydCB7IGdldERlc2NyaXB0b3JNYXBGcm9tV2FsbGV0LCBnZXRQb2xpY3lGb3JFbnYgfSBmcm9tICcuLi8uLi9kZXNjcmlwdG9yJztcbmltcG9ydCB7IElEZXNjcmlwdG9yV2FsbGV0IH0gZnJvbSAnLi4vLi4vZGVzY3JpcHRvci9kZXNjcmlwdG9yV2FsbGV0JztcbmltcG9ydCAqIGFzIGNvcmVEZXNjcmlwdG9ycyBmcm9tICcuLi8uLi9jb3JlL2Rlc2NyaXB0b3InO1xuaW1wb3J0IHsgUGFyc2VkT3V0cHV0IH0gZnJvbSAnLi4vLi4vY29yZS9kZXNjcmlwdG9yL3BzYnQvcGFyc2UnO1xuaW1wb3J0IHsgZnJvbUV4dGVuZGVkQWRkcmVzc0Zvcm1hdFRvU2NyaXB0LCB0b0V4dGVuZGVkQWRkcmVzc0Zvcm1hdCB9IGZyb20gJy4uL3JlY2lwaWVudCc7XG5cbmltcG9ydCB7IG91dHB1dERpZmZlcmVuY2VzV2l0aEV4cGVjdGVkLCBPdXRwdXREaWZmZXJlbmNlV2l0aEV4cGVjdGVkIH0gZnJvbSAnLi9vdXRwdXREaWZmZXJlbmNlJztcblxuZnVuY3Rpb24gdG9QYXJzZWRPdXRwdXQocmVjaXBpZW50OiBJVHJhbnNhY3Rpb25SZWNpcGllbnQsIG5ldHdvcms6IHV0eG9saWIuTmV0d29yayk6IFBhcnNlZE91dHB1dCB7XG4gIHJldHVybiB7XG4gICAgYWRkcmVzczogcmVjaXBpZW50LmFkZHJlc3MsXG4gICAgdmFsdWU6IEJpZ0ludChyZWNpcGllbnQuYW1vdW50KSxcbiAgICBzY3JpcHQ6IGZyb21FeHRlbmRlZEFkZHJlc3NGb3JtYXRUb1NjcmlwdChyZWNpcGllbnQuYWRkcmVzcywgbmV0d29yayksXG4gIH07XG59XG5cbnR5cGUgUGFyc2VkT3V0cHV0cyA9IE91dHB1dERpZmZlcmVuY2VXaXRoRXhwZWN0ZWQ8UGFyc2VkT3V0cHV0PiAmIHtcbiAgb3V0cHV0czogUGFyc2VkT3V0cHV0W107XG4gIGNoYW5nZU91dHB1dHM6IFBhcnNlZE91dHB1dFtdO1xufTtcblxuZnVuY3Rpb24gcGFyc2VPdXRwdXRzV2l0aFBzYnQoXG4gIHBzYnQ6IHV0eG9saWIuYml0Z28uVXR4b1BzYnQsXG4gIGRlc2NyaXB0b3JNYXA6IGNvcmVEZXNjcmlwdG9ycy5EZXNjcmlwdG9yTWFwLFxuICByZWNpcGllbnRPdXRwdXRzOiBQYXJzZWRPdXRwdXRbXVxuKTogUGFyc2VkT3V0cHV0cyB7XG4gIGNvbnN0IHBhcnNlZCA9IGNvcmVEZXNjcmlwdG9ycy5wYXJzZShwc2J0LCBkZXNjcmlwdG9yTWFwLCBwc2J0Lm5ldHdvcmspO1xuICBjb25zdCBleHRlcm5hbE91dHB1dHMgPSBwYXJzZWQub3V0cHV0cy5maWx0ZXIoKG8pID0+IG8uc2NyaXB0SWQgPT09IHVuZGVmaW5lZCk7XG4gIGNvbnN0IGNoYW5nZU91dHB1dHMgPSBwYXJzZWQub3V0cHV0cy5maWx0ZXIoKG8pID0+IG8uc2NyaXB0SWQgIT09IHVuZGVmaW5lZCk7XG4gIGNvbnN0IG91dHB1dERpZmZzID0gb3V0cHV0RGlmZmVyZW5jZXNXaXRoRXhwZWN0ZWQoZXh0ZXJuYWxPdXRwdXRzLCByZWNpcGllbnRPdXRwdXRzKTtcbiAgcmV0dXJuIHtcbiAgICBvdXRwdXRzOiBwYXJzZWQub3V0cHV0cyxcbiAgICBjaGFuZ2VPdXRwdXRzLFxuICAgIC4uLm91dHB1dERpZmZzLFxuICB9O1xufVxuXG5mdW5jdGlvbiBzdW1WYWx1ZXMoYXJyOiB7IHZhbHVlOiBiaWdpbnQgfVtdKTogYmlnaW50IHtcbiAgcmV0dXJuIGFyci5yZWR1Y2UoKHN1bSwgZSkgPT4gc3VtICsgZS52YWx1ZSwgQmlnSW50KDApKTtcbn1cblxuZnVuY3Rpb24gdG9CYXNlT3V0cHV0cyhvdXRwdXRzOiBQYXJzZWRPdXRwdXRbXSwgbmV0d29yazogdXR4b2xpYi5OZXR3b3JrKTogQmFzZU91dHB1dDxiaWdpbnQ+W10ge1xuICByZXR1cm4gb3V0cHV0cy5tYXAoXG4gICAgKG8pOiBCYXNlT3V0cHV0PGJpZ2ludD4gPT4gKHtcbiAgICAgIGFkZHJlc3M6IHRvRXh0ZW5kZWRBZGRyZXNzRm9ybWF0KG8uc2NyaXB0LCBuZXR3b3JrKSxcbiAgICAgIGFtb3VudDogQmlnSW50KG8udmFsdWUpLFxuICAgICAgZXh0ZXJuYWw6IG8uc2NyaXB0SWQgPT09IHVuZGVmaW5lZCxcbiAgICB9KVxuICApO1xufVxuXG5leHBvcnQgdHlwZSBQYXJzZWRPdXRwdXRzQmlnSW50ID0gQmFzZVBhcnNlZFRyYW5zYWN0aW9uT3V0cHV0czxiaWdpbnQsIEJhc2VPdXRwdXQ8YmlnaW50Pj47XG5cbmZ1bmN0aW9uIHRvQmFzZVBhcnNlZFRyYW5zYWN0aW9uT3V0cHV0cyhcbiAgeyBvdXRwdXRzLCBjaGFuZ2VPdXRwdXRzLCBleHBsaWNpdEV4dGVybmFsT3V0cHV0cywgaW1wbGljaXRFeHRlcm5hbE91dHB1dHMsIG1pc3NpbmdPdXRwdXRzIH06IFBhcnNlZE91dHB1dHMsXG4gIG5ldHdvcms6IHV0eG9saWIuTmV0d29ya1xuKTogUGFyc2VkT3V0cHV0c0JpZ0ludCB7XG4gIHJldHVybiB7XG4gICAgb3V0cHV0czogdG9CYXNlT3V0cHV0cyhvdXRwdXRzLCBuZXR3b3JrKSxcbiAgICBjaGFuZ2VPdXRwdXRzOiB0b0Jhc2VPdXRwdXRzKGNoYW5nZU91dHB1dHMsIG5ldHdvcmspLFxuICAgIGV4cGxpY2l0RXh0ZXJuYWxPdXRwdXRzOiB0b0Jhc2VPdXRwdXRzKGV4cGxpY2l0RXh0ZXJuYWxPdXRwdXRzLCBuZXR3b3JrKSxcbiAgICBleHBsaWNpdEV4dGVybmFsU3BlbmRBbW91bnQ6IHN1bVZhbHVlcyhleHBsaWNpdEV4dGVybmFsT3V0cHV0cyksXG4gICAgaW1wbGljaXRFeHRlcm5hbE91dHB1dHM6IHRvQmFzZU91dHB1dHMoaW1wbGljaXRFeHRlcm5hbE91dHB1dHMsIG5ldHdvcmspLFxuICAgIGltcGxpY2l0RXh0ZXJuYWxTcGVuZEFtb3VudDogc3VtVmFsdWVzKGltcGxpY2l0RXh0ZXJuYWxPdXRwdXRzKSxcbiAgICBtaXNzaW5nT3V0cHV0czogdG9CYXNlT3V0cHV0cyhtaXNzaW5nT3V0cHV0cywgbmV0d29yayksXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b0Jhc2VQYXJzZWRUcmFuc2FjdGlvbk91dHB1dHNGcm9tUHNidChcbiAgcHNidDogdXR4b2xpYi5iaXRnby5VdHhvUHNidCxcbiAgZGVzY3JpcHRvck1hcDogY29yZURlc2NyaXB0b3JzLkRlc2NyaXB0b3JNYXAsXG4gIHJlY2lwaWVudHM6IElUcmFuc2FjdGlvblJlY2lwaWVudFtdLFxuICBuZXR3b3JrOiB1dHhvbGliLk5ldHdvcmtcbik6IFBhcnNlZE91dHB1dHNCaWdJbnQge1xuICByZXR1cm4gdG9CYXNlUGFyc2VkVHJhbnNhY3Rpb25PdXRwdXRzKFxuICAgIHBhcnNlT3V0cHV0c1dpdGhQc2J0KFxuICAgICAgcHNidCxcbiAgICAgIGRlc2NyaXB0b3JNYXAsXG4gICAgICByZWNpcGllbnRzLm1hcCgocikgPT4gdG9QYXJzZWRPdXRwdXQociwgcHNidC5uZXR3b3JrKSlcbiAgICApLFxuICAgIG5ldHdvcmtcbiAgKTtcbn1cblxuZXhwb3J0IHR5cGUgUGFyc2VkRGVzY3JpcHRvclRyYW5zYWN0aW9uPFRBbW91bnQgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQ+ID0gQmFzZVBhcnNlZFRyYW5zYWN0aW9uPFxuICBUQW1vdW50LFxuICBCYXNlT3V0cHV0PFRBbW91bnQ+XG4+O1xuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2UoXG4gIGNvaW46IEFic3RyYWN0VXR4b0NvaW4sXG4gIHdhbGxldDogSURlc2NyaXB0b3JXYWxsZXQsXG4gIHBhcmFtczogUGFyc2VUcmFuc2FjdGlvbk9wdGlvbnM8bnVtYmVyIHwgYmlnaW50PlxuKTogUGFyc2VkRGVzY3JpcHRvclRyYW5zYWN0aW9uPGJpZ2ludD4ge1xuICBpZiAocGFyYW1zLnR4UGFyYW1zLmFsbG93RXh0ZXJuYWxDaGFuZ2VBZGRyZXNzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdhbGxvd0V4dGVybmFsQ2hhbmdlQWRkcmVzcyBpcyBub3Qgc3VwcG9ydGVkIGZvciBkZXNjcmlwdG9yIHdhbGxldHMnKTtcbiAgfVxuICBpZiAocGFyYW1zLnR4UGFyYW1zLmNoYW5nZUFkZHJlc3MpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2NoYW5nZUFkZHJlc3MgaXMgbm90IHN1cHBvcnRlZCBmb3IgZGVzY3JpcHRvciB3YWxsZXRzJyk7XG4gIH1cbiAgY29uc3Qga2V5Y2hhaW5zID0gcGFyYW1zLnZlcmlmaWNhdGlvbj8ua2V5Y2hhaW5zO1xuICBpZiAoIWtleWNoYWlucyB8fCAhVXR4b05hbWVkS2V5Y2hhaW5zLmlzKGtleWNoYWlucykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2tleWNoYWluIGlzIHJlcXVpcmVkIGZvciBkZXNjcmlwdG9yIHdhbGxldHMnKTtcbiAgfVxuICBjb25zdCB7IHJlY2lwaWVudHMgfSA9IHBhcmFtcy50eFBhcmFtcztcbiAgaWYgKCFyZWNpcGllbnRzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdyZWNpcGllbnRzIGlzIHJlcXVpcmVkJyk7XG4gIH1cbiAgY29uc3QgcHNidCA9IGNvaW4uZGVjb2RlVHJhbnNhY3Rpb25Gcm9tUHJlYnVpbGQocGFyYW1zLnR4UHJlYnVpbGQpO1xuICBpZiAoIShwc2J0IGluc3RhbmNlb2YgdXR4b2xpYi5iaXRnby5VdHhvUHNidCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2V4cGVjdGVkIHBzYnQgdG8gYmUgYW4gaW5zdGFuY2Ugb2YgVXR4b1BzYnQnKTtcbiAgfVxuICBjb25zdCB3YWxsZXRLZXlzID0gdG9CaXAzMlRyaXBsZShrZXljaGFpbnMpO1xuICBjb25zdCBkZXNjcmlwdG9yTWFwID0gZ2V0RGVzY3JpcHRvck1hcEZyb21XYWxsZXQod2FsbGV0LCB3YWxsZXRLZXlzLCBnZXRQb2xpY3lGb3JFbnYocGFyYW1zLndhbGxldC5iaXRnby5lbnYpKTtcbiAgcmV0dXJuIHtcbiAgICAuLi50b0Jhc2VQYXJzZWRUcmFuc2FjdGlvbk91dHB1dHNGcm9tUHNidChwc2J0LCBkZXNjcmlwdG9yTWFwLCByZWNpcGllbnRzLCBwc2J0Lm5ldHdvcmspLFxuICAgIGtleWNoYWlucyxcbiAgICBrZXlTaWduYXR1cmVzOiBnZXRLZXlTaWduYXR1cmVzKHdhbGxldCkgPz8ge30sXG4gICAgY3VzdG9tQ2hhbmdlOiB1bmRlZmluZWQsXG4gICAgbmVlZHNDdXN0b21DaGFuZ2VLZXlTaWduYXR1cmVWZXJpZmljYXRpb246IGZhbHNlLFxuICB9O1xufVxuIl19
115
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdHJhbnNhY3Rpb24vZGVzY3JpcHRvci9wYXJzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXdGQSx3RkFjQztBQU9ELHNCQWdDQztBQTdJRCx5REFBMkM7QUFVM0MsK0NBQXNGO0FBQ3RGLGlEQUErRTtBQUUvRSx1RUFBeUQ7QUFFekQsNENBQTBGO0FBQzFGLDBEQUFrRztBQU1sRyxTQUFTLGlCQUFpQixDQUFDLFNBQWdDLEVBQUUsT0FBd0I7SUFDbkYsT0FBTztRQUNMLE9BQU8sRUFBRSxTQUFTLENBQUMsT0FBTztRQUMxQixLQUFLLEVBQUUsU0FBUyxDQUFDLE1BQU0sS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUM7UUFDcEUsTUFBTSxFQUFFLElBQUEsNkNBQWlDLEVBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUM7S0FDdEUsQ0FBQztBQUNKLENBQUM7QUFRRCxTQUFTLG9CQUFvQixDQUMzQixJQUE0QixFQUM1QixhQUE0QyxFQUM1QyxnQkFBbUM7SUFFbkMsTUFBTSxNQUFNLEdBQUcsZUFBZSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsYUFBYSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN4RSxNQUFNLGVBQWUsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsS0FBSyxTQUFTLENBQUMsQ0FBQztJQUMvRSxNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsS0FBSyxTQUFTLENBQUMsQ0FB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VUFBVSxFQUFFLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQztJQUN2QyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDaEIsTUFBTSxJQUFJLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFDRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsNkJBQTZCLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ25FLElBQUksQ0FBQyxDQUFDLElBQUksWUFBWSxPQUFPLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7UUFDOUMsTUFBTSxJQUFJLEtBQUssQ0FBQyw2Q0FBNkMsQ0FBQyxDQUFDO0lBQ2pFLENBQUM7SUFDRCxNQUFNLFVBQVUsR0FBRyxJQUFBLHlCQUFhLEVBQUMsU0FBUyxDQUFDLENBQUM7SUFDNUMsTUFBTSxhQUFhLEdBQUcsSUFBQSx1Q0FBMEIsRUFBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLElBQUEsNEJBQWUsRUFBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQy9HLE9BQU87UUFDTCxHQUFHLHNDQUFzQyxDQUFDLElBQUksRUFBRSxhQUFhLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUM7UUFDeEYsU0FBUztRQUNULGFBQWEsRUFBRSxJQUFBLDRCQUFnQixFQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUU7UUFDN0MsWUFBWSxFQUFFLFNBQVM7UUFDdkIseUNBQXlDLEVBQUUsS0FBSztLQUNqRCxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHV0eG9saWIgZnJvbSAnQGJpdGdvL3V0eG8tbGliJztcbmltcG9ydCB7IElUcmFuc2FjdGlvblJlY2lwaWVudCB9IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5cbmltcG9ydCB7XG4gIEFic3RyYWN0VXR4b0NvaW4sXG4gIEJhc2VPdXRwdXQsXG4gIEJhc2VQYXJzZWRUcmFuc2FjdGlvbixcbiAgQmFzZVBhcnNlZFRyYW5zYWN0aW9uT3V0cHV0cyxcbiAgUGFyc2VUcmFuc2FjdGlvbk9wdGlvbnMsXG59IGZyb20gJy4uLy4uL2Fic3RyYWN0VXR4b0NvaW4nO1xuaW1wb3J0IHsgZ2V0S2V5U2lnbmF0dXJlcywgdG9CaXAzMlRyaXBsZSwgVXR4b05hbWVkS2V5Y2hhaW5zIH0gZnJvbSAnLi4vLi4va2V5Y2hhaW5zJztcbmltcG9ydCB7IGdldERlc2NyaXB0b3JNYXBGcm9tV2FsbGV0LCBnZXRQb2xpY3lGb3JFbnYgfSBmcm9tICcuLi8uLi9kZXNjcmlwdG9yJztcbmltcG9ydCB7IElEZXNjcmlwdG9yV2FsbGV0IH0gZnJvbSAnLi4vLi4vZGVzY3JpcHRvci9kZXNjcmlwdG9yV2FsbGV0JztcbmltcG9ydCAqIGFzIGNvcmVEZXNjcmlwdG9ycyBmcm9tICcuLi8uLi9jb3JlL2Rlc2NyaXB0b3InO1xuaW1wb3J0IHsgUGFyc2VkT3V0cHV0IH0gZnJvbSAnLi4vLi4vY29yZS9kZXNjcmlwdG9yL3BzYnQvcGFyc2UnO1xuaW1wb3J0IHsgZnJvbUV4dGVuZGVkQWRkcmVzc0Zvcm1hdFRvU2NyaXB0LCB0b0V4dGVuZGVkQWRkcmVzc0Zvcm1hdCB9IGZyb20gJy4uL3JlY2lwaWVudCc7XG5pbXBvcnQgeyBvdXRwdXREaWZmZXJlbmNlc1dpdGhFeHBlY3RlZCwgT3V0cHV0RGlmZmVyZW5jZVdpdGhFeHBlY3RlZCB9IGZyb20gJy4uL291dHB1dERpZmZlcmVuY2UnO1xuXG5leHBvcnQgdHlwZSBSZWNpcGllbnRPdXRwdXQgPSBPbWl0PFBhcnNlZE91dHB1dCwgJ3ZhbHVlJz4gJiB7XG4gIHZhbHVlOiBiaWdpbnQgfCAnbWF4Jztcbn07XG5cbmZ1bmN0aW9uIHRvUmVjaXBpZW50T3V0cHV0KHJlY2lwaWVudDogSVRyYW5zYWN0aW9uUmVjaXBpZW50LCBuZXR3b3JrOiB1dHhvbGliLk5ldHdvcmspOiBSZWNpcGllbnRPdXRwdXQge1xuICByZXR1cm4ge1xuICAgIGFkZHJlc3M6IHJlY2lwaWVudC5hZGRyZXNzLFxuICAgIHZhbHVlOiByZWNpcGllbnQuYW1vdW50ID09PSAnbWF4JyA/ICdtYXgnIDogQmlnSW50KHJlY2lwaWVudC5hbW91bnQpLFxuICAgIHNjcmlwdDogZnJvbUV4dGVuZGVkQWRkcmVzc0Zvcm1hdFRvU2NyaXB0KHJlY2lwaWVudC5hZGRyZXNzLCBuZXR3b3JrKSxcbiAgfTtcbn1cblxuLy8gVE9ETyhCVEMtMTY5Nyk6IGFsbG93IG91dHB1dHMgd2l0aCBgdmFsdWU6ICdtYXgnYCBoZXJlXG50eXBlIFBhcnNlZE91dHB1dHMgPSBPdXRwdXREaWZmZXJlbmNlV2l0aEV4cGVjdGVkPFBhcnNlZE91dHB1dCwgUmVjaXBpZW50T3V0cHV0PiAmIHtcbiAgb3V0cHV0czogUGFyc2VkT3V0cHV0W107XG4gIGNoYW5nZU91dHB1dHM6IFBhcnNlZE91dHB1dFtdO1xufTtcblxuZnVuY3Rpb24gcGFyc2VPdXRwdXRzV2l0aFBzYnQoXG4gIHBzYnQ6IHV0eG9saWIuYml0Z28uVXR4b1BzYnQsXG4gIGRlc2NyaXB0b3JNYXA6IGNvcmVEZXNjcmlwdG9ycy5EZXNjcmlwdG9yTWFwLFxuICByZWNpcGllbnRPdXRwdXRzOiBSZWNpcGllbnRPdXRwdXRbXVxuKTogUGFyc2VkT3V0cHV0cyB7XG4gIGNvbnN0IHBhcnNlZCA9IGNvcmVEZXNjcmlwdG9ycy5wYXJzZShwc2J0LCBkZXNjcmlwdG9yTWFwLCBwc2J0Lm5ldHdvcmspO1xuICBjb25zdCBleHRlcm5hbE91dHB1dHMgPSBwYXJzZWQub3V0cHV0cy5maWx0ZXIoKG8pID0+IG8uc2NyaXB0SWQgPT09IHVuZGVmaW5lZCk7XG4gIGNvbnN0IGNoYW5nZU91dHB1dHMgPSBwYXJzZWQub3V0cHV0cy5maWx0ZXIoKG8pID0+IG8uc2NyaXB0SWQgIT09IHVuZGVmaW5lZCk7XG4gIGNvbnN0IG91dHB1dERpZmZzID0gb3V0cHV0RGlmZmVyZW5jZXNXaXRoRXhwZWN0ZWQoZXh0ZXJuYWxPdXRwdXRzLCByZWNpcGllbnRPdXRwdXRzKTtcbiAgcmV0dXJuIHtcbiAgICBvdXRwdXRzOiBwYXJzZWQub3V0cHV0cyxcbiAgICBjaGFuZ2VPdXRwdXRzLFxuICAgIC4uLm91dHB1dERpZmZzLFxuICB9O1xufVxuXG5mdW5jdGlvbiBzdW1WYWx1ZXMoYXJyOiB7IHZhbHVlOiBiaWdpbnQgfVtdKTogYmlnaW50IHtcbiAgcmV0dXJuIGFyci5yZWR1Y2UoKHN1bSwgZSkgPT4gc3VtICsgZS52YWx1ZSwgQmlnSW50KDApKTtcbn1cblxuZnVuY3Rpb24gdG9CYXNlT3V0cHV0cyhvdXRwdXRzOiBQYXJzZWRPdXRwdXRbXSwgbmV0d29yazogdXR4b2xpYi5OZXR3b3JrKTogQmFzZU91dHB1dDxiaWdpbnQ+W107XG5mdW5jdGlvbiB0b0Jhc2VPdXRwdXRzKG91dHB1dHM6IFJlY2lwaWVudE91dHB1dFtdLCBuZXR3b3JrOiB1dHhvbGliLk5ldHdvcmspOiBCYXNlT3V0cHV0PGJpZ2ludCB8ICdtYXgnPltdO1xuZnVuY3Rpb24gdG9CYXNlT3V0cHV0cyhcbiAgb3V0cHV0czogKFBhcnNlZE91dHB1dCB8IFJlY2lwaWVudE91dHB1dClbXSxcbiAgbmV0d29yazogdXR4b2xpYi5OZXR3b3JrXG4pOiBCYXNlT3V0cHV0PGJpZ2ludCB8ICdtYXgnPltdIHtcbiAgcmV0dXJuIG91dHB1dHMubWFwKFxuICAgIChvKTogQmFzZU91dHB1dDxiaWdpbnQgfCAnbWF4Jz4gPT4gKHtcbiAgICAgIGFkZHJlc3M6IHRvRXh0ZW5kZWRBZGRyZXNzRm9ybWF0KG8uc2NyaXB0LCBuZXR3b3JrKSxcbiAgICAgIGFtb3VudDogby52YWx1ZSA9PT0gJ21heCcgPyAnbWF4JyA6IEJpZ0ludChvLnZhbHVlKSxcbiAgICAgIGV4dGVybmFsOiBvLnNjcmlwdElkID09PSB1bmRlZmluZWQsXG4gICAgfSlcbiAgKTtcbn1cblxuZXhwb3J0IHR5cGUgUGFyc2VkT3V0cHV0c0JpZ0ludCA9IEJhc2VQYXJzZWRUcmFuc2FjdGlvbk91dHB1dHM8YmlnaW50LCBCYXNlT3V0cHV0PGJpZ2ludCB8ICdtYXgnPj47XG5cbmZ1bmN0aW9uIHRvQmFzZVBhcnNlZFRyYW5zYWN0aW9uT3V0cHV0cyhcbiAgeyBvdXRwdXRzLCBjaGFuZ2VPdXRwdXRzLCBleHBsaWNpdEV4dGVybmFsT3V0cHV0cywgaW1wbGljaXRFeHRlcm5hbE91dHB1dHMsIG1pc3NpbmdPdXRwdXRzIH06IFBhcnNlZE91dHB1dHMsXG4gIG5ldHdvcms6IHV0eG9saWIuTmV0d29ya1xuKTogUGFyc2VkT3V0cHV0c0JpZ0ludCB7XG4gIHJldHVybiB7XG4gICAgb3V0cHV0czogdG9CYXNlT3V0cHV0cyhvdXRwdXRzLCBuZXR3b3JrKSxcbiAgICBjaGFuZ2VPdXRwdXRzOiB0b0Jhc2VPdXRwdXRzKGNoYW5nZU91dHB1dHMsIG5ldHdvcmspLFxuICAgIGV4cGxpY2l0RXh0ZXJuYWxPdXRwdXRzOiB0b0Jhc2VPdXRwdXRzKGV4cGxpY2l0RXh0ZXJuYWxPdXRwdXRzLCBuZXR3b3JrKSxcbiAgICBleHBsaWNpdEV4dGVybmFsU3BlbmRBbW91bnQ6IHN1bVZhbHVlcyhleHBsaWNpdEV4dGVybmFsT3V0cHV0cyksXG4gICAgaW1wbGljaXRFeHRlcm5hbE91dHB1dHM6IHRvQmFzZU91dHB1dHMoaW1wbGljaXRFeHRlcm5hbE91dHB1dHMsIG5ldHdvcmspLFxuICAgIGltcGxpY2l0RXh0ZXJuYWxTcGVuZEFtb3VudDogc3VtVmFsdWVzKGltcGxpY2l0RXh0ZXJuYWxPdXRwdXRzKSxcbiAgICBtaXNzaW5nT3V0cHV0czogdG9CYXNlT3V0cHV0cyhtaXNzaW5nT3V0cHV0cywgbmV0d29yayksXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b0Jhc2VQYXJzZWRUcmFuc2FjdGlvbk91dHB1dHNGcm9tUHNidChcbiAgcHNidDogdXR4b2xpYi5iaXRnby5VdHhvUHNidCxcbiAgZGVzY3JpcHRvck1hcDogY29yZURlc2NyaXB0b3JzLkRlc2NyaXB0b3JNYXAsXG4gIHJlY2lwaWVudHM6IElUcmFuc2FjdGlvblJlY2lwaWVudFtdLFxuICBuZXR3b3JrOiB1dHhvbGliLk5ldHdvcmtcbik6IFBhcnNlZE91dHB1dHNCaWdJbnQge1xuICByZXR1cm4gdG9CYXNlUGFyc2VkVHJhbnNhY3Rpb25PdXRwdXRzKFxuICAgIHBhcnNlT3V0cHV0c1dpdGhQc2J0KFxuICAgICAgcHNidCxcbiAgICAgIGRlc2NyaXB0b3JNYXAsXG4gICAgICByZWNpcGllbnRzLm1hcCgocikgPT4gdG9SZWNpcGllbnRPdXRwdXQociwgcHNidC5uZXR3b3JrKSlcbiAgICApLFxuICAgIG5ldHdvcmtcbiAgKTtcbn1cblxuZXhwb3J0IHR5cGUgUGFyc2VkRGVzY3JpcHRvclRyYW5zYWN0aW9uPFRBbW91bnQgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQ+ID0gQmFzZVBhcnNlZFRyYW5zYWN0aW9uPFxuICBUQW1vdW50LFxuICBCYXNlT3V0cHV0PFRBbW91bnQgfCAnbWF4Jz5cbj47XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZShcbiAgY29pbjogQWJzdHJhY3RVdHhvQ29pbixcbiAgd2FsbGV0OiBJRGVzY3JpcHRvcldhbGxldCxcbiAgcGFyYW1zOiBQYXJzZVRyYW5zYWN0aW9uT3B0aW9uczxudW1iZXIgfCBiaWdpbnQ+XG4pOiBQYXJzZWREZXNjcmlwdG9yVHJhbnNhY3Rpb248YmlnaW50PiB7XG4gIGlmIChwYXJhbXMudHhQYXJhbXMuYWxsb3dFeHRlcm5hbENoYW5nZUFkZHJlc3MpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2FsbG93RXh0ZXJuYWxDaGFuZ2VBZGRyZXNzIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIGRlc2NyaXB0b3Igd2FsbGV0cycpO1xuICB9XG4gIGlmIChwYXJhbXMudHhQYXJhbXMuY2hhbmdlQWRkcmVzcykge1xuICAgIHRocm93IG5ldyBFcnJvcignY2hhbmdlQWRkcmVzcyBpcyBub3Qgc3VwcG9ydGVkIGZvciBkZXNjcmlwdG9yIHdhbGxldHMnKTtcbiAgfVxuICBjb25zdCBrZXljaGFpbnMgPSBwYXJhbXMudmVyaWZpY2F0aW9uPy5rZXljaGFpbnM7XG4gIGlmICgha2V5Y2hhaW5zIHx8ICFVdHhvTmFtZWRLZXljaGFpbnMuaXMoa2V5Y2hhaW5zKSkge1xuICAgIHRocm93IG5ldyBFcnJvcigna2V5Y2hhaW4gaXMgcmVxdWlyZWQgZm9yIGRlc2NyaXB0b3Igd2FsbGV0cycpO1xuICB9XG4gIGNvbnN0IHsgcmVjaXBpZW50cyB9ID0gcGFyYW1zLnR4UGFyYW1zO1xuICBpZiAoIXJlY2lwaWVudHMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3JlY2lwaWVudHMgaXMgcmVxdWlyZWQnKTtcbiAgfVxuICBjb25zdCBwc2J0ID0gY29pbi5kZWNvZGVUcmFuc2FjdGlvbkZyb21QcmVidWlsZChwYXJhbXMudHhQcmVidWlsZCk7XG4gIGlmICghKHBzYnQgaW5zdGFuY2VvZiB1dHhvbGliLmJpdGdvLlV0eG9Qc2J0KSkge1xuICAgIHRocm93IG5ldyBFcnJvcignZXhwZWN0ZWQgcHNidCB0byBiZSBhbiBpbnN0YW5jZSBvZiBVdHhvUHNidCcpO1xuICB9XG4gIGNvbnN0IHdhbGxldEtleXMgPSB0b0JpcDMyVHJpcGxlKGtleWNoYWlucyk7XG4gIGNvbnN0IGRlc2NyaXB0b3JNYXAgPSBnZXREZXNjcmlwdG9yTWFwRnJvbVdhbGxldCh3YWxsZXQsIHdhbGxldEtleXMsIGdldFBvbGljeUZvckVudihwYXJhbXMud2FsbGV0LmJpdGdvLmVudikpO1xuICByZXR1cm4ge1xuICAgIC4uLnRvQmFzZVBhcnNlZFRyYW5zYWN0aW9uT3V0cHV0c0Zyb21Qc2J0KHBzYnQsIGRlc2NyaXB0b3JNYXAsIHJlY2lwaWVudHMsIHBzYnQubmV0d29yayksXG4gICAga2V5Y2hhaW5zLFxuICAgIGtleVNpZ25hdHVyZXM6IGdldEtleVNpZ25hdHVyZXMod2FsbGV0KSA/PyB7fSxcbiAgICBjdXN0b21DaGFuZ2U6IHVuZGVmaW5lZCxcbiAgICBuZWVkc0N1c3RvbUNoYW5nZUtleVNpZ25hdHVyZVZlcmlmaWNhdGlvbjogZmFsc2UsXG4gIH07XG59XG4iXX0=
@@ -1 +1 @@
1
- {"version":3,"file":"parseToAmountType.d.ts","sourceRoot":"","sources":["../../../../src/transaction/descriptor/parseToAmountType.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACtH,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAEtE,OAAO,EAAS,2BAA2B,EAAE,MAAM,SAAS,CAAC;AAE7D,KAAK,UAAU,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAEjD,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,EAAE,CAAC,EAAE,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CASjG;AAED,KAAK,iBAAiB,GAAG;IACvB,oBAAoB,EAAE,UAAU,CAAC;IACjC,mBAAmB,EAAE,UAAU,CAAC;CACjC,CAAC;AAyCF,wBAAgB,oCAAoC,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EAAE,OAAO,EAC3F,GAAG,EAAE,2BAA2B,CAAC,MAAM,CAAC,EACxC,MAAM,EAAE,iBAAiB,GACxB,qBAAqB,CAAC,OAAO,EAAE,OAAO,CAAC,CAIzC;AAED,wBAAgB,iBAAiB,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EAC/D,IAAI,EAAE,gBAAgB,EACtB,MAAM,EAAE,iBAAiB,EACzB,MAAM,EAAE,uBAAuB,CAAC,OAAO,CAAC,GACvC,qBAAqB,CAAC,OAAO,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,CAKpD"}
1
+ {"version":3,"file":"parseToAmountType.d.ts","sourceRoot":"","sources":["../../../../src/transaction/descriptor/parseToAmountType.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACtH,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAEtE,OAAO,EAAS,2BAA2B,EAAE,MAAM,SAAS,CAAC;AAE7D,KAAK,UAAU,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAEjD,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,EAAE,CAAC,EAAE,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAYjG;AAED,KAAK,iBAAiB,GAAG;IACvB,oBAAoB,EAAE,UAAU,CAAC;IACjC,mBAAmB,EAAE,UAAU,CAAC;CACjC,CAAC;AAyCF,wBAAgB,oCAAoC,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EAAE,OAAO,EAC3F,GAAG,EAAE,2BAA2B,CAAC,MAAM,CAAC,EACxC,MAAM,EAAE,iBAAiB,GACxB,qBAAqB,CAAC,OAAO,EAAE,OAAO,CAAC,CAIzC;AAED,wBAAgB,iBAAiB,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EAC/D,IAAI,EAAE,gBAAgB,EACtB,MAAM,EAAE,iBAAiB,EACzB,MAAM,EAAE,uBAAuB,CAAC,OAAO,CAAC,GACvC,qBAAqB,CAAC,OAAO,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,CAKpD"}
@@ -5,6 +5,9 @@ exports.parsedDescriptorTransactionToTNumber = parsedDescriptorTransactionToTNum
5
5
  exports.parseToAmountType = parseToAmountType;
6
6
  const parse_1 = require("./parse");
7
7
  function toAmountType(v, t) {
8
+ if (v === 'max') {
9
+ return v;
10
+ }
8
11
  switch (t) {
9
12
  case 'number':
10
13
  return Number(v);
@@ -54,4 +57,4 @@ function parseToAmountType(coin, wallet, params) {
54
57
  amountTypeBaseOutput: 'string',
55
58
  });
56
59
  }
57
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2VUb0Ftb3VudFR5cGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdHJhbnNhY3Rpb24vZGVzY3JpcHRvci9wYXJzZVRvQW1vdW50VHlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQU9BLG9DQVNDO0FBOENELG9GQU9DO0FBRUQsOENBU0M7QUE3RUQsbUNBQTZEO0FBSTdELFNBQWdCLFlBQVksQ0FBQyxDQUEyQixFQUFFLENBQWE7SUFDckUsUUFBUSxDQUFDLEVBQUUsQ0FBQztRQUNWLEtBQUssUUFBUTtZQUNYLE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ25CLEtBQUssUUFBUTtZQUNYLE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ25CLEtBQUssUUFBUTtZQUNYLE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JCLENBQUM7QUFDSCxDQUFDO0FBT0QsU0FBUyxtQkFBbUIsQ0FDMUIsTUFBMEIsRUFDMUIsVUFBc0I7SUFFdEIsT0FBTztRQUNMLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTztRQUN2QixNQUFNLEVBQUUsWUFBWSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFZO1FBQzFELFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUTtLQUMxQixDQUFDO0FBQ0osQ0FBQztBQUVELFNBQVMsY0FBYyxDQUdyQixDQUFJLEVBQUUsQ0FBSSxFQUFFLE1BQXlCO0lBQ3JDLFFBQVEsQ0FBQyxFQUFFLENBQUM7UUFDVixLQUFLLFNBQVMsQ0FBQztRQUNmLEtBQUssZUFBZSxDQUFDO1FBQ3JCLEtBQUsseUJBQXlCLENBQUM7UUFDL0IsS0FBSyx5QkFBeUIsQ0FBQztRQUMvQixLQUFLLGdCQUFnQjtZQUNuQixJQUFJLENBQUMsS0FBSyxTQUFTLEVBQUUsQ0FBQztnQkFDcEIsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNoQixDQUFDO1lBQ0QsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ3JCLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFNLENBQUMsQ0FBQztZQUNyRixDQUFDO1lBQ0QsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3BDLEtBQUssNkJBQTZCLENBQUM7UUFDbkMsS0FBSyw2QkFBNkI7WUFDaEMsSUFBSSxPQUFPLENBQUMsS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDMUIsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1lBQ3JDLENBQUM7WUFDRCxPQUFPLENBQUMsQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLG1CQUFtQixDQUFNLENBQUMsQ0FBQztRQUMvRDtZQUNFLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDbEIsQ0FBQztBQUNILENBQUM7QUFFRCxTQUFnQixvQ0FBb0MsQ0FDbEQsR0FBd0MsRUFDeEMsTUFBeUI7SUFFekIsT0FBTyxNQUFNLENBQUMsV0FBVyxDQUN2QixNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxjQUFjLENBQUMsQ0FBOEMsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FDcEUsQ0FBQztBQUMvQyxDQUFDO0FBRUQsU0FBZ0IsaUJBQWlCLENBQy9CLElBQXNCLEVBQ3RCLE1BQXlCLEVBQ3pCLE1BQXdDO0lBRXhDLE9BQU8sb0NBQW9DLENBQThCLElBQUEsYUFBSyxFQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLEVBQUU7UUFDcEcsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLFVBQVU7UUFDcEMsb0JBQW9CLEVBQUUsUUFBUTtLQUMvQixDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWJzdHJhY3RVdHhvQ29pbiwgQmFzZU91dHB1dCwgQmFzZVBhcnNlZFRyYW5zYWN0aW9uLCBQYXJzZVRyYW5zYWN0aW9uT3B0aW9ucyB9IGZyb20gJy4uLy4uL2Fic3RyYWN0VXR4b0NvaW4nO1xuaW1wb3J0IHsgSURlc2NyaXB0b3JXYWxsZXQgfSBmcm9tICcuLi8uLi9kZXNjcmlwdG9yL2Rlc2NyaXB0b3JXYWxsZXQnO1xuXG5pbXBvcnQgeyBwYXJzZSwgUGFyc2VkRGVzY3JpcHRvclRyYW5zYWN0aW9uIH0gZnJvbSAnLi9wYXJzZSc7XG5cbnR5cGUgQW1vdW50VHlwZSA9ICdudW1iZXInIHwgJ2JpZ2ludCcgfCAnc3RyaW5nJztcblxuZXhwb3J0IGZ1bmN0aW9uIHRvQW1vdW50VHlwZSh2OiBudW1iZXIgfCBiaWdpbnQgfCBzdHJpbmcsIHQ6IEFtb3VudFR5cGUpOiBudW1iZXIgfCBiaWdpbnQgfCBzdHJpbmcge1xuICBzd2l0Y2ggKHQpIHtcbiAgICBjYXNlICdudW1iZXInOlxuICAgICAgcmV0dXJuIE51bWJlcih2KTtcbiAgICBjYXNlICdiaWdpbnQnOlxuICAgICAgcmV0dXJuIEJpZ0ludCh2KTtcbiAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgcmV0dXJuIFN0cmluZyh2KTtcbiAgfVxufVxuXG50eXBlIEFtb3VudFR5cGVPcHRpb25zID0ge1xuICBhbW91bnRUeXBlQmFzZU91dHB1dDogQW1vdW50VHlwZTtcbiAgYW1vdW50VHlwZUFnZ3JlZ2F0ZTogQW1vdW50VHlwZTtcbn07XG5cbmZ1bmN0aW9uIGJhc2VPdXRwdXRUb1ROdW1iZXI8VEFtb3VudCBleHRlbmRzIG51bWJlciB8IGJpZ2ludD4oXG4gIG91dHB1dDogQmFzZU91dHB1dDxiaWdpbnQ+LFxuICBhbW91bnRUeXBlOiBBbW91bnRUeXBlXG4pOiBCYXNlT3V0cHV0PFRBbW91bnQ+IHtcbiAgcmV0dXJuIHtcbiAgICBhZGRyZXNzOiBvdXRwdXQuYWRkcmVzcyxcbiAgICBhbW91bnQ6IHRvQW1vdW50VHlwZShvdXRwdXQuYW1vdW50LCBhbW91bnRUeXBlKSBhcyBUQW1vdW50LFxuICAgIGV4dGVybmFsOiBvdXRwdXQuZXh0ZXJuYWwsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGVudHJ5VG9UTnVtYmVyPFxuICBLIGV4dGVuZHMga2V5b2YgUGFyc2VkRGVzY3JpcHRvclRyYW5zYWN0aW9uPGJpZ2ludD4sXG4gIFYgZXh0ZW5kcyBQYXJzZWREZXNjcmlwdG9yVHJhbnNhY3Rpb248YmlnaW50PltLXVxuPihrOiBLLCB2OiBWLCBwYXJhbXM6IEFtb3VudFR5cGVPcHRpb25zKTogW0ssIFZdIHtcbiAgc3dpdGNoIChrKSB7XG4gICAgY2FzZSAnb3V0cHV0cyc6XG4gICAgY2FzZSAnY2hhbmdlT3V0cHV0cyc6XG4gICAgY2FzZSAnZXhwbGljaXRFeHRlcm5hbE91dHB1dHMnOlxuICAgIGNhc2UgJ2ltcGxpY2l0RXh0ZXJuYWxPdXRwdXRzJzpcbiAgICBjYXNlICdtaXNzaW5nT3V0cHV0cyc6XG4gICAgICBpZiAodiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBbaywgdl07XG4gICAgICB9XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2KSkge1xuICAgICAgICByZXR1cm4gW2ssIHYubWFwKChvKSA9PiBiYXNlT3V0cHV0VG9UTnVtYmVyKG8sIHBhcmFtcy5hbW91bnRUeXBlQmFzZU91dHB1dCkpIGFzIFZdO1xuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdleHBlY3RlZCBhcnJheScpO1xuICAgIGNhc2UgJ2V4cGxpY2l0RXh0ZXJuYWxTcGVuZEFtb3VudCc6XG4gICAgY2FzZSAnaW1wbGljaXRFeHRlcm5hbFNwZW5kQW1vdW50JzpcbiAgICAgIGlmICh0eXBlb2YgdiAhPT0gJ2JpZ2ludCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdleHBlY3RlZCBiaWdpbnQnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBbaywgdG9BbW91bnRUeXBlKHYsIHBhcmFtcy5hbW91bnRUeXBlQWdncmVnYXRlKSBhcyBWXTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIFtrLCB2XTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VkRGVzY3JpcHRvclRyYW5zYWN0aW9uVG9UTnVtYmVyPFRBbW91bnQgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQsIFRPdXRwdXQ+KFxuICBvYmo6IFBhcnNlZERlc2NyaXB0b3JUcmFuc2FjdGlvbjxiaWdpbnQ+LFxuICBwYXJhbXM6IEFtb3VudFR5cGVPcHRpb25zXG4pOiBCYXNlUGFyc2VkVHJhbnNhY3Rpb248VEFtb3VudCwgVE91dHB1dD4ge1xuICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgIE9iamVjdC5lbnRyaWVzKG9iaikubWFwKChbaywgdl0pID0+IGVudHJ5VG9UTnVtYmVyKGsgYXMga2V5b2YgUGFyc2VkRGVzY3JpcHRvclRyYW5zYWN0aW9uPGJpZ2ludD4sIHYsIHBhcmFtcykpXG4gICkgYXMgQmFzZVBhcnNlZFRyYW5zYWN0aW9uPFRBbW91bnQsIFRPdXRwdXQ+O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VUb0Ftb3VudFR5cGU8VEFtb3VudCBleHRlbmRzIG51bWJlciB8IGJpZ2ludD4oXG4gIGNvaW46IEFic3RyYWN0VXR4b0NvaW4sXG4gIHdhbGxldDogSURlc2NyaXB0b3JXYWxsZXQsXG4gIHBhcmFtczogUGFyc2VUcmFuc2FjdGlvbk9wdGlvbnM8VEFtb3VudD5cbik6IEJhc2VQYXJzZWRUcmFuc2FjdGlvbjxUQW1vdW50LCBCYXNlT3V0cHV0PHN0cmluZz4+IHtcbiAgcmV0dXJuIHBhcnNlZERlc2NyaXB0b3JUcmFuc2FjdGlvblRvVE51bWJlcjxUQW1vdW50LCBCYXNlT3V0cHV0PHN0cmluZz4+KHBhcnNlKGNvaW4sIHdhbGxldCwgcGFyYW1zKSwge1xuICAgIGFtb3VudFR5cGVBZ2dyZWdhdGU6IGNvaW4uYW1vdW50VHlwZSxcbiAgICBhbW91bnRUeXBlQmFzZU91dHB1dDogJ3N0cmluZycsXG4gIH0pO1xufVxuIl19
60
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2VUb0Ftb3VudFR5cGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdHJhbnNhY3Rpb24vZGVzY3JpcHRvci9wYXJzZVRvQW1vdW50VHlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQU9BLG9DQVlDO0FBOENELG9GQU9DO0FBRUQsOENBU0M7QUFoRkQsbUNBQTZEO0FBSTdELFNBQWdCLFlBQVksQ0FBQyxDQUEyQixFQUFFLENBQWE7SUFDckUsSUFBSSxDQUFDLEtBQUssS0FBSyxFQUFFLENBQUM7UUFDaEIsT0FBTyxDQUFDLENBQUM7SUFDWCxDQUFDO0lBQ0QsUUFBUSxDQUFDLEVBQUUsQ0FBQztRQUNWLEtBQUssUUFBUTtZQUNYLE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ25CLEtBQUssUUFBUTtZQUNYLE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ25CLEtBQUssUUFBUTtZQUNYLE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JCLENBQUM7QUFDSCxDQUFDO0FBT0QsU0FBUyxtQkFBbUIsQ0FDMUIsTUFBa0MsRUFDbEMsVUFBc0I7SUFFdEIsT0FBTztRQUNMLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTztRQUN2QixNQUFNLEVBQUUsWUFBWSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFZO1FBQzFELFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUTtLQUMxQixDQUFDO0FBQ0osQ0FBQztBQUVELFNBQVMsY0FBYyxDQUdyQixDQUFJLEVBQUUsQ0FBSSxFQUFFLE1BQXlCO0lBQ3JDLFFBQVEsQ0FBQyxFQUFFLENBQUM7UUFDVixLQUFLLFNBQVMsQ0FBQztRQUNmLEtBQUssZUFBZSxDQUFDO1FBQ3JCLEtBQUsseUJBQXlCLENBQUM7UUFDL0IsS0FBSyx5QkFBeUIsQ0FBQztRQUMvQixLQUFLLGdCQUFnQjtZQUNuQixJQUFJLENBQUMsS0FBSyxTQUFTLEVBQUUsQ0FBQztnQkFDcEIsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNoQixDQUFDO1lBQ0QsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ3JCLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFNLENBQUMsQ0FBQztZQUNyRixDQUFDO1lBQ0QsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3BDLEtBQUssNkJBQTZCLENBQUM7UUFDbkMsS0FBSyw2QkFBNkI7WUFDaEMsSUFBSSxPQUFPLENBQUMsS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDMUIsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1lBQ3JDLENBQUM7WUFDRCxPQUFPLENBQUMsQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLG1CQUFtQixDQUFNLENBQUMsQ0FBQztRQUMvRDtZQUNFLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDbEIsQ0FBQztBQUNILENBQUM7QUFFRCxTQUFnQixvQ0FBb0MsQ0FDbEQsR0FBd0MsRUFDeEMsTUFBeUI7SUFFekIsT0FBTyxNQUFNLENBQUMsV0FBVyxDQUN2QixNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxjQUFjLENBQUMsQ0FBOEMsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FDcEUsQ0FBQztBQUMvQyxDQUFDO0FBRUQsU0FBZ0IsaUJBQWlCLENBQy9CLElBQXNCLEVBQ3RCLE1BQXlCLEVBQ3pCLE1BQXdDO0lBRXhDLE9BQU8sb0NBQW9DLENBQThCLElBQUEsYUFBSyxFQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLEVBQUU7UUFDcEcsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLFVBQVU7UUFDcEMsb0JBQW9CLEVBQUUsUUFBUTtLQUMvQixDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWJzdHJhY3RVdHhvQ29pbiwgQmFzZU91dHB1dCwgQmFzZVBhcnNlZFRyYW5zYWN0aW9uLCBQYXJzZVRyYW5zYWN0aW9uT3B0aW9ucyB9IGZyb20gJy4uLy4uL2Fic3RyYWN0VXR4b0NvaW4nO1xuaW1wb3J0IHsgSURlc2NyaXB0b3JXYWxsZXQgfSBmcm9tICcuLi8uLi9kZXNjcmlwdG9yL2Rlc2NyaXB0b3JXYWxsZXQnO1xuXG5pbXBvcnQgeyBwYXJzZSwgUGFyc2VkRGVzY3JpcHRvclRyYW5zYWN0aW9uIH0gZnJvbSAnLi9wYXJzZSc7XG5cbnR5cGUgQW1vdW50VHlwZSA9ICdudW1iZXInIHwgJ2JpZ2ludCcgfCAnc3RyaW5nJztcblxuZXhwb3J0IGZ1bmN0aW9uIHRvQW1vdW50VHlwZSh2OiBudW1iZXIgfCBiaWdpbnQgfCBzdHJpbmcsIHQ6IEFtb3VudFR5cGUpOiBudW1iZXIgfCBiaWdpbnQgfCBzdHJpbmcge1xuICBpZiAodiA9PT0gJ21heCcpIHtcbiAgICByZXR1cm4gdjtcbiAgfVxuICBzd2l0Y2ggKHQpIHtcbiAgICBjYXNlICdudW1iZXInOlxuICAgICAgcmV0dXJuIE51bWJlcih2KTtcbiAgICBjYXNlICdiaWdpbnQnOlxuICAgICAgcmV0dXJuIEJpZ0ludCh2KTtcbiAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgcmV0dXJuIFN0cmluZyh2KTtcbiAgfVxufVxuXG50eXBlIEFtb3VudFR5cGVPcHRpb25zID0ge1xuICBhbW91bnRUeXBlQmFzZU91dHB1dDogQW1vdW50VHlwZTtcbiAgYW1vdW50VHlwZUFnZ3JlZ2F0ZTogQW1vdW50VHlwZTtcbn07XG5cbmZ1bmN0aW9uIGJhc2VPdXRwdXRUb1ROdW1iZXI8VEFtb3VudCBleHRlbmRzIG51bWJlciB8IGJpZ2ludD4oXG4gIG91dHB1dDogQmFzZU91dHB1dDxiaWdpbnQgfCAnbWF4Jz4sXG4gIGFtb3VudFR5cGU6IEFtb3VudFR5cGVcbik6IEJhc2VPdXRwdXQ8VEFtb3VudD4ge1xuICByZXR1cm4ge1xuICAgIGFkZHJlc3M6IG91dHB1dC5hZGRyZXNzLFxuICAgIGFtb3VudDogdG9BbW91bnRUeXBlKG91dHB1dC5hbW91bnQsIGFtb3VudFR5cGUpIGFzIFRBbW91bnQsXG4gICAgZXh0ZXJuYWw6IG91dHB1dC5leHRlcm5hbCxcbiAgfTtcbn1cblxuZnVuY3Rpb24gZW50cnlUb1ROdW1iZXI8XG4gIEsgZXh0ZW5kcyBrZXlvZiBQYXJzZWREZXNjcmlwdG9yVHJhbnNhY3Rpb248YmlnaW50PixcbiAgViBleHRlbmRzIFBhcnNlZERlc2NyaXB0b3JUcmFuc2FjdGlvbjxiaWdpbnQ+W0tdXG4+KGs6IEssIHY6IFYsIHBhcmFtczogQW1vdW50VHlwZU9wdGlvbnMpOiBbSywgVl0ge1xuICBzd2l0Y2ggKGspIHtcbiAgICBjYXNlICdvdXRwdXRzJzpcbiAgICBjYXNlICdjaGFuZ2VPdXRwdXRzJzpcbiAgICBjYXNlICdleHBsaWNpdEV4dGVybmFsT3V0cHV0cyc6XG4gICAgY2FzZSAnaW1wbGljaXRFeHRlcm5hbE91dHB1dHMnOlxuICAgIGNhc2UgJ21pc3NpbmdPdXRwdXRzJzpcbiAgICAgIGlmICh2ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIFtrLCB2XTtcbiAgICAgIH1cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHYpKSB7XG4gICAgICAgIHJldHVybiBbaywgdi5tYXAoKG8pID0+IGJhc2VPdXRwdXRUb1ROdW1iZXIobywgcGFyYW1zLmFtb3VudFR5cGVCYXNlT3V0cHV0KSkgYXMgVl07XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2V4cGVjdGVkIGFycmF5Jyk7XG4gICAgY2FzZSAnZXhwbGljaXRFeHRlcm5hbFNwZW5kQW1vdW50JzpcbiAgICBjYXNlICdpbXBsaWNpdEV4dGVybmFsU3BlbmRBbW91bnQnOlxuICAgICAgaWYgKHR5cGVvZiB2ICE9PSAnYmlnaW50Jykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2V4cGVjdGVkIGJpZ2ludCcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFtrLCB0b0Ftb3VudFR5cGUodiwgcGFyYW1zLmFtb3VudFR5cGVBZ2dyZWdhdGUpIGFzIFZdO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gW2ssIHZdO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZWREZXNjcmlwdG9yVHJhbnNhY3Rpb25Ub1ROdW1iZXI8VEFtb3VudCBleHRlbmRzIG51bWJlciB8IGJpZ2ludCwgVE91dHB1dD4oXG4gIG9iajogUGFyc2VkRGVzY3JpcHRvclRyYW5zYWN0aW9uPGJpZ2ludD4sXG4gIHBhcmFtczogQW1vdW50VHlwZU9wdGlvbnNcbik6IEJhc2VQYXJzZWRUcmFuc2FjdGlvbjxUQW1vdW50LCBUT3V0cHV0PiB7XG4gIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgT2JqZWN0LmVudHJpZXMob2JqKS5tYXAoKFtrLCB2XSkgPT4gZW50cnlUb1ROdW1iZXIoayBhcyBrZXlvZiBQYXJzZWREZXNjcmlwdG9yVHJhbnNhY3Rpb248YmlnaW50PiwgdiwgcGFyYW1zKSlcbiAgKSBhcyBCYXNlUGFyc2VkVHJhbnNhY3Rpb248VEFtb3VudCwgVE91dHB1dD47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVRvQW1vdW50VHlwZTxUQW1vdW50IGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50PihcbiAgY29pbjogQWJzdHJhY3RVdHhvQ29pbixcbiAgd2FsbGV0OiBJRGVzY3JpcHRvcldhbGxldCxcbiAgcGFyYW1zOiBQYXJzZVRyYW5zYWN0aW9uT3B0aW9uczxUQW1vdW50PlxuKTogQmFzZVBhcnNlZFRyYW5zYWN0aW9uPFRBbW91bnQsIEJhc2VPdXRwdXQ8c3RyaW5nPj4ge1xuICByZXR1cm4gcGFyc2VkRGVzY3JpcHRvclRyYW5zYWN0aW9uVG9UTnVtYmVyPFRBbW91bnQsIEJhc2VPdXRwdXQ8c3RyaW5nPj4ocGFyc2UoY29pbiwgd2FsbGV0LCBwYXJhbXMpLCB7XG4gICAgYW1vdW50VHlwZUFnZ3JlZ2F0ZTogY29pbi5hbW91bnRUeXBlLFxuICAgIGFtb3VudFR5cGVCYXNlT3V0cHV0OiAnc3RyaW5nJyxcbiAgfSk7XG59XG4iXX0=
@@ -6,18 +6,18 @@ export declare class ValidationError extends Error {
6
6
  constructor(message: string);
7
7
  }
8
8
  export declare class ErrorMissingOutputs extends ValidationError {
9
- missingOutputs: BaseOutput<bigint>[];
10
- constructor(missingOutputs: BaseOutput<bigint>[]);
9
+ missingOutputs: BaseOutput<bigint | 'max'>[];
10
+ constructor(missingOutputs: BaseOutput<bigint | 'max'>[]);
11
11
  }
12
12
  export declare class ErrorImplicitExternalOutputs extends ValidationError {
13
- implicitExternalOutputs: BaseOutput<bigint>[];
14
- constructor(implicitExternalOutputs: BaseOutput<bigint>[]);
13
+ implicitExternalOutputs: BaseOutput<bigint | 'max'>[];
14
+ constructor(implicitExternalOutputs: BaseOutput<bigint | 'max'>[]);
15
15
  }
16
16
  export declare class AggregateValidationError extends ValidationError {
17
17
  errors: ValidationError[];
18
18
  constructor(errors: ValidationError[]);
19
19
  }
20
- export declare function assertExpectedOutputDifference(parsedOutputs: BaseParsedTransactionOutputs<bigint, BaseOutput<bigint>>): void;
20
+ export declare function assertExpectedOutputDifference(parsedOutputs: BaseParsedTransactionOutputs<bigint, BaseOutput<bigint | 'max'>>): void;
21
21
  export declare function assertValidTransaction(psbt: utxolib.bitgo.UtxoPsbt, descriptors: DescriptorMap, recipients: ITransactionRecipient[], network: utxolib.Network): void;
22
22
  /**
23
23
  * Wrapper around assertValidTransaction that returns a boolean instead of throwing.
@@ -1 +1 @@
1
- {"version":3,"file":"verifyTransaction.d.ts","sourceRoot":"","sources":["../../../../src/transaction/descriptor/verifyTransaction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAElF,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,4BAA4B,EAAE,MAAM,wBAAwB,CAAC;AAIpG,qBAAa,eAAgB,SAAQ,KAAK;gBAC5B,OAAO,EAAE,MAAM;CAG5B;AAED,qBAAa,mBAAoB,SAAQ,eAAe;IACnC,cAAc,EAAE,UAAU,CAAC,MAAM,CAAC,EAAE;gBAApC,cAAc,EAAE,UAAU,CAAC,MAAM,CAAC,EAAE;CAGxD;AAED,qBAAa,4BAA6B,SAAQ,eAAe;IAC5C,uBAAuB,EAAE,UAAU,CAAC,MAAM,CAAC,EAAE;gBAA7C,uBAAuB,EAAE,UAAU,CAAC,MAAM,CAAC,EAAE;CAGjE;AAED,qBAAa,wBAAyB,SAAQ,eAAe;IACxC,MAAM,EAAE,eAAe,EAAE;gBAAzB,MAAM,EAAE,eAAe,EAAE;CAG7C;AAED,wBAAgB,8BAA8B,CAC5C,aAAa,EAAE,4BAA4B,CAAC,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,GACtE,IAAI,CAcN;AAED,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,QAAQ,EAC5B,WAAW,EAAE,aAAa,EAC1B,UAAU,EAAE,qBAAqB,EAAE,EACnC,OAAO,EAAE,OAAO,CAAC,OAAO,GACvB,IAAI,CAEN;AAED;;;;;;;;;GASG;AACH,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,gBAAgB,EACtB,MAAM,EAAE,wBAAwB,EAChC,aAAa,EAAE,aAAa,GAC3B,OAAO,CAAC,OAAO,CAAC,CAOlB"}
1
+ {"version":3,"file":"verifyTransaction.d.ts","sourceRoot":"","sources":["../../../../src/transaction/descriptor/verifyTransaction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAElF,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,4BAA4B,EAAE,MAAM,wBAAwB,CAAC;AAIpG,qBAAa,eAAgB,SAAQ,KAAK;gBAC5B,OAAO,EAAE,MAAM;CAG5B;AAED,qBAAa,mBAAoB,SAAQ,eAAe;IACnC,cAAc,EAAE,UAAU,CAAC,MAAM,GAAG,KAAK,CAAC,EAAE;gBAA5C,cAAc,EAAE,UAAU,CAAC,MAAM,GAAG,KAAK,CAAC,EAAE;CAGhE;AAED,qBAAa,4BAA6B,SAAQ,eAAe;IAC5C,uBAAuB,EAAE,UAAU,CAAC,MAAM,GAAG,KAAK,CAAC,EAAE;gBAArD,uBAAuB,EAAE,UAAU,CAAC,MAAM,GAAG,KAAK,CAAC,EAAE;CAGzE;AAED,qBAAa,wBAAyB,SAAQ,eAAe;IACxC,MAAM,EAAE,eAAe,EAAE;gBAAzB,MAAM,EAAE,eAAe,EAAE;CAG7C;AAED,wBAAgB,8BAA8B,CAC5C,aAAa,EAAE,4BAA4B,CAAC,MAAM,EAAE,UAAU,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,GAC9E,IAAI,CAcN;AAED,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,QAAQ,EAC5B,WAAW,EAAE,aAAa,EAC1B,UAAU,EAAE,qBAAqB,EAAE,EACnC,OAAO,EAAE,OAAO,CAAC,OAAO,GACvB,IAAI,CAEN;AAED;;;;;;;;;GASG;AACH,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,gBAAgB,EACtB,MAAM,EAAE,wBAAwB,EAChC,aAAa,EAAE,aAAa,GAC3B,OAAO,CAAC,OAAO,CAAC,CAOlB"}
@@ -102,4 +102,4 @@ async function verifyTransaction(coin, params, descriptorMap) {
102
102
  assertValidTransaction(tx, descriptorMap, params.txParams.recipients ?? [], tx.network);
103
103
  return true;
104
104
  }
105
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyaWZ5VHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdHJhbnNhY3Rpb24vZGVzY3JpcHRvci92ZXJpZnlUcmFuc2FjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFnQ0Esd0VBZ0JDO0FBRUQsd0RBT0M7QUFZRCw4Q0FXQztBQWhGRCx5REFBMkM7QUFNM0MsbUNBQWlFO0FBRWpFLE1BQWEsZUFBZ0IsU0FBUSxLQUFLO0lBQ3hDLFlBQVksT0FBZTtRQUN6QixLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDakIsQ0FBQztDQUNGO0FBSkQsMENBSUM7QUFFRCxNQUFhLG1CQUFvQixTQUFRLGVBQWU7SUFDdEQsWUFBbUIsY0FBb0M7UUFDckQsS0FBSyxDQUFDLDBCQUEwQixjQUFjLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUR6QyxtQkFBYyxHQUFkLGNBQWMsQ0FBc0I7SUFFdkQsQ0FBQztDQUNGO0FBSkQsa0RBSUM7QUFFRCxNQUFhLDRCQUE2QixTQUFRLGVBQWU7SUFDL0QsWUFBbUIsdUJBQTZDO1FBQzlELEtBQUssQ0FBQywrQ0FBK0MsdUJBQXVCLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUR2RSw0QkFBdUIsR0FBdkIsdUJBQXVCLENBQXNCO0lBRWhFLENBQUM7Q0FDRjtBQUpELG9FQUlDO0FBRUQsTUFBYSx3QkFBeUIsU0FBUSxlQUFlO0lBQzNELFlBQW1CLE1BQXlCO1FBQzFDLEtBQUssQ0FBQyxxQ0FBcUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFENUMsV0FBTSxHQUFOLE1BQU0sQ0FBbUI7SUFFNUMsQ0FBQztDQUNGO0FBSkQsNERBSUM7QUFFRCxTQUFnQiw4QkFBOEIsQ0FDNUMsYUFBdUU7SUFFdkUsTUFBTSxNQUFNLEdBQXNCLEVBQUUsQ0FBQztJQUNyQyxJQUFJLGFBQWEsQ0FBQyxjQUFjLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQzVDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxtQkFBbUIsQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztJQUNyRSxDQUFDO0lBQ0QsSUFBSSxhQUFhLENBQUMsdUJBQXVCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ3JELHNEQUFzRDtRQUN0RCxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksNEJBQTRCLENBQUMsYUFBYSxDQUFDLHVCQUF1QixDQUFDLENBQUMsQ0FBQztJQUN2RixDQUFDO0lBQ0QsSUFBSSxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ3RCLGlDQUFpQztRQUNqQyxvQ0FBb0M7UUFDcEMsTUFBTSxJQUFJLHdCQUF3QixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzdDLENBQUM7QUFDSCxDQUFDO0FBRUQsU0FBZ0Isc0JBQXNCLENBQ3BDLElBQTRCLEVBQzVCLFdBQTBCLEVBQzFCLFVBQW1DLEVBQ25DLE9BQXdCO0lBRXhCLDhCQUE4QixDQUFDLElBQUEsOENBQXNDLEVBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUNqSCxDQUFDO0FBRUQ7Ozs7Ozs7OztHQVNHO0FBQ0ksS0FBSyxVQUFVLGlCQUFpQixDQUNyQyxJQUFzQixFQUN0QixNQUFnQyxFQUNoQyxhQUE0QjtJQUU1QixNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsNkJBQTZCLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ2pFLElBQUksQ0FBQyxDQUFDLEVBQUUsWUFBWSxPQUFPLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7UUFDNUMsTUFBTSxJQUFJLEtBQUssQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFDRCxzQkFBc0IsQ0FBQyxFQUFFLEVBQUUsYUFBYSxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBVSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDeEYsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgdXR4b2xpYiBmcm9tICdAYml0Z28vdXR4by1saWInO1xuaW1wb3J0IHsgSVRyYW5zYWN0aW9uUmVjaXBpZW50LCBWZXJpZnlUcmFuc2FjdGlvbk9wdGlvbnMgfSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuXG5pbXBvcnQgeyBEZXNjcmlwdG9yTWFwIH0gZnJvbSAnLi4vLi4vY29yZS9kZXNjcmlwdG9yJztcbmltcG9ydCB7IEFic3RyYWN0VXR4b0NvaW4sIEJhc2VPdXRwdXQsIEJhc2VQYXJzZWRUcmFuc2FjdGlvbk91dHB1dHMgfSBmcm9tICcuLi8uLi9hYnN0cmFjdFV0eG9Db2luJztcblxuaW1wb3J0IHsgdG9CYXNlUGFyc2VkVHJhbnNhY3Rpb25PdXRwdXRzRnJvbVBzYnQgfSBmcm9tICcuL3BhcnNlJztcblxuZXhwb3J0IGNsYXNzIFZhbGlkYXRpb25FcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nKSB7XG4gICAgc3VwZXIobWVzc2FnZSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEVycm9yTWlzc2luZ091dHB1dHMgZXh0ZW5kcyBWYWxpZGF0aW9uRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgbWlzc2luZ091dHB1dHM6IEJhc2VPdXRwdXQ8YmlnaW50PltdKSB7XG4gICAgc3VwZXIoYG1pc3Npbmcgb3V0cHV0cyAoY291bnQ9JHttaXNzaW5nT3V0cHV0cy5sZW5ndGh9KWApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBFcnJvckltcGxpY2l0RXh0ZXJuYWxPdXRwdXRzIGV4dGVuZHMgVmFsaWRhdGlvbkVycm9yIHtcbiAgY29uc3RydWN0b3IocHVibGljIGltcGxpY2l0RXh0ZXJuYWxPdXRwdXRzOiBCYXNlT3V0cHV0PGJpZ2ludD5bXSkge1xuICAgIHN1cGVyKGB1bmV4cGVjdGVkIGltcGxpY2l0IGV4dGVybmFsIG91dHB1dHMgKGNvdW50PSR7aW1wbGljaXRFeHRlcm5hbE91dHB1dHMubGVuZ3RofSlgKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQWdncmVnYXRlVmFsaWRhdGlvbkVycm9yIGV4dGVuZHMgVmFsaWRhdGlvbkVycm9yIHtcbiAgY29uc3RydWN0b3IocHVibGljIGVycm9yczogVmFsaWRhdGlvbkVycm9yW10pIHtcbiAgICBzdXBlcihgYWdncmVnYXRlIHZhbGlkYXRpb24gZXJyb3IgKGNvdW50PSR7ZXJyb3JzLmxlbmd0aH0pYCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFzc2VydEV4cGVjdGVkT3V0cHV0RGlmZmVyZW5jZShcbiAgcGFyc2VkT3V0cHV0czogQmFzZVBhcnNlZFRyYW5zYWN0aW9uT3V0cHV0czxiaWdpbnQsIEJhc2VPdXRwdXQ8YmlnaW50Pj5cbik6IHZvaWQge1xuICBjb25zdCBlcnJvcnM6IFZhbGlkYXRpb25FcnJvcltdID0gW107XG4gIGlmIChwYXJzZWRPdXRwdXRzLm1pc3NpbmdPdXRwdXRzLmxlbmd0aCA+IDApIHtcbiAgICBlcnJvcnMucHVzaChuZXcgRXJyb3JNaXNzaW5nT3V0cHV0cyhwYXJzZWRPdXRwdXRzLm1pc3NpbmdPdXRwdXRzKSk7XG4gIH1cbiAgaWYgKHBhcnNlZE91dHB1dHMuaW1wbGljaXRFeHRlcm5hbE91dHB1dHMubGVuZ3RoID4gMCkge1xuICAgIC8vIEZJWE1FOiBmb3IgcGF5Z28gd2UgbmVlZCB0byByZWxheCB0aGlzIGEgbGl0dGxlIGJpdFxuICAgIGVycm9ycy5wdXNoKG5ldyBFcnJvckltcGxpY2l0RXh0ZXJuYWxPdXRwdXRzKHBhcnNlZE91dHB1dHMuaW1wbGljaXRFeHRlcm5hbE91dHB1dHMpKTtcbiAgfVxuICBpZiAoZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAvLyBGSVhNRShCVEMtMTY4OCk6IGVuYWJsZSBFUzIwMjFcbiAgICAvLyB0aHJvdyBuZXcgQWdncmVnYXRlRXJyb3IoZXJyb3JzKTtcbiAgICB0aHJvdyBuZXcgQWdncmVnYXRlVmFsaWRhdGlvbkVycm9yKGVycm9ycyk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFzc2VydFZhbGlkVHJhbnNhY3Rpb24oXG4gIHBzYnQ6IHV0eG9saWIuYml0Z28uVXR4b1BzYnQsXG4gIGRlc2NyaXB0b3JzOiBEZXNjcmlwdG9yTWFwLFxuICByZWNpcGllbnRzOiBJVHJhbnNhY3Rpb25SZWNpcGllbnRbXSxcbiAgbmV0d29yazogdXR4b2xpYi5OZXR3b3JrXG4pOiB2b2lkIHtcbiAgYXNzZXJ0RXhwZWN0ZWRPdXRwdXREaWZmZXJlbmNlKHRvQmFzZVBhcnNlZFRyYW5zYWN0aW9uT3V0cHV0c0Zyb21Qc2J0KHBzYnQsIGRlc2NyaXB0b3JzLCByZWNpcGllbnRzLCBuZXR3b3JrKSk7XG59XG5cbi8qKlxuICogV3JhcHBlciBhcm91bmQgYXNzZXJ0VmFsaWRUcmFuc2FjdGlvbiB0aGF0IHJldHVybnMgYSBib29sZWFuIGluc3RlYWQgb2YgdGhyb3dpbmcuXG4gKlxuICogV2UgZm9sbG93IHRoZSBBYnN0cmFjdFV0eG9Db2luIGludGVyZmFjZSBoZXJlIHdoaWNoIGlzIGEgYml0IGNvbmZ1c2VkIC0gdGhlIHJldHVybiB2YWx1ZSBpcyBhIGJvb2xlYW4gYnV0IHdlXG4gKiBhbHNvIHRocm93IGVycm9ycyAoYmVjYXVzZSB3ZSBhY3R1YWxseSB3YW50IHRvIGtub3cgd2hhdCB3ZW50IHdyb25nKS5cbiAqXG4gKiBAcGFyYW0gY29pblxuICogQHBhcmFtIHBhcmFtc1xuICogQHBhcmFtIGRlc2NyaXB0b3JNYXBcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHZlcmlmeVRyYW5zYWN0aW9uKFxuICBjb2luOiBBYnN0cmFjdFV0eG9Db2luLFxuICBwYXJhbXM6IFZlcmlmeVRyYW5zYWN0aW9uT3B0aW9ucyxcbiAgZGVzY3JpcHRvck1hcDogRGVzY3JpcHRvck1hcFxuKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGNvbnN0IHR4ID0gY29pbi5kZWNvZGVUcmFuc2FjdGlvbkZyb21QcmVidWlsZChwYXJhbXMudHhQcmVidWlsZCk7XG4gIGlmICghKHR4IGluc3RhbmNlb2YgdXR4b2xpYi5iaXRnby5VdHhvUHNidCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3VuZXhwZWN0ZWQgdHJhbnNhY3Rpb24gdHlwZScpO1xuICB9XG4gIGFzc2VydFZhbGlkVHJhbnNhY3Rpb24odHgsIGRlc2NyaXB0b3JNYXAsIHBhcmFtcy50eFBhcmFtcy5yZWNpcGllbnRzID8/IFtdLCB0eC5uZXR3b3JrKTtcbiAgcmV0dXJuIHRydWU7XG59XG4iXX0=
105
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyaWZ5VHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdHJhbnNhY3Rpb24vZGVzY3JpcHRvci92ZXJpZnlUcmFuc2FjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFnQ0Esd0VBZ0JDO0FBRUQsd0RBT0M7QUFZRCw4Q0FXQztBQWhGRCx5REFBMkM7QUFNM0MsbUNBQWlFO0FBRWpFLE1BQWEsZUFBZ0IsU0FBUSxLQUFLO0lBQ3hDLFlBQVksT0FBZTtRQUN6QixLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDakIsQ0FBQztDQUNGO0FBSkQsMENBSUM7QUFFRCxNQUFhLG1CQUFvQixTQUFRLGVBQWU7SUFDdEQsWUFBbUIsY0FBNEM7UUFDN0QsS0FBSyxDQUFDLDBCQUEwQixjQUFjLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUR6QyxtQkFBYyxHQUFkLGNBQWMsQ0FBOEI7SUFFL0QsQ0FBQztDQUNGO0FBSkQsa0RBSUM7QUFFRCxNQUFhLDRCQUE2QixTQUFRLGVBQWU7SUFDL0QsWUFBbUIsdUJBQXFEO1FBQ3RFLEtBQUssQ0FBQywrQ0FBK0MsdUJBQXVCLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUR2RSw0QkFBdUIsR0FBdkIsdUJBQXVCLENBQThCO0lBRXhFLENBQUM7Q0FDRjtBQUpELG9FQUlDO0FBRUQsTUFBYSx3QkFBeUIsU0FBUSxlQUFlO0lBQzNELFlBQW1CLE1BQXlCO1FBQzFDLEtBQUssQ0FBQyxxQ0FBcUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFENUMsV0FBTSxHQUFOLE1BQU0sQ0FBbUI7SUFFNUMsQ0FBQztDQUNGO0FBSkQsNERBSUM7QUFFRCxTQUFnQiw4QkFBOEIsQ0FDNUMsYUFBK0U7SUFFL0UsTUFBTSxNQUFNLEdBQXNCLEVBQUUsQ0FBQztJQUNyQyxJQUFJLGFBQWEsQ0FBQyxjQUFjLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQzVDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxtQkFBbUIsQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztJQUNyRSxDQUFDO0lBQ0QsSUFBSSxhQUFhLENBQUMsdUJBQXVCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ3JELHNEQUFzRDtRQUN0RCxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksNEJBQTRCLENBQUMsYUFBYSxDQUFDLHVCQUF1QixDQUFDLENBQUMsQ0FBQztJQUN2RixDQUFDO0lBQ0QsSUFBSSxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ3RCLGlDQUFpQztRQUNqQyxvQ0FBb0M7UUFDcEMsTUFBTSxJQUFJLHdCQUF3QixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzdDLENBQUM7QUFDSCxDQUFDO0FBRUQsU0FBZ0Isc0JBQXNCLENBQ3BDLElBQTRCLEVBQzVCLFdBQTBCLEVBQzFCLFVBQW1DLEVBQ25DLE9BQXdCO0lBRXhCLDhCQUE4QixDQUFDLElBQUEsOENBQXNDLEVBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUNqSCxDQUFDO0FBRUQ7Ozs7Ozs7OztHQVNHO0FBQ0ksS0FBSyxVQUFVLGlCQUFpQixDQUNyQyxJQUFzQixFQUN0QixNQUFnQyxFQUNoQyxhQUE0QjtJQUU1QixNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsNkJBQTZCLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ2pFLElBQUksQ0FBQyxDQUFDLEVBQUUsWUFBWSxPQUFPLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7UUFDNUMsTUFBTSxJQUFJLEtBQUssQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFDRCxzQkFBc0IsQ0FBQyxFQUFFLEVBQUUsYUFBYSxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBVSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDeEYsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgdXR4b2xpYiBmcm9tICdAYml0Z28vdXR4by1saWInO1xuaW1wb3J0IHsgSVRyYW5zYWN0aW9uUmVjaXBpZW50LCBWZXJpZnlUcmFuc2FjdGlvbk9wdGlvbnMgfSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuXG5pbXBvcnQgeyBEZXNjcmlwdG9yTWFwIH0gZnJvbSAnLi4vLi4vY29yZS9kZXNjcmlwdG9yJztcbmltcG9ydCB7IEFic3RyYWN0VXR4b0NvaW4sIEJhc2VPdXRwdXQsIEJhc2VQYXJzZWRUcmFuc2FjdGlvbk91dHB1dHMgfSBmcm9tICcuLi8uLi9hYnN0cmFjdFV0eG9Db2luJztcblxuaW1wb3J0IHsgdG9CYXNlUGFyc2VkVHJhbnNhY3Rpb25PdXRwdXRzRnJvbVBzYnQgfSBmcm9tICcuL3BhcnNlJztcblxuZXhwb3J0IGNsYXNzIFZhbGlkYXRpb25FcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nKSB7XG4gICAgc3VwZXIobWVzc2FnZSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEVycm9yTWlzc2luZ091dHB1dHMgZXh0ZW5kcyBWYWxpZGF0aW9uRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgbWlzc2luZ091dHB1dHM6IEJhc2VPdXRwdXQ8YmlnaW50IHwgJ21heCc+W10pIHtcbiAgICBzdXBlcihgbWlzc2luZyBvdXRwdXRzIChjb3VudD0ke21pc3NpbmdPdXRwdXRzLmxlbmd0aH0pYCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEVycm9ySW1wbGljaXRFeHRlcm5hbE91dHB1dHMgZXh0ZW5kcyBWYWxpZGF0aW9uRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgaW1wbGljaXRFeHRlcm5hbE91dHB1dHM6IEJhc2VPdXRwdXQ8YmlnaW50IHwgJ21heCc+W10pIHtcbiAgICBzdXBlcihgdW5leHBlY3RlZCBpbXBsaWNpdCBleHRlcm5hbCBvdXRwdXRzIChjb3VudD0ke2ltcGxpY2l0RXh0ZXJuYWxPdXRwdXRzLmxlbmd0aH0pYCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEFnZ3JlZ2F0ZVZhbGlkYXRpb25FcnJvciBleHRlbmRzIFZhbGlkYXRpb25FcnJvciB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBlcnJvcnM6IFZhbGlkYXRpb25FcnJvcltdKSB7XG4gICAgc3VwZXIoYGFnZ3JlZ2F0ZSB2YWxpZGF0aW9uIGVycm9yIChjb3VudD0ke2Vycm9ycy5sZW5ndGh9KWApO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnRFeHBlY3RlZE91dHB1dERpZmZlcmVuY2UoXG4gIHBhcnNlZE91dHB1dHM6IEJhc2VQYXJzZWRUcmFuc2FjdGlvbk91dHB1dHM8YmlnaW50LCBCYXNlT3V0cHV0PGJpZ2ludCB8ICdtYXgnPj5cbik6IHZvaWQge1xuICBjb25zdCBlcnJvcnM6IFZhbGlkYXRpb25FcnJvcltdID0gW107XG4gIGlmIChwYXJzZWRPdXRwdXRzLm1pc3NpbmdPdXRwdXRzLmxlbmd0aCA+IDApIHtcbiAgICBlcnJvcnMucHVzaChuZXcgRXJyb3JNaXNzaW5nT3V0cHV0cyhwYXJzZWRPdXRwdXRzLm1pc3NpbmdPdXRwdXRzKSk7XG4gIH1cbiAgaWYgKHBhcnNlZE91dHB1dHMuaW1wbGljaXRFeHRlcm5hbE91dHB1dHMubGVuZ3RoID4gMCkge1xuICAgIC8vIEZJWE1FOiBmb3IgcGF5Z28gd2UgbmVlZCB0byByZWxheCB0aGlzIGEgbGl0dGxlIGJpdFxuICAgIGVycm9ycy5wdXNoKG5ldyBFcnJvckltcGxpY2l0RXh0ZXJuYWxPdXRwdXRzKHBhcnNlZE91dHB1dHMuaW1wbGljaXRFeHRlcm5hbE91dHB1dHMpKTtcbiAgfVxuICBpZiAoZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAvLyBGSVhNRShCVEMtMTY4OCk6IGVuYWJsZSBFUzIwMjFcbiAgICAvLyB0aHJvdyBuZXcgQWdncmVnYXRlRXJyb3IoZXJyb3JzKTtcbiAgICB0aHJvdyBuZXcgQWdncmVnYXRlVmFsaWRhdGlvbkVycm9yKGVycm9ycyk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFzc2VydFZhbGlkVHJhbnNhY3Rpb24oXG4gIHBzYnQ6IHV0eG9saWIuYml0Z28uVXR4b1BzYnQsXG4gIGRlc2NyaXB0b3JzOiBEZXNjcmlwdG9yTWFwLFxuICByZWNpcGllbnRzOiBJVHJhbnNhY3Rpb25SZWNpcGllbnRbXSxcbiAgbmV0d29yazogdXR4b2xpYi5OZXR3b3JrXG4pOiB2b2lkIHtcbiAgYXNzZXJ0RXhwZWN0ZWRPdXRwdXREaWZmZXJlbmNlKHRvQmFzZVBhcnNlZFRyYW5zYWN0aW9uT3V0cHV0c0Zyb21Qc2J0KHBzYnQsIGRlc2NyaXB0b3JzLCByZWNpcGllbnRzLCBuZXR3b3JrKSk7XG59XG5cbi8qKlxuICogV3JhcHBlciBhcm91bmQgYXNzZXJ0VmFsaWRUcmFuc2FjdGlvbiB0aGF0IHJldHVybnMgYSBib29sZWFuIGluc3RlYWQgb2YgdGhyb3dpbmcuXG4gKlxuICogV2UgZm9sbG93IHRoZSBBYnN0cmFjdFV0eG9Db2luIGludGVyZmFjZSBoZXJlIHdoaWNoIGlzIGEgYml0IGNvbmZ1c2VkIC0gdGhlIHJldHVybiB2YWx1ZSBpcyBhIGJvb2xlYW4gYnV0IHdlXG4gKiBhbHNvIHRocm93IGVycm9ycyAoYmVjYXVzZSB3ZSBhY3R1YWxseSB3YW50IHRvIGtub3cgd2hhdCB3ZW50IHdyb25nKS5cbiAqXG4gKiBAcGFyYW0gY29pblxuICogQHBhcmFtIHBhcmFtc1xuICogQHBhcmFtIGRlc2NyaXB0b3JNYXBcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHZlcmlmeVRyYW5zYWN0aW9uKFxuICBjb2luOiBBYnN0cmFjdFV0eG9Db2luLFxuICBwYXJhbXM6IFZlcmlmeVRyYW5zYWN0aW9uT3B0aW9ucyxcbiAgZGVzY3JpcHRvck1hcDogRGVzY3JpcHRvck1hcFxuKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGNvbnN0IHR4ID0gY29pbi5kZWNvZGVUcmFuc2FjdGlvbkZyb21QcmVidWlsZChwYXJhbXMudHhQcmVidWlsZCk7XG4gIGlmICghKHR4IGluc3RhbmNlb2YgdXR4b2xpYi5iaXRnby5VdHhvUHNidCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3VuZXhwZWN0ZWQgdHJhbnNhY3Rpb24gdHlwZScpO1xuICB9XG4gIGFzc2VydFZhbGlkVHJhbnNhY3Rpb24odHgsIGRlc2NyaXB0b3JNYXAsIHBhcmFtcy50eFBhcmFtcy5yZWNpcGllbnRzID8/IFtdLCB0eC5uZXR3b3JrKTtcbiAgcmV0dXJuIHRydWU7XG59XG4iXX0=
@@ -1,9 +1,7 @@
1
- import { AbstractUtxoCoin, Output, ParsedTransaction, ParseTransactionOptions } from '../../abstractUtxoCoin';
2
- /**
3
- * @param first
4
- * @param second
5
- * @returns {Array} All outputs that are in the first array but not in the second
6
- */
7
- export declare function outputDifference(first: Output[], second: Output[]): Output[];
1
+ import { AbstractUtxoCoin, ParsedTransaction, ParseTransactionOptions } from '../../abstractUtxoCoin';
2
+ import { ComparableOutput } from '../outputDifference';
3
+ export type ComparableOutputWithExternal<TValue> = ComparableOutput<TValue> & {
4
+ external: boolean | undefined;
5
+ };
8
6
  export declare function parseTransaction<TNumber extends bigint | number>(coin: AbstractUtxoCoin, params: ParseTransactionOptions<TNumber>): Promise<ParsedTransaction<TNumber>>;
9
7
  //# sourceMappingURL=parseTransaction.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"parseTransaction.d.ts","sourceRoot":"","sources":["../../../../src/transaction/fixedScript/parseTransaction.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,gBAAgB,EAEhB,MAAM,EAEN,iBAAiB,EACjB,uBAAuB,EACxB,MAAM,wBAAwB,CAAC;AAKhC;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAY5E;AAED,wBAAsB,gBAAgB,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EACpE,IAAI,EAAE,gBAAgB,EACtB,MAAM,EAAE,uBAAuB,CAAC,OAAO,CAAC,GACvC,OAAO,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAsLrC"}
1
+ {"version":3,"file":"parseTransaction.d.ts","sourceRoot":"","sources":["../../../../src/transaction/fixedScript/parseTransaction.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,gBAAgB,EAIhB,iBAAiB,EACjB,uBAAuB,EACxB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,gBAAgB,EAAoB,MAAM,qBAAqB,CAAC;AAKzE,MAAM,MAAM,4BAA4B,CAAC,MAAM,IAAI,gBAAgB,CAAC,MAAM,CAAC,GAAG;IAC5E,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAC;CAC/B,CAAC;AAEF,wBAAsB,gBAAgB,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EACpE,IAAI,EAAE,gBAAgB,EACtB,MAAM,EAAE,uBAAuB,CAAC,OAAO,CAAC,GACvC,OAAO,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAwMrC"}
@@ -36,29 +36,14 @@ 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.outputDifference = outputDifference;
40
39
  exports.parseTransaction = parseTransaction;
41
40
  const assert_1 = __importDefault(require("assert"));
42
41
  const lodash_1 = __importDefault(require("lodash"));
43
42
  const utxolib = __importStar(require("@bitgo/utxo-lib"));
44
43
  const keychains_1 = require("../../keychains");
44
+ const outputDifference_1 = require("../outputDifference");
45
+ const recipient_1 = require("../recipient");
45
46
  const parseOutput_1 = require("./parseOutput");
46
- /**
47
- * @param first
48
- * @param second
49
- * @returns {Array} All outputs that are in the first array but not in the second
50
- */
51
- function outputDifference(first, second) {
52
- const keyFunc = ({ address, amount }) => `${address}:${amount}`;
53
- const groupedOutputs = lodash_1.default.groupBy(first, keyFunc);
54
- second.forEach((output) => {
55
- const group = groupedOutputs[keyFunc(output)];
56
- if (group) {
57
- group.pop();
58
- }
59
- });
60
- return lodash_1.default.flatten(lodash_1.default.values(groupedOutputs));
61
- }
62
47
  async function parseTransaction(coin, params) {
63
48
  const { txParams, txPrebuild, wallet, verification = {}, reqId } = params;
64
49
  if (!lodash_1.default.isUndefined(verification.disableNetworking) && !lodash_1.default.isBoolean(verification.disableNetworking)) {
@@ -122,7 +107,6 @@ async function parseTransaction(coin, params) {
122
107
  }));
123
108
  }
124
109
  }
125
- const missingOutputs = outputDifference(expectedOutputs, allOutputs);
126
110
  // get the keychains from the custom change wallet if needed
127
111
  let customChange;
128
112
  const { customChangeWalletId = undefined } = wallet.coinSpecific() || {};
@@ -169,14 +153,20 @@ async function parseTransaction(coin, params) {
169
153
  }));
170
154
  const needsCustomChangeKeySignatureVerification = allOutputDetails.some((output) => output?.needsCustomChangeKeySignatureVerification);
171
155
  const changeOutputs = lodash_1.default.filter(allOutputDetails, { external: false });
172
- // these are all the outputs that were not originally explicitly specified in recipients
173
- // ideally change outputs or a paygo output that might have been added
174
- const implicitOutputs = outputDifference(allOutputDetails, expectedOutputs);
175
- const explicitOutputs = outputDifference(allOutputDetails, implicitOutputs);
156
+ function toComparableOutputsWithExternal(outputs) {
157
+ return outputs.map((output) => ({
158
+ script: (0, recipient_1.fromExtendedAddressFormatToScript)(output.address, coin.network),
159
+ value: output.amount === 'max' ? 'max' : BigInt(output.amount),
160
+ external: output.external,
161
+ }));
162
+ }
163
+ const missingOutputs = (0, outputDifference_1.outputDifference)(toComparableOutputsWithExternal(expectedOutputs), toComparableOutputsWithExternal(allOutputs));
164
+ const implicitOutputs = (0, outputDifference_1.outputDifference)(toComparableOutputsWithExternal(allOutputDetails), toComparableOutputsWithExternal(expectedOutputs));
165
+ const explicitOutputs = (0, outputDifference_1.outputDifference)(toComparableOutputsWithExternal(allOutputDetails), implicitOutputs);
176
166
  // these are all the non-wallet outputs that had been originally explicitly specified in recipients
177
- const explicitExternalOutputs = lodash_1.default.filter(explicitOutputs, { external: true });
167
+ const explicitExternalOutputs = explicitOutputs.filter((output) => output.external);
178
168
  // this is the sum of all the originally explicitly specified non-wallet output values
179
- const explicitExternalSpendAmount = utxolib.bitgo.toTNumber(explicitExternalOutputs.reduce((sum, o) => sum + BigInt(o.amount), BigInt(0)), coin.amountType);
169
+ const explicitExternalSpendAmount = utxolib.bitgo.toTNumber(explicitExternalOutputs.reduce((sum, o) => sum + BigInt(o.value), BigInt(0)), coin.amountType);
180
170
  /**
181
171
  * The calculation of the implicit external spend amount pertains to verifying the pay-as-you-go-fee BitGo
182
172
  * automatically applies to transactions sending money out of the wallet. The logic is fairly straightforward
@@ -187,15 +177,22 @@ async function parseTransaction(coin, params) {
187
177
  */
188
178
  // make sure that all the extra addresses are change addresses
189
179
  // get all the additional external outputs the server added and calculate their values
190
- const implicitExternalOutputs = lodash_1.default.filter(implicitOutputs, { external: true });
191
- const implicitExternalSpendAmount = utxolib.bitgo.toTNumber(implicitExternalOutputs.reduce((sum, o) => sum + BigInt(o.amount), BigInt(0)), coin.amountType);
180
+ const implicitExternalOutputs = implicitOutputs.filter((output) => output.external);
181
+ const implicitExternalSpendAmount = utxolib.bitgo.toTNumber(implicitExternalOutputs.reduce((sum, o) => sum + BigInt(o.value), BigInt(0)), coin.amountType);
182
+ function toOutputs(outputs) {
183
+ return outputs.map((output) => ({
184
+ address: (0, recipient_1.toExtendedAddressFormat)(output.script, coin.network),
185
+ amount: output.value.toString(),
186
+ external: output.external,
187
+ }));
188
+ }
192
189
  return {
193
190
  keychains,
194
191
  keySignatures: (0, keychains_1.getKeySignatures)(wallet) ?? {},
195
192
  outputs: allOutputDetails,
196
- missingOutputs,
197
- explicitExternalOutputs,
198
- implicitExternalOutputs,
193
+ missingOutputs: toOutputs(missingOutputs),
194
+ explicitExternalOutputs: toOutputs(explicitExternalOutputs),
195
+ implicitExternalOutputs: toOutputs(implicitExternalOutputs),
199
196
  changeOutputs,
200
197
  explicitExternalSpendAmount,
201
198
  implicitExternalSpendAmount,
@@ -203,4 +200,4 @@ async function parseTransaction(coin, params) {
203
200
  customChange,
204
201
  };
205
202
  }
206
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2VUcmFuc2FjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy90cmFuc2FjdGlvbi9maXhlZFNjcmlwdC9wYXJzZVRyYW5zYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBdUJBLDRDQVlDO0FBRUQsNENBeUxDO0FBOU5ELG9EQUE0QjtBQUU1QixvREFBdUI7QUFFdkIseURBQTJDO0FBVTNDLCtDQUF1SDtBQUV2SCwrQ0FBaUU7QUFFakU7Ozs7R0FJRztBQUNILFNBQWdCLGdCQUFnQixDQUFDLEtBQWUsRUFBRSxNQUFnQjtJQUNoRSxNQUFNLE9BQU8sR0FBRyxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBVSxFQUFVLEVBQUUsQ0FBQyxHQUFHLE9BQU8sSUFBSSxNQUFNLEVBQUUsQ0FBQztJQUNoRixNQUFNLGNBQWMsR0FBRyxnQkFBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFFakQsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1FBQ3hCLE1BQU0sS0FBSyxHQUFHLGNBQWMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUM5QyxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ1YsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ2QsQ0FBQztJQUNILENBQUMsQ0FBQyxDQUFDO0lBRUgsT0FBTyxnQkFBQyxDQUFDLE9BQU8sQ0FBQyxnQkFBQyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO0FBQzdDLENBQUM7QUFFTSxLQUFLLFVBQVUsZ0JBQWdCLENBQ3BDLElBQXNCLEVBQ3RCLE1BQXdDO0lBRXhDLE1BQU0sRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxZQUFZLEdBQUcsRUFBRSxFQUFFLEtBQUssRUFBRSxHQUFH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QUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDOUUsTUFBTSwyQkFBMkIsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FDekQsdUJBQXVCLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBVyxFQUFFLENBQVMsRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFXLEVBQ3ZHLElBQUksQ0FBQyxVQUFVLENBQ2hCLENBQUM7SUFFRixPQUFPO1FBQ0wsU0FBUztRQUNULGFBQWEsRUFBRSxJQUFBLDRCQUFnQixFQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUU7UUFDN0MsT0FBTyxFQUFFLGdCQUFnQjtRQUN6QixjQUFjO1FBQ2QsdUJBQXVCO1FBQ3ZCLHVCQUF1QjtRQUN2QixhQUFhO1FBQ2IsMkJBQTJCO1FBQzNCLDJCQUEyQjtRQUMzQix5Q0FBeUM7UUFDekMsWUFBWTtLQUNiLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgVHJpcGxlLCBWZXJpZmljYXRpb25PcHRpb25zLCBXYWxsZXQgfSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuaW1wb3J0ICogYXMgdXR4b2xpYiBmcm9tICdAYml0Z28vdXR4by1saWInO1xuXG5pbXBvcnQge1xuICBBYnN0cmFjdFV0eG9Db2luLFxuICBGaXhlZFNjcmlwdFdhbGxldE91dHB1dCxcbiAgT3V0cHV0LFxuICBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uLFxuICBQYXJzZWRUcmFuc2FjdGlvbixcbiAgUGFyc2VUcmFuc2FjdGlvbk9wdGlvbnMsXG59IGZyb20gJy4uLy4uL2Fic3RyYWN0VXR4b0NvaW4nO1xuaW1wb3J0IHsgZmV0Y2hLZXljaGFpbnMsIGdldEtleVNpZ25hdHVyZXMsIHRvS2V5Y2hhaW5UcmlwbGUsIFV0eG9LZXljaGFpbiwgVXR4b05hbWVkS2V5Y2hhaW5zIH0gZnJvbSAnLi4vLi4va2V5Y2hhaW5zJztcblxuaW1wb3J0IHsgQ3VzdG9tQ2hhbmdlT3B0aW9ucywgcGFyc2VPdXRwdXQgfSBmcm9tICcuL3BhcnNlT3V0cHV0JztcblxuLyoqXG4gKiBAcGFyYW0gZmlyc3RcbiAqIEBwYXJhbSBzZWNvbmRcbiAqIEByZXR1cm5zIHtBcnJheX0gQWxsIG91dHB1dHMgdGhhdCBhcmUgaW4gdGhlIGZpcnN0IGFycmF5IGJ1dCBub3QgaW4gdGhlIHNlY29uZFxuICovXG5leHBvcnQgZnVuY3Rpb24gb3V0cHV0RGlmZmVyZW5jZShmaXJzdDogT3V0cHV0W10sIHNlY29uZDogT3V0cHV0W10pOiBPdXRwdXRbXSB7XG4gIGNvbnN0IGtleUZ1bmMgPSAoeyBhZGRyZXNzLCBhbW91bnQgfTogT3V0cHV0KTogc3RyaW5nID0+IGAke2FkZHJlc3N9OiR7YW1vdW50fWA7XG4gIGNvbnN0IGdyb3VwZWRPdXRwdXRzID0gXy5ncm91cEJ5KGZpcnN0LCBrZXlGdW5jKTtcblxuICBzZWNvbmQuZm9yRWFjaCgob3V0cHV0KSA9PiB7XG4gICAgY29uc3QgZ3JvdXAgPSBncm91cGVkT3V0cHV0c1trZXlGdW5jKG91dHB1dCldO1xuICAgIGlmIChncm91cCkge1xuICAgICAgZ3JvdXAucG9wKCk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gXy5mbGF0dGVuKF8udmFsdWVzKGdyb3VwZWRPdXRwdXRzKSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwYXJzZVRyYW5zYWN0aW9uPFROdW1iZXIgZXh0ZW5kcyBiaWdpbnQgfCBudW1iZXI+KFxuICBjb2luOiBBYnN0cmFjdFV0eG9Db2luLFxuICBwYXJhbXM6IFBhcnNlVHJhbnNhY3Rpb25PcHRpb25zPFROdW1iZXI+XG4pOiBQcm9taXNlPFBhcnNlZFRyYW5zYWN0aW9uPFROdW1iZXI+PiB7XG4gIGNvbnN0IHsgdHhQYXJhbXMsIHR4UHJlYnVpbGQsIHdhbGxldCwgdmVyaWZpY2F0aW9uID0ge30sIHJlcUlkIH0gPSBwYXJhbXM7XG5cbiAgaWYgKCFfLmlzVW5kZWZpbmVkKHZlcmlmaWNhdGlvbi5kaXNhYmxlTmV0d29ya2luZykgJiYgIV8uaXNCb29sZWFuKHZlcmlmaWNhdGlvbi5kaXNhYmxlTmV0d29ya2luZykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3ZlcmlmaWNhdGlvbi5kaXNhYmxlTmV0d29ya2luZyBtdXN0IGJlIGEgYm9vbGVhbicpO1xuICB9XG4gIGNvbnN0IGRpc2FibGVOZXR3b3JraW5nID0gdmVyaWZpY2F0aW9uLmRpc2FibGVOZXR3b3JraW5nO1xuXG4gIC8vIG9idGFpbiB0aGUga2V5Y2hhaW5zIGFuZCBrZXkgc2lnbmF0dXJlc1xuICBsZXQga2V5Y2hhaW5zOiBVdHhvTmFtZWRLZXljaGFpbnMgfCBWZXJpZmljYXRpb25PcHRpb25zWydrZXljaGFpbnMnXSB8IHVuZGVmaW5lZCA9IHZlcmlmaWNhdGlvbi5rZXljaGFpbnM7XG4gIGlmICgha2V5Y2hhaW5zKSB7XG4gICAgaWYgKGRpc2FibGVOZXR3b3JraW5nKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2Nhbm5vdCBmZXRjaCBrZXljaGFpbnMgd2l0aG91dCBuZXR3b3JraW5nJyk7XG4gICAgfVxuICAgIGtleWNoYWlucyA9IGF3YWl0IGZldGNoS2V5Y2hhaW5zKGNvaW4sIHdhbGxldCwgcmVxSWQpO1xuICB9XG5cbiAgaWYgKCFVdHhvTmFtZWRLZXljaGFpbnMuaXMoa2V5Y2hhaW5zKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBrZXljaGFpbnMnKTtcbiAgfVxuXG4gIGNvbnN0IGtleWNoYWluQXJyYXk6IFRyaXBsZTxVdHhvS2V5Y2hhaW4+ID0gdG9LZXljaGFpblRyaXBsZShrZXljaGFpbnMpO1xuXG4gIGlmIChfLmlzVW5kZWZpbmVkKHR4UHJlYnVpbGQudHhIZXgpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdtaXNzaW5nIHJlcXVpcmVkIHR4UHJlYnVpbGQgcHJvcGVydHkgdHhIZXgnKTtcbiAgfVxuXG4gIC8vIG9idGFpbiBhbGwgb3V0cHV0c1xuICBjb25zdCBleHBsYW5hdGlvbjogVHJhbnNhY3Rpb25FeHBsYW5hdGlvbiA9IGF3YWl0IGNvaW4uZXhwbGFpblRyYW5zYWN0aW9uPFROdW1iZXI+KHtcbiAgICB0eEhleDogdHhQcmVidWlsZC50eEhleCxcbiAgICB0eEluZm86IHR4UHJlYnVpbGQudHhJbmZvLFxuICAgIHB1YnM6IGtleWNoYWluQXJyYXkubWFwKChrKSA9PiBrLnB1YikgYXMgVHJpcGxlPHN0cmluZz4sXG4gIH0pO1xuXG4gIGNvbnN0IGFsbE91dHB1dHMgPSBbLi4uZXhwbGFuYXRpb24ub3V0cHV0cywgLi4uZXhwbGFuYXRpb24uY2hhbmdlT3V0cHV0c107XG5cbiAgbGV0IGV4cGVjdGVkT3V0cHV0cztcbiAgaWYgKHR4UGFyYW1zLnJiZlR4SWRzKSB7XG4gICAgYXNzZXJ0KHR4UGFyYW1zLnJiZlR4SWRzLmxlbmd0aCA9PT0gMSk7XG5cbiAgICBjb25zdCB0eFRvQmVSZXBsYWNlZCA9IGF3YWl0IHdhbGxldC5nZXRUcmFuc2FjdGlvbih7IHR4SGFzaDogdHhQYXJhbXMucmJmVHhJZHNbMF0sIGluY2x1ZGVSYmY6IHRydWUgfSk7XG4gICAgZXhwZWN0ZWRPdXRwdXRzID0gdHhUb0JlUmVwbGFjZWQub3V0cHV0cy5mbGF0TWFwKFxuICAgICAgKG91dHB1dDogeyB2YWx1ZVN0cmluZzogc3RyaW5nOyBhZGRyZXNzPzogc3RyaW5nOyB3YWxsZXQ/OiBzdHJpbmcgfSkgPT4ge1xuICAgICAgICAvLyBGb3Igc2VsZi1zZW5kcywgdGhlIHdhbGxldElkIHdpbGwgYmUgdGhlIHNhbWUgYXMgdGhlIHdhbGxldCdzIGlkXG4gICAgICAgIGlmIChvdXRwdXQud2FsbGV0ID09PSB3YWxsZXQuaWQoKSkge1xuICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW2NvaW4udG9DYW5vbmljYWxUcmFuc2FjdGlvblJlY2lwaWVudChvdXRwdXQpXTtcbiAgICAgIH1cbiAgICApO1xuICB9IGVsc2Uge1xuICAgIC8vIHZlcmlmeSB0aGF0IGVhY2ggcmVjaXBpZW50IGZyb20gdHhQYXJhbXMgaGFzIHRoZWlyIG93biBvdXRwdXRcbiAgICBleHBlY3RlZE91dHB1dHMgPSAodHhQYXJhbXMucmVjaXBpZW50cyA/PyBbXSkuZmxhdE1hcCgob3V0cHV0KSA9PiB7XG4gICAgICBpZiAob3V0cHV0LmFkZHJlc3MgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAob3V0cHV0LmFtb3VudC50b1N0cmluZygpICE9PSAnMCcpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE9ubHkgemVybyBhbW91bnRzIGFsbG93ZWQgZm9yIG5vbi1lbmNvZGVhYmxlIHNjcmlwdFB1YmtleXM6ICR7b3V0cHV0fWApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbb3V0cHV0XTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBbeyAuLi5vdXRwdXQsIGFkZHJlc3M6IGNvaW4uY2Fub25pY2FsQWRkcmVzcyhvdXRwdXQuYWRkcmVzcykgfV07XG4gICAgfSk7XG4gICAgaWYgKHR4UGFyYW1zLmFsbG93RXh0ZXJuYWxDaGFuZ2VBZGRyZXNzICYmIHR4UGFyYW1zLmNoYW5nZUFkZHJlc3MpIHtcbiAgICAgIC8vIHdoZW4gYW4gZXh0ZXJuYWwgY2hhbmdlIGFkZHJlc3MgaXMgZXhwbGljaXRseSBzcGVjaWZpZWQsIGNvdW50IGFsbCBvdXRwdXRzIGdvaW5nIHRvd2FyZHMgdGhhdFxuICAgICAgLy8gYWRkcmVzcyBpbiB0aGUgZXhwZWN0ZWQgb3V0cHV0cyAocmVnYXJkbGVzcyBvZiB0aGUgb3V0cHV0IGFtb3VudClcbiAgICAgIGV4cGVjdGVkT3V0cHV0cy5wdXNoKFxuICAgICAgICAuLi5hbGxPdXRwdXRzLmZsYXRNYXAoKG91dHB1dCkgPT4ge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIG91dHB1dC5hZGRyZXNzID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgIG91dHB1dC5hZGRyZXNzICE9PSBjb2luLmNhbm9uaWNhbEFkZHJlc3ModHhQYXJhbXMuY2hhbmdlQWRkcmVzcyBhcyBzdHJpbmcpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBbeyAuLi5vdXRwdXQsIGFkZHJlc3M6IGNvaW4uY2Fub25pY2FsQWRkcmVzcyhvdXRwdXQuYWRkcmVzcykgfV07XG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IG1pc3NpbmdPdXRwdXRzID0gb3V0cHV0RGlmZmVyZW5jZShleHBlY3RlZE91dHB1dHMsIGFsbE91dHB1dHMpO1xuXG4gIC8vIGdldCB0aGUga2V5Y2hhaW5zIGZyb20gdGhlIGN1c3RvbSBjaGFuZ2Ugd2FsbGV0IGlmIG5lZWRlZFxuICBsZXQgY3VzdG9tQ2hhbmdlOiBDdXN0b21DaGFuZ2VPcHRpb25zIHwgdW5kZWZpbmVkO1xuICBjb25zdCB7IGN1c3RvbUNoYW5nZVdhbGxldElkID0gdW5kZWZpbmVkIH0gPSB3YWxsZXQuY29pblNwZWNpZmljKCkgfHwge307XG4gIGlmIChjdXN0b21DaGFuZ2VXYWxsZXRJZCkge1xuICAgIC8vIGZldGNoIGtleWNoYWlucyBmcm9tIGN1c3RvbSBjaGFuZ2Ugd2FsbGV0IGZvciBkZXJpdmluZyBhZGRyZXNzZXMuXG4gICAgLy8gVGhlc2Uga2V5Y2hhaW5zIHNob3VsZCBiZSBzaWduZWQgYW5kIHRoaXMgc2hvdWxkIGJlIHZlcmlmaWVkIGluIHZlcmlmeVRyYW5zYWN0aW9uXG4gICAgY29uc3QgY3VzdG9tQ2hhbmdlS2V5U2lnbmF0dXJlcyA9IHdhbGxldC5fd2FsbGV0LmN1c3RvbUNoYW5nZUtleVNpZ25hdHVyZXM7XG4gICAgY29uc3QgY3VzdG9tQ2hhbmdlV2FsbGV0OiBXYWxsZXQgPSBhd2FpdCBjb2luLndhbGxldHMoKS5nZXQoeyBpZDogY3VzdG9tQ2hhbmdlV2FsbGV0SWQgfSk7XG4gICAgY29uc3QgY3VzdG9tQ2hhbmdlS2V5cyA9IGF3YWl0IGZldGNoS2V5Y2hhaW5zKGNvaW4sIGN1c3RvbUNoYW5nZVdhbGxldCwgcmVxSWQpO1xuXG4gICAgaWYgKCFjdXN0b21DaGFuZ2VLZXlzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ZhaWxlZCB0byBmZXRjaCBrZXljaGFpbnMgZm9yIGN1c3RvbSBjaGFuZ2Ugd2FsbGV0Jyk7XG4gICAgfVxuXG4gICAgaWYgKGN1c3RvbUNoYW5nZUtleXMudXNlciAmJiBjdXN0b21DaGFuZ2VLZXlzLmJhY2t1cCAmJiBjdXN0b21DaGFuZ2VLZXlzLmJpdGdvICYmIGN1c3RvbUNoYW5nZVdhbGxldCkge1xuICAgICAgY29uc3QgY3VzdG9tQ2hhbmdlS2V5Y2hhaW5zOiBUcmlwbGU8VXR4b0tleWNoYWluPiA9IFtcbiAgICAgICAgY3VzdG9tQ2hhbmdlS2V5cy51c2VyLFxuICAgICAgICBjdXN0b21DaGFuZ2VLZXlzLmJhY2t1cCxcbiAgICAgICAgY3VzdG9tQ2hhbmdlS2V5cy5iaXRnbyxcbiAgICAgIF07XG5cbiAgICAgIGN1c3RvbUNoYW5nZSA9IHtcbiAgICAgICAga2V5czogY3VzdG9tQ2hhbmdlS2V5Y2hhaW5zLFxuICAgICAgICBzaWduYXR1cmVzOiBbY3VzdG9tQ2hhbmdlS2V5U2lnbmF0dXJlcy51c2VyLCBjdXN0b21DaGFuZ2VLZXlTaWduYXR1cmVzLmJhY2t1cCwgY3VzdG9tQ2hhbmdlS2V5U2lnbmF0dXJlcy5iaXRnb10sXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBMb29wIHRocm91Z2ggYWxsIHRoZSBvdXRwdXRzIGFuZCBjbGFzc2lmeSBlYWNoIG9mIHRoZW0gYXMgZWl0aGVyIGludGVybmFsIHNwZW5kc1xuICAgKiBvciBleHRlcm5hbCBzcGVuZHMgYnkgc2V0dGluZyB0aGUgXCJleHRlcm5hbFwiIHByb3BlcnR5IHRvIHRydWUgb3IgZmFsc2Ugb24gdGhlIG91dHB1dCBvYmplY3QuXG4gICAqL1xuICBjb25zdCBhbGxPdXRwdXREZXRhaWxzOiBPdXRwdXRbXSA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgIGFsbE91dHB1dHMubWFwKChjdXJyZW50T3V0cHV0KSA9PiB7XG4gICAgICByZXR1cm4gcGFyc2VPdXRwdXQoe1xuICAgICAgICBjdXJyZW50T3V0cHV0LFxuICAgICAgICBjb2luLFxuICAgICAgICB0eFByZWJ1aWxkLFxuICAgICAgICB2ZXJpZmljYXRpb24sXG4gICAgICAgIGtleWNoYWluQXJyYXk6IHRvS2V5Y2hhaW5UcmlwbGUoa2V5Y2hhaW5zKSxcbiAgICAgICAgd2FsbGV0LFxuICAgICAgICB0eFBhcmFtczoge1xuICAgICAgICAgIHJlY2lwaWVudHM6IGV4cGVjdGVkT3V0cHV0cyxcbiAgICAgICAgICBjaGFuZ2VBZGRyZXNzOiB0eFBhcmFtcy5jaGFuZ2VBZGRyZXNzLFxuICAgICAgICB9LFxuICAgICAgICBjdXN0b21DaGFuZ2UsXG4gICAgICAgIHJlcUlkLFxuICAgICAgfSk7XG4gICAgfSlcbiAgKTtcblxuICBjb25zdCBuZWVkc0N1c3RvbUNoYW5nZUtleVNpZ25hdHVyZVZlcmlmaWNhdGlvbiA9IGFsbE91dHB1dERldGFpbHMuc29tZShcbiAgICAob3V0cHV0KSA9PiAob3V0cHV0IGFzIEZpeGVkU2NyaXB0V2FsbGV0T3V0cHV0KT8ubmVlZHNDdXN0b21DaGFuZ2VLZXlTaWduYXR1cmVWZXJpZmljYXRpb25cbiAgKTtcblxuICBjb25zdCBjaGFuZ2VPdXRwdXRzID0gXy5maWx0ZXIoYWxsT3V0cHV0RGV0YWlscywgeyBleHRlcm5hbDogZmFsc2UgfSk7XG5cbiAgLy8gdGhlc2UgYXJlIGFsbCB0aGUgb3V0cHV0cyB0aGF0IHdlcmUgbm90IG9yaWdpbmFsbHkgZXhwbGljaXRseSBzcGVjaWZpZWQgaW4gcmVjaXBpZW50c1xuICAvLyBpZGVhbGx5IGNoYW5nZSBvdXRwdXRzIG9yIGEgcGF5Z28gb3V0cHV0IHRoYXQgbWlnaHQgaGF2ZSBiZWVuIGFkZGVkXG4gIGNvbnN0IGltcGxpY2l0T3V0cHV0cyA9IG91dHB1dERpZmZlcmVuY2UoYWxsT3V0cHV0RGV0YWlscywgZXhwZWN0ZWRPdXRwdXRzKTtcblxuICBjb25zdCBleHBsaWNpdE91dHB1dHMgPSBvdXRwdXREaWZmZXJlbmNlKGFsbE91dHB1dERldGFpbHMsIGltcGxpY2l0T3V0cHV0cyk7XG5cbiAgLy8gdGhlc2UgYXJlIGFsbCB0aGUgbm9uLXdhbGxldCBvdXRwdXRzIHRoYXQgaGFkIGJlZW4gb3JpZ2luYWxseSBleHBsaWNpdGx5IHNwZWNpZmllZCBpbiByZWNpcGllbnRzXG4gIGNvbnN0IGV4cGxpY2l0RXh0ZXJuYWxPdXRwdXRzID0gXy5maWx0ZXIoZXhwbGljaXRPdXRwdXRzLCB7IGV4dGVybmFsOiB0cnVlIH0pO1xuXG4gIC8vIHRoaXMgaXMgdGhlIHN1bSBvZiBhbGwgdGhlIG9yaWdpbmFsbHkgZXhwbGljaXRseSBzcGVjaWZpZWQgbm9uLXdhbGxldCBvdXRwdXQgdmFsdWVzXG4gIGNvbnN0IGV4cGxpY2l0RXh0ZXJuYWxTcGVuZEFtb3VudCA9IHV0eG9saWIuYml0Z28udG9UTnVtYmVyPFROdW1iZXI+KFxuICAgIGV4cGxpY2l0RXh0ZXJuYWxPdXRwdXRzLnJlZHVjZSgoc3VtOiBiaWdpbnQsIG86IE91dHB1dCkgPT4gc3VtICsgQmlnSW50KG8uYW1vdW50KSwgQmlnSW50KDApKSBhcyBiaWdpbnQsXG4gICAgY29pbi5hbW91bnRUeXBlXG4gICk7XG5cbiAgLyoqXG4gICAqIFRoZSBjYWxjdWxhdGlvbiBvZiB0aGUgaW1wbGljaXQgZXh0ZXJuYWwgc3BlbmQgYW1vdW50IHBlcnRhaW5zIHRvIHZlcmlmeWluZyB0aGUgcGF5LWFzLXlvdS1nby1mZWUgQml0R29cbiAgICogYXV0b21hdGljYWxseSBhcHBsaWVzIHRvIHRyYW5zYWN0aW9ucyBzZW5kaW5nIG1vbmV5IG91dCBvZiB0aGUgd2FsbGV0LiBUaGUgbG9naWMgaXMgZmFpcmx5IHN0cmFpZ2h0Zm9yd2FyZFxuICAgKiBpbiB0aGF0IHdlIGNvbXBhcmUgdGhlIGV4dGVybmFsIHNwZW5kIGFtb3VudCB0aGF0IHdhcyBzcGVjaWZpZWQgZXhwbGljaXRseSBieSB0aGUgdXNlciB0byB0aGUgcG9ydGlvblxuICAgKiB0aGF0IHdhcyBzcGVjaWZpZWQgaW1wbGljaXRseS4gVG8gcHJvdGVjdCBjdXN0b21lcnMgZnJvbSBwZW9wbGUgdGFtcGVyaW5nIHdpdGggdGhlIHRyYW5zYWN0aW9uIG91dHB1dHMsIHdlXG4gICAqIGRlZmluZSBhIHRocmVzaG9sZCBmb3IgdGhlIG1heGltdW0gcGVyY2VudGFnZSBvZiB0aGUgaW1wbGljaXQgZXh0ZXJuYWwgc3BlbmQgaW4gcmVsYXRpb24gdG8gdGhlIGV4cGxpY2l0XG4gICAqIGV4dGVybmFsIHNwZW5kLlxuICAgKi9cblxuICAvLyBtYWtlIHN1cmUgdGhhdCBhbGwgdGhlIGV4dHJhIGFkZHJlc3NlcyBhcmUgY2hhbmdlIGFkZHJlc3Nlc1xuICAvLyBnZXQgYWxsIHRoZSBhZGRpdGlvbmFsIGV4dGVybmFsIG91dHB1dHMgdGhlIHNlcnZlciBhZGRlZCBhbmQgY2FsY3VsYXRlIHRoZWlyIHZhbHVlc1xuICBjb25zdCBpbXBsaWNpdEV4dGVybmFsT3V0cHV0cyA9IF8uZmlsdGVyKGltcGxpY2l0T3V0cHV0cywgeyBleHRlcm5hbDogdHJ1ZSB9KTtcbiAgY29uc3QgaW1wbGljaXRFeHRlcm5hbFNwZW5kQW1vdW50ID0gdXR4b2xpYi5iaXRnby50b1ROdW1iZXI8VE51bWJlcj4oXG4gICAgaW1wbGljaXRFeHRlcm5hbE91dHB1dHMucmVkdWNlKChzdW06IGJpZ2ludCwgbzogT3V0cHV0KSA9PiBzdW0gKyBCaWdJbnQoby5hbW91bnQpLCBCaWdJbnQoMCkpIGFzIGJpZ2ludCxcbiAgICBjb2luLmFtb3VudFR5cGVcbiAgKTtcblxuICByZXR1cm4ge1xuICAgIGtleWNoYWlucyxcbiAgICBrZXlTaWduYXR1cmVzOiBnZXRLZXlTaWduYXR1cmVzKHdhbGxldCkgPz8ge30sXG4gICAgb3V0cHV0czogYWxsT3V0cHV0RGV0YWlscyxcbiAgICBtaXNzaW5nT3V0cHV0cyxcbiAgICBleHBsaWNpdEV4dGVybmFsT3V0cHV0cyxcbiAgICBpbXBsaWNpdEV4dGVybmFsT3V0cHV0cyxcbiAgICBjaGFuZ2VPdXRwdXRzLFxuICAgIGV4cGxpY2l0RXh0ZXJuYWxTcGVuZEFtb3VudCxcbiAgICBpbXBsaWNpdEV4dGVybmFsU3BlbmRBbW91bnQsXG4gICAgbmVlZHNDdXN0b21DaGFuZ2VLZXlTaWduYXR1cmVWZXJpZmljYXRpb24sXG4gICAgY3VzdG9tQ2hhbmdlLFxuICB9O1xufVxuIl19
203
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2VUcmFuc2FjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy90cmFuc2FjdGlvbi9maXhlZFNjcmlwdC9wYXJzZVRyYW5zYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBd0JBLDRDQTJNQztBQW5PRCxvREFBNEI7QUFFNUIsb0RBQXVCO0FBRXZCLHlEQUEyQztBQVUzQywrQ0FBdUg7QUFDdkgsMERBQXlFO0FBQ3pFLDRDQUEwRjtBQUUxRiwrQ0FBaUU7QUFNMUQsS0FBSyxVQUFVLGdCQUFnQixDQUNwQyxJQUFzQixFQUN0QixNQUF3QztJQUV4QyxNQUFNLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsWUFBWSxHQUFHLEVBQUUsRUFBRSxLQUFLLEVBQUUsR0FBRyxNQUFNLENBQUM7SUFFMUUsSUFBSSxDQUFDLGdCQUFDLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsZ0JBQUMsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQztRQUNuRyxNQUFNLElBQUksS0FBSyxDQUFDLGtEQUFrRCxDQUFDLENBQUM7SUFDdEUsQ0FBQztJQUNELE1BQU0saUJBQWlCLEdBQUcsWUFBWSxDQUFDLGlCQUFpQixDQUFDO0lBRXpELDBDQUEwQztJQUMxQyxJQUFJLFNBQVMsR0FBc0UsWUFBWSxDQUFDLFNBQVMsQ0FBQztJQUMxRyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDZixJQUFJLGlCQUFpQixFQUFFLENBQUM7WUFDdEIsTUFBTSxJQUFJLEtBQUssQ0FBQywyQ0FBMkMsQ0FBQyxDQUFDO1FBQy9ELENBQUM7UUFDRCxTQUFTLEdBQUcsTUFBTSxJQUFBLDBCQUFjLEVBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN4RCxD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QUssQ0FBQyxTQUFTLENBQ3pELHVCQUF1QixDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQVcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBVyxFQUM5RixJQUFJLENBQUMsVUFBVSxDQUNoQixDQUFDO0lBRUYsU0FBUyxTQUFTLENBQUMsT0FBdUQ7UUFDeEUsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQzlCLE9BQU8sRUFBRSxJQUFBLG1DQUF1QixFQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQztZQUM3RCxNQUFNLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUU7WUFDL0IsUUFBUSxFQUFFLE1BQU0sQ0FBQyxRQUFRO1NBQzFCLENBQUMsQ0FBQyxDQUFDO0lBQ04sQ0FBQztJQUVELE9BQU87UUFDTCxTQUFTO1FBQ1QsYUFBYSxFQUFFLElBQUEsNEJBQWdCLEVBQUMsTUFBTSxDQUFDLElBQUksRUFBRTtRQUM3QyxPQUFPLEVBQUUsZ0JBQWdCO1FBQ3pCLGNBQWMsRUFBRSxTQUFTLENBQUMsY0FBYyxDQUFDO1FBQ3pDLHVCQUF1QixFQUFFLFNBQVMsQ0FBQyx1QkFBdUIsQ0FBQztRQUMzRCx1QkFBdUIsRUFBRSxTQUFTLENBQUMsdUJBQXVCLENBQUM7UUFDM0QsYUFBYTtRQUNiLDJCQUEyQjtRQUMzQiwyQkFBMkI7UUFDM0IseUNBQXlDO1FBQ3pDLFlBQVk7S0FDYixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IFRyaXBsZSwgVmVyaWZpY2F0aW9uT3B0aW9ucywgV2FsbGV0IH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmltcG9ydCAqIGFzIHV0eG9saWIgZnJvbSAnQGJpdGdvL3V0eG8tbGliJztcblxuaW1wb3J0IHtcbiAgQWJzdHJhY3RVdHhvQ29pbixcbiAgRml4ZWRTY3JpcHRXYWxsZXRPdXRwdXQsXG4gIE91dHB1dCxcbiAgVHJhbnNhY3Rpb25FeHBsYW5hdGlvbixcbiAgUGFyc2VkVHJhbnNhY3Rpb24sXG4gIFBhcnNlVHJhbnNhY3Rpb25PcHRpb25zLFxufSBmcm9tICcuLi8uLi9hYnN0cmFjdFV0eG9Db2luJztcbmltcG9ydCB7IGZldGNoS2V5Y2hhaW5zLCBnZXRLZXlTaWduYXR1cmVzLCB0b0tleWNoYWluVHJpcGxlLCBVdHhvS2V5Y2hhaW4sIFV0eG9OYW1lZEtleWNoYWlucyB9IGZyb20gJy4uLy4uL2tleWNoYWlucyc7XG5pbXBvcnQgeyBDb21wYXJhYmxlT3V0cHV0LCBvdXRwdXREaWZmZXJlbmNlIH0gZnJvbSAnLi4vb3V0cHV0RGlmZmVyZW5jZSc7XG5pbXBvcnQgeyBmcm9tRXh0ZW5kZWRBZGRyZXNzRm9ybWF0VG9TY3JpcHQsIHRvRXh0ZW5kZWRBZGRyZXNzRm9ybWF0IH0gZnJvbSAnLi4vcmVjaXBpZW50JztcblxuaW1wb3J0IHsgQ3VzdG9tQ2hhbmdlT3B0aW9ucywgcGFyc2VPdXRwdXQgfSBmcm9tICcuL3BhcnNlT3V0cHV0JztcblxuZXhwb3J0IHR5cGUgQ29tcGFyYWJsZU91dHB1dFdpdGhFeHRlcm5hbDxUVmFsdWU+ID0gQ29tcGFyYWJsZU91dHB1dDxUVmFsdWU+ICYge1xuICBleHRlcm5hbDogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbn07XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwYXJzZVRyYW5zYWN0aW9uPFROdW1iZXIgZXh0ZW5kcyBiaWdpbnQgfCBudW1iZXI+KFxuICBjb2luOiBBYnN0cmFjdFV0eG9Db2luLFxuICBwYXJhbXM6IFBhcnNlVHJhbnNhY3Rpb25PcHRpb25zPFROdW1iZXI+XG4pOiBQcm9taXNlPFBhcnNlZFRyYW5zYWN0aW9uPFROdW1iZXI+PiB7XG4gIGNvbnN0IHsgdHhQYXJhbXMsIHR4UHJlYnVpbGQsIHdhbGxldCwgdmVyaWZpY2F0aW9uID0ge30sIHJlcUlkIH0gPSBwYXJhbXM7XG5cbiAgaWYgKCFfLmlzVW5kZWZpbmVkKHZlcmlmaWNhdGlvbi5kaXNhYmxlTmV0d29ya2luZykgJiYgIV8uaXNCb29sZWFuKHZlcmlmaWNhdGlvbi5kaXNhYmxlTmV0d29ya2luZykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3ZlcmlmaWNhdGlvbi5kaXNhYmxlTmV0d29ya2luZyBtdXN0IGJlIGEgYm9vbGVhbicpO1xuICB9XG4gIGNvbnN0IGRpc2FibGVOZXR3b3JraW5nID0gdmVyaWZpY2F0aW9uLmRpc2FibGVOZXR3b3JraW5nO1xuXG4gIC8vIG9idGFpbiB0aGUga2V5Y2hhaW5zIGFuZCBrZXkgc2lnbmF0dXJlc1xuICBsZXQga2V5Y2hhaW5zOiBVdHhvTmFtZWRLZXljaGFpbnMgfCBWZXJpZmljYXRpb25PcHRpb25zWydrZXljaGFpbnMnXSB8IHVuZGVmaW5lZCA9IHZlcmlmaWNhdGlvbi5rZXljaGFpbnM7XG4gIGlmICgha2V5Y2hhaW5zKSB7XG4gICAgaWYgKGRpc2FibGVOZXR3b3JraW5nKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2Nhbm5vdCBmZXRjaCBrZXljaGFpbnMgd2l0aG91dCBuZXR3b3JraW5nJyk7XG4gICAgfVxuICAgIGtleWNoYWlucyA9IGF3YWl0IGZldGNoS2V5Y2hhaW5zKGNvaW4sIHdhbGxldCwgcmVxSWQpO1xuICB9XG5cbiAgaWYgKCFVdHhvTmFtZWRLZXljaGFpbnMuaXMoa2V5Y2hhaW5zKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBrZXljaGFpbnMnKTtcbiAgfVxuXG4gIGNvbnN0IGtleWNoYWluQXJyYXk6IFRyaXBsZTxVdHhvS2V5Y2hhaW4+ID0gdG9LZXljaGFpblRyaXBsZShrZXljaGFpbnMpO1xuXG4gIGlmIChfLmlzVW5kZWZpbmVkKHR4UHJlYnVpbGQudHhIZXgpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdtaXNzaW5nIHJlcXVpcmVkIHR4UHJlYnVpbGQgcHJvcGVydHkgdHhIZXgnKTtcbiAgfVxuXG4gIC8vIG9idGFpbiBhbGwgb3V0cHV0c1xuICBjb25zdCBleHBsYW5hdGlvbjogVHJhbnNhY3Rpb25FeHBsYW5hdGlvbiA9IGF3YWl0IGNvaW4uZXhwbGFpblRyYW5zYWN0aW9uPFROdW1iZXI+KHtcbiAgICB0eEhleDogdHhQcmVidWlsZC50eEhleCxcbiAgICB0eEluZm86IHR4UHJlYnVpbGQudHhJbmZvLFxuICAgIHB1YnM6IGtleWNoYWluQXJyYXkubWFwKChrKSA9PiBrLnB1YikgYXMgVHJpcGxlPHN0cmluZz4sXG4gIH0pO1xuXG4gIGNvbnN0IGFsbE91dHB1dHMgPSBbLi4uZXhwbGFuYXRpb24ub3V0cHV0cywgLi4uZXhwbGFuYXRpb24uY2hhbmdlT3V0cHV0c107XG5cbiAgbGV0IGV4cGVjdGVkT3V0cHV0cztcbiAgaWYgKHR4UGFyYW1zLnJiZlR4SWRzKSB7XG4gICAgYXNzZXJ0KHR4UGFyYW1zLnJiZlR4SWRzLmxlbmd0aCA9PT0gMSk7XG5cbiAgICBjb25zdCB0eFRvQmVSZXBsYWNlZCA9IGF3YWl0IHdhbGxldC5nZXRUcmFuc2FjdGlvbih7IHR4SGFzaDogdHhQYXJhbXMucmJmVHhJZHNbMF0sIGluY2x1ZGVSYmY6IHRydWUgfSk7XG4gICAgZXhwZWN0ZWRPdXRwdXRzID0gdHhUb0JlUmVwbGFjZWQub3V0cHV0cy5mbGF0TWFwKFxuICAgICAgKG91dHB1dDogeyB2YWx1ZVN0cmluZzogc3RyaW5nOyBhZGRyZXNzPzogc3RyaW5nOyB3YWxsZXQ/OiBzdHJpbmcgfSkgPT4ge1xuICAgICAgICAvLyBGb3Igc2VsZi1zZW5kcywgdGhlIHdhbGxldElkIHdpbGwgYmUgdGhlIHNhbWUgYXMgdGhlIHdhbGxldCdzIGlkXG4gICAgICAgIGlmIChvdXRwdXQud2FsbGV0ID09PSB3YWxsZXQuaWQoKSkge1xuICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW2NvaW4udG9DYW5vbmljYWxUcmFuc2FjdGlvblJlY2lwaWVudChvdXRwdXQpXTtcbiAgICAgIH1cbiAgICApO1xuICB9IGVsc2Uge1xuICAgIC8vIHZlcmlmeSB0aGF0IGVhY2ggcmVjaXBpZW50IGZyb20gdHhQYXJhbXMgaGFzIHRoZWlyIG93biBvdXRwdXRcbiAgICBleHBlY3RlZE91dHB1dHMgPSAodHhQYXJhbXMucmVjaXBpZW50cyA/PyBbXSkuZmxhdE1hcCgob3V0cHV0KSA9PiB7XG4gICAgICBpZiAob3V0cHV0LmFkZHJlc3MgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAob3V0cHV0LmFtb3VudC50b1N0cmluZygpICE9PSAnMCcpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE9ubHkgemVybyBhbW91bnRzIGFsbG93ZWQgZm9yIG5vbi1lbmNvZGVhYmxlIHNjcmlwdFB1YmtleXM6ICR7b3V0cHV0fWApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbb3V0cHV0XTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBbeyAuLi5vdXRwdXQsIGFkZHJlc3M6IGNvaW4uY2Fub25pY2FsQWRkcmVzcyhvdXRwdXQuYWRkcmVzcykgfV07XG4gICAgfSk7XG4gICAgaWYgKHR4UGFyYW1zLmFsbG93RXh0ZXJuYWxDaGFuZ2VBZGRyZXNzICYmIHR4UGFyYW1zLmNoYW5nZUFkZHJlc3MpIHtcbiAgICAgIC8vIHdoZW4gYW4gZXh0ZXJuYWwgY2hhbmdlIGFkZHJlc3MgaXMgZXhwbGljaXRseSBzcGVjaWZpZWQsIGNvdW50IGFsbCBvdXRwdXRzIGdvaW5nIHRvd2FyZHMgdGhhdFxuICAgICAgLy8gYWRkcmVzcyBpbiB0aGUgZXhwZWN0ZWQgb3V0cHV0cyAocmVnYXJkbGVzcyBvZiB0aGUgb3V0cHV0IGFtb3VudClcbiAgICAgIGV4cGVjdGVkT3V0cHV0cy5wdXNoKFxuICAgICAgICAuLi5hbGxPdXRwdXRzLmZsYXRNYXAoKG91dHB1dCkgPT4ge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIG91dHB1dC5hZGRyZXNzID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgIG91dHB1dC5hZGRyZXNzICE9PSBjb2luLmNhbm9uaWNhbEFkZHJlc3ModHhQYXJhbXMuY2hhbmdlQWRkcmVzcyBhcyBzdHJpbmcpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBbeyAuLi5vdXRwdXQsIGFkZHJlc3M6IGNvaW4uY2Fub25pY2FsQWRkcmVzcyhvdXRwdXQuYWRkcmVzcykgfV07XG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8vIGdldCB0aGUga2V5Y2hhaW5zIGZyb20gdGhlIGN1c3RvbSBjaGFuZ2Ugd2FsbGV0IGlmIG5lZWRlZFxuICBsZXQgY3VzdG9tQ2hhbmdlOiBDdXN0b21DaGFuZ2VPcHRpb25zIHwgdW5kZWZpbmVkO1xuICBjb25zdCB7IGN1c3RvbUNoYW5nZVdhbGxldElkID0gdW5kZWZpbmVkIH0gPSB3YWxsZXQuY29pblNwZWNpZmljKCkgfHwge307XG4gIGlmIChjdXN0b21DaGFuZ2VXYWxsZXRJZCkge1xuICAgIC8vIGZldGNoIGtleWNoYWlucyBmcm9tIGN1c3RvbSBjaGFuZ2Ugd2FsbGV0IGZvciBkZXJpdmluZyBhZGRyZXNzZXMuXG4gICAgLy8gVGhlc2Uga2V5Y2hhaW5zIHNob3VsZCBiZSBzaWduZWQgYW5kIHRoaXMgc2hvdWxkIGJlIHZlcmlmaWVkIGluIHZlcmlmeVRyYW5zYWN0aW9uXG4gICAgY29uc3QgY3VzdG9tQ2hhbmdlS2V5U2lnbmF0dXJlcyA9IHdhbGxldC5fd2FsbGV0LmN1c3RvbUNoYW5nZUtleVNpZ25hdHVyZXM7XG4gICAgY29uc3QgY3VzdG9tQ2hhbmdlV2FsbGV0OiBXYWxsZXQgPSBhd2FpdCBjb2luLndhbGxldHMoKS5nZXQoeyBpZDogY3VzdG9tQ2hhbmdlV2FsbGV0SWQgfSk7XG4gICAgY29uc3QgY3VzdG9tQ2hhbmdlS2V5cyA9IGF3YWl0IGZldGNoS2V5Y2hhaW5zKGNvaW4sIGN1c3RvbUNoYW5nZVdhbGxldCwgcmVxSWQpO1xuXG4gICAgaWYgKCFjdXN0b21DaGFuZ2VLZXlzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ZhaWxlZCB0byBmZXRjaCBrZXljaGFpbnMgZm9yIGN1c3RvbSBjaGFuZ2Ugd2FsbGV0Jyk7XG4gICAgfVxuXG4gICAgaWYgKGN1c3RvbUNoYW5nZUtleXMudXNlciAmJiBjdXN0b21DaGFuZ2VLZXlzLmJhY2t1cCAmJiBjdXN0b21DaGFuZ2VLZXlzLmJpdGdvICYmIGN1c3RvbUNoYW5nZVdhbGxldCkge1xuICAgICAgY29uc3QgY3VzdG9tQ2hhbmdlS2V5Y2hhaW5zOiBUcmlwbGU8VXR4b0tleWNoYWluPiA9IFtcbiAgICAgICAgY3VzdG9tQ2hhbmdlS2V5cy51c2VyLFxuICAgICAgICBjdXN0b21DaGFuZ2VLZXlzLmJhY2t1cCxcbiAgICAgICAgY3VzdG9tQ2hhbmdlS2V5cy5iaXRnbyxcbiAgICAgIF07XG5cbiAgICAgIGN1c3RvbUNoYW5nZSA9IHtcbiAgICAgICAga2V5czogY3VzdG9tQ2hhbmdlS2V5Y2hhaW5zLFxuICAgICAgICBzaWduYXR1cmVzOiBbY3VzdG9tQ2hhbmdlS2V5U2lnbmF0dXJlcy51c2VyLCBjdXN0b21DaGFuZ2VLZXlTaWduYXR1cmVzLmJhY2t1cCwgY3VzdG9tQ2hhbmdlS2V5U2lnbmF0dXJlcy5iaXRnb10sXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBMb29wIHRocm91Z2ggYWxsIHRoZSBvdXRwdXRzIGFuZCBjbGFzc2lmeSBlYWNoIG9mIHRoZW0gYXMgZWl0aGVyIGludGVybmFsIHNwZW5kc1xuICAgKiBvciBleHRlcm5hbCBzcGVuZHMgYnkgc2V0dGluZyB0aGUgXCJleHRlcm5hbFwiIHByb3BlcnR5IHRvIHRydWUgb3IgZmFsc2Ugb24gdGhlIG91dHB1dCBvYmplY3QuXG4gICAqL1xuICBjb25zdCBhbGxPdXRwdXREZXRhaWxzOiBPdXRwdXRbXSA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgIGFsbE91dHB1dHMubWFwKChjdXJyZW50T3V0cHV0KSA9PiB7XG4gICAgICByZXR1cm4gcGFyc2VPdXRwdXQoe1xuICAgICAgICBjdXJyZW50T3V0cHV0LFxuICAgICAgICBjb2luLFxuICAgICAgICB0eFByZWJ1aWxkLFxuICAgICAgICB2ZXJpZmljYXRpb24sXG4gICAgICAgIGtleWNoYWluQXJyYXk6IHRvS2V5Y2hhaW5UcmlwbGUoa2V5Y2hhaW5zKSxcbiAgICAgICAgd2FsbGV0LFxuICAgICAgICB0eFBhcmFtczoge1xuICAgICAgICAgIHJlY2lwaWVudHM6IGV4cGVjdGVkT3V0cHV0cyxcbiAgICAgICAgICBjaGFuZ2VBZGRyZXNzOiB0eFBhcmFtcy5jaGFuZ2VBZGRyZXNzLFxuICAgICAgICB9LFxuICAgICAgICBjdXN0b21DaGFuZ2UsXG4gICAgICAgIHJlcUlkLFxuICAgICAgfSk7XG4gICAgfSlcbiAgKTtcblxuICBjb25zdCBuZWVkc0N1c3RvbUNoYW5nZUtleVNpZ25hdHVyZVZlcmlmaWNhdGlvbiA9IGFsbE91dHB1dERldGFpbHMuc29tZShcbiAgICAob3V0cHV0KSA9PiAob3V0cHV0IGFzIEZpeGVkU2NyaXB0V2FsbGV0T3V0cHV0KT8ubmVlZHNDdXN0b21DaGFuZ2VLZXlTaWduYXR1cmVWZXJpZmljYXRpb25cbiAgKTtcblxuICBjb25zdCBjaGFuZ2VPdXRwdXRzID0gXy5maWx0ZXIoYWxsT3V0cHV0RGV0YWlscywgeyBleHRlcm5hbDogZmFsc2UgfSk7XG5cbiAgZnVuY3Rpb24gdG9Db21wYXJhYmxlT3V0cHV0c1dpdGhFeHRlcm5hbChvdXRwdXRzOiBPdXRwdXRbXSk6IENvbXBhcmFibGVPdXRwdXRXaXRoRXh0ZXJuYWw8YmlnaW50IHwgJ21heCc+W10ge1xuICAgIHJldHVybiBvdXRwdXRzLm1hcCgob3V0cHV0KSA9PiAoe1xuICAgICAgc2NyaXB0OiBmcm9tRXh0ZW5kZWRBZGRyZXNzRm9ybWF0VG9TY3JpcHQob3V0cHV0LmFkZHJlc3MsIGNvaW4ubmV0d29yayksXG4gICAgICB2YWx1ZTogb3V0cHV0LmFtb3VudCA9PT0gJ21heCcgPyAnbWF4JyA6IChCaWdJbnQob3V0cHV0LmFtb3VudCkgYXMgYmlnaW50IHwgJ21heCcpLFxuICAgICAgZXh0ZXJuYWw6IG91dHB1dC5leHRlcm5hbCxcbiAgICB9KSk7XG4gIH1cblxuICBjb25zdCBtaXNzaW5nT3V0cHV0cyA9IG91dHB1dERpZmZlcmVuY2UoXG4gICAgdG9Db21wYXJhYmxlT3V0cHV0c1dpdGhFeHRlcm5hbChleHBlY3RlZE91dHB1dHMpLFxuICAgIHRvQ29tcGFyYWJsZU91dHB1dHNXaXRoRXh0ZXJuYWwoYWxsT3V0cHV0cylcbiAgKTtcblxuICBjb25zdCBpbXBsaWNpdE91dHB1dHMgPSBvdXRwdXREaWZmZXJlbmNlKFxuICAgIHRvQ29tcGFyYWJsZU91dHB1dHNXaXRoRXh0ZXJuYWwoYWxsT3V0cHV0RGV0YWlscyksXG4gICAgdG9Db21wYXJhYmxlT3V0cHV0c1dpdGhFeHRlcm5hbChleHBlY3RlZE91dHB1dHMpXG4gICk7XG4gIGNvbnN0IGV4cGxpY2l0T3V0cHV0cyA9IG91dHB1dERpZmZlcmVuY2UodG9Db21wYXJhYmxlT3V0cHV0c1dpdGhFeHRlcm5hbChhbGxPdXRwdXREZXRhaWxzKSwgaW1wbGljaXRPdXRwdXRzKTtcblxuICAvLyB0aGVzZSBhcmUgYWxsIHRoZSBub24td2FsbGV0IG91dHB1dHMgdGhhdCBoYWQgYmVlbiBvcmlnaW5hbGx5IGV4cGxpY2l0bHkgc3BlY2lmaWVkIGluIHJlY2lwaWVudHNcbiAgY29uc3QgZXhwbGljaXRFeHRlcm5hbE91dHB1dHMgPSBleHBsaWNpdE91dHB1dHMuZmlsdGVyKChvdXRwdXQpID0+IG91dHB1dC5leHRlcm5hbCk7XG4gIC8vIHRoaXMgaXMgdGhlIHN1bSBvZiBhbGwgdGhlIG9yaWdpbmFsbHkgZXhwbGljaXRseSBzcGVjaWZpZWQgbm9uLXdhbGxldCBvdXRwdXQgdmFsdWVzXG4gIGNvbnN0IGV4cGxpY2l0RXh0ZXJuYWxTcGVuZEFtb3VudCA9IHV0eG9saWIuYml0Z28udG9UTnVtYmVyPFROdW1iZXI+KFxuICAgIGV4cGxpY2l0RXh0ZXJuYWxPdXRwdXRzLnJlZHVjZSgoc3VtOiBiaWdpbnQsIG8pID0+IHN1bSArIEJpZ0ludChvLnZhbHVlKSwgQmlnSW50KDApKSBhcyBiaWdpbnQsXG4gICAgY29pbi5hbW91bnRUeXBlXG4gICk7XG5cbiAgLyoqXG4gICAqIFRoZSBjYWxjdWxhdGlvbiBvZiB0aGUgaW1wbGljaXQgZXh0ZXJuYWwgc3BlbmQgYW1vdW50IHBlcnRhaW5zIHRvIHZlcmlmeWluZyB0aGUgcGF5LWFzLXlvdS1nby1mZWUgQml0R29cbiAgICogYXV0b21hdGljYWxseSBhcHBsaWVzIHRvIHRyYW5zYWN0aW9ucyBzZW5kaW5nIG1vbmV5IG91dCBvZiB0aGUgd2FsbGV0LiBUaGUgbG9naWMgaXMgZmFpcmx5IHN0cmFpZ2h0Zm9yd2FyZFxuICAgKiBpbiB0aGF0IHdlIGNvbXBhcmUgdGhlIGV4dGVybmFsIHNwZW5kIGFtb3VudCB0aGF0IHdhcyBzcGVjaWZpZWQgZXhwbGljaXRseSBieSB0aGUgdXNlciB0byB0aGUgcG9ydGlvblxuICAgKiB0aGF0IHdhcyBzcGVjaWZpZWQgaW1wbGljaXRseS4gVG8gcHJvdGVjdCBjdXN0b21lcnMgZnJvbSBwZW9wbGUgdGFtcGVyaW5nIHdpdGggdGhlIHRyYW5zYWN0aW9uIG91dHB1dHMsIHdlXG4gICAqIGRlZmluZSBhIHRocmVzaG9sZCBmb3IgdGhlIG1heGltdW0gcGVyY2VudGFnZSBvZiB0aGUgaW1wbGljaXQgZXh0ZXJuYWwgc3BlbmQgaW4gcmVsYXRpb24gdG8gdGhlIGV4cGxpY2l0XG4gICAqIGV4dGVybmFsIHNwZW5kLlxuICAgKi9cblxuICAvLyBtYWtlIHN1cmUgdGhhdCBhbGwgdGhlIGV4dHJhIGFkZHJlc3NlcyBhcmUgY2hhbmdlIGFkZHJlc3Nlc1xuICAvLyBnZXQgYWxsIHRoZSBhZGRpdGlvbmFsIGV4dGVybmFsIG91dHB1dHMgdGhlIHNlcnZlciBhZGRlZCBhbmQgY2FsY3VsYXRlIHRoZWlyIHZhbHVlc1xuICBjb25zdCBpbXBsaWNpdEV4dGVybmFsT3V0cHV0cyA9IGltcGxpY2l0T3V0cHV0cy5maWx0ZXIoKG91dHB1dCkgPT4gb3V0cHV0LmV4dGVybmFsKTtcbiAgY29uc3QgaW1wbGljaXRFeHRlcm5hbFNwZW5kQW1vdW50ID0gdXR4b2xpYi5iaXRnby50b1ROdW1iZXI8VE51bWJlcj4oXG4gICAgaW1wbGljaXRFeHRlcm5hbE91dHB1dHMucmVkdWNlKChzdW06IGJpZ2ludCwgbykgPT4gc3VtICsgQmlnSW50KG8udmFsdWUpLCBCaWdJbnQoMCkpIGFzIGJpZ2ludCxcbiAgICBjb2luLmFtb3VudFR5cGVcbiAgKTtcblxuICBmdW5jdGlvbiB0b091dHB1dHMob3V0cHV0czogQ29tcGFyYWJsZU91dHB1dFdpdGhFeHRlcm5hbDxiaWdpbnQgfCAnbWF4Jz5bXSk6IE91dHB1dFtdIHtcbiAgICByZXR1cm4gb3V0cHV0cy5tYXAoKG91dHB1dCkgPT4gKHtcbiAgICAgIGFkZHJlc3M6IHRvRXh0ZW5kZWRBZGRyZXNzRm9ybWF0KG91dHB1dC5zY3JpcHQsIGNvaW4ubmV0d29yayksXG4gICAgICBhbW91bnQ6IG91dHB1dC52YWx1ZS50b1N0cmluZygpLFxuICAgICAgZXh0ZXJuYWw6IG91dHB1dC5leHRlcm5hbCxcbiAgICB9KSk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGtleWNoYWlucyxcbiAgICBrZXlTaWduYXR1cmVzOiBnZXRLZXlTaWduYXR1cmVzKHdhbGxldCkgPz8ge30sXG4gICAgb3V0cHV0czogYWxsT3V0cHV0RGV0YWlscyxcbiAgICBtaXNzaW5nT3V0cHV0czogdG9PdXRwdXRzKG1pc3NpbmdPdXRwdXRzKSxcbiAgICBleHBsaWNpdEV4dGVybmFsT3V0cHV0czogdG9PdXRwdXRzKGV4cGxpY2l0RXh0ZXJuYWxPdXRwdXRzKSxcbiAgICBpbXBsaWNpdEV4dGVybmFsT3V0cHV0czogdG9PdXRwdXRzKGltcGxpY2l0RXh0ZXJuYWxPdXRwdXRzKSxcbiAgICBjaGFuZ2VPdXRwdXRzLFxuICAgIGV4cGxpY2l0RXh0ZXJuYWxTcGVuZEFtb3VudCxcbiAgICBpbXBsaWNpdEV4dGVybmFsU3BlbmRBbW91bnQsXG4gICAgbmVlZHNDdXN0b21DaGFuZ2VLZXlTaWduYXR1cmVWZXJpZmljYXRpb24sXG4gICAgY3VzdG9tQ2hhbmdlLFxuICB9O1xufVxuIl19
@@ -0,0 +1,40 @@
1
+ export type ComparableOutput<TValue> = {
2
+ script: Buffer;
3
+ value: TValue;
4
+ };
5
+ /** Actual outputs have fixed values. */
6
+ export type ActualOutput = ComparableOutput<bigint>;
7
+ /** Expected outputs can have a fixed value or 'max'. */
8
+ export type ExpectedOutput = ComparableOutput<bigint | 'max'>;
9
+ /**
10
+ * @param a
11
+ * @param b
12
+ * @returns whether the two outputs are equal. Outputs with value `max` are considered equal to any other output with the same script.
13
+ */
14
+ export declare function matchingOutput<TValue>(a: ComparableOutput<TValue>, b: ComparableOutput<TValue>): boolean;
15
+ /**
16
+ * @returns all outputs in the first array that are not in the second array.
17
+ * Outputs can occur more than once in each array.
18
+ * An output with value `max` is considered equal to any other output with the same script.
19
+ */
20
+ export declare function outputDifference<A extends ActualOutput | ExpectedOutput, B extends ActualOutput | ExpectedOutput>(first: A[], second: B[]): A[];
21
+ export type OutputDifferenceWithExpected<TActual extends ActualOutput, TExpected extends ExpectedOutput> = {
22
+ /** These are the external outputs that were expected and found in the transaction. */
23
+ explicitExternalOutputs: TActual[];
24
+ /**
25
+ * These are the surprise external outputs that were not explicitly specified in the transaction.
26
+ * They can be PayGo fees.
27
+ */
28
+ implicitExternalOutputs: TActual[];
29
+ /**
30
+ * These are the outputs that were expected to be in the transaction but were not found.
31
+ */
32
+ missingOutputs: TExpected[];
33
+ };
34
+ /**
35
+ * @param actualExternalOutputs - external outputs in the transaction
36
+ * @param expectedExternalOutputs - external outputs that were expected to be in the transaction
37
+ * @returns the difference between the actual and expected external outputs
38
+ */
39
+ export declare function outputDifferencesWithExpected<TActual extends ActualOutput, TExpected extends ExpectedOutput>(actualExternalOutputs: TActual[], expectedExternalOutputs: TExpected[]): OutputDifferenceWithExpected<TActual, TExpected>;
40
+ //# sourceMappingURL=outputDifference.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"outputDifference.d.ts","sourceRoot":"","sources":["../../../src/transaction/outputDifference.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,gBAAgB,CAAC,MAAM,IAAI;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,wCAAwC;AACxC,MAAM,MAAM,YAAY,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;AAEpD,wDAAwD;AACxD,MAAM,MAAM,cAAc,GAAG,gBAAgB,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC;AAE9D;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,gBAAgB,CAAC,MAAM,CAAC,GAAG,OAAO,CAKxG;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,YAAY,GAAG,cAAc,EAAE,CAAC,SAAS,YAAY,GAAG,cAAc,EAC/G,KAAK,EAAE,CAAC,EAAE,EACV,MAAM,EAAE,CAAC,EAAE,GACV,CAAC,EAAE,CASL;AAED,MAAM,MAAM,4BAA4B,CAAC,OAAO,SAAS,YAAY,EAAE,SAAS,SAAS,cAAc,IAAI;IACzG,sFAAsF;IACtF,uBAAuB,EAAE,OAAO,EAAE,CAAC;IACnC;;;OAGG;IACH,uBAAuB,EAAE,OAAO,EAAE,CAAC;IACnC;;OAEG;IACH,cAAc,EAAE,SAAS,EAAE,CAAC;CAC7B,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,6BAA6B,CAAC,OAAO,SAAS,YAAY,EAAE,SAAS,SAAS,cAAc,EAC1G,qBAAqB,EAAE,OAAO,EAAE,EAChC,uBAAuB,EAAE,SAAS,EAAE,GACnC,4BAA4B,CAAC,OAAO,EAAE,SAAS,CAAC,CASlD"}
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.matchingOutput = matchingOutput;
4
+ exports.outputDifference = outputDifference;
5
+ exports.outputDifferencesWithExpected = outputDifferencesWithExpected;
6
+ /**
7
+ * @param a
8
+ * @param b
9
+ * @returns whether the two outputs are equal. Outputs with value `max` are considered equal to any other output with the same script.
10
+ */
11
+ function matchingOutput(a, b) {
12
+ if (a.value === 'max' || b.value === 'max') {
13
+ return a.script.equals(b.script);
14
+ }
15
+ return a.script.equals(b.script) && a.value === b.value;
16
+ }
17
+ /**
18
+ * @returns all outputs in the first array that are not in the second array.
19
+ * Outputs can occur more than once in each array.
20
+ * An output with value `max` is considered equal to any other output with the same script.
21
+ */
22
+ function outputDifference(first, second) {
23
+ first = first.slice();
24
+ for (const output of second) {
25
+ const index = first.findIndex((o) => matchingOutput(o, output));
26
+ if (index !== -1) {
27
+ first.splice(index, 1);
28
+ }
29
+ }
30
+ return first;
31
+ }
32
+ /**
33
+ * @param actualExternalOutputs - external outputs in the transaction
34
+ * @param expectedExternalOutputs - external outputs that were expected to be in the transaction
35
+ * @returns the difference between the actual and expected external outputs
36
+ */
37
+ function outputDifferencesWithExpected(actualExternalOutputs, expectedExternalOutputs) {
38
+ const implicitExternalOutputs = outputDifference(actualExternalOutputs, expectedExternalOutputs);
39
+ const explicitExternalOutputs = outputDifference(actualExternalOutputs, implicitExternalOutputs);
40
+ const missingOutputs = outputDifference(expectedExternalOutputs, actualExternalOutputs);
41
+ return {
42
+ explicitExternalOutputs,
43
+ implicitExternalOutputs,
44
+ missingOutputs,
45
+ };
46
+ }
47
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3V0cHV0RGlmZmVyZW5jZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90cmFuc2FjdGlvbi9vdXRwdXREaWZmZXJlbmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBZ0JBLHdDQUtDO0FBT0QsNENBWUM7QUFxQkQsc0VBWUM7QUE5REQ7Ozs7R0FJRztBQUNILFNBQWdCLGNBQWMsQ0FBUyxDQUEyQixFQUFFLENBQTJCO0lBQzdGLElBQUksQ0FBQyxDQUFDLEtBQUssS0FBSyxLQUFLLElBQUksQ0FBQyxDQUFDLEtBQUssS0FBSyxLQUFLLEVBQUUsQ0FBQztRQUMzQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBQ0QsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDO0FBQzFELENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBZ0IsZ0JBQWdCLENBQzlCLEtBQVUsRUFDVixNQUFXO0lBRVgsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUN0QixLQUFLLE1BQU0sTUFBTSxJQUFJLE1BQU0sRUFBRSxDQUFDO1FBQzVCLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLGNBQWMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUNoRSxJQUFJLEtBQUssS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ2pCLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3pCLENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FBZ0JEOzs7O0dBSUc7QUFDSCxTQUFnQiw2QkFBNkIsQ0FDM0MscUJBQWdDLEVBQ2hDLHVCQUFvQztJQUVwQyxNQUFNLHVCQUF1QixHQUFHLGdCQUFnQixDQUFDLHFCQUFxQixFQUFFLHVCQUF1QixDQUFDLENBQUM7SUFDakcsTUFBTSx1QkFBdUIsR0FBRyxnQkFBZ0IsQ0FBQyxxQkFBcUIsRUFBRSx1QkFBdUIsQ0FBQyxDQUFDO0lBQ2pHLE1BQU0sY0FBYyxHQUFHLGdCQUFnQixDQUFDLHVCQUF1QixFQUFFLHFCQUFxQixDQUFDLENBQUM7SUFDeEYsT0FBTztRQUNMLHVCQUF1QjtRQUN2Qix1QkFBdUI7UUFDdkIsY0FBYztLQUNmLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHR5cGUgQ29tcGFyYWJsZU91dHB1dDxUVmFsdWU+ID0ge1xuICBzY3JpcHQ6IEJ1ZmZlcjtcbiAgdmFsdWU6IFRWYWx1ZTtcbn07XG5cbi8qKiBBY3R1YWwgb3V0cHV0cyBoYXZlIGZpeGVkIHZhbHVlcy4gKi9cbmV4cG9ydCB0eXBlIEFjdHVhbE91dHB1dCA9IENvbXBhcmFibGVPdXRwdXQ8YmlnaW50PjtcblxuLyoqIEV4cGVjdGVkIG91dHB1dHMgY2FuIGhhdmUgYSBmaXhlZCB2YWx1ZSBvciAnbWF4Jy4gKi9cbmV4cG9ydCB0eXBlIEV4cGVjdGVkT3V0cHV0ID0gQ29tcGFyYWJsZU91dHB1dDxiaWdpbnQgfCAnbWF4Jz47XG5cbi8qKlxuICogQHBhcmFtIGFcbiAqIEBwYXJhbSBiXG4gKiBAcmV0dXJucyB3aGV0aGVyIHRoZSB0d28gb3V0cHV0cyBhcmUgZXF1YWwuIE91dHB1dHMgd2l0aCB2YWx1ZSBgbWF4YCBhcmUgY29uc2lkZXJlZCBlcXVhbCB0byBhbnkgb3RoZXIgb3V0cHV0IHdpdGggdGhlIHNhbWUgc2NyaXB0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWF0Y2hpbmdPdXRwdXQ8VFZhbHVlPihhOiBDb21wYXJhYmxlT3V0cHV0PFRWYWx1ZT4sIGI6IENvbXBhcmFibGVPdXRwdXQ8VFZhbHVlPik6IGJvb2xlYW4ge1xuICBpZiAoYS52YWx1ZSA9PT0gJ21heCcgfHwgYi52YWx1ZSA9PT0gJ21heCcpIHtcbiAgICByZXR1cm4gYS5zY3JpcHQuZXF1YWxzKGIuc2NyaXB0KTtcbiAgfVxuICByZXR1cm4gYS5zY3JpcHQuZXF1YWxzKGIuc2NyaXB0KSAmJiBhLnZhbHVlID09PSBiLnZhbHVlO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIGFsbCBvdXRwdXRzIGluIHRoZSBmaXJzdCBhcnJheSB0aGF0IGFyZSBub3QgaW4gdGhlIHNlY29uZCBhcnJheS5cbiAqIE91dHB1dHMgY2FuIG9jY3VyIG1vcmUgdGhhbiBvbmNlIGluIGVhY2ggYXJyYXkuXG4gKiBBbiBvdXRwdXQgd2l0aCB2YWx1ZSBgbWF4YCBpcyBjb25zaWRlcmVkIGVxdWFsIHRvIGFueSBvdGhlciBvdXRwdXQgd2l0aCB0aGUgc2FtZSBzY3JpcHQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvdXRwdXREaWZmZXJlbmNlPEEgZXh0ZW5kcyBBY3R1YWxPdXRwdXQgfCBFeHBlY3RlZE91dHB1dCwgQiBleHRlbmRzIEFjdHVhbE91dHB1dCB8IEV4cGVjdGVkT3V0cHV0PihcbiAgZmlyc3Q6IEFbXSxcbiAgc2Vjb25kOiBCW11cbik6IEFbXSB7XG4gIGZpcnN0ID0gZmlyc3Quc2xpY2UoKTtcbiAgZm9yIChjb25zdCBvdXRwdXQgb2Ygc2Vjb25kKSB7XG4gICAgY29uc3QgaW5kZXggPSBmaXJzdC5maW5kSW5kZXgoKG8pID0+IG1hdGNoaW5nT3V0cHV0KG8sIG91dHB1dCkpO1xuICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgIGZpcnN0LnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBmaXJzdDtcbn1cblxuZXhwb3J0IHR5cGUgT3V0cHV0RGlmZmVyZW5jZVdpdGhFeHBlY3RlZDxUQWN0dWFsIGV4dGVuZHMgQWN0dWFsT3V0cHV0LCBURXhwZWN0ZWQgZXh0ZW5kcyBFeHBlY3RlZE91dHB1dD4gPSB7XG4gIC8qKiBUaGVzZSBhcmUgdGhlIGV4dGVybmFsIG91dHB1dHMgdGhhdCB3ZXJlIGV4cGVjdGVkIGFuZCBmb3VuZCBpbiB0aGUgdHJhbnNhY3Rpb24uICovXG4gIGV4cGxpY2l0RXh0ZXJuYWxPdXRwdXRzOiBUQWN0dWFsW107XG4gIC8qKlxuICAgKiBUaGVzZSBhcmUgdGhlIHN1cnByaXNlIGV4dGVybmFsIG91dHB1dHMgdGhhdCB3ZXJlIG5vdCBleHBsaWNpdGx5IHNwZWNpZmllZCBpbiB0aGUgdHJhbnNhY3Rpb24uXG4gICAqIFRoZXkgY2FuIGJlIFBheUdvIGZlZXMuXG4gICAqL1xuICBpbXBsaWNpdEV4dGVybmFsT3V0cHV0czogVEFjdHVhbFtdO1xuICAvKipcbiAgICogVGhlc2UgYXJlIHRoZSBvdXRwdXRzIHRoYXQgd2VyZSBleHBlY3RlZCB0byBiZSBpbiB0aGUgdHJhbnNhY3Rpb24gYnV0IHdlcmUgbm90IGZvdW5kLlxuICAgKi9cbiAgbWlzc2luZ091dHB1dHM6IFRFeHBlY3RlZFtdO1xufTtcblxuLyoqXG4gKiBAcGFyYW0gYWN0dWFsRXh0ZXJuYWxPdXRwdXRzIC0gZXh0ZXJuYWwgb3V0cHV0cyBpbiB0aGUgdHJhbnNhY3Rpb25cbiAqIEBwYXJhbSBleHBlY3RlZEV4dGVybmFsT3V0cHV0cyAtIGV4dGVybmFsIG91dHB1dHMgdGhhdCB3ZXJlIGV4cGVjdGVkIHRvIGJlIGluIHRoZSB0cmFuc2FjdGlvblxuICogQHJldHVybnMgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgYWN0dWFsIGFuZCBleHBlY3RlZCBleHRlcm5hbCBvdXRwdXRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvdXRwdXREaWZmZXJlbmNlc1dpdGhFeHBlY3RlZDxUQWN0dWFsIGV4dGVuZHMgQWN0dWFsT3V0cHV0LCBURXhwZWN0ZWQgZXh0ZW5kcyBFeHBlY3RlZE91dHB1dD4oXG4gIGFjdHVhbEV4dGVybmFsT3V0cHV0czogVEFjdHVhbFtdLFxuICBleHBlY3RlZEV4dGVybmFsT3V0cHV0czogVEV4cGVjdGVkW11cbik6IE91dHB1dERpZmZlcmVuY2VXaXRoRXhwZWN0ZWQ8VEFjdHVhbCwgVEV4cGVjdGVkPiB7XG4gIGNvbnN0IGltcGxpY2l0RXh0ZXJuYWxPdXRwdXRzID0gb3V0cHV0RGlmZmVyZW5jZShhY3R1YWxFeHRlcm5hbE91dHB1dHMsIGV4cGVjdGVkRXh0ZXJuYWxPdXRwdXRzKTtcbiAgY29uc3QgZXhwbGljaXRFeHRlcm5hbE91dHB1dHMgPSBvdXRwdXREaWZmZXJlbmNlKGFjdHVhbEV4dGVybmFsT3V0cHV0cywgaW1wbGljaXRFeHRlcm5hbE91dHB1dHMpO1xuICBjb25zdCBtaXNzaW5nT3V0cHV0cyA9IG91dHB1dERpZmZlcmVuY2UoZXhwZWN0ZWRFeHRlcm5hbE91dHB1dHMsIGFjdHVhbEV4dGVybmFsT3V0cHV0cyk7XG4gIHJldHVybiB7XG4gICAgZXhwbGljaXRFeHRlcm5hbE91dHB1dHMsXG4gICAgaW1wbGljaXRFeHRlcm5hbE91dHB1dHMsXG4gICAgbWlzc2luZ091dHB1dHMsXG4gIH07XG59XG4iXX0=