@bitgo/sdk-core 28.17.0 → 28.17.2

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 (44) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/dist/src/account-lib/baseCoin/ed25519KeyPair.js +4 -7
  3. package/dist/src/account-lib/baseCoin/secp256k1ExtendedKeyPair.js +3 -5
  4. package/dist/src/account-lib/mpc/tss/ecdsa/ecdsa.js +4 -4
  5. package/dist/src/account-lib/mpc/tss/eddsa/eddsa.js +3 -3
  6. package/dist/src/account-lib/mpc/util.js +2 -3
  7. package/dist/src/bitgo/address-book/address-book.js +5 -8
  8. package/dist/src/bitgo/baseCoin/baseCoin.d.ts.map +1 -1
  9. package/dist/src/bitgo/baseCoin/baseCoin.js +9 -7
  10. package/dist/src/bitgo/enterprise/enterprise.js +3 -4
  11. package/dist/src/bitgo/enterprise/enterprises.js +5 -5
  12. package/dist/src/bitgo/keychain/decryptKeychain.js +2 -3
  13. package/dist/src/bitgo/keychain/keychains.js +7 -9
  14. package/dist/src/bitgo/lightning/custodial/lightning.js +9 -9
  15. package/dist/src/bitgo/lightning/custodial/lightningUtils.js +3 -4
  16. package/dist/src/bitgo/lightning/lightningWallet.js +5 -6
  17. package/dist/src/bitgo/pendingApproval/pendingApproval.js +4 -6
  18. package/dist/src/bitgo/staking/stakingWallet.d.ts.map +1 -1
  19. package/dist/src/bitgo/staking/stakingWallet.js +4 -4
  20. package/dist/src/bitgo/tss/ecdsa/ecdsa.js +5 -9
  21. package/dist/src/bitgo/tss/ecdsa/ecdsaMPCv2.js +2 -3
  22. package/dist/src/bitgo/utils/mpcUtils.js +4 -5
  23. package/dist/src/bitgo/utils/opengpgUtils.js +4 -4
  24. package/dist/src/bitgo/utils/tss/baseTSSUtils.d.ts +1 -0
  25. package/dist/src/bitgo/utils/tss/baseTSSUtils.d.ts.map +1 -1
  26. package/dist/src/bitgo/utils/tss/baseTSSUtils.js +13 -18
  27. package/dist/src/bitgo/utils/tss/ecdsa/ecdsa.js +9 -15
  28. package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.js +11 -16
  29. package/dist/src/bitgo/utils/tss/eddsa/eddsa.js +2 -3
  30. package/dist/src/bitgo/utils/txRequest.d.ts +10 -0
  31. package/dist/src/bitgo/utils/txRequest.d.ts.map +1 -0
  32. package/dist/src/bitgo/utils/txRequest.js +47 -0
  33. package/dist/src/bitgo/wallet/iWallet.d.ts +1 -1
  34. package/dist/src/bitgo/wallet/iWallet.d.ts.map +1 -1
  35. package/dist/src/bitgo/wallet/iWallet.js +1 -1
  36. package/dist/src/bitgo/wallet/wallet.d.ts +1 -1
  37. package/dist/src/bitgo/wallet/wallet.d.ts.map +1 -1
  38. package/dist/src/bitgo/wallet/wallet.js +41 -67
  39. package/dist/src/bitgo/wallet/wallets.js +9 -15
  40. package/dist/test/unit/bitgo/utils/txRequest.d.ts +2 -0
  41. package/dist/test/unit/bitgo/utils/txRequest.d.ts.map +1 -0
  42. package/dist/test/unit/bitgo/utils/txRequest.js +105 -0
  43. package/dist/tsconfig.tsbuildinfo +1 -1
  44. package/package.json +3 -3
