@bitgo-beta/sdk-coin-sui 1.4.1-alpha.9 → 3.0.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 (126) hide show
  1. package/.eslintignore +1 -0
  2. package/CHANGELOG.md +122 -0
  3. package/dist/src/index.d.ts +1 -0
  4. package/dist/src/index.d.ts.map +1 -1
  5. package/dist/src/index.js +2 -1
  6. package/dist/src/lib/constants.d.ts +7 -8
  7. package/dist/src/lib/constants.d.ts.map +1 -1
  8. package/dist/src/lib/constants.js +10 -13
  9. package/dist/src/lib/iface.d.ts +53 -51
  10. package/dist/src/lib/iface.d.ts.map +1 -1
  11. package/dist/src/lib/iface.js +26 -1
  12. package/dist/src/lib/index.d.ts +5 -0
  13. package/dist/src/lib/index.d.ts.map +1 -1
  14. package/dist/src/lib/index.js +12 -2
  15. package/dist/src/lib/keyPair.d.ts +11 -0
  16. package/dist/src/lib/keyPair.d.ts.map +1 -1
  17. package/dist/src/lib/keyPair.js +21 -10
  18. package/dist/src/lib/mystenlab/builder/Inputs.d.ts +66 -0
  19. package/dist/src/lib/mystenlab/builder/Inputs.d.ts.map +1 -0
  20. package/dist/src/lib/mystenlab/builder/Inputs.js +56 -0
  21. package/dist/src/lib/mystenlab/builder/TransactionBlock.d.ts +616 -0
  22. package/dist/src/lib/mystenlab/builder/TransactionBlock.d.ts.map +1 -0
  23. package/dist/src/lib/mystenlab/builder/TransactionBlock.js +260 -0
  24. package/dist/src/lib/mystenlab/builder/TransactionDataBlock.d.ts +566 -0
  25. package/dist/src/lib/mystenlab/builder/TransactionDataBlock.d.ts.map +1 -0
  26. package/dist/src/lib/mystenlab/builder/TransactionDataBlock.js +171 -0
  27. package/dist/src/lib/mystenlab/builder/Transactions.d.ts +992 -0
  28. package/dist/src/lib/mystenlab/builder/Transactions.d.ts.map +1 -0
  29. package/dist/src/lib/mystenlab/builder/Transactions.js +119 -0
  30. package/dist/src/lib/mystenlab/builder/bcs.d.ts +25 -0
  31. package/dist/src/lib/mystenlab/builder/bcs.d.ts.map +1 -0
  32. package/dist/src/lib/mystenlab/builder/bcs.js +141 -0
  33. package/dist/src/lib/mystenlab/builder/index.d.ts +5 -0
  34. package/dist/src/lib/mystenlab/builder/index.d.ts.map +1 -0
  35. package/dist/src/lib/mystenlab/builder/index.js +17 -0
  36. package/dist/src/lib/mystenlab/builder/serializer.d.ts +4 -0
  37. package/dist/src/lib/mystenlab/builder/serializer.d.ts.map +1 -0
  38. package/dist/src/lib/mystenlab/builder/serializer.js +101 -0
  39. package/dist/src/lib/mystenlab/builder/utils.d.ts +10 -0
  40. package/dist/src/lib/mystenlab/builder/utils.d.ts.map +1 -0
  41. package/dist/src/lib/mystenlab/builder/utils.js +10 -0
  42. package/dist/src/lib/mystenlab/cryptography/hash.d.ts +8 -0
  43. package/dist/src/lib/mystenlab/cryptography/hash.d.ts.map +1 -0
  44. package/dist/src/lib/mystenlab/cryptography/hash.js +22 -0
  45. package/dist/src/lib/mystenlab/framework/framework.d.ts +93 -0
  46. package/dist/src/lib/mystenlab/framework/framework.d.ts.map +1 -0
  47. package/dist/src/lib/mystenlab/framework/framework.js +138 -0
  48. package/dist/src/lib/mystenlab/framework/index.d.ts +3 -0
  49. package/dist/src/lib/mystenlab/framework/index.d.ts.map +1 -0
  50. package/dist/src/lib/mystenlab/framework/index.js +15 -0
  51. package/dist/src/lib/mystenlab/framework/sui-system-state.d.ts +12 -0
  52. package/dist/src/lib/mystenlab/framework/sui-system-state.d.ts.map +1 -0
  53. package/dist/src/lib/mystenlab/framework/sui-system-state.js +19 -0
  54. package/dist/src/lib/mystenlab/txn-data-serializers/type-tag-serializer.d.ts +7 -0
  55. package/dist/src/lib/mystenlab/txn-data-serializers/type-tag-serializer.d.ts.map +1 -0
  56. package/dist/src/lib/mystenlab/txn-data-serializers/type-tag-serializer.js +119 -0
  57. package/dist/src/lib/mystenlab/types/coin.d.ts +89 -0
  58. package/dist/src/lib/mystenlab/types/coin.d.ts.map +1 -0
  59. package/dist/src/lib/mystenlab/types/coin.js +32 -0
  60. package/dist/src/lib/mystenlab/types/common.d.ts +45 -0
  61. package/dist/src/lib/mystenlab/types/common.d.ts.map +1 -0
  62. package/dist/src/lib/mystenlab/types/common.js +84 -0
  63. package/dist/src/lib/mystenlab/types/events.d.ts +198 -0
  64. package/dist/src/lib/mystenlab/types/events.d.ts.map +1 -0
  65. package/dist/src/lib/mystenlab/types/events.js +46 -0
  66. package/dist/src/lib/mystenlab/types/index.d.ts +9 -0
  67. package/dist/src/lib/mystenlab/types/index.d.ts.map +1 -0
  68. package/dist/src/lib/mystenlab/types/index.js +21 -0
  69. package/dist/src/lib/mystenlab/types/normalized.d.ts +254 -0
  70. package/dist/src/lib/mystenlab/types/normalized.d.ts.map +1 -0
  71. package/dist/src/lib/mystenlab/types/normalized.js +111 -0
  72. package/dist/src/lib/mystenlab/types/objects.d.ts +806 -0
  73. package/dist/src/lib/mystenlab/types/objects.d.ts.map +1 -0
  74. package/dist/src/lib/mystenlab/types/objects.js +302 -0
  75. package/dist/src/lib/mystenlab/types/option.d.ts +8 -0
  76. package/dist/src/lib/mystenlab/types/option.d.ts.map +1 -0
  77. package/dist/src/lib/mystenlab/types/option.js +14 -0
  78. package/dist/src/lib/mystenlab/types/sui-bcs.d.ts +111 -0
  79. package/dist/src/lib/mystenlab/types/sui-bcs.d.ts.map +1 -0
  80. package/dist/src/lib/mystenlab/types/sui-bcs.js +107 -0
  81. package/dist/src/lib/mystenlab/types/transactions.d.ts +6703 -0
  82. package/dist/src/lib/mystenlab/types/transactions.d.ts.map +1 -0
  83. package/dist/src/lib/mystenlab/types/transactions.js +405 -0
  84. package/dist/src/lib/mystenlab/types/validator.d.ts +641 -0
  85. package/dist/src/lib/mystenlab/types/validator.d.ts.map +1 -0
  86. package/dist/src/lib/mystenlab/types/validator.js +156 -0
  87. package/dist/src/lib/stakingBuilder.d.ts +62 -0
  88. package/dist/src/lib/stakingBuilder.d.ts.map +1 -0
  89. package/dist/src/lib/stakingBuilder.js +187 -0
  90. package/dist/src/lib/stakingTransaction.d.ts +51 -0
  91. package/dist/src/lib/stakingTransaction.d.ts.map +1 -0
  92. package/dist/src/lib/stakingTransaction.js +211 -0
  93. package/dist/src/lib/transaction.d.ts +36 -33
  94. package/dist/src/lib/transaction.d.ts.map +1 -1
  95. package/dist/src/lib/transaction.js +89 -252
  96. package/dist/src/lib/transactionBuilder.d.ts +18 -33
  97. package/dist/src/lib/transactionBuilder.d.ts.map +1 -1
  98. package/dist/src/lib/transactionBuilder.js +39 -169
  99. package/dist/src/lib/transactionBuilderFactory.d.ts +10 -3
  100. package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -1
  101. package/dist/src/lib/transactionBuilderFactory.js +29 -7
  102. package/dist/src/lib/transferBuilder.d.ts +31 -2
  103. package/dist/src/lib/transferBuilder.d.ts.map +1 -1
  104. package/dist/src/lib/transferBuilder.js +102 -1
  105. package/dist/src/lib/transferTransaction.d.ts +54 -0
  106. package/dist/src/lib/transferTransaction.d.ts.map +1 -0
  107. package/dist/src/lib/transferTransaction.js +180 -0
  108. package/dist/src/lib/unstakingBuilder.d.ts +55 -0
  109. package/dist/src/lib/unstakingBuilder.d.ts.map +1 -0
  110. package/dist/src/lib/unstakingBuilder.js +148 -0
  111. package/dist/src/lib/unstakingTransaction.d.ts +51 -0
  112. package/dist/src/lib/unstakingTransaction.d.ts.map +1 -0
  113. package/dist/src/lib/unstakingTransaction.js +206 -0
  114. package/dist/src/lib/utils.d.ts +49 -3
  115. package/dist/src/lib/utils.d.ts.map +1 -1
  116. package/dist/src/lib/utils.js +151 -10
  117. package/dist/src/register.d.ts +3 -0
  118. package/dist/src/register.d.ts.map +1 -0
  119. package/dist/src/register.js +11 -0
  120. package/dist/src/sui.d.ts +3 -0
  121. package/dist/src/sui.d.ts.map +1 -1
  122. package/dist/src/sui.js +34 -14
  123. package/package.json +11 -9
  124. package/dist/src/lib/bcs.d.ts +0 -3
  125. package/dist/src/lib/bcs.d.ts.map +0 -1
  126. package/dist/src/lib/bcs.js +0 -82
@@ -24,11 +24,16 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
24
24
  Object.defineProperty(exports, "__esModule", { value: true });
25
25
  exports.Transaction = void 0;
26
26
  const sdk_core_1 = require("@bitgo-beta/sdk-core");
27
- const utils_1 = __importDefault(require("./utils"));
28
- const bcs_1 = require("./bcs");
29
- const sha3 = __importStar(require("js-sha3"));
27
+ const utils_1 = __importStar(require("./utils"));
28
+ const types_1 = require("./mystenlab/types");
30
29
  const constants_1 = require("./constants");
31
30
  const buffer_1 = require("buffer");
