@coti-io/coti-contracts 0.1.0 → 1.0.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 (71) hide show
  1. package/contracts/access/DataPrivacyFramework/extensions/DataPrivacyFrameworkMpc.sol +3 -115
  2. package/contracts/mocks/README.md +1 -1
  3. package/contracts/mocks/utils/mpc/ArithmeticTestsContract.sol +105 -280
  4. package/contracts/mocks/utils/mpc/BitwiseTestsContract.sol +83 -187
  5. package/contracts/mocks/utils/mpc/{Comparison1Tests.Contract.sol → Comparison1TestsContract.sol} +67 -115
  6. package/contracts/mocks/utils/mpc/Comparison2TestsContract.sol +68 -116
  7. package/contracts/mocks/utils/mpc/MinMaxTestsContract.sol +69 -164
  8. package/contracts/mocks/utils/mpc/Miscellaneous1TestsContract.sol +70 -52
  9. package/contracts/mocks/utils/mpc/MiscellaneousTestsContract.sol +270 -0
  10. package/contracts/mocks/utils/mpc/OffboardToUserKeyTestContract.sol +102 -0
  11. package/contracts/mocks/utils/mpc/README.md +12 -12
  12. package/contracts/mocks/utils/mpc/TransferScalarTestsContract.sol +54 -211
  13. package/contracts/mocks/utils/mpc/TransferTestsContract.sol +162 -640
  14. package/contracts/onboard/AccountOnboard.sol +3 -3
  15. package/contracts/utils/mpc/MpcCore.sol +2835 -988
  16. package/contracts/utils/mpc/MpcInterface.sol +6 -4
  17. package/hardhat.config.ts +8 -5
  18. package/package.json +2 -2
  19. package/test/utils/accounts.ts +1 -1
  20. package/test/utils/mpc/Precompile.test.ts +26 -37
  21. package/typechain-types/contracts/mocks/utils/mpc/ArithmeticTestsContract.sol/ArithmeticTestsContract.ts +374 -0
  22. package/typechain-types/contracts/mocks/utils/mpc/ArithmeticTestsContract.sol/PrecompilesArythmeticTestsContract.ts +374 -0
  23. package/typechain-types/contracts/mocks/utils/mpc/ArithmeticTestsContract.sol/index.ts +5 -0
  24. package/typechain-types/contracts/mocks/utils/mpc/ArithmeticTestsContract.ts +30 -10
  25. package/typechain-types/contracts/mocks/utils/mpc/BitwiseTestsContract.ts +39 -5
  26. package/typechain-types/contracts/mocks/utils/mpc/Comparison1TestsContract.ts +374 -0
  27. package/typechain-types/contracts/mocks/utils/mpc/Comparison2TestsContract.ts +39 -5
  28. package/typechain-types/contracts/mocks/utils/mpc/MinMaxTestsContract.ts +25 -5
  29. package/typechain-types/contracts/mocks/utils/mpc/Miscellaneous1TestsContract.ts +62 -0
  30. package/typechain-types/contracts/mocks/utils/mpc/MiscellaneousTestsContract.ts +396 -0
  31. package/typechain-types/contracts/mocks/utils/mpc/OffboardToUserKeyTestContract.ts +221 -0
  32. package/typechain-types/contracts/mocks/utils/mpc/OffboardToUserKeyTestsContract.sol/OffboardToUserKeyTestContract.ts +11 -8
  33. package/typechain-types/contracts/mocks/utils/mpc/TransferScalarTestsContract.ts +15 -15
  34. package/typechain-types/contracts/mocks/utils/mpc/TransferTestsContract.ts +15 -15
  35. package/typechain-types/contracts/mocks/utils/mpc/index.ts +3 -6
  36. package/typechain-types/contracts/onboard/AccountOnboard.ts +9 -4
  37. package/typechain-types/contracts/utils/mpc/MpcCore.ts +84 -0
  38. package/typechain-types/contracts/utils/mpc/MpcInterface.sol/ExtendedOperations.ts +81 -40
  39. package/typechain-types/contracts/utils/mpc/index.ts +1 -0
  40. package/typechain-types/factories/contracts/mocks/access/DataPrivacyFramework/DataPrivacyFrameworkMock__factory.ts +1 -1
  41. package/typechain-types/factories/contracts/mocks/token/PrivateERC20/PrivateERC20Mock__factory.ts +1 -1
  42. package/typechain-types/factories/contracts/mocks/token/PrivateERC721/PrivateERC721URIStorageMock__factory.ts +1 -1
  43. package/typechain-types/factories/contracts/mocks/utils/mpc/ArithmeticTestsContract.sol/ArithmeticTestsContract__factory.ts +387 -0
  44. package/typechain-types/factories/contracts/mocks/utils/mpc/ArithmeticTestsContract.sol/PrecompilesArythmeticTestsContract__factory.ts +388 -0
  45. package/typechain-types/factories/contracts/mocks/utils/mpc/ArithmeticTestsContract.sol/index.ts +5 -0
  46. package/typechain-types/factories/contracts/mocks/utils/mpc/ArithmeticTestsContract__factory.ts +20 -7
  47. package/typechain-types/factories/contracts/mocks/utils/mpc/BitwiseTestsContract__factory.ts +28 -2
  48. package/typechain-types/factories/contracts/mocks/utils/mpc/Comparison1Tests.Contract.sol/Comparison1TestsContract__factory.ts +1 -1
  49. package/typechain-types/factories/contracts/mocks/utils/mpc/Comparison1TestsContract__factory.ts +387 -0
  50. package/typechain-types/factories/contracts/mocks/utils/mpc/Comparison2TestsContract__factory.ts +28 -2
  51. package/typechain-types/factories/contracts/mocks/utils/mpc/MinMaxTestsContract__factory.ts +15 -2
  52. package/typechain-types/factories/contracts/mocks/utils/mpc/Miscellaneous1TestsContract__factory.ts +66 -1
  53. package/typechain-types/factories/contracts/mocks/utils/mpc/Miscellaneous2TestsContract__factory.ts +1 -1
  54. package/typechain-types/factories/contracts/mocks/utils/mpc/MiscellaneousTestsContract__factory.ts +424 -0
  55. package/typechain-types/factories/contracts/mocks/utils/mpc/OffboardToUserKeyTestContract__factory.ts +289 -0
  56. package/typechain-types/factories/contracts/mocks/utils/mpc/OffboardToUserKeyTestsContract.sol/OffboardToUserKeyTestContract__factory.ts +19 -3
  57. package/typechain-types/factories/contracts/mocks/utils/mpc/ShiftTestsContract__factory.ts +1 -1
  58. package/typechain-types/factories/contracts/mocks/utils/mpc/StringTestsContract__factory.ts +1 -1
  59. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferScalarTestsContract__factory.ts +4 -4
  60. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferTestsContract__factory.ts +4 -4
  61. package/typechain-types/factories/contracts/mocks/utils/mpc/index.ts +3 -4
  62. package/typechain-types/factories/contracts/mocks/wallet/PrivateERC20Wallet/PrivateERC20WalletMock__factory.ts +1 -1
  63. package/typechain-types/factories/contracts/onboard/AccountOnboard__factory.ts +8 -2
  64. package/typechain-types/factories/contracts/utils/mpc/MpcCore__factory.ts +77 -0
  65. package/typechain-types/factories/contracts/utils/mpc/MpcInterface.sol/ExtendedOperations__factory.ts +124 -61
  66. package/typechain-types/factories/contracts/utils/mpc/index.ts +1 -0
  67. package/typechain-types/hardhat.d.ts +26 -26
  68. package/typechain-types/index.ts +8 -8
  69. package/contracts/mocks/utils/mpc/Miscellaneous2TestsContract.sol +0 -448
  70. package/contracts/mocks/utils/mpc/OffboardToUserKeyTestsContract.sol +0 -81
  71. package/contracts/mocks/utils/mpc/ShiftTestsContract.sol +0 -311