@@ -0,0 +1,105 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ require("should");
4
+ const txRequest_1 = require("../../../../src/bitgo/utils/txRequest");
5
+ describe('txRequest utils', () => {
6
+ describe('getTxRequestApiVersion', function () {
7
+ const testCases = [
8
+ {
9
+ wallet: {
10
+ baseCoin: { getMPCAlgorithm: () => 'ecdsa' },
11
+ type: () => 'hot',
12
+ multisigType: () => 'tss',
13
+ },
14
+ requestedApiVersion: 'lite',
15
+ expectedApiVersion: '',
16
+ expectedErrorMessage: 'For ECDSA tss wallets, parameter `apiVersion` must be `full`.',
17
+ },
18
+ {
19
+ wallet: {
20
+ baseCoin: { getMPCAlgorithm: () => 'eddsa' },
21
+ type: () => 'cold',
22
+ multisigType: () => 'tss',
23
+ },
24
+ requestedApiVersion: 'lite',
25
+ expectedApiVersion: '',
26
+ expectedErrorMessage: 'For non self-custodial (hot) tss wallets, parameter `apiVersion` must be `full`.',
27
+ },
28
+ {
29
+ wallet: {
30
+ baseCoin: { getMPCAlgorithm: () => 'eddsa' },
31
+ type: () => 'hot',
32
+ multisigType: () => 'tss',
33
+ },
34
+ requestedApiVersion: undefined,
35
+ expectedApiVersion: 'lite',
36
+ expectedErrorMessage: '',
37
+ },
38
+ ...['hot', 'cold', 'custodial', 'backing'].map((walletType) => {
39
+ return {
40
+ wallet: {
41
+ baseCoin: { getMPCAlgorithm: () => 'ecdsa' },
42
+ type: () => walletType,
43
+ multisigType: () => 'tss',
44
+ },
45
+ requestedApiVersion: 'full',
46
+ expectedApiVersion: 'full',
47
+ expectedErrorMessage: '',
48
+ shouldThrow: false,
49
+ };
50
+ }),
51
+ ...['hot', 'cold', 'custodial', 'backing'].map((walletType) => {
52
+ return {
53
+ wallet: {
54
+ baseCoin: { getMPCAlgorithm: () => 'ecdsa' },
55
+ type: () => walletType,
56
+ multisigType: () => 'tss',
57
+ },
58
+ requestedApiVersion: undefined,
59
+ expectedApiVersion: 'full',
60
+ expectedErrorMessage: '',
61
+ shouldThrow: false,
62
+ };
63
+ }),
64
+ ...['hot', 'cold', 'custodial', 'backing'].map((walletType) => {
65
+ return {
66
+ wallet: {
67
+ baseCoin: { getMPCAlgorithm: () => 'eddsa' },
68
+ type: () => walletType,
69
+ multisigType: () => 'tss',
70
+ },
71
+ requestedApiVersion: 'full',
72
+ expectedApiVersion: 'full',
73
+ expectedErrorMessage: '',
74
+ shouldThrow: false,
75
+ };
76
+ }),
77
+ ...['cold', 'custodial', 'backing'].map((walletType) => {
78
+ return {
79
+ wallet: {
80
+ baseCoin: { getMPCAlgorithm: () => 'eddsa' },
81
+ type: () => walletType,
82
+ multisigType: () => 'tss',
83
+ },
84
+ requestedApiVersion: undefined,
85
+ expectedApiVersion: 'full',
86
+ expectedErrorMessage: '',
87
+ shouldThrow: false,
88
+ };
89
+ }),
90
+ ];
91
+ testCases.forEach((testCase) => {
92
+ if (testCase.expectedErrorMessage) {
93
+ it(`should throw an error if requested apiVersion is ${testCase.requestedApiVersion} for wallet type ${testCase.wallet.type()} for a ${testCase.wallet.baseCoin.getMPCAlgorithm()} wallet`, () => {
94
+ (() => (0, txRequest_1.getTxRequestApiVersion)(testCase.wallet, testCase.requestedApiVersion)).should.throw(testCase.expectedErrorMessage);
95
+ });
96
+ }
97
+ else {
98
+ it(`should return ${testCase.expectedApiVersion} if requested apiVersion is ${testCase.requestedApiVersion} for wallet type ${testCase.wallet.type()} for a ${testCase.wallet.baseCoin.getMPCAlgorithm()} wallet`, () => {
99
+ (0, txRequest_1.getTxRequestApiVersion)(testCase.wallet, testCase.requestedApiVersion).should.equal(testCase.expectedApiVersion);
100
+ });
101
+ }
102
+ });
103
+ });
104
+ });
105
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHhSZXF1ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGVzdC91bml0L2JpdGdvL3V0aWxzL3R4UmVxdWVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLGtCQUFnQjtBQUVoQixxRUFBK0U7QUFFL0UsUUFBUSxDQUFDLGlCQUFpQixFQUFFLEdBQUcsRUFBRTtJQUMvQixRQUFRLENBQUMsd0JBQXdCLEVBQUU7UUFDakMsTUFBTSxTQUFTLEdBQUc7WUFDaEI7Z0JBQ0UsTUFBTSxFQUFFO29CQUNOLFFBQVEsRUFBRSxFQUFFLGVBQWUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxPQUFPLEVBQUU7b0JBQzVDLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxLQUFLO29CQUNqQixZQUFZLEVBQUUsR0FBRyxFQUFFLENBQUMsS0FBSztpQkFDUjtnQkFDbkIsbUJBQW1CLEVBQUUsTUFBTTtnQkFDM0Isa0JBQWtCLEVBQUUsRUFBRTtnQkFDdEIsb0JBQW9CLEVBQUUsK0RBQStEO2FBQ3RGO1lBQ0Q7Z0JBQ0UsTUFBTSxFQUFFO29CQUNOLFFBQVEsRUFBRSxFQUFFLGVBQWUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxPQUFPLEVBQUU7b0JBQzVDLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxNQUFNO29CQUNsQixZQUFZLEVBQUUsR0FBRyxFQUFFLENBQUMsS0FBSztpQkFDUjtnQkFDbkIsbUJBQW1CLEVBQUUsTUFBTTtnQkFDM0Isa0JBQWtCLEVBQUUsRUFBRTtnQkFDdEIsb0JBQW9CLEVBQUUsa0ZBQWtGO2FBQ3pHO1lBQ0Q7Z0JBQ0UsTUFBTSxFQUFFO29CQUNOLFFBQVEsRUFBRSxFQUFFLGVBQWUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxPQUFPLEVBQUU7b0JBQzVDLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxLQUFLO29CQUNqQixZQUFZLEVBQUUsR0FBRyxFQUFFLENBQUMsS0FBSztpQkFDUjtnQkFDbkIsbUJBQW1CLEVB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QUcsRUFBRSxDQUNKLElBQUEsa0NBQXNCLEVBQ3BCLFFBQVEsQ0FBQyxNQUFNLEVBQ2YsUUFBUSxDQUFDLG1CQUE2QyxDQUN2RCxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsb0JBQW9CLENBQUMsQ0FBQztnQkFDbkQsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sRUFBRSxDQUFDLGlCQUFpQixRQUFRLENBQUMsa0JBQWtCLCtCQUM3QyxRQUFRLENBQUMsbUJBQ1gsb0JBQW9CLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLFVBQVUsUUFBUSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsZUFBZSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUU7b0JBQzVHLElBQUEsa0NBQXNCLEVBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsbUJBQTZDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUMxRyxRQUFRLENBQUMsa0JBQWtCLENBQzVCLENBQUM7Z0JBQ0osQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICdzaG91bGQnO1xuaW1wb3J0IHsgQXBpVmVyc2lvbiwgSVdhbGxldCB9IGZyb20gJy4uLy4uLy4uLy4uL3NyYyc7XG5pbXBvcnQgeyBnZXRUeFJlcXVlc3RBcGlWZXJzaW9uIH0gZnJvbSAnLi4vLi4vLi4vLi4vc3JjL2JpdGdvL3V0aWxzL3R4UmVxdWVzdCc7XG5cbmRlc2NyaWJlKCd0eFJlcXVlc3QgdXRpbHMnLCAoKSA9PiB7XG4gIGRlc2NyaWJlKCdnZXRUeFJlcXVlc3RBcGlWZXJzaW9uJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHRlc3RDYXNlcyA9IFtcbiAgICAgIHtcbiAgICAgICAgd2FsbGV0OiB7XG4gICAgICAgICAgYmFzZUNvaW46IHsgZ2V0TVBDQWxnb3JpdGhtOiAoKSA9PiAnZWNkc2EnIH0sXG4gICAgICAgICAgdHlwZTogKCkgPT4gJ2hvdCcsXG4gICAgICAgICAgbXVsdGlzaWdUeXBlOiAoKSA9PiAndHNzJyxcbiAgICAgICAgfSBhcyBhbnkgYXMgSVdhbGxldCxcbiAgICAgICAgcmVxdWVzdGVkQXBpVmVyc2lvbjogJ2xpdGUnLFxuICAgICAgICBleHBlY3RlZEFwaVZlcnNpb246ICcnLFxuICAgICAgICBleHBlY3RlZEVycm9yTWVzc2FnZTogJ0ZvciBFQ0RTQSB0c3Mgd2FsbGV0cywgcGFyYW1ldGVyIGBhcGlWZXJzaW9uYCBtdXN0IGJlIGBmdWxsYC4nLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgd2FsbGV0OiB7XG4gICAgICAgICAgYmFzZUNvaW46IHsgZ2V0TVBDQWxnb3JpdGhtOiAoKSA9PiAnZWRkc2EnIH0sXG4gICAgICAgICAgdHlwZTogKCkgPT4gJ2NvbGQnLFxuICAgICAgICAgIG11bHRpc2lnVHlwZTogKCkgPT4gJ3RzcycsXG4gICAgICAgIH0gYXMgYW55IGFzIElXYWxsZXQsXG4gICAgICAgIHJlcXVlc3RlZEFwaVZlcnNpb246ICdsaXRlJyxcbiAgICAgICAgZXhwZWN0ZWRBcGlWZXJzaW9uOiAnJyxcbiAgICAgICAgZXhwZWN0ZWRFcnJvck1lc3NhZ2U6ICdGb3Igbm9uIHNlbGYtY3VzdG9kaWFsIChob3QpIHRzcyB3YWxsZXRzLCBwYXJhbWV0ZXIgYGFwaVZlcnNpb25gIG11c3QgYmUgYGZ1bGxgLicsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB3YWxsZXQ6IHtcbiAgICAgICAgICBiYXNlQ29pbjogeyBnZXRNUENBbGdvcml0aG06ICgpID0+ICdlZGRzYScgfSxcbiAgICAgICAgICB0eXBlOiAoKSA9PiAnaG90JyxcbiAgICAgICAgICBtdWx0aXNpZ1R5cGU6ICgpID0+ICd0c3MnLFxuICAgICAgICB9IGFzIGFueSBhcyBJV2FsbGV0LFxuICAgICAgICByZXF1ZXN0ZWRBcGlWZXJzaW9uOiB1bmRlZmluZWQsXG4gICAgICAgIGV4cGVjdGVkQXBpVmVyc2lvbjogJ2xpdGUnLFxuICAgICAgICBleHBlY3RlZEVycm9yTWVzc2FnZTogJycsXG4gICAgICB9LFxuICAgICAgLi4uWydob3QnLCAnY29sZCcsICdjdXN0b2RpYWwnLCAnYmFja2luZyddLm1hcCgod2FsbGV0VHlwZSkgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHdhbGxldDoge1xuICAgICAgICAgICAgYmFzZUNvaW46IHsgZ2V0TVBDQWxnb3JpdGhtOiAoKSA9PiAnZWNkc2EnIH0sXG4gICAgICAgICAgICB0eXBlOiAoKSA9PiB3YWxsZXRUeXBlLFxuICAgICAgICAgICAgbXVsdGlzaWdUeXBlOiAoKSA9PiAndHNzJyxcbiAgICAgICAgICB9IGFzIGFueSBhcyBJV2FsbGV0LFxuICAgICAgICAgIHJlcXVlc3RlZEFwaVZlcnNpb246ICdmdWxsJyxcbiAgICAgICAgICBleHBlY3RlZEFwaVZlcnNpb246ICdmdWxsJyxcbiAgICAgICAgICBleHBlY3RlZEVycm9yTWVzc2FnZTogJycsXG4gICAgICAgICAgc2hvdWxkVGhyb3c6IGZhbHNlLFxuICAgICAgICB9O1xuICAgICAgfSksXG4gICAgICAuLi5bJ2hvdCcsICdjb2xkJywgJ2N1c3RvZGlhbCcsICdiYWNraW5nJ10ubWFwKCh3YWxsZXRUeXBlKSA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgd2FsbGV0OiB7XG4gICAgICAgICAgICBiYXNlQ29pbjogeyBnZXRNUENBbGdvcml0aG06ICgpID0+ICdlY2RzYScgfSxcbiAgICAgICAgICAgIHR5cGU6ICgpID0+IHdhbGxldFR5cGUsXG4gICAgICAgICAgICBtdWx0aXNpZ1R5cGU6ICgpID0+ICd0c3MnLFxuICAgICAgICAgIH0gYXMgYW55IGFzIElXYWxsZXQsXG4gICAgICAgICAgcmVxdWVzdGVkQXBpVmVyc2lvbjogdW5kZWZpbmVkLFxuICAgICAgICAgIGV4cGVjdGVkQXBpVmVyc2lvbjogJ2Z1bGwnLFxuICAgICAgICAgIGV4cGVjdGVkRXJyb3JNZXNzYWdlOiAnJyxcbiAgICAgICAgICBzaG91bGRUaHJvdzogZmFsc2UsXG4gICAgICAgIH07XG4gICAgICB9KSxcbiAgICAgIC4uLlsnaG90JywgJ2NvbGQnLCAnY3VzdG9kaWFsJywgJ2JhY2tpbmcnXS5tYXAoKHdhbGxldFR5cGUpID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB3YWxsZXQ6IHtcbiAgICAgICAgICAgIGJhc2VDb2luOiB7IGdldE1QQ0FsZ29yaXRobTogKCkgPT4gJ2VkZHNhJyB9LFxuICAgICAgICAgICAgdHlwZTogKCkgPT4gd2FsbGV0VHlwZSxcbiAgICAgICAgICAgIG11bHRpc2lnVHlwZTogKCkgPT4gJ3RzcycsXG4gICAgICAgICAgfSBhcyBhbnkgYXMgSVdhbGxldCxcbiAgICAgICAgICByZXF1ZXN0ZWRBcGlWZXJzaW9uOiAnZnVsbCcsXG4gICAgICAgICAgZXhwZWN0ZWRBcGlWZXJzaW9uOiAnZnVsbCcsXG4gICAgICAgICAgZXhwZWN0ZWRFcnJvck1lc3NhZ2U6ICcnLFxuICAgICAgICAgIHNob3VsZFRocm93OiBmYWxzZSxcbiAgICAgICAgfTtcbiAgICAgIH0pLFxuICAgICAgLi4uWydjb2xkJywgJ2N1c3RvZGlhbCcsICdiYWNraW5nJ10ubWFwKCh3YWxsZXRUeXBlKSA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgd2FsbGV0OiB7XG4gICAgICAgICAgICBiYXNlQ29pbjogeyBnZXRNUENBbGdvcml0aG06ICgpID0+ICdlZGRzYScgfSxcbiAgICAgICAgICAgIHR5cGU6ICgpID0+IHdhbGxldFR5cGUsXG4gICAgICAgICAgICBtdWx0aXNpZ1R5cGU6ICgpID0+ICd0c3MnLFxuICAgICAgICAgIH0gYXMgYW55IGFzIElXYWxsZXQsXG4gICAgICAgICAgcmVxdWVzdGVkQXBpVmVyc2lvbjogdW5kZWZpbmVkLFxuICAgICAgICAgIGV4cGVjdGVkQXBpVmVyc2lvbjogJ2Z1bGwnLFxuICAgICAgICAgIGV4cGVjdGVkRXJyb3JNZXNzYWdlOiAnJyxcbiAgICAgICAgICBzaG91bGRUaHJvdzogZmFsc2UsXG4gICAgICAgIH07XG4gICAgICB9KSxcbiAgICBdO1xuXG4gICAgdGVzdENhc2VzLmZvckVhY2goKHRlc3RDYXNlKSA9PiB7XG4gICAgICBpZiAodGVzdENhc2UuZXhwZWN0ZWRFcnJvck1lc3NhZ2UpIHtcbiAgICAgICAgaXQoYHNob3VsZCB0aHJvdyBhbiBlcnJvciBpZiByZXF1ZXN0ZWQgYXBpVmVyc2lvbiBpcyAke1xuICAgICAgICAgIHRlc3RDYXNlLnJlcXVlc3RlZEFwaVZlcnNpb25cbiAgICAgICAgfSBmb3Igd2FsbGV0IHR5cGUgJHt0ZXN0Q2FzZS53YWxsZXQudHlwZSgpfSBmb3IgYSAke3Rlc3RDYXNlLndhbGxldC5iYXNlQ29pbi5nZXRNUENBbGdvcml0aG0oKX0gd2FsbGV0YCwgKCkgPT4ge1xuICAgICAgICAgICgoKSA9PlxuICAgICAgICAgICAgZ2V0VHhSZXF1ZXN0QXBpVmVyc2lvbihcbiAgICAgICAgICAgICAgdGVzdENhc2Uud2FsbGV0LFxuICAgICAgICAgICAgICB0ZXN0Q2FzZS5yZXF1ZXN0ZWRBcGlWZXJzaW9uIGFzIEFwaVZlcnNpb24gfCB1bmRlZmluZWRcbiAgICAgICAgICAgICkpLnNob3VsZC50aHJvdyh0ZXN0Q2FzZS5leHBlY3RlZEVycm9yTWVzc2FnZSk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaXQoYHNob3VsZCByZXR1cm4gJHt0ZXN0Q2FzZS5leHBlY3RlZEFwaVZlcnNpb259IGlmIHJlcXVlc3RlZCBhcGlWZXJzaW9uIGlzICR7XG4gICAgICAgICAgdGVzdENhc2UucmVxdWVzdGVkQXBpVmVyc2lvblxuICAgICAgICB9IGZvciB3YWxsZXQgdHlwZSAke3Rlc3RDYXNlLndhbGxldC50eXBlKCl9IGZvciBhICR7dGVzdENhc2Uud2FsbGV0LmJhc2VDb2luLmdldE1QQ0FsZ29yaXRobSgpfSB3YWxsZXRgLCAoKSA9PiB7XG4gICAgICAgICAgZ2V0VHhSZXF1ZXN0QXBpVmVyc2lvbih0ZXN0Q2FzZS53YWxsZXQsIHRlc3RDYXNlLnJlcXVlc3RlZEFwaVZlcnNpb24gYXMgQXBpVmVyc2lvbiB8IHVuZGVmaW5lZCkuc2hvdWxkLmVxdWFsKFxuICAgICAgICAgICAgdGVzdENhc2UuZXhwZWN0ZWRBcGlWZXJzaW9uXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=