@bitgo-beta/sdk-coin-trx 1.2.3-alpha.49 → 1.2.3-alpha.491

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 (133) hide show
  1. package/dist/resources/protobuf/Contract.proto +32 -0
  2. package/dist/resources/protobuf/tron.d.ts +1478 -214
  3. package/dist/resources/protobuf/tron.js +6312 -2600
  4. package/dist/resources/protobuf/tron.proto +6 -0
  5. package/dist/src/index.js +6 -2
  6. package/dist/src/lib/constants.d.ts +3 -0
  7. package/dist/src/lib/constants.d.ts.map +1 -0
  8. package/dist/src/lib/constants.js +6 -0
  9. package/dist/src/lib/contractCallBuilder.d.ts +1 -35
  10. package/dist/src/lib/contractCallBuilder.d.ts.map +1 -1
  11. package/dist/src/lib/contractCallBuilder.js +12 -75
  12. package/dist/src/lib/delegateResourceTxBuilder.d.ts +27 -0
  13. package/dist/src/lib/delegateResourceTxBuilder.d.ts.map +1 -0
  14. package/dist/src/lib/delegateResourceTxBuilder.js +104 -0
  15. package/dist/src/lib/enum.d.ts +36 -1
  16. package/dist/src/lib/enum.d.ts.map +1 -1
  17. package/dist/src/lib/enum.js +40 -4
  18. package/dist/src/lib/freezeBalanceTxBuilder.d.ts +71 -0
  19. package/dist/src/lib/freezeBalanceTxBuilder.d.ts.map +1 -0
  20. package/dist/src/lib/freezeBalanceTxBuilder.js +217 -0
  21. package/dist/src/lib/iface.d.ts +220 -2
  22. package/dist/src/lib/iface.d.ts.map +1 -1
  23. package/dist/src/lib/iface.js +1 -1
  24. package/dist/src/lib/index.js +23 -9
  25. package/dist/src/lib/keyPair.d.ts +0 -1
  26. package/dist/src/lib/keyPair.d.ts.map +1 -1
  27. package/dist/src/lib/keyPair.js +31 -18
  28. package/dist/src/lib/resourceManagementTxBuilder.d.ts +72 -0
  29. package/dist/src/lib/resourceManagementTxBuilder.d.ts.map +1 -0
  30. package/dist/src/lib/resourceManagementTxBuilder.js +150 -0
  31. package/dist/src/lib/tokenTransferBuilder.d.ts +1 -1
  32. package/dist/src/lib/tokenTransferBuilder.js +3 -3
  33. package/dist/src/lib/transaction.d.ts +3 -0
  34. package/dist/src/lib/transaction.d.ts.map +1 -1
  35. package/dist/src/lib/transaction.js +108 -6
  36. package/dist/src/lib/transactionBuilder.d.ts +53 -6
  37. package/dist/src/lib/transactionBuilder.d.ts.map +1 -1
  38. package/dist/src/lib/transactionBuilder.js +114 -21
  39. package/dist/src/lib/undelegateResourceTxBuilder.d.ts +27 -0
  40. package/dist/src/lib/undelegateResourceTxBuilder.d.ts.map +1 -0
  41. package/dist/src/lib/undelegateResourceTxBuilder.js +104 -0
  42. package/dist/src/lib/unfreezeBalanceTxBuilder.d.ts +65 -0
  43. package/dist/src/lib/unfreezeBalanceTxBuilder.d.ts.map +1 -0
  44. package/dist/src/lib/unfreezeBalanceTxBuilder.js +210 -0
  45. package/dist/src/lib/utils.d.ts +85 -4
  46. package/dist/src/lib/utils.d.ts.map +1 -1
  47. package/dist/src/lib/utils.js +444 -47
  48. package/dist/src/lib/voteWitnessTxBuilder.d.ts +62 -0
  49. package/dist/src/lib/voteWitnessTxBuilder.d.ts.map +1 -0
  50. package/dist/src/lib/voteWitnessTxBuilder.js +219 -0
  51. package/dist/src/lib/withdrawBuilder.d.ts +49 -0
  52. package/dist/src/lib/withdrawBuilder.d.ts.map +1 -0
  53. package/dist/src/lib/withdrawBuilder.js +167 -0
  54. package/dist/src/lib/withdrawExpireUnfreezeTxBuilder.d.ts +49 -0
  55. package/dist/src/lib/withdrawExpireUnfreezeTxBuilder.d.ts.map +1 -0
  56. package/dist/src/lib/withdrawExpireUnfreezeTxBuilder.js +167 -0
  57. package/dist/src/lib/wrappedBuilder.d.ts +59 -1
  58. package/dist/src/lib/wrappedBuilder.d.ts.map +1 -1
  59. package/dist/src/lib/wrappedBuilder.js +101 -4
  60. package/dist/src/trx.d.ts +93 -4
  61. package/dist/src/trx.d.ts.map +1 -1
  62. package/dist/src/trx.js +500 -147
  63. package/dist/src/trxToken.d.ts +2 -2
  64. package/dist/src/trxToken.d.ts.map +1 -1
  65. package/dist/src/trxToken.js +14 -6
  66. package/dist/test/fixtures.d.ts +40 -0
  67. package/dist/test/fixtures.d.ts.map +1 -0
  68. package/dist/test/fixtures.js +46 -0
  69. package/dist/test/resources.d.ts +586 -0
  70. package/dist/test/resources.d.ts.map +1 -0
  71. package/dist/test/resources.js +746 -0
  72. package/dist/test/unit/index.d.ts +2 -0
  73. package/dist/test/unit/index.d.ts.map +1 -0
  74. package/dist/test/unit/index.js +19 -0
  75. package/dist/test/unit/keyPair.d.ts +2 -0
  76. package/dist/test/unit/keyPair.d.ts.map +1 -0
  77. package/dist/test/unit/keyPair.js +163 -0
  78. package/dist/test/unit/transaction.d.ts +2 -0
  79. package/dist/test/unit/transaction.d.ts.map +1 -0
  80. package/dist/test/unit/transaction.js +38 -0
  81. package/dist/test/unit/transactionBuilder/contractCallBuilder.d.ts +2 -0
  82. package/dist/test/unit/transactionBuilder/contractCallBuilder.d.ts.map +1 -0
  83. package/dist/test/unit/transactionBuilder/contractCallBuilder.js +315 -0
  84. package/dist/test/unit/transactionBuilder/delegateResourceTxBuilder.d.ts +2 -0
  85. package/dist/test/unit/transactionBuilder/delegateResourceTxBuilder.d.ts.map +1 -0
  86. package/dist/test/unit/transactionBuilder/delegateResourceTxBuilder.js +339 -0
  87. package/dist/test/unit/transactionBuilder/freezeBalanceTxBuilder.d.ts +2 -0
  88. package/dist/test/unit/transactionBuilder/freezeBalanceTxBuilder.d.ts.map +1 -0
  89. package/dist/test/unit/transactionBuilder/freezeBalanceTxBuilder.js +365 -0
  90. package/dist/test/unit/transactionBuilder/tokenTransferBuilder.d.ts +2 -0
  91. package/dist/test/unit/transactionBuilder/tokenTransferBuilder.d.ts.map +1 -0
  92. package/dist/test/unit/transactionBuilder/tokenTransferBuilder.js +55 -0
  93. package/dist/test/unit/transactionBuilder/undelegateResourceTxBuilder.d.ts +2 -0
  94. package/dist/test/unit/transactionBuilder/undelegateResourceTxBuilder.d.ts.map +1 -0
  95. package/dist/test/unit/transactionBuilder/undelegateResourceTxBuilder.js +339 -0
  96. package/dist/test/unit/transactionBuilder/unfreezeBalanceTxBuilder.d.ts +2 -0
  97. package/dist/test/unit/transactionBuilder/unfreezeBalanceTxBuilder.d.ts.map +1 -0
  98. package/dist/test/unit/transactionBuilder/unfreezeBalanceTxBuilder.js +336 -0
  99. package/dist/test/unit/transactionBuilder/voteWitnessTxBuilder.d.ts +2 -0
  100. package/dist/test/unit/transactionBuilder/voteWitnessTxBuilder.d.ts.map +1 -0
  101. package/dist/test/unit/transactionBuilder/voteWitnessTxBuilder.js +277 -0
  102. package/dist/test/unit/transactionBuilder/withdrawBalanceBuilder.d.ts +2 -0
  103. package/dist/test/unit/transactionBuilder/withdrawBalanceBuilder.d.ts.map +1 -0
  104. package/dist/test/unit/transactionBuilder/withdrawBalanceBuilder.js +213 -0
  105. package/dist/test/unit/transactionBuilder/withdrawExpireUnfreezeTxBuilder.d.ts +2 -0
  106. package/dist/test/unit/transactionBuilder/withdrawExpireUnfreezeTxBuilder.d.ts.map +1 -0
  107. package/dist/test/unit/transactionBuilder/withdrawExpireUnfreezeTxBuilder.js +213 -0
  108. package/dist/test/unit/transactionBuilder/wrappedBuilder.d.ts +2 -0
  109. package/dist/test/unit/transactionBuilder/wrappedBuilder.d.ts.map +1 -0
  110. package/dist/test/unit/transactionBuilder/wrappedBuilder.js +50 -0
  111. package/dist/test/unit/transactionBuilder.d.ts +2 -0
  112. package/dist/test/unit/transactionBuilder.d.ts.map +1 -0
  113. package/dist/test/unit/transactionBuilder.js +178 -0
  114. package/dist/test/unit/trx.d.ts +2 -0
  115. package/dist/test/unit/trx.d.ts.map +1 -0
  116. package/dist/test/unit/trx.js +639 -0
  117. package/dist/test/unit/util.d.ts +2 -0
  118. package/dist/test/unit/util.d.ts.map +1 -0
  119. package/dist/test/unit/util.js +141 -0
  120. package/dist/test/unit/verifyTransaction.d.ts +2 -0
  121. package/dist/test/unit/verifyTransaction.d.ts.map +1 -0
  122. package/dist/test/unit/verifyTransaction.js +573 -0
  123. package/dist/tsconfig.tsbuildinfo +1 -0
  124. package/package.json +22 -16
  125. package/.eslintignore +0 -5
  126. package/.mocharc.yml +0 -8
  127. package/CHANGELOG.md +0 -134
  128. package/resources/README.md +0 -31
  129. package/resources/protobuf/Contract.proto +0 -256
  130. package/resources/protobuf/Discover.proto +0 -44
  131. package/resources/protobuf/tron.d.ts +0 -11205
  132. package/resources/protobuf/tron.js +0 -33480
  133. package/resources/protobuf/tron.proto +0 -677
@@ -28,7 +28,7 @@ class Transaction extends sdk_core_1.BaseTransaction {
28
28
  }
29
29
  this._id = rawTransaction.txID;
30
30
  this._transaction = rawTransaction;
