@super-protocol/sdk-js 0.16.0-beta.2 → 1.0.0-beta.0

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 (104) hide show
  1. package/build/TIIGenerator.d.ts +3 -3
  2. package/build/connectors/BaseConnector.d.ts +7 -8
  3. package/build/connectors/BaseConnector.js +2 -4
  4. package/build/connectors/BlockchainConnector.d.ts +6 -8
  5. package/build/connectors/BlockchainConnector.js +97 -102
  6. package/build/connectors/BlockchainEventsListener.d.ts +2 -2
  7. package/build/connectors/BlockchainEventsListener.js +36 -11
  8. package/build/connectors/index.d.ts +2 -0
  9. package/build/connectors/index.js +11 -0
  10. package/build/constants.d.ts +2 -2
  11. package/build/constants.js +3 -3
  12. package/build/contracts/abi.d.ts +9769 -0
  13. package/build/contracts/abi.js +6 -0
  14. package/build/crypto/Crypto.js +4 -4
  15. package/build/crypto/nodejs/AES.d.ts +1 -1
  16. package/build/crypto/nodejs/AES.js +11 -13
  17. package/build/crypto/nodejs/ARIA.d.ts +1 -1
  18. package/build/crypto/nodejs/ARIA.js +11 -13
  19. package/build/models/EtlModel.d.ts +1 -1
  20. package/build/models/EtlModel.js +2 -4
  21. package/build/models/Offer.d.ts +5 -15
  22. package/build/models/Offer.js +60 -105
  23. package/build/models/Order.d.ts +15 -25
  24. package/build/models/Order.js +92 -173
  25. package/build/models/Provider.d.ts +9 -13
  26. package/build/models/Provider.js +16 -43
  27. package/build/models/TCB.d.ts +6 -8
  28. package/build/models/TCB.js +22 -34
  29. package/build/models/TeeOffer.d.ts +9 -22
  30. package/build/models/TeeOffer.js +97 -169
  31. package/build/models/index.d.ts +5 -0
  32. package/build/models/index.js +17 -0
  33. package/build/providers/storage/StorjStorageProvider.js +3 -3
  34. package/build/staticModels/ActiveOffers.d.ts +3 -12
  35. package/build/staticModels/ActiveOffers.js +11 -29
  36. package/build/staticModels/ActiveOrders.d.ts +4 -6
  37. package/build/staticModels/ActiveOrders.js +19 -21
  38. package/build/staticModels/Consensus.d.ts +3 -5
  39. package/build/staticModels/Consensus.js +57 -87
  40. package/build/staticModels/Deposits.d.ts +8 -9
  41. package/build/staticModels/Deposits.js +42 -60
  42. package/build/staticModels/Marks.d.ts +4 -4
  43. package/build/staticModels/Marks.js +8 -12
  44. package/build/staticModels/Offers.d.ts +14 -14
  45. package/build/staticModels/Offers.js +81 -88
  46. package/build/staticModels/Orders.d.ts +30 -35
  47. package/build/staticModels/Orders.js +98 -144
  48. package/build/staticModels/ProviderRegistry.d.ts +6 -12
  49. package/build/staticModels/ProviderRegistry.js +45 -75
  50. package/build/staticModels/Superpro.d.ts +4 -4
  51. package/build/staticModels/Superpro.js +7 -25
  52. package/build/staticModels/SuperproToken.d.ts +7 -7
  53. package/build/staticModels/SuperproToken.js +34 -38
  54. package/build/staticModels/TeeOffers.d.ts +19 -21
  55. package/build/staticModels/TeeOffers.js +119 -126
  56. package/build/store.d.ts +2 -2
  57. package/build/tee/QuoteValidator.d.ts +2 -1
  58. package/build/tee/QuoteValidator.js +7 -6
  59. package/build/types/Consensus.d.ts +6 -57
  60. package/build/types/Consensus.js +2 -38
  61. package/build/types/DepositInfo.d.ts +0 -5
  62. package/build/types/DepositInfo.js +1 -8
  63. package/build/types/HardwareInfo.d.ts +0 -12
  64. package/build/types/HardwareInfo.js +1 -9
  65. package/build/types/Offer.d.ts +1 -25
  66. package/build/types/Offer.js +2 -25
  67. package/build/types/OptionInfo.d.ts +0 -5
  68. package/build/types/OptionInfo.js +1 -8
  69. package/build/types/Order.d.ts +8 -84
  70. package/build/types/Order.js +2 -42
  71. package/build/types/Origins.d.ts +0 -6
  72. package/build/types/Origins.js +1 -9
  73. package/build/types/Provider.d.ts +0 -19
  74. package/build/types/Provider.js +1 -19
  75. package/build/types/SlotInfo.d.ts +0 -5
  76. package/build/types/SlotInfo.js +1 -8
  77. package/build/types/SlotUsage.d.ts +0 -6
  78. package/build/types/SlotUsage.js +2 -9
  79. package/build/types/TeeOfferInfo.d.ts +0 -20
  80. package/build/types/TeeOfferInfo.js +1 -13
  81. package/build/types/TeeOfferOption.d.ts +0 -14
  82. package/build/types/TeeOfferOption.js +1 -10
  83. package/build/types/TeeOfferSlot.d.ts +0 -14
  84. package/build/types/TeeOfferSlot.js +1 -10
  85. package/build/types/ValueOfferSlot.d.ts +0 -19
  86. package/build/types/ValueOfferSlot.js +1 -12
  87. package/build/types/Web3.d.ts +25 -13
  88. package/build/types/blockchainConnector/StorageAccess.d.ts +2 -2
  89. package/build/types/index.d.ts +21 -0
  90. package/build/types/index.js +38 -0
  91. package/build/utils/Monitoring.js +5 -2
  92. package/build/utils/NonceTracker.d.ts +2 -2
  93. package/build/utils/NonceTracker.js +9 -11
  94. package/build/utils/TxManager.d.ts +6 -12
  95. package/build/utils/TxManager.js +16 -25
  96. package/build/{utils.d.ts → utils/helper.d.ts} +12 -17
  97. package/build/utils/helper.js +159 -0
  98. package/build/utils/helpers/tryWithInterval.js +11 -12
  99. package/package.json +9 -6
  100. package/readme.md +7 -8
  101. package/build/contracts/app.json +0 -12758
  102. package/build/staticModels/BaseStaticModel.d.ts +0 -4
  103. package/build/staticModels/BaseStaticModel.js +0 -20
  104. package/build/utils.js +0 -196
