@bitgo-beta/sdk-coin-vet 1.0.1-beta.335 → 1.0.1-beta.337

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 (97) hide show
  1. package/package.json +8 -8
  2. package/dist/src/index.d.ts +0 -7
  3. package/dist/src/index.d.ts.map +0 -1
  4. package/dist/src/index.js +0 -23
  5. package/dist/src/lib/constants.d.ts +0 -15
  6. package/dist/src/lib/constants.d.ts.map +0 -1
  7. package/dist/src/lib/constants.js +0 -18
  8. package/dist/src/lib/iface.d.ts +0 -36
  9. package/dist/src/lib/iface.d.ts.map +0 -1
  10. package/dist/src/lib/iface.js +0 -3
  11. package/dist/src/lib/index.d.ts +0 -25
  12. package/dist/src/lib/index.d.ts.map +0 -1
  13. package/dist/src/lib/index.js +0 -83
  14. package/dist/src/lib/keyPair.d.ts +0 -26
  15. package/dist/src/lib/keyPair.d.ts.map +0 -1
  16. package/dist/src/lib/keyPair.js +0 -65
  17. package/dist/src/lib/transaction/addressInitializationTransaction.d.ts +0 -31
  18. package/dist/src/lib/transaction/addressInitializationTransaction.d.ts.map +0 -1
  19. package/dist/src/lib/transaction/addressInitializationTransaction.js +0 -170
  20. package/dist/src/lib/transaction/burnNftTransaction.d.ts +0 -26
  21. package/dist/src/lib/transaction/burnNftTransaction.d.ts.map +0 -1
  22. package/dist/src/lib/transaction/burnNftTransaction.js +0 -124
  23. package/dist/src/lib/transaction/claimRewards.d.ts +0 -41
  24. package/dist/src/lib/transaction/claimRewards.d.ts.map +0 -1
  25. package/dist/src/lib/transaction/claimRewards.js +0 -210
  26. package/dist/src/lib/transaction/exitDelegation.d.ts +0 -26
  27. package/dist/src/lib/transaction/exitDelegation.d.ts.map +0 -1
  28. package/dist/src/lib/transaction/exitDelegation.js +0 -124
  29. package/dist/src/lib/transaction/flushTokenTransaction.d.ts +0 -20
  30. package/dist/src/lib/transaction/flushTokenTransaction.d.ts.map +0 -1
  31. package/dist/src/lib/transaction/flushTokenTransaction.js +0 -98
  32. package/dist/src/lib/transaction/nftTransaction.d.ts +0 -17
  33. package/dist/src/lib/transaction/nftTransaction.d.ts.map +0 -1
  34. package/dist/src/lib/transaction/nftTransaction.js +0 -108
  35. package/dist/src/lib/transaction/stakingTransaction.d.ts +0 -31
  36. package/dist/src/lib/transaction/stakingTransaction.d.ts.map +0 -1
  37. package/dist/src/lib/transaction/stakingTransaction.js +0 -169
  38. package/dist/src/lib/transaction/tokenTransaction.d.ts +0 -14
  39. package/dist/src/lib/transaction/tokenTransaction.d.ts.map +0 -1
  40. package/dist/src/lib/transaction/tokenTransaction.js +0 -95
  41. package/dist/src/lib/transaction/transaction.d.ts +0 -106
  42. package/dist/src/lib/transaction/transaction.d.ts.map +0 -1
  43. package/dist/src/lib/transaction/transaction.js +0 -468
  44. package/dist/src/lib/transactionBuilder/addressInitializationBuilder.d.ts +0 -78
  45. package/dist/src/lib/transactionBuilder/addressInitializationBuilder.d.ts.map +0 -1
  46. package/dist/src/lib/transactionBuilder/addressInitializationBuilder.js +0 -158
  47. package/dist/src/lib/transactionBuilder/burnNftBuilder.d.ts +0 -59
  48. package/dist/src/lib/transactionBuilder/burnNftBuilder.d.ts.map +0 -1
  49. package/dist/src/lib/transactionBuilder/burnNftBuilder.js +0 -118
  50. package/dist/src/lib/transactionBuilder/claimRewardsBuilder.d.ts +0 -57
  51. package/dist/src/lib/transactionBuilder/claimRewardsBuilder.d.ts.map +0 -1
  52. package/dist/src/lib/transactionBuilder/claimRewardsBuilder.js +0 -142
  53. package/dist/src/lib/transactionBuilder/exitDelegationBuilder.d.ts +0 -58
  54. package/dist/src/lib/transactionBuilder/exitDelegationBuilder.d.ts.map +0 -1
  55. package/dist/src/lib/transactionBuilder/exitDelegationBuilder.js +0 -115
  56. package/dist/src/lib/transactionBuilder/flushTokenTransactionBuilder.d.ts +0 -66
  57. package/dist/src/lib/transactionBuilder/flushTokenTransactionBuilder.d.ts.map +0 -1
  58. package/dist/src/lib/transactionBuilder/flushTokenTransactionBuilder.js +0 -129
  59. package/dist/src/lib/transactionBuilder/nftTransactionBuilder.d.ts +0 -23
  60. package/dist/src/lib/transactionBuilder/nftTransactionBuilder.d.ts.map +0 -1
  61. package/dist/src/lib/transactionBuilder/nftTransactionBuilder.js +0 -93
  62. package/dist/src/lib/transactionBuilder/stakingBuilder.d.ts +0 -73
  63. package/dist/src/lib/transactionBuilder/stakingBuilder.d.ts.map +0 -1
  64. package/dist/src/lib/transactionBuilder/stakingBuilder.js +0 -147
  65. package/dist/src/lib/transactionBuilder/tokenTransactionBuilder.d.ts +0 -21
  66. package/dist/src/lib/transactionBuilder/tokenTransactionBuilder.d.ts.map +0 -1
  67. package/dist/src/lib/transactionBuilder/tokenTransactionBuilder.js +0 -70
  68. package/dist/src/lib/transactionBuilder/transactionBuilder.d.ts +0 -54
  69. package/dist/src/lib/transactionBuilder/transactionBuilder.d.ts.map +0 -1
  70. package/dist/src/lib/transactionBuilder/transactionBuilder.js +0 -155
  71. package/dist/src/lib/transactionBuilder/transferBuilder.d.ts +0 -10
  72. package/dist/src/lib/transactionBuilder/transferBuilder.d.ts.map +0 -1
  73. package/dist/src/lib/transactionBuilder/transferBuilder.js +0 -45
  74. package/dist/src/lib/transactionBuilderFactory.d.ts +0 -71
  75. package/dist/src/lib/transactionBuilderFactory.d.ts.map +0 -1
  76. package/dist/src/lib/transactionBuilderFactory.js +0 -155
  77. package/dist/src/lib/types.d.ts +0 -15
  78. package/dist/src/lib/types.d.ts.map +0 -1
  79. package/dist/src/lib/types.js +0 -3
  80. package/dist/src/lib/utils.d.ts +0 -94
  81. package/dist/src/lib/utils.d.ts.map +0 -1
  82. package/dist/src/lib/utils.js +0 -277
  83. package/dist/src/register.d.ts +0 -3
  84. package/dist/src/register.d.ts.map +0 -1
  85. package/dist/src/register.js +0 -19
  86. package/dist/src/tvet.d.ts +0 -20
  87. package/dist/src/tvet.d.ts.map +0 -1
  88. package/dist/src/tvet.js +0 -30
  89. package/dist/src/vet.d.ts +0 -53
  90. package/dist/src/vet.d.ts.map +0 -1
  91. package/dist/src/vet.js +0 -267
  92. package/dist/src/vetNFTCollection.d.ts +0 -18
  93. package/dist/src/vetNFTCollection.d.ts.map +0 -1
  94. package/dist/src/vetNFTCollection.js +0 -52
  95. package/dist/src/vetToken.d.ts +0 -19
  96. package/dist/src/vetToken.d.ts.map +0 -1
  97. package/dist/src/vetToken.js +0 -52