31
- this._decodedRawDataHex = utils_1.decodeTransaction(rawTransaction.raw_data_hex);
31
+ this._decodedRawDataHex = (0, utils_1.decodeTransaction)(rawTransaction.raw_data_hex);
32
32
  // Destination depends on the contract type
33
33
  this.recordRawDataFields(this._decodedRawDataHex);
34
34
  }
@@ -77,8 +77,8 @@ class Transaction extends sdk_core_1.BaseTransaction {
77
77
  // this is then a token smart contract transaction and the data must be decoded
78
78
  const types = ['address', 'uint256'];
79
79
  const data = Buffer.from(contractCallValues.data, 'base64').toString('hex');
80
- const decodedData = utils_1.decodeDataParams(types, data);
81
- const recipient_address = utils_1.getBase58AddressFromHex(decodedData[0]);
80
+ const decodedData = (0, utils_1.decodeDataParams)(types, data);
81
+ const recipient_address = (0, utils_1.getBase58AddressFromHex)(decodedData[0]);
82
82
  const value = decodedData[1].toString();
83
83
  output = {
84
84
  address: recipient_address,
@@ -103,6 +103,92 @@ class Transaction extends sdk_core_1.BaseTransaction {
103
103
  value: '0',
104
104
  };
105
105
  break;
106
+ case enum_1.ContractType.FreezeBalanceV2:
107
+ this._type = sdk_core_1.TransactionType.StakingActivate;
108
+ const freezeValue = rawData.contract[0].parameter.value;
109
+ output = {
110
+ address: freezeValue.owner_address,
111
+ value: freezeValue.frozen_balance.toString(),
112
+ };
113
+ input = {
114
+ address: freezeValue.owner_address,
115
+ value: freezeValue.frozen_balance.toString(),
116
+ };
117
+ break;
118
+ case enum_1.ContractType.VoteWitness:
119
+ this._type = sdk_core_1.TransactionType.StakingVote;
120
+ const voteValues = rawData.contract[0].parameter.value;
121
+ // Calculate total vote count
122
+ const totalVoteCount = voteValues.votes.reduce((sum, vote) => sum + vote.vote_count, 0);
123
+ output = {
124
+ address: voteValues.owner_address,
125
+ value: totalVoteCount.toString(),
126
+ };
127
+ input = {
128
+ address: voteValues.owner_address,
129
+ value: totalVoteCount.toString(),
130
+ };
131
+ break;
132
+ case enum_1.ContractType.UnfreezeBalanceV2:
133
+ this._type = sdk_core_1.TransactionType.StakingDeactivate;
134
+ const unfreezeValues = rawData.contract[0].parameter.value;
135
+ output = {
136
+ address: unfreezeValues.owner_address,
137
+ value: unfreezeValues.unfreeze_balance.toString(),
138
+ };
139
+ input = {
140
+ address: unfreezeValues.owner_address,
141
+ value: unfreezeValues.unfreeze_balance.toString(),
142
+ };
143
+ break;
144
+ case enum_1.ContractType.WithdrawExpireUnfreeze:
145
+ this._type = sdk_core_1.TransactionType.StakingWithdraw;
146
+ const withdrawValues = rawData.contract[0].parameter.value;
147
+ output = {
148
+ address: withdrawValues.owner_address,
149
+ value: '0', // no value field
150
+ };
151
+ input = {
152
+ address: withdrawValues.owner_address,
153
+ value: '0',
154
+ };
155
+ break;
156
+ case enum_1.ContractType.WithdrawBalance:
157
+ this._type = sdk_core_1.TransactionType.StakingClaim;
158
+ const withdrawBalanceValue = rawData.contract[0].parameter.value;
159
+ output = {
160
+ address: withdrawBalanceValue.owner_address,
161
+ value: '0', // no value field
162
+ };
163
+ input = {
164
+ address: withdrawBalanceValue.owner_address,
165
+ value: '0',
166
+ };
167
+ break;
168
+ case enum_1.ContractType.DelegateResourceContract:
169
+ this._type = sdk_core_1.TransactionType.DelegateResource;
170
+ const delegateValue = rawData.contract[0].parameter.value;
171
+ output = {
172
+ address: delegateValue.receiver_address,
173
+ value: delegateValue.balance.toString(),
174
+ };
175
+ input = {
176
+ address: delegateValue.owner_address,
177
+ value: delegateValue.balance.toString(),
178
+ };
179
+ break;
180
+ case enum_1.ContractType.UnDelegateResourceContract:
181
+ this._type = sdk_core_1.TransactionType.UnDelegateResource;
182
+ const undelegateValue = rawData.contract[0].parameter.value;
183
+ output = {
184
+ address: undelegateValue.receiver_address,
185
+ value: undelegateValue.balance.toString(),
186
+ };
187
+ input = {
188
+ address: undelegateValue.owner_address,
189
+ value: undelegateValue.balance.toString(),
190
+ };
191
+ break;
106
192
  default:
107
193
  throw new sdk_core_1.ParseTransactionError('Unsupported contract type');
108
194
  }
@@ -118,7 +204,7 @@ class Transaction extends sdk_core_1.BaseTransaction {
118
204
  throw new sdk_core_1.ParseTransactionError('Empty transaction');
119
205
  }
120
206
  const hexBuffer = Buffer.from(this._transaction.raw_data_hex, 'hex');
121
- const newTxid = crypto_1.createHash('sha256').update(hexBuffer).digest('hex');
207
+ const newTxid = (0, crypto_1.createHash)('sha256').update(hexBuffer).digest('hex');
122
208
  this._transaction.txID = newTxid;
123
209
  this._id = newTxid;
124
210
  }
@@ -148,7 +234,7 @@ class Transaction extends sdk_core_1.BaseTransaction {
148
234
  // Set the internal variables to account for the new expiration date
149
235
  this._transaction.raw_data_hex = newRawDataHex;
150
236
  this._transaction.raw_data.expiration = newExpiration;
151
- this._decodedRawDataHex = utils_1.decodeTransaction(newRawDataHex);
237
+ this._decodedRawDataHex = (0, utils_1.decodeTransaction)(newRawDataHex);
152
238
  this.recordRawDataFields(this._decodedRawDataHex);
153
239
  this.updateId();
154
240
  }
