@bitgo-beta/sdk-coin-avaxp 3.5.10-beta.31 → 3.5.10-beta.310

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 (82) hide show
  1. package/CHANGELOG.md +347 -0
  2. package/dist/src/avaxp.d.ts +1 -2
  3. package/dist/src/avaxp.d.ts.map +1 -1
  4. package/dist/src/avaxp.js +23 -29
  5. package/dist/src/iface.d.ts +0 -4
  6. package/dist/src/iface.d.ts.map +1 -1
  7. package/dist/src/iface.js +1 -1
  8. package/dist/src/index.js +6 -2
  9. package/dist/src/lib/atomicInCTransactionBuilder.d.ts +2 -2
  10. package/dist/src/lib/atomicInCTransactionBuilder.d.ts.map +1 -1
  11. package/dist/src/lib/atomicInCTransactionBuilder.js +1 -1
  12. package/dist/src/lib/atomicTransactionBuilder.d.ts +2 -2
  13. package/dist/src/lib/atomicTransactionBuilder.d.ts.map +1 -1
  14. package/dist/src/lib/atomicTransactionBuilder.js +5 -5
  15. package/dist/src/lib/delegatorTxBuilder.d.ts +6 -6
  16. package/dist/src/lib/delegatorTxBuilder.d.ts.map +1 -1
  17. package/dist/src/lib/delegatorTxBuilder.js +7 -7
  18. package/dist/src/lib/deprecatedTransaction.d.ts +100 -0
  19. package/dist/src/lib/deprecatedTransaction.d.ts.map +1 -0
  20. package/dist/src/lib/deprecatedTransaction.js +345 -0
  21. package/dist/src/lib/deprecatedTransactionBuilder.d.ts +115 -0
  22. package/dist/src/lib/deprecatedTransactionBuilder.d.ts.map +1 -0
  23. package/dist/src/lib/deprecatedTransactionBuilder.js +210 -0
  24. package/dist/src/lib/exportInCTxBuilder.d.ts +8 -8
  25. package/dist/src/lib/exportInCTxBuilder.d.ts.map +1 -1
  26. package/dist/src/lib/exportInCTxBuilder.js +4 -4
  27. package/dist/src/lib/exportTxBuilder.d.ts +4 -4
  28. package/dist/src/lib/exportTxBuilder.d.ts.map +1 -1
  29. package/dist/src/lib/exportTxBuilder.js +3 -3
  30. package/dist/src/lib/iface.d.ts +11 -8
  31. package/dist/src/lib/iface.d.ts.map +1 -1
  32. package/dist/src/lib/iface.js +1 -1
  33. package/dist/src/lib/importInCTxBuilder.d.ts +4 -4
  34. package/dist/src/lib/importInCTxBuilder.d.ts.map +1 -1
  35. package/dist/src/lib/importInCTxBuilder.js +6 -6
  36. package/dist/src/lib/importTxBuilder.d.ts +4 -4
  37. package/dist/src/lib/importTxBuilder.d.ts.map +1 -1
  38. package/dist/src/lib/importTxBuilder.js +3 -3
  39. package/dist/src/lib/index.d.ts +2 -0
  40. package/dist/src/lib/index.d.ts.map +1 -1
  41. package/dist/src/lib/index.js +11 -3
  42. package/dist/src/lib/keyPair.js +9 -9
  43. package/dist/src/lib/permissionlessValidatorTxBuilder.d.ts +154 -0
  44. package/dist/src/lib/permissionlessValidatorTxBuilder.d.ts.map +1 -0
  45. package/dist/src/lib/permissionlessValidatorTxBuilder.js +452 -0
  46. package/dist/src/lib/transaction.d.ts +19 -40
  47. package/dist/src/lib/transaction.d.ts.map +1 -1
  48. package/dist/src/lib/transaction.js +67 -166
  49. package/dist/src/lib/transactionBuilder.d.ts +31 -82
  50. package/dist/src/lib/transactionBuilder.d.ts.map +1 -1
  51. package/dist/src/lib/transactionBuilder.js +65 -151
  52. package/dist/src/lib/transactionBuilderFactory.d.ts +16 -8
  53. package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -1
  54. package/dist/src/lib/transactionBuilderFactory.js +78 -19
  55. package/dist/src/lib/utils.d.ts +22 -7
  56. package/dist/src/lib/utils.d.ts.map +1 -1
  57. package/dist/src/lib/utils.js +53 -11
  58. package/dist/src/lib/utxoEngine.d.ts +10 -1
  59. package/dist/src/lib/utxoEngine.d.ts.map +1 -1
  60. package/dist/src/lib/utxoEngine.js +27 -3
  61. package/dist/src/lib/validatorTxBuilder.d.ts +4 -4
  62. package/dist/src/lib/validatorTxBuilder.d.ts.map +1 -1
  63. package/dist/src/lib/validatorTxBuilder.js +2 -2
  64. package/dist/test/resources/avaxp.d.ts +80 -5
  65. package/dist/test/resources/avaxp.d.ts.map +1 -1
  66. package/dist/test/resources/avaxp.js +164 -31
  67. package/dist/test/resources/tx/importP.js +8 -8
  68. package/dist/test/unit/avaxp.js +90 -102
  69. package/dist/test/unit/lib/exportC2PTxBuilder.js +6 -2
  70. package/dist/test/unit/lib/exportP2CTxBuilder.js +10 -10
  71. package/dist/test/unit/lib/importC2PTxBuilder.js +8 -4
  72. package/dist/test/unit/lib/importP2CTxBuilder.js +8 -6
  73. package/dist/test/unit/lib/keyPair.js +6 -2
  74. package/dist/test/unit/lib/permissionlessValidatorTxBuilder.d.ts +2 -0
  75. package/dist/test/unit/lib/permissionlessValidatorTxBuilder.d.ts.map +1 -0
  76. package/dist/test/unit/lib/permissionlessValidatorTxBuilder.js +331 -0
  77. package/dist/test/unit/lib/transactionBuilderFactory.js +8 -4
  78. package/dist/test/unit/lib/utils.js +6 -2
  79. package/dist/test/unit/lib/utxoEngine.js +6 -6
  80. package/dist/test/unit/lib/validateTxBuilder.js +12 -13
  81. package/dist/tsconfig.tsbuildinfo +1 -12757
  82. package/package.json +9 -8