@@ -21,38 +21,24 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
21
21
  return (mod && mod.__esModule) ? mod : { "default": mod };
22
22
  };
23
23
  Object.defineProperty(exports, "__esModule", { value: true });
24
- const logger_1 = __importDefault(require("../logger"));
25
- const app_json_1 = __importDefault(require("../contracts/app.json"));
26
- const utils_1 = require("../utils");
27
- const TeeOfferInfo_1 = require("../types/TeeOfferInfo");
28
- const Origins_1 = require("../types/Origins");
29
- const Superpro_1 = __importDefault(require("../staticModels/Superpro"));
30
- const BlockchainConnector_1 = __importDefault(require("../connectors/BlockchainConnector"));
24
+ const helper_1 = require("../utils/helper");
25
+ const connectors_1 = require("../connectors");
31
26
  const TxManager_1 = __importDefault(require("../utils/TxManager"));
32
- const HardwareInfo_1 = require("../types/HardwareInfo");
33
- const TeeOfferOption_1 = require("../types/TeeOfferOption");
34
- const TeeOfferSlot_1 = require("../types/TeeOfferSlot");
35
- const OptionInfo_1 = require("../types/OptionInfo");
36
- const SlotUsage_1 = require("../types/SlotUsage");
37
- const utils_2 = require("ethers/lib/utils");
38
- const SlotInfo_1 = require("../types/SlotInfo");
27
+ const utils_1 = require("ethers/lib/utils");
39
28
  const TeeOffers_1 = __importDefault(require("../staticModels/TeeOffers"));
