@bitgo-beta/sdk-coin-trx 1.2.3-alpha.317 → 1.2.3-alpha.319

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 (45) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/dist/resources/protobuf/Contract.proto +16 -0
  3. package/dist/resources/protobuf/tron.d.ts +1012 -0
  4. package/dist/resources/protobuf/tron.js +4169 -1231
  5. package/dist/resources/protobuf/tron.proto +4 -0
  6. package/dist/src/lib/contractCallBuilder.d.ts +1 -35
  7. package/dist/src/lib/contractCallBuilder.d.ts.map +1 -1
  8. package/dist/src/lib/contractCallBuilder.js +3 -66
  9. package/dist/src/lib/enum.d.ts +24 -1
  10. package/dist/src/lib/enum.d.ts.map +1 -1
  11. package/dist/src/lib/enum.js +26 -2
  12. package/dist/src/lib/freezeBalanceTxBuilder.d.ts +71 -0
  13. package/dist/src/lib/freezeBalanceTxBuilder.d.ts.map +1 -0
  14. package/dist/src/lib/freezeBalanceTxBuilder.js +211 -0
  15. package/dist/src/lib/iface.d.ts +171 -2
  16. package/dist/src/lib/iface.d.ts.map +1 -1
  17. package/dist/src/lib/iface.js +1 -1
  18. package/dist/src/lib/transaction.d.ts.map +1 -1
  19. package/dist/src/lib/transaction.js +51 -1
  20. package/dist/src/lib/transactionBuilder.d.ts +50 -5
  21. package/dist/src/lib/transactionBuilder.d.ts.map +1 -1
  22. package/dist/src/lib/transactionBuilder.js +83 -8
  23. package/dist/src/lib/unfreezeBalanceTxBuilder.d.ts +65 -0
  24. package/dist/src/lib/unfreezeBalanceTxBuilder.d.ts.map +1 -0
  25. package/dist/src/lib/unfreezeBalanceTxBuilder.js +204 -0
  26. package/dist/src/lib/utils.d.ts +34 -2
  27. package/dist/src/lib/utils.d.ts.map +1 -1
  28. package/dist/src/lib/utils.js +178 -3
  29. package/dist/src/lib/voteWitnessTxBuilder.d.ts +62 -0
  30. package/dist/src/lib/voteWitnessTxBuilder.d.ts.map +1 -0
  31. package/dist/src/lib/voteWitnessTxBuilder.js +219 -0
  32. package/dist/src/lib/withdrawExpireUnfreezeTxBuilder.d.ts +49 -0
  33. package/dist/src/lib/withdrawExpireUnfreezeTxBuilder.d.ts.map +1 -0
  34. package/dist/src/lib/withdrawExpireUnfreezeTxBuilder.js +167 -0
  35. package/dist/src/lib/wrappedBuilder.d.ts +32 -0
  36. package/dist/src/lib/wrappedBuilder.d.ts.map +1 -1
  37. package/dist/src/lib/wrappedBuilder.js +49 -1
  38. package/dist/src/trx.d.ts +0 -2
  39. package/dist/src/trx.d.ts.map +1 -1
  40. package/dist/src/trx.js +5 -6
  41. package/package.json +8 -7
  42. package/resources/protobuf/Contract.proto +16 -0
  43. package/resources/protobuf/tron.d.ts +1012 -0
  44. package/resources/protobuf/tron.js +4169 -1231
  45. package/resources/protobuf/tron.proto +4 -0
@@ -273,6 +273,10 @@ message Transaction {
273
273
  UpdateEnergyLimitContract = 45;
274
274
  AccountPermissionUpdateContract = 46;
275
275
  ClearABIContract = 48;
276
+ UpdateBrokerageContract = 49;
277
+ FreezeBalanceV2Contract = 54;
278
+ UnfreezeBalanceV2Contract = 55;
279
+ WithdrawExpireUnfreezeContract = 56;
276
280
  }
277
281
  ContractType type = 1;
278
282
  google.protobuf.Any parameter = 2;
@@ -3,17 +3,12 @@ import { BaseKey } from '@bitgo-beta/sdk-core';
3
3
  import { TransactionBuilder } from './transactionBuilder';
4
4
  import { Address } from './address';
5
5
  import { Transaction } from './transaction';
6
- import { Block, Fee, TransactionReceipt, TriggerSmartContract } from './iface';
6
+ import { Fee, TransactionReceipt, TriggerSmartContract } from './iface';
7
7
  export declare const MAX_FEE = 5000000000;