@@ -186,6 +272,22 @@ class Transaction extends sdk_core_1.BaseTransaction {
186
272
  get inputs() {
187
273
  return this._inputs;
188
274
  }
275
+ /** @inheritDoc */
276
+ get signablePayload() {
277
+ if (!this._transaction) {
278
+ throw new sdk_core_1.ParseTransactionError('Empty transaction');
279
+ }
280
+ return Buffer.from(this._transaction.raw_data_hex, 'hex');
281
+ }
282
+ addSignature(signature) {
283
+ if (!this._transaction) {
284
+ throw new sdk_core_1.ParseTransactionError('Empty transaction');
285
+ }
286
+ if (!this._transaction.signature) {
287
+ this._transaction.signature = [];
288
+ }
289
+ this._transaction.signature.push(signature.toString('hex'));
290
+ }
189
291
  /** @inheritdoc */
190
292
  canSign(key) {
191
293
  // Tron transaction do not contain the owners account address so it is not possible to check the
@@ -223,4 +325,4 @@ class Transaction extends sdk_core_1.BaseTransaction {
223
325
  }
224
326
  }
225
327
  exports.Transaction = Transaction;
226
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3RyYW5zYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLG1DQUFvQztBQUVwQyxnRUFBcUM7QUFDckMsd0RBQXlEO0FBQ3pELG1EQU04QjtBQUM5QixpQ0FBc0M7QUFDdEMsbUNBTWlCO0FBR2pCOztHQUVHO0FBQ0gsTUFBYSxXQUFZLFNBQVEsMEJBQWU7SUFVOUM7Ozs7O09BS0c7SUFDSCxZQUFZLFVBQWdDLEVBQUUsY0FBbUM7UUFDL0UsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2xCLElBQUksY0FBYyxFQUFFO1lBQ2xCLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFO2dCQUN4QixNQUFNLElBQUksZ0NBQXFCLENBQUMsdUJBQXVCLENBQUMsQ0FBQzthQUMxRDtZQUNELElBQUksQ0FBQyxHQUFHLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQztZQUMvQixJQUFJLENBQUMsWUFBWSxHQUFHLGNBQWMsQ0FBQztZQUNuQyxJQUFJLENBQUMsa0JBQWtCLEdBQUcseUJBQWlCLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBRXpFLDJDQUEyQztZQUMzQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7U0FDbkQ7SUFDSCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNLLG1CQUFtQixDQUFDLE9BQWdCO1FBQzFDLDJCQUEyQjtRQUMzQixJQUFJLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUM7UUFDcEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDO1FBRW5DLElBQUksTUFBcUIsRUFBRSxLQUFvQixDQUFDO1FBQ2hELDJCQUEyQjtRQUMzQixRQUFRLE9BQU8sQ0FBQyxZQUFZLEVBQUU7WUFDNUIsS0FBSyxtQkFBWSxDQUFDLFFBQVE7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c2ggfSBmcm9tICdjcnlwdG8nO1xuaW1wb3J0IHsgQmFzZUNvaW4gYXMgQ29pbkNvbmZpZyB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IEJpZ051bWJlciBmcm9tICdiaWdudW1iZXIuanMnO1xuaW1wb3J0IHsgcHJvdG9jb2wgfSBmcm9tICcuLi8uLi9yZXNvdXJjZXMvcHJvdG9idWYvdHJvbic7XG5pbXBvcnQge1xuICBCYXNlS2V5LFxuICBCYXNlVHJhbnNhY3Rpb24sXG4gIEV4dGVuZFRyYW5zYWN0aW9uRXJyb3IsXG4gIFBhcnNlVHJhbnNhY3Rpb25FcnJvcixcbiAgVHJhbnNhY3Rpb25UeXBlLFxufSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBDb250cmFjdFR5cGUgfSBmcm9tICcuL2VudW0nO1xuaW1wb3J0IHtcbiAgZGVjb2RlVHJhbnNhY3Rpb24sXG4gIGRlY29kZURhdGFQYXJhbXMsXG4gIGdldEJhc2U1OEFkZHJlc3NGcm9tSGV4LFxuICB0b2tlbk1haW5uZXRDb250cmFjdEFkZHJlc3NlcyxcbiAgdG9rZW5UZXN0bmV0Q29udHJhY3RBZGRyZXNzZXMsXG59IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgQ29udHJhY3RFbnRyeSwgUmF3RGF0YSwgVHJhbnNhY3Rpb25SZWNlaXB0LCBUcmFuc2ZlckNvbnRyYWN0LCBUcmlnZ2VyU21hcnRDb250cmFjdCB9IGZyb20gJy4vaWZhY2UnO1xuXG4vKipcbiAqIFRyb24gdHJhbnNhY3Rpb24gbW9kZWwuXG4gKi9cbmV4cG9ydCBjbGFzcyBUcmFuc2FjdGlvbiBleHRlbmRzIEJhc2VUcmFuc2FjdGlvbiB7XG4gIC8vIFRyb24gc3BlY2lmaWMgZmllbGRzXG4gIHByb3RlY3RlZCBfdmFsaWRGcm9tOiBudW1iZXI7XG4gIHByb3RlY3RlZCBfdmFsaWRUbzogbnVtYmVyO1xuICBwcm90ZWN0ZWQgX2lucHV0czogQ29udHJhY3RFbnRyeVtdO1xuICBwcm90ZWN0ZWQgX291dHB1dHM6IENvbnRyYWN0RW50cnlbXTtcblxuICBwcml2YXRlIF9kZWNvZGVkUmF3RGF0YUhleDogUmF3RGF0YTtcbiAgcHJpdmF0ZSBfdHJhbnNhY3Rpb24/OiBUcmFuc2FjdGlvblJlY2VpcHQ7XG5cbiAgLyoqXG4gICAqIFB1YmxpYyBjb25zdHJ1Y3Rvci5cbiAgICpcbiAgICogQHBhcmFtIGNvaW5Db25maWdcbiAgICogQHBhcmFtIHJhd1RyYW5zYWN0aW9uXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihjb2luQ29uZmlnOiBSZWFkb25seTxDb2luQ29uZmlnPiwgcmF3VHJhbnNhY3Rpb24/OiBUcmFuc2FjdGlvblJlY2VpcHQpIHtcbiAgICBzdXBlcihjb2luQ29uZmlnKTtcbiAgICBpZiAocmF3VHJhbnNhY3Rpb24pIHtcbiAgICAgIGlmICghcmF3VHJhbnNhY3Rpb24udHhJRCkge1xuICAgICAgICB0aHJvdyBuZXcgUGFyc2VUcmFuc2FjdGlvbkVycm9yKCdUcmFuc2FjdGlvbiBoYXMgbm8gaWQnKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2lkID0gcmF3VHJhbnNhY3Rpb24udHhJRDtcbiAgICAgIHRoaXMuX3RyYW5zYWN0aW9uID0gcmF3VHJhbnNhY3Rpb247XG4gICAgICB0aGlzLl9kZWNvZGVkUmF3RGF0YUhleCA9IGRlY29kZVRyYW5zYWN0aW9uKHJhd1RyYW5zYWN0aW9uLnJhd19kYXRhX2hleCk7XG5cbiAgICAgIC8vIERlc3RpbmF0aW9uIGRlcGVuZHMgb24gdGhlIGNvbnRyYWN0IHR5cGVcbiAgICAgIHRoaXMucmVjb3JkUmF3RGF0YUZpZWxkcyh0aGlzLl9kZWNvZGVkUmF3RGF0YUhleCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFBhcnNlIHRoZSB0cmFuc2FjdGlvbiByYXcgZGF0YSBhbmQgcmVjb3JkIHRoZSBtb3N0IGltcG9ydGFudCBmaWVsZHMuXG4gICAqXG4gICAqIEBwYXJhbSByYXdEYXRhIE9iamVjdCBmcm9tIGEgdHJvbiB0cmFuc2FjdGlvblxuICAgKi9cbiAgcHJpdmF0ZSByZWNvcmRSYXdEYXRhRmllbGRzKHJhd0RhdGE6IFJhd0RhdGEpIHtcbiAgICAvLyBDb250cmFjdC1hZ25vc3RpYyBmaWVsZHNcbiAgICB0aGlzLl92YWxpZEZyb20gPSByYXdEYXRhLnRpbWVzdGFtcDtcbiAgICB0aGlzLl92YWxpZFRvID0gcmF3RGF0YS5leHBpcmF0aW9uO1xuXG4gICAgbGV0IG91dHB1dDogQ29udHJhY3RFbnRyeSwgaW5wdXQ6IENvbnRyYWN0RW50cnk7XG4gICAgLy8gQ29udHJhY3Qtc3BlY2lmaWMgZmllbGRzXG4gICAgc3dpdGNoIChyYXdEYXRhLmNvbnRyYWN0VHlwZSkge1xuICAgICAgY2FzZSBDb250cmFjdFR5cGUuVHJhbnNmZXI6XG4gICAgICAgIHRoaXMuX3R5cGUgPSBUcmFuc2FjdGlvblR5cGUuU2VuZDtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBuZXcgQmlnTnVtYmVyKChyYXdEYXRhLmNvbnRyYWN0WzBdIGFzIFRyYW5zZmVyQ29udHJhY3QpLnBhcmFtZXRlci52YWx1ZS5hbW91bnQpLnRvRml4ZWQoMCk7XG4gICAgICAgIG91dHB1dCA9IHtcbiAgICAgICAgICBhZGRyZXNzOiAocmF3RGF0YS5jb250cmFjdFswXSBhcyBUcmFuc2ZlckNvbnRyYWN0KS5wYXJhbWV0ZXIudmFsdWUudG9fYWRkcmVzcyxcbiAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgfTtcbiAgICAgICAgaW5wdXQgPSB7XG4gICAgICAgICAgYWRkcmVzczogKHJhd0RhdGEuY29udHJhY3RbMF0gYXMgVHJhbnNmZXJDb250cmFjdCkucGFyYW1ldGVyLnZhbHVlLm93bmVyX2FkZHJlc3MsXG4gICAgICAgICAgdmFsdWUsXG4gICAgICAgIH07XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBDb250cmFjdFR5cGUuQWNjb3VudFBlcm1pc3Npb25VcGRhdGU6XG4gICAgICAgIHRoaXMuX3R5cGUgPSBUcmFuc2FjdGlvblR5cGUuV2FsbGV0SW5pdGlhbGl6YXRpb247XG4gICAgICAgIG91dHB1dCA9IHtcbiAgICAgICAgICBhZGRyZXNzOiAocmF3RGF0YS5jb250cmFjdCBhcyBhbnkpLm93bmVyX2FkZHJlc3MsXG4gICAgICAgICAgdmFsdWU6ICcwJyxcbiAgICAgICAgfTtcbiAgICAgICAgaW5wdXQgPSB7XG4gICAgICAgICAgYWRkcmVzczogKHJhd0RhdGEuY29udHJhY3QgYXMgYW55KS5vd25lcl9hZGRyZXNzLFxuICAgICAgICAgIHZhbHVlOiAnMCcsXG4gICAgICAgIH07XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBDb250cmFjdFR5cGUuVHJpZ2dlclNtYXJ0Q29udHJhY3Q6XG4gICAgICAgIHRoaXMuX3R5cGUgPSBUcmFuc2FjdGlvblR5cGUuQ29udHJhY3RDYWxsO1xuICAgICAgICBjb25zdCBjb250cmFjdENhbGxWYWx1ZXMgPSAocmF3RGF0YS5jb250cmFjdFswXSBhcyBUcmlnZ2VyU21hcnRDb250cmFjdCkucGFyYW1ldGVyLnZhbHVlO1xuICAgICAgICBjb25zdCBjb250cmFjdEFkZHJlc3MgPSBjb250cmFjdENhbGxWYWx1ZXMuY29udHJhY3RfYWRkcmVzcztcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRva2VuTWFpbm5ldENvbnRyYWN0QWRkcmVzc2VzLmluY2x1ZGVzKGNvbnRyYWN0QWRkcmVzcykgfHxcbiAgICAgICAgICB0b2tlblRlc3RuZXRDb250cmFjdEFkZHJlc3Nlcy5pbmNsdWRlcyhjb250cmFjdEFkZHJlc3MpXG4gICAgICAgICkge1xuICAgICAgICAgIC8vIHRoaXMgaXMgdGhlbiBhIHRva2VuIHNtYXJ0IGNvbnRyYWN0IHRyYW5zYWN0aW9uIGFuZCB0aGUgZGF0YSBtdXN0IGJlIGRlY29kZWRcbiAgICAgICAgICBjb25zdCB0eXBlcyA9IFsnYWRkcmVzcycsICd1aW50MjU2J107XG4gICAgICAgICAgY29uc3QgZGF0YSA9IEJ1ZmZlci5mcm9tKGNvbnRyYWN0Q2FsbFZhbHVlcy5kYXRhLCAnYmFzZTY0JykudG9TdHJpbmcoJ2hleCcpO1xuICAgICAgICAgIGNvbnN0IGRlY29kZWREYXRhID0gZGVjb2RlRGF0YVBhcmFtcyh0eXBlcywgZGF0YSk7XG4gICAgICAgICAgY29uc3QgcmVjaXBpZW50X2FkZHJlc3MgPSBnZXRCYXNlNThBZGRyZXNzRnJvbUhleChkZWNvZGVkRGF0YVswXSk7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSBkZWNvZGVkRGF0YVsxXS50b1N0cmluZygpO1xuICAgICAgICAgIG91dHB1dCA9IHtcbiAgICAgICAgICAgIGFkZHJlc3M6IHJlY2lwaWVudF9hZGRyZXNzLFxuICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgfTtcbiAgICAgICAgICBpbnB1dCA9IHtcbiAgICAgICAgICAgIGFkZHJlc3M6IGNvbnRyYWN0Q2FsbFZhbHVlcy5vd25lcl9hZGRyZXNzLFxuICAgICAgICAgICAgY29udHJhY3RBZGRyZXNzLFxuICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgIH07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgb3V0cHV0ID0ge1xuICAgICAgICAgIGFkZHJlc3M6IGNvbnRyYWN0Q2FsbFZhbHVlcy5vd25lcl9hZGRyZXNzLFxuICAgICAgICAgIHZhbHVlOiAnMCcsXG4gICAgICAgIH07XG4gICAgICAgIGlucHV0ID0ge1xuICAgICAgICAgIGFkZHJlc3M6IGNvbnRyYWN0Q2FsbFZhbHVlcy5vd25lcl9hZGRyZXNzLFxuICAgICAgICAgIGNvbnRyYWN0QWRkcmVzcyxcbiAgICAgICAgICBkYXRhOiBjb250cmFjdENhbGxWYWx1ZXMuZGF0YSxcbiAgICAgICAgICB2YWx1ZTogJzAnLFxuICAgICAgICB9O1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBQYXJzZVRyYW5zYWN0aW9uRXJyb3IoJ1Vuc3VwcG9ydGVkIGNvbnRyYWN0IHR5cGUnKTtcbiAgICB9XG4gICAgdGhpcy5faW5wdXRzID0gW2lucHV0XTtcbiAgICB0aGlzLl9vdXRwdXRzID0gW291dHB1dF07XG4gIH1cblxuICAvKipcbiAgICogUmVjYWxjdWxhdGUgYW5kIHVwZGF0ZSB0aGUgdHJhbnNhY3Rpb24gaWQuIFRoaXMgc2hvdWxkIGJlIGRvbmUgYWZ0ZXIgY2hhbmdpbmcgYW55IHRyYW5zYWN0aW9uXG4gICAqIGZpZWxkIHNpbmNlIHRoZSB0aGUgaWQgaXMgYSBoYXNoIG9mIHRoZSB0cmFuc2FjdGlvbiBib2R5LlxuICAgKi9cbiAgcHJpdmF0ZSB1cGRhdGVJZCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX3RyYW5zYWN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2VUcmFuc2FjdGlvbkVycm9yKCdFbXB0eSB0cmFuc2FjdGlvbicpO1xuICAgIH1cbiAgICBjb25zdCBoZXhCdWZmZXIgPSBCdWZmZXIuZnJvbSh0aGlzLl90cmFuc2FjdGlvbi5yYXdfZGF0YV9oZXgsICdoZXgnKTtcbiAgICBjb25zdCBuZXdUeGlkID0gY3JlYXRlSGFzaCgnc2hhMjU2JykudXBkYXRlKGhleEJ1ZmZlcikuZGlnZXN0KCdoZXgnKTtcbiAgICB0aGlzLl90cmFuc2FjdGlvbi50eElEID0gbmV3VHhpZDtcbiAgICB0aGlzLl9pZCA9IG5ld1R4aWQ7XG4gIH1cblxuICAvKipcbiAgICogRXh0ZW5kIHRoZSBleHBpcmF0aW9uIGRhdGUgYnkgdGhlIGdpdmVuIG51bWJlciBvZiBtaWxsaXNlY29uZHMuXG4gICAqXG4gICAqIEBwYXJhbSBleHRlbnNpb25NcyBUaGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byBleHRlbmQgdGhlIGV4cGlyYXRpb24gYnlcbiAgICovXG4gIGV4dGVuZEV4cGlyYXRpb24oZXh0ZW5zaW9uTXM6IG51bWJlcik6IHZvaWQge1xuICAgIGlmIChleHRlbnNpb25NcyA8IDApIHtcbiAgICAgIHRocm93IG5ldyBFeHRlbmRUcmFuc2FjdGlvbkVycm9yKCdJbnZhbGlkIGV4dGVuc2lvbiByYW5nZS4gTXVzdCBiZSBwb3NpdGl2ZSBhIGludGVnZXInKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuX3RyYW5zYWN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXh0ZW5kVHJhbnNhY3Rpb25FcnJvcignRW1wdHkgdHJhbnNhY3Rpb24nKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fdHJhbnNhY3Rpb24uc2lnbmF0dXJlICYmIHRoaXMuX3RyYW5zYWN0aW9uLnNpZ25hdHVyZS5sZW5ndGggPiAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXh0ZW5kVHJhbnNhY3Rpb25FcnJvcignQ2Fubm90IGV4dGVuZCBhIHNpZ25lZCB0cmFuc2FjdGlvbicpO1xuICAgIH1cblxuICAgIGNvbnN0IHJhd0RhdGFIZXggPSB0aGlzLl90cmFuc2FjdGlvbi5yYXdfZGF0YV9oZXg7XG4gICAgY29uc3QgYnl0ZXMgPSBCdWZmZXIuZnJvbShyYXdEYXRhSGV4LCAnaGV4Jyk7XG4gICAgbGV0IHJhdztcbiAgICB0cnkge1xuICAgICAgcmF3ID0gcHJvdG9jb2wuVHJhbnNhY3Rpb24ucmF3LmRlY29kZShieXRlcyk7XG4gICAgICBjb25zdCBuZXdFeHBpcmF0aW9uID0gbmV3IEJpZ051bWJlcihyYXcuZXhwaXJhdGlvbikucGx1cyhleHRlbnNpb25NcykudG9OdW1iZXIoKTtcbiAgICAgIHJhdy5leHBpcmF0aW9uID0gbmV3RXhwaXJhdGlvbjtcbiAgICAgIGNvbnN0IG5ld1Jhd0RhdGFIZXggPSBCdWZmZXIuZnJvbShwcm90b2NvbC5UcmFuc2FjdGlvbi5yYXcuZW5jb2RlKHJhdykuZmluaXNoKCkpLnRvU3RyaW5nKCdoZXgnKTtcbiAgICAgIC8vIFNldCB0aGUgaW50ZXJuYWwgdmFyaWFibGVzIHRvIGFjY291bnQgZm9yIHRoZSBuZXcgZXhwaXJhdGlvbiBkYXRlXG4gICAgICB0aGlzLl90cmFuc2FjdGlvbi5yYXdfZGF0YV9oZXggPSBuZXdSYXdEYXRhSGV4O1xuICAgICAgdGhpcy5fdHJhbnNhY3Rpb24ucmF3X2RhdGEuZXhwaXJhdGlvbiA9IG5ld0V4cGlyYXRpb247XG4gICAgICB0aGlzLl9kZWNvZGVkUmF3RGF0YUhleCA9IGRlY29kZVRyYW5zYWN0aW9uKG5ld1Jhd0RhdGFIZXgpO1xuICAgICAgdGhpcy5yZWNvcmRSYXdEYXRhRmllbGRzKHRoaXMuX2RlY29kZWRSYXdEYXRhSGV4KTtcbiAgICAgIHRoaXMudXBkYXRlSWQoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aHJvdyBuZXcgRXh0ZW5kVHJhbnNhY3Rpb25FcnJvcignVGhlcmUgd2FzIGFuIGVycm9yIGRlY29kaW5nIHRoZSBpbml0aWFsIHJhd19kYXRhX2hleCBmcm9tIHRoZSBzZXJpYWxpemVkIHR4LicpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHNpZ25hdHVyZXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgdHJhbnNhY3Rpb24uXG4gICAqL1xuICBnZXQgc2lnbmF0dXJlKCk6IHN0cmluZ1tdIHtcbiAgICBpZiAodGhpcy5fdHJhbnNhY3Rpb24gJiYgdGhpcy5fdHJhbnNhY3Rpb24uc2lnbmF0dXJlKSB7XG4gICAgICByZXR1cm4gdGhpcy5fdHJhbnNhY3Rpb24uc2lnbmF0dXJlO1xuICAgIH1cbiAgICByZXR1cm4gW107XG4gIH1cbiAgLyoqXG4gICAqIEdldCB0aGUgdGltZSBpbiBtaWxsaXNlY29uZHMgdGhpcyB0cmFuc2FjdGlvbiBiZWNvbWVzIHZhbGlkIGFuZCBjYW4gYmUgYnJvYWRjYXN0ZWQgdG8gdGhlXG4gICAqIG5ldHdvcmsuXG4gICAqL1xuICBnZXQgdmFsaWRGcm9tKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbGlkRnJvbTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGV4cGlyYXRpb24gdGltZSBpbiBtaWxsaXNlY29uZHMuXG4gICAqL1xuICBnZXQgdmFsaWRUbygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl92YWxpZFRvO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGdldCBvdXRwdXRzKCk6IENvbnRyYWN0RW50cnlbXSB7XG4gICAgcmV0dXJuIHRoaXMuX291dHB1dHM7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgZ2V0IGlucHV0cygpOiBDb250cmFjdEVudHJ5W10ge1xuICAgIHJldHVybiB0aGlzLl9pbnB1dHM7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgY2FuU2lnbihrZXk6IEJhc2VLZXkpOiBib29sZWFuIHtcbiAgICAvLyBUcm9uIHRyYW5zYWN0aW9uIGRvIG5vdCBjb250YWluIHRoZSBvd25lcnMgYWNjb3VudCBhZGRyZXNzIHNvIGl0IGlzIG5vdCBwb3NzaWJsZSB0byBjaGVjayB0aGVcbiAgICAvLyBwcml2YXRlIGtleSB3aXRoIGFueSBidXQgdGhlIGFjY291bnQgbWFpbiBhZGRyZXNzLiBUaGlzIGlzIG5vdCBlbm91Z2ggdG8gZmFpbCB0aGlzIGNoZWNrLCBzb1xuICAgIC8vIGl0IGlzIGEgbm8tb3AuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGlzIHRyYW5zYWN0aW9uXG4gICAqXG4gICAqIEBwYXJhbSB7VHJhbnNhY3Rpb259IHR4IHRyYW5zYWN0aW9uXG4gICAqL1xuICBzZXRUcmFuc2FjdGlvblJlY2VpcHQodHg6IFRyYW5zYWN0aW9uUmVjZWlwdCkge1xuICAgIHRoaXMuX3RyYW5zYWN0aW9uID0gdHg7XG4gICAgdGhpcy51cGRhdGVJZCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgdHJhbnNhY3Rpb24gdHlwZVxuICAgKlxuICAgKiBAcGFyYW0ge1RyYW5zYWN0aW9uVHlwZX0gdHJhbnNhY3Rpb25UeXBlIFRoZSB0cmFuc2FjdGlvbiB0eXBlIHRvIGJlIHNldFxuICAgKi9cbiAgc2V0VHJhbnNhY3Rpb25UeXBlKHRyYW5zYWN0aW9uVHlwZTogVHJhbnNhY3Rpb25UeXBlKTogdm9pZCB7XG4gICAgdGhpcy5fdHlwZSA9IHRyYW5zYWN0aW9uVHlwZTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB0b0pzb24oKTogVHJhbnNhY3Rpb25SZWNlaXB0IHtcbiAgICBpZiAoIXRoaXMuX3RyYW5zYWN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2VUcmFuc2FjdGlvbkVycm9yKCdFbXB0eSB0cmFuc2FjdGlvbicpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fdHJhbnNhY3Rpb247XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdG9Ccm9hZGNhc3RGb3JtYXQoKTogYW55IHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodGhpcy50b0pzb24oKSk7XG4gIH1cbn1cbiJdfQ==
328
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3RyYW5zYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLG1DQUFvQztBQUVwQyxnRUFBcUM7QUFDckMsd0RBQXlEO0FBQ3pELG1EQU04QjtBQUM5QixpQ0FBc0M7QUFDdEMsbUNBTWlCO0FBZWpCOztHQUVHO0FBQ0gsTUFBYSxXQUFZLFNBQVEsMEJBQWU7SUFVOUM7Ozs7O09BS0c7SUFDSCxZQUFZLFVBQWdDLEVBQUUsY0FBbUM7UUFDL0UsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2xCLElBQUksY0FBYyxFQUFFLENBQUM7WUFDbkIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDekIsTUFBTSxJQUFJLGdDQUFxQixDQUFDLHVCQUF1QixDQUFDLENBQUM7WUFDM0QsQ0FBQztZQUNELElBQUksQ0FBQyxHQUFHLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQztZQUMvQixJQUFJLENBQUMsWUFBWSxHQUFHLGNBQWMsQ0FBQztZQUNuQyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBQSx5QkFBaUIsRUFBQyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUM7WUFFekUsMkNBQTJDO1lBQzNDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUNwRCxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7O09BSUc7SUFDSyxtQkFBbUIsQ0FBQyxPQUFnQjtRQUMxQywyQkFBMkI7UUFDM0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQztRQUVuQyxJQUFJLE1BQXFCLEVBQUUsS0FBb0IsQ0FBQztRQUNoRCwyQkFBMkI7UUFDM0IsUUFBUSxPQUFPLENBQUMsWUFBWSxFQUFFLENB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QUMsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixPQUFPLENBQUMsR0FBWTtRQUNsQixnR0FBZ0c7UUFDaEcsK0ZBQStGO1FBQy9GLGlCQUFpQjtRQUNqQixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gscUJBQXFCLENBQUMsRUFBc0I7UUFDMUMsSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2xCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsa0JBQWtCLENBQUMsZUFBZ0M7UUFDakQsSUFBSSxDQUFDLEtBQUssR0FBRyxlQUFlLENBQUM7SUFDL0IsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixNQUFNO1FBQ0osSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN2QixNQUFNLElBQUksZ0NBQXFCLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUN2RCxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzNCLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsaUJBQWlCO1FBQ2YsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7Q0FDRjtBQXJWRCxrQ0FxVkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVIYXNoIH0gZnJvbSAnY3J5cHRvJztcbmltcG9ydCB7IEJhc2VDb2luIGFzIENvaW5Db25maWcgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCBCaWdOdW1iZXIgZnJvbSAnYmlnbnVtYmVyLmpzJztcbmltcG9ydCB7IHByb3RvY29sIH0gZnJvbSAnLi4vLi4vcmVzb3VyY2VzL3Byb3RvYnVmL3Ryb24nO1xuaW1wb3J0IHtcbiAgQmFzZUtleSxcbiAgQmFzZVRyYW5zYWN0aW9uLFxuICBFeHRlbmRUcmFuc2FjdGlvbkVycm9yLFxuICBQYXJzZVRyYW5zYWN0aW9uRXJyb3IsXG4gIFRyYW5zYWN0aW9uVHlwZSxcbn0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgQ29udHJhY3RUeXBlIH0gZnJvbSAnLi9lbnVtJztcbmltcG9ydCB7XG4gIGRlY29kZVRyYW5zYWN0aW9uLFxuICBkZWNvZGVEYXRhUGFyYW1zLFxuICBnZXRCYXNlNThBZGRyZXNzRnJvbUhleCxcbiAgdG9rZW5NYWlubmV0Q29udHJhY3RBZGRyZXNzZXMsXG4gIHRva2VuVGVzdG5ldENvbnRyYWN0QWRkcmVzc2VzLFxufSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7XG4gIENvbnRyYWN0RW50cnksXG4gIEZyZWV6ZUJhbGFuY2VWMkNvbnRyYWN0LFxuICBSYXdEYXRhLFxuICBUcmFuc2FjdGlvblJlY2VpcHQsXG4gIFRyYW5zZmVyQ29udHJhY3QsXG4gIFRyaWdnZXJTbWFydENvbnRyYWN0LFxuICBWb3RlV2l0bmVzc0NvbnRyYWN0LFxuICBVbmZyZWV6ZUJhbGFuY2VWMkNvbnRyYWN0LFxuICBXaXRoZHJhd0V4cGlyZVVuZnJlZXplQ29udHJhY3QsXG4gIFJlc291cmNlTWFuYWdlbWVudENvbnRyYWN0LFxuICBXaXRoZHJhd0JhbGFuY2VDb250cmFjdCxcbn0gZnJvbSAnLi9pZmFjZSc7XG5cbi8qKlxuICogVHJvbiB0cmFuc2FjdGlvbiBtb2RlbC5cbiAqL1xuZXhwb3J0IGNsYXNzIFRyYW5zYWN0aW9uIGV4dGVuZHMgQmFzZVRyYW5zYWN0aW9uIHtcbiAgLy8gVHJvbiBzcGVjaWZpYyBmaWVsZHNcbiAgcHJvdGVjdGVkIF92YWxpZEZyb206IG51bWJlcjtcbiAgcHJvdGVjdGVkIF92YWxpZFRvOiBudW1iZXI7XG4gIHByb3RlY3RlZCBfaW5wdXRzOiBDb250cmFjdEVudHJ5W107XG4gIHByb3RlY3RlZCBfb3V0cHV0czogQ29udHJhY3RFbnRyeVtdO1xuXG4gIHByaXZhdGUgX2RlY29kZWRSYXdEYXRhSGV4OiBSYXdEYXRhO1xuICBwcml2YXRlIF90cmFuc2FjdGlvbj86IFRyYW5zYWN0aW9uUmVjZWlwdDtcblxuICAvKipcbiAgICogUHVibGljIGNvbnN0cnVjdG9yLlxuICAgKlxuICAgKiBAcGFyYW0gY29pbkNvbmZpZ1xuICAgKiBAcGFyYW0gcmF3VHJhbnNhY3Rpb25cbiAgICovXG4gIGNvbnN0cnVjdG9yKGNvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+LCByYXdUcmFuc2FjdGlvbj86IFRyYW5zYWN0aW9uUmVjZWlwdCkge1xuICAgIHN1cGVyKGNvaW5Db25maWcpO1xuICAgIGlmIChyYXdUcmFuc2FjdGlvbikge1xuICAgICAgaWYgKCFyYXdUcmFuc2FjdGlvbi50eElEKSB7XG4gICAgICAgIHRocm93IG5ldyBQYXJzZVRyYW5zYWN0aW9uRXJyb3IoJ1RyYW5zYWN0aW9uIGhhcyBubyBpZCcpO1xuICAgICAgfVxuICAgICAgdGhpcy5faWQgPSByYXdUcmFuc2FjdGlvbi50eElEO1xuICAgICAgdGhpcy5fdHJhbnNhY3Rpb24gPSByYXdUcmFuc2FjdGlvbjtcbiAgICAgIHRoaXMuX2RlY29kZWRSYXdEYXRhSGV4ID0gZGVjb2RlVHJhbnNhY3Rpb24ocmF3VHJhbnNhY3Rpb24ucmF3X2RhdGFfaGV4KTtcblxuICAgICAgLy8gRGVzdGluYXRpb24gZGVwZW5kcyBvbiB0aGUgY29udHJhY3QgdHlwZVxuICAgICAgdGhpcy5yZWNvcmRSYXdEYXRhRmllbGRzKHRoaXMuX2RlY29kZWRSYXdEYXRhSGV4KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUGFyc2UgdGhlIHRyYW5zYWN0aW9uIHJhdyBkYXRhIGFuZCByZWNvcmQgdGhlIG1vc3QgaW1wb3J0YW50IGZpZWxkcy5cbiAgICpcbiAgICogQHBhcmFtIHJhd0RhdGEgT2JqZWN0IGZyb20gYSB0cm9uIHRyYW5zYWN0aW9uXG4gICAqL1xuICBwcml2YXRlIHJlY29yZFJhd0RhdGFGaWVsZHMocmF3RGF0YTogUmF3RGF0YSkge1xuICAgIC8vIENvbnRyYWN0LWFnbm9zdGljIGZpZWxkc1xuICAgIHRoaXMuX3ZhbGlkRnJvbSA9IHJhd0RhdGEudGltZXN0YW1wO1xuICAgIHRoaXMuX3ZhbGlkVG8gPSByYXdEYXRhLmV4cGlyYXRpb247XG5cbiAgICBsZXQgb3V0cHV0OiBDb250cmFjdEVudHJ5LCBpbnB1dDogQ29udHJhY3RFbnRyeTtcbiAgICAvLyBDb250cmFjdC1zcGVjaWZpYyBmaWVsZHNcbiAgICBzd2l0Y2ggKHJhd0RhdGEuY29udHJhY3RUeXBlKSB7XG4gICAgICBjYXNlIENvbnRyYWN0VHlwZS5UcmFuc2ZlcjpcbiAgICAgICAgdGhpcy5fdHlwZSA9IFRyYW5zYWN0aW9uVHlwZS5TZW5kO1xuICAgICAgICBjb25zdCB2YWx1ZSA9IG5ldyBCaWdOdW1iZXIoKHJhd0RhdGEuY29udHJhY3RbMF0gYXMgVHJhbnNmZXJDb250cmFjdCkucGFyYW1ldGVyLnZhbHVlLmFtb3VudCkudG9GaXhlZCgwKTtcbiAgICAgICAgb3V0cHV0ID0ge1xuICAgICAgICAgIGFkZHJlc3M6IChyYXdEYXRhLmNvbnRyYWN0WzBdIGFzIFRyYW5zZmVyQ29udHJhY3QpLnBhcmFtZXRlci52YWx1ZS50b19hZGRyZXNzLFxuICAgICAgICAgIHZhbHVlLFxuICAgICAgICB9O1xuICAgICAgICBpbnB1dCA9IHtcbiAgICAgICAgICBhZGRyZXNzOiAocmF3RGF0YS5jb250cmFjdFswXSBhcyBUcmFuc2ZlckNvbnRyYWN0KS5wYXJhbWV0ZXIudmFsdWUub3duZXJfYWRkcmVzcyxcbiAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgfTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIENvbnRyYWN0VHlwZS5BY2NvdW50UGVybWlzc2lvblVwZGF0ZTpcbiAgICAgICAgdGhpcy5fdHlwZSA9IFRyYW5zYWN0aW9uVHlwZS5XYWxsZXRJbml0aWFsaXphdGlvbjtcbiAgICAgICAgb3V0cHV0ID0ge1xuICAgICAgICAgIGFkZHJlc3M6IChyYXdEYXRhLmNvbnRyYWN0IGFzIGFueSkub3duZXJfYWRkcmVzcyxcbiAgICAgICAgICB2YWx1ZTogJzAnLFxuICAgICAgICB9O1xuICAgICAgICBpbnB1dCA9IHtcbiAgICAgICAgICBhZGRyZXNzOiAocmF3RGF0YS5jb250cmFjdCBhcyBhbnkpLm93bmVyX2FkZHJlc3MsXG4gICAgICAgICAgdmFsdWU6ICcwJyxcbiAgICAgICAgfTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIENvbnRyYWN0VHlwZS5UcmlnZ2VyU21hcnRDb250cmFjdDpcbiAgICAgICAgdGhpcy5fdHlwZSA9IFRyYW5zYWN0aW9uVHlwZS5Db250cmFjdENhbGw7XG4gICAgICAgIGNvbnN0IGNvbnRyYWN0Q2FsbFZhbHVlcyA9IChyYXdEYXRhLmNvbnRyYWN0WzBdIGFzIFRyaWdnZXJTbWFydENvbnRyYWN0KS5wYXJhbWV0ZXIudmFsdWU7XG4gICAgICAgIGNvbnN0IGNvbnRyYWN0QWRkcmVzcyA9IGNvbnRyYWN0Q2FsbFZhbHVlcy5jb250cmFjdF9hZGRyZXNzO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgdG9rZW5NYWlubmV0Q29udHJhY3RBZGRyZXNzZXMuaW5jbHVkZXMoY29udHJhY3RBZGRyZXNzKSB8fFxuICAgICAgICAgIHRva2VuVGVzdG5ldENvbnRyYWN0QWRkcmVzc2VzLmluY2x1ZGVzKGNvbnRyYWN0QWRkcmVzcylcbiAgICAgICAgKSB7XG4gICAgICAgICAgLy8gdGhpcyBpcyB0aGVuIGEgdG9rZW4gc21hcnQgY29udHJhY3QgdHJhbnNhY3Rpb24gYW5kIHRoZSBkYXRhIG11c3QgYmUgZGVjb2RlZFxuICAgICAgICAgIGNvbnN0IHR5cGVzID0gWydhZGRyZXNzJywgJ3VpbnQyNTYnXTtcbiAgICAgICAgICBjb25zdCBkYXRhID0gQnVmZmVyLmZyb20oY29udHJhY3RDYWxsVmFsdWVzLmRhdGEsICdiYXNlNjQnKS50b1N0cmluZygnaGV4Jyk7XG4gICAgICAgICAgY29uc3QgZGVjb2RlZERhdGEgPSBkZWNvZGVEYXRhUGFyYW1zKHR5cGVzLCBkYXRhKTtcbiAgICAgICAgICBjb25zdCByZWNpcGllbnRfYWRkcmVzcyA9IGdldEJhc2U1OEFkZHJlc3NGcm9tSGV4KGRlY29kZWREYXRhWzBdKTtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IGRlY29kZWREYXRhWzFdLnRvU3RyaW5nKCk7XG4gICAgICAgICAgb3V0cHV0ID0ge1xuICAgICAgICAgICAgYWRkcmVzczogcmVjaXBpZW50X2FkZHJlc3MsXG4gICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICB9O1xuICAgICAgICAgIGlucHV0ID0ge1xuICAgICAgICAgICAgYWRkcmVzczogY29udHJhY3RDYWxsVmFsdWVzLm93bmVyX2FkZHJlc3MsXG4gICAgICAgICAgICBjb250cmFjdEFkZHJlc3MsXG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBvdXRwdXQgPSB7XG4gICAgICAgICAgYWRkcmVzczogY29udHJhY3RDYWxsVmFsdWVzLm93bmVyX2FkZHJlc3MsXG4gICAgICAgICAgdmFsdWU6ICcwJyxcbiAgICAgICAgfTtcbiAgICAgICAgaW5wdXQgPSB7XG4gICAgICAgICAgYWRkcmVzczogY29udHJhY3RDYWxsVmFsdWVzLm93bmVyX2FkZHJlc3MsXG4gICAgICAgICAgY29udHJhY3RBZGRyZXNzLFxuICAgICAgICAgIGRhdGE6IGNvbnRyYWN0Q2FsbFZhbHVlcy5kYXRhLFxuICAgICAgICAgIHZhbHVlOiAnMCcsXG4gICAgICAgIH07XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBDb250cmFjdFR5cGUuRnJlZXplQmFsYW5jZVYyOlxuICAgICAgICB0aGlzLl90eXBlID0gVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdBY3RpdmF0ZTtcbiAgICAgICAgY29uc3QgZnJlZXplVmFsdWUgPSAocmF3RGF0YS5jb250cmFjdFswXSBhcyBGcmVlemVCYWxhbmNlVjJDb250cmFjdCkucGFyYW1ldGVyLnZhbHVlO1xuICAgICAgICBvdXRwdXQgPSB7XG4gICAgICAgICAgYWRkcmVzczogZnJlZXplVmFsdWUub3duZXJfYWRkcmVzcyxcbiAgICAgICAgICB2YWx1ZTogZnJlZXplVmFsdWUuZnJvemVuX2JhbGFuY2UudG9TdHJpbmcoKSxcbiAgICAgICAgfTtcbiAgICAgICAgaW5wdXQgPSB7XG4gICAgICAgICAgYWRkcmVzczogZnJlZXplVmFsdWUub3duZXJfYWRkcmVzcyxcbiAgICAgICAgICB2YWx1ZTogZnJlZXplVmFsdWUuZnJvemVuX2JhbGFuY2UudG9TdHJpbmcoKSxcbiAgICAgICAgfTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIENvbnRyYWN0VHlwZS5Wb3RlV2l0bmVzczpcbiAgICAgICAgdGhpcy5fdHlwZSA9IFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nVm90ZTtcbiAgICAgICAgY29uc3Qgdm90ZVZhbHVlcyA9IChyYXdEYXRhLmNvbnRyYWN0WzBdIGFzIFZvdGVXaXRuZXNzQ29udHJhY3QpLnBhcmFtZXRlci52YWx1ZTtcblxuICAgICAgICAvLyBDYWxjdWxhdGUgdG90YWwgdm90ZSBjb3VudFxuICAgICAgICBjb25zdCB0b3RhbFZvdGVDb3VudCA9IHZvdGVWYWx1ZXMudm90ZXMucmVkdWNlKChzdW0sIHZvdGUpID0+IHN1bSArIHZvdGUudm90ZV9jb3VudCwgMCk7XG5cbiAgICAgICAgb3V0cHV0ID0ge1xuICAgICAgICAgIGFkZHJlc3M6IHZvdGVWYWx1ZXMub3duZXJfYWRkcmVzcyxcbiAgICAgICAgICB2YWx1ZTogdG90YWxWb3RlQ291bnQudG9TdHJpbmcoKSxcbiAgICAgICAgfTtcbiAgICAgICAgaW5wdXQgPSB7XG4gICAgICAgICAgYWRkcmVzczogdm90ZVZhbHVlcy5vd25lcl9hZGRyZXNzLFxuICAgICAgICAgIHZhbHVlOiB0b3RhbFZvdGVDb3VudC50b1N0cmluZygpLFxuICAgICAgICB9O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgQ29udHJhY3RUeXBlLlVuZnJlZXplQmFsYW5jZVYyOlxuICAgICAgICB0aGlzLl90eXBlID0gVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdEZWFjdGl2YXRlO1xuICAgICAgICBjb25zdCB1bmZyZWV6ZVZhbHVlcyA9IChyYXdEYXRhLmNvbnRyYWN0WzBdIGFzIFVuZnJlZXplQmFsYW5jZVYyQ29udHJhY3QpLnBhcmFtZXRlci52YWx1ZTtcbiAgICAgICAgb3V0cHV0ID0ge1xuICAgICAgICAgIGFkZHJlc3M6IHVuZnJlZXplVmFsdWVzLm93bmVyX2FkZHJlc3MsXG4gICAgICAgICAgdmFsdWU6IHVuZnJlZXplVmFsdWVzLnVuZnJlZXplX2JhbGFuY2UudG9TdHJpbmcoKSxcbiAgICAgICAgfTtcbiAgICAgICAgaW5wdXQgPSB7XG4gICAgICAgICAgYWRkcmVzczogdW5mcmVlemVWYWx1ZXMub3duZXJfYWRkcmVzcyxcbiAgICAgICAgICB2YWx1ZTogdW5mcmVlemVWYWx1ZXMudW5mcmVlemVfYmFsYW5jZS50b1N0cmluZygpLFxuICAgICAgICB9O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgQ29udHJhY3RUeXBlLldpdGhkcmF3RXhwaXJlVW5mcmVlemU6XG4gICAgICAgIHRoaXMuX3R5cGUgPSBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ1dpdGhkcmF3O1xuICAgICAgICBjb25zdCB3aXRoZHJhd1ZhbHVlcyA9IChyYXdEYXRhLmNvbnRyYWN0WzBdIGFzIFdpdGhkcmF3RXhwaXJlVW5mcmVlemVDb250cmFjdCkucGFyYW1ldGVyLnZhbHVlO1xuICAgICAgICBvdXRwdXQgPSB7XG4gICAgICAgICAgYWRkcmVzczogd2l0aGRyYXdWYWx1ZXMub3duZXJfYWRkcmVzcyxcbiAgICAgICAgICB2YWx1ZTogJzAnLCAvLyBubyB2YWx1ZSBmaWVsZFxuICAgICAgICB9O1xuICAgICAgICBpbnB1dCA9IHtcbiAgICAgICAgICBhZGRyZXNzOiB3aXRoZHJhd1ZhbHVlcy5vd25lcl9hZGRyZXNzLFxuICAgICAgICAgIHZhbHVlOiAnMCcsXG4gICAgICAgIH07XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBDb250cmFjdFR5cGUuV2l0aGRyYXdCYWxhbmNlOlxuICAgICAgICB0aGlzLl90eXBlID0gVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdDbGFpbTtcbiAgICAgICAgY29uc3Qgd2l0aGRyYXdCYWxhbmNlVmFsdWUgPSAocmF3RGF0YS5jb250cmFjdFswXSBhcyBXaXRoZHJhd0JhbGFuY2VDb250cmFjdCkucGFyYW1ldGVyLnZhbHVlO1xuICAgICAgICBvdXRwdXQgPSB7XG4gICAgICAgICAgYWRkcmVzczogd2l0aGRyYXdCYWxhbmNlVmFsdWUub3duZXJfYWRkcmVzcyxcbiAgICAgICAgICB2YWx1ZTogJzAnLCAvLyBubyB2YWx1ZSBmaWVsZFxuICAgICAgICB9O1xuICAgICAgICBpbnB1dCA9IHtcbiAgICAgICAgICBhZGRyZXNzOiB3aXRoZHJhd0JhbGFuY2VWYWx1ZS5vd25lcl9hZGRyZXNzLFxuICAgICAgICAgIHZhbHVlOiAnMCcsXG4gICAgICAgIH07XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBDb250cmFjdFR5cGUuRGVsZWdhdGVSZXNvdXJjZUNvbnRyYWN0OlxuICAgICAgICB0aGlzLl90eXBlID0gVHJhbnNhY3Rpb25UeXBlLkRlbGVnYXRlUmVzb3VyY2U7XG4gICAgICAgIGNvbnN0IGRlbGVnYXRlVmFsdWUgPSAocmF3RGF0YS5jb250cmFjdFswXSBhcyBSZXNvdXJjZU1hbmFnZW1lbnRDb250cmFjdCkucGFyYW1ldGVyLnZhbHVlO1xuICAgICAgICBvdXRwdXQgPSB7XG4gICAgICAgICAgYWRkcmVzczogZGVsZWdhdGVWYWx1ZS5yZWNlaXZlcl9hZGRyZXNzLFxuICAgICAgICAgIHZhbHVlOiBkZWxlZ2F0ZVZhbHVlLmJhbGFuY2UudG9TdHJpbmcoKSxcbiAgICAgICAgfTtcbiAgICAgICAgaW5wdXQgPSB7XG4gICAgICAgICAgYWRkcmVzczogZGVsZWdhdGVWYWx1ZS5vd25lcl9hZGRyZXNzLFxuICAgICAgICAgIHZhbHVlOiBkZWxlZ2F0ZVZhbHVlLmJhbGFuY2UudG9TdHJpbmcoKSxcbiAgICAgICAgfTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIENvbnRyYWN0VHlwZS5VbkRlbGVnYXRlUmVzb3VyY2VDb250cmFjdDpcbiAgICAgICAgdGhpcy5fdHlwZSA9IFRyYW5zYWN0aW9uVHlwZS5VbkRlbGVnYXRlUmVzb3VyY2U7XG4gICAgICAgIGNvbnN0IHVuZGVsZWdhdGVWYWx1ZSA9IChyYXdEYXRhLmNvbnRyYWN0WzBdIGFzIFJlc291cmNlTWFuYWdlbWVudENvbnRyYWN0KS5wYXJhbWV0ZXIudmFsdWU7XG4gICAgICAgIG91dHB1dCA9IHtcbiAgICAgICAgICBhZGRyZXNzOiB1bmRlbGVnYXRlVmFsdWUucmVjZWl2ZXJfYWRkcmVzcyxcbiAgICAgICAgICB2YWx1ZTogdW5kZWxlZ2F0ZVZhbHVlLmJhbGFuY2UudG9TdHJpbmcoKSxcbiAgICAgICAgfTtcbiAgICAgICAgaW5wdXQgPSB7XG4gICAgICAgICAgYWRkcmVzczogdW5kZWxlZ2F0ZVZhbHVlLm93bmVyX2FkZHJlc3MsXG4gICAgICAgICAgdmFsdWU6IHVuZGVsZWdhdGVWYWx1ZS5iYWxhbmNlLnRvU3RyaW5nKCksXG4gICAgICAgIH07XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IFBhcnNlVHJhbnNhY3Rpb25FcnJvcignVW5zdXBwb3J0ZWQgY29udHJhY3QgdHlwZScpO1xuICAgIH1cbiAgICB0aGlzLl9pbnB1dHMgPSBbaW5wdXRdO1xuICAgIHRoaXMuX291dHB1dHMgPSBbb3V0cHV0XTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWNhbGN1bGF0ZSBhbmQgdXBkYXRlIHRoZSB0cmFuc2FjdGlvbiBpZC4gVGhpcyBzaG91bGQgYmUgZG9uZSBhZnRlciBjaGFuZ2luZyBhbnkgdHJhbnNhY3Rpb25cbiAgICogZmllbGQgc2luY2UgdGhlIHRoZSBpZCBpcyBhIGhhc2ggb2YgdGhlIHRyYW5zYWN0aW9uIGJvZHkuXG4gICAqL1xuICBwcml2YXRlIHVwZGF0ZUlkKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fdHJhbnNhY3Rpb24pIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZVRyYW5zYWN0aW9uRXJyb3IoJ0VtcHR5IHRyYW5zYWN0aW9uJyk7XG4gICAgfVxuICAgIGNvbnN0IGhleEJ1ZmZlciA9IEJ1ZmZlci5mcm9tKHRoaXMuX3RyYW5zYWN0aW9uLnJhd19kYXRhX2hleCwgJ2hleCcpO1xuICAgIGNvbnN0IG5ld1R4aWQgPSBjcmVhdGVIYXNoKCdzaGEyNTYnKS51cGRhdGUoaGV4QnVmZmVyKS5kaWdlc3QoJ2hleCcpO1xuICAgIHRoaXMuX3RyYW5zYWN0aW9uLnR4SUQgPSBuZXdUeGlkO1xuICAgIHRoaXMuX2lkID0gbmV3VHhpZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHRlbmQgdGhlIGV4cGlyYXRpb24gZGF0ZSBieSB0aGUgZ2l2ZW4gbnVtYmVyIG9mIG1pbGxpc2Vjb25kcy5cbiAgICpcbiAgICogQHBhcmFtIGV4dGVuc2lvbk1zIFRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIGV4dGVuZCB0aGUgZXhwaXJhdGlvbiBieVxuICAgKi9cbiAgZXh0ZW5kRXhwaXJhdGlvbihleHRlbnNpb25NczogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKGV4dGVuc2lvbk1zIDwgMCkge1xuICAgICAgdGhyb3cgbmV3IEV4dGVuZFRyYW5zYWN0aW9uRXJyb3IoJ0ludmFsaWQgZXh0ZW5zaW9uIHJhbmdlLiBNdXN0IGJlIHBvc2l0aXZlIGEgaW50ZWdlcicpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5fdHJhbnNhY3Rpb24pIHtcbiAgICAgIHRocm93IG5ldyBFeHRlbmRUcmFuc2FjdGlvbkVycm9yKCdFbXB0eSB0cmFuc2FjdGlvbicpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl90cmFuc2FjdGlvbi5zaWduYXR1cmUgJiYgdGhpcy5fdHJhbnNhY3Rpb24uc2lnbmF0dXJlLmxlbmd0aCA+IDApIHtcbiAgICAgIHRocm93IG5ldyBFeHRlbmRUcmFuc2FjdGlvbkVycm9yKCdDYW5ub3QgZXh0ZW5kIGEgc2lnbmVkIHRyYW5zYWN0aW9uJyk7XG4gICAgfVxuXG4gICAgY29uc3QgcmF3RGF0YUhleCA9IHRoaXMuX3RyYW5zYWN0aW9uLnJhd19kYXRhX2hleDtcbiAgICBjb25zdCBieXRlcyA9IEJ1ZmZlci5mcm9tKHJhd0RhdGFIZXgsICdoZXgnKTtcbiAgICBsZXQgcmF3O1xuICAgIHRyeSB7XG4gICAgICByYXcgPSBwcm90b2NvbC5UcmFuc2FjdGlvbi5yYXcuZGVjb2RlKGJ5dGVzKTtcbiAgICAgIGNvbnN0IG5ld0V4cGlyYXRpb24gPSBuZXcgQmlnTnVtYmVyKHJhdy5leHBpcmF0aW9uKS5wbHVzKGV4dGVuc2lvbk1zKS50b051bWJlcigpO1xuICAgICAgcmF3LmV4cGlyYXRpb24gPSBuZXdFeHBpcmF0aW9uO1xuICAgICAgY29uc3QgbmV3UmF3RGF0YUhleCA9IEJ1ZmZlci5mcm9tKHByb3RvY29sLlRyYW5zYWN0aW9uLnJhdy5lbmNvZGUocmF3KS5maW5pc2goKSkudG9TdHJpbmcoJ2hleCcpO1xuICAgICAgLy8gU2V0IHRoZSBpbnRlcm5hbCB2YXJpYWJsZXMgdG8gYWNjb3VudCBmb3IgdGhlIG5ldyBleHBpcmF0aW9uIGRhdGVcbiAgICAgIHRoaXMuX3RyYW5zYWN0aW9uLnJhd19kYXRhX2hleCA9IG5ld1Jhd0RhdGFIZXg7XG4gICAgICB0aGlzLl90cmFuc2FjdGlvbi5yYXdfZGF0YS5leHBpcmF0aW9uID0gbmV3RXhwaXJhdGlvbjtcbiAgICAgIHRoaXMuX2RlY29kZWRSYXdEYXRhSGV4ID0gZGVjb2RlVHJhbnNhY3Rpb24obmV3UmF3RGF0YUhleCk7XG4gICAgICB0aGlzLnJlY29yZFJhd0RhdGFGaWVsZHModGhpcy5fZGVjb2RlZFJhd0RhdGFIZXgpO1xuICAgICAgdGhpcy51cGRhdGVJZCgpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRocm93IG5ldyBFeHRlbmRUcmFuc2FjdGlvbkVycm9yKCdUaGVyZSB3YXMgYW4gZXJyb3IgZGVjb2RpbmcgdGhlIGluaXRpYWwgcmF3X2RhdGFfaGV4IGZyb20gdGhlIHNlcmlhbGl6ZWQgdHguJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgc2lnbmF0dXJlcyBhc3NvY2lhdGVkIHdpdGggdGhpcyB0cmFuc2FjdGlvbi5cbiAgICovXG4gIGdldCBzaWduYXR1cmUoKTogc3RyaW5nW10ge1xuICAgIGlmICh0aGlzLl90cmFuc2FjdGlvbiAmJiB0aGlzLl90cmFuc2FjdGlvbi5zaWduYXR1cmUpIHtcbiAgICAgIHJldHVybiB0aGlzLl90cmFuc2FjdGlvbi5zaWduYXR1cmU7XG4gICAgfVxuICAgIHJldHVybiBbXTtcbiAgfVxuICAvKipcbiAgICogR2V0IHRoZSB0aW1lIGluIG1pbGxpc2Vjb25kcyB0aGlzIHRyYW5zYWN0aW9uIGJlY29tZXMgdmFsaWQgYW5kIGNhbiBiZSBicm9hZGNhc3RlZCB0byB0aGVcbiAgICogbmV0d29yay5cbiAgICovXG4gIGdldCB2YWxpZEZyb20oKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fdmFsaWRGcm9tO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgZXhwaXJhdGlvbiB0aW1lIGluIG1pbGxpc2Vjb25kcy5cbiAgICovXG4gIGdldCB2YWxpZFRvKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbGlkVG87XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgZ2V0IG91dHB1dHMoKTogQ29udHJhY3RFbnRyeVtdIHtcbiAgICByZXR1cm4gdGhpcy5fb3V0cHV0cztcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBnZXQgaW5wdXRzKCk6IENvbnRyYWN0RW50cnlbXSB7XG4gICAgcmV0dXJuIHRoaXMuX2lucHV0cztcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBnZXQgc2lnbmFibGVQYXlsb2FkKCk6IEJ1ZmZlciB7XG4gICAgaWYgKCF0aGlzLl90cmFuc2FjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlVHJhbnNhY3Rpb25FcnJvcignRW1wdHkgdHJhbnNhY3Rpb24nKTtcbiAgICB9XG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHRoaXMuX3RyYW5zYWN0aW9uLnJhd19kYXRhX2hleCwgJ2hleCcpO1xuICB9XG5cbiAgYWRkU2lnbmF0dXJlKHNpZ25hdHVyZTogQnVmZmVyKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl90cmFuc2FjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlVHJhbnNhY3Rpb25FcnJvcignRW1wdHkgdHJhbnNhY3Rpb24nKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLl90cmFuc2FjdGlvbi5zaWduYXR1cmUpIHtcbiAgICAgIHRoaXMuX3RyYW5zYWN0aW9uLnNpZ25hdHVyZSA9IFtdO1xuICAgIH1cbiAgICB0aGlzLl90cmFuc2FjdGlvbi5zaWduYXR1cmUucHVzaChzaWduYXR1cmUudG9TdHJpbmcoJ2hleCcpKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBjYW5TaWduKGtleTogQmFzZUtleSk6IGJvb2xlYW4ge1xuICAgIC8vIFRyb24gdHJhbnNhY3Rpb24gZG8gbm90IGNvbnRhaW4gdGhlIG93bmVycyBhY2NvdW50IGFkZHJlc3Mgc28gaXQgaXMgbm90IHBvc3NpYmxlIHRvIGNoZWNrIHRoZVxuICAgIC8vIHByaXZhdGUga2V5IHdpdGggYW55IGJ1dCB0aGUgYWNjb3VudCBtYWluIGFkZHJlc3MuIFRoaXMgaXMgbm90IGVub3VnaCB0byBmYWlsIHRoaXMgY2hlY2ssIHNvXG4gICAgLy8gaXQgaXMgYSBuby1vcC5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoaXMgdHJhbnNhY3Rpb25cbiAgICpcbiAgICogQHBhcmFtIHtUcmFuc2FjdGlvbn0gdHggdHJhbnNhY3Rpb25cbiAgICovXG4gIHNldFRyYW5zYWN0aW9uUmVjZWlwdCh0eDogVHJhbnNhY3Rpb25SZWNlaXB0KSB7XG4gICAgdGhpcy5fdHJhbnNhY3Rpb24gPSB0eDtcbiAgICB0aGlzLnVwZGF0ZUlkKCk7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSB0cmFuc2FjdGlvbiB0eXBlXG4gICAqXG4gICAqIEBwYXJhbSB7VHJhbnNhY3Rpb25UeXBlfSB0cmFuc2FjdGlvblR5cGUgVGhlIHRyYW5zYWN0aW9uIHR5cGUgdG8gYmUgc2V0XG4gICAqL1xuICBzZXRUcmFuc2FjdGlvblR5cGUodHJhbnNhY3Rpb25UeXBlOiBUcmFuc2FjdGlvblR5cGUpOiB2b2lkIHtcbiAgICB0aGlzLl90eXBlID0gdHJhbnNhY3Rpb25UeXBlO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHRvSnNvbigpOiBUcmFuc2FjdGlvblJlY2VpcHQge1xuICAgIGlmICghdGhpcy5fdHJhbnNhY3Rpb24pIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZVRyYW5zYWN0aW9uRXJyb3IoJ0VtcHR5IHRyYW5zYWN0aW9uJyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl90cmFuc2FjdGlvbjtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB0b0Jyb2FkY2FzdEZvcm1hdCgpOiBhbnkge1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh0aGlzLnRvSnNvbigpKTtcbiAgfVxufVxuIl19
@@ -1,7 +1,7 @@
1
1
  import BigNumber from 'bignumber.js';
2
2
  import { BaseCoin as CoinConfig } from '@bitgo-beta/statics';
3
- import { BaseKey, BaseTransactionBuilder } from '@bitgo-beta/sdk-core';
4
- import { TransactionReceipt } from './iface';
3
+ import { BaseKey, BaseTransactionBuilder, PublicKey as BasePublicKey } from '@bitgo-beta/sdk-core';
4
+ import { TransactionReceipt, Block } from './iface';
5
5
  import { Address } from './address';
6
6
  import { Transaction } from './transaction';
7
7
  /**
@@ -9,12 +9,49 @@ import { Transaction } from './transaction';
9
9
  */
10
10
  export declare class TransactionBuilder extends BaseTransactionBuilder {
11
11
  private _transaction;
12
+ protected _ownerAddress: string;
13
+ protected _refBlockBytes: string;
14
+ protected _refBlockHash: string;
15
+ protected _expiration: number;
16
+ protected _timestamp: number;
12
17
  /**
13
18
  * Public constructor.
14
19
  *
15
20
  * @param {CoinConfig} _coinConfig Configuration object
16
21
  */
17
22
  constructor(_coinConfig: Readonly<CoinConfig>);
23
+ /** @inheritdoc */
24
+ protected get transaction(): Transaction;
25
+ /** @inheritdoc */
26
+ protected set transaction(transaction: Transaction);
27
+ /**
28
+ * Set the source address for the transaction
29
+ *
30
+ * @param {Address} address The source address
31
+ * @returns the builder with the new parameter set
32
+ */
33
+ source(address: Address): this;
34
+ /**
35
+ * Set the timestamp for the transaction
36
+ *
37
+ * @param {number} time the timestamp in milliseconds
38
+ * @returns the builder with the new parameter set
39
+ */
40
+ timestamp(time: number): this;
41
+ /**
42
+ * Set the block values,
43
+ *
44
+ * @param {Block} block the object containing number and hash of the block
45
+ * @returns the builder with the new parameter set
46
+ */
47
+ block(block: Block): this;
48
+ /**
49
+ * Set the expiration time for the transaction, set timestamp if it was not set previously
50
+ *
51
+ * @param {number} time the expiration time in milliseconds
52
+ * @returns the builder with the new parameter set
53
+ */
54
+ expiration(time: number): this;
18
55
  /**
19
56
  * Parse transaction takes in raw JSON directly from the node.
20
57
  *
@@ -25,6 +62,8 @@ export declare class TransactionBuilder extends BaseTransactionBuilder {
25
62
  /** @inheritdoc */
26
63
  protected signImplementation(key: BaseKey): Transaction;
27
64
  protected applySignature(key: BaseKey): Transaction;
65
+ /** @inheritDoc */
66
+ addSignature(publicKey: BasePublicKey, signature: Buffer): void;
28
67
  /** @inheritdoc */
29
68
  protected buildImplementation(): Promise<Transaction>;
30
69
  initBuilder(tx: TransactionReceipt | string): void;
@@ -39,6 +78,11 @@ export declare class TransactionBuilder extends BaseTransactionBuilder {
39
78
  validateValue(value: BigNumber): void;
40
79
  /** @inheritdoc */
41
80
  validateAddress(address: Address): void;
81
+ /**
82
+ * Helper method to validate the resource type
83
+ * @param resource The resource type to be validated
84
+ */
85
+ validateResource(resource: string): void;
42
86
  /** @inheritdoc */
43
87
  validateKey(key: BaseKey): void;
44
88
  /**
@@ -57,9 +101,12 @@ export declare class TransactionBuilder extends BaseTransactionBuilder {
57
101
  validateRawTransaction(rawTransaction: TransactionReceipt | string): void;
58
102
  /** @inheritdoc */
59
103
  validateTransaction(transaction: Transaction): void;
60
- /** @inheritdoc */
61
- protected get transaction(): Transaction;
62
- /** @inheritdoc */
63
- protected set transaction(transaction: Transaction);
104
+ /**
105
+ * Validate the expiration time of the transaction
106
+ *
107
+ * @param {number} value The expiration time in milliseconds
108
+ * @throws {InvalidParameterValueError} If the expiration time is invalid
109
+ */
110
+ validateExpirationTime(value: number): void;
64
111
  }
65
112
  //# sourceMappingURL=transactionBuilder.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"transactionBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/transactionBuilder.ts"],"names":[],"mappings":"AAEA,OAAO,SAAS,MAAM,cAAc,CAAC;AACrC,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EACL,OAAO,EACP,sBAAsB,EAKvB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAG5C;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,sBAAsB;IAE5D,OAAO,CAAC,YAAY,CAAc;IAClC;;;;OAIG;gBACS,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAI7C;;;;;OAKG;IACH,SAAS,CAAC,kBAAkB,CAAC,cAAc,EAAE,kBAAkB,GAAG,MAAM,GAAG,WAAW;IAWtF,kBAAkB;IAClB,SAAS,CAAC,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,WAAW;IAWvD,SAAS,CAAC,cAAc,CAAC,GAAG,EAAE,OAAO,GAAG,WAAW;IAuBnD,kBAAkB;cACF,mBAAmB,IAAI,OAAO,CAAC,WAAW,CAAC;IAQ3D,WAAW,CAAC,EAAE,EAAE,kBAAkB,GAAG,MAAM;IAI3C;;;;;OAKG;IACH,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAIxC,kBAAkB;IAClB,aAAa,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI;IAWrC,kBAAkB;IAClB,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAOvC,kBAAkB;IAClB,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI;IAQ/B;;;;;;;;;;;;OAYG;IACH,sBAAsB,CAAC,cAAc,EAAE,kBAAkB,GAAG,MAAM,GAAG,IAAI;IA2CzE,kBAAkB;IAClB,mBAAmB,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI;IAQnD,kBAAkB;IAClB,SAAS,KAAK,WAAW,IAAI,WAAW,CAEvC;IAED,kBAAkB;IAClB,SAAS,KAAK,WAAW,CAAC,WAAW,EAAE,WAAW,EAEjD;CACF"}
1
+ {"version":3,"file":"transactionBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/transactionBuilder.ts"],"names":[],"mappings":"AAEA,OAAO,SAAS,MAAM,cAAc,CAAC;AACrC,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EACL,OAAO,EACP,sBAAsB,EAItB,SAAS,IAAI,aAAa,EAI3B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,kBAAkB,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASpC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAG5C;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,sBAAsB;IAE5D,OAAO,CAAC,YAAY,CAAc;IAClC,SAAS,CAAC,aAAa,EAAE,MAAM,CAAC;IAChC,SAAS,CAAC,cAAc,EAAE,MAAM,CAAC;IACjC,SAAS,CAAC,aAAa,EAAE,MAAM,CAAC;IAChC,SAAS,CAAC,WAAW,EAAE,MAAM,CAAC;IAC9B,SAAS,CAAC,UAAU,EAAE,MAAM,CAAC;IAE7B;;;;OAIG;gBACS,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAI7C,kBAAkB;IAClB,SAAS,KAAK,WAAW,IAAI,WAAW,CAEvC;IAED,kBAAkB;IAClB,SAAS,KAAK,WAAW,CAAC,WAAW,EAAE,WAAW,EAEjD;IAED;;;;;OAKG;IACH,MAAM,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAM9B;;;;;OAKG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAK7B;;;;;OAKG;IACH,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IASzB;;;;;OAKG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAU9B;;;;;OAKG;IACH,SAAS,CAAC,kBAAkB,CAAC,cAAc,EAAE,kBAAkB,GAAG,MAAM,GAAG,WAAW;IAWtF,kBAAkB;IAClB,SAAS,CAAC,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,WAAW;IAWvD,SAAS,CAAC,cAAc,CAAC,GAAG,EAAE,OAAO,GAAG,WAAW;IAuBnD,kBAAkB;IAClB,YAAY,CAAC,SAAS,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAI/D,kBAAkB;cACF,mBAAmB,IAAI,OAAO,CAAC,WAAW,CAAC;IAQ3D,WAAW,CAAC,EAAE,EAAE,kBAAkB,GAAG,MAAM;IAI3C;;;;;OAKG;IACH,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAIxC,kBAAkB;IAClB,aAAa,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI;IAWrC,kBAAkB;IAClB,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAOvC;;;OAGG;IACH,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAMxC,kBAAkB;IAClB,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI;IAQ/B;;;;;;;;;;;;OAYG;IACH,sBAAsB,CAAC,cAAc,EAAE,kBAAkB,GAAG,MAAM,GAAG,IAAI;IA2CzE,kBAAkB;IAClB,mBAAmB,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI;IAQnD;;;;;OAKG;IACH,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;CAa5C"}