@@ -0,0 +1,452 @@
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
+ exports.PermissionlessValidatorTxBuilder = void 0;
7
+ const avalanchejs_1 = require("@bitgo/avalanchejs");
8
+ const sdk_core_1 = require("@bitgo-beta/sdk-core");
9
+ const avalanche_1 = require("avalanche");
10
+ const iface_1 = require("./iface");
11
+ const keyPair_1 = require("./keyPair");
12
+ const transactionBuilder_1 = require("./transactionBuilder");
13
+ const utils_1 = __importDefault(require("./utils"));
14
+ const utxoEngine_1 = require("./utxoEngine");
15
+ class PermissionlessValidatorTxBuilder extends transactionBuilder_1.TransactionBuilder {
16
+ /**
17
+ *
18
+ * @param coinConfig
19
+ */
20
+ constructor(coinConfig) {
21
+ super(coinConfig);
22
+ this._signer = [];
23
+ this.recoverSigner = false;
24
+ }
25
+ /**
26
+ * get transaction type
27
+ * @protected
28
+ */
29
+ get transactionType() {
30
+ return sdk_core_1.TransactionType.AddPermissionlessValidator;
31
+ }
32
+ // region Validators
33
+ /**
34
+ * Validates locktime
35
+ * @param locktime
36
+ */
37
+ validateLocktime(locktime) {
38
+ if (locktime < BigInt(0)) {
39
+ throw new sdk_core_1.BuildTransactionError('Invalid transaction: locktime must be 0 or higher');
40
+ }
41
+ }
42
+ /**
43
+ * Validate that the delegation fee is at least the minDelegationFee
44
+ * @param delegationFeeRate number
45
+ */
46
+ validateDelegationFeeRate(delegationFeeRate) {
47
+ if (delegationFeeRate < Number(this.transaction._network.minDelegationFee)) {
48
+ throw new sdk_core_1.BuildTransactionError(`Delegation fee cannot be less than ${this.transaction._network.minDelegationFee}`);
49
+ }
50
+ }
51
+ /**
52
+ * Check the UTXO has expected fields.
53
+ * @param UTXO
54
+ */
55
+ validateUtxo(value) {
56
+ ['outputID', 'amount', 'txid', 'outputidx'].forEach((field) => {
57
+ if (!value.hasOwnProperty(field))
58
+ throw new sdk_core_1.BuildTransactionError(`Utxos required ${field}`);
59
+ });
60
+ }
61
+ // endregion
62
+ /**
63
+ * Addresses where reward should be deposit
64
+ * @param {string | string[]} address - single address or array of addresses to receive rewards
65
+ */
66
+ rewardAddresses(address) {
67
+ const rewardAddresses = address instanceof Array ? address : [address];
68
+ this.transaction._rewardAddresses = rewardAddresses.map(utils_1.default.parseAddress);
69
+ return this;
70
+ }
71
+ /** @inheritdoc */
72
+ fromImplementation(rawTransaction) {
73
+ const manager = avalanchejs_1.utils.getManagerForVM('PVM');
74
+ const [codec, rest] = manager.getCodecFromBuffer(avalanchejs_1.utils.hexToBuffer(rawTransaction));
75
+ const tx = codec.UnpackPrefix(rest)[0];
76
+ this.initBuilder(tx);
77
+ return this.transaction;
78
+ }
79
+ /** @inheritdoc */
80
+ async buildImplementation() {
81
+ this.buildAvaxTransaction();
82
+ this.transaction.setTransactionType(this.transactionType);
83
+ if (this.hasSigner()) {
84
+ for (const keyPair of this._signer) {
85
+ await this.transaction.sign(keyPair);
86
+ }
87
+ }
88
+ return this.transaction;
89
+ }
90
+ /**
91
+ *
92
+ * @param nodeID
93
+ */
94
+ nodeID(nodeID) {
95
+ this.validateNodeID(nodeID);
96
+ this._nodeID = nodeID;
97
+ return this;
98
+ }
99
+ /**
100
+ *
101
+ * @param blsPublicKey
102
+ */
103
+ blsPublicKey(blsPublicKey) {
104
+ (0, sdk_core_1.isValidBLSPublicKey)(blsPublicKey);
105
+ this._blsPublicKey = blsPublicKey;
106
+ return this;
107
+ }
108
+ /**
109
+ *
110
+ * @param blsSignature
111
+ */
112
+ blsSignature(blsSignature) {
113
+ (0, sdk_core_1.isValidBLSSignature)(blsSignature);
114
+ this._blsSignature = blsSignature;
115
+ return this;
116
+ }
117
+ /**
118
+ * Locktime is a long that contains the unix timestamp that this output can be spent after.
119
+ * The unix timestamp is specific to the second.
120
+ * @param value
121
+ */
122
+ locktime(value) {
123
+ this.validateLocktime(BigInt(value));
124
+ this._transaction._locktime = BigInt(value);
125
+ return this;
126
+ }
127
+ /**
128
+ * set the delegationFeeRate
129
+ * @param value number
130
+ */
131
+ delegationFeeRate(value) {
132
+ this.validateDelegationFeeRate(value);
133
+ this._delegationFeeRate = value;
134
+ return this;
135
+ }
136
+ /**
137
+ * start time of staking period
138
+ * @param value
139
+ */
140
+ startTime(value) {
141
+ this._startTime = BigInt(value);
142
+ return this;
143
+ }
144
+ /**
145
+ * end time of staking period
146
+ * @param value
147
+ */
148
+ endTime(value) {
149
+ this._endTime = BigInt(value);
150
+ return this;
151
+ }
152
+ /**
153
+ *
154
+ * @param value
155
+ */
156
+ stakeAmount(value) {
157
+ const valueBigInt = typeof value === 'bigint' ? value : BigInt(value);
158
+ this.validateStakeAmount(valueBigInt);
159
+ this._stakeAmount = valueBigInt;
160
+ return this;
161
+ }
162
+ // region Validators
163
+ /**
164
+ * validates a correct NodeID is used
165
+ * @param nodeID
166
+ */
167
+ validateNodeID(nodeID) {
168
+ if (!nodeID) {
169
+ throw new sdk_core_1.BuildTransactionError('Invalid transaction: missing nodeID');
170
+ }
171
+ if (nodeID.slice(0, 6) !== 'NodeID') {
172
+ throw new sdk_core_1.BuildTransactionError('Invalid transaction: invalid NodeID tag');
173
+ }
174
+ if (!(avalanchejs_1.utils.base58.decode(nodeID.slice(7)).length === 24)) {
175
+ throw new sdk_core_1.BuildTransactionError('Invalid transaction: NodeID is not in cb58 format');
176
+ }
177
+ }
178
+ /**
179
+ * Validate stake duration
180
+ * @param startTime
181
+ * @param endTime
182
+ */
183
+ validateStakeDuration(startTime, endTime) {
184
+ if (endTime < startTime) {
185
+ throw new sdk_core_1.BuildTransactionError('End date cannot be less than start date');
186
+ }
187
+ }
188
+ /**
189
+ * Validate stake amount
190
+ * @param amount
191
+ */
192
+ validateStakeAmount(amount) {
193
+ const minStake = BigInt(this.transaction._network.minStake);
194
+ if (amount < minStake) {
195
+ throw new sdk_core_1.BuildTransactionError('Minimum staking amount is ' + Number(minStake) / 1000000000 + ' AVAX.');
196
+ }
197
+ return;
198
+ }
199
+ // endregion
200
+ /** @inheritdoc */
201
+ initBuilder(tx) {
202
+ super.initBuilder(tx);
203
+ const permissionlessValidatorTx = tx.tx;
204
+ if (!this.verifyTxType(permissionlessValidatorTx)) {
205
+ throw new sdk_core_1.NotSupported('Transaction cannot be parsed or has an unsupported transaction type');
206
+ }
207
+ const outputs = permissionlessValidatorTx.baseTx.outputs;
208
+ if (outputs.length !== 1) {
209
+ throw new sdk_core_1.BuildTransactionError('Transaction can have one external output');
210
+ }
211
+ const output = outputs[0].output;
212
+ if (outputs[0].getAssetId() !== this.transaction._assetId) {
213
+ throw new Error('The Asset ID of the output does not match the transaction');
214
+ }
215
+ this.transaction._blsPublicKey = avalanchejs_1.utils.bufferToHex(permissionlessValidatorTx.signer.proof.publicKey);
216
+ this._blsPublicKey = this.transaction._blsPublicKey;
217
+ this.transaction._blsSignature = avalanchejs_1.utils.bufferToHex(permissionlessValidatorTx.signer.proof.signature);
218
+ this._blsSignature = this.transaction._blsSignature;
219
+ this.transaction._locktime = output.outputOwners.locktime.value();
220
+ this.transaction._threshold = output.outputOwners.threshold.value();
221
+ this.transaction._nodeID = permissionlessValidatorTx.subnetValidator.validator.nodeId.toString();
222
+ this._nodeID = this.transaction._nodeID;
223
+ this.transaction._startTime = permissionlessValidatorTx.subnetValidator.validator.startTime.value();
224
+ this._startTime = this.transaction._startTime;
225
+ this.transaction._endTime = permissionlessValidatorTx.subnetValidator.validator.endTime.value();
226
+ this._endTime = this.transaction._endTime;
227
+ this.transaction._fromAddresses = output.outputOwners.addrs.map((a) => a.toBytes());
228
+ this.transaction._stakeAmount = permissionlessValidatorTx.stake[0].output.amount();
229
+ this.stakeAmount(permissionlessValidatorTx.stake[0].output.amount());
230
+ this.transaction._utxos = (0, utxoEngine_1.recoverUtxos)(permissionlessValidatorTx.getInputs());
231
+ // TODO(CR-1073): remove log
232
+ console.log('utxos: ', this.transaction._utxos);
233
+ console.log('fromAddresses: ', this.transaction.fromAddresses);
234
+ return this;
235
+ }
236
+ static verifyTxType(type) {
237
+ return type === avalanchejs_1.TypeSymbols.AddPermissionlessValidatorTx;
238
+ }
239
+ verifyTxType(tx) {
240
+ return PermissionlessValidatorTxBuilder.verifyTxType(tx._type);
241
+ }
242
+ /**
243
+ * Since addresses in outputs get reordered, we need to make sure signatures
244
+ * are added in the correct position
245
+ * To find the position, we use the output's addresses to create the
246
+ * signatureIdx in the order needed (i.e. [user, bitgo, backup])
247
+ * @protected
248
+ */
249
+ calculateUtxos() {
250
+ var _a, _b;
251
+ const inputs = [];
252
+ const stakeOutputs = [];
253
+ const changeOutputs = [];
254
+ const utxos = [];
255
+ let currentTotal = BigInt(0);
256
+ // delegating and validating have no fees
257
+ const totalTarget = this._stakeAmount.valueOf();
258
+ const credentials = (_a = this.transaction.credentials) !== null && _a !== void 0 ? _a : [];
259
+ // Convert fromAddresses to string
260
+ // The order of fromAddresses is determined by the source of the data
261
+ // When building from params, the order is [user, bitgo, backup]
262
+ // The order from tx hex is [bitgo, backup, user]
263
+ const bitgoAddresses = this.transaction._fromAddresses.map((b) => avalanchejs_1.utils.format(this.transaction._network.alias, this.transaction._network.hrp, b));
264
+ // TODO(CR-1073): remove log
265
+ console.log(`bitgoAddress: ${bitgoAddresses}`);
266
+ // if we are in OVC, none of the utxos will have addresses since they come from
267
+ // deserialized inputs (which don't have addresses), not the IMS
268
+ const buildOutputs = this.transaction._utxos[0].addresses.length !== 0 || ((_b = this.transaction._utxos[0].addressesIndex) === null || _b === void 0 ? void 0 : _b.length) !== 0;
269
+ const assetId = avalanchejs_1.Id.fromString(this.transaction._assetId);
270
+ this.transaction._utxos.forEach((utxo, index) => {
271
+ var _a;
272
+ // validate the utxos
273
+ if (!utxo) {
274
+ throw new sdk_core_1.BuildTransactionError('Utxo is undefined');
275
+ }
276
+ // addressesIndex should never have a mismatch
277
+ if ((_a = utxo.addressesIndex) === null || _a === void 0 ? void 0 : _a.includes(-1)) {
278
+ throw new sdk_core_1.BuildTransactionError('Addresses are inconsistent');
279
+ }
280
+ if (utxo.threshold < this.transaction._threshold) {
281
+ throw new sdk_core_1.BuildTransactionError('Threshold is inconsistent');
282
+ }
283
+ const bitgoIndexToOnChainIndex = new Map();
284
+ // in WP, output.addressesIndex is empty, so fill it
285
+ if (!utxo.addressesIndex || utxo.addressesIndex.length === 0) {
286
+ utxo.addressesIndex = bitgoAddresses.map((a) => utxo.addresses.indexOf(a));
287
+ }
288
+ // utxo.addresses is null when build from raw
289
+ // but utxo.addressesIndex has only 2 elements when build from raw
290
+ // so the bitgoIndexToOnChainIndex map will be empty
291
+ utxo.addresses.forEach((a) => {
292
+ bitgoIndexToOnChainIndex.set(bitgoAddresses.indexOf(a), utxo.addresses.indexOf(a));
293
+ });
294
+ // TODO(CR-1073): remove log
295
+ console.log(`utxo.addresses: ${utxo.addresses}`);
296
+ console.log(`bitgoIndexToOnChainIndex: ${Array.from(bitgoIndexToOnChainIndex)}`);
297
+ // in OVC, output.addressesIndex is defined correctly from the previous iteration
298
+ if (utxo.outputID === iface_1.SECP256K1_Transfer_Output) {
299
+ const utxoAmount = BigInt(utxo.amount);
300
+ // either user (0) or recovery (2)
301
+ // On regular mode: [user, bitgo] (i.e. [0, 1])
302
+ // On recovery mode: [backup, bitgo] (i.e. [2, 1])
303
+ const userOrBackupIndex = this.recoverSigner ? 2 : 0;
304
+ const bitgoIndex = 1;
305
+ currentTotal = currentTotal + utxoAmount;
306
+ const utxoId = avalanchejs_1.avaxSerial.UTXOID.fromNative(utxo.txid, Number(utxo.outputidx));
307
+ let addressesIndex = [];
308
+ if (utxo.addressesIndex && bitgoIndexToOnChainIndex.size === 0) {
309
+ addressesIndex = [...utxo.addressesIndex];
310
+ }
311
+ else {
312
+ addressesIndex.push(bitgoIndexToOnChainIndex.get(userOrBackupIndex));
313
+ addressesIndex.push(bitgoIndexToOnChainIndex.get(bitgoIndex));
314
+ }
315
+ const transferInputs = new avalanchejs_1.TransferInput(new avalanchejs_1.BigIntPr(utxoAmount), new avalanchejs_1.Input([...addressesIndex].sort().map((num) => new avalanchejs_1.Int(num))));
316
+ // TODO(CR-1073): remove log
317
+ console.log(`using addressesIndex sorted: ${[...addressesIndex].sort()}`);
318
+ const input = new avalanchejs_1.avaxSerial.TransferableInput(utxoId, assetId, transferInputs);
319
+ utxos.push(new avalanchejs_1.Utxo(utxoId, assetId, transferInputs));
320
+ inputs.push(input);
321
+ if (!this.transaction.credentials || this.transaction.credentials.length == 0) {
322
+ if (buildOutputs) {
323
+ // For the bitgo signature we create an empty signature
324
+ // For the user/backup signature we store the address that matches the key
325
+ // if bitgo address comes before < user/backup address
326
+ // TODO(CR-1073): remove log
327
+ console.log(`bitgo index on chain: ${utxo.addressesIndex[bitgoIndex]}`);
328
+ console.log(`user Or Backup Index: ${utxo.addressesIndex[userOrBackupIndex]}`);
329
+ if (utxo.addressesIndex[bitgoIndex] < utxo.addressesIndex[userOrBackupIndex]) {
330
+ // TODO(CR-1073): remove log
331
+ console.log(`user or backup credentials after bitgo`);
332
+ credentials.push(new avalanchejs_1.Credential([
333
+ utils_1.default.createNewSig(avalanche_1.Buffer.from('').toString('hex')),
334
+ utils_1.default.createNewSig(avalanche_1.Buffer.from(this.transaction._fromAddresses[userOrBackupIndex]).toString('hex')),
335
+ ]));
336
+ }
337
+ else {
338
+ // TODO(CR-1073): remove log
339
+ console.log(`user or backup credentials before bitgo`);
340
+ credentials.push(new avalanchejs_1.Credential([
341
+ utils_1.default.createNewSig(avalanche_1.Buffer.from(this.transaction._fromAddresses[userOrBackupIndex]).toString('hex')),
342
+ utils_1.default.createNewSig(avalanche_1.Buffer.from('').toString('hex')),
343
+ ]));
344
+ }
345
+ }
346
+ else {
347
+ // TODO(CR-1073): verify this else case for OVC
348
+ credentials.push(new avalanchejs_1.Credential(addressesIndex.map((i) => utils_1.default.createNewSig(avalanche_1.Buffer.from(this.transaction._fromAddresses[i]).toString('hex')))));
349
+ }
350
+ }
351
+ else {
352
+ // TODO(CR-1073): remove log
353
+ console.log(`reusing credentials from transaction`);
354
+ }
355
+ }
356
+ });
357
+ if (buildOutputs) {
358
+ if (currentTotal < totalTarget) {
359
+ throw new sdk_core_1.BuildTransactionError(`Utxo outputs get ${currentTotal.toString()} and ${totalTarget.toString()} is required`);
360
+ }
361
+ else if (currentTotal >= totalTarget) {
362
+ const stakeOutput = new avalanchejs_1.avaxSerial.TransferableOutput(assetId, new avalanchejs_1.TransferOutput(new avalanchejs_1.BigIntPr(totalTarget), new avalanchejs_1.OutputOwners(new avalanchejs_1.BigIntPr(this.transaction._locktime), new avalanchejs_1.Int(this.transaction._threshold), [...this.transaction._fromAddresses]
363
+ .sort((a, b) => avalanchejs_1.utils.bytesCompare(a, b))
364
+ .map((a) => avalanchejs_1.Address.fromBytes(a)[0]))));
365
+ stakeOutputs.push(stakeOutput);
366
+ if (currentTotal > totalTarget) {
367
+ const changeOutput = new avalanchejs_1.avaxSerial.TransferableOutput(assetId, new avalanchejs_1.TransferOutput(new avalanchejs_1.BigIntPr(currentTotal - totalTarget), new avalanchejs_1.OutputOwners(new avalanchejs_1.BigIntPr(this.transaction._locktime), new avalanchejs_1.Int(this.transaction._threshold), [...this.transaction._fromAddresses]
368
+ .sort((a, b) => avalanchejs_1.utils.bytesCompare(a, b))
369
+ .map((a) => avalanchejs_1.Address.fromBytes(a)[0]))));
370
+ changeOutputs.push(changeOutput);
371
+ }
372
+ }
373
+ }
374
+ inputs.sort((a, b) => {
375
+ if (avalanchejs_1.utils.bytesEqual(a.utxoID.txID.toBytes(), b.utxoID.txID.toBytes())) {
376
+ return a.utxoID.outputIdx.value() - b.utxoID.outputIdx.value();
377
+ }
378
+ return avalanchejs_1.utils.bytesCompare(a.utxoID.txID.toBytes(), b.utxoID.txID.toBytes());
379
+ });
380
+ return { inputs, stakeOutputs, changeOutputs, utxos, credentials };
381
+ }
382
+ /**
383
+ * Build the add validator transaction
384
+ * @protected
385
+ */
386
+ buildAvaxTransaction() {
387
+ this.validateStakeDuration(this.transaction._startTime, this.transaction._endTime);
388
+ const { inputs, stakeOutputs, changeOutputs, utxos, credentials } = this.calculateUtxos();
389
+ const baseTx = avalanchejs_1.avaxSerial.BaseTx.fromNative(this.transaction._networkID, this.transaction._blockchainID, changeOutputs, inputs, new Uint8Array() // default empty memo
390
+ );
391
+ const subnetValidator = avalanchejs_1.pvmSerial.SubnetValidator.fromNative(this._nodeID, this._startTime, this._endTime, this._stakeAmount, avalanchejs_1.networkIDs.PrimaryNetworkID);
392
+ const signer = new avalanchejs_1.pvmSerial.Signer(new avalanchejs_1.pvmSerial.ProofOfPossession(avalanchejs_1.utils.hexToBuffer(this._blsPublicKey), avalanchejs_1.utils.hexToBuffer(this._blsSignature)));
393
+ const outputOwners = new avalanchejs_1.OutputOwners(new avalanchejs_1.BigIntPr(this.transaction._locktime), new avalanchejs_1.Int(this.transaction._threshold), [...this.transaction._fromAddresses]
394
+ .sort((a, b) => avalanchejs_1.utils.bytesCompare(a, b))
395
+ .map((a) => avalanchejs_1.Address.fromBytes(a)[0]));
396
+ // TODO(CR-1073): check this value
397
+ // Shares 10,000 times percentage of reward taken from delegators
398
+ // https://docs.avax.network/reference/avalanchego/p-chain/txn-format#unsigned-add-validator-tx
399
+ const shares = new avalanchejs_1.Int(1e4 * 2);
400
+ const addressMaps = [...this.transaction._fromAddresses]
401
+ .sort((a, b) => avalanchejs_1.utils.bytesCompare(a, b))
402
+ .map((address) => new avalanchejs_1.utils.AddressMap([[new avalanchejs_1.Address(address), 0]]));
403
+ this.transaction.setTransaction(new avalanchejs_1.UnsignedTx(new avalanchejs_1.pvmSerial.AddPermissionlessValidatorTx(baseTx, subnetValidator, signer, stakeOutputs, outputOwners, outputOwners, shares), utxos, new avalanchejs_1.utils.AddressMaps(addressMaps), credentials));
404
+ }
405
+ /** @inheritdoc */
406
+ signImplementation({ key }) {
407
+ this._signer.push(new keyPair_1.KeyPair({ prv: key }));
408
+ return this.transaction;
409
+ }
410
+ /** @inheritdoc */
411
+ validateAddress(address, addressFormat) {
412
+ if (!utils_1.default.isValidAddress(address.address)) {
413
+ throw new sdk_core_1.BuildTransactionError('Invalid address');
414
+ }
415
+ }
416
+ /** @inheritdoc */
417
+ get transaction() {
418
+ return this._transaction;
419
+ }
420
+ set transaction(transaction) {
421
+ this._transaction = transaction;
422
+ }
423
+ hasSigner() {
424
+ return this._signer !== undefined && this._signer.length > 0;
425
+ }
426
+ /** @inheritdoc */
427
+ validateKey({ key }) {
428
+ if (!new keyPair_1.KeyPair({ prv: key })) {
429
+ throw new sdk_core_1.BuildTransactionError('Invalid key');
430
+ }
431
+ }
432
+ /**
433
+ * Check the raw transaction has a valid format in the blockchain context, throw otherwise.
434
+ *
435
+ * @param rawTransaction Transaction in any format
436
+ */
437
+ validateRawTransaction(rawTransaction) {
438
+ utils_1.default.validateRawTransaction(rawTransaction);
439
+ }
440
+ /** @inheritdoc */
441
+ validateTransaction(transaction) {
442
+ // throw new NotImplementedError('validateTransaction not implemented');
443
+ }
444
+ /** @inheritdoc */
445
+ validateValue(value) {
446
+ if (value.isLessThan(0)) {
447
+ throw new sdk_core_1.BuildTransactionError('Value cannot be less than zero');
448
+ }
449
+ }
450
+ }
451
+ exports.PermissionlessValidatorTxBuilder = PermissionlessValidatorTxBuilder;
452
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeEJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3Blcm1pc3Npb25sZXNzVmFsaWRhdG9yVHhCdWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLG9EQWtCNEI7QUFDNUIsbURBUThCO0FBRzlCLHlDQUFpRDtBQUVqRCxtQ0FBd0U7QUFDeEUsdUNBQW9DO0FBRXBDLDZEQUEwRDtBQUMxRCxvREFBNEI7QUFDNUIsNkNBQTRDO0FBRTVDLE1BQWEsZ0NBQWlDLFNBQVEsdUNBQWtCO0lBV3RFOzs7T0FHRztJQUNILFlBQVksVUFBZ0M7UUFDMUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBZmIsWUFBTyxHQUFjLEVBQUUsQ0FBQztRQU9yQixrQkFBYSxHQUFHLEtBQUssQ0FBQztJQVNoQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsSUFBYyxlQUFlO1FBQzNCLE9BQU8sMEJBQWUsQ0FBQywwQkFBMEIsQ0FBQztJQUNwRCxDQUFDO0lBRUQsb0JBQW9CO0lBQ3BCOzs7T0FHRztJQUNILGdCQUFnQixDQUFDLFFBQWdCO1FBQy9CLElBQUksUUFBUSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUN4QixNQUFNLElBQUksZ0NBQXFCLENBQUMsbURBQW1ELENBQUMsQ0FBQztTQUN0RjtJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSCx5QkFBeUIsQ0FBQyxpQkFBeUI7UUFDakQsSUFBSSxpQkFBaUIsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsRUFBRTtZQUMxRSxNQUFNLElBQUksZ0NBQXFCLENBQzdCLHNDQUFzQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRSxDQUNuRixDQUFDO1NBQ0g7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsWUFBWSxDQUFDLEtBQXFCO1FBQ2hDLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDNUQsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDO2dCQUFFLE1BQU0sSUFBSSxnQ0FBcUIsQ0FBQyxrQkFBa0IsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUMvRixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFDRCxZQUFZO0lBRVo7OztPQUdHO0lBQ0gsZUFBZSxDQUFDLE9BQTBCO1FBQ3hDLE1BQU0sZUFBZSxHQUFHLE9BQU8sWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN2RSxJQUFJLENBQUMsV0FBVyxDQUFDLGdCQUFnQixHQUFHLGVBQWUsQ0FBQyxHQUFHLENBQUMsZUFBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzVFLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELGtCQUFrQjtJQUNSLGtCQUFrQixDQUFDLGNBQXNCO1FBQ2pELE1BQU0sT0FBTyxHQUFHLG1CQUFTLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2pELE1BQU0sQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDLGtCQUFrQixDQUFDLG1CQUFTLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7UUFDeEYsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLFlBQVksQ0FBeUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDL0UsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNyQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDMUIsQ0FBQztJQUVELGtCQUFrQjtJQUNSLEtBQUssQ0FBQyxtQkFBbUI7UUFDakMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFDNUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDMUQsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUU7WUFDcEIsS0FBSyxNQUFNLE9BQU8sSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO2dCQUNsQyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2FBQ3RDO1NBQ0Y7UUFDRCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDMUIsQ0FBQztJQUVEOzs7T0FHRztJQUNILE1BQU0sQ0FBQyxNQUFjO1FBQ25CLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDNUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7UUFDdEIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsWUFBWSxDQUFDLFlBQW9CO1FBQy9CLElBQUEsOEJBQW1CLEVBQUMsWUFBWSxDQUFDLENBQUM7UUFDbEMsSUFBSSxDQUFDLGFBQWEsR0FBRyxZQUFZLENBQUM7UUFDbEMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsWUFBWSxDQUFDLFlBQW9CO1FBQy9CLElBQUEsOEJBQW1CLEVBQUMsWUFBWSxDQUFDLENBQUM7UUFDbEMsSUFBSSxDQUFDLGFBQWEsR0FBRyxZQUFZLENBQUM7UUFDbEMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILFFBQVEsQ0FBQyxLQUFzQjtRQUM3QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDckMsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzVDLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVEOzs7T0FHRztJQUNILGlCQUFpQixDQUFDLEtBQWE7UUFDN0IsSUFBSSxDQUFDLHlCQUF5QixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUM7UUFDaEMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsU0FBUyxDQUFDLEtBQXNCO1FBQzlCLElBQUksQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hDLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVEOzs7T0FHRztJQUNILE9BQU8sQ0FBQyxLQUFzQjtRQUM1QixJQUFJLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM5QixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7O09BR0c7SUFDSCxXQUFXLENBQUMsS0FBc0I7UUFDaEMsTUFBTSxXQUFXLEdBQUcsT0FBTyxLQUFLLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN0RSxJQUFJLENBQUMsbUJBQW1CLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLFlBQVksR0FBRyxXQUFXLENBQUM7UUFDaEMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsb0JBQW9CO0lBQ3BCOzs7T0FHRztJQUNILGNBQWMsQ0FBQyxNQUFjO1FBQzNCLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDWCxNQUFNLElBQUksZ0NBQXFCLENBQUMscUNBQXFDLENBQUMsQ0FBQztTQUN4RTtRQUNELElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssUUFBUSxFQUFFO1lBQ25DLE1BQU0sSUFBSSxnQ0FBcUIsQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDO1NBQzVFO1FBQ0QsSUFBSSxDQUFDLENBQUMsbUJBQVMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEtBQUssRUFBRSxDQUFDLEVBQUU7WUFDN0QsTUFBTSxJQUFJLGdDQUFxQixDQUFDLG1EQUFtRCxDQUFDLENBQUM7U0FDdEY7SUFDSCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILHFCQUFxQixDQUFDLFNBQWlCLEVBQUUsT0FBZTtRQUN0RCxJQUFJLE9BQU8sR0FBRyxTQUFTLEVBQUU7WUFDdkIsTUFBTSxJQUFJLGdDQUFxQixDQUFDLHlDQUF5QyxDQUFDLENBQUM7U0FDNUU7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsbUJBQW1CLENBQUMsTUFBYztRQUNoQyxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDNUQsSUFBSSxNQUFNLEdBQUcsUUFBUSxFQUFFO1lBQ3JCLE1BQU0sSUFBSSxnQ0FBcUIsQ0FBQyw0QkFBNEIsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsVUFBVSxHQUFHLFFBQVEsQ0FBQyxDQUFDO1NBQzFHO1FBQ0QsT0FBTztJQUNULENBQUM7SUFFRCxZQUFZO0lBRVosa0JBQWtCO0lBQ2xCLFdBQVcsQ0FBQyxFQUFNO1FBQ2hCLEtBQUssQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdEIsTUFBTSx5QkFBeUIsR0FBSSxFQUFpQixDQUFDLEVBQTRDLENBQUM7UUFDbEcsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMseUJBQXlCLENBQUMsRUFBRTtZQUNqRCxNQUFNLElBQUksdUJBQVksQ0FBQyxxRUFBcUUsQ0FBQyxDQUFDO1NBQy9GO1FBRUQsTUFBTSxPQUFPLEdBQUcseUJBQXlCLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQztRQUN6RCxJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQ3hCLE1BQU0sSUFBSSxnQ0FBcUIsQ0FBQywwQ0FBMEMsQ0FBQyxDQUFDO1NBQzdFO1FBRUQsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQXdCLENBQUM7UUFDbkQsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxFQUFFLEtBQUssSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUU7WUFDekQsTUFBTSxJQUFJLEtBQUssQ0FBQywyREFBMkQsQ0FBQyxDQUFDO1NBQzlFO1FBRUQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLEdBQUcsbUJBQVMsQ0FBQyxXQUFXLENBQ25ELHlCQUF5QixDQUFDLE1BQTJCLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FDdkUsQ0FBQztRQUNGLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUM7UUFDcEQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLEdBQUcsbUJBQVMsQ0FBQyxXQUFXLENBQ25ELHlCQUF5QixDQUFDLE1BQTJCLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FDdkUsQ0FBQztRQUNGLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUM7UUFFcEQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDbEUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDcEUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEdBQUcseUJBQXlCLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDakcsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQztRQUN4QyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsR0FBRyx5QkFBeUIsQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNwRyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDO1FBQzlDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxHQUFHLHlCQUF5QixDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2hHLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUM7UUFDMUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUNwRixJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksR0FBRyx5QkFBeUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ25GLElBQUksQ0FBQyxXQUFXLENBQUMseUJBQXlCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQ3JFLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLElBQUEseUJBQVksRUFBQyx5QkFBeUIsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO1FBQzlFLDRCQUE0QjtRQUM1QixPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2hELE9BQU8sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUMvRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxNQUFNLENBQUMsWUFBWSxDQUFDLElBQWlCO1FBQ25DLE9BQU8sSUFBSSxLQUFLLHlCQUFXLENBQUMsNEJBQTRCLENBQUM7SUFDM0QsQ0FBQztJQUVELFlBQVksQ0FBQyxFQUFNO1FBQ2pCLE9BQU8sZ0NBQWdDLENBQUMsWUFBWSxDQUFFLEVBQTZDLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDN0csQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNPLGNBQWM7O1FBT3RCLE1BQU0sTUFBTSxHQUFtQyxFQUFFLENBQUM7UUFDbEQsTUFBTSxZQUFZLEdBQW9DLEVBQUUsQ0FBQztRQUN6RCxNQUFNLGFBQWEsR0FBb0MsRUFBRSxDQUFDO1FBQzFELE1BQU0sS0FBSyxHQUFXLEVBQUUsQ0FBQztRQUV6QixJQUFJLFlBQVksR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFN0IseUNBQXlDO1FBQ3pDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLENBQUM7UUFFaEQsTUFBTSxXQUFXLEdBQWlCLE1BQUEsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLG1DQUFJLEVBQUUsQ0FBQztRQUNyRSxrQ0FBa0M7UUFDbEMscUVBQXFFO1FBQ3JFLGdFQUFnRTtRQUNoRSxpREFBaUQ7UUFDakQsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FDL0QsbUJBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FDcEYsQ0FBQztRQUNGLDRCQUE0QjtRQUM1QixPQUFPLENBQUMsR0FBRyxDQUFDLGlCQUFpQixjQUFjLEVBQUUsQ0FBQyxDQUFDO1FBRS9DLCtFQUErRTtRQUMvRSxnRUFBZ0U7UUFDaEUsTUFBTSxZQUFZLEdBQ2hCLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUEsTUFBQSxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLDBDQUFFLE1BQU0sTUFBSyxDQUFDLENBQUM7UUFFL0csTUFBTSxPQUFPLEdBQUcsZ0JBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN6RCxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUU7O1lBQzlDLHFCQUFxQjtZQUNyQixJQUFJLENBQUMsSUFBSSxFQUFFO2dCQUNULE1BQU0sSUFBSSxnQ0FBcUIsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO2FBQ3REO1lBQ0QsOENBQThDO1lBQzlDLElBQUksTUFBQSxJQUFJLENBQUMsY0FBYywwQ0FBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDckMsTUFBTSxJQUFJLGdDQUFxQixDQUFDLDRCQUE0QixDQUFDLENBQUM7YUFDL0Q7WUFDRCxJQUFJLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLEVBQUU7Z0JBQ2hELE1BQU0sSUFBSSxnQ0FBcUIsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO2FBQzlEO1lBRUQsTUFBTSx3QkFBd0IsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQzNDLG9EQUFvRDtZQUNwRCxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7Z0JBQzVELElBQUksQ0FBQyxjQUFjLEdBQUcsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUM1RTtZQUNELDZDQUE2QztZQUM3QyxrRUFBa0U7WUFDbEUsb0RBQW9EO1lBQ3BELElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7Z0JBQzNCLHdCQUF3QixDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDckYsQ0FBQyxDQUFDLENBQUM7WUFDSCw0QkFBNEI7WUFDNUIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7WUFDakQsT0FBTyxDQUFDLEdBQUcsQ0FBQyw2QkFBNkIsS0FBSyxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNqRixpRkFBaUY7WUFFakYsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLGlDQUF5QixFQUFFO2dCQUMvQyxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUN2QyxrQ0FBa0M7Z0JBQ2xDLCtDQUErQztnQkFDL0Msa0RBQWtEO2dCQUNsRCxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNyRCxNQUFNLFVBQVUsR0FBRyxDQUFDLENBQUM7Z0JBRXJCLFlBQVksR0FBRyxZQUFZLEdBQUcsVUFBVSxDQUFDO2dCQUV6QyxNQUFNLE1BQU0sR0FBRyx3QkFBVSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7Z0JBRS9FLElBQUksY0FBYyxHQUFhLEVBQUUsQ0FBQztnQkFDbEMsSUFBSSxJQUFJLENBQUMsY0FBYyxJQUFJLHdCQUF3QixDQUFDLElBQUksS0FBSyxDQUFDLEVBQUU7b0JBQzlELGNBQWMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO2lCQUMzQztxQkFBTTtvQkFDTCxjQUFjLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7b0JBQ3JFLGNBQWMsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7aUJBQy9EO2dCQUVELE1BQU0sY0FBYyxHQUFHLElBQUksMkJBQWEsQ0FDdEMsSUFBSSxzQkFBUSxDQUFDLFVBQVUsQ0FBQyxFQUN4QixJQUFJLG1CQUFLLENBQUMsQ0FBQyxHQUFHLGNBQWMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsSUFBSSxpQkFBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FDakUsQ0FBQztnQkFDRiw0QkFBNEI7Z0JBQzVCLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0NBQWdDLENBQUMsR0FBRyxjQUFjLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBRTFFLE1BQU0sS0FBSyxHQUFHLElBQUksd0JBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLGNBQWMsQ0FBQyxDQUFDO2dCQUNoRixLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksa0JBQUksQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUM7Z0JBRXRELE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ25CLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFO29CQUM3RSxJQUFJLFlBQVksRUFBRTt3QkFDaEIsdURBQXVEO3dCQUN2RCwwRUFBMEU7d0JBQzFFLHVEQUF1RDt3QkFFdkQsNEJBQTRCO3dCQUM1QixPQUFPLENBQUMsR0FBRyxDQUFDLHlCQUF5QixJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQzt3QkFDeEUsT0FBTyxDQUFDLEdBQUcsQ0FBQyx5QkFBeUIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQUMsQ0FBQzt3QkFDL0UsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsaUJBQWlCLENBQUMsRUFBRTs0QkFDNUUsNEJBQTRCOzRCQUM1QixPQUFPLENBQUMsR0FBRyxDQUFDLHdDQUF3QyxDQUFDLENBQUM7NEJBQ3RELFdBQVcsQ0FBQyxJQUFJLENBQ2QsSUFBSSx3QkFBVSxDQUFDO2dDQUNiLGVBQUssQ0FBQyxZQUFZLENBQUMsa0JBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dDQUN2RCxlQUFLLENBQUMsWUFBWSxDQUNoQixrQkFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUNwRjs2QkFDRixDQUFDLENBQ0gsQ0FBQzt5QkFDSDs2QkFBTTs0QkFDTCw0QkFBNEI7NEJBQzVCLE9BQU8sQ0FBQyxHQUFHLENBQUMseUNBQXlDLENBQUMsQ0FBQzs0QkFDdkQsV0FBVyxDQUFDLElBQUksQ0FDZCxJQUFJLHdCQUFVLENBQUM7Z0NBQ2IsZUFBSyxDQUFDLFlBQVksQ0FDaEIsa0JBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FDcEY7Z0NBQ0QsZUFBSyxDQUFDLFlBQVksQ0FBQyxrQkFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7NkJBQ3hELENBQUMsQ0FDSCxDQUFDO3lCQUNIO3FCQUNGO3lCQUFNO3dCQUNMLCtDQUErQzt3QkFDL0MsV0FBVyxDQUFDLElBQUksQ0FDZCxJQUFJLHdCQUFVLENBQ1osY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQ3ZCLGVBQUssQ0FBQyxZQUFZLENBQUMsa0JBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FDeEYsQ0FDRixDQUNGLENBQUM7cUJBQ0g7aUJBQ0Y7cUJBQU07b0JBQ0wsNEJBQTRCO29CQUM1QixPQUFPLENBQUMsR0FBRyxDQUFDLHNDQUFzQyxDQUFDLENBQUM7aUJBQ3JEO2FBQ0Y7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksWUFBWSxFQUFFO1lBQ2hCLElBQUksWUFBWSxHQUFHLFdBQVcsRUFBRTtnQkFDOUIsTUFBTSxJQUFJLGdDQUFxQixDQUM3QixvQkFBb0IsWUFBWSxDQUFDLFFBQVEsRUFBRSxRQUFRLFdBQVcsQ0FBQyxRQUFRLEVBQUUsY0FBYyxDQUN4RixDQUFDO2FBQ0g7aUJBQU0sSUFBSSxZQUFZLElBQUksV0FBVyxFQUFFO2dCQUN0QyxNQUFNLFdBQVcsR0FBRyxJQUFJLHdCQUFVLENBQUMsa0JBQWtCLENBQ25ELE9BQU8sRUFDUCxJQUFJLDRCQUFjLENBQ2hCLElBQUksc0JBQVEsQ0FBQyxXQUFXLENBQUMsRUFDekIsSUFBSSwwQkFBWSxDQUNkLElBQUksc0JBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxFQUN4QyxJQUFJLGlCQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsRUFDcEMsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDO3FCQUNqQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxtQkFBUyxDQUFDLFlBQVksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7cUJBQzVDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMscUJBQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDdkMsQ0FDRixDQUNGLENBQUM7Z0JBQ0YsWUFBWSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFFL0IsSUFBSSxZQUFZLEdBQUcsV0FBVyxFQUFFO29CQUM5QixNQUFNLFlBQVksR0FBRyxJQUFJLHdCQUFVLENBQUMsa0JBQWtCLENBQ3BELE9BQU8sRUFDUCxJQUFJLDRCQUFjLENBQ2hCLElBQUksc0JBQVEsQ0FBQyxZQUFZLEdBQUcsV0FBVyxDQUFDLEVBQ3hDLElBQUksMEJBQVksQ0FDZCxJQUFJLHNCQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsRUFDeEMsSUFBSSxpQkFBRyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLEVBQ3BDLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQzt5QkFDakMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsbUJBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO3lCQUM1QyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLHFCQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQ3ZDLENBQ0YsQ0FDRixDQUFDO29CQUNGLGFBQWEsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7aUJBQ2xDO2FBQ0Y7U0FDRjtRQUNELE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDbkIsSUFBSSxtQkFBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFO2dCQUMxRSxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO2FBQ2hFO1lBQ0QsT0FBTyxtQkFBUyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQ2xGLENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsQ0FBQztJQUNyRSxDQUFDO0lBRUQ7OztPQUdHO0lBQ08sb0JBQW9CO1FBQzVCLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ25GLE1BQU0sRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQzFGLE1BQU0sTUFBTSxHQUFHLHdCQUFVLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FDekMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLEVBQzNCLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxFQUM5QixhQUFhLEVBQ2IsTUFBTSxFQUNOLElBQUksVUFBVSxFQUFFLENBQUMscUJBQXFCO1NBQ3ZDLENBQUM7UUFFRixNQUFNLGVBQWUsR0FBRyx1QkFBUyxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQzFELElBQUksQ0FBQyxPQUFPLEVBQ1osSUFBSSxDQUFDLFVBQVUsRUFDZixJQUFJLENBQUMsUUFBUSxFQUNiLElBQUksQ0FBQyxZQUFZLEVBQ2pCLHdCQUFVLENBQUMsZ0JBQWdCLENBQzVCLENBQUM7UUFFRixNQUFNLE1BQU0sR0FBRyxJQUFJLHVCQUFTLENBQUMsTUFBTSxDQUNqQyxJQUFJLHVCQUFTLENBQUMsaUJBQWlCLENBQzdCLG1CQUFTLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFDekMsbUJBQVMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUMxQyxDQUNGLENBQUM7UUFFRixNQUFNLFlBQVksR0FBRyxJQUFJLDBCQUFZLENBQ25DLElBQUksc0JBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxFQUN4QyxJQUFJLGlCQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsRUFDcEMsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDO2FBQ2pDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLG1CQUFTLENBQUMsWUFBWSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQzthQUM1QyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLHFCQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQ3ZDLENBQUM7UUFFRixrQ0FBa0M7UUFDbEMsa0VBQWtFO1FBQ2xFLGdHQUFnRztRQUNoRyxNQUFNLE1BQU0sR0FBRyxJQUFJLGlCQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBRWhDLE1BQU0sV0FBVyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQzthQUNyRCxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxtQkFBUyxDQUFDLFlBQVksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7YUFDNUMsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxJQUFJLG1CQUFTLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLHFCQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFM0UsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQzdCLElBQUksd0JBQVUsQ0FDWixJQUFJLHVCQUFTLENBQUMsNEJBQTRCLENBQ3hDLE1BQU0sRUFDTixlQUFlLEVBQ2YsTUFBTSxFQUNOLFlBQVksRUFDWixZQUFZLEVBQ1osWUFBWSxFQUNaLE1BQU0sQ0FDUCxFQUNELEtBQUssRUFDTCxJQUFJLG1CQUFTLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxFQUN0QyxXQUFXLENBQ1osQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUVELGtCQUFrQjtJQUNSLGtCQUFrQixDQUFDLEVBQUUsR0FBRyxFQUFXO1FBQzNDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksaUJBQU8sQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDN0MsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzFCLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsZUFBZSxDQUFDLE9BQW9CLEVBQUUsYUFBc0I7UUFDMUQsSUFBSSxDQUFDLGVBQUssQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQzFDLE1BQU0sSUFBSSxnQ0FBcUIsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1NBQ3BEO0lBQ0gsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixJQUFjLFdBQVc7UUFDdkIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzNCLENBQUM7SUFFRCxJQUFjLFdBQVcsQ0FBQyxXQUF3QjtRQUNoRCxJQUFJLENBQUMsWUFBWSxHQUFHLFdBQVcsQ0FBQztJQUNsQyxDQUFDO0lBRUQsU0FBUztRQUNQLE9BQU8sSUFBSSxDQUFDLE9BQU8sS0FBSyxTQUFTLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQy9ELENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsV0FBVyxDQUFDLEVBQUUsR0FBRyxFQUFXO1FBQzFCLElBQUksQ0FBQyxJQUFJLGlCQUFPLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRTtZQUM5QixNQUFNLElBQUksZ0NBQXFCLENBQUMsYUFBYSxDQUFDLENBQUM7U0FDaEQ7SUFDSCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILHNCQUFzQixDQUFDLGNBQXNCO1FBQzNDLGVBQUssQ0FBQyxzQkFBc0IsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLG1CQUFtQixDQUFDLFdBQXlCO1FBQzNDLHdFQUF3RTtJQUMxRSxDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLGFBQWEsQ0FBQyxLQUFnQjtRQUM1QixJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDdkIsTUFBTSxJQUFJLGdDQUFxQixDQUFDLGdDQUFnQyxDQUFDLENBQUM7U0FDbkU7SUFDSCxDQUFDO0NBQ0Y7QUF2a0JELDRFQXVrQkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZGRyZXNzLFxuICBhdmF4U2VyaWFsLFxuICB1dGlscyBhcyBBdmF4VXRpbHMsXG4gIEJpZ0ludFByLFxuICBDcmVkZW50aWFsLFxuICBJZCxcbiAgSW5wdXQsXG4gIEludCxcbiAgbmV0d29ya0lEcyxcbiAgT3V0cHV0T3duZXJzLFxuICBwdm1TZXJpYWwsXG4gIFRyYW5zZmVySW5wdXQsXG4gIFRyYW5zZmVyT3V0cHV0LFxuICBUeXBlU3ltYm9scyxcbiAgVW5zaWduZWRUeCxcbiAgVXR4byxcbiAgdXRpbHMgYXMgYXZheFV0aWxzLFxufSBmcm9tICdAYml0Z28vYXZhbGFuY2hlanMnO1xuaW1wb3J0IHtcbiAgQmFzZUFkZHJlc3MsXG4gIEJhc2VLZXksXG4gIEJ1aWxkVHJhbnNhY3Rpb25FcnJvcixcbiAgaXNWYWxpZEJMU1B1YmxpY0tleSxcbiAgaXNWYWxpZEJMU1NpZ25hdHVyZSxcbiAgTm90U3VwcG9ydGVkLFxuICBUcmFuc2FjdGlvblR5cGUsXG59IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcblxuaW1wb3J0IHsgQmFzZUNvaW4gYXMgQ29pbkNvbmZpZyB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IHsgQnVmZmVyIGFzIEJ1ZmZlckF2YXggfSBmcm9tICdhdmFsYW5jaGUnO1xuaW1wb3J0IEJpZ051bWJlciBmcm9tICdiaWdudW1iZXIuanMnO1xuaW1wb3J0IHsgRGVjb2RlZFV0eG9PYmosIFNFQ1AyNTZLMV9UcmFuc2Zlcl9PdXRwdXQsIFR4IH0gZnJvbSAnLi9pZmFjZSc7XG5pbXBvcnQgeyBLZXlQYWlyIH0gZnJvbSAnLi9rZXlQYWlyJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uIH0gZnJvbSAnLi90cmFuc2FjdGlvbic7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbkJ1aWxkZXIgfSBmcm9tICcuL3RyYW5zYWN0aW9uQnVpbGRlcic7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyByZWNvdmVyVXR4b3MgfSBmcm9tICcuL3V0eG9FbmdpbmUnO1xuXG5leHBvcnQgY2xhc3MgUGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeEJ1aWxkZXIgZXh0ZW5kcyBUcmFuc2FjdGlvbkJ1aWxkZXIge1xuICBwdWJsaWMgX3NpZ25lcjogS2V5UGFpcltdID0gW107XG4gIHByb3RlY3RlZCBfbm9kZUlEOiBzdHJpbmc7XG4gIHByb3RlY3RlZCBfYmxzUHVibGljS2V5OiBzdHJpbmc7XG4gIHByb3RlY3RlZCBfYmxzU2lnbmF0dXJlOiBzdHJpbmc7XG4gIHByb3RlY3RlZCBfc3RhcnRUaW1lOiBiaWdpbnQ7XG4gIHByb3RlY3RlZCBfZW5kVGltZTogYmlnaW50O1xuICBwcm90ZWN0ZWQgX3N0YWtlQW1vdW50OiBiaWdpbnQ7XG4gIHByb3RlY3RlZCByZWNvdmVyU2lnbmVyID0gZmFsc2U7XG4gIHByb3RlY3RlZCBfZGVsZWdhdGlvbkZlZVJhdGU6IG51bWJlcjtcblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIGNvaW5Db25maWdcbiAgICovXG4gIGNvbnN0cnVjdG9yKGNvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KSB7XG4gICAgc3VwZXIoY29pbkNvbmZpZyk7XG4gIH1cblxuICAvKipcbiAgICogZ2V0IHRyYW5zYWN0aW9uIHR5cGVcbiAgICogQHByb3RlY3RlZFxuICAgKi9cbiAgcHJvdGVjdGVkIGdldCB0cmFuc2FjdGlvblR5cGUoKTogVHJhbnNhY3Rpb25UeXBlIHtcbiAgICByZXR1cm4gVHJhbnNhY3Rpb25UeXBlLkFkZFBlcm1pc3Npb25sZXNzVmFsaWRhdG9yO1xuICB9XG5cbiAgLy8gcmVnaW9uIFZhbGlkYXRvcnNcbiAgLyoqXG4gICAqIFZhbGlkYXRlcyBsb2NrdGltZVxuICAgKiBAcGFyYW0gbG9ja3RpbWVcbiAgICovXG4gIHZhbGlkYXRlTG9ja3RpbWUobG9ja3RpbWU6IGJpZ2ludCk6IHZvaWQge1xuICAgIGlmIChsb2NrdGltZSA8IEJpZ0ludCgwKSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignSW52YWxpZCB0cmFuc2FjdGlvbjogbG9ja3RpbWUgbXVzdCBiZSAwIG9yIGhpZ2hlcicpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSB0aGF0IHRoZSBkZWxlZ2F0aW9uIGZlZSBpcyBhdCBsZWFzdCB0aGUgbWluRGVsZWdhdGlvbkZlZVxuICAgKiBAcGFyYW0gZGVsZWdhdGlvbkZlZVJhdGUgbnVtYmVyXG4gICAqL1xuICB2YWxpZGF0ZURlbGVnYXRpb25GZWVSYXRlKGRlbGVnYXRpb25GZWVSYXRlOiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAoZGVsZWdhdGlvbkZlZVJhdGUgPCBOdW1iZXIodGhpcy50cmFuc2FjdGlvbi5fbmV0d29yay5taW5EZWxlZ2F0aW9uRmVlKSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcihcbiAgICAgICAgYERlbGVnYXRpb24gZmVlIGNhbm5vdCBiZSBsZXNzIHRoYW4gJHt0aGlzLnRyYW5zYWN0aW9uLl9uZXR3b3JrLm1pbkRlbGVnYXRpb25GZWV9YFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgdGhlIFVUWE8gaGFzIGV4cGVjdGVkIGZpZWxkcy5cbiAgICogQHBhcmFtIFVUWE9cbiAgICovXG4gIHZhbGlkYXRlVXR4byh2YWx1ZTogRGVjb2RlZFV0eG9PYmopOiB2b2lkIHtcbiAgICBbJ291dHB1dElEJywgJ2Ftb3VudCcsICd0eGlkJywgJ291dHB1dGlkeCddLmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgICBpZiAoIXZhbHVlLmhhc093blByb3BlcnR5KGZpZWxkKSkgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcihgVXR4b3MgcmVxdWlyZWQgJHtmaWVsZH1gKTtcbiAgICB9KTtcbiAgfVxuICAvLyBlbmRyZWdpb25cblxuICAvKipcbiAgICogQWRkcmVzc2VzIHdoZXJlIHJld2FyZCBzaG91bGQgYmUgZGVwb3NpdFxuICAgKiBAcGFyYW0ge3N0cmluZyB8IHN0cmluZ1tdfSBhZGRyZXNzIC0gc2luZ2xlIGFkZHJlc3Mgb3IgYXJyYXkgb2YgYWRkcmVzc2VzIHRvIHJlY2VpdmUgcmV3YXJkc1xuICAgKi9cbiAgcmV3YXJkQWRkcmVzc2VzKGFkZHJlc3M6IHN0cmluZyB8IHN0cmluZ1tdKTogdGhpcyB7XG4gICAgY29uc3QgcmV3YXJkQWRkcmVzc2VzID0gYWRkcmVzcyBpbnN0YW5jZW9mIEFycmF5ID8gYWRkcmVzcyA6IFthZGRyZXNzXTtcbiAgICB0aGlzLnRyYW5zYWN0aW9uLl9yZXdhcmRBZGRyZXNzZXMgPSByZXdhcmRBZGRyZXNzZXMubWFwKHV0aWxzLnBhcnNlQWRkcmVzcyk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHJvdGVjdGVkIGZyb21JbXBsZW1lbnRhdGlvbihyYXdUcmFuc2FjdGlvbjogc3RyaW5nKTogVHJhbnNhY3Rpb24ge1xuICAgIGNvbnN0IG1hbmFnZXIgPSBBdmF4VXRpbHMuZ2V0TWFuYWdlckZvclZNKCdQVk0nKTtcbiAgICBjb25zdCBbY29kZWMsIHJlc3RdID0gbWFuYWdlci5nZXRDb2RlY0Zyb21CdWZmZXIoQXZheFV0aWxzLmhleFRvQnVmZmVyKHJhd1RyYW5zYWN0aW9uKSk7XG4gICAgY29uc3QgdHggPSBjb2RlYy5VbnBhY2tQcmVmaXg8cHZtU2VyaWFsLkFkZFBlcm1pc3Npb25sZXNzVmFsaWRhdG9yVHg+KHJlc3QpWzBdO1xuICAgIHRoaXMuaW5pdEJ1aWxkZXIodHgpO1xuICAgIHJldHVybiB0aGlzLnRyYW5zYWN0aW9uO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHByb3RlY3RlZCBhc3luYyBidWlsZEltcGxlbWVudGF0aW9uKCk6IFByb21pc2U8VHJhbnNhY3Rpb24+IHtcbiAgICB0aGlzLmJ1aWxkQXZheFRyYW5zYWN0aW9uKCk7XG4gICAgdGhpcy50cmFuc2FjdGlvbi5zZXRUcmFuc2FjdGlvblR5cGUodGhpcy50cmFuc2FjdGlvblR5cGUpO1xuICAgIGlmICh0aGlzLmhhc1NpZ25lcigpKSB7XG4gICAgICBmb3IgKGNvbnN0IGtleVBhaXIgb2YgdGhpcy5fc2lnbmVyKSB7XG4gICAgICAgIGF3YWl0IHRoaXMudHJhbnNhY3Rpb24uc2lnbihrZXlQYWlyKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMudHJhbnNhY3Rpb247XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIG5vZGVJRFxuICAgKi9cbiAgbm9kZUlEKG5vZGVJRDogc3RyaW5nKTogdGhpcyB7XG4gICAgdGhpcy52YWxpZGF0ZU5vZGVJRChub2RlSUQpO1xuICAgIHRoaXMuX25vZGVJRCA9IG5vZGVJRDtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gYmxzUHVibGljS2V5XG4gICAqL1xuICBibHNQdWJsaWNLZXkoYmxzUHVibGljS2V5OiBzdHJpbmcpOiB0aGlzIHtcbiAgICBpc1ZhbGlkQkxTUHVibGljS2V5KGJsc1B1YmxpY0tleSk7XG4gICAgdGhpcy5fYmxzUHVibGljS2V5ID0gYmxzUHVibGljS2V5O1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSBibHNTaWduYXR1cmVcbiAgICovXG4gIGJsc1NpZ25hdHVyZShibHNTaWduYXR1cmU6IHN0cmluZyk6IHRoaXMge1xuICAgIGlzVmFsaWRCTFNTaWduYXR1cmUoYmxzU2lnbmF0dXJlKTtcbiAgICB0aGlzLl9ibHNTaWduYXR1cmUgPSBibHNTaWduYXR1cmU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogTG9ja3RpbWUgaXMgYSBsb25nIHRoYXQgY29udGFpbnMgdGhlIHVuaXggdGltZXN0YW1wIHRoYXQgdGhpcyBvdXRwdXQgY2FuIGJlIHNwZW50IGFmdGVyLlxuICAgKiBUaGUgdW5peCB0aW1lc3RhbXAgaXMgc3BlY2lmaWMgdG8gdGhlIHNlY29uZC5cbiAgICogQHBhcmFtIHZhbHVlXG4gICAqL1xuICBsb2NrdGltZSh2YWx1ZTogc3RyaW5nIHwgbnVtYmVyKTogdGhpcyB7XG4gICAgdGhpcy52YWxpZGF0ZUxvY2t0aW1lKEJpZ0ludCh2YWx1ZSkpO1xuICAgIHRoaXMuX3RyYW5zYWN0aW9uLl9sb2NrdGltZSA9IEJpZ0ludCh2YWx1ZSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogc2V0IHRoZSBkZWxlZ2F0aW9uRmVlUmF0ZVxuICAgKiBAcGFyYW0gdmFsdWUgbnVtYmVyXG4gICAqL1xuICBkZWxlZ2F0aW9uRmVlUmF0ZSh2YWx1ZTogbnVtYmVyKTogdGhpcyB7XG4gICAgdGhpcy52YWxpZGF0ZURlbGVnYXRpb25GZWVSYXRlKHZhbHVlKTtcbiAgICB0aGlzLl9kZWxlZ2F0aW9uRmVlUmF0ZSA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIHN0YXJ0IHRpbWUgb2Ygc3Rha2luZyBwZXJpb2RcbiAgICogQHBhcmFtIHZhbHVlXG4gICAqL1xuICBzdGFydFRpbWUodmFsdWU6IHN0cmluZyB8IG51bWJlcik6IHRoaXMge1xuICAgIHRoaXMuX3N0YXJ0VGltZSA9IEJpZ0ludCh2YWx1ZSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogZW5kIHRpbWUgb2Ygc3Rha2luZyBwZXJpb2RcbiAgICogQHBhcmFtIHZhbHVlXG4gICAqL1xuICBlbmRUaW1lKHZhbHVlOiBzdHJpbmcgfCBudW1iZXIpOiB0aGlzIHtcbiAgICB0aGlzLl9lbmRUaW1lID0gQmlnSW50KHZhbHVlKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWVcbiAgICovXG4gIHN0YWtlQW1vdW50KHZhbHVlOiBiaWdpbnQgfCBzdHJpbmcpOiB0aGlzIHtcbiAgICBjb25zdCB2YWx1ZUJpZ0ludCA9IHR5cGVvZiB2YWx1ZSA9PT0gJ2JpZ2ludCcgPyB2YWx1ZSA6IEJpZ0ludCh2YWx1ZSk7XG4gICAgdGhpcy52YWxpZGF0ZVN0YWtlQW1vdW50KHZhbHVlQmlnSW50KTtcbiAgICB0aGlzLl9zdGFrZUFtb3VudCA9IHZhbHVlQmlnSW50O1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gcmVnaW9uIFZhbGlkYXRvcnNcbiAgLyoqXG4gICAqIHZhbGlkYXRlcyBhIGNvcnJlY3QgTm9kZUlEIGlzIHVzZWRcbiAgICogQHBhcmFtIG5vZGVJRFxuICAgKi9cbiAgdmFsaWRhdGVOb2RlSUQobm9kZUlEOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIW5vZGVJRCkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignSW52YWxpZCB0cmFuc2FjdGlvbjogbWlzc2luZyBub2RlSUQnKTtcbiAgICB9XG4gICAgaWYgKG5vZGVJRC5zbGljZSgwLCA2KSAhPT0gJ05vZGVJRCcpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ0ludmFsaWQgdHJhbnNhY3Rpb246IGludmFsaWQgTm9kZUlEIHRhZycpO1xuICAgIH1cbiAgICBpZiAoIShBdmF4VXRpbHMuYmFzZTU4LmRlY29kZShub2RlSUQuc2xpY2UoNykpLmxlbmd0aCA9PT0gMjQpKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdJbnZhbGlkIHRyYW5zYWN0aW9uOiBOb2RlSUQgaXMgbm90IGluIGNiNTggZm9ybWF0Jyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIHN0YWtlIGR1cmF0aW9uXG4gICAqIEBwYXJhbSBzdGFydFRpbWVcbiAgICogQHBhcmFtIGVuZFRpbWVcbiAgICovXG4gIHZhbGlkYXRlU3Rha2VEdXJhdGlvbihzdGFydFRpbWU6IGJpZ2ludCwgZW5kVGltZTogYmlnaW50KTogdm9pZCB7XG4gICAgaWYgKGVuZFRpbWUgPCBzdGFydFRpbWUpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ0VuZCBkYXRlIGNhbm5vdCBiZSBsZXNzIHRoYW4gc3RhcnQgZGF0ZScpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSBzdGFrZSBhbW91bnRcbiAgICogQHBhcmFtIGFtb3VudFxuICAgKi9cbiAgdmFsaWRhdGVTdGFrZUFtb3VudChhbW91bnQ6IGJpZ2ludCk6IHZvaWQge1xuICAgIGNvbnN0IG1pblN0YWtlID0gQmlnSW50KHRoaXMudHJhbnNhY3Rpb24uX25ldHdvcmsubWluU3Rha2UpO1xuICAgIGlmIChhbW91bnQgPCBtaW5TdGFrZSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignTWluaW11bSBzdGFraW5nIGFtb3VudCBpcyAnICsgTnVtYmVyKG1pblN0YWtlKSAvIDEwMDAwMDAwMDAgKyAnIEFWQVguJyk7XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIGVuZHJlZ2lvblxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBpbml0QnVpbGRlcih0eDogVHgpOiB0aGlzIHtcbiAgICBzdXBlci5pbml0QnVpbGRlcih0eCk7XG4gICAgY29uc3QgcGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeCA9ICh0eCBhcyBVbnNpZ25lZFR4KS50eCBhcyBwdm1TZXJpYWwuQWRkUGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeDtcbiAgICBpZiAoIXRoaXMudmVyaWZ5VHhUeXBlKHBlcm1pc3Npb25sZXNzVmFsaWRhdG9yVHgpKSB7XG4gICAgICB0aHJvdyBuZXcgTm90U3VwcG9ydGVkKCdUcmFuc2FjdGlvbiBjYW5ub3QgYmUgcGFyc2VkIG9yIGhhcyBhbiB1bnN1cHBvcnRlZCB0cmFuc2FjdGlvbiB0eXBlJyk7XG4gICAgfVxuXG4gICAgY29uc3Qgb3V0cHV0cyA9IHBlcm1pc3Npb25sZXNzVmFsaWRhdG9yVHguYmFzZVR4Lm91dHB1dHM7XG4gICAgaWYgKG91dHB1dHMubGVuZ3RoICE9PSAxKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdUcmFuc2FjdGlvbiBjYW4gaGF2ZSBvbmUgZXh0ZXJuYWwgb3V0cHV0Jyk7XG4gICAgfVxuXG4gICAgY29uc3Qgb3V0cHV0ID0gb3V0cHV0c1swXS5vdXRwdXQgYXMgVHJhbnNmZXJPdXRwdXQ7XG4gICAgaWYgKG91dHB1dHNbMF0uZ2V0QXNzZXRJZCgpICE9PSB0aGlzLnRyYW5zYWN0aW9uLl9hc3NldElkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBBc3NldCBJRCBvZiB0aGUgb3V0cHV0IGRvZXMgbm90IG1hdGNoIHRoZSB0cmFuc2FjdGlvbicpO1xuICAgIH1cblxuICAgIHRoaXMudHJhbnNhY3Rpb24uX2Jsc1B1YmxpY0tleSA9IEF2YXhVdGlscy5idWZmZXJUb0hleChcbiAgICAgIChwZXJtaXNzaW9ubGVzc1ZhbGlkYXRvclR4LnNpZ25lciBhcyBwdm1TZXJpYWwuU2lnbmVyKS5wcm9vZi5wdWJsaWNLZXlcbiAgICApO1xuICAgIHRoaXMuX2Jsc1B1YmxpY0tleSA9IHRoaXMudHJhbnNhY3Rpb24uX2Jsc1B1YmxpY0tleTtcbiAgICB0aGlzLnRyYW5zYWN0aW9uLl9ibHNTaWduYXR1cmUgPSBBdmF4VXRpbHMuYnVmZmVyVG9IZXgoXG4gICAgICAocGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeC5zaWduZXIgYXMgcHZtU2VyaWFsLlNpZ25lcikucHJvb2Yuc2lnbmF0dXJlXG4gICAgKTtcbiAgICB0aGlzLl9ibHNTaWduYXR1cmUgPSB0aGlzLnRyYW5zYWN0aW9uLl9ibHNTaWduYXR1cmU7XG5cbiAgICB0aGlzLnRyYW5zYWN0aW9uLl9sb2NrdGltZSA9IG91dHB1dC5vdXRwdXRPd25lcnMubG9ja3RpbWUudmFsdWUoKTtcbiAgICB0aGlzLnRyYW5zYWN0aW9uLl90aHJlc2hvbGQgPSBvdXRwdXQub3V0cHV0T3duZXJzLnRocmVzaG9sZC52YWx1ZSgpO1xuICAgIHRoaXMudHJhbnNhY3Rpb24uX25vZGVJRCA9IHBlcm1pc3Npb25sZXNzVmFsaWRhdG9yVHguc3VibmV0VmFsaWRhdG9yLnZhbGlkYXRvci5ub2RlSWQudG9TdHJpbmcoKTtcbiAgICB0aGlzLl9ub2RlSUQgPSB0aGlzLnRyYW5zYWN0aW9uLl9ub2RlSUQ7XG4gICAgdGhpcy50cmFuc2FjdGlvbi5fc3RhcnRUaW1lID0gcGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeC5zdWJuZXRWYWxpZGF0b3IudmFsaWRhdG9yLnN0YXJ0VGltZS52YWx1ZSgpO1xuICAgIHRoaXMuX3N0YXJ0VGltZSA9IHRoaXMudHJhbnNhY3Rpb24uX3N0YXJ0VGltZTtcbiAgICB0aGlzLnRyYW5zYWN0aW9uLl9lbmRUaW1lID0gcGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeC5zdWJuZXRWYWxpZGF0b3IudmFsaWRhdG9yLmVuZFRpbWUudmFsdWUoKTtcbiAgICB0aGlzLl9lbmRUaW1lID0gdGhpcy50cmFuc2FjdGlvbi5fZW5kVGltZTtcbiAgICB0aGlzLnRyYW5zYWN0aW9uLl9mcm9tQWRkcmVzc2VzID0gb3V0cHV0Lm91dHB1dE93bmVycy5hZGRycy5tYXAoKGEpID0+IGEudG9CeXRlcygpKTtcbiAgICB0aGlzLnRyYW5zYWN0aW9uLl9zdGFrZUFtb3VudCA9IHBlcm1pc3Npb25sZXNzVmFsaWRhdG9yVHguc3Rha2VbMF0ub3V0cHV0LmFtb3VudCgpO1xuICAgIHRoaXMuc3Rha2VBbW91bnQocGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeC5zdGFrZVswXS5vdXRwdXQuYW1vdW50KCkpO1xuICAgIHRoaXMudHJhbnNhY3Rpb24uX3V0eG9zID0gcmVjb3ZlclV0eG9zKHBlcm1pc3Npb25sZXNzVmFsaWRhdG9yVHguZ2V0SW5wdXRzKCkpO1xuICAgIC8vIFRPRE8oQ1ItMTA3Myk6IHJlbW92ZSBsb2dcbiAgICBjb25zb2xlLmxvZygndXR4b3M6ICcsIHRoaXMudHJhbnNhY3Rpb24uX3V0eG9zKTtcbiAgICBjb25zb2xlLmxvZygnZnJvbUFkZHJlc3NlczogJywgdGhpcy50cmFuc2FjdGlvbi5mcm9tQWRkcmVzc2VzKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHN0YXRpYyB2ZXJpZnlUeFR5cGUodHlwZTogVHlwZVN5bWJvbHMpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHlwZSA9PT0gVHlwZVN5bWJvbHMuQWRkUGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeDtcbiAgfVxuXG4gIHZlcmlmeVR4VHlwZSh0eDogVHgpOiB0eCBpcyBwdm1TZXJpYWwuQWRkUGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeCB7XG4gICAgcmV0dXJuIFBlcm1pc3Npb25sZXNzVmFsaWRhdG9yVHhCdWlsZGVyLnZlcmlmeVR4VHlwZSgodHggYXMgcHZtU2VyaWFsLkFkZFBlcm1pc3Npb25sZXNzVmFsaWRhdG9yVHgpLl90eXBlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaW5jZSBhZGRyZXNzZXMgaW4gb3V0cHV0cyBnZXQgcmVvcmRlcmVkLCB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSBzaWduYXR1cmVzXG4gICAqIGFyZSBhZGRlZCBpbiB0aGUgY29ycmVjdCBwb3NpdGlvblxuICAgKiBUbyBmaW5kIHRoZSBwb3NpdGlvbiwgd2UgdXNlIHRoZSBvdXRwdXQncyBhZGRyZXNzZXMgdG8gY3JlYXRlIHRoZVxuICAgKiBzaWduYXR1cmVJZHggaW4gdGhlIG9yZGVyIG5lZWRlZCAoaS5lLiBbdXNlciwgYml0Z28sIGJhY2t1cF0pXG4gICAqIEBwcm90ZWN0ZWRcbiAgICovXG4gIHByb3RlY3RlZCBjYWxjdWxhdGVVdHhvcygpOiB7XG4gICAgaW5wdXRzOiBhdmF4U2VyaWFsLlRyYW5zZmVyYWJsZUlucHV0W107XG4gICAgc3Rha2VPdXRwdXRzOiBhdmF4U2VyaWFsLlRyYW5zZmVyYWJsZU91dHB1dFtdO1xuICAgIGNoYW5nZU91dHB1dHM6IGF2YXhTZXJpYWwuVHJhbnNmZXJhYmxlT3V0cHV0W107XG4gICAgdXR4b3M6IFV0eG9bXTtcbiAgICBjcmVkZW50aWFsczogQ3JlZGVudGlhbFtdO1xuICB9IHtcbiAgICBjb25zdCBpbnB1dHM6IGF2YXhTZXJpYWwuVHJhbnNmZXJhYmxlSW5wdXRbXSA9IFtdO1xuICAgIGNvbnN0IHN0YWtlT3V0cHV0czogYXZheFNlcmlhbC5UcmFuc2ZlcmFibGVPdXRwdXRbXSA9IFtdO1xuICAgIGNvbnN0IGNoYW5nZU91dHB1dHM6IGF2YXhTZXJpYWwuVHJhbnNmZXJhYmxlT3V0cHV0W10gPSBbXTtcbiAgICBjb25zdCB1dHhvczogVXR4b1tdID0gW107XG5cbiAgICBsZXQgY3VycmVudFRvdGFsID0gQmlnSW50KDApO1xuXG4gICAgLy8gZGVsZWdhdGluZyBhbmQgdmFsaWRhdGluZyBoYXZlIG5vIGZlZXNcbiAgICBjb25zdCB0b3RhbFRhcmdldCA9IHRoaXMuX3N0YWtlQW1vdW50LnZhbHVlT2YoKTtcblxuICAgIGNvbnN0IGNyZWRlbnRpYWxzOiBDcmVkZW50aWFsW10gPSB0aGlzLnRyYW5zYWN0aW9uLmNyZWRlbnRpYWxzID8/IFtdO1xuICAgIC8vIENvbnZlcnQgZnJvbUFkZHJlc3NlcyB0byBzdHJpbmdcbiAgICAvLyBUaGUgb3JkZXIgb2YgZnJvbUFkZHJlc3NlcyBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBzb3VyY2Ugb2YgdGhlIGRhdGFcbiAgICAvLyBXaGVuIGJ1aWxkaW5nIGZyb20gcGFyYW1zLCB0aGUgb3JkZXIgaXMgW3VzZXIsIGJpdGdvLCBiYWNrdXBdXG4gICAgLy8gVGhlIG9yZGVyIGZyb20gdHggaGV4IGlzIFtiaXRnbywgYmFja3VwLCB1c2VyXVxuICAgIGNvbnN0IGJpdGdvQWRkcmVzc2VzID0gdGhpcy50cmFuc2FjdGlvbi5fZnJvbUFkZHJlc3Nlcy5tYXAoKGIpID0+XG4gICAgICBhdmF4VXRpbHMuZm9ybWF0KHRoaXMudHJhbnNhY3Rpb24uX25ldHdvcmsuYWxpYXMsIHRoaXMudHJhbnNhY3Rpb24uX25ldHdvcmsuaHJwLCBiKVxuICAgICk7XG4gICAgLy8gVE9ETyhDUi0xMDczKTogcmVtb3ZlIGxvZ1xuICAgIGNvbnNvbGUubG9nKGBiaXRnb0FkZHJlc3M6ICR7Yml0Z29BZGRyZXNzZXN9YCk7XG5cbiAgICAvLyBpZiB3ZSBhcmUgaW4gT1ZDLCBub25lIG9mIHRoZSB1dHhvcyB3aWxsIGhhdmUgYWRkcmVzc2VzIHNpbmNlIHRoZXkgY29tZSBmcm9tXG4gICAgLy8gZGVzZXJpYWxpemVkIGlucHV0cyAod2hpY2ggZG9uJ3QgaGF2ZSBhZGRyZXNzZXMpLCBub3QgdGhlIElNU1xuICAgIGNvbnN0IGJ1aWxkT3V0cHV0cyA9XG4gICAgICB0aGlzLnRyYW5zYWN0aW9uLl91dHhvc1swXS5hZGRyZXNzZXMubGVuZ3RoICE9PSAwIHx8IHRoaXMudHJhbnNhY3Rpb24uX3V0eG9zWzBdLmFkZHJlc3Nlc0luZGV4Py5sZW5ndGggIT09IDA7XG5cbiAgICBjb25zdCBhc3NldElkID0gSWQuZnJvbVN0cmluZyh0aGlzLnRyYW5zYWN0aW9uLl9hc3NldElkKTtcbiAgICB0aGlzLnRyYW5zYWN0aW9uLl91dHhvcy5mb3JFYWNoKCh1dHhvLCBpbmRleCkgPT4ge1xuICAgICAgLy8gdmFsaWRhdGUgdGhlIHV0eG9zXG4gICAgICBpZiAoIXV0eG8pIHtcbiAgICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignVXR4byBpcyB1bmRlZmluZWQnKTtcbiAgICAgIH1cbiAgICAgIC8vIGFkZHJlc3Nlc0luZGV4IHNob3VsZCBuZXZlciBoYXZlIGEgbWlzbWF0Y2hcbiAgICAgIGlmICh1dHhvLmFkZHJlc3Nlc0luZGV4Py5pbmNsdWRlcygtMSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignQWRkcmVzc2VzIGFyZSBpbmNvbnNpc3RlbnQnKTtcbiAgICAgIH1cbiAgICAgIGlmICh1dHhvLnRocmVzaG9sZCA8IHRoaXMudHJhbnNhY3Rpb24uX3RocmVzaG9sZCkge1xuICAgICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdUaHJlc2hvbGQgaXMgaW5jb25zaXN0ZW50Jyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGJpdGdvSW5kZXhUb09uQ2hhaW5JbmRleCA9IG5ldyBNYXAoKTtcbiAgICAgIC8vIGluIFdQLCBvdXRwdXQuYWRkcmVzc2VzSW5kZXggaXMgZW1wdHksIHNvIGZpbGwgaXRcbiAgICAgIGlmICghdXR4by5hZGRyZXNzZXNJbmRleCB8fCB1dHhvLmFkZHJlc3Nlc0luZGV4Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB1dHhvLmFkZHJlc3Nlc0luZGV4ID0gYml0Z29BZGRyZXNzZXMubWFwKChhKSA9PiB1dHhvLmFkZHJlc3Nlcy5pbmRleE9mKGEpKTtcbiAgICAgIH1cbiAgICAgIC8vIHV0eG8uYWRkcmVzc2VzIGlzIG51bGwgd2hlbiBidWlsZCBmcm9tIHJhd1xuICAgICAgLy8gYnV0IHV0eG8uYWRkcmVzc2VzSW5kZXggaGFzIG9ubHkgMiBlbGVtZW50cyB3aGVuIGJ1aWxkIGZyb20gcmF3XG4gICAgICAvLyBzbyB0aGUgYml0Z29JbmRleFRvT25DaGFpbkluZGV4IG1hcCB3aWxsIGJlIGVtcHR5XG4gICAgICB1dHhvLmFkZHJlc3Nlcy5mb3JFYWNoKChhKSA9PiB7XG4gICAgICAgIGJpdGdvSW5kZXhUb09uQ2hhaW5JbmRleC5zZXQoYml0Z29BZGRyZXNzZXMuaW5kZXhPZihhKSwgdXR4by5hZGRyZXNzZXMuaW5kZXhPZihhKSk7XG4gICAgICB9KTtcbiAgICAgIC8vIFRPRE8oQ1ItMTA3Myk6IHJlbW92ZSBsb2dcbiAgICAgIGNvbnNvbGUubG9nKGB1dHhvLmFkZHJlc3NlczogJHt1dHhvLmFkZHJlc3Nlc31gKTtcbiAgICAgIGNvbnNvbGUubG9nKGBiaXRnb0luZGV4VG9PbkNoYWluSW5kZXg6ICR7QXJyYXkuZnJvbShiaXRnb0luZGV4VG9PbkNoYWluSW5kZXgpfWApO1xuICAgICAgLy8gaW4gT1ZDLCBvdXRwdXQuYWRkcmVzc2VzSW5kZXggaXMgZGVmaW5lZCBjb3JyZWN0bHkgZnJvbSB0aGUgcHJldmlvdXMgaXRlcmF0aW9uXG5cbiAgICAgIGlmICh1dHhvLm91dHB1dElEID09PSBTRUNQMjU2SzFfVHJhbnNmZXJfT3V0cHV0KSB7XG4gICAgICAgIGNvbnN0IHV0eG9BbW91bnQgPSBCaWdJbnQodXR4by5hbW91bnQpO1xuICAgICAgICAvLyBlaXRoZXIgdXNlciAoMCkgb3IgcmVjb3ZlcnkgKDIpXG4gICAgICAgIC8vIE9uIHJlZ3VsYXIgbW9kZTogW3VzZXIsIGJpdGdvXSAoaS5lLiBbMCwgMV0pXG4gICAgICAgIC8vIE9uIHJlY292ZXJ5IG1vZGU6IFtiYWNrdXAsIGJpdGdvXSAoaS5lLiBbMiwgMV0pXG4gICAgICAgIGNvbnN0IHVzZXJPckJhY2t1cEluZGV4ID0gdGhpcy5yZWNvdmVyU2lnbmVyID8gMiA6IDA7XG4gICAgICAgIGNvbnN0IGJpdGdvSW5kZXggPSAxO1xuXG4gICAgICAgIGN1cnJlbnRUb3RhbCA9IGN1cnJlbnRUb3RhbCArIHV0eG9BbW91bnQ7XG5cbiAgICAgICAgY29uc3QgdXR4b0lkID0gYXZheFNlcmlhbC5VVFhPSUQuZnJvbU5hdGl2ZSh1dHhvLnR4aWQsIE51bWJlcih1dHhvLm91dHB1dGlkeCkpO1xuXG4gICAgICAgIGxldCBhZGRyZXNzZXNJbmRleDogbnVtYmVyW10gPSBbXTtcbiAgICAgICAgaWYgKHV0eG8uYWRkcmVzc2VzSW5kZXggJiYgYml0Z29JbmRleFRvT25DaGFpbkluZGV4LnNpemUgPT09IDApIHtcbiAgICAgICAgICBhZGRyZXNzZXNJbmRleCA9IFsuLi51dHhvLmFkZHJlc3Nlc0luZGV4XTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhZGRyZXNzZXNJbmRleC5wdXNoKGJpdGdvSW5kZXhUb09uQ2hhaW5JbmRleC5nZXQodXNlck9yQmFja3VwSW5kZXgpKTtcbiAgICAgICAgICBhZGRyZXNzZXNJbmRleC5wdXNoKGJpdGdvSW5kZXhUb09uQ2hhaW5JbmRleC5nZXQoYml0Z29JbmRleCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdHJhbnNmZXJJbnB1dHMgPSBuZXcgVHJhbnNmZXJJbnB1dChcbiAgICAgICAgICBuZXcgQmlnSW50UHIodXR4b0Ftb3VudCksXG4gICAgICAgICAgbmV3IElucHV0KFsuLi5hZGRyZXNzZXNJbmRleF0uc29ydCgpLm1hcCgobnVtKSA9PiBuZXcgSW50KG51bSkpKVxuICAgICAgICApO1xuICAgICAgICAvLyBUT0RPKENSLTEwNzMpOiByZW1vdmUgbG9nXG4gICAgICAgIGNvbnNvbGUubG9nKGB1c2luZyBhZGRyZXNzZXNJbmRleCBzb3J0ZWQ6ICR7Wy4uLmFkZHJlc3Nlc0luZGV4XS5zb3J0KCl9YCk7XG5cbiAgICAgICAgY29uc3QgaW5wdXQgPSBuZXcgYXZheFNlcmlhbC5UcmFuc2ZlcmFibGVJbnB1dCh1dHhvSWQsIGFzc2V0SWQsIHRyYW5zZmVySW5wdXRzKTtcbiAgICAgICAgdXR4b3MucHVzaChuZXcgVXR4byh1dHhvSWQsIGFzc2V0SWQsIHRyYW5zZmVySW5wdXRzKSk7XG5cbiAgICAgICAgaW5wdXRzLnB1c2goaW5wdXQpO1xuICAgICAgICBpZiAoIXRoaXMudHJhbnNhY3Rpb24uY3JlZGVudGlhbHMgfHwgdGhpcy50cmFuc2FjdGlvbi5jcmVkZW50aWFscy5sZW5ndGggPT0gMCkge1xuICAgICAgICAgIGlmIChidWlsZE91dHB1dHMpIHtcbiAgICAgICAgICAgIC8vIEZvciB0aGUgYml0Z28gc2lnbmF0dXJlIHdlIGNyZWF0ZSBhbiBlbXB0eSBzaWduYXR1cmVcbiAgICAgICAgICAgIC8vIEZvciB0aGUgdXNlci9iYWNrdXAgc2lnbmF0dXJlIHdlIHN0b3JlIHRoZSBhZGRyZXNzIHRoYXQgbWF0Y2hlcyB0aGUga2V5XG4gICAgICAgICAgICAvLyBpZiBiaXRnbyBhZGRyZXNzIGNvbWVzIGJlZm9yZSAgPCB1c2VyL2JhY2t1cCBhZGRyZXNzXG5cbiAgICAgICAgICAgIC8vIFRPRE8oQ1ItMTA3Myk6IHJlbW92ZSBsb2dcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBiaXRnbyBpbmRleCBvbiBjaGFpbjogJHt1dHhvLmFkZHJlc3Nlc0luZGV4W2JpdGdvSW5kZXhdfWApO1xuICAgICAgICAgICAgY29uc29sZS5sb2coYHVzZXIgT3IgQmFja3VwIEluZGV4OiAke3V0eG8uYWRkcmVzc2VzSW5kZXhbdXNlck9yQmFja3VwSW5kZXhdfWApO1xuICAgICAgICAgICAgaWYgKHV0eG8uYWRkcmVzc2VzSW5kZXhbYml0Z29JbmRleF0gPCB1dHhvLmFkZHJlc3Nlc0luZGV4W3VzZXJPckJhY2t1cEluZGV4XSkge1xuICAgICAgICAgICAgICAvLyBUT0RPKENSLTEwNzMpOiByZW1vdmUgbG9nXG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKGB1c2VyIG9yIGJhY2t1cCBjcmVkZW50aWFscyBhZnRlciBiaXRnb2ApO1xuICAgICAgICAgICAgICBjcmVkZW50aWFscy5wdXNoKFxuICAgICAgICAgICAgICAgIG5ldyBDcmVkZW50aWFsKFtcbiAgICAgICAgICAgICAgICAgIHV0aWxzLmNyZWF0ZU5ld1NpZyhCdWZmZXJBdmF4LmZyb20oJycpLnRvU3RyaW5nKCdoZXgnKSksXG4gICAgICAgICAgICAgICAgICB1dGlscy5jcmVhdGVOZXdTaWcoXG4gICAgICAgICAgICAgICAgICAgIEJ1ZmZlckF2YXguZnJvbSh0aGlzLnRyYW5zYWN0aW9uLl9mcm9tQWRkcmVzc2VzW3VzZXJPckJhY2t1cEluZGV4XSkudG9TdHJpbmcoJ2hleCcpXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBUT0RPKENSLTEwNzMpOiByZW1vdmUgbG9nXG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKGB1c2VyIG9yIGJhY2t1cCBjcmVkZW50aWFscyBiZWZvcmUgYml0Z29gKTtcbiAgICAgICAgICAgICAgY3JlZGVudGlhbHMucHVzaChcbiAgICAgICAgICAgICAgICBuZXcgQ3JlZGVudGlhbChbXG4gICAgICAgICAgICAgICAgICB1dGlscy5jcmVhdGVOZXdTaWcoXG4gICAgICAgICAgICAgICAgICAgIEJ1ZmZlckF2YXguZnJvbSh0aGlzLnRyYW5zYWN0aW9uLl9mcm9tQWRkcmVzc2VzW3VzZXJPckJhY2t1cEluZGV4XSkudG9TdHJpbmcoJ2hleCcpXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgdXRpbHMuY3JlYXRlTmV3U2lnKEJ1ZmZlckF2YXguZnJvbSgnJykudG9TdHJpbmcoJ2hleCcpKSxcbiAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBUT0RPKENSLTEwNzMpOiB2ZXJpZnkgdGhpcyBlbHNlIGNhc2UgZm9yIE9WQ1xuICAgICAgICAgICAgY3JlZGVudGlhbHMucHVzaChcbiAgICAgICAgICAgICAgbmV3IENyZWRlbnRpYWwoXG4gICAgICAgICAgICAgICAgYWRkcmVzc2VzSW5kZXgubWFwKChpKSA9PlxuICAgICAgICAgICAgICAgICAgdXRpbHMuY3JlYXRlTmV3U2lnKEJ1ZmZlckF2YXguZnJvbSh0aGlzLnRyYW5zYWN0aW9uLl9mcm9tQWRkcmVzc2VzW2ldKS50b1N0cmluZygnaGV4JykpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBUT0RPKENSLTEwNzMpOiByZW1vdmUgbG9nXG4gICAgICAgICAgY29uc29sZS5sb2coYHJldXNpbmcgY3JlZGVudGlhbHMgZnJvbSB0cmFuc2FjdGlvbmApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoYnVpbGRPdXRwdXRzKSB7XG4gICAgICBpZiAoY3VycmVudFRvdGFsIDwgdG90YWxUYXJnZXQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcihcbiAgICAgICAgICBgVXR4byBvdXRwdXRzIGdldCAke2N1cnJlbnRUb3RhbC50b1N0cmluZygpfSBhbmQgJHt0b3RhbFRhcmdldC50b1N0cmluZygpfSBpcyByZXF1aXJlZGBcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSBpZiAoY3VycmVudFRvdGFsID49IHRvdGFsVGFyZ2V0KSB7XG4gICAgICAgIGNvbnN0IHN0YWtlT3V0cHV0ID0gbmV3IGF2YXhTZXJpYWwuVHJhbnNmZXJhYmxlT3V0cHV0KFxuICAgICAgICAgIGFzc2V0SWQsXG4gICAgICAgICAgbmV3IFRyYW5zZmVyT3V0cHV0KFxuICAgICAgICAgICAgbmV3IEJpZ0ludFByKHRvdGFsVGFyZ2V0KSxcbiAgICAgICAgICAgIG5ldyBPdXRwdXRPd25lcnMoXG4gICAgICAgICAgICAgIG5ldyBCaWdJbnRQcih0aGlzLnRyYW5zYWN0aW9uLl9sb2NrdGltZSksXG4gICAgICAgICAgICAgIG5ldyBJbnQodGhpcy50cmFuc2FjdGlvbi5fdGhyZXNob2xkKSxcbiAgICAgICAgICAgICAgWy4uLnRoaXMudHJhbnNhY3Rpb24uX2Zyb21BZGRyZXNzZXNdXG4gICAgICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IGF2YXhVdGlscy5ieXRlc0NvbXBhcmUoYSwgYikpXG4gICAgICAgICAgICAgICAgLm1hcCgoYSkgPT4gQWRkcmVzcy5mcm9tQnl0ZXMoYSlbMF0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgICBzdGFrZU91dHB1dHMucHVzaChzdGFrZU91dHB1dCk7XG5cbiAgICAgICAgaWYgKGN1cnJlbnRUb3RhbCA+IHRvdGFsVGFyZ2V0KSB7XG4gICAgICAgICAgY29uc3QgY2hhbmdlT3V0cHV0ID0gbmV3IGF2YXhTZXJpYWwuVHJhbnNmZXJhYmxlT3V0cHV0KFxuICAgICAgICAgICAgYXNzZXRJZCxcbiAgICAgICAgICAgIG5ldyBUcmFuc2Zlck91dHB1dChcbiAgICAgICAgICAgICAgbmV3IEJpZ0ludFByKGN1cnJlbnRUb3RhbCAtIHRvdGFsVGFyZ2V0KSxcbiAgICAgICAgICAgICAgbmV3IE91dHB1dE93bmVycyhcbiAgICAgICAgICAgICAgICBuZXcgQmlnSW50UHIodGhpcy50cmFuc2FjdGlvbi5fbG9ja3RpbWUpLFxuICAgICAgICAgICAgICAgIG5ldyBJbnQodGhpcy50cmFuc2FjdGlvbi5fdGhyZXNob2xkKSxcbiAgICAgICAgICAgICAgICBbLi4udGhpcy50cmFuc2FjdGlvbi5fZnJvbUFkZHJlc3Nlc11cbiAgICAgICAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBhdmF4VXRpbHMuYnl0ZXNDb21wYXJlKGEsIGIpKVxuICAgICAgICAgICAgICAgICAgLm1hcCgoYSkgPT4gQWRkcmVzcy5mcm9tQnl0ZXMoYSlbMF0pXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIClcbiAgICAgICAgICApO1xuICAgICAgICAgIGNoYW5nZU91dHB1dHMucHVzaChjaGFuZ2VPdXRwdXQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlucHV0cy5zb3J0KChhLCBiKSA9PiB7XG4gICAgICBpZiAoYXZheFV0aWxzLmJ5dGVzRXF1YWwoYS51dHhvSUQudHhJRC50b0J5dGVzKCksIGIudXR4b0lELnR4SUQudG9CeXRlcygpKSkge1xuICAgICAgICByZXR1cm4gYS51dHhvSUQub3V0cHV0SWR4LnZhbHVlKCkgLSBiLnV0eG9JRC5vdXRwdXRJZHgudmFsdWUoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhdmF4VXRpbHMuYnl0ZXNDb21wYXJlKGEudXR4b0lELnR4SUQudG9CeXRlcygpLCBiLnV0eG9JRC50eElELnRvQnl0ZXMoKSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHsgaW5wdXRzLCBzdGFrZU91dHB1dHMsIGNoYW5nZU91dHB1dHMsIHV0eG9zLCBjcmVkZW50aWFscyB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIHRoZSBhZGQgdmFsaWRhdG9yIHRyYW5zYWN0aW9uXG4gICAqIEBwcm90ZWN0ZWRcbiAgICovXG4gIHByb3RlY3RlZCBidWlsZEF2YXhUcmFuc2FjdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLnZhbGlkYXRlU3Rha2VEdXJhdGlvbih0aGlzLnRyYW5zYWN0aW9uLl9zdGFydFRpbWUsIHRoaXMudHJhbnNhY3Rpb24uX2VuZFRpbWUpO1xuICAgIGNvbnN0IHsgaW5wdXRzLCBzdGFrZU91dHB1dHMsIGNoYW5nZU91dHB1dHMsIHV0eG9zLCBjcmVkZW50aWFscyB9ID0gdGhpcy5jYWxjdWxhdGVVdHhvcygpO1xuICAgIGNvbnN0IGJhc2VUeCA9IGF2YXhTZXJpYWwuQmFzZVR4LmZyb21OYXRpdmUoXG4gICAgICB0aGlzLnRyYW5zYWN0aW9uLl9uZXR3b3JrSUQsXG4gICAgICB0aGlzLnRyYW5zYWN0aW9uLl9ibG9ja2NoYWluSUQsXG4gICAgICBjaGFuZ2VPdXRwdXRzLFxuICAgICAgaW5wdXRzLFxuICAgICAgbmV3IFVpbnQ4QXJyYXkoKSAvLyBkZWZhdWx0IGVtcHR5IG1lbW9cbiAgICApO1xuXG4gICAgY29uc3Qgc3VibmV0VmFsaWRhdG9yID0gcHZtU2VyaWFsLlN1Ym5ldFZhbGlkYXRvci5mcm9tTmF0aXZlKFxuICAgICAgdGhpcy5fbm9kZUlELFxuICAgICAgdGhpcy5fc3RhcnRUaW1lLFxuICAgICAgdGhpcy5fZW5kVGltZSxcbiAgICAgIHRoaXMuX3N0YWtlQW1vdW50LFxuICAgICAgbmV0d29ya0lEcy5QcmltYXJ5TmV0d29ya0lEXG4gICAgKTtcblxuICAgIGNvbnN0IHNpZ25lciA9IG5ldyBwdm1TZXJpYWwuU2lnbmVyKFxuICAgICAgbmV3IHB2bVNlcmlhbC5Qcm9vZk9mUG9zc2Vzc2lvbihcbiAgICAgICAgQXZheFV0aWxzLmhleFRvQnVmZmVyKHRoaXMuX2Jsc1B1YmxpY0tleSksXG4gICAgICAgIEF2YXhVdGlscy5oZXhUb0J1ZmZlcih0aGlzLl9ibHNTaWduYXR1cmUpXG4gICAgICApXG4gICAgKTtcblxuICAgIGNvbnN0IG91dHB1dE93bmVycyA9IG5ldyBPdXRwdXRPd25lcnMoXG4gICAgICBuZXcgQmlnSW50UHIodGhpcy50cmFuc2FjdGlvbi5fbG9ja3RpbWUpLFxuICAgICAgbmV3IEludCh0aGlzLnRyYW5zYWN0aW9uLl90aHJlc2hvbGQpLFxuICAgICAgWy4uLnRoaXMudHJhbnNhY3Rpb24uX2Zyb21BZGRyZXNzZXNdXG4gICAgICAgIC5zb3J0KChhLCBiKSA9PiBhdmF4VXRpbHMuYnl0ZXNDb21wYXJlKGEsIGIpKVxuICAgICAgICAubWFwKChhKSA9PiBBZGRyZXNzLmZyb21CeXRlcyhhKVswXSlcbiAgICApO1xuXG4gICAgLy8gVE9ETyhDUi0xMDczKTogY2hlY2sgdGhpcyB2YWx1ZVxuICAgIC8vICBTaGFyZXMgMTAsMDAwIHRpbWVzIHBlcmNlbnRhZ2Ugb2YgcmV3YXJkIHRha2VuIGZyb20gZGVsZWdhdG9yc1xuICAgIC8vICBodHRwczovL2RvY3MuYXZheC5uZXR3b3JrL3JlZmVyZW5jZS9hdmFsYW5jaGVnby9wLWNoYWluL3R4bi1mb3JtYXQjdW5zaWduZWQtYWRkLXZhbGlkYXRvci10eFxuICAgIGNvbnN0IHNoYXJlcyA9IG5ldyBJbnQoMWU0ICogMik7XG5cbiAgICBjb25zdCBhZGRyZXNzTWFwcyA9IFsuLi50aGlzLnRyYW5zYWN0aW9uLl9mcm9tQWRkcmVzc2VzXVxuICAgICAgLnNvcnQoKGEsIGIpID0+IGF2YXhVdGlscy5ieXRlc0NvbXBhcmUoYSwgYikpXG4gICAgICAubWFwKChhZGRyZXNzKSA9PiBuZXcgQXZheFV0aWxzLkFkZHJlc3NNYXAoW1tuZXcgQWRkcmVzcyhhZGRyZXNzKSwgMF1dKSk7XG5cbiAgICB0aGlzLnRyYW5zYWN0aW9uLnNldFRyYW5zYWN0aW9uKFxuICAgICAgbmV3IFVuc2lnbmVkVHgoXG4gICAgICAgIG5ldyBwdm1TZXJpYWwuQWRkUGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeChcbiAgICAgICAgICBiYXNlVHgsXG4gICAgICAgICAgc3VibmV0VmFsaWRhdG9yLFxuICAgICAgICAgIHNpZ25lcixcbiAgICAgICAgICBzdGFrZU91dHB1dHMsXG4gICAgICAgICAgb3V0cHV0T3duZXJzLFxuICAgICAgICAgIG91dHB1dE93bmVycyxcbiAgICAgICAgICBzaGFyZXNcbiAgICAgICAgKSxcbiAgICAgICAgdXR4b3MsXG4gICAgICAgIG5ldyBBdmF4VXRpbHMuQWRkcmVzc01hcHMoYWRkcmVzc01hcHMpLFxuICAgICAgICBjcmVkZW50aWFsc1xuICAgICAgKVxuICAgICk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHJvdGVjdGVkIHNpZ25JbXBsZW1lbnRhdGlvbih7IGtleSB9OiBCYXNlS2V5KTogVHJhbnNhY3Rpb24ge1xuICAgIHRoaXMuX3NpZ25lci5wdXNoKG5ldyBLZXlQYWlyKHsgcHJ2OiBrZXkgfSkpO1xuICAgIHJldHVybiB0aGlzLnRyYW5zYWN0aW9uO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHZhbGlkYXRlQWRkcmVzcyhhZGRyZXNzOiBCYXNlQWRkcmVzcywgYWRkcmVzc0Zvcm1hdD86IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghdXRpbHMuaXNWYWxpZEFkZHJlc3MoYWRkcmVzcy5hZGRyZXNzKSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignSW52YWxpZCBhZGRyZXNzJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHByb3RlY3RlZCBnZXQgdHJhbnNhY3Rpb24oKTogVHJhbnNhY3Rpb24ge1xuICAgIHJldHVybiB0aGlzLl90cmFuc2FjdGlvbjtcbiAgfVxuXG4gIHByb3RlY3RlZCBzZXQgdHJhbnNhY3Rpb24odHJhbnNhY3Rpb246IFRyYW5zYWN0aW9uKSB7XG4gICAgdGhpcy5fdHJhbnNhY3Rpb24gPSB0cmFuc2FjdGlvbjtcbiAgfVxuXG4gIGhhc1NpZ25lcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fc2lnbmVyICE9PSB1bmRlZmluZWQgJiYgdGhpcy5fc2lnbmVyLmxlbmd0aCA+IDA7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdmFsaWRhdGVLZXkoeyBrZXkgfTogQmFzZUtleSk6IHZvaWQge1xuICAgIGlmICghbmV3IEtleVBhaXIoeyBwcnY6IGtleSB9KSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignSW52YWxpZCBrZXknKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgdGhlIHJhdyB0cmFuc2FjdGlvbiBoYXMgYSB2YWxpZCBmb3JtYXQgaW4gdGhlIGJsb2NrY2hhaW4gY29udGV4dCwgdGhyb3cgb3RoZXJ3aXNlLlxuICAgKlxuICAgKiBAcGFyYW0gcmF3VHJhbnNhY3Rpb24gVHJhbnNhY3Rpb24gaW4gYW55IGZvcm1hdFxuICAgKi9cbiAgdmFsaWRhdGVSYXdUcmFuc2FjdGlvbihyYXdUcmFuc2FjdGlvbjogc3RyaW5nKTogdm9pZCB7XG4gICAgdXRpbHMudmFsaWRhdGVSYXdUcmFuc2FjdGlvbihyYXdUcmFuc2FjdGlvbik7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdmFsaWRhdGVUcmFuc2FjdGlvbih0cmFuc2FjdGlvbj86IFRyYW5zYWN0aW9uKTogdm9pZCB7XG4gICAgLy8gdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoJ3ZhbGlkYXRlVHJhbnNhY3Rpb24gbm90IGltcGxlbWVudGVkJyk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdmFsaWRhdGVWYWx1ZSh2YWx1ZTogQmlnTnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKHZhbHVlLmlzTGVzc1RoYW4oMCkpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ1ZhbHVlIGNhbm5vdCBiZSBsZXNzIHRoYW4gemVybycpO1xuICAgIH1cbiAgfVxufVxuIl19
@@ -1,43 +1,44 @@
1
- /// <reference types="bn.js" />
2
1
  /// <reference types="node" />