@@ -1 +0,0 @@
1
- {"version":3,"file":"transactionBuilderFactory.d.ts","sourceRoot":"","sources":["../../../src/lib/transactionBuilderFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,IAAI,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAClE,OAAO,EAAE,6BAA6B,EAA2B,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC/G,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AAC7E,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AACvE,OAAO,EAAE,4BAA4B,EAAE,MAAM,mDAAmD,CAAC;AACjG,OAAO,EAAE,4BAA4B,EAAE,MAAM,mDAAmD,CAAC;AACjG,OAAO,EAAE,qBAAqB,EAAE,MAAM,4CAA4C,CAAC;AACnF,OAAO,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0CAA0C,CAAC;AAC/E,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAExD,OAAO,EAAE,gCAAgC,EAAE,MAAM,gDAAgD,CAAC;AAClG,OAAO,EAAE,qBAAqB,EAAE,MAAM,qCAAqC,CAAC;AAC5E,OAAO,EAAE,yBAAyB,EAAE,MAAM,8BAA8B,CAAC;AACzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AACrE,OAAO,EAAE,uBAAuB,EAAE,MAAM,8CAA8C,CAAC;AAEvF,OAAO,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AACrE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EAAE,qBAAqB,EAAE,MAAM,4CAA4C,CAAC;AAGnF,qBAAa,yBAA0B,SAAQ,6BAA6B;gBAC9D,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAI7C,kBAAkB;IAClB,IAAI,CAAC,WAAW,EAAE,MAAM,GAAG,kBAAkB;IAiD7C,kBAAkB;IAClB,kBAAkB,CAAC,EAAE,CAAC,EAAE,WAAW,GAAG,eAAe;IAIrD,+BAA+B,CAAC,EAAE,CAAC,EAAE,gCAAgC,GAAG,4BAA4B;IAIpG,+BAA+B,CAAC,EAAE,CAAC,EAAE,qBAAqB,GAAG,4BAA4B;IAIzF,0BAA0B,CAAC,EAAE,CAAC,EAAE,WAAW,GAAG,uBAAuB;IAIrE,iBAAiB,CAAC,EAAE,CAAC,EAAE,kBAAkB,GAAG,cAAc;IAI1D;;;;;OAKG;IACH,wBAAwB,CAAC,EAAE,CAAC,EAAE,WAAW,GAAG,qBAAqB;IAIjE;;;;;OAKG;IACH,wBAAwB,CAAC,EAAE,CAAC,EAAE,yBAAyB,GAAG,qBAAqB;IAI/E;;;;;OAKG;IACH,iBAAiB,CAAC,EAAE,CAAC,EAAE,kBAAkB,GAAG,cAAc;IAI1D;;;;;OAKG;IACH,sBAAsB,CAAC,EAAE,CAAC,EAAE,uBAAuB,GAAG,mBAAmB;IAIzE,kBAAkB;IAClB,8BAA8B,IAAI,IAAI;IAItC,+BAA+B,CAAC,SAAS,EAAE,cAAc,GAAG,eAAe;IAI3E;;;;;;OAMG;IACH,OAAO,CAAC,iBAAiB;CAM1B"}
@@ -1,155 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.TransactionBuilderFactory = void 0;
7
- const sdk_core_1 = require("@bitgo-beta/sdk-core");
8
- const transferBuilder_1 = require("./transactionBuilder/transferBuilder");
9
- const addressInitializationBuilder_1 = require("./transactionBuilder/addressInitializationBuilder");
10
- const flushTokenTransactionBuilder_1 = require("./transactionBuilder/flushTokenTransactionBuilder");
11
- const exitDelegationBuilder_1 = require("./transactionBuilder/exitDelegationBuilder");
12
- const burnNftBuilder_1 = require("./transactionBuilder/burnNftBuilder");
13
- const claimRewardsBuilder_1 = require("./transactionBuilder/claimRewardsBuilder");
14
- const transaction_1 = require("./transaction/transaction");
15
- const utils_1 = __importDefault(require("./utils"));
16
- const addressInitializationTransaction_1 = require("./transaction/addressInitializationTransaction");
17
- const flushTokenTransaction_1 = require("./transaction/flushTokenTransaction");
18
- const exitDelegation_1 = require("./transaction/exitDelegation");
19
- const burnNftTransaction_1 = require("./transaction/burnNftTransaction");
20
- const claimRewards_1 = require("./transaction/claimRewards");
21
- const tokenTransactionBuilder_1 = require("./transactionBuilder/tokenTransactionBuilder");
22
- const tokenTransaction_1 = require("./transaction/tokenTransaction");
23
- const stakingBuilder_1 = require("./transactionBuilder/stakingBuilder");
24
- const stakingTransaction_1 = require("./transaction/stakingTransaction");
25
- const nftTransactionBuilder_1 = require("./transactionBuilder/nftTransactionBuilder");
26
- const nftTransaction_1 = require("./transaction/nftTransaction");
27
- class TransactionBuilderFactory extends sdk_core_1.BaseTransactionBuilderFactory {
28
- constructor(_coinConfig) {
29
- super(_coinConfig);
30
- }
31
- /** @inheritdoc */
32
- from(signedRawTx) {
33
- try {
34
- const signedTx = transaction_1.Transaction.deserializeTransaction(signedRawTx);
35
- const type = this.getTransactionTypeFromSignedTxn(signedTx);
36
- switch (type) {
37
- case sdk_core_1.TransactionType.Send:
38
- const transferTx = new transaction_1.Transaction(this._coinConfig);
39
- transferTx.fromDeserializedSignedTransaction(signedTx);
40
- return this.getTransferBuilder(transferTx);
41
- case sdk_core_1.TransactionType.AddressInitialization:
42
- const addressInitializationTx = new addressInitializationTransaction_1.AddressInitializationTransaction(this._coinConfig);
43
- addressInitializationTx.fromDeserializedSignedTransaction(signedTx);
44
- return this.getAddressInitializationBuilder(addressInitializationTx);
45
- case sdk_core_1.TransactionType.FlushTokens:
46
- const flushTokenTx = new flushTokenTransaction_1.FlushTokenTransaction(this._coinConfig);
47
- flushTokenTx.fromDeserializedSignedTransaction(signedTx);
48
- return this.getFlushTokenTransactionBuilder(flushTokenTx);
49
- case sdk_core_1.TransactionType.SendToken:
50
- const tokenTransferTx = new tokenTransaction_1.TokenTransaction(this._coinConfig);
51
- tokenTransferTx.fromDeserializedSignedTransaction(signedTx);
52
- return this.getTokenTransactionBuilder(tokenTransferTx);
53
- case sdk_core_1.TransactionType.SendNFT:
54
- const nftTransferTx = new nftTransaction_1.NFTTransaction(this._coinConfig);
55
- nftTransferTx.fromDeserializedSignedTransaction(signedTx);
56
- return this.getNFTTransactionBuilder(nftTransferTx);
57
- case sdk_core_1.TransactionType.ContractCall:
58
- const stakingTx = new stakingTransaction_1.StakingTransaction(this._coinConfig);
59
- stakingTx.fromDeserializedSignedTransaction(signedTx);
60
- return this.getStakingBuilder(stakingTx);
61
- case sdk_core_1.TransactionType.StakingUnlock:
62
- const exitDelegationTx = new exitDelegation_1.ExitDelegationTransaction(this._coinConfig);
63
- exitDelegationTx.fromDeserializedSignedTransaction(signedTx);
64
- return this.getExitDelegationBuilder(exitDelegationTx);
65
- case sdk_core_1.TransactionType.StakingWithdraw:
66
- const burnNftTx = new burnNftTransaction_1.BurnNftTransaction(this._coinConfig);
67
- burnNftTx.fromDeserializedSignedTransaction(signedTx);
68
- return this.getBurnNftBuilder(burnNftTx);
69
- case sdk_core_1.TransactionType.StakingClaim:
70
- const claimRewardsTx = new claimRewards_1.ClaimRewardsTransaction(this._coinConfig);
71
- claimRewardsTx.fromDeserializedSignedTransaction(signedTx);
72
- return this.getClaimRewardsBuilder(claimRewardsTx);
73
- default:
74
- throw new sdk_core_1.InvalidTransactionError('Invalid transaction type');
75
- }
76
- }
77
- catch (e) {
78
- throw e;
79
- }
80
- }
81
- /** @inheritdoc */
82
- getTransferBuilder(tx) {
83
- return this.initializeBuilder(tx, new transferBuilder_1.TransferBuilder(this._coinConfig));
84
- }
85
- getAddressInitializationBuilder(tx) {
86
- return this.initializeBuilder(tx, new addressInitializationBuilder_1.AddressInitializationBuilder(this._coinConfig));
87
- }
88
- getFlushTokenTransactionBuilder(tx) {
89
- return this.initializeBuilder(tx, new flushTokenTransactionBuilder_1.FlushTokenTransactionBuilder(this._coinConfig));
90
- }
91
- getTokenTransactionBuilder(tx) {
92
- return this.initializeBuilder(tx, new tokenTransactionBuilder_1.TokenTransactionBuilder(this._coinConfig));
93
- }
94
- getStakingBuilder(tx) {
95
- return this.initializeBuilder(tx, new stakingBuilder_1.StakingBuilder(this._coinConfig));
96
- }
97
- /**
98
- * Gets an nft transaction builder.
99
- *
100
- * @param {NFTTransaction} tx - The nft transaction to use
101
- * @returns {NFTTransactionBuilder} The nft transaction builder
102
- */
103
- getNFTTransactionBuilder(tx) {
104
- return this.initializeBuilder(tx, new nftTransactionBuilder_1.NFTTransactionBuilder(this._coinConfig));
105
- }
106
- /**
107
- * Gets an exit delegation transaction builder.
108
- *
109
- * @param {ExitDelegationTransaction} tx - The exit delegation transaction to use
110
- * @returns {ExitDelegationBuilder} The exit delegation transaction builder
111
- */
112
- getExitDelegationBuilder(tx) {
113
- return this.initializeBuilder(tx, new exitDelegationBuilder_1.ExitDelegationBuilder(this._coinConfig));
114
- }
115
- /**
116
- * Gets a burn NFT transaction builder.
117
- *
118
- * @param {BurnNftTransaction} tx - The burn NFT transaction to use
119
- * @returns {BurnNftBuilder} The burn NFT transaction builder
120
- */
121
- getBurnNftBuilder(tx) {
122
- return this.initializeBuilder(tx, new burnNftBuilder_1.BurnNftBuilder(this._coinConfig));
123
- }
124
- /**
125
- * Gets a claim rewards transaction builder.
126
- *
127
- * @param {ClaimRewardsTransaction} tx - The claim rewards transaction to use
128
- * @returns {ClaimRewardsBuilder} The claim rewards transaction builder
129
- */
130
- getClaimRewardsBuilder(tx) {
131
- return this.initializeBuilder(tx, new claimRewardsBuilder_1.ClaimRewardsBuilder(this._coinConfig));
132
- }
133
- /** @inheritdoc */
134
- getWalletInitializationBuilder() {
135
- throw new Error('Method not implemented.');
136
- }
137
- getTransactionTypeFromSignedTxn(signedTxn) {
138
- return utils_1.default.getTransactionTypeFromClause(signedTxn.body.clauses);
139
- }
140
- /**
141
- * Initialize the builder with the given transaction
142
- *
143
- * @param {Transaction | undefined} tx - the transaction used to initialize the builder
144
- * @param {TransactionBuilder} builder - the builder to be initialized
145
- * @returns {TransactionBuilder} the builder initialized
146
- */
147
- initializeBuilder(tx, builder) {
148
- if (tx) {
149
- builder.initBuilder(tx);
150
- }
151
- return builder;
152
- }
153
- }
154
- exports.TransactionBuilderFactory = TransactionBuilderFactory;
155
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvdHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFDQSxtREFBK0c7QUFHL0csMEVBQXVFO0FBQ3ZFLG9HQUFpRztBQUNqRyxvR0FBaUc7QUFDakcsc0ZBQW1GO0FBQ25GLHdFQUFxRTtBQUNyRSxrRkFBK0U7QUFDL0UsMkRBQXdEO0FBQ3hELG9EQUE0QjtBQUM1QixxR0FBa0c7QUFDbEcsK0VBQTRFO0FBQzVFLGlFQUF5RTtBQUN6RSx5RUFBc0U7QUFDdEUsNkRBQXFFO0FBQ3JFLDBGQUF1RjtBQUN2RixxRUFBa0U7QUFDbEUsd0VBQXFFO0FBQ3JFLHlFQUFzRTtBQUN0RSxzRkFBbUY7QUFDbkYsaUVBQThEO0FBRTlELE1BQWEseUJBQTBCLFNBQVEsd0NBQTZCO0lBQzFFLFlBQVksV0FBaUM7UUFDM0MsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3JCLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsSUFBSSxDQUFDLFdBQW1CO1FBQ3RCLElBQUksQ0FBQztZQUNILE1BQU0sUUFBUSxHQUFHLHlCQUFXLENBQUMsc0JBQXNCLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDakUsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLCtCQUErQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzVELFFBQVEsSUFBSSxFQUFFLENBQUM7Z0JBQ2IsS0FBSywwQkFBZSxDQUFDLElBQUk7b0JBQ3ZCLE1BQU0sVUFBVSxHQUFHLElBQUkseUJBQVcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7b0JBQ3JELFVBQVUsQ0FBQyxpQ0FBaUMsQ0FBQyxRQUFRLENBQUMsQ0FBQztvQkFDdkQsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQzdDLEtBQUssMEJBQWUsQ0FBQyxxQkFBcUI7b0JBQ3hDLE1BQU0sdUJBQXVCLEdBQUcsSUFBSSxtRUFBZ0MsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7b0JBQ3ZGLHVCQUF1QixDQUFDLGlDQUFpQyxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUNwRSxPQUFPLElBQUksQ0FBQywrQkFBK0IsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO2dCQUN2RSxLQUFLLDBCQUFlLENBQUMsV0FBVztvQkFDOUIsTUFBTSxZQUFZLEdBQUcsSUFBSSw2Q0FBcUIsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7b0JBQ2pFLFlBQVksQ0FBQyxpQ0FBaUMsQ0FBQyxRQUFRLENBQUMsQ0FBQztvQkFDekQsT0FBTyxJQUFJLENBQUMsK0JBQStCLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBQzVELEtBQUssMEJBQWUsQ0FBQyxTQUFTO29CQUM1QixNQUFNLGVBQWUsR0FBRyxJQUFJLG1DQUFnQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztvQkFDL0QsZUFBZSxDQUFDLGlDQUFpQyxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUM1RCxPQUFPLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxlQUFlLENBQUMsQ0FBQztnQkFDMUQsS0FBSywwQkFBZSxDQUFDLE9BQU87b0JBQzFCLE1BQU0sYUFBYSxHQUFHLElBQUksK0JBQWMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7b0JBQzNELGFBQWEsQ0FBQyxpQ0FBaUMsQ0FBQyxRQUFRLENBQUMsQ0FBQztvQkFDMUQsT0FBTyxJQUFJLENBQUMsd0JBQXdCLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBQ3RELEtBQUssMEJBQWUsQ0FBQyxZQUFZO29CQUMvQixNQUFNLFNBQVMsR0FBRyxJQUFJLHVDQUFrQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztvQkFDM0QsU0FBUyxDQUFDLGlDQUFpQyxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUN0RCxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDM0MsS0FBSywwQkFBZSxDQUFDLGFBQWE7b0JBQ2hDLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSwwQ0FBeUIsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7b0JBQ3pFLGdCQUFnQixDQUFDLGlDQUFpQyxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUM3RCxPQUFPLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO2dCQUN6RCxLQUFLLDBCQUFlLENBQUMsZUFBZTtvQkFDbEMsTUFBTSxTQUFTLEdBQUcsSUFBSSx1Q0FBa0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7b0JBQzNELFNBQVMsQ0FBQyxpQ0FBaUMsQ0FBQyxRQUFRLENBQUMsQ0FBQztvQkFDdEQsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQzNDLEtBQUssMEJBQWUsQ0FBQyxZQUFZO29CQUMvQixNQUFNLGNBQWMsR0FBRyxJQUFJLHNDQUF1QixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztvQkFDckUsY0FBYyxDQUFDLGlDQUFpQyxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUMzRCxPQUFPLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxjQUFjLENBQUMsQ0FBQztnQkFDckQ7b0JBQ0UsTUFBTSxJQUFJLGtDQUF1QixDQUFDLDBCQUEwQixDQUFDLENBQUM7WUFDbEUsQ0FBQztRQUNILENBQUM7UUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ1gsTUFBTSxDQUFDLENBQUM7UUFDVixDQUFDO0lBQ0gsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixrQkFBa0IsQ0FBQyxFQUFnQjtRQUNqQyxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLEVBQUUsSUFBSSxpQ0FBZSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFFRCwrQkFBK0IsQ0FBQyxFQUFxQztRQUNuRSxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLEVBQUUsSUFBSSwyREFBNEIsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztJQUN4RixDQUFDO0lBRUQsK0JBQStCLENBQUMsRUFBMEI7UUFDeEQsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsRUFBRSxFQUFFLElBQUksMkRBQTRCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7SUFDeEYsQ0FBQztJQUVELDBCQUEwQixDQUFDLEVBQWdCO1FBQ3pDLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsRUFBRSxJQUFJLGlEQUF1QixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO0lBQ25GLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxFQUF1QjtRQUN2QyxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLEVBQUUsSUFBSSwrQkFBYyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO0lBQzFFLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILHdCQUF3QixDQUFDLEVBQWdCO1FBQ3ZDLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsRUFBRSxJQUFJLDZDQUFxQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO0lBQ2pGLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILHdCQUF3QixDQUFDLEVBQThCO1FBQ3JELE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsRUFBRSxJQUFJLDZDQUFxQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO0lBQ2pGLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILGlCQUFpQixDQUFDLEVBQXVCO1FBQ3ZDLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsRUFBRSxJQUFJLCtCQUFjLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7SUFDMUUsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsc0JBQXNCLENBQUMsRUFBNEI7UUFDakQsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsRUFBRSxFQUFFLElBQUkseUNBQW1CLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7SUFDL0UsQ0FBQztJQUVELGtCQUFrQjtJQUNsQiw4QkFBOEI7UUFDNUIsTUFBTSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFRCwrQkFBK0IsQ0FBQyxTQUF5QjtRQUN2RCxPQUFPLGVBQUssQ0FBQyw0QkFBNEIsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3BFLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSyxpQkFBaUIsQ0FBK0IsRUFBMkIsRUFBRSxPQUFVO1FBQzdGLElBQUksRUFBRSxFQUFFLENBQUM7WUFDUCxPQUFPLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzFCLENBQUM7UUFDRCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0NBQ0Y7QUExSUQsOERBMElDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVHJhbnNhY3Rpb24gYXMgVmV0VHJhbnNhY3Rpb24gfSBmcm9tICdAdmVjaGFpbi9zZGstY29yZSc7XG5pbXBvcnQgeyBCYXNlVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeSwgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IsIFRyYW5zYWN0aW9uVHlwZSB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IEJhc2VDb2luIGFzIENvaW5Db25maWcgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uQnVpbGRlciB9IGZyb20gJy4vdHJhbnNhY3Rpb25CdWlsZGVyL3RyYW5zYWN0aW9uQnVpbGRlcic7XG5pbXBvcnQgeyBUcmFuc2ZlckJ1aWxkZXIgfSBmcm9tICcuL3RyYW5zYWN0aW9uQnVpbGRlci90cmFuc2ZlckJ1aWxkZXInO1xuaW1wb3J0IHsgQWRkcmVzc0luaXRpYWxpemF0aW9uQnVpbGRlciB9IGZyb20gJy4vdHJhbnNhY3Rpb25CdWlsZGVyL2FkZHJlc3NJbml0aWFsaXphdGlvbkJ1aWxkZXInO1xuaW1wb3J0IHsgRmx1c2hUb2tlblRyYW5zYWN0aW9uQnVpbGRlciB9IGZyb20gJy4vdHJhbnNhY3Rpb25CdWlsZGVyL2ZsdXNoVG9rZW5UcmFuc2FjdGlvbkJ1aWxkZXInO1xuaW1wb3J0IHsgRXhpdERlbGVnYXRpb25CdWlsZGVyIH0gZnJvbSAnLi90cmFuc2FjdGlvbkJ1aWxkZXIvZXhpdERlbGVnYXRpb25CdWlsZGVyJztcbmltcG9ydCB7IEJ1cm5OZnRCdWlsZGVyIH0gZnJvbSAnLi90cmFuc2FjdGlvbkJ1aWxkZXIvYnVybk5mdEJ1aWxkZXInO1xuaW1wb3J0IHsgQ2xhaW1SZXdhcmRzQnVpbGRlciB9IGZyb20gJy4vdHJhbnNhY3Rpb25CdWlsZGVyL2NsYWltUmV3YXJkc0J1aWxkZXInO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb24gfSBmcm9tICcuL3RyYW5zYWN0aW9uL3RyYW5zYWN0aW9uJztcbmltcG9ydCB1dGlscyBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IEFkZHJlc3NJbml0aWFsaXphdGlvblRyYW5zYWN0aW9uIH0gZnJvbSAnLi90cmFuc2FjdGlvbi9hZGRyZXNzSW5pdGlhbGl6YXRpb25UcmFuc2FjdGlvbic7XG5pbXBvcnQgeyBGbHVzaFRva2VuVHJhbnNhY3Rpb24gfSBmcm9tICcuL3RyYW5zYWN0aW9uL2ZsdXNoVG9rZW5UcmFuc2FjdGlvbic7XG5pbXBvcnQgeyBFeGl0RGVsZWdhdGlvblRyYW5zYWN0aW9uIH0gZnJvbSAnLi90cmFuc2FjdGlvbi9leGl0RGVsZWdhdGlvbic7XG5pbXBvcnQgeyBCdXJuTmZ0VHJhbnNhY3Rpb24gfSBmcm9tICcuL3RyYW5zYWN0aW9uL2J1cm5OZnRUcmFuc2FjdGlvbic7XG5pbXBvcnQgeyBDbGFpbVJld2FyZHNUcmFuc2FjdGlvbiB9IGZyb20gJy4vdHJhbnNhY3Rpb24vY2xhaW1SZXdhcmRzJztcbmltcG9ydCB7IFRva2VuVHJhbnNhY3Rpb25CdWlsZGVyIH0gZnJvbSAnLi90cmFuc2FjdGlvbkJ1aWxkZXIvdG9rZW5UcmFuc2FjdGlvbkJ1aWxkZXInO1xuaW1wb3J0IHsgVG9rZW5UcmFuc2FjdGlvbiB9IGZyb20gJy4vdHJhbnNhY3Rpb24vdG9rZW5UcmFuc2FjdGlvbic7XG5pbXBvcnQgeyBTdGFraW5nQnVpbGRlciB9IGZyb20gJy4vdHJhbnNhY3Rpb25CdWlsZGVyL3N0YWtpbmdCdWlsZGVyJztcbmltcG9ydCB7IFN0YWtpbmdUcmFuc2FjdGlvbiB9IGZyb20gJy4vdHJhbnNhY3Rpb24vc3Rha2luZ1RyYW5zYWN0aW9uJztcbmltcG9ydCB7IE5GVFRyYW5zYWN0aW9uQnVpbGRlciB9IGZyb20gJy4vdHJhbnNhY3Rpb25CdWlsZGVyL25mdFRyYW5zYWN0aW9uQnVpbGRlcic7XG5pbXBvcnQgeyBORlRUcmFuc2FjdGlvbiB9IGZyb20gJy4vdHJhbnNhY3Rpb24vbmZ0VHJhbnNhY3Rpb24nO1xuXG5leHBvcnQgY2xhc3MgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeSBleHRlbmRzIEJhc2VUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5IHtcbiAgY29uc3RydWN0b3IoX2NvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KSB7XG4gICAgc3VwZXIoX2NvaW5Db25maWcpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGZyb20oc2lnbmVkUmF3VHg6IHN0cmluZyk6IFRyYW5zYWN0aW9uQnVpbGRlciB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHNpZ25lZFR4ID0gVHJhbnNhY3Rpb24uZGVzZXJpYWxpemVUcmFuc2FjdGlvbihzaWduZWRSYXdUeCk7XG4gICAgICBjb25zdCB0eXBlID0gdGhpcy5nZXRUcmFuc2FjdGlvblR5cGVGcm9tU2lnbmVkVHhuKHNpZ25lZFR4KTtcbiAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5TZW5kOlxuICAgICAgICAgIGNvbnN0IHRyYW5zZmVyVHggPSBuZXcgVHJhbnNhY3Rpb24odGhpcy5fY29pbkNvbmZpZyk7XG4gICAgICAgICAgdHJhbnNmZXJUeC5mcm9tRGVzZXJpYWxpemVkU2lnbmVkVHJhbnNhY3Rpb24oc2lnbmVkVHgpO1xuICAgICAgICAgIHJldHVybiB0aGlzLmdldFRyYW5zZmVyQnVpbGRlcih0cmFuc2ZlclR4KTtcbiAgICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuQWRkcmVzc0luaXRpYWxpemF0aW9uOlxuICAgICAgICAgIGNvbnN0IGFkZHJlc3NJbml0aWFsaXphdGlvblR4ID0gbmV3IEFkZHJlc3NJbml0aWFsaXphdGlvblRyYW5zYWN0aW9uKHRoaXMuX2NvaW5Db25maWcpO1xuICAgICAgICAgIGFkZHJlc3NJbml0aWFsaXphdGlvblR4LmZyb21EZXNlcmlhbGl6ZWRTaWduZWRUcmFuc2FjdGlvbihzaWduZWRUeCk7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QWRkcmVzc0luaXRpYWxpemF0aW9uQnVpbGRlcihhZGRyZXNzSW5pdGlhbGl6YXRpb25UeCk7XG4gICAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLkZsdXNoVG9rZW5zOlxuICAgICAgICAgIGNvbnN0IGZsdXNoVG9rZW5UeCA9IG5ldyBGbHVzaFRva2VuVHJhbnNhY3Rpb24odGhpcy5fY29pbkNvbmZpZyk7XG4gICAgICAgICAgZmx1c2hUb2tlblR4LmZyb21EZXNlcmlhbGl6ZWRTaWduZWRUcmFuc2FjdGlvbihzaWduZWRUeCk7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Rmx1c2hUb2tlblRyYW5zYWN0aW9uQnVpbGRlcihmbHVzaFRva2VuVHgpO1xuICAgICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5TZW5kVG9rZW46XG4gICAgICAgICAgY29uc3QgdG9rZW5UcmFuc2ZlclR4ID0gbmV3IFRva2VuVHJhbnNhY3Rpb24odGhpcy5fY29pbkNvbmZpZyk7XG4gICAgICAgICAgdG9rZW5UcmFuc2ZlclR4LmZyb21EZXNlcmlhbGl6ZWRTaWduZWRUcmFuc2FjdGlvbihzaWduZWRUeCk7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VG9rZW5UcmFuc2FjdGlvbkJ1aWxkZXIodG9rZW5UcmFuc2ZlclR4KTtcbiAgICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuU2VuZE5GVDpcbiAgICAgICAgICBjb25zdCBuZnRUcmFuc2ZlclR4ID0gbmV3IE5GVFRyYW5zYWN0aW9uKHRoaXMuX2NvaW5Db25maWcpO1xuICAgICAgICAgIG5mdFRyYW5zZmVyVHguZnJvbURlc2VyaWFsaXplZFNpZ25lZFRyYW5zYWN0aW9uKHNpZ25lZFR4KTtcbiAgICAgICAgICByZXR1cm4gdGhpcy5nZXRORlRUcmFuc2FjdGlvbkJ1aWxkZXIobmZ0VHJhbnNmZXJUeCk7XG4gICAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLkNvbnRyYWN0Q2FsbDpcbiAgICAgICAgICBjb25zdCBzdGFraW5nVHggPSBuZXcgU3Rha2luZ1RyYW5zYWN0aW9uKHRoaXMuX2NvaW5Db25maWcpO1xuICAgICAgICAgIHN0YWtpbmdUeC5mcm9tRGVzZXJpYWxpemVkU2lnbmVkVHJhbnNhY3Rpb24oc2lnbmVkVHgpO1xuICAgICAgICAgIHJldHVybiB0aGlzLmdldFN0YWtpbmdCdWlsZGVyKHN0YWtpbmdUeCk7XG4gICAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdVbmxvY2s6XG4gICAgICAgICAgY29uc3QgZXhpdERlbGVnYXRpb25UeCA9IG5ldyBFeGl0RGVsZWdhdGlvblRyYW5zYWN0aW9uKHRoaXMuX2NvaW5Db25maWcpO1xuICAgICAgICAgIGV4aXREZWxlZ2F0aW9uVHguZnJvbURlc2VyaWFsaXplZFNpZ25lZFRyYW5zYWN0aW9uKHNpZ25lZFR4KTtcbiAgICAgICAgICByZXR1cm4gdGhpcy5nZXRFeGl0RGVsZWdhdGlvbkJ1aWxkZXIoZXhpdERlbGVnYXRpb25UeCk7XG4gICAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdXaXRoZHJhdzpcbiAgICAgICAgICBjb25zdCBidXJuTmZ0VHggPSBuZXcgQnVybk5mdFRyYW5zYWN0aW9uKHRoaXMuX2NvaW5Db25maWcpO1xuICAgICAgICAgIGJ1cm5OZnRUeC5mcm9tRGVzZXJpYWxpemVkU2lnbmVkVHJhbnNhY3Rpb24oc2lnbmVkVHgpO1xuICAgICAgICAgIHJldHVybiB0aGlzLmdldEJ1cm5OZnRCdWlsZGVyKGJ1cm5OZnRUeCk7XG4gICAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdDbGFpbTpcbiAgICAgICAgICBjb25zdCBjbGFpbVJld2FyZHNUeCA9IG5ldyBDbGFpbVJld2FyZHNUcmFuc2FjdGlvbih0aGlzLl9jb2luQ29uZmlnKTtcbiAgICAgICAgICBjbGFpbVJld2FyZHNUeC5mcm9tRGVzZXJpYWxpemVkU2lnbmVkVHJhbnNhY3Rpb24oc2lnbmVkVHgpO1xuICAgICAgICAgIHJldHVybiB0aGlzLmdldENsYWltUmV3YXJkc0J1aWxkZXIoY2xhaW1SZXdhcmRzVHgpO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcignSW52YWxpZCB0cmFuc2FjdGlvbiB0eXBlJyk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgZ2V0VHJhbnNmZXJCdWlsZGVyKHR4PzogVHJhbnNhY3Rpb24pOiBUcmFuc2ZlckJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLmluaXRpYWxpemVCdWlsZGVyKHR4LCBuZXcgVHJhbnNmZXJCdWlsZGVyKHRoaXMuX2NvaW5Db25maWcpKTtcbiAgfVxuXG4gIGdldEFkZHJlc3NJbml0aWFsaXphdGlvbkJ1aWxkZXIodHg/OiBBZGRyZXNzSW5pdGlhbGl6YXRpb25UcmFuc2FjdGlvbik6IEFkZHJlc3NJbml0aWFsaXphdGlvbkJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLmluaXRpYWxpemVCdWlsZGVyKHR4LCBuZXcgQWRkcmVzc0luaXRpYWxpemF0aW9uQnVpbGRlcih0aGlzLl9jb2luQ29uZmlnKSk7XG4gIH1cblxuICBnZXRGbHVzaFRva2VuVHJhbnNhY3Rpb25CdWlsZGVyKHR4PzogRmx1c2hUb2tlblRyYW5zYWN0aW9uKTogRmx1c2hUb2tlblRyYW5zYWN0aW9uQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuaW5pdGlhbGl6ZUJ1aWxkZXIodHgsIG5ldyBGbHVzaFRva2VuVHJhbnNhY3Rpb25CdWlsZGVyKHRoaXMuX2NvaW5Db25maWcpKTtcbiAgfVxuXG4gIGdldFRva2VuVHJhbnNhY3Rpb25CdWlsZGVyKHR4PzogVHJhbnNhY3Rpb24pOiBUb2tlblRyYW5zYWN0aW9uQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuaW5pdGlhbGl6ZUJ1aWxkZXIodHgsIG5ldyBUb2tlblRyYW5zYWN0aW9uQnVpbGRlcih0aGlzLl9jb2luQ29uZmlnKSk7XG4gIH1cblxuICBnZXRTdGFraW5nQnVpbGRlcih0eD86IFN0YWtpbmdUcmFuc2FjdGlvbik6IFN0YWtpbmdCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5pbml0aWFsaXplQnVpbGRlcih0eCwgbmV3IFN0YWtpbmdCdWlsZGVyKHRoaXMuX2NvaW5Db25maWcpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGFuIG5mdCB0cmFuc2FjdGlvbiBidWlsZGVyLlxuICAgKlxuICAgKiBAcGFyYW0ge05GVFRyYW5zYWN0aW9ufSB0eCAtIFRoZSBuZnQgdHJhbnNhY3Rpb24gdG8gdXNlXG4gICAqIEByZXR1cm5zIHtORlRUcmFuc2FjdGlvbkJ1aWxkZXJ9IFRoZSBuZnQgdHJhbnNhY3Rpb24gYnVpbGRlclxuICAgKi9cbiAgZ2V0TkZUVHJhbnNhY3Rpb25CdWlsZGVyKHR4PzogVHJhbnNhY3Rpb24pOiBORlRUcmFuc2FjdGlvbkJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLmluaXRpYWxpemVCdWlsZGVyKHR4LCBuZXcgTkZUVHJhbnNhY3Rpb25CdWlsZGVyKHRoaXMuX2NvaW5Db25maWcpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGFuIGV4aXQgZGVsZWdhdGlvbiB0cmFuc2FjdGlvbiBidWlsZGVyLlxuICAgKlxuICAgKiBAcGFyYW0ge0V4aXREZWxlZ2F0aW9uVHJhbnNhY3Rpb259IHR4IC0gVGhlIGV4aXQgZGVsZWdhdGlvbiB0cmFuc2FjdGlvbiB0byB1c2VcbiAgICogQHJldHVybnMge0V4aXREZWxlZ2F0aW9uQnVpbGRlcn0gVGhlIGV4aXQgZGVsZWdhdGlvbiB0cmFuc2FjdGlvbiBidWlsZGVyXG4gICAqL1xuICBnZXRFeGl0RGVsZWdhdGlvbkJ1aWxkZXIodHg/OiBFeGl0RGVsZWdhdGlvblRyYW5zYWN0aW9uKTogRXhpdERlbGVnYXRpb25CdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5pbml0aWFsaXplQnVpbGRlcih0eCwgbmV3IEV4aXREZWxlZ2F0aW9uQnVpbGRlcih0aGlzLl9jb2luQ29uZmlnKSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBhIGJ1cm4gTkZUIHRyYW5zYWN0aW9uIGJ1aWxkZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7QnVybk5mdFRyYW5zYWN0aW9ufSB0eCAtIFRoZSBidXJuIE5GVCB0cmFuc2FjdGlvbiB0byB1c2VcbiAgICogQHJldHVybnMge0J1cm5OZnRCdWlsZGVyfSBUaGUgYnVybiBORlQgdHJhbnNhY3Rpb24gYnVpbGRlclxuICAgKi9cbiAgZ2V0QnVybk5mdEJ1aWxkZXIodHg/OiBCdXJuTmZ0VHJhbnNhY3Rpb24pOiBCdXJuTmZ0QnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuaW5pdGlhbGl6ZUJ1aWxkZXIodHgsIG5ldyBCdXJuTmZ0QnVpbGRlcih0aGlzLl9jb2luQ29uZmlnKSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBhIGNsYWltIHJld2FyZHMgdHJhbnNhY3Rpb24gYnVpbGRlci5cbiAgICpcbiAgICogQHBhcmFtIHtDbGFpbVJld2FyZHNUcmFuc2FjdGlvbn0gdHggLSBUaGUgY2xhaW0gcmV3YXJkcyB0cmFuc2FjdGlvbiB0byB1c2VcbiAgICogQHJldHVybnMge0NsYWltUmV3YXJkc0J1aWxkZXJ9IFRoZSBjbGFpbSByZXdhcmRzIHRyYW5zYWN0aW9uIGJ1aWxkZXJcbiAgICovXG4gIGdldENsYWltUmV3YXJkc0J1aWxkZXIodHg/OiBDbGFpbVJld2FyZHNUcmFuc2FjdGlvbik6IENsYWltUmV3YXJkc0J1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLmluaXRpYWxpemVCdWlsZGVyKHR4LCBuZXcgQ2xhaW1SZXdhcmRzQnVpbGRlcih0aGlzLl9jb2luQ29uZmlnKSk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgZ2V0V2FsbGV0SW5pdGlhbGl6YXRpb25CdWlsZGVyKCk6IHZvaWQge1xuICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcbiAgfVxuXG4gIGdldFRyYW5zYWN0aW9uVHlwZUZyb21TaWduZWRUeG4oc2lnbmVkVHhuOiBWZXRUcmFuc2FjdGlvbik6IFRyYW5zYWN0aW9uVHlwZSB7XG4gICAgcmV0dXJuIHV0aWxzLmdldFRyYW5zYWN0aW9uVHlwZUZyb21DbGF1c2Uoc2lnbmVkVHhuLmJvZHkuY2xhdXNlcyk7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZSB0aGUgYnVpbGRlciB3aXRoIHRoZSBnaXZlbiB0cmFuc2FjdGlvblxuICAgKlxuICAgKiBAcGFyYW0ge1RyYW5zYWN0aW9uIHwgdW5kZWZpbmVkfSB0eCAtIHRoZSB0cmFuc2FjdGlvbiB1c2VkIHRvIGluaXRpYWxpemUgdGhlIGJ1aWxkZXJcbiAgICogQHBhcmFtIHtUcmFuc2FjdGlvbkJ1aWxkZXJ9IGJ1aWxkZXIgLSB0aGUgYnVpbGRlciB0byBiZSBpbml0aWFsaXplZFxuICAgKiBAcmV0dXJucyB7VHJhbnNhY3Rpb25CdWlsZGVyfSB0aGUgYnVpbGRlciBpbml0aWFsaXplZFxuICAgKi9cbiAgcHJpdmF0ZSBpbml0aWFsaXplQnVpbGRlcjxUIGV4dGVuZHMgVHJhbnNhY3Rpb25CdWlsZGVyPih0eDogVHJhbnNhY3Rpb24gfCB1bmRlZmluZWQsIGJ1aWxkZXI6IFQpOiBUIHtcbiAgICBpZiAodHgpIHtcbiAgICAgIGJ1aWxkZXIuaW5pdEJ1aWxkZXIodHgpO1xuICAgIH1cbiAgICByZXR1cm4gYnVpbGRlcjtcbiAgfVxufVxuIl19
@@ -1,15 +0,0 @@
1
- import { ParseTransactionOptions } from '@bitgo-beta/sdk-core';
2
- export interface ExplainTransactionOptions {
3
- txHex: string;
4
- }
5
- export interface VetParseTransactionOptions extends ParseTransactionOptions {
6
- txHex: string;
7
- }
8
- export interface ClaimRewardsData {
9
- tokenId: string;
10
- delegationContractAddress?: string;
11
- stargateNftAddress?: string;
12
- claimBaseRewards?: boolean;
13
- claimStakingRewards?: boolean;
14
- }
15
- //# sourceMappingURL=types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/lib/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAE/D,MAAM,WAAW,yBAAyB;IACxC,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,0BAA2B,SAAQ,uBAAuB;IACzE,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B"}
@@ -1,3 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQYXJzZVRyYW5zYWN0aW9uT3B0aW9ucyB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcblxuZXhwb3J0IGludGVyZmFjZSBFeHBsYWluVHJhbnNhY3Rpb25PcHRpb25zIHtcbiAgdHhIZXg6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBWZXRQYXJzZVRyYW5zYWN0aW9uT3B0aW9ucyBleHRlbmRzIFBhcnNlVHJhbnNhY3Rpb25PcHRpb25zIHtcbiAgdHhIZXg6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDbGFpbVJld2FyZHNEYXRhIHtcbiAgdG9rZW5JZDogc3RyaW5nO1xuICBkZWxlZ2F0aW9uQ29udHJhY3RBZGRyZXNzPzogc3RyaW5nO1xuICBzdGFyZ2F0ZU5mdEFkZHJlc3M/OiBzdHJpbmc7XG4gIGNsYWltQmFzZVJld2FyZHM/OiBib29sZWFuO1xuICBjbGFpbVN0YWtpbmdSZXdhcmRzPzogYm9vbGVhbjtcbn1cbiJdfQ==
@@ -1,94 +0,0 @@
1
- import { Transaction, TransactionClause } from '@vechain/sdk-core';
2
- import { BaseUtils, TransactionRecipient, TransactionType } from '@bitgo-beta/sdk-core';
3
- import { BaseCoin as CoinConfig } from '@bitgo-beta/statics';
4
- export declare class Utils implements BaseUtils {
5
- isValidAddress(address: string): boolean;
6
- isValidBlockId(hash: string): boolean;
7
- isValidPrivateKey(key: string): boolean;
8
- isValidPublicKey(key: string): boolean;
9
- isValidSignature(signature: string): boolean;
10
- isValidTransactionId(txId: string): boolean;
11
- isValidHex(value: string, length: number): boolean;
12
- deserializeTransaction(serializedTransaction: string): Transaction;
13
- getTransactionTypeFromClause(clauses: TransactionClause[]): TransactionType;
14
- getTransferTokenData(toAddress: string, amountWei: string): string;
15
- getTransferNFTData(from: string, to: string, tokenId: string): string;
16
- /**
17
- * Decodes staking transaction data to extract levelId and autorenew
18
- *
19
- * @param {string} data - The encoded transaction data
20
- * @returns {object} - Object containing levelId and autorenew
21
- */
22
- decodeStakingData(data: string): {
23
- levelId: number;
24
- autorenew: boolean;
25
- };
26
- decodeTransferTokenData(data: string): TransactionRecipient;
27
- decodeTransferNFTData(data: string): {
28
- recipients: TransactionRecipient[];
29
- sender: string;
30
- tokenId: string;
31
- };
32
- /**
33
- * Decodes claim rewards transaction data to extract tokenId
34
- *
35
- * @param {string} data - The encoded claim rewards method call data
36
- * @returns {string} - The tokenId as a string
37
- */
38
- decodeClaimRewardsData(data: string): string;
39
- /**
40
- * Decodes exit delegation transaction data to extract tokenId
41
- *
42
- * @param {string} data - The encoded exit delegation method call data
43
- * @returns {string} - The tokenId as a string
44
- */
45
- decodeExitDelegationData(data: string): string;
46
- /**
47
- * Decodes burn NFT transaction data to extract tokenId
48
- *
49
- * @param {string} data - The encoded burn NFT method call data
50
- * @returns {string} - The tokenId as a string
51
- */
52
- decodeBurnNftData(data: string): string;
53
- /**
54
- * Get the network-appropriate delegation contract address
55
- * @param {CoinConfig} coinConfig - The coin configuration object
56
- * @returns {string} The delegation contract address for the network
57
- */
58
- getDefaultDelegationAddress(coinConfig: Readonly<CoinConfig>): string;
59
- /**
60
- * Get the network-appropriate staking contract address
61
- * @param {CoinConfig} coinConfig - The coin configuration object
62
- * @returns {string} The staking contract address for the network
63
- */
64
- getDefaultStakingAddress(coinConfig: Readonly<CoinConfig>): string;
65
- /**
66
- * Check if an address is a valid delegation contract address for any network
67
- * @param {string} address - The address to check
68
- * @returns {boolean} True if the address is a delegation contract address
69
- */
70
- isDelegationContractAddress(address: string): boolean;
71
- /**
72
- * Check if an address is a valid NFT contract address for any network
73
- * @param {string} address - The address to check
74
- * @returns {boolean} True if the address is an NFT contract address
75
- */
76
- isNftContractAddress(address: string): boolean;
77
- /**
78
- * Validate that a contract address matches the expected NFT/staking contract for the network
79
- * @param {string} address - The contract address to validate
80
- * @param {CoinConfig} coinConfig - The coin configuration object
81
- * @throws {Error} If the address doesn't match the expected NFT contract address
82
- */
83
- validateStakingContractAddress(address: string, coinConfig: Readonly<CoinConfig>): void;
84
- /**
85
- * Validate that a contract address matches the expected delegation contract for the network
86
- * @param {string} address - The contract address to validate
87
- * @param {CoinConfig} coinConfig - The coin configuration object
88
- * @throws {Error} If the address doesn't match the expected delegation contract address
89
- */
90
- validateDelegationContractAddress(address: string, coinConfig: Readonly<CoinConfig>): void;
91
- }
92
- declare const utils: Utils;
93
- export default utils;
94
- //# sourceMappingURL=utils.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/lib/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,WAAW,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAG5E,OAAO,EAAE,SAAS,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAwBxF,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAE7D,qBAAa,KAAM,YAAW,SAAS;IACrC,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAIxC,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIrC,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IASvC,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAStC,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAI5C,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI3C,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO;IAKlD,sBAAsB,CAAC,qBAAqB,EAAE,MAAM,GAAG,WAAW;IAalE,4BAA4B,CAAC,OAAO,EAAE,iBAAiB,EAAE,GAAG,eAAe;IA2B3E,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM;IAWlE,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM;IAWrE;;;;;OAKG;IACH,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,OAAO,CAAA;KAAE;IAgBxE,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,oBAAoB;IAY3D,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG;QACnC,UAAU,EAAE,oBAAoB,EAAE,CAAC;QACnC,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;KACjB;IAmBD;;;;;OAKG;IACH,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAgB5C;;;;;OAKG;IACH,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAc9C;;;;;OAKG;IACH,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAcvC;;;;OAIG;IACH,2BAA2B,CAAC,UAAU,EAAE,QAAQ,CAAC,UAAU,CAAC,GAAG,MAAM;IAKrE;;;;OAIG;IACH,wBAAwB,CAAC,UAAU,EAAE,QAAQ,CAAC,UAAU,CAAC,GAAG,MAAM;IAKlE;;;;OAIG;IACH,2BAA2B,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAQrD;;;;OAIG;IACH,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAO9C;;;;;OAKG;IACH,8BAA8B,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,CAAC,UAAU,CAAC,GAAG,IAAI;IASvF;;;;;OAKG;IACH,iCAAiC,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,CAAC,UAAU,CAAC,GAAG,IAAI;CAQ3F;AAED,QAAA,MAAM,KAAK,OAAc,CAAC;AAE1B,eAAe,KAAK,CAAC"}
@@ -1,277 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.Utils = void 0;
7
- const sdk_core_1 = require("@vechain/sdk-core");
8
- const ethereumjs_abi_1 = __importDefault(require("ethereumjs-abi"));
9
- const ethereumjs_util_1 = require("ethereumjs-util");
10
- const sdk_core_2 = require("@bitgo-beta/sdk-core");
11
- const abstract_eth_1 = require("@bitgo-beta/abstract-eth");
12
- const constants_1 = require("./constants");
13
- const keyPair_1 = require("./keyPair");
14
- class Utils {
15
- isValidAddress(address) {
16
- return this.isValidHex(address, constants_1.VET_ADDRESS_LENGTH);
17
- }
18
- isValidBlockId(hash) {
19
- return this.isValidHex(hash, constants_1.VET_BLOCK_ID_LENGTH);
20
- }
21
- isValidPrivateKey(key) {
22
- try {
23
- new keyPair_1.KeyPair({ prv: key });
24
- return true;
25
- }
26
- catch (e) {
27
- return false;
28
- }
29
- }
30
- isValidPublicKey(key) {
31
- try {
32
- new keyPair_1.KeyPair({ pub: key });
33
- return true;
34
- }
35
- catch (e) {
36
- return false;
37
- }
38
- }
39
- isValidSignature(signature) {
40
- throw new Error('Method not implemented');
41
- }
42
- isValidTransactionId(txId) {
43
- return this.isValidHex(txId, constants_1.VET_TRANSACTION_ID_LENGTH);
44
- }
45
- isValidHex(value, length) {
46
- const regex = new RegExp(`^(0x|0X)[a-fA-F0-9]{${length}}$`);
47
- return regex.test(value);
48
- }
49
- deserializeTransaction(serializedTransaction) {
50
- const txBytes = sdk_core_1.HexUInt.of(serializedTransaction).bytes;
51
- try {
52
- return sdk_core_1.Transaction.decode(txBytes, false);
53
- }
54
- catch (err) {
55
- if (err.message?.includes('Expected 9 items, but got 10')) {
56
- // Likely signed, so retry with isSigned = true
57
- return sdk_core_1.Transaction.decode(txBytes, true);
58
- }
59
- throw err;
60
- }
61
- }
62
- getTransactionTypeFromClause(clauses) {
63
- if (clauses[0].data === '0x') {
64
- return sdk_core_2.TransactionType.Send;
65
- }
66
- else if (clauses[0].data.startsWith(abstract_eth_1.v4CreateForwarderMethodId)) {
67
- return sdk_core_2.TransactionType.AddressInitialization;
68
- }
69
- else if (clauses[0].data.startsWith(abstract_eth_1.flushForwarderTokensMethodIdV4)) {
70
- return sdk_core_2.TransactionType.FlushTokens;
71
- }
72
- else if (clauses[0].data.startsWith(constants_1.TRANSFER_TOKEN_METHOD_ID)) {
73
- return sdk_core_2.TransactionType.SendToken;
74
- }
75
- else if (clauses[0].data.startsWith(constants_1.STAKING_METHOD_ID)) {
76
- return sdk_core_2.TransactionType.ContractCall;
77
- }
78
- else if (clauses[0].data.startsWith(constants_1.EXIT_DELEGATION_METHOD_ID)) {
79
- return sdk_core_2.TransactionType.StakingUnlock;
80
- }
81
- else if (clauses[0].data.startsWith(constants_1.BURN_NFT_METHOD_ID)) {
82
- return sdk_core_2.TransactionType.StakingWithdraw;
83
- }
84
- else if (clauses[0].data.startsWith(constants_1.CLAIM_BASE_REWARDS_METHOD_ID) ||
85
- clauses[0].data.startsWith(constants_1.CLAIM_STAKING_REWARDS_METHOD_ID)) {
86
- return sdk_core_2.TransactionType.StakingClaim;
87
- }
88
- else if (clauses[0].data.startsWith(constants_1.TRANSFER_NFT_METHOD_ID)) {
89
- return sdk_core_2.TransactionType.SendNFT;
90
- }
91
- else {
92
- return sdk_core_2.TransactionType.SendToken;
93
- }
94
- }
95
- getTransferTokenData(toAddress, amountWei) {
96
- const methodName = 'transfer';
97
- const types = ['address', 'uint256'];
98
- const params = [toAddress, new ethereumjs_util_1.BN(amountWei)];
99
- const method = ethereumjs_abi_1.default.methodID(methodName, types);
100
- const args = ethereumjs_abi_1.default.rawEncode(types, params);
101
- return (0, ethereumjs_util_1.addHexPrefix)(Buffer.concat([method, args]).toString('hex'));
102
- }
103
- getTransferNFTData(from, to, tokenId) {
104
- const methodName = 'transferFrom';
105
- const types = ['address', 'address', 'uint256'];
106
- const params = [from, to, new ethereumjs_util_1.BN(tokenId)];
107
- const method = ethereumjs_abi_1.default.methodID(methodName, types);
108
- const args = ethereumjs_abi_1.default.rawEncode(types, params);
109
- return (0, ethereumjs_util_1.addHexPrefix)(Buffer.concat([method, args]).toString('hex'));
110
- }
111
- /**
112
- * Decodes staking transaction data to extract levelId and autorenew
113
- *
114
- * @param {string} data - The encoded transaction data
115
- * @returns {object} - Object containing levelId and autorenew
116
- */
117
- decodeStakingData(data) {
118
- try {
119
- const parameters = data.slice(10);
120
- // Decode using ethereumjs-abi directly
121
- const decoded = ethereumjs_abi_1.default.rawDecode(['uint8', 'bool'], Buffer.from(parameters, 'hex'));
122
- return {
123
- levelId: Number(decoded[0]),
124
- autorenew: Boolean(decoded[1]),
125
- };
126
- }
127
- catch (error) {
128
- throw new Error(`Failed to decode staking data: ${error.message}`);
129
- }
130
- }
131
- decodeTransferTokenData(data) {
132
- const [address, amount] = (0, abstract_eth_1.getRawDecoded)(['address', 'uint256'], (0, abstract_eth_1.getBufferedByteCode)(constants_1.TRANSFER_TOKEN_METHOD_ID, data));
133
- const recipientAddress = (0, ethereumjs_util_1.addHexPrefix)(address.toString()).toLowerCase();
134
- return {
135
- address: recipientAddress,
136
- amount: amount.toString(),
137
- };
138
- }
139
- decodeTransferNFTData(data) {
140
- const [from, to, tokenIdBN] = (0, abstract_eth_1.getRawDecoded)(['address', 'address', 'uint256'], (0, abstract_eth_1.getBufferedByteCode)(constants_1.TRANSFER_NFT_METHOD_ID, data));
141
- const recipientAddress = (0, ethereumjs_util_1.addHexPrefix)(to.toString()).toLowerCase();
142
- const recipient = {
143
- address: recipientAddress,
144
- amount: '1',
145
- };
146
- const sender = (0, ethereumjs_util_1.addHexPrefix)(from.toString()).toLowerCase();
147
- const tokenId = tokenIdBN.toString();
148
- return {
149
- recipients: [recipient],
150
- sender,
151
- tokenId,
152
- };
153
- }
154
- /**
155
- * Decodes claim rewards transaction data to extract tokenId
156
- *
157
- * @param {string} data - The encoded claim rewards method call data
158
- * @returns {string} - The tokenId as a string
159
- */
160
- decodeClaimRewardsData(data) {
161
- try {
162
- // Remove method ID (first 10 characters: '0x' + 4-byte method ID)
163
- const methodData = data.slice(10);
164
- // Extract tokenId from first 32-byte slot
165
- // The tokenId is a uint256, so we take the full 64 hex characters
166
- const tokenIdHex = methodData.slice(0, 64);
167
- // Convert hex to decimal string
168
- return BigInt('0x' + tokenIdHex).toString();
169
- }
170
- catch (error) {
171
- throw new Error(`Failed to decode claim rewards data: ${error.message}`);
172
- }
173
- }
174
- /**
175
- * Decodes exit delegation transaction data to extract tokenId
176
- *
177
- * @param {string} data - The encoded exit delegation method call data
178
- * @returns {string} - The tokenId as a string
179
- */
180
- decodeExitDelegationData(data) {
181
- try {
182
- if (!data.startsWith(constants_1.EXIT_DELEGATION_METHOD_ID)) {
183
- throw new Error('Invalid exit delegation method data');
184
- }
185
- const tokenIdHex = data.slice(constants_1.EXIT_DELEGATION_METHOD_ID.length);
186
- // Convert hex to decimal (matching original parseInt logic)
187
- return parseInt(tokenIdHex, 16).toString();
188
- }
189
- catch (error) {
190
- throw new Error(`Failed to decode exit delegation data: ${error.message}`);
191
- }
192
- }
193
- /**
194
- * Decodes burn NFT transaction data to extract tokenId
195
- *
196
- * @param {string} data - The encoded burn NFT method call data
197
- * @returns {string} - The tokenId as a string
198
- */
199
- decodeBurnNftData(data) {
200
- try {
201
- if (!data.startsWith(constants_1.BURN_NFT_METHOD_ID)) {
202
- throw new Error('Invalid burn NFT method data');
203
- }
204
- const tokenIdHex = data.slice(constants_1.BURN_NFT_METHOD_ID.length);
205
- // Convert hex to decimal (matching original parseInt logic)
206
- return parseInt(tokenIdHex, 16).toString();
207
- }
208
- catch (error) {
209
- throw new Error(`Failed to decode burn NFT data: ${error.message}`);
210
- }
211
- }
212
- /**
213
- * Get the network-appropriate delegation contract address
214
- * @param {CoinConfig} coinConfig - The coin configuration object
215
- * @returns {string} The delegation contract address for the network
216
- */
217
- getDefaultDelegationAddress(coinConfig) {
218
- const isTestnet = coinConfig.network.type === 'testnet';
219
- return isTestnet ? constants_1.STARGATE_DELEGATION_ADDRESS_TESTNET : constants_1.STARGATE_DELEGATION_ADDRESS;
220
- }
221
- /**
222
- * Get the network-appropriate staking contract address
223
- * @param {CoinConfig} coinConfig - The coin configuration object
224
- * @returns {string} The staking contract address for the network
225
- */
226
- getDefaultStakingAddress(coinConfig) {
227
- const isTestnet = coinConfig.network.type === 'testnet';
228
- return isTestnet ? constants_1.STARGATE_NFT_ADDRESS_TESTNET : constants_1.STARGATE_NFT_ADDRESS;
229
- }
230
- /**
231
- * Check if an address is a valid delegation contract address for any network
232
- * @param {string} address - The address to check
233
- * @returns {boolean} True if the address is a delegation contract address
234
- */
235
- isDelegationContractAddress(address) {
236
- const lowerAddress = address.toLowerCase();
237
- return (lowerAddress === constants_1.STARGATE_DELEGATION_ADDRESS.toLowerCase() ||
238
- lowerAddress === constants_1.STARGATE_DELEGATION_ADDRESS_TESTNET.toLowerCase());
239
- }
240
- /**
241
- * Check if an address is a valid NFT contract address for any network
242
- * @param {string} address - The address to check
243
- * @returns {boolean} True if the address is an NFT contract address
244
- */
245
- isNftContractAddress(address) {
246
- const lowerAddress = address.toLowerCase();
247
- return (lowerAddress === constants_1.STARGATE_NFT_ADDRESS.toLowerCase() || lowerAddress === constants_1.STARGATE_NFT_ADDRESS_TESTNET.toLowerCase());
248
- }
249
- /**
250
- * Validate that a contract address matches the expected NFT/staking contract for the network
251
- * @param {string} address - The contract address to validate
252
- * @param {CoinConfig} coinConfig - The coin configuration object
253
- * @throws {Error} If the address doesn't match the expected NFT contract address
254
- */
255
- validateStakingContractAddress(address, coinConfig) {
256
- const expectedAddress = this.getDefaultStakingAddress(coinConfig);
257
- if (address.toLowerCase() !== expectedAddress.toLowerCase()) {
258
- throw new Error(`Invalid staking contract address. Expected ${expectedAddress} for ${coinConfig.network.type}, got ${address}`);
259
- }
260
- }
261
- /**
262
- * Validate that a contract address matches the expected delegation contract for the network
263
- * @param {string} address - The contract address to validate
264
- * @param {CoinConfig} coinConfig - The coin configuration object
265
- * @throws {Error} If the address doesn't match the expected delegation contract address
266
- */
267
- validateDelegationContractAddress(address, coinConfig) {
268
- const expectedAddress = this.getDefaultDelegationAddress(coinConfig);
269
- if (address.toLowerCase() !== expectedAddress.toLowerCase()) {
270
- throw new Error(`Invalid delegation contract address. Expected ${expectedAddress} for ${coinConfig.network.type}, got ${address}`);
271
- }
272
- }
273
- }
274
- exports.Utils = Utils;
275
- const utils = new Utils();
276
- exports.default = utils;
277
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLGdEQUE0RTtBQUM1RSxvRUFBeUM7QUFDekMscURBQW1EO0FBQ25ELG1EQUF3RjtBQUN4RiwyREFLa0M7QUFDbEMsMkNBZXFCO0FBQ3JCLHVDQUFvQztBQUdwQyxNQUFhLEtBQUs7SUFDaEIsY0FBYyxDQUFDLE9BQWU7UUFDNUIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSw4QkFBa0IsQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFRCxjQUFjLENBQUMsSUFBWTtRQUN6QixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLCtCQUFtQixDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVELGlCQUFpQixDQUFDLEdBQVc7UUFDM0IsSUFBSSxDQUFDO1lBQ0gsSUFBSSxpQkFBTyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFDMUIsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNYLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztJQUNILENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxHQUFXO1FBQzFCLElBQUksQ0FBQztZQUNILElBQUksaUJBQU8sQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1lBQzFCLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDWCxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7SUFDSCxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsU0FBaUI7UUFDaEMsTUFBTSxJQUFJLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxJQUFZO1FBQy9CLE9BQU8sSUFBSSxDQUFD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QVMsT0FBTyxFQUFFLENBQy9HLENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsaUNBQWlDLENBQUMsT0FBZSxFQUFFLFVBQWdDO1FBQ2pGLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNyRSxJQUFJLE9BQU8sQ0FBQyxXQUFXLEVBQUUsS0FBSyxlQUFlLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQztZQUM1RCxNQUFNLElBQUksS0FBSyxDQUNiLGlEQUFpRCxlQUFlLFFBQVEsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLFNBQVMsT0FBTyxFQUFFLENBQ2xILENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBdlNELHNCQXVTQztBQUVELE1BQU0sS0FBSyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7QUFFMUIsa0JBQWUsS0FBSyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSGV4VUludCwgVHJhbnNhY3Rpb24sIFRyYW5zYWN0aW9uQ2xhdXNlIH0gZnJvbSAnQHZlY2hhaW4vc2RrLWNvcmUnO1xuaW1wb3J0IEV0aGVyZXVtQWJpIGZyb20gJ2V0aGVyZXVtanMtYWJpJztcbmltcG9ydCB7IGFkZEhleFByZWZpeCwgQk4gfSBmcm9tICdldGhlcmV1bWpzLXV0aWwnO1xuaW1wb3J0IHsgQmFzZVV0aWxzLCBUcmFuc2FjdGlvblJlY2lwaWVudCwgVHJhbnNhY3Rpb25UeXBlIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHtcbiAgdjRDcmVhdGVGb3J3YXJkZXJNZXRob2RJZCxcbiAgZmx1c2hGb3J3YXJkZXJUb2tlbnNNZXRob2RJZFY0LFxuICBnZXRSYXdEZWNvZGVkLFxuICBnZXRCdWZmZXJlZEJ5dGVDb2RlLFxufSBmcm9tICdAYml0Z28tYmV0YS9hYnN0cmFjdC1ldGgnO1xuaW1wb3J0IHtcbiAgVFJBTlNGRVJfVE9LRU5fTUVUSE9EX0lELFxuICBTVEFLSU5HX01FVEhPRF9JRCxcbiAgRVhJVF9ERUxFR0FUSU9OX01FVEhPRF9JRCxcbiAgQlVSTl9ORlRfTUVUSE9EX0lELFxuICBWRVRfQUREUkVTU19MRU5HVEgsXG4gIFZFVF9CTE9DS19JRF9MRU5HVEgsXG4gIFZFVF9UUkFOU0FDVElPTl9JRF9MRU5HVEgsXG4gIFRSQU5TRkVSX05GVF9NRVRIT0RfSUQsXG4gIENMQUlNX0JBU0VfUkVXQVJEU19NRVRIT0RfSUQsXG4gIENMQUlNX1NUQUtJTkdfUkVXQVJEU19NRVRIT0RfSUQsXG4gIFNUQVJHQVRFX05GVF9BRERSRVNTLFxuICBTVEFSR0FURV9ORlRfQUREUkVTU19URVNUTkVULFxuICBTVEFSR0FURV9ERUxFR0FUSU9OX0FERFJFU1MsXG4gIFNUQVJHQVRFX0RFTEVHQVRJT05fQUREUkVTU19URVNUTkVULFxufSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBLZXlQYWlyIH0gZnJvbSAnLi9rZXlQYWlyJztcbmltcG9ydCB7IEJhc2VDb2luIGFzIENvaW5Db25maWcgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcblxuZXhwb3J0IGNsYXNzIFV0aWxzIGltcGxlbWVudHMgQmFzZVV0aWxzIHtcbiAgaXNWYWxpZEFkZHJlc3MoYWRkcmVzczogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZEhleChhZGRyZXNzLCBWRVRfQUREUkVTU19MRU5HVEgpO1xuICB9XG5cbiAgaXNWYWxpZEJsb2NrSWQoaGFzaDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZEhleChoYXNoLCBWRVRfQkxPQ0tfSURfTEVOR1RIKTtcbiAgfVxuXG4gIGlzVmFsaWRQcml2YXRlS2V5KGtleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgdHJ5IHtcbiAgICAgIG5ldyBLZXlQYWlyKHsgcHJ2OiBrZXkgfSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgaXNWYWxpZFB1YmxpY0tleShrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHRyeSB7XG4gICAgICBuZXcgS2V5UGFpcih7IHB1Yjoga2V5IH0pO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGlzVmFsaWRTaWduYXR1cmUoc2lnbmF0dXJlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQnKTtcbiAgfVxuXG4gIGlzVmFsaWRUcmFuc2FjdGlvbklkKHR4SWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWRIZXgodHhJZCwgVkVUX1RSQU5TQUNUSU9OX0lEX0xFTkdUSCk7XG4gIH1cblxuICBpc1ZhbGlkSGV4KHZhbHVlOiBzdHJpbmcsIGxlbmd0aDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKGBeKDB4fDBYKVthLWZBLUYwLTldeyR7bGVuZ3RofX0kYCk7XG4gICAgcmV0dXJuIHJlZ2V4LnRlc3QodmFsdWUpO1xuICB9XG5cbiAgZGVzZXJpYWxpemVUcmFuc2FjdGlvbihzZXJpYWxpemVkVHJhbnNhY3Rpb246IHN0cmluZyk6IFRyYW5zYWN0aW9uIHtcbiAgICBjb25zdCB0eEJ5dGVzID0gSGV4VUludC5vZihzZXJpYWxpemVkVHJhbnNhY3Rpb24pLmJ5dGVzO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gVHJhbnNhY3Rpb24uZGVjb2RlKHR4Qnl0ZXMsIGZhbHNlKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmIChlcnIubWVzc2FnZT8uaW5jbHVkZXMoJ0V4cGVjdGVkIDkgaXRlbXMsIGJ1dCBnb3QgMTAnKSkge1xuICAgICAgICAvLyBMaWtlbHkgc2lnbmVkLCBzbyByZXRyeSB3aXRoIGlzU2lnbmVkID0gdHJ1ZVxuICAgICAgICByZXR1cm4gVHJhbnNhY3Rpb24uZGVjb2RlKHR4Qnl0ZXMsIHRydWUpO1xuICAgICAgfVxuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cbiAgfVxuXG4gIGdldFRyYW5zYWN0aW9uVHlwZUZyb21DbGF1c2UoY2xhdXNlczogVHJhbnNhY3Rpb25DbGF1c2VbXSk6IFRyYW5zYWN0aW9uVHlwZSB7XG4gICAgaWYgKGNsYXVzZXNbMF0uZGF0YSA9PT0gJzB4Jykge1xuICAgICAgcmV0dXJuIFRyYW5zYWN0aW9uVHlwZS5TZW5kO1xuICAgIH0gZWxzZSBpZiAoY2xhdXNlc1swXS5kYXRhLnN0YXJ0c1dpdGgodjRDcmVhdGVGb3J3YXJkZXJNZXRob2RJZCkpIHtcbiAgICAgIHJldHVybiBUcmFuc2FjdGlvblR5cGUuQWRkcmVzc0luaXRpYWxpemF0aW9uO1xuICAgIH0gZWxzZSBpZiAoY2xhdXNlc1swXS5kYXRhLnN0YXJ0c1dpdGgoZmx1c2hGb3J3YXJkZXJUb2tlbnNNZXRob2RJZFY0KSkge1xuICAgICAgcmV0dXJuIFRyYW5zYWN0aW9uVHlwZS5GbHVzaFRva2VucztcbiAgICB9IGVsc2UgaWYgKGNsYXVzZXNbMF0uZGF0YS5zdGFydHNXaXRoKFRSQU5TRkVSX1RPS0VOX01FVEhPRF9JRCkpIHtcbiAgICAgIHJldHVybiBUcmFuc2FjdGlvblR5cGUuU2VuZFRva2VuO1xuICAgIH0gZWxzZSBpZiAoY2xhdXNlc1swXS5kYXRhLnN0YXJ0c1dpdGgoU1RBS0lOR19NRVRIT0RfSUQpKSB7XG4gICAgICByZXR1cm4gVHJhbnNhY3Rpb25UeXBlLkNvbnRyYWN0Q2FsbDtcbiAgICB9IGVsc2UgaWYgKGNsYXVzZXNbMF0uZGF0YS5zdGFydHNXaXRoKEVYSVRfREVMRUdBVElPTl9NRVRIT0RfSUQpKSB7XG4gICAgICByZXR1cm4gVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdVbmxvY2s7XG4gICAgfSBlbHNlIGlmIChjbGF1c2VzWzBdLmRhdGEuc3RhcnRzV2l0aChCVVJOX05GVF9NRVRIT0RfSUQpKSB7XG4gICAgICByZXR1cm4gVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdXaXRoZHJhdztcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgY2xhdXNlc1swXS5kYXRhLnN0YXJ0c1dpdGgoQ0xBSU1fQkFTRV9SRVdBUkRTX01FVEhPRF9JRCkgfHxcbiAgICAgIGNsYXVzZXNbMF0uZGF0YS5zdGFydHNXaXRoKENMQUlNX1NUQUtJTkdfUkVXQVJEU19NRVRIT0RfSUQpXG4gICAgKSB7XG4gICAgICByZXR1cm4gVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdDbGFpbTtcbiAgICB9IGVsc2UgaWYgKGNsYXVzZXNbMF0uZGF0YS5zdGFydHNXaXRoKFRSQU5TRkVSX05GVF9NRVRIT0RfSUQpKSB7XG4gICAgICByZXR1cm4gVHJhbnNhY3Rpb25UeXBlLlNlbmRORlQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBUcmFuc2FjdGlvblR5cGUuU2VuZFRva2VuO1xuICAgIH1cbiAgfVxuXG4gIGdldFRyYW5zZmVyVG9rZW5EYXRhKHRvQWRkcmVzczogc3RyaW5nLCBhbW91bnRXZWk6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgbWV0aG9kTmFtZSA9ICd0cmFuc2Zlcic7XG4gICAgY29uc3QgdHlwZXMgPSBbJ2FkZHJlc3MnLCAndWludDI1NiddO1xuICAgIGNvbnN0IHBhcmFtcyA9IFt0b0FkZHJlc3MsIG5ldyBCTihhbW91bnRXZWkpXTtcblxuICAgIGNvbnN0IG1ldGhvZCA9IEV0aGVyZXVtQWJpLm1ldGhvZElEKG1ldGhvZE5hbWUsIHR5cGVzKTtcbiAgICBjb25zdCBhcmdzID0gRXRoZXJldW1BYmkucmF3RW5jb2RlKHR5cGVzLCBwYXJhbXMpO1xuXG4gICAgcmV0dXJuIGFkZEhleFByZWZpeChCdWZmZXIuY29uY2F0KFttZXRob2QsIGFyZ3NdKS50b1N0cmluZygnaGV4JykpO1xuICB9XG5cbiAgZ2V0VHJhbnNmZXJORlREYXRhKGZyb206IHN0cmluZywgdG86IHN0cmluZywgdG9rZW5JZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBtZXRob2ROYW1lID0gJ3RyYW5zZmVyRnJvbSc7XG4gICAgY29uc3QgdHlwZXMgPSBbJ2FkZHJlc3MnLCAnYWRkcmVzcycsICd1aW50MjU2J107XG4gICAgY29uc3QgcGFyYW1zID0gW2Zyb20sIHRvLCBuZXcgQk4odG9rZW5JZCldO1xuXG4gICAgY29uc3QgbWV0aG9kID0gRXRoZXJldW1BYmkubWV0aG9kSUQobWV0aG9kTmFtZSwgdHlwZXMpO1xuICAgIGNvbnN0IGFyZ3MgPSBFdGhlcmV1bUFiaS5yYXdFbmNvZGUodHlwZXMsIHBhcmFtcyk7XG5cbiAgICByZXR1cm4gYWRkSGV4UHJlZml4KEJ1ZmZlci5jb25jYXQoW21ldGhvZCwgYXJnc10pLnRvU3RyaW5nKCdoZXgnKSk7XG4gIH1cblxuICAvKipcbiAgICogRGVjb2RlcyBzdGFraW5nIHRyYW5zYWN0aW9uIGRhdGEgdG8gZXh0cmFjdCBsZXZlbElkIGFuZCBhdXRvcmVuZXdcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGRhdGEgLSBUaGUgZW5jb2RlZCB0cmFuc2FjdGlvbiBkYXRhXG4gICAqIEByZXR1cm5zIHtvYmplY3R9IC0gT2JqZWN0IGNvbnRhaW5pbmcgbGV2ZWxJZCBhbmQgYXV0b3JlbmV3XG4gICAqL1xuICBkZWNvZGVTdGFraW5nRGF0YShkYXRhOiBzdHJpbmcpOiB7IGxldmVsSWQ6IG51bWJlcjsgYXV0b3JlbmV3OiBib29sZWFuIH0ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXJhbWV0ZXJzID0gZGF0YS5zbGljZSgxMCk7XG5cbiAgICAgIC8vIERlY29kZSB1c2luZyBldGhlcmV1bWpzLWFiaSBkaXJlY3RseVxuICAgICAgY29uc3QgZGVjb2RlZCA9IEV0aGVyZXVtQWJpLnJhd0RlY29kZShbJ3VpbnQ4JywgJ2Jvb2wnXSwgQnVmZmVyLmZyb20ocGFyYW1ldGVycywgJ2hleCcpKTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbGV2ZWxJZDogTnVtYmVyKGRlY29kZWRbMF0pLFxuICAgICAgICBhdXRvcmVuZXc6IEJvb2xlYW4oZGVjb2RlZFsxXSksXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBkZWNvZGUgc3Rha2luZyBkYXRhOiAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgfVxuICB9XG5cbiAgZGVjb2RlVHJhbnNmZXJUb2tlbkRhdGEoZGF0YTogc3RyaW5nKTogVHJhbnNhY3Rpb25SZWNpcGllbnQge1xuICAgIGNvbnN0IFthZGRyZXNzLCBhbW91bnRdID0gZ2V0UmF3RGVjb2RlZChcbiAgICAgIFsnYWRkcmVzcycsICd1aW50MjU2J10sXG4gICAgICBnZXRCdWZmZXJlZEJ5dGVDb2RlKFRSQU5TRkVSX1RPS0VOX01FVEhPRF9JRCwgZGF0YSlcbiAgICApO1xuICAgIGNvbnN0IHJlY2lwaWVudEFkZHJlc3MgPSBhZGRIZXhQcmVmaXgoYWRkcmVzcy50b1N0cmluZygpKS50b0xvd2VyQ2FzZSgpO1xuICAgIHJldHVybiB7XG4gICAgICBhZGRyZXNzOiByZWNpcGllbnRBZGRyZXNzLFxuICAgICAgYW1vdW50OiBhbW91bnQudG9TdHJpbmcoKSxcbiAgICB9O1xuICB9XG5cbiAgZGVjb2RlVHJhbnNmZXJORlREYXRhKGRhdGE6IHN0cmluZyk6IHtcbiAgICByZWNpcGllbnRzOiBUcmFuc2FjdGlvblJlY2lwaWVudFtdO1xuICAgIHNlbmRlcjogc3RyaW5nO1xuICAgIHRva2VuSWQ6IHN0cmluZztcbiAgfSB7XG4gICAgY29uc3QgW2Zyb20sIHRvLCB0b2tlbklkQk5dID0gZ2V0UmF3RGVjb2RlZChcbiAgICAgIFsnYWRkcmVzcycsICdhZGRyZXNzJywgJ3VpbnQyNTYnXSxcbiAgICAgIGdldEJ1ZmZlcmVkQnl0ZUNvZGUoVFJBTlNGRVJfTkZUX01FVEhPRF9JRCwgZGF0YSlcbiAgICApO1xuICAgIGNvbnN0IHJlY2lwaWVudEFkZHJlc3MgPSBhZGRIZXhQcmVmaXgodG8udG9TdHJpbmcoKSkudG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCByZWNpcGllbnQ6IFRyYW5zYWN0aW9uUmVjaXBpZW50ID0ge1xuICAgICAgYWRkcmVzczogcmVjaXBpZW50QWRkcmVzcyxcbiAgICAgIGFtb3VudDogJzEnLFxuICAgIH07XG4gICAgY29uc3Qgc2VuZGVyID0gYWRkSGV4UHJlZml4KGZyb20udG9TdHJpbmcoKSkudG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCB0b2tlbklkID0gdG9rZW5JZEJOLnRvU3RyaW5nKCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlY2lwaWVudHM6IFtyZWNpcGllbnRdLFxuICAgICAgc2VuZGVyLFxuICAgICAgdG9rZW5JZCxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIERlY29kZXMgY2xhaW0gcmV3YXJkcyB0cmFuc2FjdGlvbiBkYXRhIHRvIGV4dHJhY3QgdG9rZW5JZFxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZGF0YSAtIFRoZSBlbmNvZGVkIGNsYWltIHJld2FyZHMgbWV0aG9kIGNhbGwgZGF0YVxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSAtIFRoZSB0b2tlbklkIGFzIGEgc3RyaW5nXG4gICAqL1xuICBkZWNvZGVDbGFpbVJld2FyZHNEYXRhKGRhdGE6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIFJlbW92ZSBtZXRob2QgSUQgKGZpcnN0IDEwIGNoYXJhY3RlcnM6ICcweCcgKyA0LWJ5dGUgbWV0aG9kIElEKVxuICAgICAgY29uc3QgbWV0aG9kRGF0YSA9IGRhdGEuc2xpY2UoMTApO1xuXG4gICAgICAvLyBFeHRyYWN0IHRva2VuSWQgZnJvbSBmaXJzdCAzMi1ieXRlIHNsb3RcbiAgICAgIC8vIFRoZSB0b2tlbklkIGlzIGEgdWludDI1Niwgc28gd2UgdGFrZSB0aGUgZnVsbCA2NCBoZXggY2hhcmFjdGVyc1xuICAgICAgY29uc3QgdG9rZW5JZEhleCA9IG1ldGhvZERhdGEuc2xpY2UoMCwgNjQpO1xuXG4gICAgICAvLyBDb252ZXJ0IGhleCB0byBkZWNpbWFsIHN0cmluZ1xuICAgICAgcmV0dXJuIEJpZ0ludCgnMHgnICsgdG9rZW5JZEhleCkudG9TdHJpbmcoKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gZGVjb2RlIGNsYWltIHJld2FyZHMgZGF0YTogJHtlcnJvci5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEZWNvZGVzIGV4aXQgZGVsZWdhdGlvbiB0cmFuc2FjdGlvbiBkYXRhIHRvIGV4dHJhY3QgdG9rZW5JZFxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZGF0YSAtIFRoZSBlbmNvZGVkIGV4aXQgZGVsZWdhdGlvbiBtZXRob2QgY2FsbCBkYXRhXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IC0gVGhlIHRva2VuSWQgYXMgYSBzdHJpbmdcbiAgICovXG4gIGRlY29kZUV4aXREZWxlZ2F0aW9uRGF0YShkYXRhOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHRyeSB7XG4gICAgICBpZiAoIWRhdGEuc3RhcnRzV2l0aChFWElUX0RFTEVHQVRJT05fTUVUSE9EX0lEKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZXhpdCBkZWxlZ2F0aW9uIG1ldGhvZCBkYXRhJyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHRva2VuSWRIZXggPSBkYXRhLnNsaWNlKEVYSVRfREVMRUdBVElPTl9NRVRIT0RfSUQubGVuZ3RoKTtcbiAgICAgIC8vIENvbnZlcnQgaGV4IHRvIGRlY2ltYWwgKG1hdGNoaW5nIG9yaWdpbmFsIHBhcnNlSW50IGxvZ2ljKVxuICAgICAgcmV0dXJuIHBhcnNlSW50KHRva2VuSWRIZXgsIDE2KS50b1N0cmluZygpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBkZWNvZGUgZXhpdCBkZWxlZ2F0aW9uIGRhdGE6ICR7ZXJyb3IubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGVjb2RlcyBidXJuIE5GVCB0cmFuc2FjdGlvbiBkYXRhIHRvIGV4dHJhY3QgdG9rZW5JZFxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZGF0YSAtIFRoZSBlbmNvZGVkIGJ1cm4gTkZUIG1ldGhvZCBjYWxsIGRhdGFcbiAgICogQHJldHVybnMge3N0cmluZ30gLSBUaGUgdG9rZW5JZCBhcyBhIHN0cmluZ1xuICAgKi9cbiAgZGVjb2RlQnVybk5mdERhdGEoZGF0YTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICB0cnkge1xuICAgICAgaWYgKCFkYXRhLnN0YXJ0c1dpdGgoQlVSTl9ORlRfTUVUSE9EX0lEKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgYnVybiBORlQgbWV0aG9kIGRhdGEnKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdG9rZW5JZEhleCA9IGRhdGEuc2xpY2UoQlVSTl9ORlRfTUVUSE9EX0lELmxlbmd0aCk7XG4gICAgICAvLyBDb252ZXJ0IGhleCB0byBkZWNpbWFsIChtYXRjaGluZyBvcmlnaW5hbCBwYXJzZUludCBsb2dpYylcbiAgICAgIHJldHVybiBwYXJzZUludCh0b2tlbklkSGV4LCAxNikudG9TdHJpbmcoKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gZGVjb2RlIGJ1cm4gTkZUIGRhdGE6ICR7ZXJyb3IubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBuZXR3b3JrLWFwcHJvcHJpYXRlIGRlbGVnYXRpb24gY29udHJhY3QgYWRkcmVzc1xuICAgKiBAcGFyYW0ge0NvaW5Db25maWd9IGNvaW5Db25maWcgLSBUaGUgY29pbiBjb25maWd1cmF0aW9uIG9iamVjdFxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZGVsZWdhdGlvbiBjb250cmFjdCBhZGRyZXNzIGZvciB0aGUgbmV0d29ya1xuICAgKi9cbiAgZ2V0RGVmYXVsdERlbGVnYXRpb25BZGRyZXNzKGNvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KTogc3RyaW5nIHtcbiAgICBjb25zdCBpc1Rlc3RuZXQgPSBjb2luQ29uZmlnLm5ldHdvcmsudHlwZSA9PT0gJ3Rlc3RuZXQnO1xuICAgIHJldHVybiBpc1Rlc3RuZXQgPyBTVEFSR0FURV9ERUxFR0FUSU9OX0FERFJFU1NfVEVTVE5FVCA6IFNUQVJHQVRFX0RFTEVHQVRJT05fQUREUkVTUztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIG5ldHdvcmstYXBwcm9wcmlhdGUgc3Rha2luZyBjb250cmFjdCBhZGRyZXNzXG4gICAqIEBwYXJhbSB7Q29pbkNvbmZpZ30gY29pbkNvbmZpZyAtIFRoZSBjb2luIGNvbmZpZ3VyYXRpb24gb2JqZWN0XG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBzdGFraW5nIGNvbnRyYWN0IGFkZHJlc3MgZm9yIHRoZSBuZXR3b3JrXG4gICAqL1xuICBnZXREZWZhdWx0U3Rha2luZ0FkZHJlc3MoY29pbkNvbmZpZzogUmVhZG9ubHk8Q29pbkNvbmZpZz4pOiBzdHJpbmcge1xuICAgIGNvbnN0IGlzVGVzdG5ldCA9IGNvaW5Db25maWcubmV0d29yay50eXBlID09PSAndGVzdG5ldCc7XG4gICAgcmV0dXJuIGlzVGVzdG5ldCA/IFNUQVJHQVRFX05GVF9BRERSRVNTX1RFU1RORVQgOiBTVEFSR0FURV9ORlRfQUREUkVTUztcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhbiBhZGRyZXNzIGlzIGEgdmFsaWQgZGVsZWdhdGlvbiBjb250cmFjdCBhZGRyZXNzIGZvciBhbnkgbmV0d29ya1xuICAgKiBAcGFyYW0ge3N0cmluZ30gYWRkcmVzcyAtIFRoZSBhZGRyZXNzIHRvIGNoZWNrXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBhZGRyZXNzIGlzIGEgZGVsZWdhdGlvbiBjb250cmFjdCBhZGRyZXNzXG4gICAqL1xuICBpc0RlbGVnYXRpb25Db250cmFjdEFkZHJlc3MoYWRkcmVzczogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3QgbG93ZXJBZGRyZXNzID0gYWRkcmVzcy50b0xvd2VyQ2FzZSgpO1xuICAgIHJldHVybiAoXG4gICAgICBsb3dlckFkZHJlc3MgPT09IFNUQVJHQVRFX0RFTEVHQVRJT05fQUREUkVTUy50b0xvd2VyQ2FzZSgpIHx8XG4gICAgICBsb3dlckFkZHJlc3MgPT09IFNUQVJHQVRFX0RFTEVHQVRJT05fQUREUkVTU19URVNUTkVULnRvTG93ZXJDYXNlKClcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGFuIGFkZHJlc3MgaXMgYSB2YWxpZCBORlQgY29udHJhY3QgYWRkcmVzcyBmb3IgYW55IG5ldHdvcmtcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFkZHJlc3MgLSBUaGUgYWRkcmVzcyB0byBjaGVja1xuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgYWRkcmVzcyBpcyBhbiBORlQgY29udHJhY3QgYWRkcmVzc1xuICAgKi9cbiAgaXNOZnRDb250cmFjdEFkZHJlc3MoYWRkcmVzczogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3QgbG93ZXJBZGRyZXNzID0gYWRkcmVzcy50b0xvd2VyQ2FzZSgpO1xuICAgIHJldHVybiAoXG4gICAgICBsb3dlckFkZHJlc3MgPT09IFNUQVJHQVRFX05GVF9BRERSRVNTLnRvTG93ZXJDYXNlKCkgfHwgbG93ZXJBZGRyZXNzID09PSBTVEFSR0FURV9ORlRfQUREUkVTU19URVNUTkVULnRvTG93ZXJDYXNlKClcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIHRoYXQgYSBjb250cmFjdCBhZGRyZXNzIG1hdGNoZXMgdGhlIGV4cGVjdGVkIE5GVC9zdGFraW5nIGNvbnRyYWN0IGZvciB0aGUgbmV0d29ya1xuICAgKiBAcGFyYW0ge3N0cmluZ30gYWRkcmVzcyAtIFRoZSBjb250cmFjdCBhZGRyZXNzIHRvIHZhbGlkYXRlXG4gICAqIEBwYXJhbSB7Q29pbkNvbmZpZ30gY29pbkNvbmZpZyAtIFRoZSBjb2luIGNvbmZpZ3VyYXRpb24gb2JqZWN0XG4gICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgYWRkcmVzcyBkb2Vzbid0IG1hdGNoIHRoZSBleHBlY3RlZCBORlQgY29udHJhY3QgYWRkcmVzc1xuICAgKi9cbiAgdmFsaWRhdGVTdGFraW5nQ29udHJhY3RBZGRyZXNzKGFkZHJlc3M6IHN0cmluZywgY29pbkNvbmZpZzogUmVhZG9ubHk8Q29pbkNvbmZpZz4pOiB2b2lkIHtcbiAgICBjb25zdCBleHBlY3RlZEFkZHJlc3MgPSB0aGlzLmdldERlZmF1bHRTdGFraW5nQWRkcmVzcyhjb2luQ29uZmlnKTtcbiAgICBpZiAoYWRkcmVzcy50b0xvd2VyQ2FzZSgpICE9PSBleHBlY3RlZEFkZHJlc3MudG9Mb3dlckNhc2UoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgSW52YWxpZCBzdGFraW5nIGNvbnRyYWN0IGFkZHJlc3MuIEV4cGVjdGVkICR7ZXhwZWN0ZWRBZGRyZXNzfSBmb3IgJHtjb2luQ29uZmlnLm5ldHdvcmsudHlwZX0sIGdvdCAke2FkZHJlc3N9YFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgdGhhdCBhIGNvbnRyYWN0IGFkZHJlc3MgbWF0Y2hlcyB0aGUgZXhwZWN0ZWQgZGVsZWdhdGlvbiBjb250cmFjdCBmb3IgdGhlIG5ldHdvcmtcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFkZHJlc3MgLSBUaGUgY29udHJhY3QgYWRkcmVzcyB0byB2YWxpZGF0ZVxuICAgKiBAcGFyYW0ge0NvaW5Db25maWd9IGNvaW5Db25maWcgLSBUaGUgY29pbiBjb25maWd1cmF0aW9uIG9iamVjdFxuICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIGFkZHJlc3MgZG9lc24ndCBtYXRjaCB0aGUgZXhwZWN0ZWQgZGVsZWdhdGlvbiBjb250cmFjdCBhZGRyZXNzXG4gICAqL1xuICB2YWxpZGF0ZURlbGVnYXRpb25Db250cmFjdEFkZHJlc3MoYWRkcmVzczogc3RyaW5nLCBjb2luQ29uZmlnOiBSZWFkb25seTxDb2luQ29uZmlnPik6IHZvaWQge1xuICAgIGNvbnN0IGV4cGVjdGVkQWRkcmVzcyA9IHRoaXMuZ2V0RGVmYXVsdERlbGVnYXRpb25BZGRyZXNzKGNvaW5Db25maWcpO1xuICAgIGlmIChhZGRyZXNzLnRvTG93ZXJDYXNlKCkgIT09IGV4cGVjdGVkQWRkcmVzcy50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBJbnZhbGlkIGRlbGVnYXRpb24gY29udHJhY3QgYWRkcmVzcy4gRXhwZWN0ZWQgJHtleHBlY3RlZEFkZHJlc3N9IGZvciAke2NvaW5Db25maWcubmV0d29yay50eXBlfSwgZ290ICR7YWRkcmVzc31gXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuXG5jb25zdCB1dGlscyA9IG5ldyBVdGlscygpO1xuXG5leHBvcnQgZGVmYXVsdCB1dGlscztcbiJdfQ==