@bitgo-beta/sdk-coin-flrp 1.0.1-beta.39 → 1.0.1-beta.390

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 (122) hide show
  1. package/dist/src/flrp.d.ts +10 -17
  2. package/dist/src/flrp.d.ts.map +1 -1
  3. package/dist/src/flrp.js +51 -77
  4. package/dist/src/index.d.ts +0 -1
  5. package/dist/src/index.d.ts.map +1 -1
  6. package/dist/src/index.js +1 -2
  7. package/dist/src/lib/ExportInCTxBuilder.d.ts +43 -0
  8. package/dist/src/lib/ExportInCTxBuilder.d.ts.map +1 -0
  9. package/dist/src/lib/ExportInCTxBuilder.js +150 -0
  10. package/dist/src/lib/ExportInPTxBuilder.d.ts +29 -0
  11. package/dist/src/lib/ExportInPTxBuilder.d.ts.map +1 -0
  12. package/dist/src/lib/ExportInPTxBuilder.js +180 -0
  13. package/dist/src/lib/ImportInCTxBuilder.d.ts +35 -0
  14. package/dist/src/lib/ImportInCTxBuilder.d.ts.map +1 -0
  15. package/dist/src/lib/ImportInCTxBuilder.js +181 -0
  16. package/dist/src/lib/ImportInPTxBuilder.d.ts +48 -0
  17. package/dist/src/lib/ImportInPTxBuilder.d.ts.map +1 -0
  18. package/dist/src/lib/ImportInPTxBuilder.js +223 -0
  19. package/dist/src/lib/atomicInCTransactionBuilder.d.ts +12 -16
  20. package/dist/src/lib/atomicInCTransactionBuilder.d.ts.map +1 -1
  21. package/dist/src/lib/atomicInCTransactionBuilder.js +30 -41
  22. package/dist/src/lib/atomicTransactionBuilder.d.ts +81 -69
  23. package/dist/src/lib/atomicTransactionBuilder.d.ts.map +1 -1
  24. package/dist/src/lib/atomicTransactionBuilder.js +189 -212
  25. package/dist/src/lib/iface.d.ts +65 -57
  26. package/dist/src/lib/iface.d.ts.map +1 -1
  27. package/dist/src/lib/iface.js +20 -14
  28. package/dist/src/lib/index.d.ts +5 -0
  29. package/dist/src/lib/index.d.ts.map +1 -1
  30. package/dist/src/lib/index.js +12 -2
  31. package/dist/src/lib/keyPair.d.ts +5 -5
  32. package/dist/src/lib/keyPair.d.ts.map +1 -1
  33. package/dist/src/lib/keyPair.js +17 -9
  34. package/dist/src/lib/permissionlessValidatorTxBuilder.d.ts +41 -0
  35. package/dist/src/lib/permissionlessValidatorTxBuilder.d.ts.map +1 -0
  36. package/dist/src/lib/permissionlessValidatorTxBuilder.js +126 -0
  37. package/dist/src/lib/transaction.d.ts +30 -66
  38. package/dist/src/lib/transaction.d.ts.map +1 -1
  39. package/dist/src/lib/transaction.js +338 -199
  40. package/dist/src/lib/transactionBuilder.d.ts +115 -0
  41. package/dist/src/lib/transactionBuilder.d.ts.map +1 -0
  42. package/dist/src/lib/transactionBuilder.js +228 -0
  43. package/dist/src/lib/transactionBuilderFactory.d.ts +50 -30
  44. package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -1
  45. package/dist/src/lib/transactionBuilderFactory.js +129 -72
  46. package/dist/src/lib/utils.d.ts +106 -146
  47. package/dist/src/lib/utils.d.ts.map +1 -1
  48. package/dist/src/lib/utils.js +305 -321
  49. package/dist/test/resources/account.d.ts +81 -0
  50. package/dist/test/resources/account.d.ts.map +1 -0
  51. package/dist/test/resources/account.js +79 -0
  52. package/dist/test/resources/transactionData/exportInC.d.ts +50 -0
  53. package/dist/test/resources/transactionData/exportInC.d.ts.map +1 -0
  54. package/dist/test/resources/transactionData/exportInC.js +58 -0
  55. package/dist/test/resources/transactionData/exportInP.d.ts +60 -0
  56. package/dist/test/resources/transactionData/exportInP.d.ts.map +1 -0
  57. package/dist/test/resources/transactionData/exportInP.js +101 -0
  58. package/dist/test/resources/transactionData/importInC.d.ts +56 -0
  59. package/dist/test/resources/transactionData/importInC.d.ts.map +1 -0
  60. package/dist/test/resources/transactionData/importInC.js +120 -0
  61. package/dist/test/resources/transactionData/importInP.d.ts +66 -0
  62. package/dist/test/resources/transactionData/importInP.d.ts.map +1 -0
  63. package/dist/test/resources/transactionData/importInP.js +84 -0
  64. package/dist/test/unit/flrp.js +449 -68
  65. package/dist/test/unit/lib/exportInCTxBuilder.d.ts +2 -0
  66. package/dist/test/unit/lib/exportInCTxBuilder.d.ts.map +1 -0
  67. package/dist/test/unit/lib/exportInCTxBuilder.js +193 -0
  68. package/dist/test/unit/lib/exportInPTxBuilder.d.ts +2 -0
  69. package/dist/test/unit/lib/exportInPTxBuilder.d.ts.map +1 -0
  70. package/dist/test/unit/lib/exportInPTxBuilder.js +191 -0
  71. package/dist/test/unit/lib/importInCTxBuilder.d.ts +2 -0
  72. package/dist/test/unit/lib/importInCTxBuilder.d.ts.map +1 -0
  73. package/dist/test/unit/lib/importInCTxBuilder.js +204 -0
  74. package/dist/test/unit/lib/importInPTxBuilder.d.ts +2 -0
  75. package/dist/test/unit/lib/importInPTxBuilder.d.ts.map +1 -0
  76. package/dist/test/unit/lib/importInPTxBuilder.js +312 -0
  77. package/dist/test/unit/lib/keyPair.d.ts +2 -0
  78. package/dist/test/unit/lib/keyPair.d.ts.map +1 -0
  79. package/dist/test/unit/lib/keyPair.js +158 -0
  80. package/dist/test/unit/lib/signFlowTestSuit.d.ts +20 -0
  81. package/dist/test/unit/lib/signFlowTestSuit.d.ts.map +1 -0
  82. package/dist/test/unit/lib/signFlowTestSuit.js +83 -0
  83. package/dist/test/unit/lib/signatureIndex.d.ts +13 -0
  84. package/dist/test/unit/lib/signatureIndex.d.ts.map +1 -0
  85. package/dist/test/unit/lib/signatureIndex.js +591 -0
  86. package/dist/test/unit/lib/transactionBuilderFactory.d.ts +2 -0
  87. package/dist/test/unit/lib/transactionBuilderFactory.d.ts.map +1 -0
  88. package/dist/test/unit/lib/transactionBuilderFactory.js +60 -0
  89. package/dist/test/unit/lib/utils.js +601 -207
  90. package/dist/tsconfig.tsbuildinfo +1 -1
  91. package/package.json +19 -10
  92. package/.eslintignore +0 -5
  93. package/.eslintrc.json +0 -7
  94. package/.mocharc.yml +0 -8
  95. package/CHANGELOG.md +0 -0
  96. package/dist/src/iface.d.ts +0 -25
  97. package/dist/src/iface.d.ts.map +0 -1
  98. package/dist/src/iface.js +0 -3
  99. package/dist/src/lib/constants.d.ts +0 -11
  100. package/dist/src/lib/constants.d.ts.map +0 -1
  101. package/dist/src/lib/constants.js +0 -17
  102. package/dist/src/lib/errors.d.ts +0 -8
  103. package/dist/src/lib/errors.d.ts.map +0 -1
  104. package/dist/src/lib/errors.js +0 -19
  105. package/dist/src/lib/exportInCTxBuilder.d.ts +0 -77
  106. package/dist/src/lib/exportInCTxBuilder.d.ts.map +0 -1
  107. package/dist/src/lib/exportInCTxBuilder.js +0 -170
  108. package/dist/src/lib/exportInPTxBuilder.d.ts +0 -30
  109. package/dist/src/lib/exportInPTxBuilder.d.ts.map +0 -1
  110. package/dist/src/lib/exportInPTxBuilder.js +0 -56
  111. package/dist/test/unit/lib/atomicTransactionBuilder.d.ts +0 -2
  112. package/dist/test/unit/lib/atomicTransactionBuilder.d.ts.map +0 -1
  113. package/dist/test/unit/lib/atomicTransactionBuilder.js +0 -222
  114. package/dist/test/unit/lib/exportTxBuilder.d.ts +0 -2
  115. package/dist/test/unit/lib/exportTxBuilder.d.ts.map +0 -1
  116. package/dist/test/unit/lib/exportTxBuilder.js +0 -45
  117. package/dist/test/unit/lib/transaction.d.ts +0 -2
  118. package/dist/test/unit/lib/transaction.d.ts.map +0 -1
  119. package/dist/test/unit/lib/transaction.js +0 -460
  120. package/dist/test/unit/smoke.d.ts +0 -2
  121. package/dist/test/unit/smoke.d.ts.map +0 -1
  122. package/dist/test/unit/smoke.js +0 -23
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=exportInCTxBuilder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exportInCTxBuilder.d.ts","sourceRoot":"","sources":["../../../../test/unit/lib/exportInCTxBuilder.ts"],"names":[],"mappings":""}
@@ -0,0 +1,193 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ const statics_1 = require("@bitgo-beta/statics");
37
+ const sdk_core_1 = require("@bitgo-beta/sdk-core");
38
+ const assert = __importStar(require("assert"));
39
+ const transactionBuilderFactory_1 = require("../../../src/lib/transactionBuilderFactory");
40
+ const exportInC_1 = require("../../resources/transactionData/exportInC");
41
+ const account_1 = require("../../resources/account");
42
+ describe('ExportInCTxBuilder', function () {
43
+ const coinConfig = statics_1.coins.get('tflrp');
44
+ const factory = new transactionBuilderFactory_1.TransactionBuilderFactory(coinConfig);
45
+ const txBuilder = factory.getExportInCBuilder();
46
+ describe('utxos validation', function () {
47
+ it('should reject UTXOs since C-chain exports do not use UTXOs', async function () {
48
+ assert.throws(() => {
49
+ txBuilder.decodedUtxos([]);
50
+ }, new sdk_core_1.BuildTransactionError('UTXOs are not required for Export Tx from C-Chain'));
51
+ });
52
+ });
53
+ describe('amount validation', function () {
54
+ it('should accept bigint and string amount formats', function () {
55
+ const validAmounts = [BigInt(1000), '1000', '1000000000000000000'];
56
+ validAmounts.forEach((amount) => {
57
+ assert.doesNotThrow(() => {
58
+ txBuilder.amount(amount);
59
+ });
60
+ });
61
+ });
62
+ it('should reject zero and negative amounts', function () {
63
+ const invalidAmounts = ['0', '-1'];
64
+ invalidAmounts.forEach((amount) => {
65
+ assert.throws(() => {
66
+ txBuilder.amount(amount);
67
+ }, sdk_core_1.BuildTransactionError);
68
+ });
69
+ });
70
+ });
71
+ describe('nonce validation', function () {
72
+ it('should accept string and number nonce formats including zero', function () {
73
+ const validNonces = ['1', 1, 0];
74
+ validNonces.forEach((nonce) => {
75
+ assert.doesNotThrow(() => {
76
+ txBuilder.nonce(nonce);
77
+ });
78
+ });
79
+ });
80
+ it('should reject negative nonce values', function () {
81
+ assert.throws(() => {
82
+ txBuilder.nonce('-1');
83
+ }, new sdk_core_1.BuildTransactionError('Nonce must be greater or equal than 0'));
84
+ });
85
+ });
86
+ describe('destination address (to) validation', function () {
87
+ const txBuilder = factory.getExportInCBuilder();
88
+ it('should accept array of P-chain addresses for multisig', function () {
89
+ const pAddresses = exportInC_1.EXPORT_IN_C.pAddresses;
90
+ assert.doesNotThrow(() => {
91
+ txBuilder.to(pAddresses);
92
+ });
93
+ });
94
+ it('should accept single P-chain address string', function () {
95
+ assert.doesNotThrow(() => {
96
+ txBuilder.to(exportInC_1.EXPORT_IN_C.pAddresses[0]);
97
+ });
98
+ });
99
+ it('should accept tilde-separated P-chain addresses for multisig', function () {
100
+ const pAddresses = exportInC_1.EXPORT_IN_C.pAddresses.join('~');
101
+ assert.doesNotThrow(() => {
102
+ txBuilder.to(pAddresses);
103
+ });
104
+ });
105
+ });
106
+ describe('build C-chain to P-chain export transaction', () => {
107
+ const newTxBuilder = () => factory
108
+ .getExportInCBuilder()
109
+ .fromPubKey(exportInC_1.EXPORT_IN_C.cHexAddress)
110
+ .nonce(exportInC_1.EXPORT_IN_C.nonce)
111
+ .amount(exportInC_1.EXPORT_IN_C.amount)
112
+ .threshold(exportInC_1.EXPORT_IN_C.threshold)
113
+ .locktime(exportInC_1.EXPORT_IN_C.locktime)
114
+ .to(exportInC_1.EXPORT_IN_C.pAddresses)
115
+ .fee(exportInC_1.EXPORT_IN_C.fee)
116
+ .context(account_1.CONTEXT);
117
+ it('should build export tx with correct type, chains, amount, and fee deduction', async () => {
118
+ const txBuilder = newTxBuilder();
119
+ const tx = await txBuilder.build();
120
+ const json = tx.toJson();
121
+ json.type.should.equal(sdk_core_1.TransactionType.Export);
122
+ json.outputs.length.should.equal(1);
123
+ json.outputs[0].value.should.equal(exportInC_1.EXPORT_IN_C.amount);
124
+ json.sourceChain.should.equal('C');
125
+ json.destinationChain.should.equal('P');
126
+ // Verify fee is calculated correctly: actualFee = baseFee_adjusted × gasUnits
127
+ // baseFee_adjusted = testData.fee / 1e9 = 25
128
+ // gasUnits varies but fee should be > 0 and input > output
129
+ const inputValue = BigInt(json.inputs[0].value);
130
+ const outputValue = BigInt(json.outputs[0].value);
131
+ const actualFee = inputValue - outputValue;
132
+ (actualFee > 0n).should.be.true();
133
+ (inputValue > outputValue).should.be.true();
134
+ const rawTx = tx.toBroadcastFormat();
135
+ rawTx.should.startWith('0x');
136
+ rawTx.length.should.be.greaterThan(100);
137
+ });
138
+ it('should deserialize unsigned export tx from raw hex', async () => {
139
+ const txBuilder = new transactionBuilderFactory_1.TransactionBuilderFactory(statics_1.coins.get('tflrp')).from(exportInC_1.EXPORT_IN_C.unsignedHex);
140
+ const tx = await txBuilder.build();
141
+ const rawTx = tx.toBroadcastFormat();
142
+ rawTx.should.equal(exportInC_1.EXPORT_IN_C.unsignedHex);
143
+ });
144
+ it('should deserialize signed export tx and preserve tx id', async () => {
145
+ const txBuilder = new transactionBuilderFactory_1.TransactionBuilderFactory(statics_1.coins.get('tflrp')).from(exportInC_1.EXPORT_IN_C.signedHex);
146
+ const tx = await txBuilder.build();
147
+ const rawTx = tx.toBroadcastFormat();
148
+ rawTx.should.equal(exportInC_1.EXPORT_IN_C.signedHex);
149
+ tx.id.should.equal(exportInC_1.EXPORT_IN_C.txhash);
150
+ });
151
+ it('should sign export tx built from scratch and produce valid signature', async () => {
152
+ const txBuilder = newTxBuilder();
153
+ txBuilder.sign({ key: exportInC_1.EXPORT_IN_C.privateKey });
154
+ const tx = await txBuilder.build();
155
+ // Verify signature exists
156
+ tx.signature.length.should.be.greaterThan(0);
157
+ tx.signature[0].should.startWith('0x');
158
+ // Verify transaction properties after signing
159
+ const json = tx.toJson();
160
+ json.type.should.equal(sdk_core_1.TransactionType.Export);
161
+ json.outputs[0].value.should.equal(exportInC_1.EXPORT_IN_C.amount);
162
+ });
163
+ it('should sign unsigned raw tx and match expected signed hex and tx id', async () => {
164
+ const txBuilder = new transactionBuilderFactory_1.TransactionBuilderFactory(statics_1.coins.get('tflrp')).from(exportInC_1.EXPORT_IN_C.unsignedHex);
165
+ txBuilder.sign({ key: exportInC_1.EXPORT_IN_C.privateKey });
166
+ const tx = await txBuilder.build();
167
+ const rawTx = tx.toBroadcastFormat();
168
+ rawTx.should.equal(exportInC_1.EXPORT_IN_C.signedHex);
169
+ tx.id.should.equal(exportInC_1.EXPORT_IN_C.txhash);
170
+ });
171
+ it('should reject signing with key that does not match from address', () => {
172
+ const txBuilder = new transactionBuilderFactory_1.TransactionBuilderFactory(statics_1.coins.get('tflrp'))
173
+ .from(exportInC_1.EXPORT_IN_C.unsignedHex)
174
+ .fromPubKey(exportInC_1.EXPORT_IN_C.pAddresses);
175
+ txBuilder.sign({ key: exportInC_1.EXPORT_IN_C.privateKey });
176
+ txBuilder
177
+ .build()
178
+ .then(() => assert.fail('it can sign'))
179
+ .catch((err) => {
180
+ err.message.should.be.equal('Private key cannot sign the transaction');
181
+ });
182
+ });
183
+ it('should compute correct tx id for on-chain verified signed export', async () => {
184
+ const signedExportHex = '0x0000000000010000007278db5c30bed04c05ce209179812850bbb3fe6d46d7eef3744d814c0da555247900000000000000000000000000000000000000000000000000000000000000000000000117dbd11b9dd1c9be337353db7c14f9fb3662e5b50000000002ff3d1658734f94af871c3d131b56131b6fb7a0291eacadd261e69dfb42a9cdf6f7fddd00000000000000050000000158734f94af871c3d131b56131b6fb7a0291eacadd261e69dfb42a9cdf6f7fddd000000070000000002faf080000000000000000000000002000000033329be7d01cd3ebaae6654d7327dd9f17a2e15817e918a5e8083ae4c9f2f0ed77055c24bf3665001c7324437c96c7c8a6a152da2385c1db5c3ab1f910000000100000009000000018d1ac79d2e26d1c9689ca93b3b191c077dced2f201bdda132e74c3fc5ab9b10b6c85fd318dd6c0a99b327145977ac6ea6ff54cb8e9b7093b6bbe3545b3cc126400';
185
+ const txBuilder = new transactionBuilderFactory_1.TransactionBuilderFactory(statics_1.coins.get('tflrp')).from(signedExportHex);
186
+ const tx = await txBuilder.build();
187
+ const rawTx = tx.toBroadcastFormat();
188
+ rawTx.should.equal(signedExportHex);
189
+ tx.id.should.equal('3kXUsHix1bZRQ9hqUc24cp7sXFiy2LbPn6Eh2HQCAaMUi75s9');
190
+ });
191
+ });
192
+ });
193
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwb3J0SW5DVHhCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC91bml0L2xpYi9leHBvcnRJbkNUeEJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxpREFBNEM7QUFDNUMsbURBQThFO0FBQzlFLCtDQUFpQztBQUNqQywwRkFBdUY7QUFDdkYseUVBQW9GO0FBQ3BGLHFEQUFrRDtBQUdsRCxRQUFRLENBQUMsb0JBQW9CLEVBQUU7SUFDN0IsTUFBTSxVQUFVLEdBQUcsZUFBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN0QyxNQUFNLE9BQU8sR0FBRyxJQUFJLHFEQUF5QixDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzFELE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO0lBRWhELFFBQVEsQ0FBQyxrQkFBa0IsRUFBRTtRQUMzQixFQUFFLENBQUMsNERBQTRELEVBQUUsS0FBSztZQUNwRSxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRTtnQkFDakIsU0FBUyxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUM3QixDQUFDLEVBQUUsSUFBSSxnQ0FBcUIsQ0FBQyxtREFBbUQsQ0FBQyxDQUFDLENBQUM7UUFDckYsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxtQkFBbUIsRUFBRTtRQUM1QixFQUFFLENBQUMsZ0RBQWdELEVBQUU7WUFDbkQsTUFBTSxZQUFZLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLHFCQUFxQixDQUFDLENBQUM7WUFFbkUsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO2dCQUM5QixNQUFNLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRTtvQkFDdkIs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QUMsQ0FBQztRQUNQLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLGtFQUFrRSxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQ2hGLE1BQU0sZUFBZSxHQUNuQiwwckJBQTByQixDQUFDO1lBQzdyQixNQUFNLFNBQVMsR0FBRyxJQUFJLHFEQUF5QixDQUFDLGVBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDMUYsTUFBTSxFQUFFLEdBQUcsTUFBTSxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDbkMsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDckMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDcEMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLG1EQUFtRCxDQUFDLENBQUM7UUFDMUUsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29pbnMgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB7IEJ1aWxkVHJhbnNhY3Rpb25FcnJvciwgVHJhbnNhY3Rpb25UeXBlIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5IH0gZnJvbSAnLi4vLi4vLi4vc3JjL2xpYi90cmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5JztcbmltcG9ydCB7IEVYUE9SVF9JTl9DIGFzIHRlc3REYXRhIH0gZnJvbSAnLi4vLi4vcmVzb3VyY2VzL3RyYW5zYWN0aW9uRGF0YS9leHBvcnRJbkMnO1xuaW1wb3J0IHsgQ09OVEVYVCB9IGZyb20gJy4uLy4uL3Jlc291cmNlcy9hY2NvdW50JztcbmltcG9ydCB7IEZscnBDb250ZXh0IH0gZnJvbSAnQGJpdGdvL3B1YmxpYy10eXBlcyc7XG5cbmRlc2NyaWJlKCdFeHBvcnRJbkNUeEJ1aWxkZXInLCBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IGNvaW5Db25maWcgPSBjb2lucy5nZXQoJ3RmbHJwJyk7XG4gIGNvbnN0IGZhY3RvcnkgPSBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2luQ29uZmlnKTtcbiAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRFeHBvcnRJbkNCdWlsZGVyKCk7XG5cbiAgZGVzY3JpYmUoJ3V0eG9zIHZhbGlkYXRpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCByZWplY3QgVVRYT3Mgc2luY2UgQy1jaGFpbiBleHBvcnRzIGRvIG5vdCB1c2UgVVRYT3MnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhc3NlcnQudGhyb3dzKCgpID0+IHtcbiAgICAgICAgdHhCdWlsZGVyLmRlY29kZWRVdHhvcyhbXSk7XG4gICAgICB9LCBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdVVFhPcyBhcmUgbm90IHJlcXVpcmVkIGZvciBFeHBvcnQgVHggZnJvbSBDLUNoYWluJykpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnYW1vdW50IHZhbGlkYXRpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBhY2NlcHQgYmlnaW50IGFuZCBzdHJpbmcgYW1vdW50IGZvcm1hdHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB2YWxpZEFtb3VudHMgPSBbQmlnSW50KDEwMDApLCAnMTAwMCcsICcxMDAwMDAwMDAwMDAwMDAwMDAwJ107XG5cbiAgICAgIHZhbGlkQW1vdW50cy5mb3JFYWNoKChhbW91bnQpID0+IHtcbiAgICAgICAgYXNzZXJ0LmRvZXNOb3RUaHJvdygoKSA9PiB7XG4gICAgICAgICAgdHhCdWlsZGVyLmFtb3VudChhbW91bnQpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZWplY3QgemVybyBhbmQgbmVnYXRpdmUgYW1vdW50cycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGludmFsaWRBbW91bnRzID0gWycwJywgJy0xJ107XG5cbiAgICAgIGludmFsaWRBbW91bnRzLmZvckVhY2goKGFtb3VudCkgPT4ge1xuICAgICAgICBhc3NlcnQudGhyb3dzKCgpID0+IHtcbiAgICAgICAgICB0eEJ1aWxkZXIuYW1vdW50KGFtb3VudCk7XG4gICAgICAgIH0sIEJ1aWxkVHJhbnNhY3Rpb25FcnJvcik7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ25vbmNlIHZhbGlkYXRpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBhY2NlcHQgc3RyaW5nIGFuZCBudW1iZXIgbm9uY2UgZm9ybWF0cyBpbmNsdWRpbmcgemVybycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHZhbGlkTm9uY2VzID0gWycxJywgMSwgMF07XG5cbiAgICAgIHZhbGlkTm9uY2VzLmZvckVhY2goKG5vbmNlKSA9PiB7XG4gICAgICAgIGFzc2VydC5kb2VzTm90VGhyb3coKCkgPT4ge1xuICAgICAgICAgIHR4QnVpbGRlci5ub25jZShub25jZSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlamVjdCBuZWdhdGl2ZSBub25jZSB2YWx1ZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhc3NlcnQudGhyb3dzKCgpID0+IHtcbiAgICAgICAgdHhCdWlsZGVyLm5vbmNlKCctMScpO1xuICAgICAgfSwgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignTm9uY2UgbXVzdCBiZSBncmVhdGVyIG9yIGVxdWFsIHRoYW4gMCcpKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2Rlc3RpbmF0aW9uIGFkZHJlc3MgKHRvKSB2YWxpZGF0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZ2V0RXhwb3J0SW5DQnVpbGRlcigpO1xuXG4gICAgaXQoJ3Nob3VsZCBhY2NlcHQgYXJyYXkgb2YgUC1jaGFpbiBhZGRyZXNzZXMgZm9yIG11bHRpc2lnJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcEFkZHJlc3NlcyA9IHRlc3REYXRhLnBBZGRyZXNzZXM7XG5cbiAgICAgIGFzc2VydC5kb2VzTm90VGhyb3coKCkgPT4ge1xuICAgICAgICB0eEJ1aWxkZXIudG8ocEFkZHJlc3Nlcyk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYWNjZXB0IHNpbmdsZSBQLWNoYWluIGFkZHJlc3Mgc3RyaW5nJywgZnVuY3Rpb24gKCkge1xuICAgICAgYXNzZXJ0LmRvZXNOb3RUaHJvdygoKSA9PiB7XG4gICAgICAgIHR4QnVpbGRlci50byh0ZXN0RGF0YS5wQWRkcmVzc2VzWzBdKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBhY2NlcHQgdGlsZGUtc2VwYXJhdGVkIFAtY2hhaW4gYWRkcmVzc2VzIGZvciBtdWx0aXNpZycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHBBZGRyZXNzZXMgPSB0ZXN0RGF0YS5wQWRkcmVzc2VzLmpvaW4oJ34nKTtcblxuICAgICAgYXNzZXJ0LmRvZXNOb3RUaHJvdygoKSA9PiB7XG4gICAgICAgIHR4QnVpbGRlci50byhwQWRkcmVzc2VzKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnYnVpbGQgQy1jaGFpbiB0byBQLWNoYWluIGV4cG9ydCB0cmFuc2FjdGlvbicsICgpID0+IHtcbiAgICBjb25zdCBuZXdUeEJ1aWxkZXIgPSAoKSA9PlxuICAgICAgZmFjdG9yeVxuICAgICAgICAuZ2V0RXhwb3J0SW5DQnVpbGRlcigpXG4gICAgICAgIC5mcm9tUHViS2V5KHRlc3REYXRhLmNIZXhBZGRyZXNzKVxuICAgICAgICAubm9uY2UodGVzdERhdGEubm9uY2UpXG4gICAgICAgIC5hbW91bnQodGVzdERhdGEuYW1vdW50KVxuICAgICAgICAudGhyZXNob2xkKHRlc3REYXRhLnRocmVzaG9sZClcbiAgICAgICAgLmxvY2t0aW1lKHRlc3REYXRhLmxvY2t0aW1lKVxuICAgICAgICAudG8odGVzdERhdGEucEFkZHJlc3NlcylcbiAgICAgICAgLmZlZSh0ZXN0RGF0YS5mZWUpXG4gICAgICAgIC5jb250ZXh0KENPTlRFWFQgYXMgRmxycENvbnRleHQpO1xuXG4gICAgaXQoJ3Nob3VsZCBidWlsZCBleHBvcnQgdHggd2l0aCBjb3JyZWN0IHR5cGUsIGNoYWlucywgYW1vdW50LCBhbmQgZmVlIGRlZHVjdGlvbicsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IG5ld1R4QnVpbGRlcigpO1xuXG4gICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3QganNvbiA9IHR4LnRvSnNvbigpO1xuXG4gICAgICBqc29uLnR5cGUuc2hvdWxkLmVxdWFsKFRyYW5zYWN0aW9uVHlwZS5FeHBvcnQpO1xuICAgICAganNvbi5vdXRwdXRzLmxlbmd0aC5zaG91bGQuZXF1YWwoMSk7XG4gICAgICBqc29uLm91dHB1dHNbMF0udmFsdWUuc2hvdWxkLmVxdWFsKHRlc3REYXRhLmFtb3VudCk7XG4gICAgICBqc29uLnNvdXJjZUNoYWluLnNob3VsZC5lcXVhbCgnQycpO1xuICAgICAganNvbi5kZXN0aW5hdGlvbkNoYWluLnNob3VsZC5lcXVhbCgnUCcpO1xuXG4gICAgICAvLyBWZXJpZnkgZmVlIGlzIGNhbGN1bGF0ZWQgY29ycmVjdGx5OiBhY3R1YWxGZWUgPSBiYXNlRmVlX2FkanVzdGVkIMOXIGdhc1VuaXRzXG4gICAgICAvLyBiYXNlRmVlX2FkanVzdGVkID0gdGVzdERhdGEuZmVlIC8gMWU5ID0gMjVcbiAgICAgIC8vIGdhc1VuaXRzIHZhcmllcyBidXQgZmVlIHNob3VsZCBiZSA+IDAgYW5kIGlucHV0ID4gb3V0cHV0XG4gICAgICBjb25zdCBpbnB1dFZhbHVlID0gQmlnSW50KGpzb24uaW5wdXRzWzBdLnZhbHVlKTtcbiAgICAgIGNvbnN0IG91dHB1dFZhbHVlID0gQmlnSW50KGpzb24ub3V0cHV0c1swXS52YWx1ZSk7XG4gICAgICBjb25zdCBhY3R1YWxGZWUgPSBpbnB1dFZhbHVlIC0gb3V0cHV0VmFsdWU7XG4gICAgICAoYWN0dWFsRmVlID4gMG4pLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICAoaW5wdXRWYWx1ZSA+IG91dHB1dFZhbHVlKS5zaG91bGQuYmUudHJ1ZSgpO1xuXG4gICAgICBjb25zdCByYXdUeCA9IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG4gICAgICByYXdUeC5zaG91bGQuc3RhcnRXaXRoKCcweCcpO1xuICAgICAgcmF3VHgubGVuZ3RoLnNob3VsZC5iZS5ncmVhdGVyVGhhbigxMDApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBkZXNlcmlhbGl6ZSB1bnNpZ25lZCBleHBvcnQgdHggZnJvbSByYXcgaGV4JywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gbmV3IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbnMuZ2V0KCd0ZmxycCcpKS5mcm9tKHRlc3REYXRhLnVuc2lnbmVkSGV4KTtcblxuICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIGNvbnN0IHJhd1R4ID0gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICAgIHJhd1R4LnNob3VsZC5lcXVhbCh0ZXN0RGF0YS51bnNpZ25lZEhleCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGRlc2VyaWFsaXplIHNpZ25lZCBleHBvcnQgdHggYW5kIHByZXNlcnZlIHR4IGlkJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gbmV3IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbnMuZ2V0KCd0ZmxycCcpKS5mcm9tKHRlc3REYXRhLnNpZ25lZEhleCk7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3QgcmF3VHggPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuICAgICAgcmF3VHguc2hvdWxkLmVxdWFsKHRlc3REYXRhLnNpZ25lZEhleCk7XG4gICAgICB0eC5pZC5zaG91bGQuZXF1YWwodGVzdERhdGEudHhoYXNoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgc2lnbiBleHBvcnQgdHggYnVpbHQgZnJvbSBzY3JhdGNoIGFuZCBwcm9kdWNlIHZhbGlkIHNpZ25hdHVyZScsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IG5ld1R4QnVpbGRlcigpO1xuXG4gICAgICB0eEJ1aWxkZXIuc2lnbih7IGtleTogdGVzdERhdGEucHJpdmF0ZUtleSB9KTtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG5cbiAgICAgIC8vIFZlcmlmeSBzaWduYXR1cmUgZXhpc3RzXG4gICAgICB0eC5zaWduYXR1cmUubGVuZ3RoLnNob3VsZC5iZS5ncmVhdGVyVGhhbigwKTtcbiAgICAgIHR4LnNpZ25hdHVyZVswXS5zaG91bGQuc3RhcnRXaXRoKCcweCcpO1xuXG4gICAgICAvLyBWZXJpZnkgdHJhbnNhY3Rpb24gcHJvcGVydGllcyBhZnRlciBzaWduaW5nXG4gICAgICBjb25zdCBqc29uID0gdHgudG9Kc29uKCk7XG4gICAgICBqc29uLnR5cGUuc2hvdWxkLmVxdWFsKFRyYW5zYWN0aW9uVHlwZS5FeHBvcnQpO1xuICAgICAganNvbi5vdXRwdXRzWzBdLnZhbHVlLnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5hbW91bnQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBzaWduIHVuc2lnbmVkIHJhdyB0eCBhbmQgbWF0Y2ggZXhwZWN0ZWQgc2lnbmVkIGhleCBhbmQgdHggaWQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2lucy5nZXQoJ3RmbHJwJykpLmZyb20odGVzdERhdGEudW5zaWduZWRIZXgpO1xuICAgICAgdHhCdWlsZGVyLnNpZ24oeyBrZXk6IHRlc3REYXRhLnByaXZhdGVLZXkgfSk7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3QgcmF3VHggPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuICAgICAgcmF3VHguc2hvdWxkLmVxdWFsKHRlc3REYXRhLnNpZ25lZEhleCk7XG4gICAgICB0eC5pZC5zaG91bGQuZXF1YWwodGVzdERhdGEudHhoYXNoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVqZWN0IHNpZ25pbmcgd2l0aCBrZXkgdGhhdCBkb2VzIG5vdCBtYXRjaCBmcm9tIGFkZHJlc3MnLCAoKSA9PiB7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2lucy5nZXQoJ3RmbHJwJykpXG4gICAgICAgIC5mcm9tKHRlc3REYXRhLnVuc2lnbmVkSGV4KVxuICAgICAgICAuZnJvbVB1YktleSh0ZXN0RGF0YS5wQWRkcmVzc2VzKTtcbiAgICAgIHR4QnVpbGRlci5zaWduKHsga2V5OiB0ZXN0RGF0YS5wcml2YXRlS2V5IH0pO1xuICAgICAgdHhCdWlsZGVyXG4gICAgICAgIC5idWlsZCgpXG4gICAgICAgIC50aGVuKCgpID0+IGFzc2VydC5mYWlsKCdpdCBjYW4gc2lnbicpKVxuICAgICAgICAuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgIGVyci5tZXNzYWdlLnNob3VsZC5iZS5lcXVhbCgnUHJpdmF0ZSBrZXkgY2Fubm90IHNpZ24gdGhlIHRyYW5zYWN0aW9uJyk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBjb21wdXRlIGNvcnJlY3QgdHggaWQgZm9yIG9uLWNoYWluIHZlcmlmaWVkIHNpZ25lZCBleHBvcnQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBzaWduZWRFeHBvcnRIZXggPVxuICAgICAgICAnMHgwMDAwMDAwMDAwMDEwMDAwMDA3Mjc4ZGI1YzMwYmVkMDRjMDVjZTIwOTE3OTgxMjg1MGJiYjNmZTZkNDZkN2VlZjM3NDRkODE0YzBkYTU1NTI0NzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExN2RiZDExYjlkZDFjOWJlMzM3MzUzZGI3YzE0ZjlmYjM2NjJlNWI1MDAwMDAwMDAwMmZmM2QxNjU4NzM0Zjk0YWY4NzFjM2QxMzFiNTYxMzFiNmZiN2EwMjkxZWFjYWRkMjYxZTY5ZGZiNDJhOWNkZjZmN2ZkZGQwMDAwMDAwMDAwMDAwMDA1MDAwMDAwMDE1ODczNGY5NGFmODcxYzNkMTMxYjU2MTMxYjZmYjdhMDI5MWVhY2FkZDI2MWU2OWRmYjQyYTljZGY2ZjdmZGRkMDAwMDAwMDcwMDAwMDAwMDAyZmFmMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDAwMDAwMDMzMzI5YmU3ZDAxY2QzZWJhYWU2NjU0ZDczMjdkZDlmMTdhMmUxNTgxN2U5MThhNWU4MDgzYWU0YzlmMmYwZWQ3NzA1NWMyNGJmMzY2NTAwMWM3MzI0NDM3Yzk2YzdjOGE2YTE1MmRhMjM4NWMxZGI1YzNhYjFmOTEwMDAwMDAwMTAwMDAwMDA5MDAwMDAwMDE4ZDFhYzc5ZDJlMjZkMWM5Njg5Y2E5M2IzYjE5MWMwNzdkY2VkMmYyMDFiZGRhMTMyZTc0YzNmYzVhYjliMTBiNmM4NWZkMzE4ZGQ2YzBhOTliMzI3MTQ1OTc3YWM2ZWE2ZmY1NGNiOGU5YjcwOTNiNmJiZTM1NDViM2NjMTI2NDAwJztcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5zLmdldCgndGZscnAnKSkuZnJvbShzaWduZWRFeHBvcnRIZXgpO1xuICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIGNvbnN0IHJhd1R4ID0gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICAgIHJhd1R4LnNob3VsZC5lcXVhbChzaWduZWRFeHBvcnRIZXgpO1xuICAgICAgdHguaWQuc2hvdWxkLmVxdWFsKCcza1hVc0hpeDFiWlJROWhxVWMyNGNwN3NYRml5MkxiUG42RWgySFFDQWFNVWk3NXM5Jyk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
@@ -0,0 +1,2 @@
1
+ import 'should';
2
+ //# sourceMappingURL=exportInPTxBuilder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exportInPTxBuilder.d.ts","sourceRoot":"","sources":["../../../../test/unit/lib/exportInPTxBuilder.ts"],"names":[],"mappings":"AACA,OAAO,QAAQ,CAAC"}
@@ -0,0 +1,191 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const assert_1 = __importDefault(require("assert"));
7
+ require("should");
8
+ const exportInP_1 = require("../../resources/transactionData/exportInP");
9
+ const lib_1 = require("../../../src/lib");
10
+ const statics_1 = require("@bitgo-beta/statics");
11
+ const signFlowTestSuit_1 = __importDefault(require("./signFlowTestSuit"));
12
+ describe('Flrp Export In P Tx Builder', () => {
13
+ const coinConfig = statics_1.coins.get('tflrp');
14
+ const factory = new lib_1.TransactionBuilderFactory(coinConfig);
15
+ describe('validate txBuilder fields', () => {
16
+ const txBuilder = factory.getExportInPBuilder();
17
+ it('should fail amount low than zero', () => {
18
+ assert_1.default.throws(() => {
19
+ txBuilder.amount('-1');
20
+ }, (e) => e.message === 'Amount must be greater than 0');
21
+ });
22
+ it('should fail target chain id length incorrect', () => {
23
+ assert_1.default.throws(() => {
24
+ txBuilder.externalChainId(Buffer.from(exportInP_1.EXPORT_IN_P.INVALID_CHAIN_ID.slice(2)));
25
+ }, (e) => e.message === 'Chain id are 32 byte size');
26
+ });
27
+ it('should fail target chain id not a valid base58 string', () => {
28
+ assert_1.default.throws(() => {
29
+ txBuilder.externalChainId(exportInP_1.EXPORT_IN_P.INVALID_CHAIN_ID);
30
+ }, (e) => e.message === 'Non-base58 character');
31
+ });
32
+ it('should fail target chain id cb58 invalid checksum', () => {
33
+ assert_1.default.throws(() => {
34
+ txBuilder.externalChainId(exportInP_1.EXPORT_IN_P.VALID_C_CHAIN_ID.slice(2));
35
+ }, (e) => e.message === 'Invalid checksum');
36
+ });
37
+ it('should fail validate Utxos empty string', () => {
38
+ assert_1.default.throws(() => {
39
+ txBuilder.validateUtxos([]);
40
+ }, (e) => e.message === 'UTXOs array cannot be empty');
41
+ });
42
+ it('should throw if feeState is not set', async () => {
43
+ const txBuilder = factory
44
+ .getExportInPBuilder()
45
+ .threshold(exportInP_1.EXPORT_IN_P.threshold)
46
+ .locktime(exportInP_1.EXPORT_IN_P.locktime)
47
+ .fromPubKey(exportInP_1.EXPORT_IN_P.pAddresses)
48
+ .amount('500000000')
49
+ .externalChainId(exportInP_1.EXPORT_IN_P.sourceChainId);
50
+ await txBuilder.build().should.be.rejectedWith('Fee state is required');
51
+ });
52
+ it('should accept valid feeState', () => {
53
+ const txBuilder = factory.getExportInPBuilder();
54
+ (() => txBuilder.feeState(exportInP_1.EXPORT_IN_P.feeState)).should.not.throw();
55
+ });
56
+ it('should throw if context is not set', async () => {
57
+ const txBuilder = factory
58
+ .getExportInPBuilder()
59
+ .threshold(exportInP_1.EXPORT_IN_P.threshold)
60
+ .locktime(exportInP_1.EXPORT_IN_P.locktime)
61
+ .fromPubKey(exportInP_1.EXPORT_IN_P.pAddresses)
62
+ .amount('500000000')
63
+ .externalChainId(exportInP_1.EXPORT_IN_P.sourceChainId)
64
+ .feeState(exportInP_1.EXPORT_IN_P.feeState)
65
+ .decodedUtxos(exportInP_1.EXPORT_IN_P.utxos);
66
+ // context is NOT set
67
+ await txBuilder.build().should.be.rejectedWith('context is required');
68
+ });
69
+ it('should fail when utxos hex array is empty', () => {
70
+ const txBuilder = factory.getExportInPBuilder();
71
+ assert_1.default.throws(() => {
72
+ txBuilder.decodedUtxos([]);
73
+ }, (e) => e.message === 'UTXOs array cannot be empty');
74
+ });
75
+ it('should throw if amount is not set', async () => {
76
+ const txBuilder = factory
77
+ .getExportInPBuilder()
78
+ .threshold(exportInP_1.EXPORT_IN_P.threshold)
79
+ .locktime(exportInP_1.EXPORT_IN_P.locktime)
80
+ .fromPubKey(exportInP_1.EXPORT_IN_P.pAddresses)
81
+ .externalChainId(exportInP_1.EXPORT_IN_P.sourceChainId)
82
+ .feeState(exportInP_1.EXPORT_IN_P.feeState)
83
+ .context(exportInP_1.EXPORT_IN_P.context)
84
+ .decodedUtxos(exportInP_1.EXPORT_IN_P.utxos);
85
+ // amount is NOT set
86
+ await txBuilder.build().should.be.rejectedWith('amount is required');
87
+ });
88
+ });
89
+ (0, signFlowTestSuit_1.default)({
90
+ transactionType: 'Export P2C with changeoutput',
91
+ newTxFactory: () => new lib_1.TransactionBuilderFactory(statics_1.coins.get('tflrp')),
92
+ newTxBuilder: () => new lib_1.TransactionBuilderFactory(statics_1.coins.get('tflrp'))
93
+ .getExportInPBuilder()
94
+ .threshold(exportInP_1.EXPORT_IN_P.threshold)
95
+ .locktime(exportInP_1.EXPORT_IN_P.locktime)
96
+ .fromPubKey(exportInP_1.EXPORT_IN_P.pAddresses)
97
+ .amount(exportInP_1.EXPORT_IN_P.amount)
98
+ .externalChainId(exportInP_1.EXPORT_IN_P.sourceChainId)
99
+ .feeState(exportInP_1.EXPORT_IN_P.feeState)
100
+ .context(exportInP_1.EXPORT_IN_P.context)
101
+ .decodedUtxos(exportInP_1.EXPORT_IN_P.utxos),
102
+ unsignedTxHex: exportInP_1.EXPORT_IN_P.unsignedHex,
103
+ halfSignedTxHex: exportInP_1.EXPORT_IN_P.halfSigntxHex,
104
+ fullSignedTxHex: exportInP_1.EXPORT_IN_P.fullSigntxHex,
105
+ privateKey: {
106
+ prv1: exportInP_1.EXPORT_IN_P.privateKeys[2],
107
+ prv2: exportInP_1.EXPORT_IN_P.privateKeys[0],
108
+ },
109
+ txHash: exportInP_1.EXPORT_IN_P.txhash,
110
+ });
111
+ it('Should full sign a export tx from unsigned raw tx', () => {
112
+ const txBuilder = new lib_1.TransactionBuilderFactory(statics_1.coins.get('tflrp')).from(exportInP_1.EXPORT_IN_P.unsignedHex);
113
+ txBuilder.sign({ key: exportInP_1.EXPORT_IN_P.privateKeys[0] });
114
+ txBuilder
115
+ .build()
116
+ .then(() => assert_1.default.fail('it can sign'))
117
+ .catch((err) => {
118
+ err.message.should.be.equal('Private key cannot sign the transaction');
119
+ });
120
+ });
121
+ describe('addressesIndex extraction and signature ordering', () => {
122
+ it('should extract addressesIndex from parsed transaction inputs', async () => {
123
+ const txBuilder = factory.from(exportInP_1.EXPORT_IN_P.halfSigntxHex);
124
+ const tx = await txBuilder.build();
125
+ const txJson = tx.toJson();
126
+ txJson.type.should.equal(22);
127
+ txJson.signatures.length.should.be.greaterThan(0);
128
+ });
129
+ it('should correctly handle fresh build with proper signature ordering', async () => {
130
+ const txBuilder = factory
131
+ .getExportInPBuilder()
132
+ .threshold(exportInP_1.EXPORT_IN_P.threshold)
133
+ .locktime(exportInP_1.EXPORT_IN_P.locktime)
134
+ .fromPubKey(exportInP_1.EXPORT_IN_P.pAddresses)
135
+ .amount(exportInP_1.EXPORT_IN_P.amount)
136
+ .externalChainId(exportInP_1.EXPORT_IN_P.sourceChainId)
137
+ .feeState(exportInP_1.EXPORT_IN_P.feeState)
138
+ .context(exportInP_1.EXPORT_IN_P.context)
139
+ .decodedUtxos(exportInP_1.EXPORT_IN_P.utxos);
140
+ txBuilder.sign({ key: exportInP_1.EXPORT_IN_P.privateKeys[2] });
141
+ const tx = await txBuilder.build();
142
+ const txJson = tx.toJson();
143
+ txJson.type.should.equal(22);
144
+ tx.toBroadcastFormat().should.be.a.String();
145
+ });
146
+ it('should correctly build and sign with different UTXO address ordering', async () => {
147
+ const reorderedUtxos = exportInP_1.EXPORT_IN_P.utxos.map((utxo) => ({
148
+ ...utxo,
149
+ addresses: [exportInP_1.EXPORT_IN_P.pAddresses[1], exportInP_1.EXPORT_IN_P.pAddresses[2], exportInP_1.EXPORT_IN_P.pAddresses[0]],
150
+ }));
151
+ const txBuilder = factory
152
+ .getExportInPBuilder()
153
+ .threshold(exportInP_1.EXPORT_IN_P.threshold)
154
+ .locktime(exportInP_1.EXPORT_IN_P.locktime)
155
+ .fromPubKey(exportInP_1.EXPORT_IN_P.pAddresses)
156
+ .amount(exportInP_1.EXPORT_IN_P.amount)
157
+ .externalChainId(exportInP_1.EXPORT_IN_P.sourceChainId)
158
+ .feeState(exportInP_1.EXPORT_IN_P.feeState)
159
+ .context(exportInP_1.EXPORT_IN_P.context)
160
+ .decodedUtxos(reorderedUtxos);
161
+ txBuilder.sign({ key: exportInP_1.EXPORT_IN_P.privateKeys[2] });
162
+ const tx = await txBuilder.build();
163
+ const txJson = tx.toJson();
164
+ txJson.type.should.equal(22);
165
+ tx.toBroadcastFormat().should.be.a.String();
166
+ });
167
+ it('should handle parse-sign-parse-sign flow correctly', async () => {
168
+ const txBuilder = factory
169
+ .getExportInPBuilder()
170
+ .threshold(exportInP_1.EXPORT_IN_P.threshold)
171
+ .locktime(exportInP_1.EXPORT_IN_P.locktime)
172
+ .fromPubKey(exportInP_1.EXPORT_IN_P.pAddresses)
173
+ .amount(exportInP_1.EXPORT_IN_P.amount)
174
+ .externalChainId(exportInP_1.EXPORT_IN_P.sourceChainId)
175
+ .feeState(exportInP_1.EXPORT_IN_P.feeState)
176
+ .context(exportInP_1.EXPORT_IN_P.context)
177
+ .decodedUtxos(exportInP_1.EXPORT_IN_P.utxos);
178
+ txBuilder.sign({ key: exportInP_1.EXPORT_IN_P.privateKeys[2] });
179
+ const halfSignedTx = await txBuilder.build();
180
+ const halfSignedHex = halfSignedTx.toBroadcastFormat();
181
+ const txBuilder2 = factory.from(halfSignedHex);
182
+ txBuilder2.sign({ key: exportInP_1.EXPORT_IN_P.privateKeys[0] });
183
+ const fullSignedTx = await txBuilder2.build();
184
+ const fullSignedJson = fullSignedTx.toJson();
185
+ fullSignedJson.type.should.equal(22);
186
+ fullSignedJson.signatures.length.should.be.greaterThan(0);
187
+ fullSignedTx.toBroadcastFormat().should.be.a.String();
188
+ });
189
+ });
190
+ });
191
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwb3J0SW5QVHhCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC91bml0L2xpYi9leHBvcnRJblBUeEJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxvREFBNEI7QUFDNUIsa0JBQWdCO0FBQ2hCLHlFQUFvRjtBQUNwRiwwQ0FBNkQ7QUFDN0QsaURBQTRDO0FBQzVDLDBFQUE4QztBQUU5QyxRQUFRLENBQUMsNkJBQTZCLEVBQUUsR0FBRyxFQUFFO0lBQzNDLE1BQU0sVUFBVSxHQUFHLGVBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDdEMsTUFBTSxPQUFPLEdBQUcsSUFBSSwrQkFBeUIsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUUxRCxRQUFRLENBQUMsMkJBQTJCLEVBQUUsR0FBRyxFQUFFO1FBQ3pDLE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQ2hELEVBQUUsQ0FBQyxrQ0FBa0MsRUFBRSxHQUFHLEVBQUU7WUFDMUMsZ0JBQU0sQ0FBQyxNQUFNLENBQ1gsR0FBRyxFQUFFO2dCQUNILFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDekIsQ0FBQyxFQUNELENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxLQUFLLCtCQUErQixDQUMxRCxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7UUFDSCxFQUFFLENBQUMsOENBQThDLEVBQUUsR0FBRyxFQUFFO1lBQ3RELGdCQUFNLENBQUMsTUFBTSxDQUNYLEdBQUcsRUFBRTtnQkFDSCxTQUFTLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsdUJBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzdFLENBQUMsRUFDRCxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxD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Q3pCLFlBQVksQ0FBQyx1QkFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBRWhDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsdUJBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2pELE1BQU0sWUFBWSxHQUFHLE1BQU0sU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQzdDLE1BQU0sYUFBYSxHQUFHLFlBQVksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBRXZELE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDL0MsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSx1QkFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDbEQsTUFBTSxZQUFZLEdBQUcsTUFBTSxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDOUMsTUFBTSxjQUFjLEdBQUcsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBRTdDLGNBQWMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNyQyxjQUFjLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMxRCxZQUFZLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUN4RCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgJ3Nob3VsZCc7XG5pbXBvcnQgeyBFWFBPUlRfSU5fUCBhcyB0ZXN0RGF0YSB9IGZyb20gJy4uLy4uL3Jlc291cmNlcy90cmFuc2FjdGlvbkRhdGEvZXhwb3J0SW5QJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkgfSBmcm9tICcuLi8uLi8uLi9zcmMvbGliJztcbmltcG9ydCB7IGNvaW5zIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5pbXBvcnQgc2lnbkZsb3dUZXN0IGZyb20gJy4vc2lnbkZsb3dUZXN0U3VpdCc7XG5cbmRlc2NyaWJlKCdGbHJwIEV4cG9ydCBJbiBQIFR4IEJ1aWxkZXInLCAoKSA9PiB7XG4gIGNvbnN0IGNvaW5Db25maWcgPSBjb2lucy5nZXQoJ3RmbHJwJyk7XG4gIGNvbnN0IGZhY3RvcnkgPSBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2luQ29uZmlnKTtcblxuICBkZXNjcmliZSgndmFsaWRhdGUgdHhCdWlsZGVyIGZpZWxkcycsICgpID0+IHtcbiAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldEV4cG9ydEluUEJ1aWxkZXIoKTtcbiAgICBpdCgnc2hvdWxkIGZhaWwgYW1vdW50IGxvdyB0aGFuIHplcm8nLCAoKSA9PiB7XG4gICAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgdHhCdWlsZGVyLmFtb3VudCgnLTEnKTtcbiAgICAgICAgfSxcbiAgICAgICAgKGU6IGFueSkgPT4gZS5tZXNzYWdlID09PSAnQW1vdW50IG11c3QgYmUgZ3JlYXRlciB0aGFuIDAnXG4gICAgICApO1xuICAgIH0pO1xuICAgIGl0KCdzaG91bGQgZmFpbCB0YXJnZXQgY2hhaW4gaWQgbGVuZ3RoIGluY29ycmVjdCcsICgpID0+IHtcbiAgICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICB0eEJ1aWxkZXIuZXh0ZXJuYWxDaGFpbklkKEJ1ZmZlci5mcm9tKHRlc3REYXRhLklOVkFMSURfQ0hBSU5fSUQuc2xpY2UoMikpKTtcbiAgICAgICAgfSxcbiAgICAgICAgKGU6IGFueSkgPT4gZS5tZXNzYWdlID09PSAnQ2hhaW4gaWQgYXJlIDMyIGJ5dGUgc2l6ZSdcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgdGFyZ2V0IGNoYWluIGlkIG5vdCBhIHZhbGlkIGJhc2U1OCBzdHJpbmcnLCAoKSA9PiB7XG4gICAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgdHhCdWlsZGVyLmV4dGVybmFsQ2hhaW5JZCh0ZXN0RGF0YS5JTlZBTElEX0NIQUlOX0lEKTtcbiAgICAgICAgfSxcbiAgICAgICAgKGU6IGFueSkgPT4gZS5tZXNzYWdlID09PSAnTm9uLWJhc2U1OCBjaGFyYWN0ZXInXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWlsIHRhcmdldCBjaGFpbiBpZCBjYjU4IGludmFsaWQgY2hlY2tzdW0nLCAoKSA9PiB7XG4gICAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgdHhCdWlsZGVyLmV4dGVybmFsQ2hhaW5JZCh0ZXN0RGF0YS5WQUxJRF9DX0NIQUlOX0lELnNsaWNlKDIpKTtcbiAgICAgICAgfSxcbiAgICAgICAgKGU6IGFueSkgPT4gZS5tZXNzYWdlID09PSAnSW52YWxpZCBjaGVja3N1bSdcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgdmFsaWRhdGUgVXR4b3MgZW1wdHkgc3RyaW5nJywgKCkgPT4ge1xuICAgICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIHR4QnVpbGRlci52YWxpZGF0ZVV0eG9zKFtdKTtcbiAgICAgICAgfSxcbiAgICAgICAgKGU6IGFueSkgPT4gZS5tZXNzYWdlID09PSAnVVRYT3MgYXJyYXkgY2Fubm90IGJlIGVtcHR5J1xuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgaWYgZmVlU3RhdGUgaXMgbm90IHNldCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnlcbiAgICAgICAgLmdldEV4cG9ydEluUEJ1aWxkZXIoKVxuICAgICAgICAudGhyZXNob2xkKHRlc3REYXRhLnRocmVzaG9sZClcbiAgICAgICAgLmxvY2t0aW1lKHRlc3REYXRhLmxvY2t0aW1lKVxuICAgICAgICAuZnJvbVB1YktleSh0ZXN0RGF0YS5wQWRkcmVzc2VzKVxuICAgICAgICAuYW1vdW50KCc1MDAwMDAwMDAnKVxuICAgICAgICAuZXh0ZXJuYWxDaGFpbklkKHRlc3REYXRhLnNvdXJjZUNoYWluSWQpO1xuXG4gICAgICBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdGZWUgc3RhdGUgaXMgcmVxdWlyZWQnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYWNjZXB0IHZhbGlkIGZlZVN0YXRlJywgKCkgPT4ge1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRFeHBvcnRJblBCdWlsZGVyKCk7XG4gICAgICAoKCkgPT4gdHhCdWlsZGVyLmZlZVN0YXRlKHRlc3REYXRhLmZlZVN0YXRlKSkuc2hvdWxkLm5vdC50aHJvdygpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBpZiBjb250ZXh0IGlzIG5vdCBzZXQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5XG4gICAgICAgIC5nZXRFeHBvcnRJblBCdWlsZGVyKClcbiAgICAgICAgLnRocmVzaG9sZCh0ZXN0RGF0YS50aHJlc2hvbGQpXG4gICAgICAgIC5sb2NrdGltZSh0ZXN0RGF0YS5sb2NrdGltZSlcbiAgICAgICAgLmZyb21QdWJLZXkodGVzdERhdGEucEFkZHJlc3NlcylcbiAgICAgICAgLmFtb3VudCgnNTAwMDAwMDAwJylcbiAgICAgICAgLmV4dGVybmFsQ2hhaW5JZCh0ZXN0RGF0YS5zb3VyY2VDaGFpbklkKVxuICAgICAgICAuZmVlU3RhdGUodGVzdERhdGEuZmVlU3RhdGUpXG4gICAgICAgIC5kZWNvZGVkVXR4b3ModGVzdERhdGEudXR4b3MpO1xuICAgICAgLy8gY29udGV4dCBpcyBOT1Qgc2V0XG5cbiAgICAgIGF3YWl0IHR4QnVpbGRlci5idWlsZCgpLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ2NvbnRleHQgaXMgcmVxdWlyZWQnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZmFpbCB3aGVuIHV0eG9zIGhleCBhcnJheSBpcyBlbXB0eScsICgpID0+IHtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZ2V0RXhwb3J0SW5QQnVpbGRlcigpO1xuICAgICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIHR4QnVpbGRlci5kZWNvZGVkVXR4b3MoW10pO1xuICAgICAgICB9LFxuICAgICAgICAoZTogYW55KSA9PiBlLm1lc3NhZ2UgPT09ICdVVFhPcyBhcnJheSBjYW5ub3QgYmUgZW1wdHknXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBpZiBhbW91bnQgaXMgbm90IHNldCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnlcbiAgICAgICAgLmdldEV4cG9ydEluUEJ1aWxkZXIoKVxuICAgICAgICAudGhyZXNob2xkKHRlc3REYXRhLnRocmVzaG9sZClcbiAgICAgICAgLmxvY2t0aW1lKHRlc3REYXRhLmxvY2t0aW1lKVxuICAgICAgICAuZnJvbVB1YktleSh0ZXN0RGF0YS5wQWRkcmVzc2VzKVxuICAgICAgICAuZXh0ZXJuYWxDaGFpbklkKHRlc3REYXRhLnNvdXJjZUNoYWluSWQpXG4gICAgICAgIC5mZWVTdGF0ZSh0ZXN0RGF0YS5mZWVTdGF0ZSlcbiAgICAgICAgLmNvbnRleHQodGVzdERhdGEuY29udGV4dClcbiAgICAgICAgLmRlY29kZWRVdHhvcyh0ZXN0RGF0YS51dHhvcyk7XG4gICAgICAvLyBhbW91bnQgaXMgTk9UIHNldFxuXG4gICAgICBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdhbW91bnQgaXMgcmVxdWlyZWQnKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgc2lnbkZsb3dUZXN0KHtcbiAgICB0cmFuc2FjdGlvblR5cGU6ICdFeHBvcnQgUDJDIHdpdGggY2hhbmdlb3V0cHV0JyxcbiAgICBuZXdUeEZhY3Rvcnk6ICgpID0+IG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5zLmdldCgndGZscnAnKSksXG4gICAgbmV3VHhCdWlsZGVyOiAoKSA9PlxuICAgICAgbmV3IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbnMuZ2V0KCd0ZmxycCcpKVxuICAgICAgICAuZ2V0RXhwb3J0SW5QQnVpbGRlcigpXG4gICAgICAgIC50aHJlc2hvbGQodGVzdERhdGEudGhyZXNob2xkKVxuICAgICAgICAubG9ja3RpbWUodGVzdERhdGEubG9ja3RpbWUpXG4gICAgICAgIC5mcm9tUHViS2V5KHRlc3REYXRhLnBBZGRyZXNzZXMpXG4gICAgICAgIC5hbW91bnQodGVzdERhdGEuYW1vdW50KVxuICAgICAgICAuZXh0ZXJuYWxDaGFpbklkKHRlc3REYXRhLnNvdXJjZUNoYWluSWQpXG4gICAgICAgIC5mZWVTdGF0ZSh0ZXN0RGF0YS5mZWVTdGF0ZSlcbiAgICAgICAgLmNvbnRleHQodGVzdERhdGEuY29udGV4dClcbiAgICAgICAgLmRlY29kZWRVdHhvcyh0ZXN0RGF0YS51dHhvcyksXG4gICAgdW5zaWduZWRUeEhleDogdGVzdERhdGEudW5zaWduZWRIZXgsXG4gICAgaGFsZlNpZ25lZFR4SGV4OiB0ZXN0RGF0YS5oYWxmU2lnbnR4SGV4LFxuICAgIGZ1bGxTaWduZWRUeEhleDogdGVzdERhdGEuZnVsbFNpZ250eEhleCxcbiAgICBwcml2YXRlS2V5OiB7XG4gICAgICBwcnYxOiB0ZXN0RGF0YS5wcml2YXRlS2V5c1syXSxcbiAgICAgIHBydjI6IHRlc3REYXRhLnByaXZhdGVLZXlzWzBdLFxuICAgIH0sXG4gICAgdHhIYXNoOiB0ZXN0RGF0YS50eGhhc2gsXG4gIH0pO1xuXG4gIGl0KCdTaG91bGQgZnVsbCBzaWduIGEgZXhwb3J0IHR4IGZyb20gdW5zaWduZWQgcmF3IHR4JywgKCkgPT4ge1xuICAgIGNvbnN0IHR4QnVpbGRlciA9IG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5zLmdldCgndGZscnAnKSkuZnJvbSh0ZXN0RGF0YS51bnNpZ25lZEhleCk7XG4gICAgdHhCdWlsZGVyLnNpZ24oeyBrZXk6IHRlc3REYXRhLnByaXZhdGVLZXlzWzBdIH0pO1xuICAgIHR4QnVpbGRlclxuICAgICAgLmJ1aWxkKClcbiAgICAgIC50aGVuKCgpID0+IGFzc2VydC5mYWlsKCdpdCBjYW4gc2lnbicpKVxuICAgICAgLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgZXJyLm1lc3NhZ2Uuc2hvdWxkLmJlLmVxdWFsKCdQcml2YXRlIGtleSBjYW5ub3Qgc2lnbiB0aGUgdHJhbnNhY3Rpb24nKTtcbiAgICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnYWRkcmVzc2VzSW5kZXggZXh0cmFjdGlvbiBhbmQgc2lnbmF0dXJlIG9yZGVyaW5nJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgZXh0cmFjdCBhZGRyZXNzZXNJbmRleCBmcm9tIHBhcnNlZCB0cmFuc2FjdGlvbiBpbnB1dHMnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmZyb20odGVzdERhdGEuaGFsZlNpZ250eEhleCk7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3QgdHhKc29uID0gdHgudG9Kc29uKCk7XG5cbiAgICAgIHR4SnNvbi50eXBlLnNob3VsZC5lcXVhbCgyMik7XG4gICAgICB0eEpzb24uc2lnbmF0dXJlcy5sZW5ndGguc2hvdWxkLmJlLmdyZWF0ZXJUaGFuKDApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBjb3JyZWN0bHkgaGFuZGxlIGZyZXNoIGJ1aWxkIHdpdGggcHJvcGVyIHNpZ25hdHVyZSBvcmRlcmluZycsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnlcbiAgICAgICAgLmdldEV4cG9ydEluUEJ1aWxkZXIoKVxuICAgICAgICAudGhyZXNob2xkKHRlc3REYXRhLnRocmVzaG9sZClcbiAgICAgICAgLmxvY2t0aW1lKHRlc3REYXRhLmxvY2t0aW1lKVxuICAgICAgICAuZnJvbVB1YktleSh0ZXN0RGF0YS5wQWRkcmVzc2VzKVxuICAgICAgICAuYW1vdW50KHRlc3REYXRhLmFtb3VudClcbiAgICAgICAgLmV4dGVybmFsQ2hhaW5JZCh0ZXN0RGF0YS5zb3VyY2VDaGFpbklkKVxuICAgICAgICAuZmVlU3RhdGUodGVzdERhdGEuZmVlU3RhdGUpXG4gICAgICAgIC5jb250ZXh0KHRlc3REYXRhLmNvbnRleHQpXG4gICAgICAgIC5kZWNvZGVkVXR4b3ModGVzdERhdGEudXR4b3MpO1xuXG4gICAgICB0eEJ1aWxkZXIuc2lnbih7IGtleTogdGVzdERhdGEucHJpdmF0ZUtleXNbMl0gfSk7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3QgdHhKc29uID0gdHgudG9Kc29uKCk7XG5cbiAgICAgIHR4SnNvbi50eXBlLnNob3VsZC5lcXVhbCgyMik7XG4gICAgICB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpLnNob3VsZC5iZS5hLlN0cmluZygpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBjb3JyZWN0bHkgYnVpbGQgYW5kIHNpZ24gd2l0aCBkaWZmZXJlbnQgVVRYTyBhZGRyZXNzIG9yZGVyaW5nJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcmVvcmRlcmVkVXR4b3MgPSB0ZXN0RGF0YS51dHhvcy5tYXAoKHV0eG8pID0+ICh7XG4gICAgICAgIC4uLnV0eG8sXG4gICAgICAgIGFkZHJlc3NlczogW3Rlc3REYXRhLnBBZGRyZXNzZXNbMV0sIHRlc3REYXRhLnBBZGRyZXNzZXNbMl0sIHRlc3REYXRhLnBBZGRyZXNzZXNbMF1dLFxuICAgICAgfSkpO1xuXG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5XG4gICAgICAgIC5nZXRFeHBvcnRJblBCdWlsZGVyKClcbiAgICAgICAgLnRocmVzaG9sZCh0ZXN0RGF0YS50aHJlc2hvbGQpXG4gICAgICAgIC5sb2NrdGltZSh0ZXN0RGF0YS5sb2NrdGltZSlcbiAgICAgICAgLmZyb21QdWJLZXkodGVzdERhdGEucEFkZHJlc3NlcylcbiAgICAgICAgLmFtb3VudCh0ZXN0RGF0YS5hbW91bnQpXG4gICAgICAgIC5leHRlcm5hbENoYWluSWQodGVzdERhdGEuc291cmNlQ2hhaW5JZClcbiAgICAgICAgLmZlZVN0YXRlKHRlc3REYXRhLmZlZVN0YXRlKVxuICAgICAgICAuY29udGV4dCh0ZXN0RGF0YS5jb250ZXh0KVxuICAgICAgICAuZGVjb2RlZFV0eG9zKHJlb3JkZXJlZFV0eG9zKTtcblxuICAgICAgdHhCdWlsZGVyLnNpZ24oeyBrZXk6IHRlc3REYXRhLnByaXZhdGVLZXlzWzJdIH0pO1xuICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIGNvbnN0IHR4SnNvbiA9IHR4LnRvSnNvbigpO1xuXG4gICAgICB0eEpzb24udHlwZS5zaG91bGQuZXF1YWwoMjIpO1xuICAgICAgdHgudG9Ccm9hZGNhc3RGb3JtYXQoKS5zaG91bGQuYmUuYS5TdHJpbmcoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaGFuZGxlIHBhcnNlLXNpZ24tcGFyc2Utc2lnbiBmbG93IGNvcnJlY3RseScsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnlcbiAgICAgICAgLmdldEV4cG9ydEluUEJ1aWxkZXIoKVxuICAgICAgICAudGhyZXNob2xkKHRlc3REYXRhLnRocmVzaG9sZClcbiAgICAgICAgLmxvY2t0aW1lKHRlc3REYXRhLmxvY2t0aW1lKVxuICAgICAgICAuZnJvbVB1YktleSh0ZXN0RGF0YS5wQWRkcmVzc2VzKVxuICAgICAgICAuYW1vdW50KHRlc3REYXRhLmFtb3VudClcbiAgICAgICAgLmV4dGVybmFsQ2hhaW5JZCh0ZXN0RGF0YS5zb3VyY2VDaGFpbklkKVxuICAgICAgICAuZmVlU3RhdGUodGVzdERhdGEuZmVlU3RhdGUpXG4gICAgICAgIC5jb250ZXh0KHRlc3REYXRhLmNvbnRleHQpXG4gICAgICAgIC5kZWNvZGVkVXR4b3ModGVzdERhdGEudXR4b3MpO1xuXG4gICAgICB0eEJ1aWxkZXIuc2lnbih7IGtleTogdGVzdERhdGEucHJpdmF0ZUtleXNbMl0gfSk7XG4gICAgICBjb25zdCBoYWxmU2lnbmVkVHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIGNvbnN0IGhhbGZTaWduZWRIZXggPSBoYWxmU2lnbmVkVHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcblxuICAgICAgY29uc3QgdHhCdWlsZGVyMiA9IGZhY3RvcnkuZnJvbShoYWxmU2lnbmVkSGV4KTtcbiAgICAgIHR4QnVpbGRlcjIuc2lnbih7IGtleTogdGVzdERhdGEucHJpdmF0ZUtleXNbMF0gfSk7XG4gICAgICBjb25zdCBmdWxsU2lnbmVkVHggPSBhd2FpdCB0eEJ1aWxkZXIyLmJ1aWxkKCk7XG4gICAgICBjb25zdCBmdWxsU2lnbmVkSnNvbiA9IGZ1bGxTaWduZWRUeC50b0pzb24oKTtcblxuICAgICAgZnVsbFNpZ25lZEpzb24udHlwZS5zaG91bGQuZXF1YWwoMjIpO1xuICAgICAgZnVsbFNpZ25lZEpzb24uc2lnbmF0dXJlcy5sZW5ndGguc2hvdWxkLmJlLmdyZWF0ZXJUaGFuKDApO1xuICAgICAgZnVsbFNpZ25lZFR4LnRvQnJvYWRjYXN0Rm9ybWF0KCkuc2hvdWxkLmJlLmEuU3RyaW5nKCk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
@@ -0,0 +1,2 @@
1
+ import 'should';
2
+ //# sourceMappingURL=importInCTxBuilder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"importInCTxBuilder.d.ts","sourceRoot":"","sources":["../../../../test/unit/lib/importInCTxBuilder.ts"],"names":[],"mappings":"AACA,OAAO,QAAQ,CAAC"}