8
8
  export declare class ContractCallBuilder extends TransactionBuilder {
9
9
  protected _signingKeys: BaseKey[];
10
10
  private _toContractAddress;
11
11
  private _data;
12
- private _ownerAddress;
13
- private _refBlockBytes;
14
- private _refBlockHash;
15
- private _expiration;
16
- private _timestamp;
17
12
  private _fee;
18
13
  constructor(_coinConfig: Readonly<CoinConfig>);
19
14
  /** @inheritdoc */
@@ -33,13 +28,6 @@ export declare class ContractCallBuilder extends TransactionBuilder {
33
28
  * @param {TriggerSmartContract} contractCall object with transfer data
34
29
  */
35
30
  protected initContractCall(contractCall: TriggerSmartContract): void;
36
- /**
37
- * Set the source address,
38
- *
39
- * @param {Address} address source account
40
- * @returns {ContractCallBuilder} the builder with the new parameter set
41
- */
42
- source(address: Address): this;
43
31
  /**
44
32
  * Set the address of the contract to be called,
45
33
  *
@@ -54,29 +42,8 @@ export declare class ContractCallBuilder extends TransactionBuilder {
54
42
  * @returns {ContractCallBuilder} the builder with the new parameter set
55
43
  */
56
44
  data(data: string): this;
57
- /**
58
- * Set the block values,
59
- *
60
- * @param {Block} block the object containing number and hash of the block
61
- * @returns {ContractCallBuilder} the builder with the new parameter set
62
- */
63
- block(block: Block): this;
64
- /**
65
- * Set the expiration time for the transaction, set also timestamp if it was not set previously
66
- *
67
- * @param {number} time the expiration time in milliseconds
68
- * @returns {ContractCallBuilder} the builder with the new parameter set
69
- */
70
- expiration(time: number): this;
71
45
  /** @inheritdoc */
72
46
  extendValidTo(extensionMs: number): void;
73
- /**
74
- * Set the timestamp for the transaction
75
- *
76
- * @param {number} time the timestamp in milliseconds
77
- * @returns {ContractCallBuilder} the builder with the new parameter set
78
- */
79
- timestamp(time: number): this;
80
47
  /**
81
48
  * Set the fee limit for the transaction
82
49
  *
@@ -91,6 +58,5 @@ export declare class ContractCallBuilder extends TransactionBuilder {
91
58
  validateTransaction(transaction: Transaction): void;
92
59
  /** @inheritdoc */
93
60
  validateMandatoryFields(): void;
94
- validateExpirationTime(value: number): void;
95
61
  }
96
62
  //# sourceMappingURL=contractCallBuilder.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"contractCallBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/contractCallBuilder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAe,MAAM,qBAAqB,CAAC;AAG1E,OAAO,EACL,OAAO,EAMR,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAa/E,eAAO,MAAM,OAAO,aAAa,CAAC;AAElC,qBAAa,mBAAoB,SAAQ,kBAAkB;IACzD,SAAS,CAAC,YAAY,EAAE,OAAO,EAAE,CAAC;IAClC,OAAO,CAAC,kBAAkB,CAAS;IACnC,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,IAAI,CAAM;gBAEN,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAM7C,kBAAkB;cACF,mBAAmB,IAAI,OAAO,CAAC,WAAW,CAAC;IAc3D,kBAAkB;IAClB,SAAS,CAAC,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,WAAW;IAUvD;;;;;OAKG;IACH,WAAW,CAAC,cAAc,EAAE,kBAAkB,GAAG,MAAM,GAAG,IAAI;IAiB9D;;;;OAIG;IACH,SAAS,CAAC,gBAAgB,CAAC,YAAY,EAAE,oBAAoB,GAAG,IAAI;IAcpE;;;;;OAKG;IACH,MAAM,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAM9B;;;;;OAKG;IACH,EAAE,CAAC,eAAe,EAAE,OAAO,GAAG,IAAI;IAMlC;;;;;OAKG;IACH,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAQxB;;;;;OAKG;IACH,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAUzB;;;;;OAKG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAU9B,kBAAkB;IAClB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAoBxC;;;;;OAKG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAK7B;;;;;OAKG;IACH,GAAG,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI;IAYnB,OAAO,CAAC,iBAAiB;IAqBzB,OAAO,CAAC,aAAa;IA2BrB,OAAO,CAAC,eAAe;IAOvB,kBAAkB;IAElB,mBAAmB,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI;IAInD,kBAAkB;IAClB,uBAAuB;IAkBvB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;CAW5C"}
1
+ {"version":3,"file":"contractCallBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/contractCallBuilder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAe,MAAM,qBAAqB,CAAC;AAG1E,OAAO,EACL,OAAO,EAMR,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,GAAG,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAYxE,eAAO,MAAM,OAAO,aAAa,CAAC;AAElC,qBAAa,mBAAoB,SAAQ,kBAAkB;IACzD,SAAS,CAAC,YAAY,EAAE,OAAO,EAAE,CAAC;IAClC,OAAO,CAAC,kBAAkB,CAAS;IACnC,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,IAAI,CAAM;gBAEN,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAM7C,kBAAkB;cACF,mBAAmB,IAAI,OAAO,CAAC,WAAW,CAAC;IAc3D,kBAAkB;IAClB,SAAS,CAAC,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,WAAW;IAUvD;;;;;OAKG;IACH,WAAW,CAAC,cAAc,EAAE,kBAAkB,GAAG,MAAM,GAAG,IAAI;IAiB9D;;;;OAIG;IACH,SAAS,CAAC,gBAAgB,CAAC,YAAY,EAAE,oBAAoB,GAAG,IAAI;IAapE;;;;;OAKG;IACH,EAAE,CAAC,eAAe,EAAE,OAAO,GAAG,IAAI;IAMlC;;;;;OAKG;IACH,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAQxB,kBAAkB;IAClB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAoBxC;;;;;OAKG;IACH,GAAG,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI;IAYnB,OAAO,CAAC,iBAAiB;IAqBzB,OAAO,CAAC,aAAa;IA2BrB,OAAO,CAAC,eAAe;IAOvB,kBAAkB;IAElB,mBAAmB,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI;IAInD,kBAAkB;IAClB,uBAAuB;CAiBxB"}
@@ -12,8 +12,6 @@ const transactionBuilder_1 = require("./transactionBuilder");
12
12
  const transaction_1 = require("./transaction");
13
13
  const utils_1 = require("./utils");
14
14
  var ContractType = tron_1.protocol.Transaction.Contract.ContractType;
15
- const DEFAULT_EXPIRATION = 3600000; // one hour
16
- const MAX_DURATION = 31536000000; // one year
17
15
  exports.MAX_FEE = 5000000000; // 5e9 = 5000 TRX acording https://developers.tron.network/docs/setting-a-fee-limit-on-deployexecution
18
16
  class ContractCallBuilder extends transactionBuilder_1.TransactionBuilder {
19
17
  constructor(_coinConfig) {
@@ -82,18 +80,6 @@ class ContractCallBuilder extends transactionBuilder_1.TransactionBuilder {
82
80
  this.source({ address: (0, utils_1.getBase58AddressFromHex)(owner_address) });
83
81
  }
84
82
  }
85
- // region Contract Call fields
86
- /**
87
- * Set the source address,
88
- *
89
- * @param {Address} address source account
90
- * @returns {ContractCallBuilder} the builder with the new parameter set
91
- */
92
- source(address) {
93
- this.validateAddress(address);
94
- this._ownerAddress = (0, utils_1.getHexAddressFromBase58Address)(address.address);
95
- return this;
96
- }
97
83
  /**
98
84
  * Set the address of the contract to be called,
99
85
  *
@@ -118,34 +104,6 @@ class ContractCallBuilder extends transactionBuilder_1.TransactionBuilder {
118
104
  this._data = data;
119
105
  return this;
120
106
  }
121
- /**
122
- * Set the block values,
123
- *
124
- * @param {Block} block the object containing number and hash of the block
125
- * @returns {ContractCallBuilder} the builder with the new parameter set
126
- */
127
- block(block) {
128
- const blockBytes = Buffer.alloc(8);
129
- blockBytes.writeInt32BE(block.number, 4);
130
- this._refBlockBytes = blockBytes.slice(6, 8).toString('hex');
131
- this._refBlockHash = Buffer.from(block.hash, 'hex').slice(8, 16).toString('hex');
132
- return this;
133
- }
134
- /**
135
- * Set the expiration time for the transaction, set also timestamp if it was not set previously
136
- *
137
- * @param {number} time the expiration time in milliseconds
138
- * @returns {ContractCallBuilder} the builder with the new parameter set
139
- */
140
- expiration(time) {
141
- if (this.transaction.id) {
142
- throw new sdk_core_1.ExtendTransactionError('Expiration is already set, it can only be extended');
143
- }
144
- this._timestamp = this._timestamp || Date.now();
145
- this.validateExpirationTime(time);
146
- this._expiration = time;
147
- return this;
148
- }
149
107
  /** @inheritdoc */
150
108
  extendValidTo(extensionMs) {
151
109
  if (this.transaction.signature && this.transaction.signature.length > 0) {
@@ -154,7 +112,7 @@ class ContractCallBuilder extends transactionBuilder_1.TransactionBuilder {
154
112
  if (extensionMs <= 0) {
155
113
  throw new Error('Value cannot be below zero');
156
114
  }
157
- if (extensionMs > MAX_DURATION) {
115
+ if (extensionMs > utils_1.TRANSACTION_MAX_EXPIRATION) {
158
116
  throw new sdk_core_1.ExtendTransactionError('The expiration cannot be extended more than one year');
159
117
  }
160
118
  if (this._expiration) {
@@ -164,16 +122,6 @@ class ContractCallBuilder extends transactionBuilder_1.TransactionBuilder {
164
122
  throw new Error('There is not expiration to extend');
165
123
  }
166
124
  }
167
- /**
168
- * Set the timestamp for the transaction
169
- *
170
- * @param {number} time the timestamp in milliseconds
171
- * @returns {ContractCallBuilder} the builder with the new parameter set
172
- */
173
- timestamp(time) {
174
- this._timestamp = time;
175
- return this;
176
- }
177
125
  /**
178
126
  * Set the fee limit for the transaction
179
127
  *
@@ -228,7 +176,7 @@ class ContractCallBuilder extends transactionBuilder_1.TransactionBuilder {
228
176
  const raw = {
229
177
  refBlockBytes: Buffer.from(this._refBlockBytes, 'hex'),
230
178
  refBlockHash: Buffer.from(this._refBlockHash, 'hex'),
231
- expiration: this._expiration || Date.now() + DEFAULT_EXPIRATION,
179
+ expiration: this._expiration || Date.now() + utils_1.TRANSACTION_DEFAULT_EXPIRATION,
232
180
  timestamp: this._timestamp || Date.now(),
233
181
  contract: [txContract],
234
182
  feeLimit: parseInt(this._fee.feeLimit, 10),
@@ -265,17 +213,6 @@ class ContractCallBuilder extends transactionBuilder_1.TransactionBuilder {
265
213
  throw new sdk_core_1.BuildTransactionError('Missing fee');
266
214
  }
267
215
  }
268
- validateExpirationTime(value) {
269
- if (value < this._timestamp) {
270
- throw new sdk_core_1.InvalidParameterValueError('Expiration must be greater than timestamp');
271
- }
272
- if (value < Date.now()) {
273
- throw new sdk_core_1.InvalidParameterValueError('Expiration must be greater than current time');
274
- }
275
- if (value - this._timestamp > MAX_DURATION) {
276
- throw new sdk_core_1.InvalidParameterValueError('Expiration must not be greater than one year');
277
- }
278
- }
279
216
  }
280
217
  exports.ContractCallBuilder = ContractCallBuilder;
281
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udHJhY3RDYWxsQnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvY29udHJhY3RDYWxsQnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxtQ0FBb0M7QUFFcEMsZ0VBQXFDO0FBQ3JDLHdEQUF5RDtBQUN6RCxtREFPOEI7QUFDOUIsNkRBQTBEO0FBRTFELCtDQUE0QztBQUU1QyxtQ0FNaUI7QUFFakIsSUFBTyxZQUFZLEdBQUcsZUFBUSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDO0FBRWpFLE1BQU0sa0JBQWtCLEdBQUcsT0FBTyxDQUFDLENBQUMsV0FBVztBQUMvQyxNQUFNLFlBQVksR0FBRyxXQUFXLENBQUMsQ0FBQyxXQUFXO0FBQ2hDLFFBQUEsT0FBTyxHQUFHLFVBQVUsQ0FBQyxDQUFDLHNHQUFzRztBQUV6SSxNQUFhLG1CQUFvQixTQUFRLHVDQUFrQjtJQVd6RCxZQUFZLFdBQWlDO1FBQzNDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNuQixJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUkseUJBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRUQsa0JBQWtCO0lBQ1IsS0FBSyxDQUFDLG1CQUFtQjtRQUNqQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUN6QixrQkFBa0I7UUFDbEIsZ0RBQWdEO1FBQ2hELElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDakMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3pCLENBQUM7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUN6QixNQUFNLElBQUksZ0NBQXFCLENBQUMscUNBQXFDLENBQUMsQ0FBQztRQUN6RSxDQUFDO1FBQ0QsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRUQsa0JBQWtCO0lBQ1Isa0JBQWtCLENBQUMsR0FBWTtRQUN2QyxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsR0FBRyxLQUFLLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3ZFLE1BQU0sSUFBSSx1QkFBWSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDM0MsQ0FBQztRQUNELElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRTVCLG1FQUFtRTtRQUNuRSxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDMUIsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsV0FBVyxDQUFDLGNBQTJDO1FBQ3JELElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUM1QyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDbkQsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7UUFDdkIsTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQztRQUNyQyxJQUFJLENBQUMsY0FBYyxHQUFHLE9BQU8sQ0FBQyxlQUFlLENBQUM7UUFDOUMsSUFBSSxDQUFDLGFBQWEsR0FBRyxPQUFPLENBQUMsY0FBYyxDQUFDO1FBQzVDLElBQUksQ0FBQyxXQUFXLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQztRQUN0QyxJQUFJLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUM7UUFDcEMsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsU0FBVSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUM7UUFDeEQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQywwQkFBZSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ2xFLE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUF5QixDQUFDO1FBQ2pFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNwQyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7OztPQUlHO0lBQ08sZ0JBQWdCLENBQUMsWUFBa0M7UUFDM0QsTUFBTSxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsZ0JBQWdCLEVBQUUsR0FBRyxZQUFZLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQztRQUMvRSxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ1QsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsQixDQUFDO1FBQ0QsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBQSwrQkFBdUIsRUFBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNsRSxDQUFDO1FBQ0QsSUFBSSxhQUFhLEVBQUUsQ0FBQztZQUNsQixJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUEsK0JBQXVCLEVBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ25FLENBQUM7SUFDSCxDQUFDO0lBRUQsOEJBQThCO0lBQzlCOzs7OztPQUtHO0lBQ0gsTUFBTSxDQUFDLE9BQWdCO1FBQ3JCLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDOUIsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFBLHNDQUE4QixFQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNyRSxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILEVBQUUsQ0FBQyxlQUF3QjtRQUN6QixJQUFJLENBQUMsZUFBZSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFBLHNDQUE4QixFQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNsRixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILElBQUksQ0FBQyxJQUFZO1FBQ2YsSUFBSSxDQUFDLElBQUEsa0JBQVUsRUFBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3RCLE1BQU0sSUFBSSxxQ0FBMEIsQ0FBQyxJQUFJLEdBQUcsNkJBQTZCLENBQUMsQ0FBQztRQUM3RSxDQUFDO1FBQ0QsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDbEIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxLQUFLLENBQUMsS0FBWTtRQUNoQixNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ25DLFVBQVUsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN6QyxJQUFJLENBQUMsY0FBYyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUU3RCxJQUFJLENBQUMsYUFBYSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVqRixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILFVBQVUsQ0FBQyxJQUFZO1FBQ3JCLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUN4QixNQUFNLElBQUksaUNBQXNCLENBQUMsb0RBQW9ELENBQUMsQ0FBQztRQUN6RixDQUFDO1FBQ0QsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNoRCxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7UUFDeEIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLGFBQWEsQ0FBQyxXQUFtQjtRQUMvQixJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN4RSxNQUFNLElBQUksaUNBQXNCLENBQUMsb0NBQW9DLENBQUMsQ0FBQztRQUN6RSxDQUFDO1FBRUQsSUFBSSxXQUFXLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDckIsTUFBTSxJQUFJLEtBQUssQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO1FBQ2hELENBQUM7UUFFRCxJQUFJLFdBQVcsR0FBRyxZQUFZLEVBQUUsQ0FBQztZQUMvQixNQUFNLElBQUksaUNBQXNCLENBQUMsc0RBQXNELENBQUMsQ0FBQztRQUMzRixDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDckIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztRQUNwRCxDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sSUFBSSxLQUFLLENBQUMsbUNBQW1DLENBQUMsQ0FBQztRQUN2RCxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsU0FBUyxDQUFDLElBQVk7UUFDcEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7UUFDdkIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxHQUFHLENBQUMsR0FBUTtRQUNWLE1BQU0sUUFBUSxHQUFHLElBQUksc0JBQVMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDN0MsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFzQixDQUFDO1FBQzVELElBQUksUUFBUSxDQUFDLEtBQUssRUFBRSxJQUFJLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksUUFBUSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztZQUNsRyxNQUFNLElBQUkscUNBQTBCLENBQUMseUJBQXlCLENBQUMsQ0FBQztRQUNsRSxDQUFDO1FBQ0QsSUFBSSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7UUFDaEIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsWUFBWTtJQUVKLGlCQUFpQjtRQUN2QixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDeEMsTUFBTSxPQUFPLEdBQUcsSUFBQSx5QkFBaUIsRUFBQyxVQUFVLENBQUMsQ0FBQztRQUM5QyxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBeUIsQ0FBQztRQUM3RCxNQUFNLGlCQUFpQixHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUM7UUFDN0MsaUJBQWlCLENBQUMsS0FBSyxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ3ZGLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQy9FLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQzlELGlCQUFpQixDQUFDLFFBQVEsR0FBRyxtREFBbUQsQ0FBQztRQUNqRixRQUFRLENBQUMsSUFBSSxHQUFHLHNCQUFzQixDQUFDO1FBQ3ZDLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ2pELE1BQU0sRUFBRSxHQUFHLElBQUEsbUJBQVUsRUFBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hFLE1BQU0sT0FBTyxHQUF1QjtZQUNsQyxRQUFRLEVBQUUsT0FBTztZQUNqQixZQUFZLEVBQUUsVUFBVTtZQUN4QixJQUFJLEVBQUUsRUFBRTtZQUNSLFNBQVMsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVM7U0FDdEMsQ0FBQztRQUNGLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSx5QkFBVyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUVPLGFBQWE7UUFDbkIsTUFBTSxXQUFXLEdBQUc7WUFDbEIsWUFBWSxFQUFFLElBQUEsa0NBQTBCLEVBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQztZQUM1RCxlQUFlLEVBQUUsSUFBQSxrQ0FBMEIsRUFBQyxJQUFJLENBQUMsa0JBQWtCLENBQUM7WUFDcEUsSUFBSSxFQUFFLElBQUEsa0NBQTBCLEVBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztTQUM3QyxDQUFDO1FBQ0YsTUFBTSxZQUFZLEdBQUcsZUFBUSxDQUFDLG9CQUFvQixDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUMzRSxNQUFNLGFBQWEsR0FBRyxlQUFRLENBQUMsb0JBQW9CLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ2xGLE1BQU0sVUFBVSxHQUFHO1lBQ2pCLElBQUksRUFBRSxZQUFZLENBQUMsb0JBQW9CO1lBQ3ZDLFNBQVMsRUFBRTtnQkFDVCxLQUFLLEVBQUUsYUFBYTtnQkFDcEIsUUFBUSxFQUFFLG1EQUFtRDthQUM5RDtTQUNGLENBQUM7UUFDRixNQUFNLEdBQUcsR0FBRztZQUNWLGFBQWEsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsS0FBSyxDQUFDO1lBQ3RELFlBQVksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsS0FBSyxDQUFDO1lBQ3BELFVBQVUsRUFBRSxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxrQkFBa0I7WUFDL0QsU0FBUyxFQUFFLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUN4QyxRQUFRLEVBQUUsQ0FBQyxVQUFVLENBQUM7WUFDdEIsUUFBUSxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUM7U0FDM0MsQ0FBQztRQUNGLE1BQU0sS0FBSyxHQUFHLGVBQVEsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNuRCxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsZUFBUSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3RGLENBQUM7SUFFTyxlQUFlO1FBQ3JCLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQzdCLE1BQU0sSUFBSSx1QkFBWSxDQUFDLDJCQUEyQixDQUFDLENBQUM7UUFDdEQsQ0FBQztRQUNELElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDL0QsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixvRkFBb0Y7SUFDcEYsbUJBQW1CLENBQUMsV0FBd0I7UUFDMUMsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7SUFDakMsQ0FBQztJQUVELGtCQUFrQjtJQUNsQix1QkFBdUI7UUFDckIsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNoQixNQUFNLElBQUksZ0NBQXFCLENBQUMseUJBQXlCLENBQUMsQ0FBQztRQUM3RCxDQUFDO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN4QixNQUFNLElBQUksZ0NBQXFCLENBQUMsMkJBQTJCLENBQUMsQ0FBQztRQUMvRCxDQUFDO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQzdCLE1BQU0sSUFBSSxnQ0FBcUIsQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFDO1FBQ3pFLENBQUM7UUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUNoRCxNQUFNLElBQUksZ0NBQXFCLENBQUMscUNBQXFDLENBQUMsQ0FBQztRQUN6RSxDQUFDO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNmLE1BQU0sSUFBSSxnQ0FBcUIsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNqRCxDQUFDO0lBQ0gsQ0FBQztJQUVELHNCQUFzQixDQUFDLEtBQWE7UUFDbEMsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQzVCLE1BQU0sSUFBSSxxQ0FBMEIsQ0FBQywyQ0FBMkMsQ0FBQyxDQUFDO1FBQ3BGLENBQUM7UUFDRCxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztZQUN2QixNQUFNLElBQUkscUNBQTBCLENBQUMsOENBQThDLENBQUMsQ0FBQztRQUN2RixDQUFDO1FBQ0QsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLFVBQVUsR0FBRyxZQUFZLEVBQUUsQ0FBQztZQUMzQyxNQUFNLElBQUkscUNBQTBCLENBQUMsOENBQThDLENBQUMsQ0FBQztRQUN2RixDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBeFNELGtEQXdTQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNyZWF0ZUhhc2ggfSBmcm9tICdjcnlwdG8nO1xuaW1wb3J0IHsgQmFzZUNvaW4gYXMgQ29pbkNvbmZpZywgVHJvbk5ldHdvcmsgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCBCaWdOdW1iZXIgZnJvbSAnYmlnbnVtYmVyLmpzJztcbmltcG9ydCB7IHByb3RvY29sIH0gZnJvbSAnLi4vLi4vcmVzb3VyY2VzL3Byb3RvYnVmL3Ryb24nO1xuaW1wb3J0IHtcbiAgQmFzZUtleSxcbiAgQnVpbGRUcmFuc2FjdGlvbkVycm9yLFxuICBFeHRlbmRUcmFuc2FjdGlvbkVycm9yLFxuICBJbnZhbGlkUGFyYW1ldGVyVmFsdWVFcnJvcixcbiAgU2lnbmluZ0Vycm9yLFxuICBUcmFuc2FjdGlvblR5cGUsXG59IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uQnVpbGRlciB9IGZyb20gJy4vdHJhbnNhY3Rpb25CdWlsZGVyJztcbmltcG9ydCB7IEFkZHJlc3MgfSBmcm9tICcuL2FkZHJlc3MnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb24gfSBmcm9tICcuL3RyYW5zYWN0aW9uJztcbmltcG9ydCB7IEJsb2NrLCBGZWUsIFRyYW5zYWN0aW9uUmVjZWlwdCwgVHJpZ2dlclNtYXJ0Q29udHJhY3QgfSBmcm9tICcuL2lmYWNlJztcbmltcG9ydCB7XG4gIGRlY29kZVRyYW5zYWN0aW9uLFxuICBnZXRCYXNlNThBZGRyZXNzRnJvbUhleCxcbiAgZ2V0Qnl0ZUFycmF5RnJvbUhleEFkZHJlc3MsXG4gIGdldEhleEFkZHJlc3NGcm9tQmFzZTU4QWRkcmVzcyxcbiAgaXNWYWxpZEhleCxcbn0gZnJvbSAnLi91dGlscyc7XG5cbmltcG9ydCBDb250cmFjdFR5cGUgPSBwcm90b2NvbC5UcmFuc2FjdGlvbi5Db250cmFjdC5Db250cmFjdFR5cGU7XG5cbmNvbnN0IERFRkFVTFRfRVhQSVJBVElPTiA9IDM2MDAwMDA7IC8vIG9uZSBob3VyXG5jb25zdCBNQVhfRFVSQVRJT04gPSAzMTUzNjAwMDAwMDsgLy8gb25lIHllYXJcbmV4cG9ydCBjb25zdCBNQVhfRkVFID0gNTAwMDAwMDAwMDsgLy8gNWU5ID0gNTAwMCBUUlggYWNvcmRpbmcgaHR0cHM6Ly9kZXZlbG9wZXJzLnRyb24ubmV0d29yay9kb2NzL3NldHRpbmctYS1mZWUtbGltaXQtb24tZGVwbG95ZXhlY3V0aW9uXG5cbmV4cG9ydCBjbGFzcyBDb250cmFjdENhbGxCdWlsZGVyIGV4dGVuZHMgVHJhbnNhY3Rpb25CdWlsZGVyIHtcbiAgcHJvdGVjdGVkIF9zaWduaW5nS2V5czogQmFzZUtleVtdO1xuICBwcml2YXRlIF90b0NvbnRyYWN0QWRkcmVzczogc3RyaW5nO1xuICBwcml2YXRlIF9kYXRhOiBzdHJpbmc7XG4gIHByaXZhdGUgX293bmVyQWRkcmVzczogc3RyaW5nO1xuICBwcml2YXRlIF9yZWZCbG9ja0J5dGVzOiBzdHJpbmc7XG4gIHByaXZhdGUgX3JlZkJsb2NrSGFzaDogc3RyaW5nO1xuICBwcml2YXRlIF9leHBpcmF0aW9uOiBudW1iZXI7XG4gIHByaXZhdGUgX3RpbWVzdGFtcDogbnVtYmVyO1xuICBwcml2YXRlIF9mZWU6IEZlZTtcblxuICBjb25zdHJ1Y3RvcihfY29pbkNvbmZpZzogUmVhZG9ubHk8Q29pbkNvbmZpZz4pIHtcbiAgICBzdXBlcihfY29pbkNvbmZpZyk7XG4gICAgdGhpcy5fc2lnbmluZ0tleXMgPSBbXTtcbiAgICB0aGlzLnRyYW5zYWN0aW9uID0gbmV3IFRyYW5zYWN0aW9uKF9jb2luQ29uZmlnKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgYnVpbGRJbXBsZW1lbnRhdGlvbigpOiBQcm9taXNlPFRyYW5zYWN0aW9uPiB7XG4gICAgdGhpcy5jcmVhdGVUcmFuc2FjdGlvbigpO1xuICAgIC8qKiBAaW5oZXJpdGRvYyAqL1xuICAgIC8vIFRoaXMgbWV0aG9kIG11c3QgYmUgZXh0ZW5kZWQgb24gY2hpbGQgY2xhc3Nlc1xuICAgIGlmICh0aGlzLl9zaWduaW5nS2V5cy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmFwcGx5U2lnbmF0dXJlcygpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy50cmFuc2FjdGlvbi5pZCkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignQSB2YWxpZCB0cmFuc2FjdGlvbiBtdXN0IGhhdmUgYW4gaWQnKTtcbiAgICB9XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLnRyYW5zYWN0aW9uKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBwcm90ZWN0ZWQgc2lnbkltcGxlbWVudGF0aW9uKGtleTogQmFzZUtleSk6IFRyYW5zYWN0aW9uIHtcbiAgICBpZiAodGhpcy5fc2lnbmluZ0tleXMuc29tZSgoc2lnbmluZ0tleSkgPT4gc2lnbmluZ0tleS5rZXkgPT09IGtleS5rZXkpKSB7XG4gICAgICB0aHJvdyBuZXcgU2lnbmluZ0Vycm9yKCdEdXBsaWNhdGVkIGtleScpO1xuICAgIH1cbiAgICB0aGlzLl9zaWduaW5nS2V5cy5wdXNoKGtleSk7XG5cbiAgICAvLyBXZSBrZWVwIHRoaXMgcmV0dXJuIGZvciBjb21wYXRpYmlsaXR5IGJ1dCBpcyBub3QgbWVhbnQgdG8gYmUgdXNlXG4gICAgcmV0dXJuIHRoaXMudHJhbnNhY3Rpb247XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZSB0aGUgdHJhbnNhY3Rpb24gYnVpbGRlciBmaWVsZHMgdXNpbmcgdGhlIHRyYW5zYWN0aW9uIGRhdGFcbiAgICpcbiAgICogQHBhcmFtIHthbnl9IHJhd1RyYW5zYWN0aW9uIHRoZSB0cmFuc2FjdGlvbiBkYXRhIGluIGEgc3RyaW5nIG9yIEpTT04gZm9ybWF0XG4gICAqIEByZXR1cm5zIHtDb250cmFjdENhbGxCdWlsZGVyfSB0aGUgYnVpbGRlciB3aXRoIHRoZSB0cmFuc2FjdGlvbiBkYXRhIHNldFxuICAgKi9cbiAgaW5pdEJ1aWxkZXIocmF3VHJhbnNhY3Rpb246IFRyYW5zYWN0aW9uUmVjZWlwdCB8IHN0cmluZyk6IHRoaXMge1xuICAgIHRoaXMudmFsaWRhdGVSYXdUcmFuc2FjdGlvbihyYXdUcmFuc2FjdGlvbik7XG4gICAgY29uc3QgdHggPSB0aGlzLmZyb21JbXBsZW1lbnRhdGlvbihyYXdUcmFuc2FjdGlvbik7XG4gICAgdGhpcy50cmFuc2FjdGlvbiA9IHR4O1xuICAgIHRoaXMuX3NpZ25pbmdLZXlzID0gW107XG4gICAgY29uc3QgcmF3RGF0YSA9IHR4LnRvSnNvbigpLnJhd19kYXRhO1xuICAgIHRoaXMuX3JlZkJsb2NrQnl0ZXMgPSByYXdEYXRhLnJlZl9ibG9ja19ieXRlcztcbiAgICB0aGlzLl9yZWZCbG9ja0hhc2ggPSByYXdEYXRhLnJlZl9ibG9ja19oYXNoO1xuICAgIHRoaXMuX2V4cGlyYXRpb24gPSByYXdEYXRhLmV4cGlyYXRpb247XG4gICAgdGhpcy5fdGltZXN0YW1wID0gcmF3RGF0YS50aW1lc3RhbXA7XG4gICAgdGhpcy5fZmVlID0geyBmZWVMaW1pdDogcmF3RGF0YS5mZWVfbGltaXQhLnRvU3RyaW5nKCkgfTtcbiAgICB0aGlzLnRyYW5zYWN0aW9uLnNldFRyYW5zYWN0aW9uVHlwZShUcmFuc2FjdGlvblR5cGUuQ29udHJhY3RDYWxsKTtcbiAgICBjb25zdCBjb250cmFjdENhbGwgPSByYXdEYXRhLmNvbnRyYWN0WzBdIGFzIFRyaWdnZXJTbWFydENvbnRyYWN0O1xuICAgIHRoaXMuaW5pdENvbnRyYWN0Q2FsbChjb250cmFjdENhbGwpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemUgdGhlIGNvbnRyYWN0IGNhbGwgc3BlY2lmaWMgZGF0YVxuICAgKlxuICAgKiBAcGFyYW0ge1RyaWdnZXJTbWFydENvbnRyYWN0fSBjb250cmFjdENhbGwgb2JqZWN0IHdpdGggdHJhbnNmZXIgZGF0YVxuICAgKi9cbiAgcHJvdGVjdGVkIGluaXRDb250cmFjdENhbGwoY29udHJhY3RDYWxsOiBUcmlnZ2VyU21hcnRDb250cmFjdCk6IHZvaWQge1xuICAgIGNvbnN0IHsgZGF0YSwgb3duZXJfYWRkcmVzcywgY29udHJhY3RfYWRkcmVzcyB9ID0gY29udHJhY3RDYWxsLnBhcmFtZXRlci52YWx1ZTtcbiAgICBpZiAoZGF0YSkge1xuICAgICAgdGhpcy5kYXRhKGRhdGEpO1xuICAgIH1cbiAgICBpZiAoY29udHJhY3RfYWRkcmVzcykge1xuICAgICAgdGhpcy50byh7IGFkZHJlc3M6IGdldEJhc2U1OEFkZHJlc3NGcm9tSGV4KGNvbnRyYWN0X2FkZHJlc3MpIH0pO1xuICAgIH1cbiAgICBpZiAob3duZXJfYWRkcmVzcykge1xuICAgICAgdGhpcy5zb3VyY2UoeyBhZGRyZXNzOiBnZXRCYXNlNThBZGRyZXNzRnJvbUhleChvd25lcl9hZGRyZXNzKSB9KTtcbiAgICB9XG4gIH1cblxuICAvLyByZWdpb24gQ29udHJhY3QgQ2FsbCBmaWVsZHNcbiAgLyoqXG4gICAqIFNldCB0aGUgc291cmNlIGFkZHJlc3MsXG4gICAqXG4gICAqIEBwYXJhbSB7QWRkcmVzc30gYWRkcmVzcyBzb3VyY2UgYWNjb3VudFxuICAgKiBAcmV0dXJucyB7Q29udHJhY3RDYWxsQnVpbGRlcn0gdGhlIGJ1aWxkZXIgd2l0aCB0aGUgbmV3IHBhcmFtZXRlciBzZXRcbiAgICovXG4gIHNvdXJjZShhZGRyZXNzOiBBZGRyZXNzKTogdGhpcyB7XG4gICAgdGhpcy52YWxpZGF0ZUFkZHJlc3MoYWRkcmVzcyk7XG4gICAgdGhpcy5fb3duZXJBZGRyZXNzID0gZ2V0SGV4QWRkcmVzc0Zyb21CYXNlNThBZGRyZXNzKGFkZHJlc3MuYWRkcmVzcyk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBhZGRyZXNzIG9mIHRoZSBjb250cmFjdCB0byBiZSBjYWxsZWQsXG4gICAqXG4gICAqIEBwYXJhbSB7QWRkcmVzc30gY29udHJhY3RBZGRyZXNzIHRoZSBjb250cmFjdCBhZGRyZXNzXG4gICAqIEByZXR1cm5zIHtDb250cmFjdENhbGxCdWlsZGVyfSB0aGUgYnVpbGRlciB3aXRoIHRoZSBuZXcgcGFyYW1ldGVyIHNldFxuICAgKi9cbiAgdG8oY29udHJhY3RBZGRyZXNzOiBBZGRyZXNzKTogdGhpcyB7XG4gICAgdGhpcy52YWxpZGF0ZUFkZHJlc3MoY29udHJhY3RBZGRyZXNzKTtcbiAgICB0aGlzLl90b0NvbnRyYWN0QWRkcmVzcyA9IGdldEhleEFkZHJlc3NGcm9tQmFzZTU4QWRkcmVzcyhjb250cmFjdEFkZHJlc3MuYWRkcmVzcyk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBkYXRhIHdpdGggdGhlIG1ldGhvZCBjYWxsIGFuZCBwYXJhbWV0ZXJzXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBkYXRhIGRhdGEgZW5jb2RlZCBvbiBoZXhhXG4gICAqIEByZXR1cm5zIHtDb250cmFjdENhbGxCdWlsZGVyfSB0aGUgYnVpbGRlciB3aXRoIHRoZSBuZXcgcGFyYW1ldGVyIHNldFxuICAgKi9cbiAgZGF0YShkYXRhOiBzdHJpbmcpOiB0aGlzIHtcbiAgICBpZiAoIWlzVmFsaWRIZXgoZGF0YSkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkUGFyYW1ldGVyVmFsdWVFcnJvcihkYXRhICsgJyBpcyBub3QgYSB2YWxpZCBoZXggc3RyaW5nLicpO1xuICAgIH1cbiAgICB0aGlzLl9kYXRhID0gZGF0YTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGJsb2NrIHZhbHVlcyxcbiAgICpcbiAgICogQHBhcmFtIHtCbG9ja30gYmxvY2sgdGhlIG9iamVjdCBjb250YWluaW5nIG51bWJlciBhbmQgaGFzaCBvZiB0aGUgYmxvY2tcbiAgICogQHJldHVybnMge0NvbnRyYWN0Q2FsbEJ1aWxkZXJ9IHRoZSBidWlsZGVyIHdpdGggdGhlIG5ldyBwYXJhbWV0ZXIgc2V0XG4gICAqL1xuICBibG9jayhibG9jazogQmxvY2spOiB0aGlzIHtcbiAgICBjb25zdCBibG9ja0J5dGVzID0gQnVmZmVyLmFsbG9jKDgpO1xuICAgIGJsb2NrQnl0ZXMud3JpdGVJbnQzMkJFKGJsb2NrLm51bWJlciwgNCk7XG4gICAgdGhpcy5fcmVmQmxvY2tCeXRlcyA9IGJsb2NrQnl0ZXMuc2xpY2UoNiwgOCkudG9TdHJpbmcoJ2hleCcpO1xuXG4gICAgdGhpcy5fcmVmQmxvY2tIYXNoID0gQnVmZmVyLmZyb20oYmxvY2suaGFzaCwgJ2hleCcpLnNsaWNlKDgsIDE2KS50b1N0cmluZygnaGV4Jyk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGV4cGlyYXRpb24gdGltZSBmb3IgdGhlIHRyYW5zYWN0aW9uLCBzZXQgYWxzbyB0aW1lc3RhbXAgaWYgaXQgd2FzIG5vdCBzZXQgcHJldmlvdXNseVxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gdGltZSB0aGUgZXhwaXJhdGlvbiB0aW1lIGluIG1pbGxpc2Vjb25kc1xuICAgKiBAcmV0dXJucyB7Q29udHJhY3RDYWxsQnVpbGRlcn0gdGhlIGJ1aWxkZXIgd2l0aCB0aGUgbmV3IHBhcmFtZXRlciBzZXRcbiAgICovXG4gIGV4cGlyYXRpb24odGltZTogbnVtYmVyKTogdGhpcyB7XG4gICAgaWYgKHRoaXMudHJhbnNhY3Rpb24uaWQpIHtcbiAgICAgIHRocm93IG5ldyBFeHRlbmRUcmFuc2FjdGlvbkVycm9yKCdFeHBpcmF0aW9uIGlzIGFscmVhZHkgc2V0LCBpdCBjYW4gb25seSBiZSBleHRlbmRlZCcpO1xuICAgIH1cbiAgICB0aGlzLl90aW1lc3RhbXAgPSB0aGlzLl90aW1lc3RhbXAgfHwgRGF0ZS5ub3coKTtcbiAgICB0aGlzLnZhbGlkYXRlRXhwaXJhdGlvblRpbWUodGltZSk7XG4gICAgdGhpcy5fZXhwaXJhdGlvbiA9IHRpbWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgZXh0ZW5kVmFsaWRUbyhleHRlbnNpb25NczogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKHRoaXMudHJhbnNhY3Rpb24uc2lnbmF0dXJlICYmIHRoaXMudHJhbnNhY3Rpb24uc2lnbmF0dXJlLmxlbmd0aCA+IDApIHtcbiAgICAgIHRocm93IG5ldyBFeHRlbmRUcmFuc2FjdGlvbkVycm9yKCdDYW5ub3QgZXh0ZW5kIGEgc2lnbmVkIHRyYW5zYWN0aW9uJyk7XG4gICAgfVxuXG4gICAgaWYgKGV4dGVuc2lvbk1zIDw9IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVmFsdWUgY2Fubm90IGJlIGJlbG93IHplcm8nKTtcbiAgICB9XG5cbiAgICBpZiAoZXh0ZW5zaW9uTXMgPiBNQVhfRFVSQVRJT04pIHtcbiAgICAgIHRocm93IG5ldyBFeHRlbmRUcmFuc2FjdGlvbkVycm9yKCdUaGUgZXhwaXJhdGlvbiBjYW5ub3QgYmUgZXh0ZW5kZWQgbW9yZSB0aGFuIG9uZSB5ZWFyJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2V4cGlyYXRpb24pIHtcbiAgICAgIHRoaXMuX2V4cGlyYXRpb24gPSB0aGlzLl9leHBpcmF0aW9uICsgZXh0ZW5zaW9uTXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVGhlcmUgaXMgbm90IGV4cGlyYXRpb24gdG8gZXh0ZW5kJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgdGltZXN0YW1wIGZvciB0aGUgdHJhbnNhY3Rpb25cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHRpbWUgdGhlIHRpbWVzdGFtcCBpbiBtaWxsaXNlY29uZHNcbiAgICogQHJldHVybnMge0NvbnRyYWN0Q2FsbEJ1aWxkZXJ9IHRoZSBidWlsZGVyIHdpdGggdGhlIG5ldyBwYXJhbWV0ZXIgc2V0XG4gICAqL1xuICB0aW1lc3RhbXAodGltZTogbnVtYmVyKTogdGhpcyB7XG4gICAgdGhpcy5fdGltZXN0YW1wID0gdGltZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGZlZSBsaW1pdCBmb3IgdGhlIHRyYW5zYWN0aW9uXG4gICAqXG4gICAqIEBwYXJhbSB7RmVlfSBmZWUgdGhlIGZlZSBsaW1pdCBmb3IgdGhlIHRyYW5zYWN0aW9uXG4gICAqIEByZXR1cm5zIHtDb250cmFjdENhbGxCdWlsZGVyfSB0aGUgYnVpbGRlciB3aXRoIHRoZSBuZXcgcGFyYW1ldGVyIHNldFxuICAgKi9cbiAgZmVlKGZlZTogRmVlKTogdGhpcyB7XG4gICAgY29uc3QgZmVlTGltaXQgPSBuZXcgQmlnTnVtYmVyKGZlZS5mZWVMaW1pdCk7XG4gICAgY29uc3QgdHJvbk5ldHdvcmsgPSB0aGlzLl9jb2luQ29uZmlnLm5ldHdvcmsgYXMgVHJvbk5ldHdvcms7XG4gICAgaWYgKGZlZUxpbWl0LmlzTmFOKCkgfHwgZmVlTGltaXQuaXNMZXNzVGhhbigwKSB8fCBmZWVMaW1pdC5pc0dyZWF0ZXJUaGFuKHRyb25OZXR3b3JrLm1heEZlZUxpbWl0KSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRQYXJhbWV0ZXJWYWx1ZUVycm9yKCdJbnZhbGlkIGZlZSBsaW1pdCB2YWx1ZScpO1xuICAgIH1cbiAgICB0aGlzLl9mZWUgPSBmZWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyBlbmRyZWdpb25cblxuICBwcml2YXRlIGNyZWF0ZVRyYW5zYWN0aW9uKCk6IHZvaWQge1xuICAgIGNvbnN0IHJhd0RhdGFIZXggPSB0aGlzLmdldFJhd0RhdGFIZXgoKTtcbiAgICBjb25zdCByYXdEYXRhID0gZGVjb2RlVHJhbnNhY3Rpb24ocmF3RGF0YUhleCk7XG4gICAgY29uc3QgY29udHJhY3QgPSByYXdEYXRhLmNvbnRyYWN0WzBdIGFzIFRyaWdnZXJTbWFydENvbnRyYWN0O1xuICAgIGNvbnN0IGNvbnRyYWN0UGFyYW1ldGVyID0gY29udHJhY3QucGFyYW1ldGVyO1xuICAgIGNvbnRyYWN0UGFyYW1ldGVyLnZhbHVlLmNvbnRyYWN0X2FkZHJlc3MgPSB0aGlzLl90b0NvbnRyYWN0QWRkcmVzcy50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgIGNvbnRyYWN0UGFyYW1ldGVyLnZhbHVlLm93bmVyX2FkZHJlc3MgPSB0aGlzLl9vd25lckFkZHJlc3MudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICBjb250cmFjdFBhcmFtZXRlci52YWx1ZS5kYXRhID0gdGhpcy5fZGF0YS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgIGNvbnRyYWN0UGFyYW1ldGVyLnR5cGVfdXJsID0gJ3R5cGUuZ29vZ2xlYXBpcy5jb20vcHJvdG9jb2wuVHJpZ2dlclNtYXJ0Q29udHJhY3QnO1xuICAgIGNvbnRyYWN0LnR5cGUgPSAnVHJpZ2dlclNtYXJ0Q29udHJhY3QnO1xuICAgIGNvbnN0IGhleEJ1ZmZlciA9IEJ1ZmZlci5mcm9tKHJhd0RhdGFIZXgsICdoZXgnKTtcbiAgICBjb25zdCBpZCA9IGNyZWF0ZUhhc2goJ3NoYTI1NicpLnVwZGF0ZShoZXhCdWZmZXIpLmRpZ2VzdCgnaGV4Jyk7XG4gICAgY29uc3QgdHhSZWNpcDogVHJhbnNhY3Rpb25SZWNlaXB0ID0ge1xuICAgICAgcmF3X2RhdGE6IHJhd0RhdGEsXG4gICAgICByYXdfZGF0YV9oZXg6IHJhd0RhdGFIZXgsXG4gICAgICB0eElEOiBpZCxcbiAgICAgIHNpZ25hdHVyZTogdGhpcy50cmFuc2FjdGlvbi5zaWduYXR1cmUsXG4gICAgfTtcbiAgICB0aGlzLnRyYW5zYWN0aW9uID0gbmV3IFRyYW5zYWN0aW9uKHRoaXMuX2NvaW5Db25maWcsIHR4UmVjaXApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRSYXdEYXRhSGV4KCk6IHN0cmluZyB7XG4gICAgY29uc3QgcmF3Q29udHJhY3QgPSB7XG4gICAgICBvd25lckFkZHJlc3M6IGdldEJ5dGVBcnJheUZyb21IZXhBZGRyZXNzKHRoaXMuX293bmVyQWRkcmVzcyksXG4gICAgICBjb250cmFjdEFkZHJlc3M6IGdldEJ5dGVBcnJheUZyb21IZXhBZGRyZXNzKHRoaXMuX3RvQ29udHJhY3RBZGRyZXNzKSxcbiAgICAgIGRhdGE6IGdldEJ5dGVBcnJheUZyb21IZXhBZGRyZXNzKHRoaXMuX2RhdGEpLFxuICAgIH07XG4gICAgY29uc3QgY29udHJhY3RDYWxsID0gcHJvdG9jb2wuVHJpZ2dlclNtYXJ0Q29udHJhY3QuZnJvbU9iamVjdChyYXdDb250cmFjdCk7XG4gICAgY29uc3QgY29udHJhY3RCeXRlcyA9IHByb3RvY29sLlRyaWdnZXJTbWFydENvbnRyYWN0LmVuY29kZShjb250cmFjdENhbGwpLmZpbmlzaCgpO1xuICAgIGNvbnN0IHR4Q29udHJhY3QgPSB7XG4gICAgICB0eXBlOiBDb250cmFjdFR5cGUuVHJpZ2dlclNtYXJ0Q29udHJhY3QsXG4gICAgICBwYXJhbWV0ZXI6IHtcbiAgICAgICAgdmFsdWU6IGNvbnRyYWN0Qnl0ZXMsXG4gICAgICAgIHR5cGVfdXJsOiAndHlwZS5nb29nbGVhcGlzLmNvbS9wcm90b2NvbC5UcmlnZ2VyU21hcnRDb250cmFjdCcsXG4gICAgICB9LFxuICAgIH07XG4gICAgY29uc3QgcmF3ID0ge1xuICAgICAgcmVmQmxvY2tCeXRlczogQnVmZmVyLmZyb20odGhpcy5fcmVmQmxvY2tCeXRlcywgJ2hleCcpLFxuICAgICAgcmVmQmxvY2tIYXNoOiBCdWZmZXIuZnJvbSh0aGlzLl9yZWZCbG9ja0hhc2gsICdoZXgnKSxcbiAgICAgIGV4cGlyYXRpb246IHRoaXMuX2V4cGlyYXRpb24gfHwgRGF0ZS5ub3coKSArIERFRkFVTFRfRVhQSVJBVElPTixcbiAgICAgIHRpbWVzdGFtcDogdGhpcy5fdGltZXN0YW1wIHx8IERhdGUubm93KCksXG4gICAgICBjb250cmFjdDogW3R4Q29udHJhY3RdLFxuICAgICAgZmVlTGltaXQ6IHBhcnNlSW50KHRoaXMuX2ZlZS5mZWVMaW1pdCwgMTApLFxuICAgIH07XG4gICAgY29uc3QgcmF3VHggPSBwcm90b2NvbC5UcmFuc2FjdGlvbi5yYXcuY3JlYXRlKHJhdyk7XG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHByb3RvY29sLlRyYW5zYWN0aW9uLnJhdy5lbmNvZGUocmF3VHgpLmZpbmlzaCgpKS50b1N0cmluZygnaGV4Jyk7XG4gIH1cblxuICBwcml2YXRlIGFwcGx5U2lnbmF0dXJlcygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMudHJhbnNhY3Rpb24uaW5wdXRzKSB7XG4gICAgICB0aHJvdyBuZXcgU2lnbmluZ0Vycm9yKCdUcmFuc2FjdGlvbiBoYXMgbm8gaW5wdXRzJyk7XG4gICAgfVxuICAgIHRoaXMuX3NpZ25pbmdLZXlzLmZvckVhY2goKGtleSkgPT4gdGhpcy5hcHBseVNpZ25hdHVyZShrZXkpKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICAvLyBTcGVjaWZpY2FsbHksIGNoZWNrcyBoZXggdW5kZXJseWluZyB0cmFuc2FjdGlvbiBoYXNoZXMgdG8gY29ycmVjdCB0cmFuc2FjdGlvbiBJRC5cbiAgdmFsaWRhdGVUcmFuc2FjdGlvbih0cmFuc2FjdGlvbjogVHJhbnNhY3Rpb24pOiB2b2lkIHtcbiAgICB0aGlzLnZhbGlkYXRlTWFuZGF0b3J5RmllbGRzKCk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdmFsaWRhdGVNYW5kYXRvcnlGaWVsZHMoKSB7XG4gICAgaWYgKCF0aGlzLl9kYXRhKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdNaXNzaW5nIHBhcmFtZXRlcjogZGF0YScpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuX293bmVyQWRkcmVzcykge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignTWlzc2luZyBwYXJhbWV0ZXI6IHNvdXJjZScpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuX3RvQ29udHJhY3RBZGRyZXNzKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdNaXNzaW5nIHBhcmFtZXRlcjogY29udHJhY3QgYWRkcmVzcycpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuX3JlZkJsb2NrQnl0ZXMgfHwgIXRoaXMuX3JlZkJsb2NrSGFzaCkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignTWlzc2luZyBibG9jayByZWZlcmVuY2UgaW5mb3JtYXRpb24nKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLl9mZWUpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ01pc3NpbmcgZmVlJyk7XG4gICAgfVxuICB9XG5cbiAgdmFsaWRhdGVFeHBpcmF0aW9uVGltZSh2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKHZhbHVlIDwgdGhpcy5fdGltZXN0YW1wKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFBhcmFtZXRlclZhbHVlRXJyb3IoJ0V4cGlyYXRpb24gbXVzdCBiZSBncmVhdGVyIHRoYW4gdGltZXN0YW1wJyk7XG4gICAgfVxuICAgIGlmICh2YWx1ZSA8IERhdGUubm93KCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkUGFyYW1ldGVyVmFsdWVFcnJvcignRXhwaXJhdGlvbiBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBjdXJyZW50IHRpbWUnKTtcbiAgICB9XG4gICAgaWYgKHZhbHVlIC0gdGhpcy5fdGltZXN0YW1wID4gTUFYX0RVUkFUSU9OKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFBhcmFtZXRlclZhbHVlRXJyb3IoJ0V4cGlyYXRpb24gbXVzdCBub3QgYmUgZ3JlYXRlciB0aGFuIG9uZSB5ZWFyJyk7XG4gICAgfVxuICB9XG59XG4iXX0=
218
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udHJhY3RDYWxsQnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvY29udHJhY3RDYWxsQnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxtQ0FBb0M7QUFFcEMsZ0VBQXFDO0FBQ3JDLHdEQUF5RDtBQUN6RCxtREFPOEI7QUFDOUIsNkRBQTBEO0FBRTFELCtDQUE0QztBQUU1QyxtQ0FRaUI7QUFFakIsSUFBTyxZQUFZLEdBQUcsZUFBUSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDO0FBQ3BELFFBQUEsT0FBTyxHQUFHLFVBQVUsQ0FBQyxDQUFDLHNHQUFzRztBQUV6SSxNQUFhLG1CQUFvQixTQUFRLHVDQUFrQjtJQU16RCxZQUFZLFdBQWlDO1FBQzNDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNuQixJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUkseUJBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRUQsa0JBQWtCO0lBQ1IsS0FBSyxDQUFDLG1CQUFtQjtRQUNqQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUN6QixrQkFBa0I7UUFDbEIsZ0RBQWdEO1FBQ2hELElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDakMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3pCLENBQUM7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUN6QixNQUFNLElBQUksZ0NBQXFCLENBQUMscUNBQXFDLENBQUMsQ0FBQztRQUN6RSxDQUFDO1FBQ0QsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRUQsa0JBQWtCO0lBQ1Is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QUMscUNBQXFDLENBQUMsQ0FBQztRQUN6RSxDQUFDO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDaEQsTUFBTSxJQUFJLGdDQUFxQixDQUFDLHFDQUFxQyxDQUFDLENBQUM7UUFDekUsQ0FBQztRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDZixNQUFNLElBQUksZ0NBQXFCLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDakQsQ0FBQztJQUNILENBQUM7Q0FDRjtBQS9ORCxrREErTkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVIYXNoIH0gZnJvbSAnY3J5cHRvJztcbmltcG9ydCB7IEJhc2VDb2luIGFzIENvaW5Db25maWcsIFRyb25OZXR3b3JrIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5pbXBvcnQgQmlnTnVtYmVyIGZyb20gJ2JpZ251bWJlci5qcyc7XG5pbXBvcnQgeyBwcm90b2NvbCB9IGZyb20gJy4uLy4uL3Jlc291cmNlcy9wcm90b2J1Zi90cm9uJztcbmltcG9ydCB7XG4gIEJhc2VLZXksXG4gIEJ1aWxkVHJhbnNhY3Rpb25FcnJvcixcbiAgRXh0ZW5kVHJhbnNhY3Rpb25FcnJvcixcbiAgSW52YWxpZFBhcmFtZXRlclZhbHVlRXJyb3IsXG4gIFNpZ25pbmdFcnJvcixcbiAgVHJhbnNhY3Rpb25UeXBlLFxufSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbkJ1aWxkZXIgfSBmcm9tICcuL3RyYW5zYWN0aW9uQnVpbGRlcic7XG5pbXBvcnQgeyBBZGRyZXNzIH0gZnJvbSAnLi9hZGRyZXNzJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uIH0gZnJvbSAnLi90cmFuc2FjdGlvbic7XG5pbXBvcnQgeyBGZWUsIFRyYW5zYWN0aW9uUmVjZWlwdCwgVHJpZ2dlclNtYXJ0Q29udHJhY3QgfSBmcm9tICcuL2lmYWNlJztcbmltcG9ydCB7XG4gIGRlY29kZVRyYW5zYWN0aW9uLFxuICBnZXRCYXNlNThBZGRyZXNzRnJvbUhleCxcbiAgZ2V0Qnl0ZUFycmF5RnJvbUhleEFkZHJlc3MsXG4gIGdldEhleEFkZHJlc3NGcm9tQmFzZTU4QWRkcmVzcyxcbiAgaXNWYWxpZEhleCxcbiAgVFJBTlNBQ1RJT05fTUFYX0VYUElSQVRJT04sXG4gIFRSQU5TQUNUSU9OX0RFRkFVTFRfRVhQSVJBVElPTixcbn0gZnJvbSAnLi91dGlscyc7XG5cbmltcG9ydCBDb250cmFjdFR5cGUgPSBwcm90b2NvbC5UcmFuc2FjdGlvbi5Db250cmFjdC5Db250cmFjdFR5cGU7XG5leHBvcnQgY29uc3QgTUFYX0ZFRSA9IDUwMDAwMDAwMDA7IC8vIDVlOSA9IDUwMDAgVFJYIGFjb3JkaW5nIGh0dHBzOi8vZGV2ZWxvcGVycy50cm9uLm5ldHdvcmsvZG9jcy9zZXR0aW5nLWEtZmVlLWxpbWl0LW9uLWRlcGxveWV4ZWN1dGlvblxuXG5leHBvcnQgY2xhc3MgQ29udHJhY3RDYWxsQnVpbGRlciBleHRlbmRzIFRyYW5zYWN0aW9uQnVpbGRlciB7XG4gIHByb3RlY3RlZCBfc2lnbmluZ0tleXM6IEJhc2VLZXlbXTtcbiAgcHJpdmF0ZSBfdG9Db250cmFjdEFkZHJlc3M6IHN0cmluZztcbiAgcHJpdmF0ZSBfZGF0YTogc3RyaW5nO1xuICBwcml2YXRlIF9mZWU6IEZlZTtcblxuICBjb25zdHJ1Y3RvcihfY29pbkNvbmZpZzogUmVhZG9ubHk8Q29pbkNvbmZpZz4pIHtcbiAgICBzdXBlcihfY29pbkNvbmZpZyk7XG4gICAgdGhpcy5fc2lnbmluZ0tleXMgPSBbXTtcbiAgICB0aGlzLnRyYW5zYWN0aW9uID0gbmV3IFRyYW5zYWN0aW9uKF9jb2luQ29uZmlnKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgYnVpbGRJbXBsZW1lbnRhdGlvbigpOiBQcm9taXNlPFRyYW5zYWN0aW9uPiB7XG4gICAgdGhpcy5jcmVhdGVUcmFuc2FjdGlvbigpO1xuICAgIC8qKiBAaW5oZXJpdGRvYyAqL1xuICAgIC8vIFRoaXMgbWV0aG9kIG11c3QgYmUgZXh0ZW5kZWQgb24gY2hpbGQgY2xhc3Nlc1xuICAgIGlmICh0aGlzLl9zaWduaW5nS2V5cy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmFwcGx5U2lnbmF0dXJlcygpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy50cmFuc2FjdGlvbi5pZCkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignQSB2YWxpZCB0cmFuc2FjdGlvbiBtdXN0IGhhdmUgYW4gaWQnKTtcbiAgICB9XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLnRyYW5zYWN0aW9uKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBwcm90ZWN0ZWQgc2lnbkltcGxlbWVudGF0aW9uKGtleTogQmFzZUtleSk6IFRyYW5zYWN0aW9uIHtcbiAgICBpZiAodGhpcy5fc2lnbmluZ0tleXMuc29tZSgoc2lnbmluZ0tleSkgPT4gc2lnbmluZ0tleS5rZXkgPT09IGtleS5rZXkpKSB7XG4gICAgICB0aHJvdyBuZXcgU2lnbmluZ0Vycm9yKCdEdXBsaWNhdGVkIGtleScpO1xuICAgIH1cbiAgICB0aGlzLl9zaWduaW5nS2V5cy5wdXNoKGtleSk7XG5cbiAgICAvLyBXZSBrZWVwIHRoaXMgcmV0dXJuIGZvciBjb21wYXRpYmlsaXR5IGJ1dCBpcyBub3QgbWVhbnQgdG8gYmUgdXNlXG4gICAgcmV0dXJuIHRoaXMudHJhbnNhY3Rpb247XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZSB0aGUgdHJhbnNhY3Rpb24gYnVpbGRlciBmaWVsZHMgdXNpbmcgdGhlIHRyYW5zYWN0aW9uIGRhdGFcbiAgICpcbiAgICogQHBhcmFtIHthbnl9IHJhd1RyYW5zYWN0aW9uIHRoZSB0cmFuc2FjdGlvbiBkYXRhIGluIGEgc3RyaW5nIG9yIEpTT04gZm9ybWF0XG4gICAqIEByZXR1cm5zIHtDb250cmFjdENhbGxCdWlsZGVyfSB0aGUgYnVpbGRlciB3aXRoIHRoZSB0cmFuc2FjdGlvbiBkYXRhIHNldFxuICAgKi9cbiAgaW5pdEJ1aWxkZXIocmF3VHJhbnNhY3Rpb246IFRyYW5zYWN0aW9uUmVjZWlwdCB8IHN0cmluZyk6IHRoaXMge1xuICAgIHRoaXMudmFsaWRhdGVSYXdUcmFuc2FjdGlvbihyYXdUcmFuc2FjdGlvbik7XG4gICAgY29uc3QgdHggPSB0aGlzLmZyb21JbXBsZW1lbnRhdGlvbihyYXdUcmFuc2FjdGlvbik7XG4gICAgdGhpcy50cmFuc2FjdGlvbiA9IHR4O1xuICAgIHRoaXMuX3NpZ25pbmdLZXlzID0gW107XG4gICAgY29uc3QgcmF3RGF0YSA9IHR4LnRvSnNvbigpLnJhd19kYXRhO1xuICAgIHRoaXMuX3JlZkJsb2NrQnl0ZXMgPSByYXdEYXRhLnJlZl9ibG9ja19ieXRlcztcbiAgICB0aGlzLl9yZWZCbG9ja0hhc2ggPSByYXdEYXRhLnJlZl9ibG9ja19oYXNoO1xuICAgIHRoaXMuX2V4cGlyYXRpb24gPSByYXdEYXRhLmV4cGlyYXRpb247XG4gICAgdGhpcy5fdGltZXN0YW1wID0gcmF3RGF0YS50aW1lc3RhbXA7XG4gICAgdGhpcy5fZmVlID0geyBmZWVMaW1pdDogcmF3RGF0YS5mZWVfbGltaXQhLnRvU3RyaW5nKCkgfTtcbiAgICB0aGlzLnRyYW5zYWN0aW9uLnNldFRyYW5zYWN0aW9uVHlwZShUcmFuc2FjdGlvblR5cGUuQ29udHJhY3RDYWxsKTtcbiAgICBjb25zdCBjb250cmFjdENhbGwgPSByYXdEYXRhLmNvbnRyYWN0WzBdIGFzIFRyaWdnZXJTbWFydENvbnRyYWN0O1xuICAgIHRoaXMuaW5pdENvbnRyYWN0Q2FsbChjb250cmFjdENhbGwpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemUgdGhlIGNvbnRyYWN0IGNhbGwgc3BlY2lmaWMgZGF0YVxuICAgKlxuICAgKiBAcGFyYW0ge1RyaWdnZXJTbWFydENvbnRyYWN0fSBjb250cmFjdENhbGwgb2JqZWN0IHdpdGggdHJhbnNmZXIgZGF0YVxuICAgKi9cbiAgcHJvdGVjdGVkIGluaXRDb250cmFjdENhbGwoY29udHJhY3RDYWxsOiBUcmlnZ2VyU21hcnRDb250cmFjdCk6IHZvaWQge1xuICAgIGNvbnN0IHsgZGF0YSwgb3duZXJfYWRkcmVzcywgY29udHJhY3RfYWRkcmVzcyB9ID0gY29udHJhY3RDYWxsLnBhcmFtZXRlci52YWx1ZTtcbiAgICBpZiAoZGF0YSkge1xuICAgICAgdGhpcy5kYXRhKGRhdGEpO1xuICAgIH1cbiAgICBpZiAoY29udHJhY3RfYWRkcmVzcykge1xuICAgICAgdGhpcy50byh7IGFkZHJlc3M6IGdldEJhc2U1OEFkZHJlc3NGcm9tSGV4KGNvbnRyYWN0X2FkZHJlc3MpIH0pO1xuICAgIH1cbiAgICBpZiAob3duZXJfYWRkcmVzcykge1xuICAgICAgdGhpcy5zb3VyY2UoeyBhZGRyZXNzOiBnZXRCYXNlNThBZGRyZXNzRnJvbUhleChvd25lcl9hZGRyZXNzKSB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBhZGRyZXNzIG9mIHRoZSBjb250cmFjdCB0byBiZSBjYWxsZWQsXG4gICAqXG4gICAqIEBwYXJhbSB7QWRkcmVzc30gY29udHJhY3RBZGRyZXNzIHRoZSBjb250cmFjdCBhZGRyZXNzXG4gICAqIEByZXR1cm5zIHtDb250cmFjdENhbGxCdWlsZGVyfSB0aGUgYnVpbGRlciB3aXRoIHRoZSBuZXcgcGFyYW1ldGVyIHNldFxuICAgKi9cbiAgdG8oY29udHJhY3RBZGRyZXNzOiBBZGRyZXNzKTogdGhpcyB7XG4gICAgdGhpcy52YWxpZGF0ZUFkZHJlc3MoY29udHJhY3RBZGRyZXNzKTtcbiAgICB0aGlzLl90b0NvbnRyYWN0QWRkcmVzcyA9IGdldEhleEFkZHJlc3NGcm9tQmFzZTU4QWRkcmVzcyhjb250cmFjdEFkZHJlc3MuYWRkcmVzcyk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBkYXRhIHdpdGggdGhlIG1ldGhvZCBjYWxsIGFuZCBwYXJhbWV0ZXJzXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBkYXRhIGRhdGEgZW5jb2RlZCBvbiBoZXhhXG4gICAqIEByZXR1cm5zIHtDb250cmFjdENhbGxCdWlsZGVyfSB0aGUgYnVpbGRlciB3aXRoIHRoZSBuZXcgcGFyYW1ldGVyIHNldFxuICAgKi9cbiAgZGF0YShkYXRhOiBzdHJpbmcpOiB0aGlzIHtcbiAgICBpZiAoIWlzVmFsaWRIZXgoZGF0YSkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkUGFyYW1ldGVyVmFsdWVFcnJvcihkYXRhICsgJyBpcyBub3QgYSB2YWxpZCBoZXggc3RyaW5nLicpO1xuICAgIH1cbiAgICB0aGlzLl9kYXRhID0gZGF0YTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBleHRlbmRWYWxpZFRvKGV4dGVuc2lvbk1zOiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAodGhpcy50cmFuc2FjdGlvbi5zaWduYXR1cmUgJiYgdGhpcy50cmFuc2FjdGlvbi5zaWduYXR1cmUubGVuZ3RoID4gMCkge1xuICAgICAgdGhyb3cgbmV3IEV4dGVuZFRyYW5zYWN0aW9uRXJyb3IoJ0Nhbm5vdCBleHRlbmQgYSBzaWduZWQgdHJhbnNhY3Rpb24nKTtcbiAgICB9XG5cbiAgICBpZiAoZXh0ZW5zaW9uTXMgPD0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdWYWx1ZSBjYW5ub3QgYmUgYmVsb3cgemVybycpO1xuICAgIH1cblxuICAgIGlmIChleHRlbnNpb25NcyA+IFRSQU5TQUNUSU9OX01BWF9FWFBJUkFUSU9OKSB7XG4gICAgICB0aHJvdyBuZXcgRXh0ZW5kVHJhbnNhY3Rpb25FcnJvcignVGhlIGV4cGlyYXRpb24gY2Fubm90IGJlIGV4dGVuZGVkIG1vcmUgdGhhbiBvbmUgeWVhcicpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9leHBpcmF0aW9uKSB7XG4gICAgICB0aGlzLl9leHBpcmF0aW9uID0gdGhpcy5fZXhwaXJhdGlvbiArIGV4dGVuc2lvbk1zO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZXJlIGlzIG5vdCBleHBpcmF0aW9uIHRvIGV4dGVuZCcpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGZlZSBsaW1pdCBmb3IgdGhlIHRyYW5zYWN0aW9uXG4gICAqXG4gICAqIEBwYXJhbSB7RmVlfSBmZWUgdGhlIGZlZSBsaW1pdCBmb3IgdGhlIHRyYW5zYWN0aW9uXG4gICAqIEByZXR1cm5zIHtDb250cmFjdENhbGxCdWlsZGVyfSB0aGUgYnVpbGRlciB3aXRoIHRoZSBuZXcgcGFyYW1ldGVyIHNldFxuICAgKi9cbiAgZmVlKGZlZTogRmVlKTogdGhpcyB7XG4gICAgY29uc3QgZmVlTGltaXQgPSBuZXcgQmlnTnVtYmVyKGZlZS5mZWVMaW1pdCk7XG4gICAgY29uc3QgdHJvbk5ldHdvcmsgPSB0aGlzLl9jb2luQ29uZmlnLm5ldHdvcmsgYXMgVHJvbk5ldHdvcms7XG4gICAgaWYgKGZlZUxpbWl0LmlzTmFOKCkgfHwgZmVlTGltaXQuaXNMZXNzVGhhbigwKSB8fCBmZWVMaW1pdC5pc0dyZWF0ZXJUaGFuKHRyb25OZXR3b3JrLm1heEZlZUxpbWl0KSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRQYXJhbWV0ZXJWYWx1ZUVycm9yKCdJbnZhbGlkIGZlZSBsaW1pdCB2YWx1ZScpO1xuICAgIH1cbiAgICB0aGlzLl9mZWUgPSBmZWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyBlbmRyZWdpb25cblxuICBwcml2YXRlIGNyZWF0ZVRyYW5zYWN0aW9uKCk6IHZvaWQge1xuICAgIGNvbnN0IHJhd0RhdGFIZXggPSB0aGlzLmdldFJhd0RhdGFIZXgoKTtcbiAgICBjb25zdCByYXdEYXRhID0gZGVjb2RlVHJhbnNhY3Rpb24ocmF3RGF0YUhleCk7XG4gICAgY29uc3QgY29udHJhY3QgPSByYXdEYXRhLmNvbnRyYWN0WzBdIGFzIFRyaWdnZXJTbWFydENvbnRyYWN0O1xuICAgIGNvbnN0IGNvbnRyYWN0UGFyYW1ldGVyID0gY29udHJhY3QucGFyYW1ldGVyO1xuICAgIGNvbnRyYWN0UGFyYW1ldGVyLnZhbHVlLmNvbnRyYWN0X2FkZHJlc3MgPSB0aGlzLl90b0NvbnRyYWN0QWRkcmVzcy50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgIGNvbnRyYWN0UGFyYW1ldGVyLnZhbHVlLm93bmVyX2FkZHJlc3MgPSB0aGlzLl9vd25lckFkZHJlc3MudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICBjb250cmFjdFBhcmFtZXRlci52YWx1ZS5kYXRhID0gdGhpcy5fZGF0YS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgIGNvbnRyYWN0UGFyYW1ldGVyLnR5cGVfdXJsID0gJ3R5cGUuZ29vZ2xlYXBpcy5jb20vcHJvdG9jb2wuVHJpZ2dlclNtYXJ0Q29udHJhY3QnO1xuICAgIGNvbnRyYWN0LnR5cGUgPSAnVHJpZ2dlclNtYXJ0Q29udHJhY3QnO1xuICAgIGNvbnN0IGhleEJ1ZmZlciA9IEJ1ZmZlci5mcm9tKHJhd0RhdGFIZXgsICdoZXgnKTtcbiAgICBjb25zdCBpZCA9IGNyZWF0ZUhhc2goJ3NoYTI1NicpLnVwZGF0ZShoZXhCdWZmZXIpLmRpZ2VzdCgnaGV4Jyk7XG4gICAgY29uc3QgdHhSZWNpcDogVHJhbnNhY3Rpb25SZWNlaXB0ID0ge1xuICAgICAgcmF3X2RhdGE6IHJhd0RhdGEsXG4gICAgICByYXdfZGF0YV9oZXg6IHJhd0RhdGFIZXgsXG4gICAgICB0eElEOiBpZCxcbiAgICAgIHNpZ25hdHVyZTogdGhpcy50cmFuc2FjdGlvbi5zaWduYXR1cmUsXG4gICAgfTtcbiAgICB0aGlzLnRyYW5zYWN0aW9uID0gbmV3IFRyYW5zYWN0aW9uKHRoaXMuX2NvaW5Db25maWcsIHR4UmVjaXApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRSYXdEYXRhSGV4KCk6IHN0cmluZyB7XG4gICAgY29uc3QgcmF3Q29udHJhY3QgPSB7XG4gICAgICBvd25lckFkZHJlc3M6IGdldEJ5dGVBcnJheUZyb21IZXhBZGRyZXNzKHRoaXMuX293bmVyQWRkcmVzcyksXG4gICAgICBjb250cmFjdEFkZHJlc3M6IGdldEJ5dGVBcnJheUZyb21IZXhBZGRyZXNzKHRoaXMuX3RvQ29udHJhY3RBZGRyZXNzKSxcbiAgICAgIGRhdGE6IGdldEJ5dGVBcnJheUZyb21IZXhBZGRyZXNzKHRoaXMuX2RhdGEpLFxuICAgIH07XG4gICAgY29uc3QgY29udHJhY3RDYWxsID0gcHJvdG9jb2wuVHJpZ2dlclNtYXJ0Q29udHJhY3QuZnJvbU9iamVjdChyYXdDb250cmFjdCk7XG4gICAgY29uc3QgY29udHJhY3RCeXRlcyA9IHByb3RvY29sLlRyaWdnZXJTbWFydENvbnRyYWN0LmVuY29kZShjb250cmFjdENhbGwpLmZpbmlzaCgpO1xuICAgIGNvbnN0IHR4Q29udHJhY3QgPSB7XG4gICAgICB0eXBlOiBDb250cmFjdFR5cGUuVHJpZ2dlclNtYXJ0Q29udHJhY3QsXG4gICAgICBwYXJhbWV0ZXI6IHtcbiAgICAgICAgdmFsdWU6IGNvbnRyYWN0Qnl0ZXMsXG4gICAgICAgIHR5cGVfdXJsOiAndHlwZS5nb29nbGVhcGlzLmNvbS9wcm90b2NvbC5UcmlnZ2VyU21hcnRDb250cmFjdCcsXG4gICAgICB9LFxuICAgIH07XG4gICAgY29uc3QgcmF3ID0ge1xuICAgICAgcmVmQmxvY2tCeXRlczogQnVmZmVyLmZyb20odGhpcy5fcmVmQmxvY2tCeXRlcywgJ2hleCcpLFxuICAgICAgcmVmQmxvY2tIYXNoOiBCdWZmZXIuZnJvbSh0aGlzLl9yZWZCbG9ja0hhc2gsICdoZXgnKSxcbiAgICAgIGV4cGlyYXRpb246IHRoaXMuX2V4cGlyYXRpb24gfHwgRGF0ZS5ub3coKSArIFRSQU5TQUNUSU9OX0RFRkFVTFRfRVhQSVJBVElPTixcbiAgICAgIHRpbWVzdGFtcDogdGhpcy5fdGltZXN0YW1wIHx8IERhdGUubm93KCksXG4gICAgICBjb250cmFjdDogW3R4Q29udHJhY3RdLFxuICAgICAgZmVlTGltaXQ6IHBhcnNlSW50KHRoaXMuX2ZlZS5mZWVMaW1pdCwgMTApLFxuICAgIH07XG4gICAgY29uc3QgcmF3VHggPSBwcm90b2NvbC5UcmFuc2FjdGlvbi5yYXcuY3JlYXRlKHJhdyk7XG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHByb3RvY29sLlRyYW5zYWN0aW9uLnJhdy5lbmNvZGUocmF3VHgpLmZpbmlzaCgpKS50b1N0cmluZygnaGV4Jyk7XG4gIH1cblxuICBwcml2YXRlIGFwcGx5U2lnbmF0dXJlcygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMudHJhbnNhY3Rpb24uaW5wdXRzKSB7XG4gICAgICB0aHJvdyBuZXcgU2lnbmluZ0Vycm9yKCdUcmFuc2FjdGlvbiBoYXMgbm8gaW5wdXRzJyk7XG4gICAgfVxuICAgIHRoaXMuX3NpZ25pbmdLZXlzLmZvckVhY2goKGtleSkgPT4gdGhpcy5hcHBseVNpZ25hdHVyZShrZXkpKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICAvLyBTcGVjaWZpY2FsbHksIGNoZWNrcyBoZXggdW5kZXJseWluZyB0cmFuc2FjdGlvbiBoYXNoZXMgdG8gY29ycmVjdCB0cmFuc2FjdGlvbiBJRC5cbiAgdmFsaWRhdGVUcmFuc2FjdGlvbih0cmFuc2FjdGlvbjogVHJhbnNhY3Rpb24pOiB2b2lkIHtcbiAgICB0aGlzLnZhbGlkYXRlTWFuZGF0b3J5RmllbGRzKCk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdmFsaWRhdGVNYW5kYXRvcnlGaWVsZHMoKSB7XG4gICAgaWYgKCF0aGlzLl9kYXRhKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdNaXNzaW5nIHBhcmFtZXRlcjogZGF0YScpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuX293bmVyQWRkcmVzcykge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignTWlzc2luZyBwYXJhbWV0ZXI6IHNvdXJjZScpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuX3RvQ29udHJhY3RBZGRyZXNzKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdNaXNzaW5nIHBhcmFtZXRlcjogY29udHJhY3QgYWRkcmVzcycpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuX3JlZkJsb2NrQnl0ZXMgfHwgIXRoaXMuX3JlZkJsb2NrSGFzaCkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignTWlzc2luZyBibG9jayByZWZlcmVuY2UgaW5mb3JtYXRpb24nKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLl9mZWUpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ01pc3NpbmcgZmVlJyk7XG4gICAgfVxuICB9XG59XG4iXX0=
@@ -13,11 +13,34 @@ export declare enum ContractType {
13
13
  /**
14
14
  * This is a smart contract type.
15
15
  */
16
- TriggerSmartContract = 2
16
+ TriggerSmartContract = 2,
17
+ /**
18
+ * This is the contract for freezeBuilder
19
+ */
20
+ FreezeBalanceV2 = 3,
21
+ /**
22
+ * This is the contract for voting for witnesses
23
+ */
24
+ VoteWitness = 4,
25
+ /**
26
+ * This is the contract for unfreezing balances
27
+ */
28
+ UnfreezeBalanceV2 = 5,
29
+ /**
30
+ * This is the contract for withdrawing expired unfrozen balances
31
+ */
32
+ WithdrawExpireUnfreeze = 6
17
33
  }
18
34
  export declare enum PermissionType {
19
35
  Owner = 0,
20
36
  Witness = 1,
21
37
  Active = 2
22
38
  }
39
+ /**
40
+ * Tron resource types
41
+ */
42
+ export declare enum TronResource {
43
+ BANDWIDTH = "BANDWIDTH",
44
+ ENERGY = "ENERGY"
45
+ }
23
46
  //# sourceMappingURL=enum.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"enum.d.ts","sourceRoot":"","sources":["../../../src/lib/enum.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,oBAAY,YAAY;IACtB;;OAEG;IACH,QAAQ,IAAA;IACR;;OAEG;IACH,uBAAuB,IAAA;IACvB;;OAEG;IACH,oBAAoB,IAAA;CACrB;AAED,oBAAY,cAAc;IACxB,KAAK,IAAA;IACL,OAAO,IAAA;IACP,MAAM,IAAA;CACP"}
1
+ {"version":3,"file":"enum.d.ts","sourceRoot":"","sources":["../../../src/lib/enum.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,oBAAY,YAAY;IACtB;;OAEG;IACH,QAAQ,IAAA;IACR;;OAEG;IACH,uBAAuB,IAAA;IACvB;;OAEG;IACH,oBAAoB,IAAA;IACpB;;OAEG;IACH,eAAe,IAAA;IACf;;OAEG;IACH,WAAW,IAAA;IACX;;OAEG;IACH,iBAAiB,IAAA;IACjB;;OAEG;IACH,sBAAsB,IAAA;CACvB;AAED,oBAAY,cAAc;IACxB,KAAK,IAAA;IACL,OAAO,IAAA;IACP,MAAM,IAAA;CACP;AAED;;GAEG;AACH,oBAAY,YAAY;IACtB,SAAS,cAAc;IACvB,MAAM,WAAW;CAClB"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.PermissionType = exports.ContractType = void 0;
3
+ exports.TronResource = exports.PermissionType = exports.ContractType = void 0;
4
4
  /**
5
5
  * Contract type describes a class of contract in a Transaction. This structure is used to identify what the Contract is.
6
6
  */
@@ -18,6 +18,22 @@ var ContractType;
18
18
  * This is a smart contract type.
19
19
  */
20
20
  ContractType[ContractType["TriggerSmartContract"] = 2] = "TriggerSmartContract";
21
+ /**
22
+ * This is the contract for freezeBuilder
23
+ */
24
+ ContractType[ContractType["FreezeBalanceV2"] = 3] = "FreezeBalanceV2";
25
+ /**
26
+ * This is the contract for voting for witnesses
27
+ */
28
+ ContractType[ContractType["VoteWitness"] = 4] = "VoteWitness";
29
+ /**
30
+ * This is the contract for unfreezing balances
31
+ */
32
+ ContractType[ContractType["UnfreezeBalanceV2"] = 5] = "UnfreezeBalanceV2";
33
+ /**
34
+ * This is the contract for withdrawing expired unfrozen balances
35
+ */
36
+ ContractType[ContractType["WithdrawExpireUnfreeze"] = 6] = "WithdrawExpireUnfreeze";
21
37
  })(ContractType || (exports.ContractType = ContractType = {}));
22
38
  var PermissionType;
23
39
  (function (PermissionType) {
@@ -25,4 +41,12 @@ var PermissionType;
25
41
  PermissionType[PermissionType["Witness"] = 1] = "Witness";
26
42
  PermissionType[PermissionType["Active"] = 2] = "Active";
27
43
  })(PermissionType || (exports.PermissionType = PermissionType = {}));
28
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW51bS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvZW51bS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQTs7R0FFRztBQUNILElBQVksWUFhWDtBQWJELFdBQVksWUFBWTtJQUN0Qjs7T0FFRztJQUNILHVEQUFRLENBQUE7SUFDUjs7T0FFRztJQUNILHFGQUF1QixDQUFBO0lBQ3ZCOztPQUVHO0lBQ0gsK0VBQW9CLENBQUE7QUFDdEIsQ0FBQyxFQWJXLFlBQVksNEJBQVosWUFBWSxRQWF2QjtBQUVELElBQVksY0FJWDtBQUpELFdBQVksY0FBYztJQUN4QixxREFBSyxDQUFBO0lBQ0wseURBQU8sQ0FBQTtJQUNQLHVEQUFNLENBQUE7QUFDUixDQUFDLEVBSlcsY0FBYyw4QkFBZCxjQUFjLFFBSXpCIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb250cmFjdCB0eXBlIGRlc2NyaWJlcyBhIGNsYXNzIG9mIGNvbnRyYWN0IGluIGEgVHJhbnNhY3Rpb24uIFRoaXMgc3RydWN0dXJlIGlzIHVzZWQgdG8gaWRlbnRpZnkgd2hhdCB0aGUgQ29udHJhY3QgaXMuXG4gKi9cbmV4cG9ydCBlbnVtIENvbnRyYWN0VHlwZSB7XG4gIC8qKlxuICAgKiBUaGlzIGlzIGEgdHJhbnNmZXIgb2YgVFJYIGNvbnRyYWN0LlxuICAgKi9cbiAgVHJhbnNmZXIsXG4gIC8qKlxuICAgKiBUaGlzIGlzIHRoZSBtdWx0aS1zaWcgaW5pdGlhbGl6YXRpb24gY29udHJhY3QuXG4gICAqL1xuICBBY2NvdW50UGVybWlzc2lvblVwZGF0ZSxcbiAgLyoqXG4gICAqIFRoaXMgaXMgYSBzbWFydCBjb250cmFjdCB0eXBlLlxuICAgKi9cbiAgVHJpZ2dlclNtYXJ0Q29udHJhY3QsXG59XG5cbmV4cG9ydCBlbnVtIFBlcm1pc3Npb25UeXBlIHtcbiAgT3duZXIsXG4gIFdpdG5lc3MsXG4gIEFjdGl2ZSxcbn1cbiJdfQ==
44
+ /**
45
+ * Tron resource types
46
+ */
47
+ var TronResource;
48
+ (function (TronResource) {
49
+ TronResource["BANDWIDTH"] = "BANDWIDTH";
50
+ TronResource["ENERGY"] = "ENERGY";
51
+ })(TronResource || (exports.TronResource = TronResource = {}));
52
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW51bS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvZW51bS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQTs7R0FFRztBQUNILElBQVksWUE2Qlg7QUE3QkQsV0FBWSxZQUFZO0lBQ3RCOztPQUVHO0lBQ0gsdURBQVEsQ0FBQTtJQUNSOztPQUVHO0lBQ0gscUZBQXVCLENBQUE7SUFDdkI7O09BRUc7SUFDSCwrRUFBb0IsQ0FBQTtJQUNwQjs7T0FFRztJQUNILHFFQUFlLENBQUE7SUFDZjs7T0FFRztJQUNILDZEQUFXLENBQUE7SUFDWDs7T0FFRztJQUNILHlFQUFpQixDQUFBO0lBQ2pCOztPQUVHO0lBQ0gsbUZBQXNCLENBQUE7QUFDeEIsQ0FBQyxFQTdCVyxZQUFZLDRCQUFaLFlBQVksUUE2QnZCO0FBRUQsSUFBWSxjQUlYO0FBSkQsV0FBWSxjQUFjO0lBQ3hCLHFEQUFLLENBQUE7SUFDTCx5REFBTyxDQUFBO0lBQ1AsdURBQU0sQ0FBQTtBQUNSLENBQUMsRUFKVyxjQUFjLDhCQUFkLGNBQWMsUUFJekI7QUFFRDs7R0FFRztBQUNILElBQVksWUFHWDtBQUhELFdBQVksWUFBWTtJQUN0Qix1Q0FBdUIsQ0FBQTtJQUN2QixpQ0FBaUIsQ0FBQTtBQUNuQixDQUFDLEVBSFcsWUFBWSw0QkFBWixZQUFZLFFBR3ZCIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb250cmFjdCB0eXBlIGRlc2NyaWJlcyBhIGNsYXNzIG9mIGNvbnRyYWN0IGluIGEgVHJhbnNhY3Rpb24uIFRoaXMgc3RydWN0dXJlIGlzIHVzZWQgdG8gaWRlbnRpZnkgd2hhdCB0aGUgQ29udHJhY3QgaXMuXG4gKi9cbmV4cG9ydCBlbnVtIENvbnRyYWN0VHlwZSB7XG4gIC8qKlxuICAgKiBUaGlzIGlzIGEgdHJhbnNmZXIgb2YgVFJYIGNvbnRyYWN0LlxuICAgKi9cbiAgVHJhbnNmZXIsXG4gIC8qKlxuICAgKiBUaGlzIGlzIHRoZSBtdWx0aS1zaWcgaW5pdGlhbGl6YXRpb24gY29udHJhY3QuXG4gICAqL1xuICBBY2NvdW50UGVybWlzc2lvblVwZGF0ZSxcbiAgLyoqXG4gICAqIFRoaXMgaXMgYSBzbWFydCBjb250cmFjdCB0eXBlLlxuICAgKi9cbiAgVHJpZ2dlclNtYXJ0Q29udHJhY3QsXG4gIC8qKlxuICAgKiBUaGlzIGlzIHRoZSBjb250cmFjdCBmb3IgZnJlZXplQnVpbGRlclxuICAgKi9cbiAgRnJlZXplQmFsYW5jZVYyLFxuICAvKipcbiAgICogVGhpcyBpcyB0aGUgY29udHJhY3QgZm9yIHZvdGluZyBmb3Igd2l0bmVzc2VzXG4gICAqL1xuICBWb3RlV2l0bmVzcyxcbiAgLyoqXG4gICAqIFRoaXMgaXMgdGhlIGNvbnRyYWN0IGZvciB1bmZyZWV6aW5nIGJhbGFuY2VzXG4gICAqL1xuICBVbmZyZWV6ZUJhbGFuY2VWMixcbiAgLyoqXG4gICAqIFRoaXMgaXMgdGhlIGNvbnRyYWN0IGZvciB3aXRoZHJhd2luZyBleHBpcmVkIHVuZnJvemVuIGJhbGFuY2VzXG4gICAqL1xuICBXaXRoZHJhd0V4cGlyZVVuZnJlZXplLFxufVxuXG5leHBvcnQgZW51bSBQZXJtaXNzaW9uVHlwZSB7XG4gIE93bmVyLFxuICBXaXRuZXNzLFxuICBBY3RpdmUsXG59XG5cbi8qKlxuICogVHJvbiByZXNvdXJjZSB0eXBlc1xuICovXG5leHBvcnQgZW51bSBUcm9uUmVzb3VyY2Uge1xuICBCQU5EV0lEVEggPSAnQkFORFdJRFRIJyxcbiAgRU5FUkdZID0gJ0VORVJHWScsXG59XG4iXX0=
@@ -0,0 +1,71 @@
1
+ import { TransactionType, BaseKey } from '@bitgo-beta/sdk-core';
2
+ import { BaseCoin as CoinConfig } from '@bitgo-beta/statics';
3
+ import { TransactionBuilder } from './transactionBuilder';
4
+ import { Transaction } from './transaction';
5
+ import { TransactionReceipt, FreezeBalanceV2Contract } from './iface';
6
+ export declare class FreezeBalanceTxBuilder extends TransactionBuilder {
7
+ protected _signingKeys: BaseKey[];
8
+ private _frozenBalance;
9
+ private _resource;
10
+ constructor(_coinConfig: Readonly<CoinConfig>);
11
+ /** @inheritdoc */
12
+ protected get transactionType(): TransactionType;
13
+ /**
14
+ * Set the frozen balance amount
15
+ *
16
+ * @param amount amount in TRX to freeze
17
+ * @returns the builder with the new parameter set
18
+ */
19
+ setFrozenBalance(amount: string): this;
20
+ /**
21
+ * Set the resource type
22
+ *
23
+ * @param resource resource type to freeze
24
+ * @returns the builder with the new parameter set
25
+ */
26
+ setResource(resource: string): this;
27
+ /** @inheritdoc */
28
+ extendValidTo(extensionMs: number): void;
29
+ /**
30
+ * Initialize the transaction builder fields using the transaction data
31
+ *
32
+ * @param {TransactionReceipt | string} rawTransaction the transaction data in a string or JSON format
33
+ * @returns {FreezeBalanceTxBuilder} the builder with the transaction data set
34
+ */
35
+ initBuilder(rawTransaction: TransactionReceipt | string): this;
36
+ /**
37
+ * Initialize the freeze contract call specific data
38
+ *
39
+ * @param {FreezeBalanceV2Contract} freezeContractCall object with freeze txn data
40
+ */
41
+ protected initFreezeContractCall(freezeContractCall: FreezeBalanceV2Contract): void;
42
+ protected buildImplementation(): Promise<Transaction>;
43
+ /**
44
+ * Helper method to create the freeze balance transaction
45
+ */
46
+ private createFreezeBalanceTransaction;
47
+ /**
48
+ * Helper method to get the freeze balance transaction raw data hex
49
+ *
50
+ * @returns {string} the freeze balance transaction raw data hex
51
+ */
52
+ private getFreezeRawDataHex;
53
+ /** @inheritdoc */
54
+ protected signImplementation(key: BaseKey): Transaction;
55
+ private applySignatures;
56
+ /**
57
+ * Validates the transaction
58
+ *
59
+ * @param {Transaction} transaction - The transaction to validate
60
+ * @throws {InvalidTransactionError} when the transaction is invalid
61
+ */
62
+ validateTransaction(transaction: Transaction): void;
63
+ /**
64
+ * Validates if the transaction is a valid freeze transaction
65
+ *
66
+ * @param {TransactionReceipt} transaction - The transaction to validate
67
+ * @throws {BuildTransactionError} when the transaction is invalid
68
+ */
69
+ private validateFreezeTransactionFields;
70
+ }
71
+ //# sourceMappingURL=freezeBalanceTxBuilder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"freezeBalanceTxBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/freezeBalanceTxBuilder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,OAAO,EAA+D,MAAM,sBAAsB,CAAC;AAC7H,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,MAAM,SAAS,CAAC;AAYtE,qBAAa,sBAAuB,SAAQ,kBAAkB;IAC5D,SAAS,CAAC,YAAY,EAAE,OAAO,EAAE,CAAC;IAClC,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,SAAS,CAAS;gBAEd,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAM7C,kBAAkB;IAClB,SAAS,KAAK,eAAe,IAAI,eAAe,CAE/C;IAED;;;;;OAKG;IACH,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAKtC;;;;;OAKG;IACH,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAMnC,kBAAkB;IAClB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAoBxC;;;;;OAKG;IACH,WAAW,CAAC,cAAc,EAAE,kBAAkB,GAAG,MAAM,GAAG,IAAI;IAkB9D;;;;OAIG;IACH,SAAS,CAAC,sBAAsB,CAAC,kBAAkB,EAAE,uBAAuB,GAAG,IAAI;cAenE,mBAAmB,IAAI,OAAO,CAAC,WAAW,CAAC;IAc3D;;OAEG;IACH,OAAO,CAAC,8BAA8B;IAqBtC;;;;OAIG;IACH,OAAO,CAAC,mBAAmB;IA0B3B,kBAAkB;IAClB,SAAS,CAAC,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,WAAW;IAUvD,OAAO,CAAC,eAAe;IAQvB;;;;;OAKG;IACH,mBAAmB,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI;IAInD;;;;;OAKG;IACH,OAAO,CAAC,+BAA+B;CAiBxC"}