@bitgo-beta/sdk-coin-flrp 1.0.1-beta.266 → 1.0.1-beta.268

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 (120) hide show
  1. package/dist/src/flrp.d.ts +6 -75
  2. package/dist/src/flrp.d.ts.map +1 -1
  3. package/dist/src/flrp.js +13 -298
  4. package/dist/src/index.d.ts +0 -1
  5. package/dist/src/index.d.ts.map +1 -1
  6. package/dist/src/index.js +1 -2
  7. package/dist/src/lib/ExportInCTxBuilder.d.ts +50 -0
  8. package/dist/src/lib/ExportInCTxBuilder.d.ts.map +1 -0
  9. package/dist/src/lib/ExportInCTxBuilder.js +163 -0
  10. package/dist/src/lib/ExportInPTxBuilder.d.ts +36 -0
  11. package/dist/src/lib/ExportInPTxBuilder.d.ts.map +1 -0
  12. package/dist/src/lib/ExportInPTxBuilder.js +128 -0
  13. package/dist/src/lib/ImportInCTxBuilder.d.ts +47 -0
  14. package/dist/src/lib/ImportInCTxBuilder.d.ts.map +1 -0
  15. package/dist/src/lib/ImportInCTxBuilder.js +213 -0
  16. package/dist/src/lib/ImportInPTxBuilder.d.ts +23 -0
  17. package/dist/src/lib/ImportInPTxBuilder.d.ts.map +1 -0
  18. package/dist/src/lib/ImportInPTxBuilder.js +101 -0
  19. package/dist/src/lib/atomicInCTransactionBuilder.d.ts +18 -16
  20. package/dist/src/lib/atomicInCTransactionBuilder.d.ts.map +1 -1
  21. package/dist/src/lib/atomicInCTransactionBuilder.js +38 -36
  22. package/dist/src/lib/atomicTransactionBuilder.d.ts +34 -84
  23. package/dist/src/lib/atomicTransactionBuilder.d.ts.map +1 -1
  24. package/dist/src/lib/atomicTransactionBuilder.js +119 -288
  25. package/dist/src/lib/iface.d.ts +50 -51
  26. package/dist/src/lib/iface.d.ts.map +1 -1
  27. package/dist/src/lib/iface.js +22 -10
  28. package/dist/src/lib/index.d.ts +2 -3
  29. package/dist/src/lib/index.d.ts.map +1 -1
  30. package/dist/src/lib/index.js +5 -6
  31. package/dist/src/lib/keyPair.d.ts +1 -1
  32. package/dist/src/lib/keyPair.d.ts.map +1 -1
  33. package/dist/src/lib/keyPair.js +9 -5
  34. package/dist/src/lib/permissionlessValidatorTxBuilder.d.ts +32 -67
  35. package/dist/src/lib/permissionlessValidatorTxBuilder.d.ts.map +1 -1
  36. package/dist/src/lib/permissionlessValidatorTxBuilder.js +91 -205
  37. package/dist/src/lib/transaction.d.ts +8 -74
  38. package/dist/src/lib/transaction.d.ts.map +1 -1
  39. package/dist/src/lib/transaction.js +61 -210
  40. package/dist/src/lib/transactionBuilder.d.ts +56 -34
  41. package/dist/src/lib/transactionBuilder.d.ts.map +1 -1
  42. package/dist/src/lib/transactionBuilder.js +112 -69
  43. package/dist/src/lib/transactionBuilderFactory.d.ts +27 -30
  44. package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -1
  45. package/dist/src/lib/transactionBuilderFactory.js +69 -75
  46. package/dist/src/lib/utils.d.ts +58 -157
  47. package/dist/src/lib/utils.d.ts.map +1 -1
  48. package/dist/src/lib/utils.js +134 -399
  49. package/dist/test/resources/transactionData/exportInC.d.ts +20 -0
  50. package/dist/test/resources/transactionData/exportInC.d.ts.map +1 -0
  51. package/dist/test/resources/transactionData/exportInC.js +30 -0
  52. package/dist/test/unit/lib/exportInCTxBuilder.js +92 -513
  53. package/dist/tsconfig.tsbuildinfo +1 -1
  54. package/package.json +9 -11
  55. package/dist/src/iface.d.ts +0 -25
  56. package/dist/src/iface.d.ts.map +0 -1
  57. package/dist/src/iface.js +0 -3
  58. package/dist/src/lib/constants.d.ts +0 -170
  59. package/dist/src/lib/constants.d.ts.map +0 -1
  60. package/dist/src/lib/constants.js +0 -227
  61. package/dist/src/lib/delegatorTxBuilder.d.ts +0 -58
  62. package/dist/src/lib/delegatorTxBuilder.d.ts.map +0 -1
  63. package/dist/src/lib/delegatorTxBuilder.js +0 -224
  64. package/dist/src/lib/errors.d.ts +0 -8
  65. package/dist/src/lib/errors.d.ts.map +0 -1
  66. package/dist/src/lib/errors.js +0 -19
  67. package/dist/src/lib/exportInCTxBuilder.d.ts +0 -77
  68. package/dist/src/lib/exportInCTxBuilder.d.ts.map +0 -1
  69. package/dist/src/lib/exportInCTxBuilder.js +0 -199
  70. package/dist/src/lib/exportInPTxBuilder.d.ts +0 -30
  71. package/dist/src/lib/exportInPTxBuilder.d.ts.map +0 -1
  72. package/dist/src/lib/exportInPTxBuilder.js +0 -120
  73. package/dist/src/lib/importInCTxBuilder.d.ts +0 -67
  74. package/dist/src/lib/importInCTxBuilder.d.ts.map +0 -1
  75. package/dist/src/lib/importInCTxBuilder.js +0 -403
  76. package/dist/src/lib/importInPTxBuilder.d.ts +0 -73
  77. package/dist/src/lib/importInPTxBuilder.d.ts.map +0 -1
  78. package/dist/src/lib/importInPTxBuilder.js +0 -464
  79. package/dist/src/lib/types.d.ts +0 -78
  80. package/dist/src/lib/types.d.ts.map +0 -1
  81. package/dist/src/lib/types.js +0 -5
  82. package/dist/src/lib/validatorTxBuilder.d.ts +0 -40
  83. package/dist/src/lib/validatorTxBuilder.d.ts.map +0 -1
  84. package/dist/src/lib/validatorTxBuilder.js +0 -180
  85. package/dist/test/unit/delegatorTxBuilder.test.d.ts +0 -2
  86. package/dist/test/unit/delegatorTxBuilder.test.d.ts.map +0 -1
  87. package/dist/test/unit/delegatorTxBuilder.test.js +0 -233
  88. package/dist/test/unit/flrp.d.ts +0 -2
  89. package/dist/test/unit/flrp.d.ts.map +0 -1
  90. package/dist/test/unit/flrp.js +0 -118
  91. package/dist/test/unit/lib/atomicTransactionBuilder.d.ts +0 -2
  92. package/dist/test/unit/lib/atomicTransactionBuilder.d.ts.map +0 -1
  93. package/dist/test/unit/lib/atomicTransactionBuilder.js +0 -222
  94. package/dist/test/unit/lib/exportInPTxBuilder.d.ts +0 -2
  95. package/dist/test/unit/lib/exportInPTxBuilder.d.ts.map +0 -1
  96. package/dist/test/unit/lib/exportInPTxBuilder.js +0 -377
  97. package/dist/test/unit/lib/importInCTxBuilder.d.ts +0 -2
  98. package/dist/test/unit/lib/importInCTxBuilder.d.ts.map +0 -1
  99. package/dist/test/unit/lib/importInCTxBuilder.js +0 -258
  100. package/dist/test/unit/lib/importInPTxBuilder.d.ts +0 -2
  101. package/dist/test/unit/lib/importInPTxBuilder.d.ts.map +0 -1
  102. package/dist/test/unit/lib/importInPTxBuilder.js +0 -501
  103. package/dist/test/unit/lib/transaction.d.ts +0 -2
  104. package/dist/test/unit/lib/transaction.d.ts.map +0 -1
  105. package/dist/test/unit/lib/transaction.js +0 -460
  106. package/dist/test/unit/lib/utils.d.ts +0 -2
  107. package/dist/test/unit/lib/utils.d.ts.map +0 -1
  108. package/dist/test/unit/lib/utils.js +0 -365
  109. package/dist/test/unit/permissionlessValidatorTxBuilder.test.d.ts +0 -2
  110. package/dist/test/unit/permissionlessValidatorTxBuilder.test.d.ts.map +0 -1
  111. package/dist/test/unit/permissionlessValidatorTxBuilder.test.js +0 -271
  112. package/dist/test/unit/smoke.d.ts +0 -2
  113. package/dist/test/unit/smoke.d.ts.map +0 -1
  114. package/dist/test/unit/smoke.js +0 -23
  115. package/dist/test/unit/transactionBuilder.test.d.ts +0 -2
  116. package/dist/test/unit/transactionBuilder.test.d.ts.map +0 -1
  117. package/dist/test/unit/transactionBuilder.test.js +0 -114
  118. package/dist/test/unit/validatorTxBuilder.test.d.ts +0 -2
  119. package/dist/test/unit/validatorTxBuilder.test.d.ts.map +0 -1
  120. package/dist/test/unit/validatorTxBuilder.test.js +0 -293
@@ -1,248 +1,134 @@
1
1
  "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
2
5
  Object.defineProperty(exports, "__esModule", { value: true });
3
6
  exports.PermissionlessValidatorTxBuilder = void 0;
7
+ const flarejs_1 = require("@flarenetwork/flarejs");
4
8
  const sdk_core_1 = require("@bitgo-beta/sdk-core");