@@ -0,0 +1,387 @@
1
+ /* Autogenerated file. Do not edit manually. */
2
+ /* tslint:disable */
3
+ /* eslint-disable */
4
+ import {
5
+ Contract,
6
+ ContractFactory,
7
+ ContractTransactionResponse,
8
+ Interface,
9
+ } from "ethers";
10
+ import type { Signer, ContractDeployTransaction, ContractRunner } from "ethers";
11
+ import type { NonPayableOverrides } from "../../../../../../common";
12
+ import type {
13
+ ArithmeticTestsContract,
14
+ ArithmeticTestsContractInterface,
15
+ } from "../../../../../../contracts/mocks/utils/mpc/ArithmeticTestsContract.sol/ArithmeticTestsContract";
16
+
17
+ const _abi = [
18
+ {
19
+ inputs: [
20
+ {
21
+ internalType: "uint8",
22
+ name: "a",
23
+ type: "uint8",
24
+ },
25
+ {
26
+ internalType: "uint8",
27
+ name: "b",
28
+ type: "uint8",
29
+ },
30
+ ],
31
+ name: "addTest",
32
+ outputs: [
33
+ {
34
+ internalType: "uint8",
35
+ name: "",
36
+ type: "uint8",
37
+ },
38
+ ],
39
+ stateMutability: "nonpayable",
40
+ type: "function",
41
+ },
42
+ {
43
+ inputs: [
44
+ {
45
+ components: [
46
+ {
47
+ internalType: "gtUint16",
48
+ name: "res16_16",
49
+ type: "uint256",
50
+ },
51
+ {
52
+ internalType: "gtUint16",
53
+ name: "res8_16",
54
+ type: "uint256",
55
+ },
56
+ {
57
+ internalType: "gtUint16",
58
+ name: "res16_8",
59
+ type: "uint256",
60
+ },
61
+ ],
62
+ internalType: "struct ArithmeticTestsContract.Check16",
63
+ name: "check16",
64
+ type: "tuple",
65
+ },
66
+ ],
67
+ name: "decryptAndCompareResults16",
68
+ outputs: [
69
+ {
70
+ internalType: "uint16",
71
+ name: "",
72
+ type: "uint16",
73
+ },
74
+ ],
75
+ stateMutability: "nonpayable",
76
+ type: "function",
77
+ },
78
+ {
79
+ inputs: [
80
+ {
81
+ components: [
82
+ {
83
+ internalType: "gtUint32",
84
+ name: "res32_32",
85
+ type: "uint256",
86
+ },
87
+ {
88
+ internalType: "gtUint32",
89
+ name: "res8_32",
90
+ type: "uint256",
91
+ },
92
+ {
93
+ internalType: "gtUint32",
94
+ name: "res32_8",
95
+ type: "uint256",
96
+ },
97
+ {
98
+ internalType: "gtUint32",
99
+ name: "res16_32",
100
+ type: "uint256",
101
+ },
102
+ {
103
+ internalType: "gtUint32",
104
+ name: "res32_16",
105
+ type: "uint256",
106
+ },
107
+ ],
108
+ internalType: "struct ArithmeticTestsContract.Check32",
109
+ name: "check32",
110
+ type: "tuple",
111
+ },
112
+ ],
113
+ name: "decryptAndCompareResults32",
114
+ outputs: [
115
+ {
116
+ internalType: "uint32",
117
+ name: "",
118
+ type: "uint32",
119
+ },
120
+ ],
121
+ stateMutability: "nonpayable",
122
+ type: "function",
123
+ },
124
+ {
125
+ inputs: [
126
+ {
127
+ components: [
128
+ {
129
+ internalType: "gtUint64",
130
+ name: "res64_64",
131
+ type: "uint256",
132
+ },
133
+ {
134
+ internalType: "gtUint64",
135
+ name: "res8_64",
136
+ type: "uint256",
137
+ },
138
+ {
139
+ internalType: "gtUint64",
140
+ name: "res64_8",
141
+ type: "uint256",
142
+ },
143
+ {
144
+ internalType: "gtUint64",
145
+ name: "res16_64",
146
+ type: "uint256",
147
+ },
148
+ {
149
+ internalType: "gtUint64",
150
+ name: "res64_16",
151
+ type: "uint256",
152
+ },
153
+ {
154
+ internalType: "gtUint64",
155
+ name: "res32_64",
156
+ type: "uint256",
157
+ },
158
+ {
159
+ internalType: "gtUint64",
160
+ name: "res64_32",
161
+ type: "uint256",
162
+ },
163
+ ],
164
+ internalType: "struct ArithmeticTestsContract.Check64",
165
+ name: "check64",
166
+ type: "tuple",
167
+ },
168
+ ],
169
+ name: "decryptAndCompareResults64",
170
+ outputs: [
171
+ {
172
+ internalType: "uint64",
173
+ name: "",
174
+ type: "uint64",
175
+ },
176
+ ],
177
+ stateMutability: "nonpayable",
178
+ type: "function",
179
+ },
180
+ {
181
+ inputs: [],
182
+ name: "getAddResult",
183
+ outputs: [
184
+ {
185
+ internalType: "uint8",
186
+ name: "",
187
+ type: "uint8",
188
+ },
189
+ ],
190
+ stateMutability: "view",
191
+ type: "function",
192
+ },
193
+ {
194
+ inputs: [],
195
+ name: "getMulResult",
196
+ outputs: [
197
+ {
198
+ internalType: "uint8",
199
+ name: "",
200
+ type: "uint8",
201
+ },
202
+ ],
203
+ stateMutability: "view",
204
+ type: "function",
205
+ },
206
+ {
207
+ inputs: [],
208
+ name: "getSubResult",
209
+ outputs: [
210
+ {
211
+ internalType: "uint8",
212
+ name: "",
213
+ type: "uint8",
214
+ },
215
+ ],
216
+ stateMutability: "view",
217
+ type: "function",
218
+ },
219
+ {
220
+ inputs: [
221
+ {
222
+ internalType: "uint8",
223
+ name: "a",
224
+ type: "uint8",
225
+ },
226
+ {
227
+ internalType: "uint8",
228
+ name: "b",
229
+ type: "uint8",
230
+ },
231
+ ],
232
+ name: "mulTest",
233
+ outputs: [
234
+ {
235
+ internalType: "uint8",
236
+ name: "",
237
+ type: "uint8",
238
+ },
239
+ ],
240
+ stateMutability: "nonpayable",
241
+ type: "function",
242
+ },
243
+ {
244
+ inputs: [
245
+ {
246
+ components: [
247
+ {
248
+ internalType: "gtUint8",
249
+ name: "a8_s",
250
+ type: "uint256",
251
+ },
252
+ {
253
+ internalType: "gtUint8",
254
+ name: "b8_s",
255
+ type: "uint256",
256
+ },
257
+ {
258
+ internalType: "gtUint16",
259
+ name: "a16_s",
260
+ type: "uint256",
261
+ },
262
+ {
263
+ internalType: "gtUint16",
264
+ name: "b16_s",
265
+ type: "uint256",
266
+ },
267
+ {
268
+ internalType: "gtUint32",
269
+ name: "a32_s",
270
+ type: "uint256",
271
+ },
272
+ {
273
+ internalType: "gtUint32",
274
+ name: "b32_s",
275
+ type: "uint256",
276
+ },
277
+ {
278
+ internalType: "gtUint64",
279
+ name: "a64_s",
280
+ type: "uint256",
281
+ },
282
+ {
283
+ internalType: "gtUint64",
284
+ name: "b64_s",
285
+ type: "uint256",
286
+ },
287
+ ],
288
+ internalType: "struct ArithmeticTestsContract.AllGTCastingValues",
289
+ name: "castingValues",
290
+ type: "tuple",
291
+ },
292
+ {
293
+ internalType: "uint8",
294
+ name: "a",
295
+ type: "uint8",
296
+ },
297
+ {
298
+ internalType: "uint8",
299
+ name: "b",
300
+ type: "uint8",
301
+ },
302
+ ],
303
+ name: "setPublicValues",
304
+ outputs: [],
305
+ stateMutability: "nonpayable",
306
+ type: "function",
307
+ },
308
+ {
309
+ inputs: [
310
+ {
311
+ internalType: "uint8",
312
+ name: "a",
313
+ type: "uint8",
314
+ },
315
+ {
316
+ internalType: "uint8",
317
+ name: "b",
318
+ type: "uint8",
319
+ },
320
+ ],
321
+ name: "subTest",
322
+ outputs: [
323
+ {
324
+ internalType: "uint8",
325
+ name: "",
326
+ type: "uint8",
327
+ },
328
+ ],
329
+ stateMutability: "nonpayable",
330
+ type: "function",
331
+ },
332
+ ] as const;
333
+
334
+ const _bytecode =
335
+ "0x608060405234801561001057600080fd5b50615ad580620000216000396000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c806380f937bc1161006657806380f937bc14610181578063971bbe6f146101b1578063acb38169146101cf578063d3e4744d146101ff578063ebb571fd1461021d5761009e565b8063202cdc8f146100a357806324ad7b30146100d35780632e544aa0146100f15780634f5941bc146101215780635e60e5c014610151575b600080fd5b6100bd60048036038101906100b89190614815565b610239565b6040516100ca9190614864565b60405180910390f35b6100db610831565b6040516100e89190614864565b60405180910390f35b61010b600480360381019061010691906149aa565b610847565b60405161011891906149f4565b60405180910390f35b61013b60048036038101906101369190614815565b6108d7565b6040516101489190614864565b60405180910390f35b61016b60048036038101906101669190614815565b610e21565b6040516101789190614864565b60405180910390f35b61019b60048036038101906101969190614aef565b61136a565b6040516101a89190614b3f565b60405180910390f35b6101b96114be565b6040516101c69190614864565b60405180910390f35b6101e960048036038101906101e49190614c12565b6114d4565b6040516101f69190614c5e565b60405180910390f35b6102076115b2565b6040516102149190614864565b60405180910390f35b61023760048036038101906102329190614d6f565b6115c8565b005b60006102436146fb565b61024b614740565b610253614761565b61025b614790565b6102668488886115c8565b61028061027b8560000151866020015161166f565b611706565b600060026101000a81548160ff021916908360ff1602179055506102ac846040015185606001516117a4565b8360000181815250506102c78460000151856060015161183b565b8360200181815250506102e2846040015185602001516118d3565b83604001818152505060006102f684610847565b90508061ffff16600060029054906101000a900460ff1660ff1614610350576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161034790614e22565b60405180910390fd5b61036285608001518660a0015161196b565b83600001818152505061037d85600001518660a00151611a02565b83602001818152505061039885608001518660200151611a9a565b8360400181815250506103b385604001518660a00151611b32565b8360600181815250506103ce85608001518660600151611bca565b83608001818152505060006103e2846114d4565b90508063ffffffff16600060029054906101000a900460ff1660ff161461043e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161043590614e8e565b60405180910390fd5b6104508660c001518760e00151611c62565b83600001818152505061046b86600001518760e00151611cf9565b8360200181815250506104868660c001518760200151611d91565b8360400181815250506104a186604001518760e00151611e29565b8360600181815250506104bc8660c001518760600151611ec1565b8360800181815250506104d786608001518760e00151611f59565b8360a00181815250506104f28660c001518760a00151611ff1565b8360c001818152505060006105068461136a565b90508067ffffffffffffffff16600060029054906101000a900460ff1660ff1614610566576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161055d90614efa565b60405180910390fd5b61057c6105778b8960200151612089565b611706565b60ff16600060029054906101000a900460ff1660ff161480156105c857506105b06105ab88600001518b612123565b611706565b60ff16600060029054906101000a900460ff1660ff16145b610607576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105fe90614f8c565b60405180910390fd5b61062061061b8b60ff1689606001516121bd565b612258565b61ffff16600060029054906101000a900460ff1660ff16148015610671575061065861065388604001518b60ff166122f6565b612258565b61ffff16600060029054906101000a900460ff1660ff16145b6106b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a79061501e565b60405180910390fd5b6106c96106c48b60ff168960a00151612391565b61242e565b63ffffffff16600060029054906101000a900460ff1660ff1614801561071e57506107036106fe88608001518b60ff166124cc565b61242e565b63ffffffff16600060029054906101000a900460ff1660ff16145b61075d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610754906150b0565b60405180910390fd5b6107766107718b60ff168960e00151612569565b61260a565b67ffffffffffffffff16600060029054906101000a900460ff1660ff161480156107d357506107b46107af8860c001518b60ff166126a7565b61260a565b67ffffffffffffffff16600060029054906101000a900460ff1660ff16145b610812576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161080990615142565b60405180910390fd5b600060029054906101000a900460ff1697505050505050505092915050565b60008060009054906101000a900460ff16905090565b6000806108578360000151612258565b90506108668360200151612258565b61ffff168161ffff1614801561088f57506108848360400151612258565b61ffff168161ffff16145b6108ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c5906151fa565b60405180910390fd5b80915050919050565b60006108e16146fb565b6108e9614740565b6108f1614761565b6108f9614790565b6109048488886115c8565b600061092061091b86600001518760200151612748565b611706565b905080600060016101000a81548160ff021916908360ff16021790555061094f856040015186606001516127df565b84600001818152505061096a85600001518660600151612876565b8460200181815250506109858560400151866020015161290e565b846040018181525050600061099985610847565b90508160ff168161ffff16146109e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109db90615266565b60405180910390fd5b6109f686608001518760a001516129a6565b846000018181525050610a1186600001518760a00151612a3d565b846020018181525050610a2c86608001518760200151612ad5565b846040018181525050610a4786604001518760a00151612b6d565b846060018181525050610a6286608001518760600151612c05565b8460800181815250506000610a76856114d4565b90508063ffffffff168360ff1614610ac3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aba906152d2565b60405180910390fd5b610ad58760c001518860e00151612c9d565b846000018181525050610af087600001518860e00151612d34565b846020018181525050610b0b8760c001518860200151612dcc565b846040018181525050610b2687604001518860e00151612e64565b846060018181525050610b418760c001518860600151612efc565b846080018181525050610b5c87608001518860e00151612f94565b8460a0018181525050610b778760c001518860a0015161302c565b8460c00181815250506000610b8b8561136a565b90508067ffffffffffffffff168460ff1614610bdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd39061533e565b60405180910390fd5b610bf2610bed8c8a602001516130c4565b611706565b60ff168460ff16148015610c205750610c17610c1289600001518c61315e565b611706565b60ff168460ff16145b610c5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c56906153d0565b60405180910390fd5b610c78610c738c60ff168a606001516131f8565b612258565b61ffff168460ff16148015610cab5750610ca1610c9c89604001518c60ff16613293565b612258565b61ffff168460ff16145b610cea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce190615462565b60405180910390fd5b610d03610cfe8c60ff168a60a0015161332e565b61242e565b63ffffffff168460ff16148015610d3a5750610d2e610d2989608001518c60ff166133cb565b61242e565b63ffffffff168460ff16145b610d79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d70906154f4565b60405180910390fd5b610d92610d8d8c60ff168a60e00151613468565b61260a565b67ffffffffffffffff168460ff16148015610dd15750610dc1610dbc8960c001518c60ff16613509565b61260a565b67ffffffffffffffff168460ff16145b610e10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0790615586565b60405180910390fd5b839850505050505050505092915050565b6000610e2b6146fb565b610e33614740565b610e3b614761565b610e43614790565b610e4e8488886115c8565b6000610e6a610e65866000015187602001516135aa565b611706565b9050806000806101000a81548160ff021916908360ff160217905550610e9885604001518660600151613641565b846000018181525050610eb3856000015186606001516136d8565b846020018181525050610ece85604001518660200151613770565b8460400181815250506000610ee285610847565b90508160ff168161ffff1614610f2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f24906155f2565b60405180910390fd5b610f3f86608001518760a00151613808565b846000018181525050610f5a86600001518760a0015161389f565b846020018181525050610f7586608001518760200151613937565b846040018181525050610f9086604001518760a001516139cf565b846060018181525050610fab86608001518760600151613a67565b8460800181815250506000610fbf856114d4565b90508063ffffffff168360ff161461100c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110039061565e565b60405180910390fd5b61101e8760c001518860e00151613aff565b84600001818152505061103987600001518860e00151613b96565b8460200181815250506110548760c001518860200151613c2e565b84604001818152505061106f87604001518860e00151613cc6565b84606001818152505061108a8760c001518860600151613d5e565b8460800181815250506110a587608001518860e00151613df6565b8460a00181815250506110c08760c001518860a00151613e8e565b8460c001818152505060006110d48561136a565b90508067ffffffffffffffff168460ff1614611125576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111c906156ca565b60405180910390fd5b61113b6111368c8a60200151613f26565b611706565b60ff168460ff16148015611169575061116061115b89600001518c613fc0565b611706565b60ff168460ff16145b6111a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119f9061575c565b60405180910390fd5b6111c16111bc8c60ff168a6060015161405a565b612258565b61ffff168460ff161480156111f457506111ea6111e589604001518c60ff166140f5565b612258565b61ffff168460ff16145b611233576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122a906157ee565b60405180910390fd5b61124c6112478c60ff168a60a00151614190565b61242e565b63ffffffff168460ff16148015611283575061127761127289608001518c60ff1661422d565b61242e565b63ffffffff168460ff16145b6112c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b990615880565b60405180910390fd5b6112db6112d68c60ff168a60e001516142ca565b61260a565b67ffffffffffffffff168460ff1614801561131a575061130a6113058960c001518c60ff1661436b565b61260a565b67ffffffffffffffff168460ff16145b611359576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135090615912565b60405180910390fd5b839850505050505050505092915050565b60008061137a836000015161260a565b9050611389836020015161260a565b67ffffffffffffffff168167ffffffffffffffff161480156113ca57506113b3836040015161260a565b67ffffffffffffffff168167ffffffffffffffff16145b80156113f557506113de836080015161260a565b67ffffffffffffffff168167ffffffffffffffff16145b80156114205750611409836060015161260a565b67ffffffffffffffff168167ffffffffffffffff16145b801561144b57506114348360c0015161260a565b67ffffffffffffffff168167ffffffffffffffff16145b8015611476575061145f8360a0015161260a565b67ffffffffffffffff168167ffffffffffffffff16145b6114b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ac906151fa565b60405180910390fd5b80915050919050565b60008060019054906101000a900460ff16905090565b6000806114e4836000015161242e565b90506114f3836020015161242e565b63ffffffff168163ffffffff161480156115245750611515836040015161242e565b63ffffffff168163ffffffff16145b80156115475750611538836080015161242e565b63ffffffff168163ffffffff16145b801561156a575061155b836060015161242e565b63ffffffff168163ffffffff16145b6115a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a0906151fa565b60405180910390fd5b80915050919050565b60008060029054906101000a900460ff16905090565b6115d18261440c565b8360000181815250506115e38161440c565b8360200181815250506115f88260ff166144ad565b83604001818152505061160d8160ff166144ad565b8360600181815250506116228260ff1661454f565b8360800181815250506116378160ff1661454f565b8360a001818152505061164c8260ff166145f3565b8360c00181815250506116618160ff166145f3565b8360e0018181525050505050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663f1d21bb461169b600180600061469a565b85856040518463ffffffff1660e01b81526004016116bb9392919061597c565b6020604051808303816000875af11580156116da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116fe91906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff16630cfed5616001600481111561173957611738615a0c565b5b60f81b846040518363ffffffff1660e01b815260040161175a929190615a76565b6020604051808303816000875af1158015611779573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061179d91906159df565b9050919050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663f1d21bb46117d0600280600061469a565b85856040518463ffffffff1660e01b81526004016117f09392919061597c565b6020604051808303816000875af115801561180f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061183391906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663f1d21bb461186860016002600061469a565b85856040518463ffffffff1660e01b81526004016118889392919061597c565b6020604051808303816000875af11580156118a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118cb91906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663f1d21bb461190060026001600061469a565b85856040518463ffffffff1660e01b81526004016119209392919061597c565b6020604051808303816000875af115801561193f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061196391906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663f1d21bb4611997600380600061469a565b85856040518463ffffffff1660e01b81526004016119b79392919061597c565b6020604051808303816000875af11580156119d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119fa91906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663f1d21bb4611a2f60016003600061469a565b85856040518463ffffffff1660e01b8152600401611a4f9392919061597c565b6020604051808303816000875af1158015611a6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a9291906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663f1d21bb4611ac760036001600061469a565b85856040518463ffffffff1660e01b8152600401611ae79392919061597c565b6020604051808303816000875af1158015611b06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b2a91906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663f1d21bb4611b5f60026003600061469a565b85856040518463ffffffff1660e01b8152600401611b7f9392919061597c565b6020604051808303816000875af1158015611b9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bc291906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663f1d21bb4611bf760036002600061469a565b85856040518463ffffffff1660e01b8152600401611c179392919061597c565b6020604051808303816000875af1158015611c36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c5a91906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663f1d21bb4611c8e600480600061469a565b85856040518463ffffffff1660e01b8152600401611cae9392919061597c565b6020604051808303816000875af1158015611ccd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cf191906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663f1d21bb4611d2660016004600061469a565b85856040518463ffffffff1660e01b8152600401611d469392919061597c565b6020604051808303816000875af1158015611d65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d8991906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663f1d21bb4611dbe60046001600061469a565b85856040518463ffffffff1660e01b8152600401611dde9392919061597c565b6020604051808303816000875af1158015611dfd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e2191906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663f1d21bb4611e5660026004600061469a565b85856040518463ffffffff1660e01b8152600401611e769392919061597c565b6020604051808303816000875af1158015611e95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eb991906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663f1d21bb4611eee60046002600061469a565b85856040518463ffffffff1660e01b8152600401611f0e9392919061597c565b6020604051808303816000875af1158015611f2d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f5191906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663f1d21bb4611f8660036004600061469a565b85856040518463ffffffff1660e01b8152600401611fa69392919061597c565b6020604051808303816000875af1158015611fc5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fe991906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663f1d21bb461201e60046003600061469a565b85856040518463ffffffff1660e01b815260040161203e9392919061597c565b6020604051808303816000875af115801561205d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061208191906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663f1d21bb46120b5600180600161469a565b8560ff16856040518463ffffffff1660e01b81526004016120d89392919061597c565b6020604051808303816000875af11580156120f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061211b91906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663f1d21bb461214f600180600261469a565b858560ff166040518463ffffffff1660e01b81526004016121729392919061597c565b6020604051808303816000875af1158015612191573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121b591906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663f1d21bb46121e9600280600161469a565b8561ffff16856040518463ffffffff1660e01b815260040161220d9392919061597c565b6020604051808303816000875af115801561222c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061225091906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff16630cfed5616002600481111561228b5761228a615a0c565b5b60f81b846040518363ffffffff1660e01b81526004016122ac929190615a76565b6020604051808303816000875af11580156122cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122ef91906159df565b9050919050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663f1d21bb4612322600280600261469a565b858561ffff166040518463ffffffff1660e01b81526004016123469392919061597c565b6020604051808303816000875af1158015612365573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061238991906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663f1d21bb46123bd600380600161469a565b8563ffffffff16856040518463ffffffff1660e01b81526004016123e39392919061597c565b6020604051808303816000875af1158015612402573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061242691906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff16630cfed5616003600481111561246157612460615a0c565b5b60f81b846040518363ffffffff1660e01b8152600401612482929190615a76565b6020604051808303816000875af11580156124a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124c591906159df565b9050919050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663f1d21bb46124f8600380600261469a565b858563ffffffff166040518463ffffffff1660e01b815260040161251e9392919061597c565b6020604051808303816000875af115801561253d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061256191906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663f1d21bb4612595600480600161469a565b8567ffffffffffffffff16856040518463ffffffff1660e01b81526004016125bf9392919061597c565b6020604051808303816000875af11580156125de573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061260291906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff16630cfed56160048081111561263c5761263b615a0c565b5b60f81b846040518363ffffffff1660e01b815260040161265d929190615a76565b6020604051808303816000875af115801561267c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126a091906159df565b9050919050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663f1d21bb46126d3600480600261469a565b858567ffffffffffffffff166040518463ffffffff1660e01b81526004016126fd9392919061597c565b6020604051808303816000875af115801561271c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061274091906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663371d1bf2612774600180600061469a565b85856040518463ffffffff1660e01b81526004016127949392919061597c565b6020604051808303816000875af11580156127b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127d791906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663371d1bf261280b600280600061469a565b85856040518463ffffffff1660e01b815260040161282b9392919061597c565b6020604051808303816000875af115801561284a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061286e91906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663371d1bf26128a360016002600061469a565b85856040518463ffffffff1660e01b81526004016128c39392919061597c565b6020604051808303816000875af11580156128e2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061290691906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663371d1bf261293b60026001600061469a565b85856040518463ffffffff1660e01b815260040161295b9392919061597c565b6020604051808303816000875af115801561297a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061299e91906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663371d1bf26129d2600380600061469a565b85856040518463ffffffff1660e01b81526004016129f29392919061597c565b6020604051808303816000875af1158015612a11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a3591906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663371d1bf2612a6a60016003600061469a565b85856040518463ffffffff1660e01b8152600401612a8a9392919061597c565b6020604051808303816000875af1158015612aa9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612acd91906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663371d1bf2612b0260036001600061469a565b85856040518463ffffffff1660e01b8152600401612b229392919061597c565b6020604051808303816000875af1158015612b41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b6591906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663371d1bf2612b9a60026003600061469a565b85856040518463ffffffff1660e01b8152600401612bba9392919061597c565b6020604051808303816000875af1158015612bd9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bfd91906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663371d1bf2612c3260036002600061469a565b85856040518463ffffffff1660e01b8152600401612c529392919061597c565b6020604051808303816000875af1158015612c71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c9591906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663371d1bf2612cc9600480600061469a565b85856040518463ffffffff1660e01b8152600401612ce99392919061597c565b6020604051808303816000875af1158015612d08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d2c91906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663371d1bf2612d6160016004600061469a565b85856040518463ffffffff1660e01b8152600401612d819392919061597c565b6020604051808303816000875af1158015612da0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dc491906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663371d1bf2612df960046001600061469a565b85856040518463ffffffff1660e01b8152600401612e199392919061597c565b6020604051808303816000875af1158015612e38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e5c91906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663371d1bf2612e9160026004600061469a565b85856040518463ffffffff1660e01b8152600401612eb19392919061597c565b6020604051808303816000875af1158015612ed0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ef491906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663371d1bf2612f2960046002600061469a565b85856040518463ffffffff1660e01b8152600401612f499392919061597c565b6020604051808303816000875af1158015612f68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f8c91906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663371d1bf2612fc160036004600061469a565b85856040518463ffffffff1660e01b8152600401612fe19392919061597c565b6020604051808303816000875af1158015613000573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061302491906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663371d1bf261305960046003600061469a565b85856040518463ffffffff1660e01b81526004016130799392919061597c565b6020604051808303816000875af1158015613098573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130bc91906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663371d1bf26130f0600180600161469a565b8560ff16856040518463ffffffff1660e01b81526004016131139392919061597c565b6020604051808303816000875af1158015613132573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061315691906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663371d1bf261318a600180600261469a565b858560ff166040518463ffffffff1660e01b81526004016131ad9392919061597c565b6020604051808303816000875af11580156131cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131f091906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663371d1bf2613224600280600161469a565b8561ffff16856040518463ffffffff1660e01b81526004016132489392919061597c565b6020604051808303816000875af1158015613267573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061328b91906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663371d1bf26132bf600180600261469a565b858561ffff166040518463ffffffff1660e01b81526004016132e39392919061597c565b6020604051808303816000875af1158015613302573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061332691906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663371d1bf261335a600380600161469a565b8563ffffffff16856040518463ffffffff1660e01b81526004016133809392919061597c565b6020604051808303816000875af115801561339f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133c391906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663371d1bf26133f7600380600261469a565b858563ffffffff166040518463ffffffff1660e01b815260040161341d9392919061597c565b6020604051808303816000875af115801561343c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061346091906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663371d1bf2613494600480600161469a565b8567ffffffffffffffff16856040518463ffffffff1660e01b81526004016134be9392919061597c565b6020604051808303816000875af11580156134dd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061350191906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663371d1bf2613535600480600261469a565b858567ffffffffffffffff166040518463ffffffff1660e01b815260040161355f9392919061597c565b6020604051808303816000875af115801561357e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135a291906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff16638c5d01506135d6600180600061469a565b85856040518463ffffffff1660e01b81526004016135f69392919061597c565b6020604051808303816000875af1158015613615573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061363991906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff16638c5d015061366d600280600061469a565b85856040518463ffffffff1660e01b815260040161368d9392919061597c565b6020604051808303816000875af11580156136ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136d091906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff16638c5d015061370560016002600061469a565b85856040518463ffffffff1660e01b81526004016137259392919061597c565b6020604051808303816000875af1158015613744573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061376891906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff16638c5d015061379d60026001600061469a565b85856040518463ffffffff1660e01b81526004016137bd9392919061597c565b6020604051808303816000875af11580156137dc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061380091906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff16638c5d0150613834600380600061469a565b85856040518463ffffffff1660e01b81526004016138549392919061597c565b6020604051808303816000875af1158015613873573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061389791906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff16638c5d01506138cc60016003600061469a565b85856040518463ffffffff1660e01b81526004016138ec9392919061597c565b6020604051808303816000875af115801561390b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061392f91906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff16638c5d015061396460036001600061469a565b85856040518463ffffffff1660e01b81526004016139849392919061597c565b6020604051808303816000875af11580156139a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139c791906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff16638c5d01506139fc60026003600061469a565b85856040518463ffffffff1660e01b8152600401613a1c9392919061597c565b6020604051808303816000875af1158015613a3b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a5f91906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff16638c5d0150613a9460036002600061469a565b85856040518463ffffffff1660e01b8152600401613ab49392919061597c565b6020604051808303816000875af1158015613ad3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613af791906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff16638c5d0150613b2b600480600061469a565b85856040518463ffffffff1660e01b8152600401613b4b9392919061597c565b6020604051808303816000875af1158015613b6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b8e91906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff16638c5d0150613bc360016004600061469a565b85856040518463ffffffff1660e01b8152600401613be39392919061597c565b6020604051808303816000875af1158015613c02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c2691906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff16638c5d0150613c5b60046001600061469a565b85856040518463ffffffff1660e01b8152600401613c7b9392919061597c565b6020604051808303816000875af1158015613c9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cbe91906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff16638c5d0150613cf360026004600061469a565b85856040518463ffffffff1660e01b8152600401613d139392919061597c565b6020604051808303816000875af1158015613d32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d5691906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff16638c5d0150613d8b60046002600061469a565b85856040518463ffffffff1660e01b8152600401613dab9392919061597c565b6020604051808303816000875af1158015613dca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613dee91906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff16638c5d0150613e2360036004600061469a565b85856040518463ffffffff1660e01b8152600401613e439392919061597c565b6020604051808303816000875af1158015613e62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e8691906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff16638c5d0150613ebb60046003600061469a565b85856040518463ffffffff1660e01b8152600401613edb9392919061597c565b6020604051808303816000875af1158015613efa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f1e91906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff16638c5d0150613f52600180600161469a565b8560ff16856040518463ffffffff1660e01b8152600401613f759392919061597c565b6020604051808303816000875af1158015613f94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613fb891906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff16638c5d0150613fec600180600261469a565b858560ff166040518463ffffffff1660e01b815260040161400f9392919061597c565b6020604051808303816000875af115801561402e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061405291906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff16638c5d0150614086600280600161469a565b8561ffff16856040518463ffffffff1660e01b81526004016140aa9392919061597c565b6020604051808303816000875af11580156140c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140ed91906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff16638c5d0150614121600280600261469a565b858561ffff166040518463ffffffff1660e01b81526004016141459392919061597c565b6020604051808303816000875af1158015614164573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061418891906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff16638c5d01506141bc600380600161469a565b8563ffffffff16856040518463ffffffff1660e01b81526004016141e29392919061597c565b6020604051808303816000875af1158015614201573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061422591906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff16638c5d0150614259600380600261469a565b858563ffffffff166040518463ffffffff1660e01b815260040161427f9392919061597c565b6020604051808303816000875af115801561429e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142c291906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff16638c5d01506142f6600480600161469a565b8567ffffffffffffffff16856040518463ffffffff1660e01b81526004016143209392919061597c565b6020604051808303816000875af115801561433f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061436391906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff16638c5d0150614397600480600261469a565b858567ffffffffffffffff166040518463ffffffff1660e01b81526004016143c19392919061597c565b6020604051808303816000875af11580156143e0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061440491906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663d9b60b606001600481111561443f5761443e615a0c565b5b60f81b8460ff166040518363ffffffff1660e01b8152600401614463929190615a76565b6020604051808303816000875af1158015614482573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144a691906159df565b9050919050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663d9b60b60600260048111156144e0576144df615a0c565b5b60f81b8461ffff166040518363ffffffff1660e01b8152600401614505929190615a76565b6020604051808303816000875af1158015614524573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061454891906159df565b9050919050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663d9b60b606003600481111561458257614581615a0c565b5b60f81b8463ffffffff166040518363ffffffff1660e01b81526004016145a9929190615a76565b6020604051808303816000875af11580156145c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145ec91906159df565b9050919050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663d9b60b6060048081111561462557614624615a0c565b5b60f81b8467ffffffffffffffff166040518363ffffffff1660e01b8152600401614650929190615a76565b6020604051808303816000875af115801561466f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061469391906159df565b9050919050565b60008160028111156146af576146ae615a0c565b5b60ff1660088460048111156146c7576146c6615a0c565b5b61ffff16901b61ffff1660108660048111156146e6576146e5615a0c565b5b62ffffff16901b171760e81b90509392505050565b60405180610100016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b60405180606001604052806000815260200160008152602001600081525090565b6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b6040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6000604051905090565b600080fd5b600060ff82169050919050565b6147f2816147dc565b81146147fd57600080fd5b50565b60008135905061480f816147e9565b92915050565b6000806040838503121561482c5761482b6147d7565b5b600061483a85828601614800565b925050602061484b85828601614800565b9150509250929050565b61485e816147dc565b82525050565b60006020820190506148796000830184614855565b92915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6148cd82614884565b810181811067ffffffffffffffff821117156148ec576148eb614895565b5b80604052505050565b60006148ff6147cd565b905061490b82826148c4565b919050565b6000819050919050565b61492381614910565b811461492e57600080fd5b50565b6000813590506149408161491a565b92915050565b60006060828403121561495c5761495b61487f565b5b61496660606148f5565b9050600061497684828501614931565b600083015250602061498a84828501614931565b602083015250604061499e84828501614931565b60408301525092915050565b6000606082840312156149c0576149bf6147d7565b5b60006149ce84828501614946565b91505092915050565b600061ffff82169050919050565b6149ee816149d7565b82525050565b6000602082019050614a0960008301846149e5565b92915050565b614a1881614910565b8114614a2357600080fd5b50565b600081359050614a3581614a0f565b92915050565b600060e08284031215614a5157614a5061487f565b5b614a5b60e06148f5565b90506000614a6b84828501614a26565b6000830152506020614a7f84828501614a26565b6020830152506040614a9384828501614a26565b6040830152506060614aa784828501614a26565b6060830152506080614abb84828501614a26565b60808301525060a0614acf84828501614a26565b60a08301525060c0614ae384828501614a26565b60c08301525092915050565b600060e08284031215614b0557614b046147d7565b5b6000614b1384828501614a3b565b91505092915050565b600067ffffffffffffffff82169050919050565b614b3981614b1c565b82525050565b6000602082019050614b546000830184614b30565b92915050565b614b6381614910565b8114614b6e57600080fd5b50565b600081359050614b8081614b5a565b92915050565b600060a08284031215614b9c57614b9b61487f565b5b614ba660a06148f5565b90506000614bb684828501614b71565b6000830152506020614bca84828501614b71565b6020830152506040614bde84828501614b71565b6040830152506060614bf284828501614b71565b6060830152506080614c0684828501614b71565b60808301525092915050565b600060a08284031215614c2857614c276147d7565b5b6000614c3684828501614b86565b91505092915050565b600063ffffffff82169050919050565b614c5881614c3f565b82525050565b6000602082019050614c736000830184614c4f565b92915050565b614c8281614910565b8114614c8d57600080fd5b50565b600081359050614c9f81614c79565b92915050565b60006101008284031215614cbc57614cbb61487f565b5b614cc76101006148f5565b90506000614cd784828501614c90565b6000830152506020614ceb84828501614c90565b6020830152506040614cff84828501614931565b6040830152506060614d1384828501614931565b6060830152506080614d2784828501614b71565b60808301525060a0614d3b84828501614b71565b60a08301525060c0614d4f84828501614a26565b60c08301525060e0614d6384828501614a26565b60e08301525092915050565b60008060006101408486031215614d8957614d886147d7565b5b6000614d9786828701614ca5565b935050610100614da986828701614800565b925050610120614dbb86828701614800565b9150509250925092565b600082825260208201905092915050565b7f6d756c546573743a2063617374203136206661696c6564000000000000000000600082015250565b6000614e0c601783614dc5565b9150614e1782614dd6565b602082019050919050565b60006020820190508181036000830152614e3b81614dff565b9050919050565b7f6d756c546573743a2063617374203332206661696c6564000000000000000000600082015250565b6000614e78601783614dc5565b9150614e8382614e42565b602082019050919050565b60006020820190508181036000830152614ea781614e6b565b9050919050565b7f6d756c546573743a2063617374203634206661696c6564000000000000000000600082015250565b6000614ee4601783614dc5565b9150614eef82614eae565b602082019050919050565b60006020820190508181036000830152614f1381614ed7565b9050919050565b7f6d756c546573743a2074657374203820626974732077697468207363616c617260008201527f206661696c656400000000000000000000000000000000000000000000000000602082015250565b6000614f76602783614dc5565b9150614f8182614f1a565b604082019050919050565b60006020820190508181036000830152614fa581614f69565b9050919050565b7f6d756c546573743a207465737420313620626974732077697468207363616c6160008201527f72206661696c6564000000000000000000000000000000000000000000000000602082015250565b6000615008602883614dc5565b915061501382614fac565b604082019050919050565b6000602082019050818103600083015261503781614ffb565b9050919050565b7f6d756c546573743a207465737420333220626974732077697468207363616c6160008201527f72206661696c6564000000000000000000000000000000000000000000000000602082015250565b600061509a602883614dc5565b91506150a58261503e565b604082019050919050565b600060208201905081810360008301526150c98161508d565b9050919050565b7f6d756c546573743a207465737420363420626974732077697468207363616c6160008201527f72206661696c6564000000000000000000000000000000000000000000000000602082015250565b600061512c602883614dc5565b9150615137826150d0565b604082019050919050565b6000602082019050818103600083015261515b8161511f565b9050919050565b7f64656372797074416e64436f6d70617265416c6c526573756c74733a2046616960008201527f6c656420746f206465637279707420616e6420636f6d7061726520616c6c207260208201527f6573756c74730000000000000000000000000000000000000000000000000000604082015250565b60006151e4604683614dc5565b91506151ef82615162565b606082019050919050565b60006020820190508181036000830152615213816151d7565b9050919050565b7f737562546573743a2063617374203136206661696c6564000000000000000000600082015250565b6000615250601783614dc5565b915061525b8261521a565b602082019050919050565b6000602082019050818103600083015261527f81615243565b9050919050565b7f737562546573743a2063617374203332206661696c6564000000000000000000600082015250565b60006152bc601783614dc5565b91506152c782615286565b602082019050919050565b600060208201905081810360008301526152eb816152af565b9050919050565b7f737562546573743a2063617374203634206661696c6564000000000000000000600082015250565b6000615328601783614dc5565b9150615333826152f2565b602082019050919050565b600060208201905081810360008301526153578161531b565b9050919050565b7f737562546573743a2074657374203820626974732077697468207363616c617260008201527f206661696c656400000000000000000000000000000000000000000000000000602082015250565b60006153ba602783614dc5565b91506153c58261535e565b604082019050919050565b600060208201905081810360008301526153e9816153ad565b9050919050565b7f737562546573743a207465737420313620626974732077697468207363616c6160008201527f72206661696c6564000000000000000000000000000000000000000000000000602082015250565b600061544c602883614dc5565b9150615457826153f0565b604082019050919050565b6000602082019050818103600083015261547b8161543f565b9050919050565b7f737562546573743a207465737420333220626974732077697468207363616c6160008201527f72206661696c6564000000000000000000000000000000000000000000000000602082015250565b60006154de602883614dc5565b91506154e982615482565b604082019050919050565b6000602082019050818103600083015261550d816154d1565b9050919050565b7f737562546573743a207465737420363420626974732077697468207363616c6160008201527f72206661696c6564000000000000000000000000000000000000000000000000602082015250565b6000615570602883614dc5565b915061557b82615514565b604082019050919050565b6000602082019050818103600083015261559f81615563565b9050919050565b7f616464546573743a2063617374203136206661696c6564000000000000000000600082015250565b60006155dc601783614dc5565b91506155e7826155a6565b602082019050919050565b6000602082019050818103600083015261560b816155cf565b9050919050565b7f616464546573743a2063617374203332206661696c6564000000000000000000600082015250565b6000615648601783614dc5565b915061565382615612565b602082019050919050565b600060208201905081810360008301526156778161563b565b9050919050565b7f616464546573743a2063617374203634206661696c6564000000000000000000600082015250565b60006156b4601783614dc5565b91506156bf8261567e565b602082019050919050565b600060208201905081810360008301526156e3816156a7565b9050919050565b7f616464546573743a2074657374203820626974732077697468207363616c617260008201527f206661696c656400000000000000000000000000000000000000000000000000602082015250565b6000615746602783614dc5565b9150615751826156ea565b604082019050919050565b6000602082019050818103600083015261577581615739565b9050919050565b7f616464546573743a207465737420313620626974732077697468207363616c6160008201527f72206661696c6564000000000000000000000000000000000000000000000000602082015250565b60006157d8602883614dc5565b91506157e38261577c565b604082019050919050565b60006020820190508181036000830152615807816157cb565b9050919050565b7f616464546573743a207465737420333220626974732077697468207363616c6160008201527f72206661696c6564000000000000000000000000000000000000000000000000602082015250565b600061586a602883614dc5565b91506158758261580e565b604082019050919050565b600060208201905081810360008301526158998161585d565b9050919050565b7f616464546573743a207465737420363420626974732077697468207363616c6160008201527f72206661696c6564000000000000000000000000000000000000000000000000602082015250565b60006158fc602883614dc5565b9150615907826158a0565b604082019050919050565b6000602082019050818103600083015261592b816158ef565b9050919050565b60007fffffff000000000000000000000000000000000000000000000000000000000082169050919050565b61596781615932565b82525050565b61597681614910565b82525050565b6000606082019050615991600083018661595e565b61599e602083018561596d565b6159ab604083018461596d565b949350505050565b6159bc81614910565b81146159c757600080fd5b50565b6000815190506159d9816159b3565b92915050565b6000602082840312156159f5576159f46147d7565b5b6000615a03848285016159ca565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60007fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b615a7081615a3b565b82525050565b6000604082019050615a8b6000830185615a67565b615a98602083018461596d565b939250505056fea2646970667358221220b3183000ad81aa1d7b04a7becf5f46a6656e869b91031feed1dba1823839281764736f6c63430008140033";
336
+
337
+ type ArithmeticTestsContractConstructorParams =
338
+ | [signer?: Signer]
339
+ | ConstructorParameters<typeof ContractFactory>;
340
+
341
+ const isSuperArgs = (
342
+ xs: ArithmeticTestsContractConstructorParams
343
+ ): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;
344
+
345
+ export class ArithmeticTestsContract__factory extends ContractFactory {
346
+ constructor(...args: ArithmeticTestsContractConstructorParams) {
347
+ if (isSuperArgs(args)) {
348
+ super(...args);
349
+ } else {
350
+ super(_abi, _bytecode, args[0]);
351
+ }
352
+ }
353
+
354
+ override getDeployTransaction(
355
+ overrides?: NonPayableOverrides & { from?: string }
356
+ ): Promise<ContractDeployTransaction> {
357
+ return super.getDeployTransaction(overrides || {});
358
+ }
359
+ override deploy(overrides?: NonPayableOverrides & { from?: string }) {
360
+ return super.deploy(overrides || {}) as Promise<
361
+ ArithmeticTestsContract & {
362
+ deploymentTransaction(): ContractTransactionResponse;
363
+ }
364
+ >;
365
+ }
366
+ override connect(
367
+ runner: ContractRunner | null
368
+ ): ArithmeticTestsContract__factory {
369
+ return super.connect(runner) as ArithmeticTestsContract__factory;
370
+ }
371
+
372
+ static readonly bytecode = _bytecode;
373
+ static readonly abi = _abi;
374
+ static createInterface(): ArithmeticTestsContractInterface {
375
+ return new Interface(_abi) as ArithmeticTestsContractInterface;
376
+ }
377
+ static connect(
378
+ address: string,
379
+ runner?: ContractRunner | null
380
+ ): ArithmeticTestsContract {
381
+ return new Contract(
382
+ address,
383
+ _abi,
384
+ runner
385
+ ) as unknown as ArithmeticTestsContract;
386
+ }
387
+ }