40
- const TCB_1 = __importDefault(require("../models/TCB"));
29
+ const models_1 = require("../models");
41
30
  class TeeOffer {
42
31
  constructor(offerId) {
43
32
  this.id = offerId;
44
33
  if (!TeeOffer.contract) {
45
- TeeOffer.contract = BlockchainConnector_1.default.getInstance().getContract();
34
+ TeeOffer.contract = connectors_1.BlockchainConnector.getInstance().getContract();
46
35
  }
47
- this.logger = logger_1.default.child({ className: 'TeeOffer' });
48
36
  }
49
37
  /**
50
38
  * Function for fetching offer status from the blockchain
51
39
  */
52
40
  isEnabled() {
53
- return __awaiter(this, void 0, void 0, function* () {
54
- return TeeOffer.contract.methods.isOfferEnabled(this.id).call();
55
- });
41
+ return TeeOffer.contract.methods.isOfferEnabled(this.id).call();
56
42
  }
57
43
  /**
58
44
  * Function for fetching offer hold deposit
@@ -69,9 +55,7 @@ class TeeOffer {
69
55
  * @returns this TEE offer slots count
70
56
  */
71
57
  getSlotsCount() {
72
- return __awaiter(this, void 0, void 0, function* () {
73
- return yield TeeOffer.contract.methods.getTeeOfferSlotsCount().call();
74
- });
58
+ return TeeOffer.contract.methods.getTeeOfferSlotsCount(this.id).call();
75
59
  }
76
60
  /**
77
61
  * @returns True if offer is cancelable.
@@ -82,23 +66,13 @@ class TeeOffer {
82
66
  return this.isCancelable;
83
67
  });
84
68
  }
85
- /**
86
- * Checks if contract has been initialized, if not - initialize contract
87
- */
88
- checkInitTeeOffer(transactionOptions) {
89
- if (transactionOptions === null || transactionOptions === void 0 ? void 0 : transactionOptions.web3) {
90
- return new transactionOptions.web3.eth.Contract(app_json_1.default.abi, Superpro_1.default.address);
91
- }
92
- }
93
69
  /**
94
70
  * Function for fetching TEE offer info from blockchain
95
71
  */
96
72
  getInfo() {
97
73
  return __awaiter(this, void 0, void 0, function* () {
98
- const [, , teeOfferInfoParams] = yield TeeOffer.contract.methods
99
- .getTeeOffer(this.id)
100
- .call();
101
- this.offerInfo = (0, utils_1.tupleToObject)(teeOfferInfoParams, TeeOfferInfo_1.TeeOfferInfoStructure);
74
+ const { info } = yield TeeOffer.contract.methods.getTeeOffer(this.id).call();
75
+ this.offerInfo = info;
102
76
  this.offerInfo.hardwareInfo = yield TeeOffers_1.default.unpackHardwareInfo(this.offerInfo.hardwareInfo);
103
77
  return this.offerInfo;
104
78
  });
@@ -108,9 +82,10 @@ class TeeOffer {
108
82
  */
109
83
  getHardwareInfo() {
110
84
  return __awaiter(this, void 0, void 0, function* () {
111
- let hardwareInfo = yield TeeOffer.contract.methods.getTeeOfferHardwareInfo(this.id).call();
112
- hardwareInfo = (0, utils_1.tupleToObject)(hardwareInfo, HardwareInfo_1.HardwareInfoStructure);
113
- return yield TeeOffers_1.default.unpackHardwareInfo(hardwareInfo);
85
+ const hardwareInfo = yield TeeOffer.contract.methods
86
+ .getTeeOfferHardwareInfo(this.id)
87
+ .call();
88
+ return TeeOffers_1.default.unpackHardwareInfo(hardwareInfo);
114
89
  });
115
90
  }
116
91
  /**
@@ -118,23 +93,18 @@ class TeeOffer {
118
93
  * @param optionId - Slot ID
119
94
  */
120
95
  getOptionById(optionId) {
121
- return __awaiter(this, void 0, void 0, function* () {
122
- const teeOfferOption = yield TeeOffer.contract.methods.getOptionById(optionId).call();
123
- return (0, utils_1.tupleToObject)(teeOfferOption, TeeOfferOption_1.TeeOfferOptionStructure);
124
- });
96
+ return TeeOffer.contract.methods.getOptionById(optionId).call();
125
97
  }
126
98
  getOptions(begin = 0, end = 999999) {
127
99
  return __awaiter(this, void 0, void 0, function* () {
128
- const optionsCount = +(yield TeeOffer.contract.methods
129
- .getTeeOfferOptionsCount(this.id)
130
- .call());
100
+ const optionsCount = Number(yield TeeOffer.contract.methods.getTeeOfferOptionsCount(this.id).call());
131
101
  if (optionsCount === 0) {
132
102
  return [];
133
103
  }
134
104
  const teeOfferOption = yield TeeOffer.contract.methods
135
105
  .getTeeOfferOptions(this.id, begin, end)
136
106
  .call();
137
- return (0, utils_1.tupleToObjectsArray)(teeOfferOption, TeeOfferOption_1.TeeOfferOptionStructure);
107
+ return teeOfferOption;
138
108
  });
139
109
  }
140
110
  /**
@@ -142,9 +112,7 @@ class TeeOffer {
142
112
  * @param optionId - Option ID
143
113
  */
144
114
  isOptionExists(optionId) {
145
- return __awaiter(this, void 0, void 0, function* () {
146
- return yield TeeOffer.contract.methods.isTeeOfferSlotExists(this.id, optionId).call();
147
- });
115
+ return TeeOffer.contract.methods.isTeeOfferSlotExists(this.id, optionId).call();
148
116
  }
149
117
  /**
150
118
  * Function for add option usage to the tee offer
@@ -155,12 +123,10 @@ class TeeOffer {
155
123
  */
156
124
  addOption(info, usage, externalId = 'default', transactionOptions) {
157
125
  return __awaiter(this, void 0, void 0, function* () {
158
- const contract = BlockchainConnector_1.default.getInstance().getContract(transactionOptions);
159
- (0, utils_1.checkIfActionAccountInitialized)(transactionOptions);
160
- const newInfoTuple = (0, utils_1.objectToTuple)(info, OptionInfo_1.OptionInfoStructure);
161
- const newUsageTuple = (0, utils_1.objectToTuple)(usage, SlotUsage_1.SlotUsageStructure);
162
- const formattedExternalId = (0, utils_2.formatBytes32String)(externalId);
163
- yield TxManager_1.default.execute(contract.methods.addOption, [this.id, formattedExternalId, newInfoTuple, newUsageTuple], transactionOptions);
126
+ const contract = connectors_1.BlockchainConnector.getInstance().getContract();
127
+ (0, helper_1.checkIfActionAccountInitialized)(transactionOptions);
128
+ const formattedExternalId = (0, utils_1.formatBytes32String)(externalId);
129
+ yield TxManager_1.default.execute(contract.methods.addOption(this.id, formattedExternalId, info, usage), transactionOptions);
164
130
  });
165
131
  }
166
132
  /**
@@ -172,11 +138,8 @@ class TeeOffer {
172
138
  */
173
139
  updateOption(optionId, newInfo, newUsage, transactionOptions) {
174
140
  return __awaiter(this, void 0, void 0, function* () {
175
- const contract = BlockchainConnector_1.default.getInstance().getContract(transactionOptions);
176
- (0, utils_1.checkIfActionAccountInitialized)(transactionOptions);
177
- const newInfoTuple = (0, utils_1.objectToTuple)(newInfo, OptionInfo_1.OptionInfoStructure);
178
- const newUsageTuple = (0, utils_1.objectToTuple)(newUsage, SlotUsage_1.SlotUsageStructure);
179
- yield TxManager_1.default.execute(contract.methods.updateOption, [this.id, optionId, newInfoTuple, newUsageTuple], transactionOptions);
141
+ (0, helper_1.checkIfActionAccountInitialized)(transactionOptions);
142
+ yield TxManager_1.default.execute(TeeOffer.contract.methods.updateOption(this.id, optionId, newInfo, newUsage), transactionOptions);
180
143
  });
181
144
  }
182
145
  /**
@@ -186,23 +149,21 @@ class TeeOffer {
186
149
  */
187
150
  deleteOption(optionId, transactionOptions) {
188
151
  return __awaiter(this, void 0, void 0, function* () {
189
- const contract = BlockchainConnector_1.default.getInstance().getContract(transactionOptions);
190
- (0, utils_1.checkIfActionAccountInitialized)(transactionOptions);
191
- yield TxManager_1.default.execute(contract.methods.deleteOption, [this.id, optionId], transactionOptions);
152
+ (0, helper_1.checkIfActionAccountInitialized)(transactionOptions);
153
+ yield TxManager_1.default.execute(TeeOffer.contract.methods.deleteOption(this.id, optionId), transactionOptions);
192
154
  });
193
155
  }
194
156
  initializeTcb(transactionOptions) {
195
157
  return __awaiter(this, void 0, void 0, function* () {
196
- const contract = BlockchainConnector_1.default.getInstance().getContract();
197
- (0, utils_1.checkIfActionAccountInitialized)();
198
- yield TxManager_1.default.execute(contract.methods.initializeTcb, [this.id], transactionOptions);
158
+ (0, helper_1.checkIfActionAccountInitialized)();
159
+ yield TxManager_1.default.execute(TeeOffer.contract.methods.initializeTcb(this.id), transactionOptions);
199
160
  });
200
161
  }
201
162
  initializeTcbAndAssignBlocks(transactionOptions) {
202
163
  return __awaiter(this, void 0, void 0, function* () {
203
164
  yield this.initializeTcb(transactionOptions);
204
- const tcbId = yield this.getInitializedTcbId();
205
- const tcb = new TCB_1.default(tcbId);
165
+ const tcbId = BigInt(yield this.getInitializedTcbId());
166
+ const tcb = new models_1.TCB(tcbId);
206
167
  yield tcb.assignLastBlocksToCheck(transactionOptions);
207
168
  yield tcb.assignSuspiciousBlocksToCheck(transactionOptions);
208
169
  return tcb;
@@ -216,12 +177,12 @@ class TeeOffer {
216
177
  */
217
178
  getListsForVerification(transactionOptions) {
218
179
  return __awaiter(this, void 0, void 0, function* () {
219
- (0, utils_1.checkIfActionAccountInitialized)();
180
+ (0, helper_1.checkIfActionAccountInitialized)();
220
181
  const tcb = yield this.initializeTcbAndAssignBlocks(transactionOptions);
221
182
  const { blocksIds } = yield tcb.getCheckingBlocksMarks();
222
183
  const tcbsForVerification = [];
223
184
  for (let blockIndex = 0; blockIndex < blocksIds.length; blockIndex++) {
224
- const tcb = new TCB_1.default(blocksIds[blockIndex]);
185
+ const tcb = new models_1.TCB(blocksIds[blockIndex]);
225
186
  const tcbInfo = yield tcb.get();
226
187
  tcbsForVerification.push({
227
188
  tcbId: blocksIds[blockIndex].toString(),
@@ -230,11 +191,11 @@ class TeeOffer {
230
191
  benchmark: tcbInfo.publicData.benchmark,
231
192
  quote: tcbInfo.quote,
232
193
  marks: tcbInfo.utilData.checkingBlockMarks,
233
- checkingBlocks: tcbInfo.utilData.checkingBlocks,
194
+ checkingBlocks: tcbInfo.utilData.checkingBlocks.map((x) => x.toString()),
234
195
  });
235
196
  }
236
197
  return {
237
- tcbId: tcb.tcbId,
198
+ tcbId: tcb.tcbId.toString(),
238
199
  tcbsForVerification,
239
200
  };
240
201
  });
@@ -244,9 +205,7 @@ class TeeOffer {
244
205
  * @param slotId - Slot ID
245
206
  */
246
207
  isSlotExists(slotId) {
247
- return __awaiter(this, void 0, void 0, function* () {
248
- return yield TeeOffer.contract.methods.isTeeOfferSlotExists(this.id, slotId).call();
249
- });
208
+ return TeeOffer.contract.methods.isTeeOfferSlotExists(this.id, slotId).call();
250
209
  }
251
210
  /**
252
211
  * Function for fetching tee offer slot by id
@@ -254,9 +213,10 @@ class TeeOffer {
254
213
  */
255
214
  getSlotById(slotId) {
256
215
  return __awaiter(this, void 0, void 0, function* () {
257
- let slot = yield TeeOffer.contract.methods.getTeeOfferSlotById(this.id, slotId).call();
258
- slot = (0, utils_1.tupleToObject)(slot, TeeOfferSlot_1.TeeOfferSlotStructure);
259
- slot.info = (0, utils_1.unpackSlotInfo)(slot.info, yield TeeOffers_1.default.getDenominator());
216
+ const slot = yield TeeOffer.contract.methods
217
+ .getTeeOfferSlotById(this.id, slotId)
218
+ .call();
219
+ slot.info = (0, helper_1.unpackSlotInfo)(slot.info, yield TeeOffers_1.default.getDenominator());
260
220
  return slot;
261
221
  });
262
222
  }
@@ -268,16 +228,15 @@ class TeeOffer {
268
228
  */
269
229
  getSlots(begin = 0, end = 999999) {
270
230
  return __awaiter(this, void 0, void 0, function* () {
271
- const teeOfferSlotsCount = +(yield TeeOffer.contract.methods
272
- .getTeeOfferSlotsCount(this.id)
273
- .call());
231
+ const teeOfferSlotsCount = Number(yield TeeOffer.contract.methods.getTeeOfferSlotsCount(this.id).call());
274
232
  if (teeOfferSlotsCount === 0) {
275
233
  return [];
276
234
  }
277
- let slots = yield TeeOffer.contract.methods.getTeeOfferSlots(this.id, begin, end).call();
278
- slots = (0, utils_1.tupleToObjectsArray)(slots, TeeOfferSlot_1.TeeOfferSlotStructure);
235
+ const slots = yield TeeOffer.contract.methods
236
+ .getTeeOfferSlots(this.id, begin, end)
237
+ .call();
279
238
  for (const slot of slots) {
280
- slot.info = (0, utils_1.unpackSlotInfo)(slot.info, yield TeeOffers_1.default.getDenominator());
239
+ slot.info = (0, helper_1.unpackSlotInfo)(slot.info, yield TeeOffers_1.default.getDenominator());
281
240
  }
282
241
  return slots;
283
242
  });
@@ -290,13 +249,10 @@ class TeeOffer {
290
249
  */
291
250
  addSlot(info, usage, externalId = 'default', transactionOptions) {
292
251
  return __awaiter(this, void 0, void 0, function* () {
293
- const contract = BlockchainConnector_1.default.getInstance().getContract(transactionOptions);
294
- (0, utils_1.checkIfActionAccountInitialized)(transactionOptions);
295
- info = (0, utils_1.packSlotInfo)(info, yield TeeOffers_1.default.getDenominator());
296
- const infoTuple = (0, utils_1.objectToTuple)(info, SlotInfo_1.SlotInfoStructure);
297
- const usageTuple = (0, utils_1.objectToTuple)(usage, SlotUsage_1.SlotUsageStructure);
298
- const formattedExternalId = (0, utils_2.formatBytes32String)(externalId);
299
- yield TxManager_1.default.execute(contract.methods.addTeeOfferSlot, [this.id, formattedExternalId, infoTuple, usageTuple], transactionOptions);
252
+ (0, helper_1.checkIfActionAccountInitialized)(transactionOptions);
253
+ info = (0, helper_1.packSlotInfo)(info, yield TeeOffers_1.default.getDenominator());
254
+ const formattedExternalId = (0, utils_1.formatBytes32String)(externalId);
255
+ yield TxManager_1.default.execute(TeeOffer.contract.methods.addTeeOfferSlot(this.id, formattedExternalId, info, usage), transactionOptions);
300
256
  });
301
257
  }
302
258
  /**
@@ -308,12 +264,9 @@ class TeeOffer {
308
264
  */
309
265
  updateSlot(slotId, newInfo, newUsage, transactionOptions) {
310
266
  return __awaiter(this, void 0, void 0, function* () {
311
- const contract = BlockchainConnector_1.default.getInstance().getContract(transactionOptions);
312
- (0, utils_1.checkIfActionAccountInitialized)(transactionOptions);
313
- newInfo = (0, utils_1.packSlotInfo)(newInfo, yield TeeOffers_1.default.getDenominator());
314
- const newInfoTuple = (0, utils_1.objectToTuple)(newInfo, SlotInfo_1.SlotInfoStructure);
315
- const newUsageTuple = (0, utils_1.objectToTuple)(newUsage, SlotUsage_1.SlotUsageStructure);
316
- yield TxManager_1.default.execute(contract.methods.updateTeeOfferSlot, [this.id, slotId, newInfoTuple, newUsageTuple], transactionOptions);
267
+ (0, helper_1.checkIfActionAccountInitialized)(transactionOptions);
268
+ newInfo = (0, helper_1.packSlotInfo)(newInfo, yield TeeOffers_1.default.getDenominator());
269
+ yield TxManager_1.default.execute(TeeOffer.contract.methods.updateTeeOfferSlot(this.id, slotId, newInfo, newUsage), transactionOptions);
317
270
  });
318
271
  }
319
272
  /**
@@ -323,9 +276,8 @@ class TeeOffer {
323
276
  */
324
277
  deleteSlot(slotId, transactionOptions) {
325
278
  return __awaiter(this, void 0, void 0, function* () {
326
- const contract = BlockchainConnector_1.default.getInstance().getContract(transactionOptions);
327
- (0, utils_1.checkIfActionAccountInitialized)(transactionOptions);
328
- yield TxManager_1.default.execute(contract.methods.deleteTeeOfferSlot, [this.id, slotId], transactionOptions);
279
+ (0, helper_1.checkIfActionAccountInitialized)(transactionOptions);
280
+ yield TxManager_1.default.execute(TeeOffer.contract.methods.deleteTeeOfferSlot(this.id, slotId), transactionOptions);
329
281
  });
330
282
  }
331
283
  /**
@@ -333,22 +285,18 @@ class TeeOffer {
333
285
  * @returns {Promise<string>} - Actual TCB ID
334
286
  */
335
287
  getActualTcbId() {
336
- return __awaiter(this, void 0, void 0, function* () {
337
- return TeeOffer.contract.methods.getActualTcbId(this.id).call();
338
- });
288
+ return TeeOffer.contract.methods.getActualTcbId(this.id).call();
339
289
  }
340
290
  /**
341
291
  * Function return last inited TCB of TEE offer
342
292
  * @param teeOfferId - id of TEE offer
343
293
  * */
344
294
  getInitializedTcbId() {
345
- return __awaiter(this, void 0, void 0, function* () {
346
- return TeeOffer.contract.methods.getInitializedTcbId(this.id).call();
347
- });
295
+ return TeeOffer.contract.methods.getInitializedTcbId(this.id).call();
348
296
  }
349
297
  isTcbCreationAvailable() {
350
298
  return __awaiter(this, void 0, void 0, function* () {
351
- const [offerNotBlocked, newEpochStarted, halfEpochPassed, benchmarkVerified] = yield TeeOffer.contract.methods.isTcbCreationAvailable(this.id).call();
299
+ const { offerNotBlocked, newEpochStarted, halfEpochPassed, benchmarkVerified } = yield TeeOffer.contract.methods.isTcbCreationAvailable(this.id).call();
352
300
  return offerNotBlocked && newEpochStarted && halfEpochPassed && benchmarkVerified;
353
301
  });
354
302
  }
@@ -373,9 +321,7 @@ class TeeOffer {
373
321
  });
374
322
  }
375
323
  isTeeOfferVerifying() {
376
- return __awaiter(this, void 0, void 0, function* () {
377
- return yield TeeOffer.contract.methods.isTeeOfferVerifying(this.id).call();
378
- });
324
+ return TeeOffer.contract.methods.isTeeOfferVerifying(this.id).call();
379
325
  }
380
326
  /**
381
327
  * Function for fetching TLB provider from blockchain
@@ -402,12 +348,10 @@ class TeeOffer {
402
348
  */
403
349
  getOrigins() {
404
350
  return __awaiter(this, void 0, void 0, function* () {
405
- let origins = yield TeeOffer.contract.methods.getOfferOrigins(this.id).call();
406
- // Converts blockchain array into object
407
- origins = (0, utils_1.tupleToObject)(origins, Origins_1.OriginsStructure);
351
+ const origins = yield TeeOffer.contract.methods.getOfferOrigins(this.id).call();
408
352
  // Convert blockchain time seconds to js time milliseconds
409
- origins.createdDate = +origins.createdDate * 1000;
410
- origins.modifiedDate = +origins.modifiedDate * 1000;
353
+ origins.createdDate = origins.createdDate * 1000;
354
+ origins.modifiedDate = origins.modifiedDate * 1000;
411
355
  return (this.origins = origins);
412
356
  });
413
357
  }
@@ -418,9 +362,8 @@ class TeeOffer {
418
362
  */
419
363
  addTlb(tlb, transactionOptions) {
420
364
  return __awaiter(this, void 0, void 0, function* () {
421
- transactionOptions !== null && transactionOptions !== void 0 ? transactionOptions : this.checkInitTeeOffer(transactionOptions);
422
- (0, utils_1.checkIfActionAccountInitialized)(transactionOptions);
423
- yield TxManager_1.default.execute(TeeOffer.contract.methods.setTeeOfferTlb, [this.id, tlb], transactionOptions);
365
+ (0, helper_1.checkIfActionAccountInitialized)(transactionOptions);
366
+ yield TxManager_1.default.execute(TeeOffer.contract.methods.setTeeOfferTlb(this.id, tlb), transactionOptions);
424
367
  if (this.offerInfo)
425
368
  this.offerInfo.tlb = tlb;
426
369
  });
@@ -432,9 +375,8 @@ class TeeOffer {
432
375
  */
433
376
  setName(name, transactionOptions) {
434
377
  return __awaiter(this, void 0, void 0, function* () {
435
- transactionOptions !== null && transactionOptions !== void 0 ? transactionOptions : this.checkInitTeeOffer(transactionOptions);
436
- (0, utils_1.checkIfActionAccountInitialized)(transactionOptions);
437
- yield TxManager_1.default.execute(TeeOffer.contract.methods.setOfferName, [this.id, name], transactionOptions);
378
+ (0, helper_1.checkIfActionAccountInitialized)(transactionOptions);
379
+ yield TxManager_1.default.execute(TeeOffer.contract.methods.setOfferName(this.id, name), transactionOptions);
438
380
  if (this.offerInfo)
439
381
  this.offerInfo.name = name;
440
382
  });
@@ -446,10 +388,8 @@ class TeeOffer {
446
388
  */
447
389
  setInfo(newInfo, transactionOptions) {
448
390
  return __awaiter(this, void 0, void 0, function* () {
449
- transactionOptions !== null && transactionOptions !== void 0 ? transactionOptions : this.checkInitTeeOffer(transactionOptions);
450
- (0, utils_1.checkIfActionAccountInitialized)(transactionOptions);
451
- const newInfoTuple = (0, utils_1.objectToTuple)(newInfo, TeeOfferInfo_1.TeeOfferInfoStructure);
452
- yield TxManager_1.default.execute(TeeOffer.contract.methods.setTeeOfferInfo, [this.id, newInfoTuple], transactionOptions);
391
+ (0, helper_1.checkIfActionAccountInitialized)(transactionOptions);
392
+ yield TxManager_1.default.execute(TeeOffer.contract.methods.setTeeOfferInfo(this.id, newInfo), transactionOptions);
453
393
  if (this.offerInfo)
454
394
  this.offerInfo = newInfo;
455
395
  });
@@ -461,11 +401,9 @@ class TeeOffer {
461
401
  */
462
402
  setHardwareInfo(newHardwareInfo, transactionOptions) {
463
403
  return __awaiter(this, void 0, void 0, function* () {
464
- transactionOptions !== null && transactionOptions !== void 0 ? transactionOptions : this.checkInitTeeOffer(transactionOptions);
465
- (0, utils_1.checkIfActionAccountInitialized)(transactionOptions);
404
+ (0, helper_1.checkIfActionAccountInitialized)(transactionOptions);
466
405
  newHardwareInfo = yield TeeOffers_1.default.packHardwareInfo(newHardwareInfo);
467
- const newHardwareInfoTuple = (0, utils_1.objectToTuple)(newHardwareInfo, TeeOfferInfo_1.TeeOfferInfoStructure);
468
- yield TxManager_1.default.execute(TeeOffer.contract.methods.setTeeOfferHardwareInfo, [this.id, newHardwareInfoTuple], transactionOptions);
406
+ yield TxManager_1.default.execute(TeeOffer.contract.methods.setTeeOfferHardwareInfo(this.id, newHardwareInfo), transactionOptions);
469
407
  });
470
408
  }
471
409
  /**
@@ -475,9 +413,8 @@ class TeeOffer {
475
413
  */
476
414
  setDescription(description, transactionOptions) {
477
415
  return __awaiter(this, void 0, void 0, function* () {
478
- transactionOptions !== null && transactionOptions !== void 0 ? transactionOptions : this.checkInitTeeOffer(transactionOptions);
479
- (0, utils_1.checkIfActionAccountInitialized)(transactionOptions);
480
- yield TxManager_1.default.execute(TeeOffer.contract.methods.setOfferDescription, [this.id, description], transactionOptions);
416
+ (0, helper_1.checkIfActionAccountInitialized)(transactionOptions);
417
+ yield TxManager_1.default.execute(TeeOffer.contract.methods.setOfferDescription(this.id, description), transactionOptions);
481
418
  if (this.offerInfo)
482
419
  this.offerInfo.description = description;
483
420
  });
@@ -489,9 +426,8 @@ class TeeOffer {
489
426
  */
490
427
  setKeys(argsPublicKey, transactionOptions) {
491
428
  return __awaiter(this, void 0, void 0, function* () {
492
- transactionOptions !== null && transactionOptions !== void 0 ? transactionOptions : this.checkInitTeeOffer(transactionOptions);
493
- (0, utils_1.checkIfActionAccountInitialized)(transactionOptions);
494
- yield TxManager_1.default.execute(TeeOffer.contract.methods.setOfferPublicKey, [this.id, argsPublicKey], transactionOptions);
429
+ (0, helper_1.checkIfActionAccountInitialized)(transactionOptions);
430
+ yield TxManager_1.default.execute(TeeOffer.contract.methods.setOfferPublicKey(this.id, argsPublicKey), transactionOptions);
495
431
  if (this.offerInfo) {
496
432
  this.offerInfo.argsPublicKey = argsPublicKey;
497
433
  }
@@ -503,9 +439,8 @@ class TeeOffer {
503
439
  */
504
440
  disable(transactionOptions) {
505
441
  return __awaiter(this, void 0, void 0, function* () {
506
- transactionOptions !== null && transactionOptions !== void 0 ? transactionOptions : this.checkInitTeeOffer(transactionOptions);
507
- (0, utils_1.checkIfActionAccountInitialized)(transactionOptions);
508
- yield TxManager_1.default.execute(TeeOffer.contract.methods.disableOffer, [this.id], transactionOptions);
442
+ (0, helper_1.checkIfActionAccountInitialized)(transactionOptions);
443
+ yield TxManager_1.default.execute(TeeOffer.contract.methods.disableOffer(this.id), transactionOptions);
509
444
  });
510
445
  }
511
446
  /**
@@ -514,137 +449,130 @@ class TeeOffer {
514
449
  */
515
450
  enable(transactionOptions) {
516
451
  return __awaiter(this, void 0, void 0, function* () {
517
- transactionOptions !== null && transactionOptions !== void 0 ? transactionOptions : this.checkInitTeeOffer(transactionOptions);
518
- (0, utils_1.checkIfActionAccountInitialized)(transactionOptions);
519
- yield TxManager_1.default.execute(TeeOffer.contract.methods.enableOffer, [this.id], transactionOptions);
452
+ (0, helper_1.checkIfActionAccountInitialized)(transactionOptions);
453
+ yield TxManager_1.default.execute(TeeOffer.contract.methods.enableOffer(this.id), transactionOptions);
520
454
  });
521
455
  }
522
456
  }
523
457
  __decorate([
524
- (0, utils_1.incrementMethodCall)(),
458
+ (0, helper_1.incrementMethodCall)(),
525
459
  __metadata("design:type", Function),
526
460
  __metadata("design:paramtypes", []),
527
461
  __metadata("design:returntype", Promise)
528
462
  ], TeeOffer.prototype, "isEnabled", null);
529
463
  __decorate([
530
- (0, utils_1.incrementMethodCall)(),
464
+ (0, helper_1.incrementMethodCall)(),
531
465
  __metadata("design:type", Function),
532
- __metadata("design:paramtypes", [String, String, Array, Array]),
466
+ __metadata("design:paramtypes", [typeof BigInt === "function" ? BigInt : Object, Number, Array, Array]),
533
467
  __metadata("design:returntype", Promise)
534
468
  ], TeeOffer.prototype, "getMinDeposit", null);
535
469
  __decorate([
536
- (0, utils_1.incrementMethodCall)(),
470
+ (0, helper_1.incrementMethodCall)(),
537
471
  __metadata("design:type", Function),
538
472
  __metadata("design:paramtypes", []),
539
473
  __metadata("design:returntype", Promise)
540
474
  ], TeeOffer.prototype, "isOfferCancelable", null);
541
475
  __decorate([
542
- (0, utils_1.incrementMethodCall)(),
543
- __metadata("design:type", Function),
544
- __metadata("design:paramtypes", [Object]),
545
- __metadata("design:returntype", void 0)
546
- ], TeeOffer.prototype, "checkInitTeeOffer", null);
547
- __decorate([
548
- (0, utils_1.incrementMethodCall)(),
476
+ (0, helper_1.incrementMethodCall)(),
549
477
  __metadata("design:type", Function),
550
478
  __metadata("design:paramtypes", []),
551
479
  __metadata("design:returntype", Promise)
552
480
  ], TeeOffer.prototype, "getInfo", null);
553
481
  __decorate([
554
- (0, utils_1.incrementMethodCall)(),
482
+ (0, helper_1.incrementMethodCall)(),
555
483
  __metadata("design:type", Function),
556
484
  __metadata("design:paramtypes", []),
557
485
  __metadata("design:returntype", Promise)
558
486
  ], TeeOffer.prototype, "getHardwareInfo", null);
559
487
  __decorate([
560
- (0, utils_1.incrementMethodCall)(),
488
+ (0, helper_1.incrementMethodCall)(),
561
489
  __metadata("design:type", Function),
562
490
  __metadata("design:paramtypes", [Object, Object, Object, Object]),
563
491
  __metadata("design:returntype", Promise)
564
492
  ], TeeOffer.prototype, "addOption", null);
565
493
  __decorate([
566
- (0, utils_1.incrementMethodCall)(),
494
+ (0, helper_1.incrementMethodCall)(),
567
495
  __metadata("design:type", Function),
568
496
  __metadata("design:paramtypes", [String, Object, Object, Object]),
569
497
  __metadata("design:returntype", Promise)
570
498
  ], TeeOffer.prototype, "updateOption", null);
571
499
  __decorate([
572
- (0, utils_1.incrementMethodCall)(),
500
+ (0, helper_1.incrementMethodCall)(),
573
501
  __metadata("design:type", Function),
574
502
  __metadata("design:paramtypes", [String, Object]),
575
503
  __metadata("design:returntype", Promise)
576
504
  ], TeeOffer.prototype, "deleteOption", null);
577
505
  __decorate([
578
- (0, utils_1.incrementMethodCall)(),
506
+ (0, helper_1.incrementMethodCall)(),
579
507
  __metadata("design:type", Function),
580
508
  __metadata("design:paramtypes", [Object]),
581
509
  __metadata("design:returntype", Promise)
582
510
  ], TeeOffer.prototype, "initializeTcb", null);
583
511
  __decorate([
584
- (0, utils_1.incrementMethodCall)(),
512
+ (0, helper_1.incrementMethodCall)(),
585
513
  __metadata("design:type", Function),
586
514
  __metadata("design:paramtypes", [Object]),
587
515
  __metadata("design:returntype", Promise)
588
516
  ], TeeOffer.prototype, "initializeTcbAndAssignBlocks", null);
589
517
  __decorate([
590
- (0, utils_1.incrementMethodCall)(),
518
+ (0, helper_1.incrementMethodCall)(),
591
519
  __metadata("design:type", Function),
592
520
  __metadata("design:paramtypes", [Object]),
593
521
  __metadata("design:returntype", Promise)
594
522
  ], TeeOffer.prototype, "getListsForVerification", null);
595
523
  __decorate([
596
- (0, utils_1.incrementMethodCall)(),
524
+ (0, helper_1.incrementMethodCall)(),
597
525
  __metadata("design:type", Function),
598
526
  __metadata("design:paramtypes", [Object, Object, Object, Object]),
599
527
  __metadata("design:returntype", Promise)
600
528
  ], TeeOffer.prototype, "addSlot", null);
601
529
  __decorate([
602
- (0, utils_1.incrementMethodCall)(),
530
+ (0, helper_1.incrementMethodCall)(),
603
531
  __metadata("design:type", Function),
604
532
  __metadata("design:paramtypes", [String, Object, Object, Object]),
605
533
  __metadata("design:returntype", Promise)
606
534
  ], TeeOffer.prototype, "updateSlot", null);
607
535
  __decorate([
608
- (0, utils_1.incrementMethodCall)(),
536
+ (0, helper_1.incrementMethodCall)(),
609
537
  __metadata("design:type", Function),
610
538
  __metadata("design:paramtypes", [String, Object]),
611
539
  __metadata("design:returntype", Promise)
612
540
  ], TeeOffer.prototype, "deleteSlot", null);
613
541
  __decorate([
614
- (0, utils_1.incrementMethodCall)(),
542
+ (0, helper_1.incrementMethodCall)(),
615
543
  __metadata("design:type", Function),
616
544
  __metadata("design:paramtypes", []),
617
545
  __metadata("design:returntype", Promise)
618
546
  ], TeeOffer.prototype, "getProviderAuthority", null);
619
547
  __decorate([
620
- (0, utils_1.incrementMethodCall)(),
548
+ (0, helper_1.incrementMethodCall)(),
621
549
  __metadata("design:type", Function),
622
550
  __metadata("design:paramtypes", []),
623
551
  __metadata("design:returntype", Promise)
624
552
  ], TeeOffer.prototype, "getOfferType", null);
625
553
  __decorate([
626
- (0, utils_1.incrementMethodCall)(),
554
+ (0, helper_1.incrementMethodCall)(),
627
555
  __metadata("design:type", Function),
628
556
  __metadata("design:paramtypes", []),
629
557
  __metadata("design:returntype", Promise)
630
558
  ], TeeOffer.prototype, "isTeeOfferVerifying", null);
631
559
  __decorate([
632
- (0, utils_1.incrementMethodCall)(),
560
+ (0, helper_1.incrementMethodCall)(),
633
561
  __metadata("design:type", Function),
634
562
  __metadata("design:paramtypes", []),
635
563
  __metadata("design:returntype", Promise)
636
564
  ], TeeOffer.prototype, "getTlb", null);
637
565
  __decorate([
638
- (0, utils_1.incrementMethodCall)(),
566
+ (0, helper_1.incrementMethodCall)(),
639
567
  __metadata("design:type", Function),
640
568
  __metadata("design:paramtypes", []),
641
569
  __metadata("design:returntype", Promise)
642
570
  ], TeeOffer.prototype, "getOrigins", null);
643
571
  __decorate([
644
- (0, utils_1.incrementMethodCall)(),
572
+ (0, helper_1.incrementMethodCall)(),
645
573
  __metadata("design:type", Function),
646
574
  __metadata("design:paramtypes", [String, Object]),
647
575
  __metadata("design:returntype", Promise)
648
576
  ], TeeOffer.prototype, "addTlb", null);
649
577
  exports.default = TeeOffer;
650
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGVlT2ZmZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9kZWxzL1RlZU9mZmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0EsdURBQW1DO0FBRW5DLHFFQUE0QztBQUM1QyxvQ0FRa0I7QUFDbEIsd0RBQTRFO0FBRzVFLDhDQUE2RDtBQUM3RCx3RUFBZ0Q7QUFDaEQsNEZBQW9FO0FBQ3BFLG1FQUEyQztBQUMzQyx3REFBNEU7QUFDNUUsNERBQWtGO0FBQ2xGLHdEQUE0RTtBQUM1RSxvREFBc0U7QUFDdEUsa0RBQW1FO0FBQ25FLDRDQUF1RDtBQUN2RCxnREFBZ0U7QUFDaEUsMEVBQWtEO0FBQ2xELHdEQUFnQztBQUdoQyxNQUFNLFFBQVE7SUF1QlYsWUFBWSxPQUFlO1FBQ3ZCLElBQUksQ0FBQyxFQUFFLEdBQUcsT0FBTyxDQUFDO1FBQ2xCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFO1lBQ3BCLFFBQVEsQ0FBQyxRQUFRLEdBQUcsNkJBQW1CLENBQUMsV0FBVyxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDdkU7UUFFRCxJQUFJLENBQUMsTUFBTSxHQUFHLGdCQUFVLENBQUMsS0FBSyxDQUFDLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVEOztPQUVHO0lBRVUsU0FBUzs7WUFDbEIsT0FBTyxRQUFRLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3BFLENBQUM7S0FBQTtJQUVEOztPQUVHO0lBRVUsYUFBYSxDQUN0QixNQUFjLEVBQ2QsU0FBaUIsRUFDakIsVUFBb0IsRUFDcEIsWUFBc0I7O1lBRXRCLElBQUksQ0FBQyxVQUFVLEdBQUcsTUFBTSxRQUFRLENBQUMsUUFBUSxDQUFDLE9BQU87aUJBQzVDLGtCQUFrQixDQUFD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
578
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGVlT2ZmZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9kZWxzL1RlZU9mZmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUEsNENBS3lCO0FBRXpCLDhDQUFvRDtBQUNwRCxtRUFBMkM7QUFTM0MsNENBQXVEO0FBQ3ZELDBFQUFrRDtBQUNsRCxzQ0FBZ0M7QUFHaEMsTUFBTSxRQUFRO0lBc0JWLFlBQVksT0FBZTtRQUN2QixJQUFJLENBQUMsRUFBRSxHQUFHLE9BQU8sQ0FBQztRQUNsQixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRTtZQUNwQixRQUFRLENBQUMsUUFBUSxHQUFHLGdDQUFtQixDQUFDLFdBQVcsRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDO1NBQ3ZFO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBRUksU0FBUztRQUNaLE9BQU8sUUFBUSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNwRSxDQUFDO0lBRUQ7O09BRUc7SUFFVSxhQUFhLENBQ3RCLE1BQWMsRUFDZCxTQUFpQixFQUNqQixVQUFvQixFQUNwQixZQUFzQjs7WUFFdEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxNQUFNLFFBQVEsQ0FBQyxRQUFRLENBQUMsT0FBTztpQkFDNUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLENBQUM7aUJBQ3hFLElBQUksRUFBRSxDQUFDO1lBRVosT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBQzNCLENBQUM7S0FBQTtJQUVEOztPQUVHO0lBQ0ksYUFBYTtRQUNoQixPQUFPLFFBQVEsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJ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