5
- const atomicTransactionBuilder_1 = require("./atomicTransactionBuilder");
6
- const constants_1 = require("./constants");
7
- const utils_1 = require("./utils");
8
- class PermissionlessValidatorTxBuilder extends atomicTransactionBuilder_1.AtomicTransactionBuilder {
9
- /**
10
- * @param coinConfig
11
- */
9
+ const transactionBuilder_1 = require("./transactionBuilder");
10
+ const utils_1 = __importDefault(require("./utils"));
11
+ class PermissionlessValidatorTxBuilder extends transactionBuilder_1.TransactionBuilder {
12
12
  constructor(coinConfig) {
13
13
  super(coinConfig);
14
- this._nodeID = undefined;
15
- this._blsPublicKey = undefined;
16
- this._blsSignature = undefined;
17
- this._startTime = undefined;
18
- this._endTime = undefined;
19
- this._stakeAmount = undefined;
20
- this._delegationFeeRate = undefined;
14
+ this._signer = [];
15
+ this.recoverSigner = false;
16
+ this.transaction._fee.fee = this.transaction._network.txFee;
21
17
  }
22
- /**
23
- * get transaction type
24
- * @protected
25
- */
26
18
  get transactionType() {
27
19
  return sdk_core_1.TransactionType.AddPermissionlessValidator;
28
20
  }
29
- /**
30
- * Set the node ID for permissionless validation
31
- * @param nodeID - The node ID
32
- */
33
- nodeID(nodeID) {
34
- if (!nodeID || nodeID.length === 0) {
35
- throw new sdk_core_1.BuildTransactionError('Node ID cannot be empty');
21
+ // Validation methods
22
+ validateLocktime(locktime) {
23
+ if (locktime < BigInt(0)) {
24
+ throw new sdk_core_1.BuildTransactionError('Invalid transaction: locktime must be 0 or higher');
36
25
  }
37
- this._nodeID = nodeID;
38
- return this;
39
26
  }
40
- /**
41
- * Set the BLS public key for permissionless validation
42
- * @param blsPublicKey - The BLS public key
43
- */
44
- blsPublicKey(blsPublicKey) {
45
- if (!blsPublicKey || blsPublicKey.length === 0) {
46
- throw new sdk_core_1.BuildTransactionError('BLS public key cannot be empty');
27
+ validateDelegationFeeRate(delegationFeeRate) {
28
+ if (delegationFeeRate < Number(this.transaction._network.minDelegationFee)) {
29
+ throw new sdk_core_1.BuildTransactionError(`Delegation fee cannot be less than ${this.transaction._network.minDelegationFee}`);
30
+ }
31
+ }
32
+ validateUtxo(value) {
33
+ ['outputID', 'amount', 'txid', 'outputidx'].forEach((field) => {
34
+ if (!value.hasOwnProperty(field))
35
+ throw new sdk_core_1.BuildTransactionError(`Utxos required ${field}`);
36
+ });
37
+ }
38
+ validateNodeID(nodeID) {
39
+ if (!nodeID) {
40
+ throw new sdk_core_1.BuildTransactionError('Invalid transaction: missing nodeID');
47
41
  }
48
- // BLS public key should be 48 bytes (96 hex characters) with 0x prefix or 192 hex characters with 0x prefix for uncompressed
49
- if (!(0, utils_1.createHexRegex)(constants_1.BLS_PUBLIC_KEY_COMPRESSED_LENGTH, true).test(blsPublicKey) &&
50
- !(0, utils_1.createHexRegex)(constants_1.BLS_PUBLIC_KEY_UNCOMPRESSED_LENGTH, true).test(blsPublicKey)) {
51
- throw new sdk_core_1.BuildTransactionError('Invalid BLS public key format');
42
+ if (nodeID.slice(0, 6) !== 'NodeID') {
43
+ throw new sdk_core_1.BuildTransactionError('Invalid transaction: invalid NodeID tag');
44
+ }
45
+ if (!(flarejs_1.utils.base58.decode(nodeID.slice(7)).length === 24)) {
46
+ throw new sdk_core_1.BuildTransactionError('Invalid transaction: NodeID is not in cb58 format');
52
47
  }
53
- this._blsPublicKey = blsPublicKey;
54
- return this;
55
48
  }
56
- /**
57
- * Set the BLS signature for permissionless validation
58
- * @param blsSignature - The BLS signature
59
- */
60
- blsSignature(blsSignature) {
61
- if (!blsSignature || blsSignature.length === 0) {
62
- throw new sdk_core_1.BuildTransactionError('BLS signature cannot be empty');
49
+ validateStakeDuration(startTime, endTime) {
50
+ if (endTime < startTime) {
51
+ throw new sdk_core_1.BuildTransactionError('End date cannot be less than start date');
63
52
  }
64
- // BLS signature should be 96 bytes (192 hex characters) with 0x prefix
65
- if (!(0, utils_1.createHexRegex)(constants_1.BLS_SIGNATURE_LENGTH, true).test(blsSignature)) {
66
- throw new sdk_core_1.BuildTransactionError('Invalid BLS signature format');
53
+ }
54
+ validateStakeAmount(amount) {
55
+ const minStake = BigInt(this.transaction._network.minStake);
56
+ if (amount < minStake) {
57
+ throw new sdk_core_1.BuildTransactionError('Minimum staking amount is ' + Number(minStake) / 1000000000 + ' FLR.');
67
58
  }
68
- this._blsSignature = blsSignature;
59
+ }
60
+ // Builder methods
61
+ rewardAddresses(address) {
62
+ const rewardAddresses = address instanceof Array ? address : [address];
63
+ this.transaction._rewardAddresses = rewardAddresses.map(utils_1.default.parseAddress);
69
64
  return this;
70
65
  }
71
- /**
72
- * Set the start time for validation
73
- * @param startTime - Unix timestamp for when validation starts
74
- */
75
- startTime(startTime) {
76
- const time = BigInt(startTime);
77
- if (time < 0) {
78
- throw new sdk_core_1.BuildTransactionError('Start time must be non-negative');
79
- }
80
- this._startTime = time;
66
+ nodeID(nodeID) {
67
+ this.validateNodeID(nodeID);
68
+ this._nodeID = nodeID;
81
69
  return this;
82
70
  }
83
- /**
84
- * Set the end time for validation
85
- * @param endTime - Unix timestamp for when validation ends
86
- */
87
- endTime(endTime) {
88
- const time = BigInt(endTime);
89
- if (time <= 0) {
90
- throw new sdk_core_1.BuildTransactionError('End time must be positive');
91
- }
92
- this._endTime = time;
71
+ blsPublicKey(blsPublicKey) {
72
+ (0, sdk_core_1.isValidBLSPublicKey)(blsPublicKey);
73
+ this._blsPublicKey = blsPublicKey;
93
74
  return this;
94
75
  }
95
- /**
96
- * Set the stake amount for validation
97
- * @param amount - Amount to stake (in nFLR)
98
- */
99
- stakeAmount(amount) {
100
- const stake = BigInt(amount);
101
- if (stake <= 0) {
102
- throw new sdk_core_1.BuildTransactionError('Stake amount must be positive');
103
- }
104
- this._stakeAmount = stake;
76
+ blsSignature(blsSignature) {
77
+ (0, sdk_core_1.isValidBLSSignature)(blsSignature);
78
+ this._blsSignature = blsSignature;
79
+ return this;
80
+ }
81
+ locktime(value) {
82
+ this.validateLocktime(BigInt(value));
83
+ this._transaction._locktime = BigInt(value);
105
84
  return this;
106
85
  }
107
- /**
108
- * Set the delegation fee rate
109
- * @param value - Delegation fee rate in basis points
110
- */
111
86
  delegationFeeRate(value) {
112
87
  this.validateDelegationFeeRate(value);
113
88
  this._delegationFeeRate = value;
114
89
  return this;
115
90
  }
116
- /**
117
- * Set reward addresses where validation rewards should be sent
118
- * @param addresses - Array of reward addresses
119
- */
120
- rewardAddresses(addresses) {
121
- if (!addresses || addresses.length === 0) {
122
- throw new sdk_core_1.BuildTransactionError('At least one reward address is required');
123
- }
124
- // Store reward addresses in the transaction (we'll need to extend the type)
125
- this.transaction._rewardAddresses = addresses;
91
+ startTime(value) {
92
+ this._startTime = BigInt(value);
126
93
  return this;
127
94
  }
128
- /**
129
- * Validate that the delegation fee is at least the minDelegationFee
130
- * @param delegationFeeRate number
131
- */
132
- validateDelegationFeeRate(delegationFeeRate) {
133
- // For Flare, use a minimum delegation fee of 2% (20000 basis points)
134
- const minDelegationFee = constants_1.MIN_DELEGATION_FEE_BASIS_POINTS;
135
- if (delegationFeeRate < minDelegationFee) {
136
- const minDelegationFeePercent = (minDelegationFee / constants_1.BASIS_POINTS_DIVISOR) * constants_1.PERCENTAGE_MULTIPLIER;
137
- throw new sdk_core_1.BuildTransactionError(`Delegation fee cannot be less than ${minDelegationFee} basis points (${minDelegationFeePercent}%)`);
138
- }
139
- }
140
- /** @inheritdoc */
141
- initBuilder(tx) {
142
- // Extract permissionless validator-specific fields from transaction
143
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
144
- const txData = tx;
145
- if (txData.nodeID) {
146
- this._nodeID = txData.nodeID;
147
- }
148
- if (txData.blsPublicKey) {
149
- this._blsPublicKey = txData.blsPublicKey;
150
- }
151
- if (txData.blsSignature) {
152
- this._blsSignature = txData.blsSignature;
153
- }
154
- if (txData.startTime) {
155
- this._startTime = BigInt(txData.startTime);
156
- }
157
- if (txData.endTime) {
158
- this._endTime = BigInt(txData.endTime);
159
- }
160
- if (txData.stakeAmount) {
161
- this._stakeAmount = BigInt(txData.stakeAmount);
162
- }
163
- if (txData.delegationFeeRate !== undefined) {
164
- this._delegationFeeRate = txData.delegationFeeRate;
165
- }
166
- if (txData.rewardAddresses) {
167
- this.transaction._rewardAddresses =
168
- txData.rewardAddresses;
169
- }
95
+ endTime(value) {
96
+ this._endTime = BigInt(value);
170
97
  return this;
171
98
  }
172
- /**
173
- * Verify if the transaction is a permissionless validator transaction
174
- * @param tx
175
- */
176
- static verifyTxType(tx) {
177
- // Check if transaction has permissionless validator-specific properties
178
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
179
- const txData = tx;
180
- return txData && txData.blsPublicKey && txData.blsSignature;
99
+ stakeAmount(value) {
100
+ const valueBigInt = typeof value === 'bigint' ? value : BigInt(value);
101
+ this.validateStakeAmount(valueBigInt);
102
+ this._stakeAmount = valueBigInt;
103
+ return this;
181
104
  }
182
- verifyTxType(tx) {
183
- return PermissionlessValidatorTxBuilder.verifyTxType(tx);
105
+ async buildImplementation() {
106
+ this.buildFlareTransaction();
107
+ this.transaction.setTransactionType(this.transactionType);
108
+ if (this.hasSigner()) {
109
+ for (const keyPair of this._signer) {
110
+ await this.transaction.sign(keyPair);
111
+ }
112
+ }
113
+ return this.transaction;
184
114
  }
185
115
  /**
186
116
  * Build the permissionless validator transaction
187
117
  * @protected
188
118
  */
189
- async buildFlareTransaction() {
190
- // Basic validation
191
- if (!this._nodeID) {
192
- throw new sdk_core_1.BuildTransactionError('Node ID is required for permissionless validator transaction');
193
- }
194
- if (!this._blsPublicKey) {
195
- throw new sdk_core_1.BuildTransactionError('BLS public key is required for permissionless validator transaction');
196
- }
197
- if (!this._blsSignature) {
198
- throw new sdk_core_1.BuildTransactionError('BLS signature is required for permissionless validator transaction');
199
- }
200
- if (!this._startTime) {
201
- throw new sdk_core_1.BuildTransactionError('Start time is required for permissionless validator transaction');
202
- }
203
- if (!this._endTime) {
204
- throw new sdk_core_1.BuildTransactionError('End time is required for permissionless validator transaction');
205
- }
206
- if (!this._stakeAmount) {
207
- throw new sdk_core_1.BuildTransactionError('Stake amount is required for permissionless validator transaction');
208
- }
209
- if (this._delegationFeeRate === undefined) {
210
- throw new sdk_core_1.BuildTransactionError('Delegation fee rate is required for permissionless validator transaction');
211
- }
212
- const rewardAddresses = this.transaction
213
- ._rewardAddresses;
214
- if (!rewardAddresses || rewardAddresses.length === 0) {
215
- throw new sdk_core_1.BuildTransactionError('Reward addresses are required for permissionless validator transaction');
216
- }
217
- // Validate time range
218
- if (this._endTime <= this._startTime) {
219
- throw new sdk_core_1.BuildTransactionError('End time must be after start time');
220
- }
221
- try {
222
- // TODO: Implement actual FlareJS PVM API call when available
223
- // For now, create a placeholder transaction structure
224
- const validatorTx = {
225
- type: constants_1.ADD_PERMISSIONLESS_VALIDATOR_TYPE,
226
- nodeID: this._nodeID,
227
- blsPublicKey: this._blsPublicKey,
228
- blsSignature: this._blsSignature,
229
- startTime: this._startTime,
230
- endTime: this._endTime,
231
- stakeAmount: this._stakeAmount,
232
- delegationFeeRate: this._delegationFeeRate,
233
- rewardAddress: rewardAddresses[0],
234
- fromAddresses: this.transaction._fromAddresses,
235
- networkId: this.transaction._networkID,
236
- sourceBlockchainId: this.transaction._blockchainID,
237
- threshold: this.transaction._threshold || 1,
238
- locktime: this.transaction._locktime || 0n,
239
- };
240
- this.transaction.setTransaction(validatorTx);
241
- }
242
- catch (error) {
243
- throw new sdk_core_1.BuildTransactionError(`Failed to build permissionless validator transaction: ${error instanceof Error ? error.message : 'Unknown error'}`);
244
- }
119
+ buildFlareTransaction() {
120
+ throw new Error('Method not implemented.');
121
+ }
122
+ static verifyTxType(type) {
123
+ return type === flarejs_1.TypeSymbols.AddPermissionlessValidatorTx;
124
+ }
125
+ /** @inheritdoc */
126
+ get transaction() {
127
+ return this._transaction;
128
+ }
129
+ set transaction(transaction) {
130
+ this._transaction = transaction;
245
131
  }
246
132
  }
247
133
  exports.PermissionlessValidatorTxBuilder = PermissionlessValidatorTxBuilder;
248
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeEJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3Blcm1pc3Npb25sZXNzVmFsaWRhdG9yVHhCdWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG1EQUE4RTtBQUU5RSx5RUFBc0U7QUFHdEUsMkNBUXFCO0FBQ3JCLG1DQUF5QztBQUV6QyxNQUFhLGdDQUFpQyxTQUFRLG1EQUF3QjtJQVM1RTs7T0FFRztJQUNILFlBQVksVUFBZ0M7UUFDMUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2xCLElBQUksQ0FBQyxPQUFPLEdBQUcsU0FBUyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxhQUFhLEdBQUcsU0FBUyxDQUFDO1FBQy9CLElBQUksQ0FBQyxhQUFhLEdBQUcsU0FBUyxDQUFDO1FBQy9CLElBQUksQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDO1FBQzVCLElBQUksQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFDO1FBQzFCLElBQUksQ0FBQyxZQUFZLEdBQUcsU0FBUyxDQUFDO1FBQzlCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxTQUFTLENBQUM7SUFDdEMsQ0FBQztJQUVEOzs7T0FHRztJQUNILElBQWMsZUFBZTtRQUMzQixPQUFPLDBCQUFlLENBQUMsMEJBQTBCLENBQUM7SUFDcEQsQ0FBQztJQUVEOzs7T0FHRztJQUNILE1BQU0sQ0FBQyxNQUFjO1FBQ25CLElBQUksQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNuQyxNQUFNLElBQUksZ0NBQXFCLENBQUMseUJBQXlCLENBQUMsQ0FBQztRQUM3RCxDQUFDO1FBQ0QsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7UUFDdEIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsWUFBWSxDQUFDLFlBQW9CO1FBQy9CLElB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SUFBSSxDQUFDLGFBQWE7Z0JBQ2hDLFlBQVksRUFBRSxJQUFJLENBQUMsYUFBYTtnQkFDaEMsU0FBUyxFQUFFLElBQUksQ0FBQyxVQUFVO2dCQUMxQixPQUFPLEVBQUUsSUFBSSxDQUFDLFFBQVE7Z0JBQ3RCLFdBQVcsRUFBRSxJQUFJLENBQUMsWUFBWTtnQkFDOUIsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLGtCQUFrQjtnQkFDMUMsYUFBYSxFQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUM7Z0JBQ2pDLGFBQWEsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWM7Z0JBQzlDLFNBQVMsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVU7Z0JBQ3RDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYTtnQkFDbEQsU0FBUyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxJQUFJLENBQUM7Z0JBQzNDLFFBQVEsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsSUFBSSxFQUFFO2FBQzNDLENBQUM7WUFFRixJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUMvQyxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE1BQU0sSUFBSSxnQ0FBcUIsQ0FDN0IseURBQ0UsS0FBSyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsZUFDM0MsRUFBRSxDQUNILENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBclJELDRFQXFSQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJ1aWxkVHJhbnNhY3Rpb25FcnJvciwgVHJhbnNhY3Rpb25UeXBlIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgQmFzZUNvaW4gYXMgQ29pbkNvbmZpZyB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IHsgQXRvbWljVHJhbnNhY3Rpb25CdWlsZGVyIH0gZnJvbSAnLi9hdG9taWNUcmFuc2FjdGlvbkJ1aWxkZXInO1xuaW1wb3J0IHsgVHggfSBmcm9tICcuL2lmYWNlJztcbmltcG9ydCB7IFBlcm1pc3Npb25sZXNzVmFsaWRhdG9yRXh0ZW5kZWRUcmFuc2FjdGlvbiB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHtcbiAgQUREX1BFUk1JU1NJT05MRVNTX1ZBTElEQVRPUl9UWVBFLFxuICBCQVNJU19QT0lOVFNfRElWSVNPUixcbiAgQkxTX1BVQkxJQ19LRVlfQ09NUFJFU1NFRF9MRU5HVEgsXG4gIEJMU19QVUJMSUNfS0VZX1VOQ09NUFJFU1NFRF9MRU5HVEgsXG4gIEJMU19TSUdOQVRVUkVfTEVOR1RILFxuICBNSU5fREVMRUdBVElPTl9GRUVfQkFTSVNfUE9JTlRTLFxuICBQRVJDRU5UQUdFX01VTFRJUExJRVIsXG59IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7IGNyZWF0ZUhleFJlZ2V4IH0gZnJvbSAnLi91dGlscyc7XG5cbmV4cG9ydCBjbGFzcyBQZXJtaXNzaW9ubGVzc1ZhbGlkYXRvclR4QnVpbGRlciBleHRlbmRzIEF0b21pY1RyYW5zYWN0aW9uQnVpbGRlciB7XG4gIHByb3RlY3RlZCBfbm9kZUlEOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHByb3RlY3RlZCBfYmxzUHVibGljS2V5OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHByb3RlY3RlZCBfYmxzU2lnbmF0dXJlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHByb3RlY3RlZCBfc3RhcnRUaW1lOiBiaWdpbnQgfCB1bmRlZmluZWQ7XG4gIHByb3RlY3RlZCBfZW5kVGltZTogYmlnaW50IHwgdW5kZWZpbmVkO1xuICBwcm90ZWN0ZWQgX3N0YWtlQW1vdW50OiBiaWdpbnQgfCB1bmRlZmluZWQ7XG4gIHByb3RlY3RlZCBfZGVsZWdhdGlvbkZlZVJhdGU6IG51bWJlciB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQHBhcmFtIGNvaW5Db25maWdcbiAgICovXG4gIGNvbnN0cnVjdG9yKGNvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KSB7XG4gICAgc3VwZXIoY29pbkNvbmZpZyk7XG4gICAgdGhpcy5fbm9kZUlEID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuX2Jsc1B1YmxpY0tleSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLl9ibHNTaWduYXR1cmUgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5fc3RhcnRUaW1lID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuX2VuZFRpbWUgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5fc3Rha2VBbW91bnQgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5fZGVsZWdhdGlvbkZlZVJhdGUgPSB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogZ2V0IHRyYW5zYWN0aW9uIHR5cGVcbiAgICogQHByb3RlY3RlZFxuICAgKi9cbiAgcHJvdGVjdGVkIGdldCB0cmFuc2FjdGlvblR5cGUoKTogVHJhbnNhY3Rpb25UeXBlIHtcbiAgICByZXR1cm4gVHJhbnNhY3Rpb25UeXBlLkFkZFBlcm1pc3Npb25sZXNzVmFsaWRhdG9yO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgbm9kZSBJRCBmb3IgcGVybWlzc2lvbmxlc3MgdmFsaWRhdGlvblxuICAgKiBAcGFyYW0gbm9kZUlEIC0gVGhlIG5vZGUgSURcbiAgICovXG4gIG5vZGVJRChub2RlSUQ6IHN0cmluZyk6IHRoaXMge1xuICAgIGlmICghbm9kZUlEIHx8IG5vZGVJRC5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ05vZGUgSUQgY2Fubm90IGJlIGVtcHR5Jyk7XG4gICAgfVxuICAgIHRoaXMuX25vZGVJRCA9IG5vZGVJRDtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIEJMUyBwdWJsaWMga2V5IGZvciBwZXJtaXNzaW9ubGVzcyB2YWxpZGF0aW9uXG4gICAqIEBwYXJhbSBibHNQdWJsaWNLZXkgLSBUaGUgQkxTIHB1YmxpYyBrZXlcbiAgICovXG4gIGJsc1B1YmxpY0tleShibHNQdWJsaWNLZXk6IHN0cmluZyk6IHRoaXMge1xuICAgIGlmICghYmxzUHVibGljS2V5IHx8IGJsc1B1YmxpY0tleS5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ0JMUyBwdWJsaWMga2V5IGNhbm5vdCBiZSBlbXB0eScpO1xuICAgIH1cblxuICAgIC8vIEJMUyBwdWJsaWMga2V5IHNob3VsZCBiZSA0OCBieXRlcyAoOTYgaGV4IGNoYXJhY3RlcnMpIHdpdGggMHggcHJlZml4IG9yIDE5MiBoZXggY2hhcmFjdGVycyB3aXRoIDB4IHByZWZpeCBmb3IgdW5jb21wcmVzc2VkXG4gICAgaWYgKFxuICAgICAgIWNyZWF0ZUhleFJlZ2V4KEJMU19QVUJMSUNfS0VZX0NPTVBSRVNTRURfTEVOR1RILCB0cnVlKS50ZXN0KGJsc1B1YmxpY0tleSkgJiZcbiAgICAgICFjcmVhdGVIZXhSZWdleChCTFNfUFVCTElDX0tFWV9VTkNPTVBSRVNTRURfTEVOR1RILCB0cnVlKS50ZXN0KGJsc1B1YmxpY0tleSlcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ0ludmFsaWQgQkxTIHB1YmxpYyBrZXkgZm9ybWF0Jyk7XG4gICAgfVxuXG4gICAgdGhpcy5fYmxzUHVibGljS2V5ID0gYmxzUHVibGljS2V5O1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgQkxTIHNpZ25hdHVyZSBmb3IgcGVybWlzc2lvbmxlc3MgdmFsaWRhdGlvblxuICAgKiBAcGFyYW0gYmxzU2lnbmF0dXJlIC0gVGhlIEJMUyBzaWduYXR1cmVcbiAgICovXG4gIGJsc1NpZ25hdHVyZShibHNTaWduYXR1cmU6IHN0cmluZyk6IHRoaXMge1xuICAgIGlmICghYmxzU2lnbmF0dXJlIHx8IGJsc1NpZ25hdHVyZS5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ0JMUyBzaWduYXR1cmUgY2Fubm90IGJlIGVtcHR5Jyk7XG4gICAgfVxuXG4gICAgLy8gQkxTIHNpZ25hdHVyZSBzaG91bGQgYmUgOTYgYnl0ZXMgKDE5MiBoZXggY2hhcmFjdGVycykgd2l0aCAweCBwcmVmaXhcbiAgICBpZiAoIWNyZWF0ZUhleFJlZ2V4KEJMU19TSUdOQVRVUkVfTEVOR1RILCB0cnVlKS50ZXN0KGJsc1NpZ25hdHVyZSkpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ0ludmFsaWQgQkxTIHNpZ25hdHVyZSBmb3JtYXQnKTtcbiAgICB9XG5cbiAgICB0aGlzLl9ibHNTaWduYXR1cmUgPSBibHNTaWduYXR1cmU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBzdGFydCB0aW1lIGZvciB2YWxpZGF0aW9uXG4gICAqIEBwYXJhbSBzdGFydFRpbWUgLSBVbml4IHRpbWVzdGFtcCBmb3Igd2hlbiB2YWxpZGF0aW9uIHN0YXJ0c1xuICAgKi9cbiAgc3RhcnRUaW1lKHN0YXJ0VGltZTogc3RyaW5nIHwgbnVtYmVyIHwgYmlnaW50KTogdGhpcyB7XG4gICAgY29uc3QgdGltZSA9IEJpZ0ludChzdGFydFRpbWUpO1xuICAgIGlmICh0aW1lIDwgMCkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignU3RhcnQgdGltZSBtdXN0IGJlIG5vbi1uZWdhdGl2ZScpO1xuICAgIH1cbiAgICB0aGlzLl9zdGFydFRpbWUgPSB0aW1lO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgZW5kIHRpbWUgZm9yIHZhbGlkYXRpb25cbiAgICogQHBhcmFtIGVuZFRpbWUgLSBVbml4IHRpbWVzdGFtcCBmb3Igd2hlbiB2YWxpZGF0aW9uIGVuZHNcbiAgICovXG4gIGVuZFRpbWUoZW5kVGltZTogc3RyaW5nIHwgbnVtYmVyIHwgYmlnaW50KTogdGhpcyB7XG4gICAgY29uc3QgdGltZSA9IEJpZ0ludChlbmRUaW1lKTtcbiAgICBpZiAodGltZSA8PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdFbmQgdGltZSBtdXN0IGJlIHBvc2l0aXZlJyk7XG4gICAgfVxuICAgIHRoaXMuX2VuZFRpbWUgPSB0aW1lO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgc3Rha2UgYW1vdW50IGZvciB2YWxpZGF0aW9uXG4gICAqIEBwYXJhbSBhbW91bnQgLSBBbW91bnQgdG8gc3Rha2UgKGluIG5GTFIpXG4gICAqL1xuICBzdGFrZUFtb3VudChhbW91bnQ6IHN0cmluZyB8IG51bWJlciB8IGJpZ2ludCk6IHRoaXMge1xuICAgIGNvbnN0IHN0YWtlID0gQmlnSW50KGFtb3VudCk7XG4gICAgaWYgKHN0YWtlIDw9IDApIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ1N0YWtlIGFtb3VudCBtdXN0IGJlIHBvc2l0aXZlJyk7XG4gICAgfVxuICAgIHRoaXMuX3N0YWtlQW1vdW50ID0gc3Rha2U7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBkZWxlZ2F0aW9uIGZlZSByYXRlXG4gICAqIEBwYXJhbSB2YWx1ZSAtIERlbGVnYXRpb24gZmVlIHJhdGUgaW4gYmFzaXMgcG9pbnRzXG4gICAqL1xuICBkZWxlZ2F0aW9uRmVlUmF0ZSh2YWx1ZTogbnVtYmVyKTogdGhpcyB7XG4gICAgdGhpcy52YWxpZGF0ZURlbGVnYXRpb25GZWVSYXRlKHZhbHVlKTtcbiAgICB0aGlzLl9kZWxlZ2F0aW9uRmVlUmF0ZSA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCByZXdhcmQgYWRkcmVzc2VzIHdoZXJlIHZhbGlkYXRpb24gcmV3YXJkcyBzaG91bGQgYmUgc2VudFxuICAgKiBAcGFyYW0gYWRkcmVzc2VzIC0gQXJyYXkgb2YgcmV3YXJkIGFkZHJlc3Nlc1xuICAgKi9cbiAgcmV3YXJkQWRkcmVzc2VzKGFkZHJlc3Nlczogc3RyaW5nW10pOiB0aGlzIHtcbiAgICBpZiAoIWFkZHJlc3NlcyB8fCBhZGRyZXNzZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdBdCBsZWFzdCBvbmUgcmV3YXJkIGFkZHJlc3MgaXMgcmVxdWlyZWQnKTtcbiAgICB9XG4gICAgLy8gU3RvcmUgcmV3YXJkIGFkZHJlc3NlcyBpbiB0aGUgdHJhbnNhY3Rpb24gKHdlJ2xsIG5lZWQgdG8gZXh0ZW5kIHRoZSB0eXBlKVxuICAgICh0aGlzLnRyYW5zYWN0aW9uIGFzIHVua25vd24gYXMgUGVybWlzc2lvbmxlc3NWYWxpZGF0b3JFeHRlbmRlZFRyYW5zYWN0aW9uKS5fcmV3YXJkQWRkcmVzc2VzID0gYWRkcmVzc2VzO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIHRoYXQgdGhlIGRlbGVnYXRpb24gZmVlIGlzIGF0IGxlYXN0IHRoZSBtaW5EZWxlZ2F0aW9uRmVlXG4gICAqIEBwYXJhbSBkZWxlZ2F0aW9uRmVlUmF0ZSBudW1iZXJcbiAgICovXG4gIHZhbGlkYXRlRGVsZWdhdGlvbkZlZVJhdGUoZGVsZWdhdGlvbkZlZVJhdGU6IG51bWJlcik6IHZvaWQge1xuICAgIC8vIEZvciBGbGFyZSwgdXNlIGEgbWluaW11bSBkZWxlZ2F0aW9uIGZlZSBvZiAyJSAoMjAwMDAgYmFzaXMgcG9pbnRzKVxuICAgIGNvbnN0IG1pbkRlbGVnYXRpb25GZWUgPSBNSU5fREVMRUdBVElPTl9GRUVfQkFTSVNfUE9JTlRTO1xuICAgIGlmIChkZWxlZ2F0aW9uRmVlUmF0ZSA8IG1pbkRlbGVnYXRpb25GZWUpIHtcbiAgICAgIGNvbnN0IG1pbkRlbGVnYXRpb25GZWVQZXJjZW50ID0gKG1pbkRlbGVnYXRpb25GZWUgLyBCQVNJU19QT0lOVFNfRElWSVNPUikgKiBQRVJDRU5UQUdFX01VTFRJUExJRVI7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKFxuICAgICAgICBgRGVsZWdhdGlvbiBmZWUgY2Fubm90IGJlIGxlc3MgdGhhbiAke21pbkRlbGVnYXRpb25GZWV9IGJhc2lzIHBvaW50cyAoJHttaW5EZWxlZ2F0aW9uRmVlUGVyY2VudH0lKWBcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGluaXRCdWlsZGVyKHR4OiBUeCk6IHRoaXMge1xuICAgIC8vIEV4dHJhY3QgcGVybWlzc2lvbmxlc3MgdmFsaWRhdG9yLXNwZWNpZmljIGZpZWxkcyBmcm9tIHRyYW5zYWN0aW9uXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBjb25zdCB0eERhdGEgPSB0eCBhcyBhbnk7XG5cbiAgICBpZiAodHhEYXRhLm5vZGVJRCkge1xuICAgICAgdGhpcy5fbm9kZUlEID0gdHhEYXRhLm5vZGVJRDtcbiAgICB9XG4gICAgaWYgKHR4RGF0YS5ibHNQdWJsaWNLZXkpIHtcbiAgICAgIHRoaXMuX2Jsc1B1YmxpY0tleSA9IHR4RGF0YS5ibHNQdWJsaWNLZXk7XG4gICAgfVxuICAgIGlmICh0eERhdGEuYmxzU2lnbmF0dXJlKSB7XG4gICAgICB0aGlzLl9ibHNTaWduYXR1cmUgPSB0eERhdGEuYmxzU2lnbmF0dXJlO1xuICAgIH1cbiAgICBpZiAodHhEYXRhLnN0YXJ0VGltZSkge1xuICAgICAgdGhpcy5fc3RhcnRUaW1lID0gQmlnSW50KHR4RGF0YS5zdGFydFRpbWUpO1xuICAgIH1cbiAgICBpZiAodHhEYXRhLmVuZFRpbWUpIHtcbiAgICAgIHRoaXMuX2VuZFRpbWUgPSBCaWdJbnQodHhEYXRhLmVuZFRpbWUpO1xuICAgIH1cbiAgICBpZiAodHhEYXRhLnN0YWtlQW1vdW50KSB7XG4gICAgICB0aGlzLl9zdGFrZUFtb3VudCA9IEJpZ0ludCh0eERhdGEuc3Rha2VBbW91bnQpO1xuICAgIH1cbiAgICBpZiAodHhEYXRhLmRlbGVnYXRpb25GZWVSYXRlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuX2RlbGVnYXRpb25GZWVSYXRlID0gdHhEYXRhLmRlbGVnYXRpb25GZWVSYXRlO1xuICAgIH1cbiAgICBpZiAodHhEYXRhLnJld2FyZEFkZHJlc3Nlcykge1xuICAgICAgKHRoaXMudHJhbnNhY3Rpb24gYXMgdW5rbm93biBhcyBQZXJtaXNzaW9ubGVzc1ZhbGlkYXRvckV4dGVuZGVkVHJhbnNhY3Rpb24pLl9yZXdhcmRBZGRyZXNzZXMgPVxuICAgICAgICB0eERhdGEucmV3YXJkQWRkcmVzc2VzO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmeSBpZiB0aGUgdHJhbnNhY3Rpb24gaXMgYSBwZXJtaXNzaW9ubGVzcyB2YWxpZGF0b3IgdHJhbnNhY3Rpb25cbiAgICogQHBhcmFtIHR4XG4gICAqL1xuICBzdGF0aWMgdmVyaWZ5VHhUeXBlKHR4OiB1bmtub3duKTogYm9vbGVhbiB7XG4gICAgLy8gQ2hlY2sgaWYgdHJhbnNhY3Rpb24gaGFzIHBlcm1pc3Npb25sZXNzIHZhbGlkYXRvci1zcGVjaWZpYyBwcm9wZXJ0aWVzXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBjb25zdCB0eERhdGEgPSB0eCBhcyBhbnk7XG4gICAgcmV0dXJuIHR4RGF0YSAmJiB0eERhdGEuYmxzUHVibGljS2V5ICYmIHR4RGF0YS5ibHNTaWduYXR1cmU7XG4gIH1cblxuICB2ZXJpZnlUeFR5cGUodHg6IHVua25vd24pOiBib29sZWFuIHtcbiAgICByZXR1cm4gUGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeEJ1aWxkZXIudmVyaWZ5VHhUeXBlKHR4KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCB0aGUgcGVybWlzc2lvbmxlc3MgdmFsaWRhdG9yIHRyYW5zYWN0aW9uXG4gICAqIEBwcm90ZWN0ZWRcbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyBidWlsZEZsYXJlVHJhbnNhY3Rpb24oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gQmFzaWMgdmFsaWRhdGlvblxuICAgIGlmICghdGhpcy5fbm9kZUlEKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdOb2RlIElEIGlzIHJlcXVpcmVkIGZvciBwZXJtaXNzaW9ubGVzcyB2YWxpZGF0b3IgdHJhbnNhY3Rpb24nKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLl9ibHNQdWJsaWNLZXkpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ0JMUyBwdWJsaWMga2V5IGlzIHJlcXVpcmVkIGZvciBwZXJtaXNzaW9ubGVzcyB2YWxpZGF0b3IgdHJhbnNhY3Rpb24nKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLl9ibHNTaWduYXR1cmUpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ0JMUyBzaWduYXR1cmUgaXMgcmVxdWlyZWQgZm9yIHBlcm1pc3Npb25sZXNzIHZhbGlkYXRvciB0cmFuc2FjdGlvbicpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuX3N0YXJ0VGltZSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignU3RhcnQgdGltZSBpcyByZXF1aXJlZCBmb3IgcGVybWlzc2lvbmxlc3MgdmFsaWRhdG9yIHRyYW5zYWN0aW9uJyk7XG4gICAgfVxuICAgIGlmICghdGhpcy5fZW5kVGltZSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignRW5kIHRpbWUgaXMgcmVxdWlyZWQgZm9yIHBlcm1pc3Npb25sZXNzIHZhbGlkYXRvciB0cmFuc2FjdGlvbicpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuX3N0YWtlQW1vdW50KSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdTdGFrZSBhbW91bnQgaXMgcmVxdWlyZWQgZm9yIHBlcm1pc3Npb25sZXNzIHZhbGlkYXRvciB0cmFuc2FjdGlvbicpO1xuICAgIH1cbiAgICBpZiAodGhpcy5fZGVsZWdhdGlvbkZlZVJhdGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignRGVsZWdhdGlvbiBmZWUgcmF0ZSBpcyByZXF1aXJlZCBmb3IgcGVybWlzc2lvbmxlc3MgdmFsaWRhdG9yIHRyYW5zYWN0aW9uJyk7XG4gICAgfVxuXG4gICAgY29uc3QgcmV3YXJkQWRkcmVzc2VzID0gKHRoaXMudHJhbnNhY3Rpb24gYXMgdW5rbm93biBhcyBQZXJtaXNzaW9ubGVzc1ZhbGlkYXRvckV4dGVuZGVkVHJhbnNhY3Rpb24pXG4gICAgICAuX3Jld2FyZEFkZHJlc3NlcztcbiAgICBpZiAoIXJld2FyZEFkZHJlc3NlcyB8fCByZXdhcmRBZGRyZXNzZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdSZXdhcmQgYWRkcmVzc2VzIGFyZSByZXF1aXJlZCBmb3IgcGVybWlzc2lvbmxlc3MgdmFsaWRhdG9yIHRyYW5zYWN0aW9uJyk7XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgdGltZSByYW5nZVxuICAgIGlmICh0aGlzLl9lbmRUaW1lIDw9IHRoaXMuX3N0YXJ0VGltZSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignRW5kIHRpbWUgbXVzdCBiZSBhZnRlciBzdGFydCB0aW1lJyk7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIC8vIFRPRE86IEltcGxlbWVudCBhY3R1YWwgRmxhcmVKUyBQVk0gQVBJIGNhbGwgd2hlbiBhdmFpbGFibGVcbiAgICAgIC8vIEZvciBub3csIGNyZWF0ZSBhIHBsYWNlaG9sZGVyIHRyYW5zYWN0aW9uIHN0cnVjdHVyZVxuICAgICAgY29uc3QgdmFsaWRhdG9yVHggPSB7XG4gICAgICAgIHR5cGU6IEFERF9QRVJNSVNTSU9OTEVTU19WQUxJREFUT1JfVFlQRSxcbiAgICAgICAgbm9kZUlEOiB0aGlzLl9ub2RlSUQsXG4gICAgICAgIGJsc1B1YmxpY0tleTogdGhpcy5fYmxzUHVibGljS2V5LFxuICAgICAgICBibHNTaWduYXR1cmU6IHRoaXMuX2Jsc1NpZ25hdHVyZSxcbiAgICAgICAgc3RhcnRUaW1lOiB0aGlzLl9zdGFydFRpbWUsXG4gICAgICAgIGVuZFRpbWU6IHRoaXMuX2VuZFRpbWUsXG4gICAgICAgIHN0YWtlQW1vdW50OiB0aGlzLl9zdGFrZUFtb3VudCxcbiAgICAgICAgZGVsZWdhdGlvbkZlZVJhdGU6IHRoaXMuX2RlbGVnYXRpb25GZWVSYXRlLFxuICAgICAgICByZXdhcmRBZGRyZXNzOiByZXdhcmRBZGRyZXNzZXNbMF0sXG4gICAgICAgIGZyb21BZGRyZXNzZXM6IHRoaXMudHJhbnNhY3Rpb24uX2Zyb21BZGRyZXNzZXMsXG4gICAgICAgIG5ldHdvcmtJZDogdGhpcy50cmFuc2FjdGlvbi5fbmV0d29ya0lELFxuICAgICAgICBzb3VyY2VCbG9ja2NoYWluSWQ6IHRoaXMudHJhbnNhY3Rpb24uX2Jsb2NrY2hhaW5JRCxcbiAgICAgICAgdGhyZXNob2xkOiB0aGlzLnRyYW5zYWN0aW9uLl90aHJlc2hvbGQgfHwgMSxcbiAgICAgICAgbG9ja3RpbWU6IHRoaXMudHJhbnNhY3Rpb24uX2xvY2t0aW1lIHx8IDBuLFxuICAgICAgfTtcblxuICAgICAgdGhpcy50cmFuc2FjdGlvbi5zZXRUcmFuc2FjdGlvbih2YWxpZGF0b3JUeCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoXG4gICAgICAgIGBGYWlsZWQgdG8gYnVpbGQgcGVybWlzc2lvbmxlc3MgdmFsaWRhdG9yIHRyYW5zYWN0aW9uOiAke1xuICAgICAgICAgIGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InXG4gICAgICAgIH1gXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuIl19
134
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeEJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3Blcm1pc3Npb25sZXNzVmFsaWRhdG9yVHhCdWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLG1EQUF5RTtBQUN6RSxtREFBd0g7QUFLeEgsNkRBQTBEO0FBQzFELG9EQUE0QjtBQUU1QixNQUFhLGdDQUFpQyxTQUFRLHVDQUFrQjtJQVd0RSxZQUFZLFVBQWdDO1FBQzFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztRQVhiLFlBQU8sR0FBYyxFQUFFLENBQUM7UUFPckIsa0JBQWEsR0FBRyxLQUFLLENBQUM7UUFLOUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztJQUM5RCxDQUFDO0lBRUQsSUFBYyxlQUFlO1FBQzNCLE9BQU8sMEJBQWUsQ0FBQywwQkFBMEIsQ0FBQztJQUNwRCxDQUFDO0lBRUQscUJBQXFCO0lBQ3JCLGdCQUFnQixDQUFDLFFBQWdCO1FBQy9CLElBQUksUUFBUSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3pCLE1BQU0sSUFBSSxnQ0FBcUIsQ0FBQyxtREFBbUQsQ0FBQyxDQUFDO1FBQ3ZGLENBQUM7SUFDSCxDQUFDO0lBRUQseUJBQXlCLENBQUMsaUJBQXlCO1FBQ2pELElBQUksaUJBQWlCLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQztZQUMzRSxNQUFNLElBQUksZ0NBQXFCLENBQzdCLHNDQUFzQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRSxDQUNuRixDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7SUFFRCxZQUFZLENBQUMsS0FBcUI7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QixDQUFDO0lBRUQ7OztPQUdHO0lBQ08scUJBQXFCO1FBQzdCLE1BQU0sSUFBSSxLQUFLLENBQUMseUJBQXlCLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQsTUFBTSxDQUFDLFlBQVksQ0FBQyxJQUFpQjtRQUNuQyxPQUFPLElBQUksS0FBSyxxQkFBVyxDQUFDLDRCQUE0QixDQUFDO0lBQzNELENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsSUFBYyxXQUFXO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztJQUMzQixDQUFDO0lBRUQsSUFBYyxXQUFXLENBQUMsV0FBd0I7UUFDaEQsSUFBSSxDQUFDLFlBQVksR0FBRyxXQUFXLENBQUM7SUFDbEMsQ0FBQztDQUNGO0FBdkpELDRFQXVKQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHV0aWxzIGFzIEZsYXJlVXRpbHMsIFR5cGVTeW1ib2xzIH0gZnJvbSAnQGZsYXJlbmV0d29yay9mbGFyZWpzJztcbmltcG9ydCB7IEJ1aWxkVHJhbnNhY3Rpb25FcnJvciwgaXNWYWxpZEJMU1B1YmxpY0tleSwgaXNWYWxpZEJMU1NpZ25hdHVyZSwgVHJhbnNhY3Rpb25UeXBlIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgQmFzZUNvaW4gYXMgQ29pbkNvbmZpZyB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IHsgRGVjb2RlZFV0eG9PYmogfSBmcm9tICcuL2lmYWNlJztcbmltcG9ydCB7IEtleVBhaXIgfSBmcm9tICcuL2tleVBhaXInO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb24gfSBmcm9tICcuL3RyYW5zYWN0aW9uJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uQnVpbGRlciB9IGZyb20gJy4vdHJhbnNhY3Rpb25CdWlsZGVyJztcbmltcG9ydCB1dGlscyBmcm9tICcuL3V0aWxzJztcblxuZXhwb3J0IGNsYXNzIFBlcm1pc3Npb25sZXNzVmFsaWRhdG9yVHhCdWlsZGVyIGV4dGVuZHMgVHJhbnNhY3Rpb25CdWlsZGVyIHtcbiAgcHVibGljIF9zaWduZXI6IEtleVBhaXJbXSA9IFtdO1xuICBwcm90ZWN0ZWQgX25vZGVJRDogc3RyaW5nO1xuICBwcm90ZWN0ZWQgX2Jsc1B1YmxpY0tleTogc3RyaW5nO1xuICBwcm90ZWN0ZWQgX2Jsc1NpZ25hdHVyZTogc3RyaW5nO1xuICBwcm90ZWN0ZWQgX3N0YXJ0VGltZTogYmlnaW50O1xuICBwcm90ZWN0ZWQgX2VuZFRpbWU6IGJpZ2ludDtcbiAgcHJvdGVjdGVkIF9zdGFrZUFtb3VudDogYmlnaW50O1xuICBwcm90ZWN0ZWQgcmVjb3ZlclNpZ25lciA9IGZhbHNlO1xuICBwcm90ZWN0ZWQgX2RlbGVnYXRpb25GZWVSYXRlOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IoY29pbkNvbmZpZzogUmVhZG9ubHk8Q29pbkNvbmZpZz4pIHtcbiAgICBzdXBlcihjb2luQ29uZmlnKTtcbiAgICB0aGlzLnRyYW5zYWN0aW9uLl9mZWUuZmVlID0gdGhpcy50cmFuc2FjdGlvbi5fbmV0d29yay50eEZlZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQgdHJhbnNhY3Rpb25UeXBlKCk6IFRyYW5zYWN0aW9uVHlwZSB7XG4gICAgcmV0dXJuIFRyYW5zYWN0aW9uVHlwZS5BZGRQZXJtaXNzaW9ubGVzc1ZhbGlkYXRvcjtcbiAgfVxuXG4gIC8vIFZhbGlkYXRpb24gbWV0aG9kc1xuICB2YWxpZGF0ZUxvY2t0aW1lKGxvY2t0aW1lOiBiaWdpbnQpOiB2b2lkIHtcbiAgICBpZiAobG9ja3RpbWUgPCBCaWdJbnQoMCkpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ0ludmFsaWQgdHJhbnNhY3Rpb246IGxvY2t0aW1lIG11c3QgYmUgMCBvciBoaWdoZXInKTtcbiAgICB9XG4gIH1cblxuICB2YWxpZGF0ZURlbGVnYXRpb25GZWVSYXRlKGRlbGVnYXRpb25GZWVSYXRlOiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAoZGVsZWdhdGlvbkZlZVJhdGUgPCBOdW1iZXIodGhpcy50cmFuc2FjdGlvbi5fbmV0d29yay5taW5EZWxlZ2F0aW9uRmVlKSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcihcbiAgICAgICAgYERlbGVnYXRpb24gZmVlIGNhbm5vdCBiZSBsZXNzIHRoYW4gJHt0aGlzLnRyYW5zYWN0aW9uLl9uZXR3b3JrLm1pbkRlbGVnYXRpb25GZWV9YFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICB2YWxpZGF0ZVV0eG8odmFsdWU6IERlY29kZWRVdHhvT2JqKTogdm9pZCB7XG4gICAgWydvdXRwdXRJRCcsICdhbW91bnQnLCAndHhpZCcsICdvdXRwdXRpZHgnXS5mb3JFYWNoKChmaWVsZCkgPT4ge1xuICAgICAgaWYgKCF2YWx1ZS5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoYFV0eG9zIHJlcXVpcmVkICR7ZmllbGR9YCk7XG4gICAgfSk7XG4gIH1cblxuICB2YWxpZGF0ZU5vZGVJRChub2RlSUQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghbm9kZUlEKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdJbnZhbGlkIHRyYW5zYWN0aW9uOiBtaXNzaW5nIG5vZGVJRCcpO1xuICAgIH1cbiAgICBpZiAobm9kZUlELnNsaWNlKDAsIDYpICE9PSAnTm9kZUlEJykge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignSW52YWxpZCB0cmFuc2FjdGlvbjogaW52YWxpZCBOb2RlSUQgdGFnJyk7XG4gICAgfVxuICAgIGlmICghKEZsYXJlVXRpbHMuYmFzZTU4LmRlY29kZShub2RlSUQuc2xpY2UoNykpLmxlbmd0aCA9PT0gMjQpKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdJbnZhbGlkIHRyYW5zYWN0aW9uOiBOb2RlSUQgaXMgbm90IGluIGNiNTggZm9ybWF0Jyk7XG4gICAgfVxuICB9XG5cbiAgdmFsaWRhdGVTdGFrZUR1cmF0aW9uKHN0YXJ0VGltZTogYmlnaW50LCBlbmRUaW1lOiBiaWdpbnQpOiB2b2lkIHtcbiAgICBpZiAoZW5kVGltZSA8IHN0YXJ0VGltZSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignRW5kIGRhdGUgY2Fubm90IGJlIGxlc3MgdGhhbiBzdGFydCBkYXRlJyk7XG4gICAgfVxuICB9XG5cbiAgdmFsaWRhdGVTdGFrZUFtb3VudChhbW91bnQ6IGJpZ2ludCk6IHZvaWQge1xuICAgIGNvbnN0IG1pblN0YWtlID0gQmlnSW50KHRoaXMudHJhbnNhY3Rpb24uX25ldHdvcmsubWluU3Rha2UpO1xuICAgIGlmIChhbW91bnQgPCBtaW5TdGFrZSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignTWluaW11bSBzdGFraW5nIGFtb3VudCBpcyAnICsgTnVtYmVyKG1pblN0YWtlKSAvIDEwMDAwMDAwMDAgKyAnIEZMUi4nKTtcbiAgICB9XG4gIH1cblxuICAvLyBCdWlsZGVyIG1ldGhvZHNcbiAgcmV3YXJkQWRkcmVzc2VzKGFkZHJlc3M6IHN0cmluZyB8IHN0cmluZ1tdKTogdGhpcyB7XG4gICAgY29uc3QgcmV3YXJkQWRkcmVzc2VzID0gYWRkcmVzcyBpbnN0YW5jZW9mIEFycmF5ID8gYWRkcmVzcyA6IFthZGRyZXNzXTtcbiAgICB0aGlzLnRyYW5zYWN0aW9uLl9yZXdhcmRBZGRyZXNzZXMgPSByZXdhcmRBZGRyZXNzZXMubWFwKHV0aWxzLnBhcnNlQWRkcmVzcyk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBub2RlSUQobm9kZUlEOiBzdHJpbmcpOiB0aGlzIHtcbiAgICB0aGlzLnZhbGlkYXRlTm9kZUlEKG5vZGVJRCk7XG4gICAgdGhpcy5fbm9kZUlEID0gbm9kZUlEO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgYmxzUHVibGljS2V5KGJsc1B1YmxpY0tleTogc3RyaW5nKTogdGhpcyB7XG4gICAgaXNWYWxpZEJMU1B1YmxpY0tleShibHNQdWJsaWNLZXkpO1xuICAgIHRoaXMuX2Jsc1B1YmxpY0tleSA9IGJsc1B1YmxpY0tleTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGJsc1NpZ25hdHVyZShibHNTaWduYXR1cmU6IHN0cmluZyk6IHRoaXMge1xuICAgIGlzVmFsaWRCTFNTaWduYXR1cmUoYmxzU2lnbmF0dXJlKTtcbiAgICB0aGlzLl9ibHNTaWduYXR1cmUgPSBibHNTaWduYXR1cmU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBsb2NrdGltZSh2YWx1ZTogc3RyaW5nIHwgbnVtYmVyKTogdGhpcyB7XG4gICAgdGhpcy52YWxpZGF0ZUxvY2t0aW1lKEJpZ0ludCh2YWx1ZSkpO1xuICAgIHRoaXMuX3RyYW5zYWN0aW9uLl9sb2NrdGltZSA9IEJpZ0ludCh2YWx1ZSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBkZWxlZ2F0aW9uRmVlUmF0ZSh2YWx1ZTogbnVtYmVyKTogdGhpcyB7XG4gICAgdGhpcy52YWxpZGF0ZURlbGVnYXRpb25GZWVSYXRlKHZhbHVlKTtcbiAgICB0aGlzLl9kZWxlZ2F0aW9uRmVlUmF0ZSA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgc3RhcnRUaW1lKHZhbHVlOiBzdHJpbmcgfCBudW1iZXIpOiB0aGlzIHtcbiAgICB0aGlzLl9zdGFydFRpbWUgPSBCaWdJbnQodmFsdWUpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgZW5kVGltZSh2YWx1ZTogc3RyaW5nIHwgbnVtYmVyKTogdGhpcyB7XG4gICAgdGhpcy5fZW5kVGltZSA9IEJpZ0ludCh2YWx1ZSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBzdGFrZUFtb3VudCh2YWx1ZTogYmlnaW50IHwgc3RyaW5nKTogdGhpcyB7XG4gICAgY29uc3QgdmFsdWVCaWdJbnQgPSB0eXBlb2YgdmFsdWUgPT09ICdiaWdpbnQnID8gdmFsdWUgOiBCaWdJbnQodmFsdWUpO1xuICAgIHRoaXMudmFsaWRhdGVTdGFrZUFtb3VudCh2YWx1ZUJpZ0ludCk7XG4gICAgdGhpcy5fc3Rha2VBbW91bnQgPSB2YWx1ZUJpZ0ludDtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBidWlsZEltcGxlbWVudGF0aW9uKCk6IFByb21pc2U8VHJhbnNhY3Rpb24+IHtcbiAgICB0aGlzLmJ1aWxkRmxhcmVUcmFuc2FjdGlvbigpO1xuICAgIHRoaXMudHJhbnNhY3Rpb24uc2V0VHJhbnNhY3Rpb25UeXBlKHRoaXMudHJhbnNhY3Rpb25UeXBlKTtcbiAgICBpZiAodGhpcy5oYXNTaWduZXIoKSkge1xuICAgICAgZm9yIChjb25zdCBrZXlQYWlyIG9mIHRoaXMuX3NpZ25lcikge1xuICAgICAgICBhd2FpdCB0aGlzLnRyYW5zYWN0aW9uLnNpZ24oa2V5UGFpcik7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnRyYW5zYWN0aW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIHRoZSBwZXJtaXNzaW9ubGVzcyB2YWxpZGF0b3IgdHJhbnNhY3Rpb25cbiAgICogQHByb3RlY3RlZFxuICAgKi9cbiAgcHJvdGVjdGVkIGJ1aWxkRmxhcmVUcmFuc2FjdGlvbigpOiB2b2lkIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQuJyk7XG4gIH1cblxuICBzdGF0aWMgdmVyaWZ5VHhUeXBlKHR5cGU6IFR5cGVTeW1ib2xzKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHR5cGUgPT09IFR5cGVTeW1ib2xzLkFkZFBlcm1pc3Npb25sZXNzVmFsaWRhdG9yVHg7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHJvdGVjdGVkIGdldCB0cmFuc2FjdGlvbigpOiBUcmFuc2FjdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuX3RyYW5zYWN0aW9uO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNldCB0cmFuc2FjdGlvbih0cmFuc2FjdGlvbjogVHJhbnNhY3Rpb24pIHtcbiAgICB0aGlzLl90cmFuc2FjdGlvbiA9IHRyYW5zYWN0aW9uO1xuICB9XG59XG4iXX0=
@@ -1,15 +1,11 @@
1
- import { UnsignedTx, Credential } from '@flarenetwork/flarejs';
2
- import { BaseKey, BaseTransaction, Entry, TransactionFee, TransactionType } from '@bitgo-beta/sdk-core';
3
1
  import { FlareNetwork, BaseCoin as CoinConfig } from '@bitgo-beta/statics';
2
+ import { BaseKey, BaseTransaction, Entry, TransactionType, TransactionFee } from '@bitgo-beta/sdk-core';
3
+ import { Credential, pvmSerial, UnsignedTx } from '@flarenetwork/flarejs';
4
4
  import { Buffer } from 'buffer';
5
- import { DecodedUtxoObj, TransactionExplanation, Tx, TxData, FlrpEntry } from './iface';
5
+ import { DecodedUtxoObj, TransactionExplanation, Tx, TxData } from './iface';
6
6
  import { KeyPair } from './keyPair';
7
- /**
8
- * Flare P-chain transaction implementation using FlareJS
9
- * Based on AVAX transaction patterns adapted for Flare network
10
- */
11
7
  export declare class Transaction extends BaseTransaction {
12
- protected _flareTransaction: Tx;
8
+ protected _flareTransaction: pvmSerial.BaseTx | UnsignedTx;
13
9
  _type: TransactionType;
14
10
  _network: FlareNetwork;
15
11
  _networkID: number;
@@ -21,91 +17,29 @@ export declare class Transaction extends BaseTransaction {
21
17
  _stakeAmount: bigint;
22
18
  _threshold: number;
23
19
  _locktime: bigint;
24
- _fromAddresses: string[];
25
- _rewardAddresses: string[];
20
+ _fromAddresses: Uint8Array[];
21
+ _to: Uint8Array[];
22
+ _rewardAddresses: Uint8Array[];
26
23
  _utxos: DecodedUtxoObj[];
27
- _to: string[];
28
24
  _fee: Partial<TransactionFee>;
29
- _blsPublicKey: string;
30
- _blsSignature: string;
31
- _memo: Uint8Array;
32
25
  constructor(coinConfig: Readonly<CoinConfig>);
33
- /**
34
- * Get the base transaction from FlareJS UnsignedTx
35
- * TODO: Implement proper FlareJS transaction extraction
36
- */
37
- get flareTransaction(): UnsignedTx;
38
26
  get signature(): string[];
39
27
  get credentials(): Credential[];
40
28
  get hasCredentials(): boolean;
41
29
  /** @inheritdoc */
42
30
  canSign({ key }: BaseKey): boolean;
43
- /**
44
- * Sign a Flare transaction using FlareJS
45
- * @param {KeyPair} keyPair
46
- */
47
31
  sign(keyPair: KeyPair): Promise<void>;
48
- /**
49
- * Set memo from string
50
- * @param {string} memo - Memo text
51
- */
52
- setMemo(memo: string): void;
53
- /**
54
- * Set memo from various formats
55
- * @param {string | Record<string, unknown> | Uint8Array} memo - Memo data
56
- */
57
- setMemoData(memo: string | Record<string, unknown> | Uint8Array): void;
58
- /**
59
- * Get memo as bytes (FlareJS format)
60
- * @returns {Uint8Array} Memo bytes
61
- */
62
- getMemoBytes(): Uint8Array;
63
- /**
64
- * Get memo as string
65
- * @returns {string} Memo string
66
- */
67
- getMemoString(): string;
68
- /**
69
- * Check if transaction has memo
70
- * @returns {boolean} Whether memo exists and is not empty
71
- */
72
- hasMemo(): boolean;
73
- toHexString(byteArray: Uint8Array): string;
74
- /** @inheritdoc */
75
32
  toBroadcastFormat(): string;
76
33
  toJson(): TxData;
77
34
  setTransaction(tx: Tx): void;
78
- /**
79
- * Set the transaction type
80
- * @param {TransactionType} transactionType The transaction type to be set
81
- */
82
35
  setTransactionType(transactionType: TransactionType): void;
83
- /**
84
- * Returns the portion of the transaction that needs to be signed in Buffer format.
85
- * Only needed for coins that support adding signatures directly (e.g. TSS).
86
- */
87
36
  get signablePayload(): Buffer;
88
37
  get id(): string;
89
38
  get fromAddresses(): string[];
90
39
  get rewardAddresses(): string[];
91
- /**
92
- * Get the list of outputs. Amounts are expressed in absolute value.
93
- */
94
- get outputs(): Entry[];
95
40
  get fee(): TransactionFee;
41
+ get outputs(): Entry[];
96
42
  get changeOutputs(): Entry[];
97
- get inputs(): FlrpEntry[];
98
- /**
99
- * Flare wrapper to create signature and return it for credentials
100
- * @param prv
101
- * @return hexstring
102
- */
103
- createSignature(prv: Buffer): string;
104
- /**
105
- * Check if transaction is for C-chain (cross-chain)
106
- */
107
- get isTransactionForCChain(): boolean;
108
- /** @inheritdoc */
109
43
  explainTransaction(): TransactionExplanation;
110
44
  }
111
45
  //# sourceMappingURL=transaction.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../../../src/lib/transaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EACL,OAAO,EACP,eAAe,EACf,KAAK,EAGL,cAAc,EACd,eAAe,EAChB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,YAAY,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC3E,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAEL,cAAc,EAEd,sBAAsB,EACtB,EAAE,EACF,MAAM,EACN,SAAS,EACV,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgBpC;;;GAGG;AACH,qBAAa,WAAY,SAAQ,eAAe;IAC9C,SAAS,CAAC,iBAAiB,EAAE,EAAE,CAAC;IACzB,KAAK,EAAE,eAAe,CAAC;IACvB,QAAQ,EAAE,YAAY,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,SAAK;IACf,SAAS,SAAa;IACtB,cAAc,EAAE,MAAM,EAAE,CAAM;IAC9B,gBAAgB,EAAE,MAAM,EAAE,CAAM;IAChC,MAAM,EAAE,cAAc,EAAE,CAAM;IAC9B,GAAG,EAAE,MAAM,EAAE,CAAC;IACd,IAAI,EAAE,OAAO,CAAC,cAAc,CAAC,CAAM;IACnC,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,UAAU,CAAoB;gBAEhC,UAAU,EAAE,QAAQ,CAAC,UAAU,CAAC;IAQ5C;;;OAGG;IACH,IAAI,gBAAgB,IAAI,UAAU,CAEjC;IAED,IAAI,SAAS,IAAI,MAAM,EAAE,CAOxB;IAED,IAAI,WAAW,IAAI,UAAU,EAAE,CAI9B;IAED,IAAI,cAAc,IAAI,OAAO,CAE5B;IAED,kBAAkB;IAClB,OAAO,CAAC,EAAE,GAAG,EAAE,EAAE,OAAO,GAAG,OAAO;IAKlC;;;OAGG;IACG,IAAI,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAwB3C;;;OAGG;IACH,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAI3B;;;OAGG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,UAAU,GAAG,IAAI;IAItE;;;OAGG;IACH,YAAY,IAAI,UAAU;IAI1B;;;OAGG;IACH,aAAa,IAAI,MAAM;IAIvB;;;OAGG;IACH,OAAO,IAAI,OAAO;IAIlB,WAAW,CAAC,SAAS,EAAE,UAAU,GAAG,MAAM;IAI1C,kBAAkB;IAClB,iBAAiB,IAAI,MAAM;IAU3B,MAAM,IAAI,MAAM;IAqBhB,cAAc,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI;IAI5B;;;OAGG;IACH,kBAAkB,CAAC,eAAe,EAAE,eAAe,GAAG,IAAI;IAgB1D;;;OAGG;IACH,IAAI,eAAe,IAAI,MAAM,CAQ5B;IAED,IAAI,EAAE,IAAI,MAAM,CAQf;IAED,IAAI,aAAa,IAAI,MAAM,EAAE,CAK5B;IAED,IAAI,eAAe,IAAI,MAAM,EAAE,CAK9B;IAED;;OAEG;IACH,IAAI,OAAO,IAAI,KAAK,EAAE,CA6BrB;IAED,IAAI,GAAG,IAAI,cAAc,CAExB;IAED,IAAI,aAAa,IAAI,KAAK,EAAE,CAI3B;IAED,IAAI,MAAM,IAAI,SAAS,EAAE,CAQxB;IAED;;;;OAIG;IACH,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAOpC;;OAEG;IACH,IAAI,sBAAsB,IAAI,OAAO,CAEpC;IAED,kBAAkB;IAClB,kBAAkB,IAAI,sBAAsB;CA6D7C"}
1
+ {"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../../../src/lib/transaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC3E,OAAO,EACL,OAAO,EACP,eAAe,EACf,KAAK,EAGL,eAAe,EACf,cAAc,EACf,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAEL,UAAU,EACV,SAAS,EACT,UAAU,EAIX,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAYpC,qBAAa,WAAY,SAAQ,eAAe;IAC9C,SAAS,CAAC,iBAAiB,EAAE,SAAS,CAAC,MAAM,GAAG,UAAU,CAAC;IACpD,KAAK,EAAE,eAAe,CAAC;IACvB,QAAQ,EAAE,YAAY,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,SAAK;IACf,SAAS,SAAa;IACtB,cAAc,EAAE,UAAU,EAAE,CAAM;IAClC,GAAG,EAAE,UAAU,EAAE,CAAM;IACvB,gBAAgB,EAAE,UAAU,EAAE,CAAM;IACpC,MAAM,EAAE,cAAc,EAAE,CAAM;IAC9B,IAAI,EAAE,OAAO,CAAC,cAAc,CAAC,CAAM;gBAE9B,UAAU,EAAE,QAAQ,CAAC,UAAU,CAAC;IAQ5C,IAAI,SAAS,IAAI,MAAM,EAAE,CAKxB;IAED,IAAI,WAAW,IAAI,UAAU,EAAE,CAE9B;IAED,IAAI,cAAc,IAAI,OAAO,CAE5B;IAED,kBAAkB;IAClB,OAAO,CAAC,EAAE,GAAG,EAAE,EAAE,OAAO,GAAG,OAAO;IAI5B,IAAI,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IA6C3C,iBAAiB,IAAI,MAAM;IAS3B,MAAM,IAAI,MAAM;IAiBhB,cAAc,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI;IAI5B,kBAAkB,CAAC,eAAe,EAAE,eAAe,GAAG,IAAI;IAO1D,IAAI,eAAe,IAAI,MAAM,CAE5B;IAED,IAAI,EAAE,IAAI,MAAM,CAGf;IAED,IAAI,aAAa,IAAI,MAAM,EAAE,CAE5B;IAED,IAAI,eAAe,IAAI,MAAM,EAAE,CAE9B;IAED,IAAI,GAAG,IAAI,cAAc,CAExB;IAED,IAAI,OAAO,IAAI,KAAK,EAAE,CAgBrB;IAED,IAAI,aAAa,IAAI,KAAK,EAAE,CAI3B;IAED,kBAAkB,IAAI,sBAAsB;CA0B7C"}