3
- import { AvalancheNetwork, BaseCoin as CoinConfig } from '@bitgo-beta/statics';
2
+ import { avaxSerial, Credential } from '@bitgo/avalanchejs';
4
3
  import { BaseKey, BaseTransaction, Entry, TransactionFee, TransactionType } from '@bitgo-beta/sdk-core';
4
+ import { AvalancheNetwork, BaseCoin as CoinConfig } from '@bitgo-beta/statics';
5
+ import { Buffer as BufferAvax } from 'avalanche';
6
+ import { Buffer } from 'buffer';
7
+ import { DecodedUtxoObj, TransactionExplanation, Tx, TxData } from './iface';
5
8
  import { KeyPair } from './keyPair';
6
- import { BaseTx, DecodedUtxoObj, TransactionExplanation, Tx, TxData } from './iface';
7
- import { BN, Buffer as BufferAvax } from 'avalanche';
8
- import { Credential } from 'avalanche/dist/common';
9
9
  export declare class Transaction extends BaseTransaction {
10
10
  protected _avaxTransaction: Tx;
11
11
  _type: TransactionType;
12
12
  _network: AvalancheNetwork;
13
13
  _networkID: number;
14
- _assetId: BufferAvax;
15
- _blockchainID: BufferAvax;
16
- _memo?: BufferAvax;
14
+ _assetId: string;
15
+ _blockchainID: string;
16
+ _nodeID: string;
17
+ _startTime: bigint;
18
+ _endTime: bigint;
19
+ _stakeAmount: bigint;
17
20
  _threshold: number;
18
- _locktime: BN;
19
- _fromAddresses: BufferAvax[];
21
+ _locktime: bigint;
22
+ _fromAddresses: Uint8Array[];
20
23
  _rewardAddresses: BufferAvax[];
21
24
  _utxos: DecodedUtxoObj[];
22
25
  _to: BufferAvax[];
23
26
  _fee: Partial<TransactionFee>;
27
+ _blsPublicKey: string;
28
+ _blsSignature: string;
24
29
  constructor(coinConfig: Readonly<CoinConfig>);
25
- get avaxPTransaction(): BaseTx;
30
+ get avaxPTransaction(): avaxSerial.BaseTx;
26
31
  get signature(): string[];
27
32
  get credentials(): Credential[];
28
33
  get hasCredentials(): boolean;
29
34
  /** @inheritdoc */
30
35
  canSign({ key }: BaseKey): boolean;
31
36
  /**
32
- * Sign a avaxp transaction and update the transaction hex
33
- * validator, delegator, import, exports extend baseTx
34
- * unsignedTx: UnsignedTx = new UnsignedTx(baseTx) (baseTx = addValidatorTx)
35
- * const tx: Tx = unsignedTx.sign(keychain) (tx is type standard signed tx)
36
- * get baseTx then create new unsignedTx then sign
37
- *
37
+ * Sign an avaxp transaction and update the transaction hex
38
38
  * @param {KeyPair} keyPair
39
39
  */
40
- sign(keyPair: KeyPair): void;
40
+ sign(keyPair: KeyPair): Promise<void>;
41
+ toHexString(byteArray: Uint8Array): string;
41
42
  /** @inheritdoc */
42
43
  /**
43
44
  * should be of signedTx doing this with baseTx
@@ -63,9 +64,6 @@ export declare class Transaction extends BaseTransaction {
63
64
  * Get the list of outputs. Amounts are expressed in absolute value.
64
65
  */
65
66
  get outputs(): Entry[];
66
- /**
67
- * Get a Transasction Fee.
68
- */
69
67
  get fee(): TransactionFee;
70
68
  get changeOutputs(): Entry[];
71
69
  get inputs(): Entry[];
@@ -77,24 +75,5 @@ export declare class Transaction extends BaseTransaction {
77
75
  createSignature(prv: Buffer): string;
78
76
  /** @inheritdoc */
79
77
  explainTransaction(): TransactionExplanation;
80
- /**
81
- * Check if this transaction is a P chain
82
- */
83
- get isTransactionForCChain(): boolean;
84
- /**
85
- * get the source chain id or undefined if it's a cross chain transfer.
86
- */
87
- get sourceChain(): string | undefined;
88
- /**
89
- * get the destinationChain or undefined if it's a cross chain transfer.
90
- */
91
- get destinationChain(): string | undefined;
92
- /**
93
- * Convert a blockchainId buffer to string and return P or C alias if match of any of that chains.
94
- * @param {BufferAvax} blockchainIDBuffer
95
- * @return {string} blocchainID or alias if exists.
96
- * @private
97
- */
98
- private blockchainIDtoAlias;
99
78
  }
100
79
  //# sourceMappingURL=transaction.d.ts.map