31
+ const bcs_1 = require("@mysten/bcs");
32
+ const bs58_1 = __importDefault(require("bs58"));
33
+ const TransactionDataBlock_1 = require("./mystenlab/builder/TransactionDataBlock");
34
+ const builder_1 = require("./mystenlab/builder");
35
+ const blake2b_1 = __importDefault(require("@bitgo-beta/blake2b"));
36
+ const hash_1 = require("./mystenlab/cryptography/hash");
32
37
  class Transaction extends sdk_core_1.BaseTransaction {
33
38
  constructor(_coinConfig) {
34
39
  super(_coinConfig);
@@ -41,7 +46,10 @@ class Transaction extends sdk_core_1.BaseTransaction {
41
46
  }
42
47
  /** @inheritDoc **/
43
48
  get id() {
44
- return this._id || constants_1.UNAVAILABLE_TEXT;
49
+ const dataBytes = this.getDataBytes();
50
+ const hash = hash_1.hashTypedData('TransactionData', dataBytes);
51
+ this._id = bs58_1.default.encode(hash);
52
+ return this._id;
45
53
  }
46
54
  addSignature(publicKey, signature) {
47
55
  this._signatures.push(signature.toString('hex'));
@@ -51,88 +59,41 @@ class Transaction extends sdk_core_1.BaseTransaction {
51
59
  get suiSignature() {
52
60
  return this._signature;
53
61
  }
54
- getInputCoins() {
55
- return this.suiTransaction.payTx.coins;
62
+ get serializedSig() {
63
+ return this._serializedSig;
64
+ }
65
+ setSerializedSig(publicKey, signature) {
66
+ const pubKey = buffer_1.Buffer.from(publicKey.pub, 'hex');
67
+ const serialized_sig = new Uint8Array(1 + signature.length + pubKey.length);
68
+ serialized_sig.set(constants_1.SIGNATURE_SCHEME_BYTES);
69
+ serialized_sig.set(signature, 1);
70
+ serialized_sig.set(pubKey, 1 + signature.length);
71
+ this._serializedSig = serialized_sig;
56
72
  }
57
73
  /** @inheritdoc */
58
74
  canSign(key) {
59
75
  return true;
60
76
  }
61
- /** @inheritdoc */
62
- toBroadcastFormat() {
77
+ /**
78
+ * Sign this transaction
79
+ *
80
+ * @param {KeyPair} signer key
81
+ */
82
+ sign(signer) {
63
83
  if (!this._suiTransaction) {
64
- throw new sdk_core_1.InvalidTransactionError('Empty transaction');
84
+ throw new sdk_core_1.InvalidTransactionError('empty transaction to sign');
65
85
  }
66
- return this.serialize();
86
+ const intentMessage = this.signablePayload;
87
+ const signature = signer.signMessageinUint8Array(intentMessage);
88
+ this.setSerializedSig({ pub: signer.getKeys().pub }, buffer_1.Buffer.from(signature));
89
+ this.addSignature({ pub: signer.getKeys().pub }, buffer_1.Buffer.from(signature));
67
90
  }
68
91
  /** @inheritdoc */
69
- toJson() {
92
+ toBroadcastFormat() {
70
93
  if (!this._suiTransaction) {
71
- throw new sdk_core_1.ParseTransactionError('Empty transaction');
72
- }
73
- const tx = this._suiTransaction;
74
- let txDetails;
75
- switch (tx.type) {
76
- case constants_1.SuiTransactionType.Pay:
77
- txDetails = {
78
- Pay: {
79
- coins: tx.payTx.coins,
80
- recipients: tx.payTx.recipients,
81
- amounts: tx.payTx.amounts,
82
- },
83
- };
84
- break;
85
- case constants_1.SuiTransactionType.PaySui:
86
- txDetails = {
87
- PaySui: {
88
- coins: tx.payTx.coins,
89
- recipients: tx.payTx.recipients,
90
- amounts: tx.payTx.amounts,
91
- },
92
- };
93
- break;
94
- case constants_1.SuiTransactionType.PayAllSui:
95
- txDetails = {
96
- PayAllSui: {
97
- coins: tx.payTx.coins,
98
- recipient: tx.payTx.recipients[0],
99
- amount: tx.payTx.amounts[0],
100
- },
101
- };
102
- break;
103
- default:
104
- throw new sdk_core_1.InvalidTransactionError('SuiTransactionType not supported');
105
- }
106
- return {
107
- id: this._id,
108
- kind: { Single: txDetails },
109
- sender: tx.sender,
110
- gasPayment: tx.gasPayment,
111
- gasBudget: tx.gasBudget,
112
- gasPrice: constants_1.SUI_GAS_PRICE,
113
- };
114
- }
115
- /** @inheritDoc */
116
- explainTransaction() {
117
- const result = this.toJson();
118
- const displayOrder = ['id', 'outputs', 'outputAmount', 'changeOutputs', 'changeAmount', 'fee', 'type'];
119
- const outputs = [];
120
- const explanationResult = {
121
- displayOrder,
122
- id: this.id,
123
- outputs,
124
- outputAmount: '0',
125
- changeOutputs: [],
126
- changeAmount: '0',
127
- fee: { fee: this.suiTransaction.gasBudget.toString() },
128
- type: this.type,
129
- };
130
- switch (this.type) {
131
- case sdk_core_1.TransactionType.Send:
132
- return this.explainTransferTransaction(result, explanationResult);
133
- default:
134
- throw new sdk_core_1.InvalidTransactionError('Transaction type not supported');
94
+ throw new sdk_core_1.InvalidTransactionError('Empty transaction');
135
95
  }
96
+ return this.serialize();
136
97
  }
137
98
  /**
138
99
  * Set the transaction type.
@@ -142,198 +103,74 @@ class Transaction extends sdk_core_1.BaseTransaction {
142
103
  transactionType(transactionType) {
143
104
  this._type = transactionType;
144
105
  }
145
- /**
146
- * Load the input and output data on this transaction.
147
- */
148
- loadInputsAndOutputs() {
149
- if (!this.suiTransaction) {
150
- return;
151
- }
152
- const tx = this.suiTransaction;
153
- const payTx = tx.payTx;
154
- const recipients = payTx.recipients;
155
- const amounts = payTx.amounts;
156
- if (recipients.length !== amounts.length) {
157
- throw new Error(`The length of recipients ${recipients.length} does not equal to the length of amounts ${amounts.length}`);
158
- }
159
- const outputs = recipients.map((recipient, index) => ({
160
- address: recipient,
161
- value: amounts[index].toString(),
162
- coin: this._coinConfig.name,
163
- }));
164
- const totalAmount = amounts.reduce((accumulator, current) => accumulator + current, 0);
165
- this._inputs = [
166
- {
167
- address: tx.sender,
168
- value: totalAmount.toString(),
169
- coin: this._coinConfig.name,
170
- },
171
- ];
172
- this._outputs = outputs;
106
+ getDataBytes() {
107
+ const txData = this.getTxData();
108
+ const txSer = builder_1.builder.ser('TransactionData', { V1: txData }, { maxSize: TransactionDataBlock_1.TRANSACTION_DATA_MAX_SIZE });
109
+ return txSer.toBytes();
173
110
  }
174
- /**
175
- * Sets this transaction payload
176
- *
177
- * @param rawTransaction
178
- */
179
- fromRawTransaction(rawTransaction) {
180
- try {
181
- utils_1.default.isValidRawTransaction(rawTransaction);
182
- this._suiTransaction = Transaction.deserializeSuiTransaction(rawTransaction);
183
- this._type = sdk_core_1.TransactionType.Send;
184
- this.loadInputsAndOutputs();
185
- }
186
- catch (e) {
187
- throw e;
188
- }
111
+ /** @inheritDoc */
112
+ get signablePayload() {
113
+ const dataBytes = this.getDataBytes();
114
+ const intentMessage = this.messageWithIntent(utils_1.IntentScope.TransactionData, dataBytes);
115
+ return buffer_1.Buffer.from(blake2b_1.default(32).update(intentMessage).digest('binary'));
189
116
  }
190
- /**
191
- * Helper function for serialize() to get the correct txData with transaction type
192
- */
193
- getTxData() {
194
- const suiTx = this._suiTransaction;
195
- let tx;
196
- switch (suiTx.type) {
197
- case constants_1.SuiTransactionType.Pay:
198
- tx = {
199
- Pay: {
200
- coins: suiTx.payTx.coins,
201
- recipients: suiTx.payTx.recipients,
202
- amounts: suiTx.payTx.amounts,
203
- },
204
- };
205
- break;
206
- case constants_1.SuiTransactionType.PaySui:
207
- tx = {
208
- PaySui: {
209
- coins: suiTx.payTx.coins,
210
- recipients: suiTx.payTx.recipients,
211
- amounts: suiTx.payTx.amounts,
212
- },
213
- };
214
- break;
215
- case constants_1.SuiTransactionType.PayAllSui:
216
- tx = {
217
- PayAllSui: {
218
- coins: suiTx.payTx.coins,
219
- recipient: suiTx.payTx.recipients[0],
220
- amount: suiTx.payTx.amounts[0],
221
- },
222
- };
223
- break;
224
- default:
225
- throw new sdk_core_1.InvalidTransactionError('SuiTransactionType not supported');
226
- }
227
- return {
228
- kind: { Single: tx },
229
- gasPayment: suiTx.gasPayment,
230
- gasPrice: constants_1.SUI_GAS_PRICE,
231
- gasBudget: suiTx.gasBudget,
232
- sender: suiTx.sender,
233
- };
117
+ messageWithIntent(scope, message) {
118
+ const intent = this.intentWithScope(scope);
119
+ const intentMessage = new Uint8Array(intent.length + message.length);
120
+ intentMessage.set(intent);
121
+ intentMessage.set(message, intent.length);
122
+ return intentMessage;
123
+ }
124
+ intentWithScope(scope) {
125
+ return [scope, utils_1.IntentVersion.V0, utils_1.AppId.Sui];
234
126
  }
235
127
  serialize() {
236
- const txData = this.getTxData();
237
- const dataBytes = bcs_1.bcs.ser('TransactionData', txData).toBytes();
238
- const serialized = new Uint8Array(constants_1.TYPE_TAG.length + dataBytes.length);
239
- serialized.set(constants_1.TYPE_TAG);
240
- serialized.set(dataBytes, constants_1.TYPE_TAG.length);
241
- if (this._signature !== undefined) {
242
- this._id = buffer_1.Buffer.from(sha3.sha3_256(serialized), 'hex').toString('base64');
243
- }
244
- return buffer_1.Buffer.from(serialized).toString('base64');
128
+ const dataBytes = this.getDataBytes();
129
+ this._id = bs58_1.default.encode(hash_1.hashTypedData('TransactionData', dataBytes));
130
+ return bcs_1.toB64(dataBytes);
245
131
  }
246
132
  static deserializeSuiTransaction(serializedTx) {
247
- const data = buffer_1.Buffer.from(serializedTx, 'base64');
248
- const trimmedData = new Uint8Array(data.subarray(constants_1.TYPE_TAG.length));
249
- const k = bcs_1.bcs.de('TransactionData', trimmedData);
250
- let type;
251
- const txDetails = k.kind.Single;
252
- if (txDetails.hasOwnProperty('Pay')) {
253
- type = constants_1.SuiTransactionType.Pay;
254
- }
255
- else if (txDetails.hasOwnProperty('PaySui')) {
256
- type = constants_1.SuiTransactionType.PaySui;
257
- }
258
- else if (txDetails.hasOwnProperty('PayAllSui')) {
259
- type = constants_1.SuiTransactionType.PayAllSui;
260
- }
261
- else {
262
- throw new Error('Transaction type not supported: ' + txDetails);
263
- }
264
- const { coins, recipients, amounts } = this.getProperTxDetails(k, type);
133
+ const data = bcs_1.fromB64(serializedTx);
134
+ const transactionBlock = TransactionDataBlock_1.TransactionBlockDataBuilder.fromBytes(data);
135
+ const inputs = transactionBlock.inputs.map((txInput) => txInput.value);
136
+ const transactions = transactionBlock.transactions;
137
+ const txType = utils_1.default.getSuiTransactionType(transactions.length == 1 ? transactions[0] : transactions[1]);
265
138
  return {
266
- type,
267
- sender: utils_1.default.normalizeHexId(k.sender),
268
- payTx: {
269
- coins,
270
- recipients,
271
- amounts,
139
+ id: transactionBlock.getDigest(),
140
+ type: txType,
141
+ sender: types_1.normalizeSuiAddress(transactionBlock.sender),
142
+ tx: {
143
+ inputs: inputs,
144
+ transactions: transactions,
272
145
  },
273
- gasBudget: k.gasBudget.toNumber(),
274
- gasPrice: k.gasPrice.toNumber(),
275
- gasPayment: {
276
- objectId: utils_1.default.normalizeHexId(k.gasPayment.objectId),
277
- version: k.gasPayment.version.toNumber(),
278
- digest: k.gasPayment.digest,
146
+ gasData: {
147
+ payment: this.normalizeCoins(transactionBlock.gasConfig.payment),
148
+ owner: types_1.normalizeSuiAddress(transactionBlock.gasConfig.owner),
149
+ price: Number(transactionBlock.gasConfig.price),
150
+ budget: Number(transactionBlock.gasConfig.budget),
279
151
  },
280
152
  };
281
153
  }
282
- static getProperTxDetails(k, type) {
283
- // bcs deserialized number into Big Number and removed '0x' prefix from addresses, needs to convert them back
284
- let coins;
285
- let recipients;
286
- let amounts;
287
- switch (type) {
288
- case constants_1.SuiTransactionType.Pay:
289
- coins = k.kind.Single.Pay.coins;
290
- recipients = k.kind.Single.Pay.recipients;
291
- amounts = k.kind.Single.Pay.amounts;
292
- break;
293
- case constants_1.SuiTransactionType.PaySui:
294
- coins = k.kind.Single.PaySui.coins;
295
- recipients = k.kind.Single.PaySui.recipients;
296
- amounts = k.kind.Single.PaySui.amounts;
297
- break;
298
- case constants_1.SuiTransactionType.PayAllSui:
299
- coins = k.kind.Single.PayAllSui.coins;
300
- recipients = [k.kind.Single.PayAllSui.recipient];
301
- amounts = [k.kind.Single.PayAllSui.amount];
302
- break;
303
- default:
304
- throw new sdk_core_1.InvalidTransactionError('SuiTransactionType not supported');
305
- }
306
- coins = coins.map((coin) => {
307
- return {
308
- objectId: utils_1.default.normalizeHexId(coin.objectId),
309
- version: coin.version.toNumber(),
310
- digest: coin.digest,
311
- };
154
+ static getProperGasData(k) {
155
+ return {
156
+ payment: [this.normalizeSuiObjectRef(k.gasData.payment)],
157
+ owner: utils_1.default.normalizeHexId(k.gasData.owner),
158
+ price: Number(k.gasData.price),
159
+ budget: Number(k.gasData.budget),
160
+ };
161
+ }
162
+ static normalizeCoins(coins) {
163
+ return coins.map((coin) => {
164
+ return this.normalizeSuiObjectRef(coin);
312
165
  });
313
- recipients = recipients.map((recipient) => utils_1.default.normalizeHexId(recipient));
314
- amounts = amounts.map((amount) => amount.toNumber());
315
- return { coins, recipients, amounts };
316
166
  }
317
- /**
318
- * Returns a complete explanation for a transfer transaction
319
- * @param {TxData} json The transaction data in json format
320
- * @param {TransactionExplanation} explanationResult The transaction explanation to be completed
321
- * @returns {TransactionExplanation}
322
- */
323
- explainTransferTransaction(json, explanationResult) {
324
- const recipients = this.suiTransaction.payTx.recipients;
325
- const amounts = this.suiTransaction.payTx.amounts;
326
- const outputs = recipients.map((recipient, index) => ({
327
- address: recipient,
328
- amount: amounts[index].toString(),
329
- }));
330
- const outputAmount = amounts.reduce((accumulator, current) => accumulator + current, 0);
167
+ static normalizeSuiObjectRef(obj) {
331
168
  return {
332
- ...explanationResult,
333
- outputAmount,
334
- outputs,
169
+ objectId: types_1.normalizeSuiObjectId(obj.objectId),
170
+ version: Number(obj.version),
171
+ digest: obj.digest,
335
172
  };
336
173
  }
337
174
  }
338
175
  exports.Transaction = Transaction;
339
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3RyYW5zYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxtREFVOEI7QUFHOUIsb0RBQTRCO0FBQzVCLCtCQUE0QjtBQUM1Qiw4Q0FBZ0M7QUFDaEMsMkNBQTRGO0FBQzVGLG1DQUFnQztBQUVoQyxNQUFhLFdBQVksU0FBUSwwQkFBZTtJQUk5QyxZQUFZLFdBQWlDO1FBQzNDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNyQixDQUFDO0lBRUQsSUFBSSxjQUFjO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQztJQUM5QixDQUFDO0lBRUQsaUJBQWlCLENBQUMsRUFBa0I7UUFDbEMsSUFBSSxDQUFDLGVBQWUsR0FBRyxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVELG1CQUFtQjtJQUNuQixJQUFJLEVBQUU7UUFDSixPQUFPLElBQUksQ0FBQyxHQUFHLElBQUksNEJBQWdCLENBQUM7SUFDdEMsQ0FBQztJQUVELFlBQVksQ0FBQyxTQUF3QixFQUFFLFNBQWlCO1FBQ3RELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNqRCxJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxDQUFDO1FBQzNDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNuQixDQUFDO0lBRUQsSUFBSSxZQUFZO1FBQ2QsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxhQUFhO1FBQ1gsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7SUFDekMsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixPQUFPLENBQUMsR0FBWTtRQUNsQixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsaUJBQWlCO1FBQ2YsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUU7WUFDekIsTUFBTSxJQUFJLGtDQUF1QixDQUFDLG1CQUFtQixDQUFDLENBQUM7U0FDeEQ7UUFDRCxPQUFPLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLE1BQU07UUFDSixJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRTtZQUN6QixNQUFNLElBQUksZ0NBQXFCLENBQUMsbUJBQW1CLENBQUMsQ0FBQztTQUN0RDtRQUVELE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUM7UUFDaEMsSUFBSSxTQUFvQixDQUFDO1FBRXpCLFFBQVEsRUFBRSxDQUFDLElBQUksRUFBRTtZQUNmLEtBQUssOEJBQWtCLENBQUMsR0FBRztnQkFDekIsU0FBUyxHQUFHO29CQUNWLEdBQUcsRUFBRTt3QkFDSCxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLO3dCQUNyQixVQUFVLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxVQUFVO3dCQUMvQixPQUFPLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPO3FCQUMxQjtpQkFDRixDQUFDO2dCQUNGLE1BQU07WUFDUixLQUFLLDhCQUFrQixDQUFDLE1BQU07Z0JBQzVCLFNBQVMsR0FBRztvQkFDVixNQUFNLEVBQUU7d0JBQ04sS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSzt3QkFDckIsVUFBVSxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsVUFBVTt3QkFDL0IsT0FBTyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTztxQkFDMUI7aUJBQ0YsQ0FBQztnQkFDRixNQUFNO1lBQ1IsS0FBSyw4QkFBa0IsQ0FBQyxTQUFTO2dCQUMvQixTQUFTLEdBQUc7b0JBQ1YsU0FBUyxFQUFFO3dCQUNULEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUs7d0JBQ3JCLFNBQVMsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7d0JBQ2pDLE1BQU0sRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7cUJBQzVCO2lCQUNGLENBQUM7Z0JBQ0YsTUFBTTtZQUNSO2dCQUNFLE1BQU0sSUFBSSxrQ0FBdUIsQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDO1NBQ3pFO1FBRUQsT0FBTztZQUNMLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBRztZQUNaLElBQUksRUFBRSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUU7WUFDM0IsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNO1lBQ2pCLFVBQVUsRUFBRSxFQUFFLENBQUMsVUFBVTtZQUN6QixTQUFTLEVBQUUsRUFBRSxDQUFDLFNBQVM7WUFDdkIsUUFBUSxFQUFFLHlCQUFhO1NBQ3hCLENBQUM7SUFDSixDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLGtCQUFrQjtRQUNoQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDN0IsTUFBTSxZQUFZLEdBQUcsQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLGNBQWMsRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztRQUN2RyxNQUFNLE9BQU8sR0FBMkIsRUFBRSxDQUFDO1FBRTNDLE1BQU0saUJBQWlCLEdBQTJCO1lBQ2hELFlBQVk7WUFDWixFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUU7WUFDWCxPQUFPO1lBQ1AsWUFBWSxFQUFFLEdBQUc7WUFDakIsYUFBYSxFQUFFLEVBQUU7WUFDakIsWUFBWSxFQUFFLEdBQUc7WUFDakIsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxFQUFFO1lBQ3RELElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtTQUNoQixDQUFDO1FBRUYsUUFBUSxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ2pCLEtBQUssMEJBQWUsQ0FBQyxJQUFJO2dCQUN2QixPQUFPLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxNQUFNLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztZQUNwRTtnQkFDRSxNQUFNLElBQUksa0NBQXVCLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztTQUN2RTtJQUNILENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsZUFBZSxDQUFDLGVBQWdDO1FBQzlDLElBQUksQ0FBQyxLQUFLLEdBQUcsZUFBZSxDQUFDO0lBQy9CLENBQUM7SUFFRDs7T0FFRztJQUNILG9CQUFvQjtRQUNsQixJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUN4QixPQUFPO1NBQ1I7UUFFRCxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO1FBQy9CLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUM7UUFDdkIsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQztRQUNwQyxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDO1FBQzlCLElBQUksVUFBVSxDQUFDLE1BQU0sS0FBSyxPQUFPLENBQUMsTUFBTSxFQUFFO1lBQ3hDLE1BQU0sSUFBSSxLQUFLLENBQ2IsNEJBQTRCLFVBQVUsQ0FBQyxNQUFNLDRDQUE0QyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQzFHLENBQUM7U0FDSDtRQUVELE1BQU0sT0FBTyxHQUFZLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQzdELE9BQU8sRUFBRSxTQUFTO1lBQ2xCLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxFQUFFO1lBQ2hDLElBQUksRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUk7U0FDNUIsQ0FBQyxDQUFDLENBQUM7UUFFSixNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsV0FBVyxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsV0FBVyxHQUFHLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN2RixJQUFJLENBQUMsT0FBTyxHQUFHO1lBQ2I7Z0JBQ0UsT0FBTyxFQUFFLEVBQUUsQ0FBQyxNQUFNO2dCQUNsQixLQUFLLEVBQUUsV0FBVyxDQUFDLFFBQVEsRUFBRTtnQkFDN0IsSUFBSSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSTthQUM1QjtTQUNGLENBQUM7UUFDRixJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQztJQUMxQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILGtCQUFrQixDQUFDLGNBQXNCO1FBQ3ZDLElBQUk7WUFDRixlQUFLLENBQUMscUJBQXFCLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDNUMsSUFBSSxDQUFDLGVBQWUsR0FBRyxXQUFXLENBQUMseUJBQXlCLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDN0UsSUFBSSxDQUFDLEtBQUssR0FBRywwQkFBZSxDQUFDLElBQUksQ0FBQztZQUNsQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztTQUM3QjtRQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ1YsTUFBTSxDQUFDLENBQUM7U0FDVDtJQUNILENBQUM7SUFFRDs7T0FFRztJQUNLLFNBQVM7UUFDZixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDO1FBQ25DLElBQUksRUFBYSxDQUFDO1FBRWxCLFFBQVEsS0FBSyxDQUFDLElBQUksRUFBRTtZQUNsQixLQUFLLDhCQUFrQixDQUFDLEdBQUc7Z0JBQ3pCLEVBQUUsR0FBRztvQkFDSCxHQUFHLEVBQUU7d0JBQ0gsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSzt3QkFDeEIsVUFBVSxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsVUFBVTt3QkFDbEMsT0FBTyxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTztxQkFDN0I7aUJBQ0YsQ0FBQztnQkFDRixNQUFNO1lBQ1IsS0FBSyw4QkFBa0IsQ0FBQyxNQUFNO2dCQUM1QixFQUFFLEdBQUc7b0JBQ0gsTUFBTSxFQUFFO3dCQUNOLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUs7d0JBQ3hCLFVBQVUsRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLFVBQVU7d0JBQ2xDLE9BQU8sRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU87cUJBQzdCO2lCQUNGLENBQUM7Z0JBQ0YsTUFBTTtZQUNSLEtBQUssOEJBQWtCLENBQUMsU0FBUztnQkFDL0IsRUFBRSxHQUFHO29CQUNILFNBQVMsRUFBRTt3QkFDVCxLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLO3dCQUN4QixTQUFTLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO3dCQUNwQyxNQUFNLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO3FCQUMvQjtpQkFDRixDQUFDO2dCQUNGLE1BQU07WUFDUjtnQkFDRSxNQUFNLElBQUksa0NBQXVCLENBQUMsa0NBQWtDLENBQUMsQ0FBQztTQUN6RTtRQUVELE9BQU87WUFDTCxJQUFJLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFO1lBQ3BCLFVBQVUsRUFBRSxLQUFLLENBQUMsVUFBVTtZQUM1QixRQUFRLEVBQUUseUJBQWE7WUFDdkIsU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTO1lBQzFCLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTTtTQUNyQixDQUFDO0lBQ0osQ0FBQztJQUVELFNBQVM7UUFDUCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFFaEMsTUFBTSxTQUFTLEdBQUcsU0FBRyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsRUFBRSxNQUFNLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUMvRCxNQUFNLFVBQVUsR0FBRyxJQUFJLFVBQVUsQ0FBQyxvQkFBUSxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdEUsVUFBVSxDQUFDLEdBQUcsQ0FBQyxvQkFBUSxDQUFDLENBQUM7UUFDekIsVUFBVSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsb0JBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMzQyxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssU0FBUyxFQUFFO1lBQ2pDLElBQUksQ0FBQyxHQUFHLEdBQUcsZUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUM3RTtRQUNELE9BQU8sZUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVELE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQyxZQUFvQjtRQUNuRCxNQUFNLElBQUksR0FBRyxlQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxRQUFRLENBQUMsQ0FBQztRQUNqRCxNQUFNLFdBQVcsR0FBRyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLG9CQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUNuRSxNQUFNLENBQUMsR0FBRyxTQUFHLENBQUMsRUFBRSxDQUFDLGlCQUFpQixFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBRWpELElBQUksSUFBd0IsQ0FBQztRQUM3QixNQUFNLFNBQVMsR0FBYyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUMzQyxJQUFJLFNBQVMsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDbkMsSUFBSSxHQUFHLDhCQUFrQixDQUFDLEdBQUcsQ0FBQztTQUMvQjthQUFNLElBQUksU0FBUyxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUM3QyxJQUFJLEdBQUcsOEJBQWtCLENBQUMsTUFBTSxDQUFDO1NBQ2xDO2FBQU0sSUFBSSxTQUFTLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxFQUFFO1lBQ2hELElBQUksR0FBRyw4QkFBa0IsQ0FBQyxTQUFTLENBQUM7U0FDckM7YUFBTTtZQUNMLE1BQU0sSUFBSSxLQUFLLENBQUMsa0NBQWtDLEdBQUcsU0FBUyxDQUFDLENBQUM7U0FDakU7UUFFRCxNQUFNLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBRXhFLE9BQU87WUFDTCxJQUFJO1lBQ0osTUFBTSxFQUFFLGVBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztZQUN0QyxLQUFLLEVBQUU7Z0JBQ0wsS0FBSztnQkFDTCxVQUFVO2dCQUNWLE9BQU87YUFDUjtZQUNELFNBQVMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRTtZQUNqQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUU7WUFDL0IsVUFBVSxFQUFFO2dCQUNWLFFBQVEsRUFBRSxlQUFLLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDO2dCQUNyRCxPQUFPLEVBQUUsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFO2dCQUN4QyxNQUFNLEVBQUUsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxNQUFNO2FBQzVCO1NBQ0YsQ0FBQztJQUNKLENBQUM7SUFFRCxNQUFNLENBQUMsa0JBQWtCLENBQ3ZCLENBQU0sRUFDTixJQUF3QjtRQUV4Qiw2R0FBNkc7UUFDN0csSUFBSSxLQUFLLENBQUM7UUFDVixJQUFJLFVBQVUsQ0FBQztRQUNmLElBQUksT0FBTyxDQUFDO1FBRVosUUFBUSxJQUFJLEVBQUU7WUFDWixLQUFLLDhCQUFrQixDQUFDLEdBQUc7Z0JBQ3pCLEtBQUssR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDO2dCQUNoQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQztnQkFDMUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUM7Z0JBQ3BDLE1BQU07WUFDUixLQUFLLDhCQUFrQixDQUFDLE1BQU07Z0JBQzVCLEtBQUssR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO2dCQUNuQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQztnQkFDN0MsT0FBTyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUM7Z0JBQ3ZDLE1BQU07WUFDUixLQUFLLDhCQUFrQixDQUFDLFNBQVM7Z0JBQy9CLEtBQUssR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDO2dCQUN0QyxVQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ2pELE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDM0MsTUFBTTtZQUNSO2dCQUNFLE1BQU0sSUFBSSxrQ0FBdUIsQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDO1NBQ3pFO1FBRUQsS0FBSyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQWdCLEVBQUU7WUFDdkMsT0FBTztnQkFDTCxRQUFRLEVBQUUsZUFBSyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO2dCQUM3QyxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUU7Z0JBQ2hDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTthQUNwQixDQUFDO1FBQ0osQ0FBQyxDQUFtQixDQUFDO1FBQ3JCLFVBQVUsR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxlQUFLLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFhLENBQUM7UUFDeEYsT0FBTyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBYSxDQUFDO1FBRWpFLE9BQU8sRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxDQUFDO0lBQ3hDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILDBCQUEwQixDQUFDLElBQVksRUFBRSxpQkFBeUM7UUFDaEYsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDO1FBQ3hELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQztRQUVsRCxNQUFNLE9BQU8sR0FBMkIsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDNUUsT0FBTyxFQUFFLFNBQVM7WUFDbEIsTUFBTSxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLEVBQUU7U0FDbEMsQ0FBQyxDQUFDLENBQUM7UUFDSixNQUFNLFlBQVksR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsV0FBVyxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsV0FBVyxHQUFHLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztRQUV4RixPQUFPO1lBQ0wsR0FBRyxpQkFBaUI7WUFDcEIsWUFBWTtZQUNaLE9BQU87U0FDUixDQUFDO0lBQ0osQ0FBQztDQUNGO0FBMVZELGtDQTBWQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEJhc2VLZXksXG4gIEJhc2VUcmFuc2FjdGlvbixcbiAgRW50cnksXG4gIEludmFsaWRUcmFuc2FjdGlvbkVycm9yLFxuICBQYXJzZVRyYW5zYWN0aW9uRXJyb3IsXG4gIFB1YmxpY0tleSBhcyBCYXNlUHVibGljS2V5LFxuICBTaWduYXR1cmUsXG4gIFRyYW5zYWN0aW9uUmVjaXBpZW50LFxuICBUcmFuc2FjdGlvblR5cGUsXG59IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IFN1aU9iamVjdFJlZiwgU3VpVHJhbnNhY3Rpb24sIFRyYW5zYWN0aW9uRXhwbGFuYXRpb24sIFR4RGF0YSwgVHhEZXRhaWxzIH0gZnJvbSAnLi9pZmFjZSc7XG5pbXBvcnQgeyBCYXNlQ29pbiBhcyBDb2luQ29uZmlnIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBiY3MgfSBmcm9tICcuL2Jjcyc7XG5pbXBvcnQgKiBhcyBzaGEzIGZyb20gJ2pzLXNoYTMnO1xuaW1wb3J0IHsgU1VJX0dBU19QUklDRSwgU3VpVHJhbnNhY3Rpb25UeXBlLCBUWVBFX1RBRywgVU5BVkFJTEFCTEVfVEVYVCB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7IEJ1ZmZlciB9IGZyb20gJ2J1ZmZlcic7XG5cbmV4cG9ydCBjbGFzcyBUcmFuc2FjdGlvbiBleHRlbmRzIEJhc2VUcmFuc2FjdGlvbiB7XG4gIHByaXZhdGUgX3N1aVRyYW5zYWN0aW9uOiBTdWlUcmFuc2FjdGlvbjtcbiAgcHJpdmF0ZSBfc2lnbmF0dXJlOiBTaWduYXR1cmU7XG5cbiAgY29uc3RydWN0b3IoX2NvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KSB7XG4gICAgc3VwZXIoX2NvaW5Db25maWcpO1xuICB9XG5cbiAgZ2V0IHN1aVRyYW5zYWN0aW9uKCk6IFN1aVRyYW5zYWN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5fc3VpVHJhbnNhY3Rpb247XG4gIH1cblxuICBzZXRTdWlUcmFuc2FjdGlvbih0eDogU3VpVHJhbnNhY3Rpb24pOiB2b2lkIHtcbiAgICB0aGlzLl9zdWlUcmFuc2FjdGlvbiA9IHR4O1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICoqL1xuICBnZXQgaWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5faWQgfHwgVU5BVkFJTEFCTEVfVEVYVDtcbiAgfVxuXG4gIGFkZFNpZ25hdHVyZShwdWJsaWNLZXk6IEJhc2VQdWJsaWNLZXksIHNpZ25hdHVyZTogQnVmZmVyKTogdm9pZCB7XG4gICAgdGhpcy5fc2lnbmF0dXJlcy5wdXNoKHNpZ25hdHVyZS50b1N0cmluZygnaGV4JykpO1xuICAgIHRoaXMuX3NpZ25hdHVyZSA9IHsgcHVibGljS2V5LCBzaWduYXR1cmUgfTtcbiAgICB0aGlzLnNlcmlhbGl6ZSgpO1xuICB9XG5cbiAgZ2V0IHN1aVNpZ25hdHVyZSgpOiBTaWduYXR1cmUge1xuICAgIHJldHVybiB0aGlzLl9zaWduYXR1cmU7XG4gIH1cblxuICBnZXRJbnB1dENvaW5zKCk6IFN1aU9iamVjdFJlZltdIHtcbiAgICByZXR1cm4gdGhpcy5zdWlUcmFuc2FjdGlvbi5wYXlUeC5jb2lucztcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBjYW5TaWduKGtleTogQmFzZUtleSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHRvQnJvYWRjYXN0Rm9ybWF0KCk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLl9zdWlUcmFuc2FjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdFbXB0eSB0cmFuc2FjdGlvbicpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zZXJpYWxpemUoKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB0b0pzb24oKTogVHhEYXRhIHtcbiAgICBpZiAoIXRoaXMuX3N1aVRyYW5zYWN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2VUcmFuc2FjdGlvbkVycm9yKCdFbXB0eSB0cmFuc2FjdGlvbicpO1xuICAgIH1cblxuICAgIGNvbnN0IHR4ID0gdGhpcy5fc3VpVHJhbnNhY3Rpb247XG4gICAgbGV0IHR4RGV0YWlsczogVHhEZXRhaWxzO1xuXG4gICAgc3dpdGNoICh0eC50eXBlKSB7XG4gICAgICBjYXNlIFN1aVRyYW5zYWN0aW9uVHlwZS5QYXk6XG4gICAgICAgIHR4RGV0YWlscyA9IHtcbiAgICAgICAgICBQYXk6IHtcbiAgICAgICAgICAgIGNvaW5zOiB0eC5wYXlUeC5jb2lucyxcbiAgICAgICAgICAgIHJlY2lwaWVudHM6IHR4LnBheVR4LnJlY2lwaWVudHMsXG4gICAgICAgICAgICBhbW91bnRzOiB0eC5wYXlUeC5hbW91bnRzLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBTdWlUcmFuc2FjdGlvblR5cGUuUGF5U3VpOlxuICAgICAgICB0eERldGFpbHMgPSB7XG4gICAgICAgICAgUGF5U3VpOiB7XG4gICAgICAgICAgICBjb2luczogdHgucGF5VHguY29pbnMsXG4gICAgICAgICAgICByZWNpcGllbnRzOiB0eC5wYXlUeC5yZWNpcGllbnRzLFxuICAgICAgICAgICAgYW1vdW50czogdHgucGF5VHguYW1vdW50cyxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgU3VpVHJhbnNhY3Rpb25UeXBlLlBheUFsbFN1aTpcbiAgICAgICAgdHhEZXRhaWxzID0ge1xuICAgICAgICAgIFBheUFsbFN1aToge1xuICAgICAgICAgICAgY29pbnM6IHR4LnBheVR4LmNvaW5zLFxuICAgICAgICAgICAgcmVjaXBpZW50OiB0eC5wYXlUeC5yZWNpcGllbnRzWzBdLFxuICAgICAgICAgICAgYW1vdW50OiB0eC5wYXlUeC5hbW91bnRzWzBdLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdTdWlUcmFuc2FjdGlvblR5cGUgbm90IHN1cHBvcnRlZCcpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBpZDogdGhpcy5faWQsXG4gICAgICBraW5kOiB7IFNpbmdsZTogdHhEZXRhaWxzIH0sXG4gICAgICBzZW5kZXI6IHR4LnNlbmRlcixcbiAgICAgIGdhc1BheW1lbnQ6IHR4Lmdhc1BheW1lbnQsXG4gICAgICBnYXNCdWRnZXQ6IHR4Lmdhc0J1ZGdldCxcbiAgICAgIGdhc1ByaWNlOiBTVUlfR0FTX1BSSUNFLFxuICAgIH07XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgZXhwbGFpblRyYW5zYWN0aW9uKCk6IFRyYW5zYWN0aW9uRXhwbGFuYXRpb24ge1xuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMudG9Kc29uKCk7XG4gICAgY29uc3QgZGlzcGxheU9yZGVyID0gWydpZCcsICdvdXRwdXRzJywgJ291dHB1dEFtb3VudCcsICdjaGFuZ2VPdXRwdXRzJywgJ2NoYW5nZUFtb3VudCcsICdmZWUnLCAndHlwZSddO1xuICAgIGNvbnN0IG91dHB1dHM6IFRyYW5zYWN0aW9uUmVjaXBpZW50W10gPSBbXTtcblxuICAgIGNvbnN0IGV4cGxhbmF0aW9uUmVzdWx0OiBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uID0ge1xuICAgICAgZGlzcGxheU9yZGVyLFxuICAgICAgaWQ6IHRoaXMuaWQsXG4gICAgICBvdXRwdXRzLFxuICAgICAgb3V0cHV0QW1vdW50OiAnMCcsXG4gICAgICBjaGFuZ2VPdXRwdXRzOiBbXSxcbiAgICAgIGNoYW5nZUFtb3VudDogJzAnLFxuICAgICAgZmVlOiB7IGZlZTogdGhpcy5zdWlUcmFuc2FjdGlvbi5nYXNCdWRnZXQudG9TdHJpbmcoKSB9LFxuICAgICAgdHlwZTogdGhpcy50eXBlLFxuICAgIH07XG5cbiAgICBzd2l0Y2ggKHRoaXMudHlwZSkge1xuICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuU2VuZDpcbiAgICAgICAgcmV0dXJuIHRoaXMuZXhwbGFpblRyYW5zZmVyVHJhbnNhY3Rpb24ocmVzdWx0LCBleHBsYW5hdGlvblJlc3VsdCk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoJ1RyYW5zYWN0aW9uIHR5cGUgbm90IHN1cHBvcnRlZCcpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIHRyYW5zYWN0aW9uIHR5cGUuXG4gICAqXG4gICAqIEBwYXJhbSB7VHJhbnNhY3Rpb25UeXBlfSB0cmFuc2FjdGlvblR5cGUgVGhlIHRyYW5zYWN0aW9uIHR5cGUgdG8gYmUgc2V0LlxuICAgKi9cbiAgdHJhbnNhY3Rpb25UeXBlKHRyYW5zYWN0aW9uVHlwZTogVHJhbnNhY3Rpb25UeXBlKTogdm9pZCB7XG4gICAgdGhpcy5fdHlwZSA9IHRyYW5zYWN0aW9uVHlwZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkIHRoZSBpbnB1dCBhbmQgb3V0cHV0IGRhdGEgb24gdGhpcyB0cmFuc2FjdGlvbi5cbiAgICovXG4gIGxvYWRJbnB1dHNBbmRPdXRwdXRzKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5zdWlUcmFuc2FjdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHR4ID0gdGhpcy5zdWlUcmFuc2FjdGlvbjtcbiAgICBjb25zdCBwYXlUeCA9IHR4LnBheVR4O1xuICAgIGNvbnN0IHJlY2lwaWVudHMgPSBwYXlUeC5yZWNpcGllbnRzO1xuICAgIGNvbnN0IGFtb3VudHMgPSBwYXlUeC5hbW91bnRzO1xuICAgIGlmIChyZWNpcGllbnRzLmxlbmd0aCAhPT0gYW1vdW50cy5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFRoZSBsZW5ndGggb2YgcmVjaXBpZW50cyAke3JlY2lwaWVudHMubGVuZ3RofSBkb2VzIG5vdCBlcXVhbCB0byB0aGUgbGVuZ3RoIG9mIGFtb3VudHMgJHthbW91bnRzLmxlbmd0aH1gXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IG91dHB1dHM6IEVudHJ5W10gPSByZWNpcGllbnRzLm1hcCgocmVjaXBpZW50LCBpbmRleCkgPT4gKHtcbiAgICAgIGFkZHJlc3M6IHJlY2lwaWVudCxcbiAgICAgIHZhbHVlOiBhbW91bnRzW2luZGV4XS50b1N0cmluZygpLFxuICAgICAgY29pbjogdGhpcy5fY29pbkNvbmZpZy5uYW1lLFxuICAgIH0pKTtcblxuICAgIGNvbnN0IHRvdGFsQW1vdW50ID0gYW1vdW50cy5yZWR1Y2UoKGFjY3VtdWxhdG9yLCBjdXJyZW50KSA9PiBhY2N1bXVsYXRvciArIGN1cnJlbnQsIDApO1xuICAgIHRoaXMuX2lucHV0cyA9IFtcbiAgICAgIHtcbiAgICAgICAgYWRkcmVzczogdHguc2VuZGVyLFxuICAgICAgICB2YWx1ZTogdG90YWxBbW91bnQudG9TdHJpbmcoKSxcbiAgICAgICAgY29pbjogdGhpcy5fY29pbkNvbmZpZy5uYW1lLFxuICAgICAgfSxcbiAgICBdO1xuICAgIHRoaXMuX291dHB1dHMgPSBvdXRwdXRzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhpcyB0cmFuc2FjdGlvbiBwYXlsb2FkXG4gICAqXG4gICAqIEBwYXJhbSByYXdUcmFuc2FjdGlvblxuICAgKi9cbiAgZnJvbVJhd1RyYW5zYWN0aW9uKHJhd1RyYW5zYWN0aW9uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0cnkge1xuICAgICAgdXRpbHMuaXNWYWxpZFJhd1RyYW5zYWN0aW9uKHJhd1RyYW5zYWN0aW9uKTtcbiAgICAgIHRoaXMuX3N1aVRyYW5zYWN0aW9uID0gVHJhbnNhY3Rpb24uZGVzZXJpYWxpemVTdWlUcmFuc2FjdGlvbihyYXdUcmFuc2FjdGlvbik7XG4gICAgICB0aGlzLl90eXBlID0gVHJhbnNhY3Rpb25UeXBlLlNlbmQ7XG4gICAgICB0aGlzLmxvYWRJbnB1dHNBbmRPdXRwdXRzKCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSGVscGVyIGZ1bmN0aW9uIGZvciBzZXJpYWxpemUoKSB0byBnZXQgdGhlIGNvcnJlY3QgdHhEYXRhIHdpdGggdHJhbnNhY3Rpb24gdHlwZVxuICAgKi9cbiAgcHJpdmF0ZSBnZXRUeERhdGEoKTogVHhEYXRhIHtcbiAgICBjb25zdCBzdWlUeCA9IHRoaXMuX3N1aVRyYW5zYWN0aW9uO1xuICAgIGxldCB0eDogVHhEZXRhaWxzO1xuXG4gICAgc3dpdGNoIChzdWlUeC50eXBlKSB7XG4gICAgICBjYXNlIFN1aVRyYW5zYWN0aW9uVHlwZS5QYXk6XG4gICAgICAgIHR4ID0ge1xuICAgICAgICAgIFBheToge1xuICAgICAgICAgICAgY29pbnM6IHN1aVR4LnBheVR4LmNvaW5zLFxuICAgICAgICAgICAgcmVjaXBpZW50czogc3VpVHgucGF5VHgucmVjaXBpZW50cyxcbiAgICAgICAgICAgIGFtb3VudHM6IHN1aVR4LnBheVR4LmFtb3VudHMsXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFN1aVRyYW5zYWN0aW9uVHlwZS5QYXlTdWk6XG4gICAgICAgIHR4ID0ge1xuICAgICAgICAgIFBheVN1aToge1xuICAgICAgICAgICAgY29pbnM6IHN1aVR4LnBheVR4LmNvaW5zLFxuICAgICAgICAgICAgcmVjaXBpZW50czogc3VpVHgucGF5VHgucmVjaXBpZW50cyxcbiAgICAgICAgICAgIGFtb3VudHM6IHN1aVR4LnBheVR4LmFtb3VudHMsXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFN1aVRyYW5zYWN0aW9uVHlwZS5QYXlBbGxTdWk6XG4gICAgICAgIHR4ID0ge1xuICAgICAgICAgIFBheUFsbFN1aToge1xuICAgICAgICAgICAgY29pbnM6IHN1aVR4LnBheVR4LmNvaW5zLFxuICAgICAgICAgICAgcmVjaXBpZW50OiBzdWlUeC5wYXlUeC5yZWNpcGllbnRzWzBdLFxuICAgICAgICAgICAgYW1vdW50OiBzdWlUeC5wYXlUeC5hbW91bnRzWzBdLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdTdWlUcmFuc2FjdGlvblR5cGUgbm90IHN1cHBvcnRlZCcpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBraW5kOiB7IFNpbmdsZTogdHggfSxcbiAgICAgIGdhc1BheW1lbnQ6IHN1aVR4Lmdhc1BheW1lbnQsXG4gICAgICBnYXNQcmljZTogU1VJX0dBU19QUklDRSxcbiAgICAgIGdhc0J1ZGdldDogc3VpVHguZ2FzQnVkZ2V0LFxuICAgICAgc2VuZGVyOiBzdWlUeC5zZW5kZXIsXG4gICAgfTtcbiAgfVxuXG4gIHNlcmlhbGl6ZSgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHR4RGF0YSA9IHRoaXMuZ2V0VHhEYXRhKCk7XG5cbiAgICBjb25zdCBkYXRhQnl0ZXMgPSBiY3Muc2VyKCdUcmFuc2FjdGlvbkRhdGEnLCB0eERhdGEpLnRvQnl0ZXMoKTtcbiAgICBjb25zdCBzZXJpYWxpemVkID0gbmV3IFVpbnQ4QXJyYXkoVFlQRV9UQUcubGVuZ3RoICsgZGF0YUJ5dGVzLmxlbmd0aCk7XG4gICAgc2VyaWFsaXplZC5zZXQoVFlQRV9UQUcpO1xuICAgIHNlcmlhbGl6ZWQuc2V0KGRhdGFCeXRlcywgVFlQRV9UQUcubGVuZ3RoKTtcbiAgICBpZiAodGhpcy5fc2lnbmF0dXJlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuX2lkID0gQnVmZmVyLmZyb20oc2hhMy5zaGEzXzI1NihzZXJpYWxpemVkKSwgJ2hleCcpLnRvU3RyaW5nKCdiYXNlNjQnKTtcbiAgICB9XG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHNlcmlhbGl6ZWQpLnRvU3RyaW5nKCdiYXNlNjQnKTtcbiAgfVxuXG4gIHN0YXRpYyBkZXNlcmlhbGl6ZVN1aVRyYW5zYWN0aW9uKHNlcmlhbGl6ZWRUeDogc3RyaW5nKTogU3VpVHJhbnNhY3Rpb24ge1xuICAgIGNvbnN0IGRhdGEgPSBCdWZmZXIuZnJvbShzZXJpYWxpemVkVHgsICdiYXNlNjQnKTtcbiAgICBjb25zdCB0cmltbWVkRGF0YSA9IG5ldyBVaW50OEFycmF5KGRhdGEuc3ViYXJyYXkoVFlQRV9UQUcubGVuZ3RoKSk7XG4gICAgY29uc3QgayA9IGJjcy5kZSgnVHJhbnNhY3Rpb25EYXRhJywgdHJpbW1lZERhdGEpO1xuXG4gICAgbGV0IHR5cGU6IFN1aVRyYW5zYWN0aW9uVHlwZTtcbiAgICBjb25zdCB0eERldGFpbHM6IFR4RGV0YWlscyA9IGsua2luZC5TaW5nbGU7XG4gICAgaWYgKHR4RGV0YWlscy5oYXNPd25Qcm9wZXJ0eSgnUGF5JykpIHtcbiAgICAgIHR5cGUgPSBTdWlUcmFuc2FjdGlvblR5cGUuUGF5O1xuICAgIH0gZWxzZSBpZiAodHhEZXRhaWxzLmhhc093blByb3BlcnR5KCdQYXlTdWknKSkge1xuICAgICAgdHlwZSA9IFN1aVRyYW5zYWN0aW9uVHlwZS5QYXlTdWk7XG4gICAgfSBlbHNlIGlmICh0eERldGFpbHMuaGFzT3duUHJvcGVydHkoJ1BheUFsbFN1aScpKSB7XG4gICAgICB0eXBlID0gU3VpVHJhbnNhY3Rpb25UeXBlLlBheUFsbFN1aTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUcmFuc2FjdGlvbiB0eXBlIG5vdCBzdXBwb3J0ZWQ6ICcgKyB0eERldGFpbHMpO1xuICAgIH1cblxuICAgIGNvbnN0IHsgY29pbnMsIHJlY2lwaWVudHMsIGFtb3VudHMgfSA9IHRoaXMuZ2V0UHJvcGVyVHhEZXRhaWxzKGssIHR5cGUpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGUsXG4gICAgICBzZW5kZXI6IHV0aWxzLm5vcm1hbGl6ZUhleElkKGsuc2VuZGVyKSxcbiAgICAgIHBheVR4OiB7XG4gICAgICAgIGNvaW5zLFxuICAgICAgICByZWNpcGllbnRzLFxuICAgICAgICBhbW91bnRzLFxuICAgICAgfSxcbiAgICAgIGdhc0J1ZGdldDogay5nYXNCdWRnZXQudG9OdW1iZXIoKSxcbiAgICAgIGdhc1ByaWNlOiBrLmdhc1ByaWNlLnRvTnVtYmVyKCksXG4gICAgICBnYXNQYXltZW50OiB7XG4gICAgICAgIG9iamVjdElkOiB1dGlscy5ub3JtYWxpemVIZXhJZChrLmdhc1BheW1lbnQub2JqZWN0SWQpLFxuICAgICAgICB2ZXJzaW9uOiBrLmdhc1BheW1lbnQudmVyc2lvbi50b051bWJlcigpLFxuICAgICAgICBkaWdlc3Q6IGsuZ2FzUGF5bWVudC5kaWdlc3QsXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBzdGF0aWMgZ2V0UHJvcGVyVHhEZXRhaWxzKFxuICAgIGs6IGFueSxcbiAgICB0eXBlOiBTdWlUcmFuc2FjdGlvblR5cGVcbiAgKTogeyBjb2luczogU3VpT2JqZWN0UmVmW107IHJlY2lwaWVudHM6IHN0cmluZ1tdOyBhbW91bnRzOiBudW1iZXJbXSB9IHtcbiAgICAvLyBiY3MgZGVzZXJpYWxpemVkIG51bWJlciBpbnRvIEJpZyBOdW1iZXIgYW5kIHJlbW92ZWQgJzB4JyBwcmVmaXggZnJvbSBhZGRyZXNzZXMsIG5lZWRzIHRvIGNvbnZlcnQgdGhlbSBiYWNrXG4gICAgbGV0IGNvaW5zO1xuICAgIGxldCByZWNpcGllbnRzO1xuICAgIGxldCBhbW91bnRzO1xuXG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlIFN1aVRyYW5zYWN0aW9uVHlwZS5QYXk6XG4gICAgICAgIGNvaW5zID0gay5raW5kLlNpbmdsZS5QYXkuY29pbnM7XG4gICAgICAgIHJlY2lwaWVudHMgPSBrLmtpbmQuU2luZ2xlLlBheS5yZWNpcGllbnRzO1xuICAgICAgICBhbW91bnRzID0gay5raW5kLlNpbmdsZS5QYXkuYW1vdW50cztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFN1aVRyYW5zYWN0aW9uVHlwZS5QYXlTdWk6XG4gICAgICAgIGNvaW5zID0gay5raW5kLlNpbmdsZS5QYXlTdWkuY29pbnM7XG4gICAgICAgIHJlY2lwaWVudHMgPSBrLmtpbmQuU2luZ2xlLlBheVN1aS5yZWNpcGllbnRzO1xuICAgICAgICBhbW91bnRzID0gay5raW5kLlNpbmdsZS5QYXlTdWkuYW1vdW50cztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFN1aVRyYW5zYWN0aW9uVHlwZS5QYXlBbGxTdWk6XG4gICAgICAgIGNvaW5zID0gay5raW5kLlNpbmdsZS5QYXlBbGxTdWkuY29pbnM7XG4gICAgICAgIHJlY2lwaWVudHMgPSBbay5raW5kLlNpbmdsZS5QYXlBbGxTdWkucmVjaXBpZW50XTtcbiAgICAgICAgYW1vdW50cyA9IFtrLmtpbmQuU2luZ2xlLlBheUFsbFN1aS5hbW91bnRdO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcignU3VpVHJhbnNhY3Rpb25UeXBlIG5vdCBzdXBwb3J0ZWQnKTtcbiAgICB9XG5cbiAgICBjb2lucyA9IGNvaW5zLm1hcCgoY29pbik6IFN1aU9iamVjdFJlZiA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBvYmplY3RJZDogdXRpbHMubm9ybWFsaXplSGV4SWQoY29pbi5vYmplY3RJZCksXG4gICAgICAgIHZlcnNpb246IGNvaW4udmVyc2lvbi50b051bWJlcigpLFxuICAgICAgICBkaWdlc3Q6IGNvaW4uZGlnZXN0LFxuICAgICAgfTtcbiAgICB9KSBhcyBTdWlPYmplY3RSZWZbXTtcbiAgICByZWNpcGllbnRzID0gcmVjaXBpZW50cy5tYXAoKHJlY2lwaWVudCkgPT4gdXRpbHMubm9ybWFsaXplSGV4SWQocmVjaXBpZW50KSkgYXMgc3RyaW5nW107XG4gICAgYW1vdW50cyA9IGFtb3VudHMubWFwKChhbW91bnQpID0+IGFtb3VudC50b051bWJlcigpKSBhcyBudW1iZXJbXTtcblxuICAgIHJldHVybiB7IGNvaW5zLCByZWNpcGllbnRzLCBhbW91bnRzIH07XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIGNvbXBsZXRlIGV4cGxhbmF0aW9uIGZvciBhIHRyYW5zZmVyIHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSB7VHhEYXRhfSBqc29uIFRoZSB0cmFuc2FjdGlvbiBkYXRhIGluIGpzb24gZm9ybWF0XG4gICAqIEBwYXJhbSB7VHJhbnNhY3Rpb25FeHBsYW5hdGlvbn0gZXhwbGFuYXRpb25SZXN1bHQgVGhlIHRyYW5zYWN0aW9uIGV4cGxhbmF0aW9uIHRvIGJlIGNvbXBsZXRlZFxuICAgKiBAcmV0dXJucyB7VHJhbnNhY3Rpb25FeHBsYW5hdGlvbn1cbiAgICovXG4gIGV4cGxhaW5UcmFuc2ZlclRyYW5zYWN0aW9uKGpzb246IFR4RGF0YSwgZXhwbGFuYXRpb25SZXN1bHQ6IFRyYW5zYWN0aW9uRXhwbGFuYXRpb24pOiBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uIHtcbiAgICBjb25zdCByZWNpcGllbnRzID0gdGhpcy5zdWlUcmFuc2FjdGlvbi5wYXlUeC5yZWNpcGllbnRzO1xuICAgIGNvbnN0IGFtb3VudHMgPSB0aGlzLnN1aVRyYW5zYWN0aW9uLnBheVR4LmFtb3VudHM7XG5cbiAgICBjb25zdCBvdXRwdXRzOiBUcmFuc2FjdGlvblJlY2lwaWVudFtdID0gcmVjaXBpZW50cy5tYXAoKHJlY2lwaWVudCwgaW5kZXgpID0+ICh7XG4gICAgICBhZGRyZXNzOiByZWNpcGllbnQsXG4gICAgICBhbW91bnQ6IGFtb3VudHNbaW5kZXhdLnRvU3RyaW5nKCksXG4gICAgfSkpO1xuICAgIGNvbnN0IG91dHB1dEFtb3VudCA9IGFtb3VudHMucmVkdWNlKChhY2N1bXVsYXRvciwgY3VycmVudCkgPT4gYWNjdW11bGF0b3IgKyBjdXJyZW50LCAwKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5leHBsYW5hdGlvblJlc3VsdCxcbiAgICAgIG91dHB1dEFtb3VudCxcbiAgICAgIG91dHB1dHMsXG4gICAgfTtcbiAgfVxufVxuIl19
176
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3RyYW5zYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxtREFPOEI7QUFHOUIsaURBQTJFO0FBQzNFLDZDQUFxRztBQUNyRywyQ0FBcUQ7QUFDckQsbUNBQWdDO0FBQ2hDLHFDQUE2QztBQUM3QyxnREFBd0I7QUFFeEIsbUZBQWtIO0FBQ2xILGlEQUE4QztBQUM5QyxrRUFBMEM7QUFDMUMsd0RBQThEO0FBRTlELE1BQXNCLFdBQWUsU0FBUSwwQkFBZTtJQUsxRCxZQUFzQixXQUFpQztRQUNyRCxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDckIsQ0FBQztJQUVELElBQUksY0FBYztRQUNoQixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUM7SUFDOUIsQ0FBQztJQUVELGlCQUFpQixDQUFDLEVBQXFCO1FBQ3JDLElBQUksQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFRCxtQkFBbUI7SUFDbkIsSUFBSSxFQUFFO1FBQ0osTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3RDLE1BQU0sSUFBSSxHQUFHLG9CQUFhLENBQUMsaUJBQWlCLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDekQsSUFBSSxDQUFDLEdBQUcsR0FBRyxjQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdCLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQztJQUNsQixDQUFDO0lBRUQsWUFBWSxDQUFDLFNBQXdCLEVBQUUsU0FBaUI7UUFDdEQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ2pELElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLENB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QU0sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7U0FDakMsQ0FBQztJQUNKLENBQUM7SUFFTyxNQUFNLENBQUMsY0FBYyxDQUFDLEtBQVk7UUFDeEMsT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDeEIsT0FBTyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDMUMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sTUFBTSxDQUFDLHFCQUFxQixDQUFDLEdBQWlCO1FBQ3BELE9BQU87WUFDTCxRQUFRLEVBQUUsNEJBQW9CLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQztZQUM1QyxPQUFPLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUM7WUFDNUIsTUFBTSxFQUFFLEdBQUcsQ0FBQyxNQUFNO1NBQ25CLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUExTEQsa0NBMExDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQmFzZUtleSxcbiAgQmFzZVRyYW5zYWN0aW9uLFxuICBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcixcbiAgUHVibGljS2V5IGFzIEJhc2VQdWJsaWNLZXksXG4gIFNpZ25hdHVyZSxcbiAgVHJhbnNhY3Rpb25UeXBlIGFzIEJpdEdvVHJhbnNhY3Rpb25UeXBlLFxufSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBTdGFraW5nUHJvZ3JhbW1hYmxlVHJhbnNhY3Rpb24sIFN1aVRyYW5zYWN0aW9uLCBUcmFuc2ZlclByb2dyYW1tYWJsZVRyYW5zYWN0aW9uLCBUeERhdGEgfSBmcm9tICcuL2lmYWNlJztcbmltcG9ydCB7IEJhc2VDb2luIGFzIENvaW5Db25maWcgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB1dGlscywgeyBBcHBJZCwgSW50ZW50LCBJbnRlbnRTY29wZSwgSW50ZW50VmVyc2lvbiB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgR2FzRGF0YSwgbm9ybWFsaXplU3VpQWRkcmVzcywgbm9ybWFsaXplU3VpT2JqZWN0SWQsIFN1aU9iamVjdFJlZiB9IGZyb20gJy4vbXlzdGVubGFiL3R5cGVzJztcbmltcG9ydCB7IFNJR05BVFVSRV9TQ0hFTUVfQllURVMgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBCdWZmZXIgfSBmcm9tICdidWZmZXInO1xuaW1wb3J0IHsgZnJvbUI2NCwgdG9CNjQgfSBmcm9tICdAbXlzdGVuL2Jjcyc7XG5pbXBvcnQgYnM1OCBmcm9tICdiczU4JztcbmltcG9ydCB7IEtleVBhaXIgfSBmcm9tICcuL2tleVBhaXInO1xuaW1wb3J0IHsgVFJBTlNBQ1RJT05fREFUQV9NQVhfU0laRSwgVHJhbnNhY3Rpb25CbG9ja0RhdGFCdWlsZGVyIH0gZnJvbSAnLi9teXN0ZW5sYWIvYnVpbGRlci9UcmFuc2FjdGlvbkRhdGFCbG9jayc7XG5pbXBvcnQgeyBidWlsZGVyIH0gZnJvbSAnLi9teXN0ZW5sYWIvYnVpbGRlcic7XG5pbXBvcnQgYmxha2UyYiBmcm9tICdAYml0Z28tYmV0YS9ibGFrZTJiJztcbmltcG9ydCB7IGhhc2hUeXBlZERhdGEgfSBmcm9tICcuL215c3RlbmxhYi9jcnlwdG9ncmFwaHkvaGFzaCc7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBUcmFuc2FjdGlvbjxUPiBleHRlbmRzIEJhc2VUcmFuc2FjdGlvbiB7XG4gIHByb3RlY3RlZCBfc3VpVHJhbnNhY3Rpb246IFN1aVRyYW5zYWN0aW9uPFQ+O1xuICBwcm90ZWN0ZWQgX3NpZ25hdHVyZTogU2lnbmF0dXJlO1xuICBwcml2YXRlIF9zZXJpYWxpemVkU2lnOiBVaW50OEFycmF5O1xuXG4gIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihfY29pbkNvbmZpZzogUmVhZG9ubHk8Q29pbkNvbmZpZz4pIHtcbiAgICBzdXBlcihfY29pbkNvbmZpZyk7XG4gIH1cblxuICBnZXQgc3VpVHJhbnNhY3Rpb24oKTogU3VpVHJhbnNhY3Rpb248VD4ge1xuICAgIHJldHVybiB0aGlzLl9zdWlUcmFuc2FjdGlvbjtcbiAgfVxuXG4gIHNldFN1aVRyYW5zYWN0aW9uKHR4OiBTdWlUcmFuc2FjdGlvbjxUPik6IHZvaWQge1xuICAgIHRoaXMuX3N1aVRyYW5zYWN0aW9uID0gdHg7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKiovXG4gIGdldCBpZCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IGRhdGFCeXRlcyA9IHRoaXMuZ2V0RGF0YUJ5dGVzKCk7XG4gICAgY29uc3QgaGFzaCA9IGhhc2hUeXBlZERhdGEoJ1RyYW5zYWN0aW9uRGF0YScsIGRhdGFCeXRlcyk7XG4gICAgdGhpcy5faWQgPSBiczU4LmVuY29kZShoYXNoKTtcbiAgICByZXR1cm4gdGhpcy5faWQ7XG4gIH1cblxuICBhZGRTaWduYXR1cmUocHVibGljS2V5OiBCYXNlUHVibGljS2V5LCBzaWduYXR1cmU6IEJ1ZmZlcik6IHZvaWQge1xuICAgIHRoaXMuX3NpZ25hdHVyZXMucHVzaChzaWduYXR1cmUudG9TdHJpbmcoJ2hleCcpKTtcbiAgICB0aGlzLl9zaWduYXR1cmUgPSB7IHB1YmxpY0tleSwgc2lnbmF0dXJlIH07XG4gICAgdGhpcy5zZXJpYWxpemUoKTtcbiAgfVxuXG4gIGdldCBzdWlTaWduYXR1cmUoKTogU2lnbmF0dXJlIHtcbiAgICByZXR1cm4gdGhpcy5fc2lnbmF0dXJlO1xuICB9XG5cbiAgZ2V0IHNlcmlhbGl6ZWRTaWcoKTogVWludDhBcnJheSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlcmlhbGl6ZWRTaWc7XG4gIH1cblxuICBzZXRTZXJpYWxpemVkU2lnKHB1YmxpY0tleTogQmFzZVB1YmxpY0tleSwgc2lnbmF0dXJlOiBCdWZmZXIpOiB2b2lkIHtcbiAgICBjb25zdCBwdWJLZXkgPSBCdWZmZXIuZnJvbShwdWJsaWNLZXkucHViLCAnaGV4Jyk7XG4gICAgY29uc3Qgc2VyaWFsaXplZF9zaWcgPSBuZXcgVWludDhBcnJheSgxICsgc2lnbmF0dXJlLmxlbmd0aCArIHB1YktleS5sZW5ndGgpO1xuICAgIHNlcmlhbGl6ZWRfc2lnLnNldChTSUdOQVRVUkVfU0NIRU1FX0JZVEVTKTtcbiAgICBzZXJpYWxpemVkX3NpZy5zZXQoc2lnbmF0dXJlLCAxKTtcbiAgICBzZXJpYWxpemVkX3NpZy5zZXQocHViS2V5LCAxICsgc2lnbmF0dXJlLmxlbmd0aCk7XG4gICAgdGhpcy5fc2VyaWFsaXplZFNpZyA9IHNlcmlhbGl6ZWRfc2lnO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGNhblNpZ24oa2V5OiBCYXNlS2V5KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogU2lnbiB0aGlzIHRyYW5zYWN0aW9uXG4gICAqXG4gICAqIEBwYXJhbSB7S2V5UGFpcn0gc2lnbmVyIGtleVxuICAgKi9cblxuICBzaWduKHNpZ25lcjogS2V5UGFpcik6IHZvaWQge1xuICAgIGlmICghdGhpcy5fc3VpVHJhbnNhY3Rpb24pIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcignZW1wdHkgdHJhbnNhY3Rpb24gdG8gc2lnbicpO1xuICAgIH1cblxuICAgIGNvbnN0IGludGVudE1lc3NhZ2UgPSB0aGlzLnNpZ25hYmxlUGF5bG9hZDtcbiAgICBjb25zdCBzaWduYXR1cmUgPSBzaWduZXIuc2lnbk1lc3NhZ2VpblVpbnQ4QXJyYXkoaW50ZW50TWVzc2FnZSk7XG5cbiAgICB0aGlzLnNldFNlcmlhbGl6ZWRTaWcoeyBwdWI6IHNpZ25lci5nZXRLZXlzKCkucHViIH0sIEJ1ZmZlci5mcm9tKHNpZ25hdHVyZSkpO1xuICAgIHRoaXMuYWRkU2lnbmF0dXJlKHsgcHViOiBzaWduZXIuZ2V0S2V5cygpLnB1YiB9LCBCdWZmZXIuZnJvbShzaWduYXR1cmUpKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB0b0Jyb2FkY2FzdEZvcm1hdCgpOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy5fc3VpVHJhbnNhY3Rpb24pIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcignRW1wdHkgdHJhbnNhY3Rpb24nKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuc2VyaWFsaXplKCk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgYWJzdHJhY3QgdG9Kc29uKCk6IFR4RGF0YTtcblxuICAvKipcbiAgICogU2V0IHRoZSB0cmFuc2FjdGlvbiB0eXBlLlxuICAgKlxuICAgKiBAcGFyYW0ge1RyYW5zYWN0aW9uVHlwZX0gdHJhbnNhY3Rpb25UeXBlIFRoZSB0cmFuc2FjdGlvbiB0eXBlIHRvIGJlIHNldC5cbiAgICovXG4gIHRyYW5zYWN0aW9uVHlwZSh0cmFuc2FjdGlvblR5cGU6IEJpdEdvVHJhbnNhY3Rpb25UeXBlKTogdm9pZCB7XG4gICAgdGhpcy5fdHlwZSA9IHRyYW5zYWN0aW9uVHlwZTtcbiAgfVxuXG4gIC8qKlxuICAgKiAgZ2V0IHRoZSBjb3JyZWN0IHR4RGF0YSB3aXRoIHRyYW5zYWN0aW9uIHR5cGVcbiAgICovXG4gIGFic3RyYWN0IGdldFR4RGF0YSgpOiBUeERhdGE7XG5cbiAgLyoqXG4gICAqIExvYWQgdGhlIGlucHV0IGFuZCBvdXRwdXQgZGF0YSBvbiB0aGlzIHRyYW5zYWN0aW9uLlxuICAgKi9cbiAgYWJzdHJhY3QgbG9hZElucHV0c0FuZE91dHB1dHMoKTogdm9pZDtcblxuICAvKipcbiAgICogU2V0cyB0aGlzIHRyYW5zYWN0aW9uIHBheWxvYWRcbiAgICpcbiAgICogQHBhcmFtIHJhd1RyYW5zYWN0aW9uXG4gICAqL1xuICBhYnN0cmFjdCBmcm9tUmF3VHJhbnNhY3Rpb24ocmF3VHJhbnNhY3Rpb246IHN0cmluZyk6IHZvaWQ7XG5cbiAgZ2V0RGF0YUJ5dGVzKCk6IFVpbnQ4QXJyYXkge1xuICAgIGNvbnN0IHR4RGF0YSA9IHRoaXMuZ2V0VHhEYXRhKCk7XG4gICAgY29uc3QgdHhTZXIgPSBidWlsZGVyLnNlcignVHJhbnNhY3Rpb25EYXRhJywgeyBWMTogdHhEYXRhIH0sIHsgbWF4U2l6ZTogVFJBTlNBQ1RJT05fREFUQV9NQVhfU0laRSB9KTtcbiAgICByZXR1cm4gdHhTZXIudG9CeXRlcygpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIGdldCBzaWduYWJsZVBheWxvYWQoKTogQnVmZmVyIHtcbiAgICBjb25zdCBkYXRhQnl0ZXMgPSB0aGlzLmdldERhdGFCeXRlcygpO1xuICAgIGNvbnN0IGludGVudE1lc3NhZ2UgPSB0aGlzLm1lc3NhZ2VXaXRoSW50ZW50KEludGVudFNjb3BlLlRyYW5zYWN0aW9uRGF0YSwgZGF0YUJ5dGVzKTtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20oYmxha2UyYigzMikudXBkYXRlKGludGVudE1lc3NhZ2UpLmRpZ2VzdCgnYmluYXJ5JykpO1xuICB9XG5cbiAgcHJpdmF0ZSBtZXNzYWdlV2l0aEludGVudChzY29wZTogSW50ZW50U2NvcGUsIG1lc3NhZ2U6IFVpbnQ4QXJyYXkpIHtcbiAgICBjb25zdCBpbnRlbnQgPSB0aGlzLmludGVudFdpdGhTY29wZShzY29wZSk7XG4gICAgY29uc3QgaW50ZW50TWVzc2FnZSA9IG5ldyBVaW50OEFycmF5KGludGVudC5sZW5ndGggKyBtZXNzYWdlLmxlbmd0aCk7XG4gICAgaW50ZW50TWVzc2FnZS5zZXQoaW50ZW50KTtcbiAgICBpbnRlbnRNZXNzYWdlLnNldChtZXNzYWdlLCBpbnRlbnQubGVuZ3RoKTtcbiAgICByZXR1cm4gaW50ZW50TWVzc2FnZTtcbiAgfVxuXG4gIHByaXZhdGUgaW50ZW50V2l0aFNjb3BlKHNjb3BlOiBJbnRlbnRTY29wZSk6IEludGVudCB7XG4gICAgcmV0dXJuIFtzY29wZSwgSW50ZW50VmVyc2lvbi5WMCwgQXBwSWQuU3VpXTtcbiAgfVxuXG4gIHNlcmlhbGl6ZSgpOiBzdHJpbmcge1xuICAgIGNvbnN0IGRhdGFCeXRlcyA9IHRoaXMuZ2V0RGF0YUJ5dGVzKCk7XG4gICAgdGhpcy5faWQgPSBiczU4LmVuY29kZShoYXNoVHlwZWREYXRhKCdUcmFuc2FjdGlvbkRhdGEnLCBkYXRhQnl0ZXMpKTtcbiAgICByZXR1cm4gdG9CNjQoZGF0YUJ5dGVzKTtcbiAgfVxuXG4gIHN0YXRpYyBkZXNlcmlhbGl6ZVN1aVRyYW5zYWN0aW9uKFxuICAgIHNlcmlhbGl6ZWRUeDogc3RyaW5nXG4gICk6IFN1aVRyYW5zYWN0aW9uPFRyYW5zZmVyUHJvZ3JhbW1hYmxlVHJhbnNhY3Rpb24gfCBTdGFraW5nUHJvZ3JhbW1hYmxlVHJhbnNhY3Rpb24+IHtcbiAgICBjb25zdCBkYXRhID0gZnJvbUI2NChzZXJpYWxpemVkVHgpO1xuICAgIGNvbnN0IHRyYW5zYWN0aW9uQmxvY2sgPSBUcmFuc2FjdGlvbkJsb2NrRGF0YUJ1aWxkZXIuZnJvbUJ5dGVzKGRhdGEpO1xuICAgIGNvbnN0IGlucHV0cyA9IHRyYW5zYWN0aW9uQmxvY2suaW5wdXRzLm1hcCgodHhJbnB1dCkgPT4gdHhJbnB1dC52YWx1ZSk7XG4gICAgY29uc3QgdHJhbnNhY3Rpb25zID0gdHJhbnNhY3Rpb25CbG9jay50cmFuc2FjdGlvbnM7XG4gICAgY29uc3QgdHhUeXBlID0gdXRpbHMuZ2V0U3VpVHJhbnNhY3Rpb25UeXBlKHRyYW5zYWN0aW9ucy5sZW5ndGggPT0gMSA/IHRyYW5zYWN0aW9uc1swXSA6IHRyYW5zYWN0aW9uc1sxXSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiB0cmFuc2FjdGlvbkJsb2NrLmdldERpZ2VzdCgpLFxuICAgICAgdHlwZTogdHhUeXBlLFxuICAgICAgc2VuZGVyOiBub3JtYWxpemVTdWlBZGRyZXNzKHRyYW5zYWN0aW9uQmxvY2suc2VuZGVyISksXG4gICAgICB0eDoge1xuICAgICAgICBpbnB1dHM6IGlucHV0cyxcbiAgICAgICAgdHJhbnNhY3Rpb25zOiB0cmFuc2FjdGlvbnMsXG4gICAgICB9LFxuICAgICAgZ2FzRGF0YToge1xuICAgICAgICBwYXltZW50OiB0aGlzLm5vcm1hbGl6ZUNvaW5zKHRyYW5zYWN0aW9uQmxvY2suZ2FzQ29uZmlnLnBheW1lbnQhKSxcbiAgICAgICAgb3duZXI6IG5vcm1hbGl6ZVN1aUFkZHJlc3ModHJhbnNhY3Rpb25CbG9jay5nYXNDb25maWcub3duZXIhKSxcbiAgICAgICAgcHJpY2U6IE51bWJlcih0cmFuc2FjdGlvbkJsb2NrLmdhc0NvbmZpZy5wcmljZSBhcyBzdHJpbmcpLFxuICAgICAgICBidWRnZXQ6IE51bWJlcih0cmFuc2FjdGlvbkJsb2NrLmdhc0NvbmZpZy5idWRnZXQgYXMgc3RyaW5nKSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBnZXRQcm9wZXJHYXNEYXRhKGs6IGFueSk6IEdhc0RhdGEge1xuICAgIHJldHVybiB7XG4gICAgICBwYXltZW50OiBbdGhpcy5ub3JtYWxpemVTdWlPYmplY3RSZWYoay5nYXNEYXRhLnBheW1lbnQpXSxcbiAgICAgIG93bmVyOiB1dGlscy5ub3JtYWxpemVIZXhJZChrLmdhc0RhdGEub3duZXIpLFxuICAgICAgcHJpY2U6IE51bWJlcihrLmdhc0RhdGEucHJpY2UpLFxuICAgICAgYnVkZ2V0OiBOdW1iZXIoay5nYXNEYXRhLmJ1ZGdldCksXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIG5vcm1hbGl6ZUNvaW5zKGNvaW5zOiBhbnlbXSk6IFN1aU9iamVjdFJlZltdIHtcbiAgICByZXR1cm4gY29pbnMubWFwKChjb2luKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5ub3JtYWxpemVTdWlPYmplY3RSZWYoY29pbik7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBub3JtYWxpemVTdWlPYmplY3RSZWYob2JqOiBTdWlPYmplY3RSZWYpOiBTdWlPYmplY3RSZWYge1xuICAgIHJldHVybiB7XG4gICAgICBvYmplY3RJZDogbm9ybWFsaXplU3VpT2JqZWN0SWQob2JqLm9iamVjdElkKSxcbiAgICAgIHZlcnNpb246IE51bWJlcihvYmoudmVyc2lvbiksXG4gICAgICBkaWdlc3Q6IG9iai5kaWdlc3QsXG4gICAgfTtcbiAgfVxufVxuIl19
@@ -1,30 +1,29 @@
1
1
  /// <reference types="node" />
2
- import { BaseAddress, BaseKey, BaseTransactionBuilder, PublicKey as BasePublicKey, TransactionType } from '@bitgo-beta/sdk-core';
2
+ import { BaseAddress, BaseKey, BaseTransactionBuilder, PublicKey as BasePublicKey, Recipient, Signature, TransactionType } from '@bitgo-beta/sdk-core';
3
3
  import { Transaction } from './transaction';
4
4
  import BigNumber from 'bignumber.js';
5
5
  import { BaseCoin as CoinConfig } from '@bitgo-beta/statics';
6
- import { PayTx, SuiObjectRef, SuiTransaction } from './iface';
7
- import { SuiTransactionType } from './constants';
8
- export declare abstract class TransactionBuilder extends BaseTransactionBuilder {
9
- protected _transaction: Transaction;
10
- private _signatures;
6
+ import { StakingProgrammableTransaction, SuiTransactionType, TransferProgrammableTransaction } from './iface';
7
+ import { KeyPair } from './keyPair';
8
+ import { GasData, SuiObjectRef } from './mystenlab/types';
9
+ export declare abstract class TransactionBuilder<T = TransferProgrammableTransaction | StakingProgrammableTransaction> extends BaseTransactionBuilder {
10
+ protected _transaction: Transaction<T>;
11
+ protected _signatures: Signature[];
12
+ protected _signer: KeyPair;
11
13
  protected _type: SuiTransactionType;
12
14
  protected _sender: string;
13
- protected _gasBudget: number;
14
- protected _gasPrice: number;
15
- protected _payTx: PayTx;
16
- protected _gasPayment: SuiObjectRef;
17
- constructor(_coinConfig: Readonly<CoinConfig>);
15
+ protected _gasData: GasData;
16
+ protected constructor(_coinConfig: Readonly<CoinConfig>);
18
17
  /**
19
18
  * The transaction type.
20
19
  */
21
20
  protected abstract get transactionType(): TransactionType;
22
21
  /** @inheritdoc */
23
- protected get transaction(): Transaction;
22
+ protected get transaction(): Transaction<T>;
24
23
  /** @inheritdoc */
25
- protected set transaction(transaction: Transaction);
24
+ protected set transaction(transaction: Transaction<T>);
26
25
  /** @inheritdoc */
27
- protected signImplementation(key: BaseKey): Transaction;
26
+ protected signImplementation(key: BaseKey): Transaction<T>;
28
27
  /** @inheritDoc */
29
28
  addSignature(publicKey: BasePublicKey, signature: Buffer): void;
30
29
  /**
@@ -36,40 +35,26 @@ export declare abstract class TransactionBuilder extends BaseTransactionBuilder
36
35
  */
37
36
  sender(senderAddress: string): this;
38
37
  type(type: SuiTransactionType): this;
39
- gasBudget(gasBudget: number): this;
40
- gasPrice(gasPrice: number): this;
41
- payTx(payTx: PayTx): this;
42
- gasPayment(gasPayment: SuiObjectRef): this;
38
+ gasData(gasData: GasData): this;
43
39
  /**
44
40
  * Initialize the transaction builder fields using the decoded transaction data
45
41
  *
46
42
  * @param {Transaction} tx the transaction data
47
43
  */
48
- initBuilder(tx: Transaction): void;
49
- /** @inheritdoc */
50
- protected fromImplementation(rawTransaction: string): Transaction;
51
- /** @inheritdoc */
52
- protected buildImplementation(): Promise<Transaction>;
53
- protected buildSuiTransaction(): SuiTransaction;
54
- reorderInputCoins(): SuiObjectRef[];
44
+ abstract initBuilder(tx: Transaction<T>): void;
55
45
  /** @inheritdoc */
56
46
  validateAddress(address: BaseAddress, addressFormat?: string): void;
47
+ validateRecipients(recipients: Recipient[]): void;
48
+ validateGasData(gasData: GasData): void;
57
49
  validateGasBudget(gasBudget: number): void;
58
50
  validateGasPrice(gasPrice: number): void;
59
- validateTxPay(payTx: PayTx): void;
60
- validateGasPayment(gasPayment: SuiObjectRef): void;
51
+ validateGasPayment(payments: SuiObjectRef[]): void;
61
52
  validateSuiObjectRef(suiObjectRef: SuiObjectRef, field: string): void;
62
53
  /** @inheritdoc */
63
54
  validateKey(key: BaseKey): void;
64
55
  /** @inheritdoc */
65
56
  validateRawTransaction(rawTransaction: string): void;
66
57
  /** @inheritdoc */
67
- validateTransaction(transaction: Transaction): void;
68
- /**
69
- * Validates all fields are defined
70
- */
71
- private validateTransactionFields;
72
- /** @inheritdoc */
73
58
  validateValue(value: BigNumber): void;
74
59
  }
75
60
  //# sourceMappingURL=transactionBuilder.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"transactionBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/transactionBuilder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"transactionBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/transactionBuilder.ts"],"names":[],"mappings":";AAAA,OAAO,EACL,WAAW,EACX,OAAO,EACP,sBAAsB,EAGtB,SAAS,IAAI,aAAa,EAC1B,SAAS,EACT,SAAS,EACT,eAAe,EAChB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,OAAO,SAAS,MAAM,cAAc,CAAC;AACrC,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,8BAA8B,EAAE,kBAAkB,EAAE,+BAA+B,EAAE,MAAM,SAAS,CAAC;AAE9G,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAE1D,8BAAsB,kBAAkB,CACtC,CAAC,GAAG,+BAA+B,GAAG,8BAA8B,CACpE,SAAQ,sBAAsB;IAC9B,SAAS,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;IACvC,SAAS,CAAC,WAAW,EAAE,SAAS,EAAE,CAAM;IACxC,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC;IAE3B,SAAS,CAAC,KAAK,EAAE,kBAAkB,CAAC;IACpC,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAC;IAE5B,SAAS,aAAa,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAKvD;;OAEG;IACH,SAAS,CAAC,QAAQ,KAAK,eAAe,IAAI,eAAe,CAAC;IAE1D,kBAAkB;IAClB,SAAS,KAAK,WAAW,IAAI,WAAW,CAAC,CAAC,CAAC,CAE1C;IAED,kBAAkB;IAClB,SAAS,KAAK,WAAW,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC,EAEpD;IAED,kBAAkB;IAClB,SAAS,CAAC,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,WAAW,CAAC,CAAC,CAAC;IAO1D,kBAAkB;IAClB,YAAY,CAAC,SAAS,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAM/D;;;;;;OAMG;IACH,MAAM,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI;IAMnC,IAAI,CAAC,IAAI,EAAE,kBAAkB,GAAG,IAAI;IAKpC,OAAO,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAM/B;;;;OAIG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,IAAI;IAG9C,kBAAkB;IAClB,eAAe,CAAC,OAAO,EAAE,WAAW,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI;IAMnE,kBAAkB,CAAC,UAAU,EAAE,SAAS,EAAE,GAAG,IAAI;IAWjD,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IASvC,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAM1C,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAOxC,kBAAkB,CAAC,QAAQ,EAAE,YAAY,EAAE,GAAG,IAAI;IAOlD,oBAAoB,CAAC,YAAY,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAYrE,kBAAkB;IAClB,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI;IAQ/B,kBAAkB;IAClB,sBAAsB,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI;IASpD,kBAAkB;IAClB,aAAa,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI;CAMtC"}