@coti-io/coti-contracts 0.1.0 → 1.0.2

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 (125) hide show
  1. package/.github/workflows/npm-publish.yml +2 -1
  2. package/CONTRIBUTING.md +2 -2
  3. package/LICENSE +1 -1
  4. package/README.md +18 -35
  5. package/contracts/access/DataPrivacyFramework/extensions/DataPrivacyFrameworkMpc.sol +3 -115
  6. package/contracts/mocks/README.md +1 -1
  7. package/contracts/mocks/utils/mpc/ArithmeticTestsContract.sol +257 -280
  8. package/contracts/mocks/utils/mpc/BitwiseTestsContract.sol +93 -187
  9. package/contracts/mocks/utils/mpc/{Comparison1Tests.Contract.sol → Comparison1TestsContract.sol} +67 -115
  10. package/contracts/mocks/utils/mpc/Comparison2TestsContract.sol +76 -116
  11. package/contracts/mocks/utils/mpc/MinMaxTestsContract.sol +69 -164
  12. package/contracts/mocks/utils/mpc/Miscellaneous1TestsContract.sol +103 -56
  13. package/contracts/mocks/utils/mpc/MiscellaneousTestsContract.sol +270 -0
  14. package/contracts/mocks/utils/mpc/OffboardToUserKeyTestContract.sol +127 -0
  15. package/contracts/mocks/utils/mpc/README.md +12 -12
  16. package/contracts/mocks/utils/mpc/TransferScalarTestsContract.sol +54 -211
  17. package/contracts/mocks/utils/mpc/TransferTestsContract.sol +165 -640
  18. package/contracts/mocks/utils/mpc/TransferWithAllowance64_16TestsContract.sol +222 -0
  19. package/contracts/mocks/utils/mpc/TransferWithAllowance64_32TestsContract.sol +222 -0
  20. package/contracts/mocks/utils/mpc/TransferWithAllowance64_64TestsContract.sol +223 -0
  21. package/contracts/mocks/utils/mpc/TransferWithAllowance64_8TestsContract.sol +222 -0
  22. package/contracts/mocks/utils/mpc/TransferWithAllowanceScalarTestsContract.sol +265 -0
  23. package/contracts/mocks/utils/mpc/TransferWithAllowanceTestsContract.sol +281 -0
  24. package/contracts/onboard/AccountOnboard.sol +3 -3
  25. package/contracts/token/PrivateERC20/PrivateERC20.sol +1 -1
  26. package/contracts/token/PrivateERC721/IERC721Errors.sol +57 -0
  27. package/contracts/token/PrivateERC721/PrivateERC721.sol +1 -1
  28. package/contracts/utils/mpc/MpcCore.sol +2835 -988
  29. package/contracts/utils/mpc/MpcInterface.sol +6 -4
  30. package/hardhat.config.ts +17 -6
  31. package/package.json +20 -4
  32. package/test/token/PrivateERC20/PrivateERC20.test.ts +2 -2
  33. package/test/utils/accounts.ts +1 -1
  34. package/test/utils/mpc/Precompile.test.ts +42 -39
  35. package/typechain-types/contracts/mocks/utils/mpc/ArithmeticTestsContract.sol/ArithmeticTestsContract.ts +374 -0
  36. package/typechain-types/contracts/mocks/utils/mpc/ArithmeticTestsContract.sol/PrecompilesArythmeticTestsContract.ts +374 -0
  37. package/typechain-types/contracts/mocks/utils/mpc/ArithmeticTestsContract.sol/index.ts +5 -0
  38. package/typechain-types/contracts/mocks/utils/mpc/ArithmeticTestsContract.ts +96 -10
  39. package/typechain-types/contracts/mocks/utils/mpc/BitwiseTestsContract.ts +45 -5
  40. package/typechain-types/contracts/mocks/utils/mpc/Comparison1TestsContract.ts +374 -0
  41. package/typechain-types/contracts/mocks/utils/mpc/Comparison2TestsContract.ts +45 -5
  42. package/typechain-types/contracts/mocks/utils/mpc/MinMaxTestsContract.ts +25 -5
  43. package/typechain-types/contracts/mocks/utils/mpc/Miscellaneous1TestsContract.ts +62 -0
  44. package/typechain-types/contracts/mocks/utils/mpc/MiscellaneousTestsContract.ts +396 -0
  45. package/typechain-types/contracts/mocks/utils/mpc/OffboardToUserKeyTestContract.ts +251 -0
  46. package/typechain-types/contracts/mocks/utils/mpc/OffboardToUserKeyTestsContract.sol/OffboardToUserKeyTestContract.ts +11 -8
  47. package/typechain-types/contracts/mocks/utils/mpc/TransferScalarTestsContract.ts +15 -15
  48. package/typechain-types/contracts/mocks/utils/mpc/TransferTestsContract.ts +15 -15
  49. package/typechain-types/contracts/mocks/utils/mpc/TransferWithAllowance64TestsContract.sol/TransferWithAllowance64TestsContract.ts +251 -0
  50. package/typechain-types/contracts/mocks/utils/mpc/TransferWithAllowance64TestsContract.sol/TransferWithAllowanceTestsContract.ts +250 -0
  51. package/typechain-types/contracts/mocks/utils/mpc/TransferWithAllowance64TestsContract.sol/index.ts +5 -0
  52. package/typechain-types/contracts/mocks/utils/mpc/TransferWithAllowance64TestsContract.ts +389 -0
  53. package/typechain-types/contracts/mocks/utils/mpc/TransferWithAllowance64_16TestsContract.ts +391 -0
  54. package/typechain-types/contracts/mocks/utils/mpc/TransferWithAllowance64_32TestsContract.ts +391 -0
  55. package/typechain-types/contracts/mocks/utils/mpc/TransferWithAllowance64_64TestsContract.sol/TransferWithAllowance64_64TestsContract.ts +391 -0
  56. package/typechain-types/contracts/mocks/utils/mpc/TransferWithAllowance64_64TestsContract.sol/TransferWithAllowance64_8TestsContract.ts +391 -0
  57. package/typechain-types/contracts/mocks/utils/mpc/TransferWithAllowance64_64TestsContract.sol/index.ts +5 -0
  58. package/typechain-types/contracts/mocks/utils/mpc/TransferWithAllowance64_64TestsContract.ts +391 -0
  59. package/typechain-types/contracts/mocks/utils/mpc/TransferWithAllowance64_8TestsContract.ts +391 -0
  60. package/typechain-types/contracts/mocks/utils/mpc/TransferWithAllowanceScalarTestsContract.ts +306 -0
  61. package/typechain-types/contracts/mocks/utils/mpc/TransferWithAllowanceTestsContract.sol/TransferTestsContract.ts +125 -0
  62. package/typechain-types/contracts/mocks/utils/mpc/TransferWithAllowanceTestsContract.sol/TransferWithAllowanceTestsContract.ts +125 -0
  63. package/typechain-types/contracts/mocks/utils/mpc/TransferWithAllowanceTestsContract.sol/index.ts +5 -0
  64. package/typechain-types/contracts/mocks/utils/mpc/TransferWithAllowanceTestsContract.ts +296 -0
  65. package/typechain-types/contracts/mocks/utils/mpc/index.ts +9 -6
  66. package/typechain-types/contracts/onboard/AccountOnboard.ts +9 -4
  67. package/typechain-types/contracts/token/PrivateERC721/IERC721Errors.ts +69 -0
  68. package/typechain-types/contracts/token/PrivateERC721/index.ts +1 -0
  69. package/typechain-types/contracts/utils/mpc/MpcCore.ts +84 -0
  70. package/typechain-types/contracts/utils/mpc/MpcInterface.sol/ExtendedOperations.ts +81 -40
  71. package/typechain-types/contracts/utils/mpc/index.ts +1 -0
  72. package/typechain-types/factories/contracts/mocks/access/DataPrivacyFramework/DataPrivacyFrameworkMock__factory.ts +1 -1
  73. package/typechain-types/factories/contracts/mocks/token/PrivateERC20/PrivateERC20Mock__factory.ts +1 -1
  74. package/typechain-types/factories/contracts/mocks/token/PrivateERC721/PrivateERC721URIStorageMock__factory.ts +1 -1
  75. package/typechain-types/factories/contracts/mocks/utils/mpc/ArithmeticTestsContract.sol/ArithmeticTestsContract__factory.ts +387 -0
  76. package/typechain-types/factories/contracts/mocks/utils/mpc/ArithmeticTestsContract.sol/PrecompilesArythmeticTestsContract__factory.ts +388 -0
  77. package/typechain-types/factories/contracts/mocks/utils/mpc/ArithmeticTestsContract.sol/index.ts +5 -0
  78. package/typechain-types/factories/contracts/mocks/utils/mpc/ArithmeticTestsContract__factory.ts +92 -7
  79. package/typechain-types/factories/contracts/mocks/utils/mpc/BitwiseTestsContract__factory.ts +38 -2
  80. package/typechain-types/factories/contracts/mocks/utils/mpc/Comparison1Tests.Contract.sol/Comparison1TestsContract__factory.ts +1 -1
  81. package/typechain-types/factories/contracts/mocks/utils/mpc/Comparison1TestsContract__factory.ts +387 -0
  82. package/typechain-types/factories/contracts/mocks/utils/mpc/Comparison2TestsContract__factory.ts +38 -2
  83. package/typechain-types/factories/contracts/mocks/utils/mpc/MinMaxTestsContract__factory.ts +15 -2
  84. package/typechain-types/factories/contracts/mocks/utils/mpc/Miscellaneous1TestsContract__factory.ts +66 -1
  85. package/typechain-types/factories/contracts/mocks/utils/mpc/Miscellaneous2TestsContract__factory.ts +1 -1
  86. package/typechain-types/factories/contracts/mocks/utils/mpc/MiscellaneousTestsContract__factory.ts +424 -0
  87. package/typechain-types/factories/contracts/mocks/utils/mpc/OffboardToUserKeyTestContract__factory.ts +285 -0
  88. package/typechain-types/factories/contracts/mocks/utils/mpc/OffboardToUserKeyTestsContract.sol/OffboardToUserKeyTestContract__factory.ts +19 -3
  89. package/typechain-types/factories/contracts/mocks/utils/mpc/ShiftTestsContract__factory.ts +1 -1
  90. package/typechain-types/factories/contracts/mocks/utils/mpc/StringTestsContract__factory.ts +1 -1
  91. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferScalarTestsContract__factory.ts +4 -4
  92. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferTestsContract__factory.ts +4 -4
  93. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance64TestsContract.sol/TransferWithAllowance64TestsContract__factory.ts +294 -0
  94. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance64TestsContract.sol/TransferWithAllowanceTestsContract__factory.ts +292 -0
  95. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance64TestsContract.sol/index.ts +5 -0
  96. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance64TestsContract__factory.ts +720 -0
  97. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance64_16TestsContract__factory.ts +724 -0
  98. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance64_32TestsContract__factory.ts +724 -0
  99. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance64_64TestsContract.sol/TransferWithAllowance64_64TestsContract__factory.ts +724 -0
  100. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance64_64TestsContract.sol/TransferWithAllowance64_8TestsContract__factory.ts +724 -0
  101. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance64_64TestsContract.sol/index.ts +5 -0
  102. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance64_64TestsContract__factory.ts +724 -0
  103. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance64_8TestsContract__factory.ts +724 -0
  104. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowanceScalarTestsContract__factory.ts +507 -0
  105. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowanceTestsContract.sol/TransferTestsContract__factory.ts +150 -0
  106. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowanceTestsContract.sol/TransferWithAllowanceTestsContract__factory.ts +150 -0
  107. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowanceTestsContract.sol/index.ts +5 -0
  108. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowanceTestsContract__factory.ts +434 -0
  109. package/typechain-types/factories/contracts/mocks/utils/mpc/index.ts +9 -4
  110. package/typechain-types/factories/contracts/mocks/wallet/PrivateERC20Wallet/PrivateERC20WalletMock__factory.ts +1 -1
  111. package/typechain-types/factories/contracts/onboard/AccountOnboard__factory.ts +8 -2
  112. package/typechain-types/factories/contracts/token/PrivateERC721/IERC721Errors__factory.ts +128 -0
  113. package/typechain-types/factories/contracts/token/PrivateERC721/index.ts +1 -0
  114. package/typechain-types/factories/contracts/utils/mpc/MpcCore__factory.ts +77 -0
  115. package/typechain-types/factories/contracts/utils/mpc/MpcInterface.sol/ExtendedOperations__factory.ts +124 -61
  116. package/typechain-types/factories/contracts/utils/mpc/index.ts +1 -0
  117. package/typechain-types/hardhat.d.ts +152 -26
  118. package/typechain-types/index.ts +20 -8
  119. package/contracts/access/DataPrivacyFramework/README.md +0 -68
  120. package/contracts/mocks/utils/mpc/Miscellaneous2TestsContract.sol +0 -448
  121. package/contracts/mocks/utils/mpc/OffboardToUserKeyTestsContract.sol +0 -81
  122. package/contracts/mocks/utils/mpc/ShiftTestsContract.sol +0 -311
  123. package/contracts/token/PrivateERC20/README.md +0 -104
  124. package/contracts/token/PrivateERC721/README.md +0 -282
  125. package/contracts/utils/mpc/README.md +0 -82
@@ -0,0 +1,84 @@
1
+ /* Autogenerated file. Do not edit manually. */
2
+ /* tslint:disable */
3
+ /* eslint-disable */
4
+ import type {
5
+ BaseContract,
6
+ BytesLike,
7
+ FunctionFragment,
8
+ Result,
9
+ Interface,
10
+ ContractRunner,
11
+ ContractMethod,
12
+ Listener,
13
+ } from "ethers";
14
+ import type {
15
+ TypedContractEvent,
16
+ TypedDeferredTopicFilter,
17
+ TypedEventLog,
18
+ TypedListener,
19
+ TypedContractMethod,
20
+ } from "../../../common";
21
+
22
+ export interface MpcCoreInterface extends Interface {
23
+ getFunction(nameOrSignature: "RSA_SIZE"): FunctionFragment;
24
+
25
+ encodeFunctionData(functionFragment: "RSA_SIZE", values?: undefined): string;
26
+
27
+ decodeFunctionResult(functionFragment: "RSA_SIZE", data: BytesLike): Result;
28
+ }
29
+
30
+ export interface MpcCore extends BaseContract {
31
+ connect(runner?: ContractRunner | null): MpcCore;
32
+ waitForDeployment(): Promise<this>;
33
+
34
+ interface: MpcCoreInterface;
35
+
36
+ queryFilter<TCEvent extends TypedContractEvent>(
37
+ event: TCEvent,
38
+ fromBlockOrBlockhash?: string | number | undefined,
39
+ toBlock?: string | number | undefined
40
+ ): Promise<Array<TypedEventLog<TCEvent>>>;
41
+ queryFilter<TCEvent extends TypedContractEvent>(
42
+ filter: TypedDeferredTopicFilter<TCEvent>,
43
+ fromBlockOrBlockhash?: string | number | undefined,
44
+ toBlock?: string | number | undefined
45
+ ): Promise<Array<TypedEventLog<TCEvent>>>;
46
+
47
+ on<TCEvent extends TypedContractEvent>(
48
+ event: TCEvent,
49
+ listener: TypedListener<TCEvent>
50
+ ): Promise<this>;
51
+ on<TCEvent extends TypedContractEvent>(
52
+ filter: TypedDeferredTopicFilter<TCEvent>,
53
+ listener: TypedListener<TCEvent>
54
+ ): Promise<this>;
55
+
56
+ once<TCEvent extends TypedContractEvent>(
57
+ event: TCEvent,
58
+ listener: TypedListener<TCEvent>
59
+ ): Promise<this>;
60
+ once<TCEvent extends TypedContractEvent>(
61
+ filter: TypedDeferredTopicFilter<TCEvent>,
62
+ listener: TypedListener<TCEvent>
63
+ ): Promise<this>;
64
+
65
+ listeners<TCEvent extends TypedContractEvent>(
66
+ event: TCEvent
67
+ ): Promise<Array<TypedListener<TCEvent>>>;
68
+ listeners(eventName?: string): Promise<Array<Listener>>;
69
+ removeAllListeners<TCEvent extends TypedContractEvent>(
70
+ event?: TCEvent
71
+ ): Promise<this>;
72
+
73
+ RSA_SIZE: TypedContractMethod<[], [bigint], "view">;
74
+
75
+ getFunction<T extends ContractMethod = ContractMethod>(
76
+ key: string | FunctionFragment
77
+ ): T;
78
+
79
+ getFunction(
80
+ nameOrSignature: "RSA_SIZE"
81
+ ): TypedContractMethod<[], [bigint], "view">;
82
+
83
+ filters: {};
84
+ }
@@ -25,7 +25,11 @@ export interface ExtendedOperationsInterface extends Interface {
25
25
  nameOrSignature:
26
26
  | "Add"
27
27
  | "And"
28
+ | "CheckedAdd"
29
+ | "CheckedMul"
30
+ | "CheckedSub"
28
31
  | "Decrypt"
32
+ | "DeleteUserKey"
29
33
  | "Div"
30
34
  | "Eq"
31
35
  | "Ge"
@@ -47,8 +51,6 @@ export interface ExtendedOperationsInterface extends Interface {
47
51
  | "RandBoundedBits"
48
52
  | "Rem"
49
53
  | "SetPublic"
50
- | "Shl"
51
- | "Shr"
52
54
  | "Sub"
53
55
  | "Transfer"
54
56
  | "TransferWithAllowance"
@@ -64,10 +66,26 @@ export interface ExtendedOperationsInterface extends Interface {
64
66
  functionFragment: "And",
65
67
  values: [BytesLike, BigNumberish, BigNumberish]
66
68
  ): string;
69
+ encodeFunctionData(
70
+ functionFragment: "CheckedAdd",
71
+ values: [BytesLike, BigNumberish, BigNumberish]
72
+ ): string;
73
+ encodeFunctionData(
74
+ functionFragment: "CheckedMul",
75
+ values: [BytesLike, BigNumberish, BigNumberish]
76
+ ): string;
77
+ encodeFunctionData(
78
+ functionFragment: "CheckedSub",
79
+ values: [BytesLike, BigNumberish, BigNumberish]
80
+ ): string;
67
81
  encodeFunctionData(
68
82
  functionFragment: "Decrypt",
69
83
  values: [BytesLike, BigNumberish]
70
84
  ): string;
85
+ encodeFunctionData(
86
+ functionFragment: "DeleteUserKey",
87
+ values: [BytesLike]
88
+ ): string;
71
89
  encodeFunctionData(
72
90
  functionFragment: "Div",
73
91
  values: [BytesLike, BigNumberish, BigNumberish]
@@ -149,14 +167,6 @@ export interface ExtendedOperationsInterface extends Interface {
149
167
  functionFragment: "SetPublic",
150
168
  values: [BytesLike, BigNumberish]
151
169
  ): string;
152
- encodeFunctionData(
153
- functionFragment: "Shl",
154
- values: [BytesLike, BigNumberish, BigNumberish]
155
- ): string;
156
- encodeFunctionData(
157
- functionFragment: "Shr",
158
- values: [BytesLike, BigNumberish, BigNumberish]
159
- ): string;
160
170
  encodeFunctionData(
161
171
  functionFragment: "Sub",
162
172
  values: [BytesLike, BigNumberish, BigNumberish]
@@ -180,7 +190,14 @@ export interface ExtendedOperationsInterface extends Interface {
180
190
 
181
191
  decodeFunctionResult(functionFragment: "Add", data: BytesLike): Result;
182
192
  decodeFunctionResult(functionFragment: "And", data: BytesLike): Result;
193
+ decodeFunctionResult(functionFragment: "CheckedAdd", data: BytesLike): Result;
194
+ decodeFunctionResult(functionFragment: "CheckedMul", data: BytesLike): Result;
195
+ decodeFunctionResult(functionFragment: "CheckedSub", data: BytesLike): Result;
183
196
  decodeFunctionResult(functionFragment: "Decrypt", data: BytesLike): Result;
197
+ decodeFunctionResult(
198
+ functionFragment: "DeleteUserKey",
199
+ data: BytesLike
200
+ ): Result;
184
201
  decodeFunctionResult(functionFragment: "Div", data: BytesLike): Result;
185
202
  decodeFunctionResult(functionFragment: "Eq", data: BytesLike): Result;
186
203
  decodeFunctionResult(functionFragment: "Ge", data: BytesLike): Result;
@@ -208,8 +225,6 @@ export interface ExtendedOperationsInterface extends Interface {
208
225
  ): Result;
209
226
  decodeFunctionResult(functionFragment: "Rem", data: BytesLike): Result;
210
227
  decodeFunctionResult(functionFragment: "SetPublic", data: BytesLike): Result;
211
- decodeFunctionResult(functionFragment: "Shl", data: BytesLike): Result;
212
- decodeFunctionResult(functionFragment: "Shr", data: BytesLike): Result;
213
228
  decodeFunctionResult(functionFragment: "Sub", data: BytesLike): Result;
214
229
  decodeFunctionResult(functionFragment: "Transfer", data: BytesLike): Result;
215
230
  decodeFunctionResult(
@@ -278,12 +293,36 @@ export interface ExtendedOperations extends BaseContract {
278
293
  "nonpayable"
279
294
  >;
280
295
 
296
+ CheckedAdd: TypedContractMethod<
297
+ [metaData: BytesLike, lhs: BigNumberish, rhs: BigNumberish],
298
+ [[bigint, bigint] & { overflowBit: bigint; result: bigint }],
299
+ "nonpayable"
300
+ >;
301
+
302
+ CheckedMul: TypedContractMethod<
303
+ [metaData: BytesLike, lhs: BigNumberish, rhs: BigNumberish],
304
+ [[bigint, bigint] & { overflowBit: bigint; result: bigint }],
305
+ "nonpayable"
306
+ >;
307
+
308
+ CheckedSub: TypedContractMethod<
309
+ [metaData: BytesLike, lhs: BigNumberish, rhs: BigNumberish],
310
+ [[bigint, bigint] & { overflowBit: bigint; result: bigint }],
311
+ "nonpayable"
312
+ >;
313
+
281
314
  Decrypt: TypedContractMethod<
282
315
  [metaData: BytesLike, a: BigNumberish],
283
316
  [bigint],
284
317
  "nonpayable"
285
318
  >;
286
319
 
320
+ DeleteUserKey: TypedContractMethod<
321
+ [signature: BytesLike],
322
+ [boolean],
323
+ "nonpayable"
324
+ >;
325
+
287
326
  Div: TypedContractMethod<
288
327
  [metaData: BytesLike, lhs: BigNumberish, rhs: BigNumberish],
289
328
  [bigint],
@@ -302,7 +341,11 @@ export interface ExtendedOperations extends BaseContract {
302
341
  "nonpayable"
303
342
  >;
304
343
 
305
- GetUserKey: TypedContractMethod<[signedEK: BytesLike], [string], "view">;
344
+ GetUserKey: TypedContractMethod<
345
+ [signedEK: BytesLike],
346
+ [string],
347
+ "nonpayable"
348
+ >;
306
349
 
307
350
  Gt: TypedContractMethod<
308
351
  [metaData: BytesLike, lhs: BigNumberish, rhs: BigNumberish],
@@ -402,18 +445,6 @@ export interface ExtendedOperations extends BaseContract {
402
445
  "nonpayable"
403
446
  >;
404
447
 
405
- Shl: TypedContractMethod<
406
- [metaData: BytesLike, lhs: BigNumberish, rhs: BigNumberish],
407
- [bigint],
408
- "nonpayable"
409
- >;
410
-
411
- Shr: TypedContractMethod<
412
- [metaData: BytesLike, lhs: BigNumberish, rhs: BigNumberish],
413
- [bigint],
414
- "nonpayable"
415
- >;
416
-
417
448
  Sub: TypedContractMethod<
418
449
  [metaData: BytesLike, lhs: BigNumberish, rhs: BigNumberish],
419
450
  [bigint],
@@ -480,6 +511,27 @@ export interface ExtendedOperations extends BaseContract {
480
511
  [bigint],
481
512
  "nonpayable"
482
513
  >;
514
+ getFunction(
515
+ nameOrSignature: "CheckedAdd"
516
+ ): TypedContractMethod<
517
+ [metaData: BytesLike, lhs: BigNumberish, rhs: BigNumberish],
518
+ [[bigint, bigint] & { overflowBit: bigint; result: bigint }],
519
+ "nonpayable"
520
+ >;
521
+ getFunction(
522
+ nameOrSignature: "CheckedMul"
523
+ ): TypedContractMethod<
524
+ [metaData: BytesLike, lhs: BigNumberish, rhs: BigNumberish],
525
+ [[bigint, bigint] & { overflowBit: bigint; result: bigint }],
526
+ "nonpayable"
527
+ >;
528
+ getFunction(
529
+ nameOrSignature: "CheckedSub"
530
+ ): TypedContractMethod<
531
+ [metaData: BytesLike, lhs: BigNumberish, rhs: BigNumberish],
532
+ [[bigint, bigint] & { overflowBit: bigint; result: bigint }],
533
+ "nonpayable"
534
+ >;
483
535
  getFunction(
484
536
  nameOrSignature: "Decrypt"
485
537
  ): TypedContractMethod<
@@ -487,6 +539,9 @@ export interface ExtendedOperations extends BaseContract {
487
539
  [bigint],
488
540
  "nonpayable"
489
541
  >;
542
+ getFunction(
543
+ nameOrSignature: "DeleteUserKey"
544
+ ): TypedContractMethod<[signature: BytesLike], [boolean], "nonpayable">;
490
545
  getFunction(
491
546
  nameOrSignature: "Div"
492
547
  ): TypedContractMethod<
@@ -510,7 +565,7 @@ export interface ExtendedOperations extends BaseContract {
510
565
  >;
511
566
  getFunction(
512
567
  nameOrSignature: "GetUserKey"
513
- ): TypedContractMethod<[signedEK: BytesLike], [string], "view">;
568
+ ): TypedContractMethod<[signedEK: BytesLike], [string], "nonpayable">;
514
569
  getFunction(
515
570
  nameOrSignature: "Gt"
516
571
  ): TypedContractMethod<
@@ -626,20 +681,6 @@ export interface ExtendedOperations extends BaseContract {
626
681
  [bigint],
627
682
  "nonpayable"
628
683
  >;
629
- getFunction(
630
- nameOrSignature: "Shl"
631
- ): TypedContractMethod<
632
- [metaData: BytesLike, lhs: BigNumberish, rhs: BigNumberish],
633
- [bigint],
634
- "nonpayable"
635
- >;
636
- getFunction(
637
- nameOrSignature: "Shr"
638
- ): TypedContractMethod<
639
- [metaData: BytesLike, lhs: BigNumberish, rhs: BigNumberish],
640
- [bigint],
641
- "nonpayable"
642
- >;
643
684
  getFunction(
644
685
  nameOrSignature: "Sub"
645
686
  ): TypedContractMethod<
@@ -3,3 +3,4 @@
3
3
  /* eslint-disable */
4
4
  import type * as mpcInterfaceSol from "./MpcInterface.sol";
5
5
  export type { mpcInterfaceSol };
6
+ export type { MpcCore } from "./MpcCore";
@@ -615,7 +615,7 @@ const _abi = [
615
615
  ] as const;
616
616
 
617
617
  const _bytecode =
618
- "0x608060405260016005553480156200001657600080fd5b506001806200003667fc9135fc006556cf60c01b620003b960201b60201c565b6200005267e84f4d2e14f4126a60c01b620003b960201b60201c565b816000806101000a81548160ff021916908315150217905550620000876793c1b7e17fb1d67460c01b620003b960201b60201c565b80600060016101000a81548160ff021916908315150217905550620000bd67e893cb10cb14c2e060c01b620003b960201b60201c565b600180604051620000ce9062000d59565b908152602001604051809103902060006101000a81548160ff0219169083151502179055506200010f67e116591c6b1349a860c01b620003b960201b60201c565b6200012b67da8f8c438e11abc160c01b620003b960201b60201c565b620001fe6040518061014001604052803373ffffffffffffffffffffffffffffffffffffffff1681526020016040518060400160405280600581526020017f61646d696e0000000000000000000000000000000000000000000000000000008152508152602001600115158152602001600081526020016000815260200160001515815260200160001515815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160405180602001604052806000815250815250620003bc60201b60201c565b506200021b67b37738395428e5dc60c01b620003b960201b60201c565b6001806040518060400160405280600181526020017f2a0000000000000000000000000000000000000000000000000000000000000081525060405162000263919062000dde565b908152602001604051809103902060006101000a81548160ff021916908315150217905550620002a467cccad69878c4144960c01b620003b960201b60201c565b620002c06758e5ecd26455bdcf60c01b620003b960201b60201c565b62000394604051806101400160405280600173ffffffffffffffffffffffffffffffffffffffff1681526020016040518060400160405280600181526020017f2a000000000000000000000000000000000000000000000000000000000000008152508152602001600115158152602001600081526020016000815260200160001515815260200160001515815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160405180602001604052806000815250815250620003bc60201b60201c565b505050620003b36799cfec24eb7a4f4b60c01b62000cfb60201b60201c565b620011f7565b50565b6000620003da671ad3261cf3f484d060c01b620003b960201b60201c565b620003f6673ebe9881a5684e7560c01b620003b960201b60201c565b6200041267ff4c8dd9b4603bdd60c01b620003b960201b60201c565b600060046000846000015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002083602001516040516200046b919062000dde565b90815260200160405180910390205403620007fa576200049c673cf4f2896221a39a60c01b620003b960201b60201c565b620004b86749c6ba72bf8d0e5a60c01b620003b960201b60201c565b60055460046000846000015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020836020015160405162000512919062000dde565b90815260200160405180910390208190555062000540672361a2b9f82da51a60c01b620003b960201b60201c565b6040518061016001604052806005548152602001836000015173ffffffffffffffffffffffffffffffffffffffff168152602001836020015181526020018360400151151581526020018360a00151151581526020018360c001511515815260200183606001518152602001836080015181526020018360e00151815260200183610100015173ffffffffffffffffffffffffffffffffffffffff1681526020018361012001518152506006600060055481526020019081526020016000206000820151816000015560208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550604082015181600201908162000667919062001066565b5060608201518160030160006101000a81548160ff02191690831515021790555060808201518160030160016101000a81548160ff02191690831515021790555060a08201518160030160026101000a81548160ff02191690831515021790555060c0820151816004015560e0820151816005015561010082015181600601556101208201518160070160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061014082015181600801908162000747919062001066565b5090505062000767672a85196bbf3e424860c01b620003b960201b60201c565b60056000815462000778906200117c565b919050819055506200079b67f2e270b02097630160c01b620003b960201b60201c565b60036000836000015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154620007ed906200117c565b9190508190555062000cba565b62000816672a8d78ebd462da7b60c01b620003b960201b60201c565b62000832675defb162447becbe60c01b620003b960201b60201c565b6200084e67f24467ed722353ea60c01b620003b960201b60201c565b60006006600060046000866000015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208560200151604051620008ab919062000dde565b90815260200160405180910390205481526020019081526020016000209050620008e6678f1322a127e0837b60c01b620003b960201b60201c565b6200090267fbd458463f96175460c01b620003b960201b60201c565b826040015180156200092357508060030160009054906101000a900460ff16155b15620009c0576200094567f8e43b8c9925486860c01b620003b960201b60201c565b6200096167c0b725995781021d60c01b620003b960201b60201c565b60036000846000015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154620009b3906200117c565b91905081905550620009dd565b620009dc677f1f92ba8d2740ed60c01b620003b960201b60201c565b5b620009f967eb0678d57012906060c01b620003b960201b60201c565b62000a1567b5d31de538d94faf60c01b620003b960201b60201c565b826040015115801562000a3657508060030160009054906101000a900460ff165b1562000ad35762000a5867de85481c93d84f6960c01b620003b960201b60201c565b62000a74672d293a57d3c09d8260c01b620003b960201b60201c565b60036000846000015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815462000ac690620011c9565b9190508190555062000af0565b62000aef67bbc6c101c6701aaa60c01b620003b960201b60201c565b5b62000b0c67f0a1dc6f1f4af7aa60c01b620003b960201b60201c565b82604001518160030160006101000a81548160ff02191690831515021790555062000b486764f8b6c583bf3a2c60c01b620003b960201b60201c565b8260600151816004018190555062000b716768ab02d44d558cdf60c01b620003b960201b60201c565b8260800151816005018190555062000b9a67cbbbd6918494425260c01b620003b960201b60201c565b8260a001518160030160016101000a81548160ff02191690831515021790555062000bd667bf0abc0ec9c63c9f60c01b620003b960201b60201c565b8260c001518160030160026101000a81548160ff02191690831515021790555062000c126730a0121a62e84b1b60c01b620003b960201b60201c565b8260e00151816006018190555062000c3b6781e3ef5c7a2e17cc60c01b620003b960201b60201c565b8261010001518160070160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000c9f673649676ee0f52b3060c01b620003b960201b60201c565b82610120015181600801908162000cb7919062001066565b50505b62000cd667dda4f461b2efd31060c01b620003b960201b60201c565b62000cf2675a79615fb8224e6e60c01b620003b960201b60201c565b60019050919050565b50565b600081905092915050565b7f61646d696e000000000000000000000000000000000000000000000000000000600082015250565b600062000d4160058362000cfe565b915062000d4e8262000d09565b600582019050919050565b600062000d668262000d32565b9150819050919050565b600081519050919050565b60005b8381101562000d9b57808201518184015260208101905062000d7e565b60008484015250505050565b600062000db48262000d70565b62000dc0818562000cfe565b935062000dd281856020860162000d7b565b80840191505092915050565b600062000dec828462000da7565b915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000e6e57607f821691505b60208210810362000e845762000e8362000e26565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000eee7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000eaf565b62000efa868362000eaf565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000f4762000f4162000f3b8462000f12565b62000f1c565b62000f12565b9050919050565b6000819050919050565b62000f638362000f26565b62000f7b62000f728262000f4e565b84845462000ebc565b825550505050565b600090565b62000f9262000f83565b62000f9f81848462000f58565b505050565b5b8181101562000fc75762000fbb60008262000f88565b60018101905062000fa5565b5050565b601f821115620010165762000fe08162000e8a565b62000feb8462000e9f565b8101602085101562000ffb578190505b620010136200100a8562000e9f565b83018262000fa4565b50505b505050565b600082821c905092915050565b60006200103b600019846008026200101b565b1980831691505092915050565b600062001056838362001028565b9150826002028217905092915050565b620010718262000d70565b67ffffffffffffffff8111156200108d576200108c62000df7565b5b62001099825462000e55565b620010a682828562000fcb565b600060209050601f831160018114620010de5760008415620010c9578287015190505b620010d5858262001048565b86555062001145565b601f198416620010ee8662000e8a565b60005b828110156200111857848901518255600182019150602085019450602081019050620010f1565b8683101562001138578489015162001134601f89168262001028565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620011898262000f12565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203620011be57620011bd6200114d565b5b600182019050919050565b6000620011d68262000f12565b915060008203620011ec57620011eb6200114d565b5b600182039050919050565b614d6180620012076000396000f3fe608060405234801561001057600080fd5b50600436106101425760003560e01c8063a7804d65116100b8578063f28b9f341161007c578063f28b9f341461041b578063f558936414610439578063f9529ee214610469578063fa1b3cac14610499578063fac66f01146104b7578063fb83bb73146104e757610142565b8063a7804d651461033d578063ade0bee41461036d578063c6064b281461039d578063c8d757fd146103cd578063efdcec9c146103fd57610142565b8063661957011161010a5780636619570114610241578063699d7c331461025f57806382dab96e1461028f5780639359c287146102bf578063a5fcf162146102ef578063a74d34391461030d57610142565b806326c500071461014757806334906a4a14610181578063372db089146101b1578063476a95ad146101e157806365c5815214610211575b600080fd5b610161600480360381019061015c9190613985565b610517565b6040516101789b9a99989796959493929190613aad565b60405180910390f35b61019b60048036038101906101969190613c9b565b6106e8565b6040516101a89190613ce4565b60405180910390f35b6101cb60048036038101906101c69190613d8b565b61071e565b6040516101d89190613ce4565b60405180910390f35b6101fb60048036038101906101f69190613e2b565b610786565b6040516102089190613ce4565b60405180910390f35b61022b60048036038101906102269190613c9b565b61089d565b6040516102389190613ce4565b60405180910390f35b6102496109eb565b6040516102569190613e58565b60405180910390f35b61027960048036038101906102749190613e73565b610a3d565b6040516102869190613ce4565b60405180910390f35b6102a960048036038101906102a4919061400b565b610aa4565b6040516102b69190613ce4565b60405180910390f35b6102d960048036038101906102d49190613c9b565b6112cf565b6040516102e69190613ce4565b60405180910390f35b6102f761141c565b6040516103049190613ce4565b60405180910390f35b61032760048036038101906103229190614054565b61142d565b6040516103349190613ce4565b60405180910390f35b610357600480360381019061035291906140e9565b6114cb565b6040516103649190613e58565b60405180910390f35b61038760048036038101906103829190613e2b565b6114e3565b6040516103949190613ce4565b60405180910390f35b6103b760048036038101906103b29190614116565b6115fd565b6040516103c49190613ce4565b60405180910390f35b6103e760048036038101906103e2919061418a565b611665565b6040516103f49190613e58565b60405180910390f35b6104056116a0565b60405161041291906141e6565b60405180910390f35b6104236116d9565b6040516104309190613ce4565b60405180910390f35b610453600480360381019061044e9190613c9b565b6116ec565b6040516104609190613ce4565b60405180910390f35b610483600480360381019061047e9190614208565b611722565b6040516104909190613ce4565b60405180910390f35b6104a1611874565b6040516104ae9190614255565b60405180910390f35b6104d160048036038101906104cc9190614270565b611879565b6040516104de91906144df565b60405180910390f35b61050160048036038101906104fc9190614208565b611ec2565b60405161050e9190613ce4565b60405180910390f35b60066020528060005260406000206000915090508060000154908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169080600201805461056690614530565b80601f016020809104026020016040519081016040528092919081815260200182805461059290614530565b80156105df5780601f106105b4576101008083540402835291602001916105df565b820191906000526020600020905b8154815290600101906020018083116105c257829003601f168201915b5050505050908060030160009054906101000a900460ff16908060030160019054906101000a900460ff16908060030160029054906101000a900460ff16908060040154908060050154908060060154908060070160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169080600801805461066590614530565b80601f016020809104026020016040519081016040528092919081815260200182805461069190614530565b80156106de5780601f106106b3576101008083540402835291602001916106de565b820191906000526020600020905b8154815290600101906020018083116106c157829003601f168201915b505050505090508b565b6001818051602081018201805184825260208301602085012081835280955050505050506000915054906101000a900460ff1681565b6000610734676f0676d75719709b60c01b612013565b61074867387ad340bf4f15ab60c01b612013565b61075c67660e834b9ffd221560c01b612013565b61077c858585600186600060405180602001604052806000815250612016565b9050949350505050565b600061079c67dde7d0165699a0ec60c01b612013565b6107b067a28ce0bda80e860360c01b612013565b6107c467c77a3735f1bbcc2760c01b612013565b6107d8679231e40573fc61d960c01b612013565b81151560008054906101000a900460ff1615150361082b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610822906145ad565b60405180910390fd5b61083f67e5a9d09fb7b21b1960c01b612013565b61085367e2aca82bd66e6ade60c01b612013565b816000806101000a81548160ff0219169083151502179055506108806766d8699136cf6a2360c01b612013565b6108946759cb355ee9591ed460c01b612013565b60019050919050565b60006108b3679d5b9cafcbd1c7fc60c01b612013565b6108c767bb2abde4efb78d9760c01b612013565b6108db67df6906e4cbb6a7d560c01b612013565b6108ef67ca8c714c7f50980560c01b612013565b6002826040516108ff9190614609565b908152602001604051809103902060009054906101000a900460ff161561095b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095290614692565b60405180910390fd5b61096f6774436442374463d060c01b612013565b6109836732b91dc3cdf1e56060c01b612013565b60016002836040516109959190614609565b908152602001604051809103902060006101000a81548160ff0219169083151502179055506109ce678622ace8a8f51e5260c01b612013565b6109e26713466ac46bc6137e60c01b612013565b60019050919050565b6000610a01673c3830f74a112f9660c01b612013565b610a156781d68b22744b1d4660c01b612013565b610a29675ce099e8cf90529a60c01b612013565b6001600554610a3891906146e1565b905090565b6000610a53674f3e42766e700a7260c01b612013565b610a676719997f1d4d31d36060c01b612013565b610a7b6731f6ceee22b78a6c60c01b612013565b610a9b848484600080600060405180602001604052806000815250612016565b90509392505050565b6000610aba671ad3261cf3f484d060c01b612013565b610ace673ebe9881a5684e7560c01b612013565b610ae267ff4c8dd9b4603bdd60c01b612013565b600060046000846000015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208360200151604051610b399190614609565b90815260200160405180910390205403610e9457610b61673cf4f2896221a39a60c01b612013565b610b756749c6ba72bf8d0e5a60c01b612013565b60055460046000846000015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208360200151604051610bcd9190614609565b908152602001604051809103902081905550610bf3672361a2b9f82da51a60c01b612013565b6040518061016001604052806005548152602001836000015173ffffffffffffffffffffffffffffffffffffffff168152602001836020015181526020018360400151151581526020018360a00151151581526020018360c001511515815260200183606001518152602001836080015181526020018360e00151815260200183610100015173ffffffffffffffffffffffffffffffffffffffff1681526020018361012001518152506006600060055481526020019081526020016000206000820151816000015560208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040820151816002019081610d1891906148c1565b5060608201518160030160006101000a81548160ff02191690831515021790555060808201518160030160016101000a81548160ff02191690831515021790555060a08201518160030160026101000a81548160ff02191690831515021790555060c0820151816004015560e0820151816005015561010082015181600601556101208201518160070160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610140820151816008019081610df691906148c1565b50905050610e0e672a85196bbf3e424860c01b612013565b600560008154610e1d90614993565b91905081905550610e3867f2e270b02097630160c01b612013565b60036000836000015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154610e8890614993565b9190508190555061129e565b610ea8672a8d78ebd462da7b60c01b612013565b610ebc675defb162447becbe60c01b612013565b610ed067f24467ed722353ea60c01b612013565b60006006600060046000866000015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208560200151604051610f2b9190614609565b90815260200160405180910390205481526020019081526020016000209050610f5e678f1322a127e0837b60c01b612013565b610f7267fbd458463f96175460c01b612013565b82604001518015610f9257508060030160009054906101000a900460ff16155b1561101b57610fab67f8e43b8c9925486860c01b612013565b610fbf67c0b725995781021d60c01b612013565b60036000846000015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815461100f90614993565b91905081905550611030565b61102f677f1f92ba8d2740ed60c01b612013565b5b61104467eb0678d57012906060c01b612013565b61105867b5d31de538d94faf60c01b612013565b826040015115801561107857508060030160009054906101000a900460ff165b156111015761109167de85481c93d84f6960c01b612013565b6110a5672d293a57d3c09d8260c01b612013565b60036000846000015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546110f5906149db565b91905081905550611116565b61111567bbc6c101c6701aaa60c01b612013565b5b61112a67f0a1dc6f1f4af7aa60c01b612013565b82604001518160030160006101000a81548160ff02191690831515021790555061115e6764f8b6c583bf3a2c60c01b612013565b8260600151816004018190555061117f6768ab02d44d558cdf60c01b612013565b826080015181600501819055506111a067cbbbd6918494425260c01b612013565b8260a001518160030160016101000a81548160ff0219169083151502179055506111d467bf0abc0ec9c63c9f60c01b612013565b8260c001518160030160026101000a81548160ff0219169083151502179055506112086730a0121a62e84b1b60c01b612013565b8260e0015181600601819055506112296781e3ef5c7a2e17cc60c01b612013565b8261010001518160070160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611285673649676ee0f52b3060c01b612013565b82610120015181600801908161129b91906148c1565b50505b6112b267dda4f461b2efd31060c01b612013565b6112c6675a79615fb8224e6e60c01b612013565b60019050919050565b60006112e567fdc7b20a2a6275c460c01b612013565b6112f967c8e440f26e855c1e60c01b612013565b61130d67c7b3165d226d2cf760c01b612013565b611321670d3618aab3ff572860c01b612013565b6001826040516113319190614609565b908152602001604051809103902060009054906101000a900460ff161561138d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138490614a50565b60405180910390fd5b6113a1674c36a1f8724dc15a60c01b612013565b6113b56782914f558011a44360c01b612013565b600180836040516113c69190614609565b908152602001604051809103902060006101000a81548160ff0219169083151502179055506113ff672180b2e681d918e660c01b612013565b61141367fb349e777807b19160c01b612013565b60019050919050565b60008054906101000a900460ff1681565b600061144367151f7706ff912c9f60c01b612013565b611457676c4b537fdeb93df560c01b612013565b61146b679826fa73f672d16360c01b612013565b6114c0868686600360008089898080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050612016565b905095945050505050565b60036020528060005260406000206000915090505481565b60006114f967b5b63f9ea67246ec60c01b612013565b61150d6713f0fcc340383bf460c01b612013565b61152167923f58c897a4f4f860c01b612013565b61153567b9a11296db875f8760c01b612013565b811515600060019054906101000a900460ff1615150361158a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611581906145ad565b60405180910390fd5b61159e677d17335d55af052c60c01b612013565b6115b267180c893074b3d27a60c01b612013565b81600060016101000a81548160ff0219169083151502179055506115e067750bf28010d4e42160c01b612013565b6115f467016379e498dc9ece60c01b612013565b60019050919050565b600061161367eb1a0403cb54ce5e60c01b612013565b611627670fdc961c6f3cd73e60c01b612013565b61163b67bc3aec633524827f60c01b612013565b61165b858585600260008760405180602001604052806000815250612016565b9050949350505050565b600460205281600052604060002081805160208101820180518482526020830160208501208183528095505050505050600091509150505481565b6040518060400160405280600181526020017f2a0000000000000000000000000000000000000000000000000000000000000081525081565b600060019054906101000a900460ff1681565b6002818051602081018201805184825260208301602085012081835280955050505050506000915054906101000a900460ff1681565b60006117386735ed968560641d5760c01b612013565b61174c676e5861509169e0ae60c01b612013565b6117606747065bb387f61af560c01b612013565b6117746731410c03b0a4dd2c60c01b612013565b60018383604051611786929190614a95565b908152602001604051809103902060009054906101000a900460ff166117e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d890614afa565b60405180910390fd5b6117f5672a43a4d37980e6d260c01b612013565b61180967d20c049ab571fa6a60c01b612013565b60006001848460405161181d929190614a95565b908152602001604051809103902060006101000a81548160ff02191690831515021790555061185667246bc070308a394f60c01b612013565b61186a6794a6f9ceec90030360c01b612013565b6001905092915050565b600181565b606061188f67728dda4ce09aa9b960c01b612013565b6118a36733ac6aecfe78f02c60c01b612013565b6118b7679962d0389b8253e760c01b612013565b6118cb67ba1f4ad8a225f01d60c01b612013565b6000831161190e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190590614b66565b60405180910390fd5b61192267fe5087653620d89660c01b612013565b61193667cfa5f16459ae453a60c01b612013565b61194a676804ca5d753c2d0860c01b612013565b61195e675b9db541a75aaff960c01b612013565b600082116119a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199890614bd2565b60405180910390fd5b6119b56731067f7f637dcdf560c01b612013565b6119c967ff19018989544e7a60c01b612013565b6119dd67834dc5efafab5fbf60c01b612013565b6005548310611a6a576119fa67d087dd9cb311b5ec60c01b612013565b611a0e67c5f6992e3ecd565360c01b612013565b600067ffffffffffffffff811115611a2957611a28613b70565b5b604051908082528060200260200182016040528015611a6257816020015b611a4f6138af565b815260200190600190039081611a475790505b509050611ebc565b611a7e6761eb1f1b3cf6814f60c01b612013565b611a9267afd3aa2544f0c66060c01b612013565b611aa667333a6cc1281fd79f60c01b612013565b60006001600554611ab791906146e1565b60018486611ac59190614bf2565b611acf91906146e1565b111580611aec5750611aeb67bab9638f50b094ae60c01b61331a565b5b8015611b085750611b07673dfc6964de9053af60c01b613321565b5b611b1f5783600554611b1a91906146e1565b611b21565b825b9050611b3767a4c047fd7510565f60c01b612013565b611b4b67ec07e07d21c8496260c01b612013565b60008167ffffffffffffffff811115611b6757611b66613b70565b5b604051908082528060200260200182016040528015611ba057816020015b611b8d6138af565b815260200190600190039081611b855790505b509050611bb767b776f96f629068fa60c01b612013565b611bcb67d8e248b145720a6260c01b612013565b60005b82811015611e8e57611bea67c2f923a42f00279360c01b612013565b600660008288611bfa9190614bf2565b815260200190815260200160002060405180610160016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600282018054611c8490614530565b80601f0160208091040260200160405190810160405280929190818152602001828054611cb090614530565b8015611cfd5780601f10611cd257610100808354040283529160200191611cfd565b820191906000526020600020905b815481529060010190602001808311611ce057829003601f168201915b505050505081526020016003820160009054906101000a900460ff161515151581526020016003820160019054906101000a900460ff161515151581526020016003820160029054906101000a900460ff161515151581526020016004820154815260200160058201548152602001600682015481526020016007820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600882018054611ddb90614530565b80601f0160208091040260200160405190810160405280929190818152602001828054611e0790614530565b8015611e545780601f10611e2957610100808354040283529160200191611e54565b820191906000526020600020905b815481529060010190602001808311611e3757829003601f168201915b505050505081525050828281518110611e7057611e6f614c26565b5b60200260200101819052508080611e8690614993565b915050611bce565b50611ea266645c4a1d6b9a9d60c01b612013565b611eb667b22cb492e98a03af60c01b612013565b80925050505b92915050565b6000611ed8674184f32ec50ee90b60c01b612013565b611eeb66389b205a3c51f760c01b612013565b611eff67fd99ede3011f804760c01b612013565b611f1367be3755f4be031b7660c01b612013565b60028383604051611f25929190614a95565b908152602001604051809103902060009054906101000a900460ff16611f80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7790614ca1565b60405180910390fd5b611f946762cb7cfb48f742f660c01b612013565b611fa8676dabf4ca315b0e5560c01b612013565b600060028484604051611fbc929190614a95565b908152602001604051809103902060006101000a81548160ff021916908315150217905550611ff567f2708ef2a2c724a660c01b612013565b612009677fd16cd58791706660c01b612013565b6001905092915050565b50565b600061202c67ccd1fdad77811f0c60c01b612013565b61204067e447c9bec58df02860c01b612013565b612054670ca08ed82c6d37ae60c01b612013565b60028787604051612066929190614a95565b908152602001604051809103902060009054906101000a900460ff16156120b85761209b676d9c05eea2608cbb60c01b612013565b6120af679d23e0d7fe42722760c01b612013565b6000905061330f565b6120cc67ad5eebe62aeaab2d60c01b612013565b6120e0679d924797b633357960c01b612013565b6120f467d268959fc628fd3860c01b612013565b60016040518060400160405280600181526020017f2a000000000000000000000000000000000000000000000000000000000000008152506040516121399190614609565b908152602001604051809103902060009054906101000a900460ff1615801561218d57506001878760405161216f929190614a95565b908152602001604051809103902060009054906101000a900460ff16155b156121c3576121a6679232f96c90ccccab60c01b612013565b6121ba6718b213616c31a05c60c01b612013565b6000905061330f565b6121d767bdb87b4fc1298cfa60c01b612013565b6121eb67359b68cef449dec660c01b612013565b6121ff67cbde617b237bb12060c01b612013565b60066000600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208989604051612252929190614a95565b908152602001604051809103902054815260200190815260200160002060030160009054906101000a900460ff16156125995761229967e052dae64575aadf60c01b612013565b6122ad6708ecc7da60ebceff60c01b612013565b6122c1675e86518f233691fe60c01b612013565b61259260066000600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208a8a604051612317929190614a95565b908152602001604051809103902054815260200190815260200160002060405180610160016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016002820180546123b090614530565b80601f01602080910402602001604051908101604052809291908181526020018280546123dc90614530565b80156124295780601f106123fe57610100808354040283529160200191612429565b820191906000526020600020905b81548152906001019060200180831161240c57829003601f168201915b505050505081526020016003820160009054906101000a900460ff161515151581526020016003820160019054906101000a900460ff161515151581526020016003820160029054906101000a900460ff161515151581526020016004820154815260200160058201548152602001600682015481526020016007820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160088201805461250790614530565b80601f016020809104026020016040519081016040528092919081815260200182805461253390614530565b80156125805780601f1061255557610100808354040283529160200191612580565b820191906000526020600020905b81548152906001019060200180831161256357829003601f168201915b5050505050815250508686868661332c565b905061330f565b6125ad67bd63b480229476c460c01b612013565b6125c167f40cd69e32934a7660c01b612013565b6125d5676f4257448761faa760c01b612013565b60066000600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405280600181526020017f2a0000000000000000000000000000000000000000000000000000000000000081525060405161265b9190614609565b908152602001604051809103902054815260200190815260200160002060030160009054906101000a900460ff16156129d5576126a267bf360113ce4d471760c01b612013565b6126b667a9a0490dfae3f25960c01b612013565b6126ca67b8a70792af9cce9f60c01b612013565b6129ce60066000600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405280600181526020017f2a000000000000000000000000000000000000000000000000000000000000008152506040516127539190614609565b908152602001604051809103902054815260200190815260200160002060405180610160016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016002820180546127ec90614530565b80601f016020809104026020016040519081016040528092919081815260200182805461281890614530565b80156128655780601f1061283a57610100808354040283529160200191612865565b820191906000526020600020905b81548152906001019060200180831161284857829003601f168201915b505050505081526020016003820160009054906101000a900460ff161515151581526020016003820160019054906101000a900460ff161515151581526020016003820160029054906101000a900460ff161515151581526020016004820154815260200160058201548152602001600682015481526020016007820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160088201805461294390614530565b80601f016020809104026020016040519081016040528092919081815260200182805461296f90614530565b80156129bc5780601f10612991576101008083540402835291602001916129bc565b820191906000526020600020905b81548152906001019060200180831161299f57829003601f168201915b5050505050815250508686868661332c565b905061330f565b6129e967dc48553233606cbb60c01b612013565b6129fd677dab8698e52a4b3260c01b612013565b612a11670924859688dd404560c01b612013565b6000600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115612aac57612a6d674447780f6dd77b6760c01b612013565b612a8167ac587d67ec08f57660c01b612013565b612a956711f14cadef1b5cf560c01b612013565b600060019054906101000a900460ff16905061330f565b612ac0679f7acd888881b97d60c01b612013565b612ad4678ccb89341815f68160c01b612013565b612ae8674acce9791a2cade860c01b612013565b6006600060046000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208989604051612b3c929190614a95565b908152602001604051809103902054815260200190815260200160002060030160009054906101000a900460ff1615612e8457612b8367e84e3b4eb587698c60c01b612013565b612b97676dac846bae2f33eb60c01b612013565b612bab67f5595b744e12d22160c01b612013565b612e7d6006600060046000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208a8a604051612c02929190614a95565b908152602001604051809103902054815260200190815260200160002060405180610160016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600282018054612c9b90614530565b80601f0160208091040260200160405190810160405280929190818152602001828054612cc790614530565b8015612d145780601f10612ce957610100808354040283529160200191612d14565b820191906000526020600020905b815481529060010190602001808311612cf757829003601f168201915b505050505081526020016003820160009054906101000a900460ff161515151581526020016003820160019054906101000a900460ff161515151581526020016003820160029054906101000a900460ff161515151581526020016004820154815260200160058201548152602001600682015481526020016007820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600882018054612df290614530565b80601f0160208091040260200160405190810160405280929190818152602001828054612e1e90614530565b8015612e6b5780601f10612e4057610100808354040283529160200191612e6b565b820191906000526020600020905b815481529060010190602001808311612e4e57829003601f168201915b5050505050815250508686868661332c565b905061330f565b612e986763bf2991c34c771360c01b612013565b612eac6740e7d43c1a6d54e060c01b612013565b612ec067ab9a3537808d6b5e60c01b612013565b6006600060046000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405280600181526020017f2a00000000000000000000000000000000000000000000000000000000000000815250604051612f479190614609565b908152602001604051809103902054815260200190815260200160002060030160009054906101000a900460ff16156132c257612f8e676f0f596fa7f0510160c01b612013565b612fa2675537a48566b7b39160c01b612013565b612fb667d95d850db071176b60c01b612013565b6132bb6006600060046000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405280600181526020017f2a000000000000000000000000000000000000000000000000000000000000008152506040516130409190614609565b908152602001604051809103902054815260200190815260200160002060405180610160016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016002820180546130d990614530565b80601f016020809104026020016040519081016040528092919081815260200182805461310590614530565b80156131525780601f1061312757610100808354040283529160200191613152565b820191906000526020600020905b81548152906001019060200180831161313557829003601f168201915b505050505081526020016003820160009054906101000a900460ff161515151581526020016003820160019054906101000a900460ff161515151581526020016003820160029054906101000a900460ff161515151581526020016004820154815260200160058201548152602001600682015481526020016007820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160088201805461323090614530565b80601f016020809104026020016040519081016040528092919081815260200182805461325c90614530565b80156132a95780601f1061327e576101008083540402835291602001916132a9565b820191906000526020600020905b81548152906001019060200180831161328c57829003601f168201915b5050505050815250508686868661332c565b905061330f565b6132d6672d2f036f0f3c8a9560c01b612013565b6132ea678a545fd45818f0eb60c01b612013565b6132fe67840e86c49a81f17060c01b612013565b60008054906101000a900460ff1690505b979650505050505050565b6000919050565b600060019050919050565b600061334267e21564a3148d463860c01b612013565b61335667d98408469270163060c01b612013565b61336a674bea1e80c8aa319f60c01b612013565b8560800151156133a55761338867ad5c3b1f2299f5f860c01b612013565b61339c6743dd7e53e67df63c60c01b612013565b600090506138a6565b6133b96776b169b3281c12cc60c01b612013565b6133cd67ebac4790087b5a0a60c01b612013565b6133e1678f31959ac2b875df60c01b612013565b8560a001511561341c576133ff6772fbbaf7e115259560c01b612013565b61341367c3a2c150bf15e8f460c01b612013565b600190506138a6565b6134306722e0dac5eb68a2ff60c01b612013565b61344467fb98c9a0e7e5d55560c01b612013565b61345867f4987549f63ca11260c01b612013565b60008660c0015111801561346f5750428660c00151105b156134a5576134886712c0740aa6ccf14e60c01b612013565b61349c67bbc7df08bdd1150460c01b612013565b600090506138a6565b6134b9672fd1101e0511ca8760c01b612013565b6134cd6760725214f0e763e760c01b612013565b6134e1678e6891c32c6f068e60c01b612013565b60008660e001511180156134f85750428660e00151115b1561352e57613511672bd9e576079ebe2360c01b612013565b613525670a66956cb43747c960c01b612013565b600090506138a6565b61354267322171b3ea0bfb6760c01b612013565b61355667f14954a57826591960c01b612013565b61356a6726a7de73a4c8f53460c01b612013565b6001600381111561357e5761357d614cc1565b5b85600381111561359157613590614cc1565b5b1480156135a45750600086610100015114155b80156135b557508386610100015114155b156135ff576135ce679a3c2fb77646cc9760c01b612013565b6135e26794b86d42d6a7965d60c01b612013565b6135f66774a546d1aab4283660c01b612013565b600090506138a6565b61361367bd64266a7e8395e760c01b612013565b61362767cca41d7fe6e9634960c01b612013565b6002600381111561363b5761363a614cc1565b5b85600381111561364e5761364d614cc1565b5b14801561368d5750600073ffffffffffffffffffffffffffffffffffffffff1686610120015173ffffffffffffffffffffffffffffffffffffffff1614155b80156136ca57508273ffffffffffffffffffffffffffffffffffffffff1686610120015173ffffffffffffffffffffffffffffffffffffffff1614155b15613714576136e367c41cd4235d5e3d1560c01b612013565b6136f7674908d6de07e9de3960c01b612013565b61370b675f0cfc1859a7813e60c01b612013565b600090506138a6565b61372867b1dc60e3844f3eb960c01b612013565b61373c67327b949773d4145e60c01b612013565b60038081111561374f5761374e614cc1565b5b85600381111561376257613761614cc1565b5b1480156137be575060405160200161377990614d16565b604051602081830303815290604052805190602001208661014001516040516020016137a59190614609565b6040516020818303038152906040528051906020012014155b801561381b5750816040516020016137d69190614609565b604051602081830303815290604052805190602001208661014001516040516020016138029190614609565b6040516020818303038152906040528051906020012014155b15613865576138346733cc80604b469e7c60c01b612013565b613848676a5cdb5bad7c0cad60c01b612013565b61385c676d11131380e432da60c01b612013565b600090506138a6565b613879672178adb91b83f80560c01b612013565b61388d676f0f0f61a3db397e60c01b612013565b6138a167e532642009485f0c60c01b612013565b600190505b95945050505050565b60405180610160016040528060008152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160608152602001600015158152602001600015158152602001600015158152602001600081526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001606081525090565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b6139628161394f565b811461396d57600080fd5b50565b60008135905061397f81613959565b92915050565b60006020828403121561399b5761399a613945565b5b60006139a984828501613970565b91505092915050565b6139bb8161394f565b82525050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006139ec826139c1565b9050919050565b6139fc816139e1565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613a3c578082015181840152602081019050613a21565b60008484015250505050565b6000601f19601f8301169050919050565b6000613a6482613a02565b613a6e8185613a0d565b9350613a7e818560208601613a1e565b613a8781613a48565b840191505092915050565b60008115159050919050565b613aa781613a92565b82525050565b600061016082019050613ac3600083018e6139b2565b613ad0602083018d6139f3565b8181036040830152613ae2818c613a59565b9050613af1606083018b613a9e565b613afe608083018a613a9e565b613b0b60a0830189613a9e565b613b1860c08301886139b2565b613b2560e08301876139b2565b613b336101008301866139b2565b613b416101208301856139f3565b818103610140830152613b548184613a59565b90509c9b505050505050505050505050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613ba882613a48565b810181811067ffffffffffffffff82111715613bc757613bc6613b70565b5b80604052505050565b6000613bda61393b565b9050613be68282613b9f565b919050565b600067ffffffffffffffff821115613c0657613c05613b70565b5b613c0f82613a48565b9050602081019050919050565b82818337600083830152505050565b6000613c3e613c3984613beb565b613bd0565b905082815260208101848484011115613c5a57613c59613b6b565b5b613c65848285613c1c565b509392505050565b600082601f830112613c8257613c81613b66565b5b8135613c92848260208601613c2b565b91505092915050565b600060208284031215613cb157613cb0613945565b5b600082013567ffffffffffffffff811115613ccf57613cce61394a565b5b613cdb84828501613c6d565b91505092915050565b6000602082019050613cf96000830184613a9e565b92915050565b613d08816139e1565b8114613d1357600080fd5b50565b600081359050613d2581613cff565b92915050565b600080fd5b600080fd5b60008083601f840112613d4b57613d4a613b66565b5b8235905067ffffffffffffffff811115613d6857613d67613d2b565b5b602083019150836001820283011115613d8457613d83613d30565b5b9250929050565b60008060008060608587031215613da557613da4613945565b5b6000613db387828801613d16565b945050602085013567ffffffffffffffff811115613dd457613dd361394a565b5b613de087828801613d35565b93509350506040613df387828801613970565b91505092959194509250565b613e0881613a92565b8114613e1357600080fd5b50565b600081359050613e2581613dff565b92915050565b600060208284031215613e4157613e40613945565b5b6000613e4f84828501613e16565b91505092915050565b6000602082019050613e6d60008301846139b2565b92915050565b600080600060408486031215613e8c57613e8b613945565b5b6000613e9a86828701613d16565b935050602084013567ffffffffffffffff811115613ebb57613eba61394a565b5b613ec786828701613d35565b92509250509250925092565b600080fd5b600080fd5b60006101408284031215613ef457613ef3613ed3565b5b613eff610140613bd0565b90506000613f0f84828501613d16565b600083015250602082013567ffffffffffffffff811115613f3357613f32613ed8565b5b613f3f84828501613c6d565b6020830152506040613f5384828501613e16565b6040830152506060613f6784828501613970565b6060830152506080613f7b84828501613970565b60808301525060a0613f8f84828501613e16565b60a08301525060c0613fa384828501613e16565b60c08301525060e0613fb784828501613970565b60e083015250610100613fcc84828501613d16565b6101008301525061012082013567ffffffffffffffff811115613ff257613ff1613ed8565b5b613ffe84828501613c6d565b6101208301525092915050565b60006020828403121561402157614020613945565b5b600082013567ffffffffffffffff81111561403f5761403e61394a565b5b61404b84828501613edd565b91505092915050565b6000806000806000606086880312156140705761406f613945565b5b600061407e88828901613d16565b955050602086013567ffffffffffffffff81111561409f5761409e61394a565b5b6140ab88828901613d35565b9450945050604086013567ffffffffffffffff8111156140ce576140cd61394a565b5b6140da88828901613d35565b92509250509295509295909350565b6000602082840312156140ff576140fe613945565b5b600061410d84828501613d16565b91505092915050565b600080600080606085870312156141305761412f613945565b5b600061413e87828801613d16565b945050602085013567ffffffffffffffff81111561415f5761415e61394a565b5b61416b87828801613d35565b9350935050604061417e87828801613d16565b91505092959194509250565b600080604083850312156141a1576141a0613945565b5b60006141af85828601613d16565b925050602083013567ffffffffffffffff8111156141d0576141cf61394a565b5b6141dc85828601613c6d565b9150509250929050565b600060208201905081810360008301526142008184613a59565b905092915050565b6000806020838503121561421f5761421e613945565b5b600083013567ffffffffffffffff81111561423d5761423c61394a565b5b61424985828601613d35565b92509250509250929050565b600060208201905061426a60008301846139f3565b92915050565b6000806040838503121561428757614286613945565b5b600061429585828601613970565b92505060206142a685828601613970565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6142e58161394f565b82525050565b6142f4816139e1565b82525050565b600082825260208201905092915050565b600061431682613a02565b61432081856142fa565b9350614330818560208601613a1e565b61433981613a48565b840191505092915050565b61434d81613a92565b82525050565b60006101608301600083015161436c60008601826142dc565b50602083015161437f60208601826142eb565b5060408301518482036040860152614397828261430b565b91505060608301516143ac6060860182614344565b5060808301516143bf6080860182614344565b5060a08301516143d260a0860182614344565b5060c08301516143e560c08601826142dc565b5060e08301516143f860e08601826142dc565b5061010083015161440d6101008601826142dc565b506101208301516144226101208601826142eb565b5061014083015184820361014086015261443c828261430b565b9150508091505092915050565b60006144558383614353565b905092915050565b6000602082019050919050565b6000614475826142b0565b61447f81856142bb565b935083602082028501614491856142cc565b8060005b858110156144cd57848403895281516144ae8582614449565b94506144b98361445d565b925060208a01995050600181019050614495565b50829750879550505050505092915050565b600060208201905081810360008301526144f9818461446a565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061454857607f821691505b60208210810361455b5761455a614501565b5b50919050565b7f4450463a20494e56414c49445f5045524d495353494f4e5f4348414e47450000600082015250565b6000614597601e83613a0d565b91506145a282614561565b602082019050919050565b600060208201905081810360008301526145c68161458a565b9050919050565b600081905092915050565b60006145e382613a02565b6145ed81856145cd565b93506145fd818560208601613a1e565b80840191505092915050565b600061461582846145d8565b915081905092915050565b7f4450463a204f5045524154494f4e5f414c52454144595f52455354524943544560008201527f4400000000000000000000000000000000000000000000000000000000000000602082015250565b600061467c602183613a0d565b915061468782614620565b604082019050919050565b600060208201905081810360008301526146ab8161466f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006146ec8261394f565b91506146f78361394f565b925082820390508181111561470f5761470e6146b2565b5b92915050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026147777fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261473a565b614781868361473a565b95508019841693508086168417925050509392505050565b6000819050919050565b60006147be6147b96147b48461394f565b614799565b61394f565b9050919050565b6000819050919050565b6147d8836147a3565b6147ec6147e4826147c5565b848454614747565b825550505050565b600090565b6148016147f4565b61480c8184846147cf565b505050565b5b81811015614830576148256000826147f9565b600181019050614812565b5050565b601f8211156148755761484681614715565b61484f8461472a565b8101602085101561485e578190505b61487261486a8561472a565b830182614811565b50505b505050565b600082821c905092915050565b60006148986000198460080261487a565b1980831691505092915050565b60006148b18383614887565b9150826002028217905092915050565b6148ca82613a02565b67ffffffffffffffff8111156148e3576148e2613b70565b5b6148ed8254614530565b6148f8828285614834565b600060209050601f83116001811461492b5760008415614919578287015190505b61492385826148a5565b86555061498b565b601f19841661493986614715565b60005b828110156149615784890151825560018201915060208501945060208101905061493c565b8683101561497e578489015161497a601f891682614887565b8355505b6001600288020188555050505b505050505050565b600061499e8261394f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036149d0576149cf6146b2565b5b600182019050919050565b60006149e68261394f565b9150600082036149f9576149f86146b2565b5b600182039050919050565b7f4450463a204f5045524154494f4e5f414c52454144595f414c4c4f5745440000600082015250565b6000614a3a601e83613a0d565b9150614a4582614a04565b602082019050919050565b60006020820190508181036000830152614a6981614a2d565b9050919050565b6000614a7c83856145cd565b9350614a89838584613c1c565b82840190509392505050565b6000614aa2828486614a70565b91508190509392505050565b7f4450463a204f5045524154494f4e5f4e4f545f414c4c4f574544000000000000600082015250565b6000614ae4601a83613a0d565b9150614aef82614aae565b602082019050919050565b60006020820190508181036000830152614b1381614ad7565b9050919050565b7f4450463a2053544152545f4944585f5a45524f00000000000000000000000000600082015250565b6000614b50601383613a0d565b9150614b5b82614b1a565b602082019050919050565b60006020820190508181036000830152614b7f81614b43565b9050919050565b7f4450463a204348554e4b5f53495a455f5a45524f000000000000000000000000600082015250565b6000614bbc601483613a0d565b9150614bc782614b86565b602082019050919050565b60006020820190508181036000830152614beb81614baf565b9050919050565b6000614bfd8261394f565b9150614c088361394f565b9250828201905080821115614c2057614c1f6146b2565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4450463a204f5045524154494f4e5f4e4f545f52455354524943544544000000600082015250565b6000614c8b601d83613a0d565b9150614c9682614c55565b602082019050919050565b60006020820190508181036000830152614cba81614c7e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b50565b6000614d006000836145cd565b9150614d0b82614cf0565b600082019050919050565b6000614d2182614cf3565b915081905091905056fea2646970667358221220c79f099f7410c563ad454a5ae04bf33640e074552eb7cc441f0f263793e22f1d64736f6c63430008140033";
618
+ "0x608060405260016005553480156200001657600080fd5b506000805461ffff19166101011790556040516430b236b4b760d91b81526001908190819081906005019081526040805160209281900383018120805460ff1916941515949094179093556101408301815233835280518082018252600581526430b236b4b760d91b81840152828401526001838201526000606084018190526080840181905260a0840181905260c0840181905260e08401819052610100840181905281519283019091528152610120820152620000d59062000196565b506040805180820182526001808252601560f91b602083015291518291620000fd9162000592565b9081526040805160209281900383018120805460ff19169415159490941790935561014083018152600180845281518083018352818152601560f91b8185015283850152838201526000606084018190526080840181905260a0840181905260c0840181905260e084018190526101008401819052815192830190915281526101208201526200018d9062000196565b50505062000780565b80516001600160a01b03166000908152600460209081526040808320918401519051620001c4919062000592565b908152602001604051809103902054600003620003ff5760055482516001600160a01b031660009081526004602090815260409182902090850151915190916200020e9162000592565b908152602001604051809103902081905550604051806101600160405280600554815260200183600001516001600160a01b03168152602001836020015181526020018360400151151581526020018360a00151151581526020018360c001511515815260200183606001518152602001836080015181526020018360e0015181526020018361010001516001600160a01b031681526020018361012001518152506006600060055481526020019081526020016000206000820151816000015560208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550604082015181600201908162000313919062000668565b506060820151600382018054608085015160a086015161ffff1990921693151561ff0019169390931761010093151584021762ff00001916620100009115159190910217905560c0830151600483015560e0830151600583015582015160068201556101208201516007820180546001600160a01b0319166001600160a01b039092169190911790556101408201516008820190620003b3908262000668565b50905050600560008154620003c8906200074a565b9091555081516001600160a01b031660009081526003602052604081208054909190620003f5906200074a565b909155506200058a565b81516001600160a01b031660009081526004602090815260408083209185015190516006928492909162000434919062000592565b90815260200160405180910390205481526020019081526020016000209050826040015180156200046a5750600381015460ff16155b156200049e5782516001600160a01b03166000908152600360205260408120805490919062000499906200074a565b909155505b8260400151158015620004b55750600381015460ff165b15620004e95782516001600160a01b031660009081526003602052604081208054909190620004e49062000766565b909155505b6040830151600382018054606086015160048501556080860151600585015560a086015160c087015161ffff1990921693151561ff0019169390931761010093151584021762ff00001916620100009115159190910217905560e084015160068301558301516007820180546001600160a01b0319166001600160a01b03909216919091179055610120830151600882019062000587908262000668565b50505b506001919050565b6000825160005b81811015620005b5576020818601810151858301520162000599565b506000920191825250919050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620005ee57607f821691505b6020821081036200060f57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200066357600081815260208120601f850160051c810160208610156200063e5750805b601f850160051c820191505b818110156200065f578281556001016200064a565b5050505b505050565b81516001600160401b03811115620006845762000684620005c3565b6200069c81620006958454620005d9565b8462000615565b602080601f831160018114620006d45760008415620006bb5750858301515b600019600386901b1c1916600185901b1785556200065f565b600085815260208120601f198616915b828110156200070557888601518255948401946001909101908401620006e4565b5085821015620007245787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b6000600182016200075f576200075f62000734565b5060010190565b60008162000778576200077862000734565b506000190190565b6128d380620007906000396000f3fe608060405234801561001057600080fd5b50600436106101825760003560e01c8063a7804d65116100d8578063f28b9f341161008c578063fa1b3cac11610066578063fa1b3cac146103be578063fac66f01146103eb578063fb83bb731461040b57600080fd5b8063f28b9f341461036b578063f55893641461037d578063f9529ee2146103ab57600080fd5b8063c6064b28116100bd578063c6064b28146102d3578063c8d757fd146102e6578063efdcec9c1461032257600080fd5b8063a7804d65146102a0578063ade0bee4146102c057600080fd5b8063661957011161013a5780639359c287116101145780639359c2871461026d578063a5fcf16214610280578063a74d34391461028d57600080fd5b80636619570114610231578063699d7c331461024757806382dab96e1461025a57600080fd5b8063372db0891161016b578063372db089146101f8578063476a95ad1461020b57806365c581521461021e57600080fd5b806326c500071461018757806334906a4a146101ba575b600080fd5b61019a610195366004611dda565b61041e565b6040516101b19b9a99989796959493929190611e61565b60405180910390f35b6101e86101c8366004611ff8565b805160208183018101805160018252928201919093012091525460ff1681565b60405190151581526020016101b1565b6101e861020636600461209f565b6105bb565b6101e8610219366004612109565b6105e6565b6101e861022c366004611ff8565b610695565b61023961079f565b6040519081526020016101b1565b6101e861025536600461212b565b6107b5565b6101e861026836600461217e565b6107df565b6101e861027b366004611ff8565b610d39565b6000546101e89060ff1681565b6101e861029b366004612288565b610dd6565b6102396102ae366004612309565b60036020526000908152604090205481565b6101e86102ce366004612109565b610e29565b6101e86102e1366004612324565b610ee2565b6102396102f4366004612389565b6004602090815260009283526040909220815180830184018051928152908401929093019190912091525481565b61035e6040518060400160405280600181526020017f2a0000000000000000000000000000000000000000000000000000000000000081525081565b6040516101b191906123d7565b6000546101e890610100900460ff1681565b6101e861038b366004611ff8565b805160208183018101805160028252928201919093012091525460ff1681565b6101e86103b93660046123ea565b610f04565b6103c6600181565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101b1565b6103fe6103f936600461242c565b610fed565b6040516101b1919061244e565b6101e86104193660046123ea565b61146d565b600660205260009081526040902080546001820154600283018054929373ffffffffffffffffffffffffffffffffffffffff9092169261045d90612595565b80601f016020809104026020016040519081016040528092919081815260200182805461048990612595565b80156104d65780601f106104ab576101008083540402835291602001916104d6565b820191906000526020600020905b8154815290600101906020018083116104b957829003601f168201915b5050505060038301546004840154600585015460068601546007870154600888018054979860ff8088169961010089048216995062010000909804169673ffffffffffffffffffffffffffffffffffffffff9093169290919061053890612595565b80601f016020809104026020016040519081016040528092919081815260200182805461056490612595565b80156105b15780601f10610586576101008083540402835291602001916105b1565b820191906000526020600020905b81548152906001019060200180831161059457829003601f168201915b505050505090508b565b60006105dd85858560018660006040518060200160405280600081525061150e565b95945050505050565b6000805482151560ff909116151503610660576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4450463a20494e56414c49445f5045524d495353494f4e5f4348414e4745000060448201526064015b60405180910390fd5b50600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055600190565b60006002826040516106a791906125e8565b9081526040519081900360200190205460ff1615610747576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4450463a204f5045524154494f4e5f414c52454144595f52455354524943544560448201527f44000000000000000000000000000000000000000000000000000000000000006064820152608401610657565b600160028360405161075991906125e8565b90815260405190819003602001902080549115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00909216919091179055506001919050565b600060016005546107b09190612633565b905090565b60006107d784848460008060006040518060200160405280600081525061150e565b949350505050565b805173ffffffffffffffffffffffffffffffffffffffff16600090815260046020908152604080832091840151905161081891906125e8565b908152602001604051809103902054600003610b1057600554825173ffffffffffffffffffffffffffffffffffffffff16600090815260046020908152604091829020908501519151909161086c916125e8565b9081526020016040518091039020819055506040518061016001604052806005548152602001836000015173ffffffffffffffffffffffffffffffffffffffff168152602001836020015181526020018360400151151581526020018360a00151151581526020018360c001511515815260200183606001518152602001836080015181526020018360e00151815260200183610100015173ffffffffffffffffffffffffffffffffffffffff1681526020018361012001518152506006600060055481526020019081526020016000206000820151816000015560208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160020190816109a39190612695565b506060820151600382018054608085015160a08601517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00009092169315157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16939093176101009315158402177fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff16620100009115159190910217905560c0830151600483015560e0830151600583015582015160068201556101208201516007820180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9092169190911790556101408201516008820190610abc9082612695565b50905050600560008154610acf906127af565b90915550815173ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604081208054909190610b07906127af565b90915550610d31565b815173ffffffffffffffffffffffffffffffffffffffff16600090815260046020908152604080832091850151905160069284929091610b5091906125e8565b9081526020016040518091039020548152602001908152602001600020905082604001518015610b855750600381015460ff16155b15610bc357825173ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604081208054909190610bbe906127af565b909155505b8260400151158015610bd95750600381015460ff165b15610c1757825173ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604081208054909190610c12906127e7565b909155505b6040830151600382018054606086015160048501556080860151600585015560a086015160c08701517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00009092169315157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16939093176101009315158402177fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff16620100009115159190910217905560e084015160068301558301516007820180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9092169190911790556101208301516008820190610d2e9082612695565b50505b506001919050565b6000600182604051610d4b91906125e8565b9081526040519081900360200190205460ff1615610dc5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4450463a204f5045524154494f4e5f414c52454144595f414c4c4f57454400006044820152606401610657565b6001808360405161075991906125e8565b6000610e1f868686600360008089898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061150e92505050565b9695505050505050565b6000811515600060019054906101000a900460ff16151503610ea7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4450463a20494e56414c49445f5045524d495353494f4e5f4348414e474500006044820152606401610657565b5060008054911515610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909216919091179055600190565b60006105dd85858560026000876040518060200160405280600081525061150e565b600060018383604051610f1892919061281c565b9081526040519081900360200190205460ff16610f91576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4450463a204f5045524154494f4e5f4e4f545f414c4c4f5745440000000000006044820152606401610657565b600060018484604051610fa592919061281c565b90815260405190819003602001902080549115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009092169190911790555060015b92915050565b606060008311611059576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4450463a2053544152545f4944585f5a45524f000000000000000000000000006044820152606401610657565b600082116110c3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f4450463a204348554e4b5f53495a455f5a45524f0000000000000000000000006044820152606401610657565b600554831061115557604080516000808252602082019092529061114d565b604080516101608101825260008082526020820181905260609282018390528282018190526080820181905260a0820181905260c0820181905260e0820181905261010082018190526101208201526101408101919091528152602001906001900390816110e25790505b509050610fe7565b600060016005546111669190612633565b6001611172858761282c565b61117c9190612633565b111561119557836005546111909190612633565b611197565b825b905060008167ffffffffffffffff8111156111b4576111b4611ef4565b60405190808252806020026020018201604052801561123d57816020015b604080516101608101825260008082526020820181905260609282018390528282018190526080820181905260a0820181905260c0820181905260e0820181905261010082018190526101208201526101408101919091528152602001906001900390816111d25790505b50905060005b828110156114645760066000611259838961282c565b8152602080820192909252604090810160002081516101608101835281548152600182015473ffffffffffffffffffffffffffffffffffffffff169381019390935260028101805491928401916112af90612595565b80601f01602080910402602001604051908101604052809291908181526020018280546112db90612595565b80156113285780601f106112fd57610100808354040283529160200191611328565b820191906000526020600020905b81548152906001019060200180831161130b57829003601f168201915b5050509183525050600382015460ff8082161515602084015261010080830482161515604085015262010000909204161515606083015260048301546080830152600583015460a0830152600683015460c0830152600783015473ffffffffffffffffffffffffffffffffffffffff1660e08301526008830180549190920191906113b290612595565b80601f01602080910402602001604051908101604052809291908181526020018280546113de90612595565b801561142b5780601f106114005761010080835404028352916020019161142b565b820191906000526020600020905b81548152906001019060200180831161140e57829003601f168201915b5050505050815250508282815181106114465761144661283f565b6020026020010181905250808061145c906127af565b915050611243565b50949350505050565b60006002838360405161148192919061281c565b9081526040519081900360200190205460ff166114fa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4450463a204f5045524154494f4e5f4e4f545f524553545249435445440000006044820152606401610657565b600060028484604051610fa592919061281c565b60006002878760405161152292919061281c565b9081526040519081900360200190205460ff161561154257506000611bc9565b60408051808201825260018082527f2a000000000000000000000000000000000000000000000000000000000000006020830152915161158291906125e8565b9081526040519081900360200190205460ff161580156115c45750600187876040516115af92919061281c565b9081526040519081900360200190205460ff16155b156115d157506000611bc9565b73ffffffffffffffffffffffffffffffffffffffff88166000908152600460205260408082209051600692919061160b908b908b9061281c565b908152604080516020928190038301902054835290820192909252016000206003015460ff16156118a25773ffffffffffffffffffffffffffffffffffffffff8816600090815260046020526040808220905161189b926006929091611674908c908c9061281c565b908152602001604051809103902054815260200190815260200160002060405180610160016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160028201805461170d90612595565b80601f016020809104026020016040519081016040528092919081815260200182805461173990612595565b80156117865780601f1061175b57610100808354040283529160200191611786565b820191906000526020600020905b81548152906001019060200180831161176957829003601f168201915b5050509183525050600382015460ff8082161515602084015261010080830482161515604085015262010000909204161515606083015260048301546080830152600583015460a0830152600683015460c0830152600783015473ffffffffffffffffffffffffffffffffffffffff1660e083015260088301805491909201919061181090612595565b80601f016020809104026020016040519081016040528092919081815260200182805461183c90612595565b80156118895780601f1061185e57610100808354040283529160200191611889565b820191906000526020600020905b81548152906001019060200180831161186c57829003601f168201915b50505050508152505086868686611bd4565b9050611bc9565b73ffffffffffffffffffffffffffffffffffffffff8816600090815260046020908152604080832081518083018352600181527f2a000000000000000000000000000000000000000000000000000000000000009381019390935290516006939261190c916125e8565b908152604080516020928190038301902054835290820192909252016000206003015460ff16156119c05761189b60066000600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405280600181526020017f2a0000000000000000000000000000000000000000000000000000000000000081525060405161167491906125e8565b73ffffffffffffffffffffffffffffffffffffffff8816600090815260036020526040902054156119fc5750600054610100900460ff16611bc9565b600160009081526004602052604051600691907fabd6e7cb50984ff9c2f3e18a2660c3353dadf4e3291deeb275dae2cd1e44fe0590611a3e908b908b9061281c565b908152604080516020928190038301902054835290820192909252016000206003015460ff1615611aae5760016000908152600460205260405161189b916006917fabd6e7cb50984ff9c2f3e18a2660c3353dadf4e3291deeb275dae2cd1e44fe0590611674908c908c9061281c565b60016000818152600460209081526040805180820182529384527f2a0000000000000000000000000000000000000000000000000000000000000091840191909152516006927fabd6e7cb50984ff9c2f3e18a2660c3353dadf4e3291deeb275dae2cd1e44fe0591611b2091906125e8565b908152604080516020928190038301902054835290820192909252016000206003015460ff1615611bc15760016000818152600460209081526040805180820182529384527f2a00000000000000000000000000000000000000000000000000000000000000918401919091525161189b92600692917fabd6e7cb50984ff9c2f3e18a2660c3353dadf4e3291deeb275dae2cd1e44fe0591611674916125e8565b5060005460ff165b979650505050505050565b6000856080015115611be8575060006105dd565b8560a0015115611bfa575060016105dd565b60008660c00151118015611c115750428660c00151105b15611c1e575060006105dd565b60008660e00151118015611c355750428660e00151115b15611c42575060006105dd565b6001856003811115611c5657611c5661286e565b148015611c67575061010086015115155b8015611c7857508386610100015114155b15611c85575060006105dd565b6002856003811115611c9957611c9961286e565b148015611cc0575061012086015173ffffffffffffffffffffffffffffffffffffffff1615155b8015611cfd57508273ffffffffffffffffffffffffffffffffffffffff1686610120015173ffffffffffffffffffffffffffffffffffffffff1614155b15611d0a575060006105dd565b6003856003811115611d1e57611d1e61286e565b148015611d645750604080516000815260208101808352815190206101408901519092611d4b92016125e8565b6040516020818303038152906040528051906020012014155b8015611dc1575081604051602001611d7c91906125e8565b60405160208183030381529060405280519060200120866101400151604051602001611da891906125e8565b6040516020818303038152906040528051906020012014155b15611dce575060006105dd565b50600195945050505050565b600060208284031215611dec57600080fd5b5035919050565b60005b83811015611e0e578181015183820152602001611df6565b50506000910152565b60008151808452611e2f816020860160208601611df3565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60006101608d835273ffffffffffffffffffffffffffffffffffffffff808e166020850152816040850152611e988285018e611e17565b91508b151560608501528a1515608085015289151560a08501528860c08501528760e08501528661010085015280861661012085015250828103610140840152611ee28185611e17565b9e9d5050505050505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610140810167ffffffffffffffff81118282101715611f4757611f47611ef4565b60405290565b600082601f830112611f5e57600080fd5b813567ffffffffffffffff80821115611f7957611f79611ef4565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715611fbf57611fbf611ef4565b81604052838152866020858801011115611fd857600080fd5b836020870160208301376000602085830101528094505050505092915050565b60006020828403121561200a57600080fd5b813567ffffffffffffffff81111561202157600080fd5b6107d784828501611f4d565b803573ffffffffffffffffffffffffffffffffffffffff8116811461205157600080fd5b919050565b60008083601f84011261206857600080fd5b50813567ffffffffffffffff81111561208057600080fd5b60208301915083602082850101111561209857600080fd5b9250929050565b600080600080606085870312156120b557600080fd5b6120be8561202d565b9350602085013567ffffffffffffffff8111156120da57600080fd5b6120e687828801612056565b9598909750949560400135949350505050565b8035801515811461205157600080fd5b60006020828403121561211b57600080fd5b612124826120f9565b9392505050565b60008060006040848603121561214057600080fd5b6121498461202d565b9250602084013567ffffffffffffffff81111561216557600080fd5b61217186828701612056565b9497909650939450505050565b60006020828403121561219057600080fd5b813567ffffffffffffffff808211156121a857600080fd5b9083019061014082860312156121bd57600080fd5b6121c5611f23565b6121ce8361202d565b81526020830135828111156121e257600080fd5b6121ee87828601611f4d565b602083015250612200604084016120f9565b6040820152606083013560608201526080830135608082015261222560a084016120f9565b60a082015261223660c084016120f9565b60c082015260e083013560e082015261010061225381850161202d565b90820152610120838101358381111561226b57600080fd5b61227788828701611f4d565b918301919091525095945050505050565b6000806000806000606086880312156122a057600080fd5b6122a98661202d565b9450602086013567ffffffffffffffff808211156122c657600080fd5b6122d289838a01612056565b909650945060408801359150808211156122eb57600080fd5b506122f888828901612056565b969995985093965092949392505050565b60006020828403121561231b57600080fd5b6121248261202d565b6000806000806060858703121561233a57600080fd5b6123438561202d565b9350602085013567ffffffffffffffff81111561235f57600080fd5b61236b87828801612056565b909450925061237e90506040860161202d565b905092959194509250565b6000806040838503121561239c57600080fd5b6123a58361202d565b9150602083013567ffffffffffffffff8111156123c157600080fd5b6123cd85828601611f4d565b9150509250929050565b6020815260006121246020830184611e17565b600080602083850312156123fd57600080fd5b823567ffffffffffffffff81111561241457600080fd5b61242085828601612056565b90969095509350505050565b6000806040838503121561243f57600080fd5b50508035926020909101359150565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b83811015612587577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0898403018552815161016081518552888201516124d28a87018273ffffffffffffffffffffffffffffffffffffffff169052565b508782015181898701526124e882870182611e17565b9150506060808301516124fe8288018215159052565b505060808281015115159086015260a08083015115159086015260c0808301519086015260e0808301519086015261010080830151908601526101208083015173ffffffffffffffffffffffffffffffffffffffff169086015261014091820151858203928601929092526125738183611e17565b968901969450505090860190600101612475565b509098975050505050505050565b600181811c908216806125a957607f821691505b6020821081036125e2577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600082516125fa818460208701611df3565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b81810381811115610fe757610fe7612604565b601f82111561269057600081815260208120601f850160051c8101602086101561266d5750805b601f850160051c820191505b8181101561268c57828155600101612679565b5050505b505050565b815167ffffffffffffffff8111156126af576126af611ef4565b6126c3816126bd8454612595565b84612646565b602080601f83116001811461271657600084156126e05750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b17855561268c565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561276357888601518255948401946001909101908401612744565b508582101561279f57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036127e0576127e0612604565b5060010190565b6000816127f6576127f6612604565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b8183823760009101908152919050565b80820180821115610fe757610fe7612604565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea2646970667358221220b842a18ce27b383c47a40b66776265cbbdf4e1dc6286556aafcf1c0ce64e7aed64736f6c63430008130033";
619
619
 
620
620
  type DataPrivacyFrameworkMockConstructorParams =
621
621
  | [signer?: Signer]
@@ -566,7 +566,7 @@ const _abi = [
566
566
  ] as const;
567
567
 
568
568
  const _bytecode =
569
- "0x60806040523480156200001157600080fd5b506040518060400160405280601081526020017f5072697661746545524332304d6f636b000000000000000000000000000000008152506040518060400160405280600581526020017f504532304d00000000000000000000000000000000000000000000000000000081525081600490816200008f919062000324565b508060059081620000a1919062000324565b5050506200040b565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200012c57607f821691505b602082108103620001425762000141620000e4565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620001ac7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200016d565b620001b886836200016d565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000205620001ff620001f984620001d0565b620001da565b620001d0565b9050919050565b6000819050919050565b6200022183620001e4565b6200023962000230826200020c565b8484546200017a565b825550505050565b600090565b6200025062000241565b6200025d81848462000216565b505050565b5b8181101562000285576200027960008262000246565b60018101905062000263565b5050565b601f821115620002d4576200029e8162000148565b620002a9846200015d565b81016020851015620002b9578190505b620002d1620002c8856200015d565b83018262000262565b50505b505050565b600082821c905092915050565b6000620002f960001984600802620002d9565b1980831691505092915050565b6000620003148383620002e6565b9150826002028217905092915050565b6200032f82620000aa565b67ffffffffffffffff8111156200034b576200034a620000b5565b5b62000357825462000113565b6200036482828562000289565b600060209050601f8311600181146200039c576000841562000387578287015190505b62000393858262000306565b86555062000403565b601f198416620003ac8662000148565b60005b82811015620003d657848901518255600182019150602085019450602081019050620003af565b86831015620003f65784890151620003f2601f891682620002e6565b8355505b6001600288020188555050505b505050505050565b612ab7806200041b6000396000f3fe608060405234801561001057600080fd5b50600436106101215760003560e01c8063313ce567116100ad57806396b2db381161007157806396b2db3814610344578063a42c0af914610374578063a7d9ad6a146103a4578063a9059cbb146103d4578063dd62ed3e1461040457610121565b8063313ce5671461028a57806370a08231146102a8578063722713f7146102d85780638269bcc3146102f657806395d89b411461032657610121565b806313691c76116100f457806313691c76146101d457806318160ddd146101f057806323b872dd1461020e57806326a9b3f11461023e5780632893c5b01461026e57610121565b8063043d20851461012657806306fdde031461015657806308a2032a14610174578063095ea7b3146101a4575b600080fd5b610140600480360381019061013b9190611f08565b610434565b60405161014d9190611f44565b60405180910390f35b61015e61049c565b60405161016b9190611fef565b60405180910390f35b61018e60048036038101906101899190612035565b61052e565b60405161019b91906120e9565b60405180910390f35b6101be60048036038101906101b99190612130565b610572565b6040516101cb919061218b565b60405180910390f35b6101ee60048036038101906101e991906121e6565b610595565b005b6101f86105ac565b6040516102059190612235565b60405180910390f35b61022860048036038101906102239190612250565b6105b1565b60405161023591906120e9565b60405180910390f35b610258600480360381019061025391906122cf565b6105de565b604051610265919061218b565b60405180910390f35b610288600480360381019061028391906121e6565b610756565b005b61029261076d565b60405161029f919061232b565b60405180910390f35b6102c260048036038101906102bd9190611f08565b610776565b6040516102cf9190612355565b60405180910390f35b6102e06107c2565b6040516102ed919061237f565b60405180910390f35b610310600480360381019061030b9190611f08565b6107d9565b60405161031d919061218b565b60405180910390f35b61032e6108d3565b60405161033b9190611fef565b60405180910390f35b61035e600480360381019061035991906122cf565b610965565b60405161036b919061237f565b60405180910390f35b61038e6004803603810190610389919061239a565b610a9b565b60405161039b919061218b565b60405180910390f35b6103be60048036038101906103b9919061239a565b610ad5565b6040516103cb91906120e9565b60405180910390f35b6103ee60048036038101906103e99190612130565b610b0d565b6040516103fb91906120e9565b60405180910390f35b61041e600480360381019061041991906123f6565b610b2e565b60405161042b9190612487565b60405180910390f35b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6060600480546104ab906124d1565b80601f01602080910402602001604051908101604052809291908181526020018280546104d7906124d1565b80156105245780601f106104f957610100808354040283529160200191610524565b820191906000526020600020905b81548152906001019060200180831161050757829003601f168201915b5050505050905090565b600080610539610be3565b9050600061054f8461054a906126d9565b610beb565b905061055c868383610c92565b610567868683610de7565b925050509392505050565b60008061057d610be3565b905061058a818585610ee0565b600191505092915050565b6105a7826105a28361112d565b6111d4565b505050565b600090565b6000806105bc610be3565b90506105c9858285610c92565b6105d4858585610de7565b9150509392505050565b6000806105f16105ec610be3565b61125b565b905082156106a457600060026000610607610be3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506106966106908260000154611300565b8361132b565b81600101819055505061074b565b6000600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006106ef610be3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905061074161073b8260000154611300565b8361132b565b8160020181905550505b600191505092915050565b610768826107638361112d565b6113ea565b505050565b60006002905090565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101549050919050565b60006107d46107cf610be3565b611471565b905090565b6000806107ec6107e7610be3565b611471565b9050826000806107fa610be3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061087c818461132b565b60016000610888610be3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055506001915050919050565b6060600580546108e2906124d1565b80601f016020809104026020016040519081016040528092919081815260200182805461090e906124d1565b801561095b5780601f106109305761010080835404028352916020019161095b565b820191906000526020600020905b81548152906001019060200180831161093e57829003601f168201915b5050505050905090565b60008115610a03576109fc6002600061097c610be3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154611300565b9050610a95565b610a92600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610a4f610be3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154611300565b90505b92915050565b600080610aa6610be3565b90506000610abc84610ab7906126d9565b610beb565b9050610ac9828683610ee0565b60019250505092915050565b600080610ae0610be3565b90506000610af684610af1906126d9565b610beb565b9050610b03828683610de7565b9250505092915050565b600080610b18610be3565b9050610b25818585610de7565b91505092915050565b610b36611e5b565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060600160405290816000820154815260200160018201548152602001600282015481525050905092915050565b600033905090565b6000606473ffffffffffffffffffffffffffffffffffffffff1663e4f36e10600480811115610c1d57610c1c6126ec565b5b60f81b846000015185602001516040518463ffffffff1660e01b8152600401610c48939291906127ab565b6020604051808303816000875af1158015610c67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c8b9190612815565b9050919050565b6000610cdf600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154611300565b90506000610d6b600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154611300565b90506000610d8982610d8467ffffffffffffffff61112d565b6114ca565b90506000610d978486611561565b90506000610da58487611561565b90506000610dcf610dbf85610dba86866115f8565b6115f8565b610dc9878a61168f565b87611726565b9050610ddc898983610ee0565b505050505050505050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610e5a5760006040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401610e519190611f44565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610ecc5760006040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610ec39190611f44565b60405180910390fd5b610ed78484846117c0565b90509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610f525760006040517fe602df05000000000000000000000000000000000000000000000000000000008152600401610f499190611f44565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610fc45760006040517f94280d62000000000000000000000000000000000000000000000000000000008152600401610fbb9190611f44565b60405180910390fd5b6000610fcf82611996565b90506000610fdc8561125b565b90506000610fea848361132b565b9050610ff58561125b565b91506000611003858461132b565b9050604051806060016040528085815260200183815260200182815250600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000820151816000015560208201518160010155604082015181600201559050508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fb3fd5071835887567a0671151121894ddccc2842f1d10bedad13e0d17cace9a7848460405161111c929190612842565b60405180910390a350505050505050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663d9b60b6060048081111561115f5761115e6126ec565b5b60f81b8467ffffffffffffffff166040518363ffffffff1660e01b815260040161118a92919061286b565b6020604051808303816000875af11580156111a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111cd9190612815565b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036112475760006040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260040161123e9190611f44565b60405180910390fd5b611253836000846117c0565b905092915050565b6000806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036112f7578290505b80915050919050565b600080820361131a57611313600061112d565b9050611326565b61132382611a33565b90505b919050565b6000606473ffffffffffffffffffffffffffffffffffffffff16633c6f0e6860048081111561135d5761135c6126ec565b5b60f81b858560405160200161137291906128dc565b6040516020818303038152906040526040518463ffffffff1660e01b815260040161139f939291906127ab565b6020604051808303816000875af11580156113be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113e29190612815565b905092915050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361145d5760006040517fec442f050000000000000000000000000000000000000000000000000000000081526004016114549190611f44565b60405180910390fd5b611469600084846117c0565b905092915050565b600080600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015490506114c281611300565b915050919050565b6000606473ffffffffffffffffffffffffffffffffffffffff16637c12a1eb6114f66004806000611ad0565b85856040518463ffffffff1660e01b815260040161151693929190612932565b6020604051808303816000875af1158015611535573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115599190612815565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663dd14869361158d6004806000611ad0565b85856040518463ffffffff1660e01b81526004016115ad93929190612932565b6020604051808303816000875af11580156115cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115f09190612815565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663fb7da35f6116246000806000611ad0565b85856040518463ffffffff1660e01b815260040161164493929190612932565b6020604051808303816000875af1158015611663573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116879190612815565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663371d1bf26116bb6004806000611ad0565b85856040518463ffffffff1660e01b81526004016116db93929190612932565b6020604051808303816000875af11580156116fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061171e9190612815565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff166320cc408d6117526004806000611ad0565b8686866040518563ffffffff1660e01b81526004016117749493929190612969565b6020604051808303816000875af1158015611793573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117b79190612815565b90509392505050565b600080600083905060006117d46001611b31565b9050600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1603611854576000611817600354611300565b90506118238187611be5565b905061182e81611996565b600381905550600061183f88611471565b905061184b8188611be5565b945050506118a1565b600061185f88611471565b9050600061186c88611471565b9050600061187b83838a611c7c565b8096508198508293505050506118918a82611d31565b61189b868361168f565b94505050505b600073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16036119055760006118e2600354611300565b90506118ee818461168f565b90506118f981611996565b60038190555050611910565b61190f8684611d31565b5b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f9ed053bb818ff08b8353cd46f78db1f0799f31c9e4458fdb425c10eccd2efc44611969858b61132b565b611973868b61132b565b604051611981929190612842565b60405180910390a38093505050509392505050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663c50c9c026004808111156119c8576119c76126ec565b5b60f81b846040518363ffffffff1660e01b81526004016119e992919061286b565b6020604051808303816000875af1158015611a08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a2c9190612815565b9050919050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663d2c135e5600480811115611a6557611a646126ec565b5b60f81b846040518363ffffffff1660e01b8152600401611a8692919061286b565b6020604051808303816000875af1158015611aa5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ac99190612815565b9050919050565b6000816002811115611ae557611ae46126ec565b5b60ff166008846004811115611afd57611afc6126ec565b5b61ffff16901b61ffff166010866004811115611b1c57611b1b6126ec565b5b62ffffff16901b171760e81b90509392505050565b60008082611b40576000611b43565b60015b60ff169050606473ffffffffffffffffffffffffffffffffffffffff1663d9b60b6060006004811115611b7957611b786126ec565b5b60f81b836040518363ffffffff1660e01b8152600401611b9a92919061286b565b6020604051808303816000875af1158015611bb9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bdd9190612815565b915050919050565b6000606473ffffffffffffffffffffffffffffffffffffffff16638c5d0150611c116004806000611ad0565b85856040518463ffffffff1660e01b8152600401611c3193929190612932565b6020604051808303816000875af1158015611c50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c749190612815565b905092915050565b600080600080600080606473ffffffffffffffffffffffffffffffffffffffff166356c72d28611cb160048060046000611da3565b8b8b8b6040518563ffffffff1660e01b8152600401611cd394939291906129e9565b6060604051808303816000875af1158015611cf2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d169190612a2e565b92509250925082828295509550955050505093509350939050565b6000611d3c8361125b565b9050611d488282611e28565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000820151816000015560208201518160010155905050505050565b6000816002811115611db857611db76126ec565b5b60ff166008846004811115611dd057611dcf6126ec565b5b61ffff16901b61ffff166010866004811115611def57611dee6126ec565b5b62ffffff16901b62ffffff166018886004811115611e1057611e0f6126ec565b5b63ffffffff16901b17171760e01b9050949350505050565b611e30611e7c565b611e3983611996565b816000018181525050611e4c838361132b565b81602001818152505092915050565b60405180606001604052806000815260200160008152602001600081525090565b604051806040016040528060008152602001600081525090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611ed582611eaa565b9050919050565b611ee581611eca565b8114611ef057600080fd5b50565b600081359050611f0281611edc565b92915050565b600060208284031215611f1e57611f1d611ea0565b5b6000611f2c84828501611ef3565b91505092915050565b611f3e81611eca565b82525050565b6000602082019050611f596000830184611f35565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611f99578082015181840152602081019050611f7e565b60008484015250505050565b6000601f19601f8301169050919050565b6000611fc182611f5f565b611fcb8185611f6a565b9350611fdb818560208601611f7b565b611fe481611fa5565b840191505092915050565b600060208201905081810360008301526120098184611fb6565b905092915050565b600080fd5b60006040828403121561202c5761202b612011565b5b81905092915050565b60008060006060848603121561204e5761204d611ea0565b5b600061205c86828701611ef3565b935050602061206d86828701611ef3565b925050604084013567ffffffffffffffff81111561208e5761208d611ea5565b5b61209a86828701612016565b9150509250925092565b6000819050919050565b6000819050919050565b60006120d36120ce6120c9846120a4565b6120ae565b6120a4565b9050919050565b6120e3816120b8565b82525050565b60006020820190506120fe60008301846120da565b92915050565b61210d816120a4565b811461211857600080fd5b50565b60008135905061212a81612104565b92915050565b6000806040838503121561214757612146611ea0565b5b600061215585828601611ef3565b92505060206121668582860161211b565b9150509250929050565b60008115159050919050565b61218581612170565b82525050565b60006020820190506121a0600083018461217c565b92915050565b600067ffffffffffffffff82169050919050565b6121c3816121a6565b81146121ce57600080fd5b50565b6000813590506121e0816121ba565b92915050565b600080604083850312156121fd576121fc611ea0565b5b600061220b85828601611ef3565b925050602061221c858286016121d1565b9150509250929050565b61222f816120a4565b82525050565b600060208201905061224a6000830184612226565b92915050565b60008060006060848603121561226957612268611ea0565b5b600061227786828701611ef3565b935050602061228886828701611ef3565b92505060406122998682870161211b565b9150509250925092565b6122ac81612170565b81146122b757600080fd5b50565b6000813590506122c9816122a3565b92915050565b600080604083850312156122e6576122e5611ea0565b5b60006122f485828601611ef3565b9250506020612305858286016122ba565b9150509250929050565b600060ff82169050919050565b6123258161230f565b82525050565b6000602082019050612340600083018461231c565b92915050565b61234f816120b8565b82525050565b600060208201905061236a6000830184612346565b92915050565b612379816120b8565b82525050565b60006020820190506123946000830184612370565b92915050565b600080604083850312156123b1576123b0611ea0565b5b60006123bf85828601611ef3565b925050602083013567ffffffffffffffff8111156123e0576123df611ea5565b5b6123ec85828601612016565b9150509250929050565b6000806040838503121561240d5761240c611ea0565b5b600061241b85828601611ef3565b925050602061242c85828601611ef3565b9150509250929050565b61243f816120b8565b82525050565b60608201600082015161245b6000850182612436565b50602082015161246e6020850182612436565b5060408201516124816040850182612436565b50505050565b600060608201905061249c6000830184612445565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806124e957607f821691505b6020821081036124fc576124fb6124a2565b5b50919050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61253f82611fa5565b810181811067ffffffffffffffff8211171561255e5761255d612507565b5b80604052505050565b6000612571611e96565b905061257d8282612536565b919050565b600080fd5b612590816120a4565b811461259b57600080fd5b50565b6000813590506125ad81612587565b92915050565b600080fd5b600080fd5b600067ffffffffffffffff8211156125d8576125d7612507565b5b6125e182611fa5565b9050602081019050919050565b82818337600083830152505050565b600061261061260b846125bd565b612567565b90508281526020810184848401111561262c5761262b6125b8565b5b6126378482856125ee565b509392505050565b600082601f830112612654576126536125b3565b5b81356126648482602086016125fd565b91505092915050565b60006040828403121561268357612682612502565b5b61268d6040612567565b9050600061269d8482850161259e565b600083015250602082013567ffffffffffffffff8111156126c1576126c0612582565b5b6126cd8482850161263f565b60208301525092915050565b60006126e5368361266d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60007fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b6127508161271b565b82525050565b600081519050919050565b600082825260208201905092915050565b600061277d82612756565b6127878185612761565b9350612797818560208601611f7b565b6127a081611fa5565b840191505092915050565b60006060820190506127c06000830186612747565b6127cd6020830185612226565b81810360408301526127df8184612772565b9050949350505050565b6127f2816120a4565b81146127fd57600080fd5b50565b60008151905061280f816127e9565b92915050565b60006020828403121561282b5761282a611ea0565b5b600061283984828501612800565b91505092915050565b60006040820190506128576000830185612346565b6128646020830184612346565b9392505050565b60006040820190506128806000830185612747565b61288d6020830184612226565b9392505050565b60008160601b9050919050565b60006128ac82612894565b9050919050565b60006128be826128a1565b9050919050565b6128d66128d182611eca565b6128b3565b82525050565b60006128e882846128c5565b60148201915081905092915050565b60007fffffff000000000000000000000000000000000000000000000000000000000082169050919050565b61292c816128f7565b82525050565b60006060820190506129476000830186612923565b6129546020830185612226565b6129616040830184612226565b949350505050565b600060808201905061297e6000830187612923565b61298b6020830186612226565b6129986040830185612226565b6129a56060830184612226565b95945050505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6129e3816129ae565b82525050565b60006080820190506129fe60008301876129da565b612a0b6020830186612226565b612a186040830185612226565b612a256060830184612226565b95945050505050565b600080600060608486031215612a4757612a46611ea0565b5b6000612a5586828701612800565b9350506020612a6686828701612800565b9250506040612a7786828701612800565b915050925092509256fea26469706673582212201d12ede1ad6b9e959c09ae74c66053f6655ab89c13462915f9e3e6ba3e905b5864736f6c63430008140033";
569
+ "0x60806040523480156200001157600080fd5b506040518060400160405280601081526020016f5072697661746545524332304d6f636b60801b81525060405180604001604052806005815260200164504532304d60d81b81525081600490816200006a919062000127565b50600562000079828262000127565b505050620001f3565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620000ad57607f821691505b602082108103620000ce57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200012257600081815260208120601f850160051c81016020861015620000fd5750805b601f850160051c820191505b818110156200011e5782815560010162000109565b5050505b505050565b81516001600160401b0381111562000143576200014362000082565b6200015b8162000154845462000098565b84620000d4565b602080601f8311600181146200019357600084156200017a5750858301515b600019600386901b1c1916600185901b1785556200011e565b600085815260208120601f198616915b82811015620001c457888601518255948401946001909101908401620001a3565b5085821015620001e35787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b61197380620002036000396000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c8063313ce567116100cd57806396b2db3811610081578063a7d9ad6a11610066578063a7d9ad6a146102f9578063a9059cbb1461030c578063dd62ed3e1461031f57600080fd5b806396b2db38146102d3578063a42c0af9146102e657600080fd5b8063722713f7116100b2578063722713f7146102b05780638269bcc3146102b857806395d89b41146102cb57600080fd5b8063313ce5671461026757806370a082311461027657600080fd5b806313691c761161012457806323b872dd1161010957806323b872dd1461022e57806326a9b3f1146102415780632893c5b01461025457600080fd5b806313691c761461021257806318160ddd1461022757600080fd5b8063043d20851461015657806306fdde03146101b957806308a2032a146101ce578063095ea7b3146101ef575b600080fd5b61018f61016436600461146b565b73ffffffffffffffffffffffffffffffffffffffff9081166000908152602081905260409020541690565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6101c1610354565b6040516101b091906114ea565b6101e16101dc366004611515565b6103e6565b6040519081526020016101b0565b6102026101fd366004611573565b61041d565b60405190151581526020016101b0565b61022561022036600461159d565b610437565b005b60006101e1565b6101e161023c3660046115e1565b61044e565b61020261024f36600461161d565b610470565b61022561026236600461159d565b610524565b604051600681526020016101b0565b6101e161028436600461146b565b73ffffffffffffffffffffffffffffffffffffffff166000908152600160208190526040909120015490565b6101e1610536565b6102026102c636600461146b565b610546565b6101c16105ca565b6101e16102e136600461161d565b6105d9565b6102026102f436600461164e565b61065c565b6101e161030736600461164e565b610684565b6101e161031a366004611573565b6106a1565b61033261032d36600461169c565b6106b7565b60408051825181526020808401519082015291810151908201526060016101b0565b606060048054610363906116cf565b80601f016020809104026020016040519081016040528092919081815260200182805461038f906116cf565b80156103dc5780601f106103b1576101008083540402835291602001916103dc565b820191906000526020600020905b8154815290600101906020018083116103bf57829003601f168201915b5050505050905090565b600033816103fb6103f6856117c3565b610736565b90506104088683836107e2565b6104138686836108cf565b9695505050505050565b60003361042b818585610981565b60019150505b92915050565b6104498261044483610b93565b610c03565b505050565b60003361045c8582856107e2565b6104678585856108cf565b95945050505050565b60008061047c33610c68565b905082156104d45733600090815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff88168452909152902080546104c9906104c390610c9e565b83610cbb565b60019091015561042b565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260026020908152604080832033845290915290208054610513906104c390610c9e565b600290910155600191505092915050565b6104498261053183610b93565b610da0565b600061054133610dfe565b905090565b60008061055233610dfe565b33600090815260208190526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff861617905590506105ab8184610cbb565b3360009081526001602081905260409091208101919091559392505050565b606060058054610363906116cf565b600081156106225733600090815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915290205461061b90610c9e565b9050610431565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260026020908152604080832033845290915290205461061b90610c9e565b6000338161066c6103f6856117c3565b9050610679828683610981565b506001949350505050565b600033816106946103f6856117c3565b90506104678286836108cf565b6000336106af8185856108cf565b949350505050565b6106db60405180606001604052806000815260200160008152602001600081525090565b5073ffffffffffffffffffffffffffffffffffffffff91821660009081526002602081815260408084209490951683529283529083902083516060810185528154815260018201549381019390935201549181019190915290565b805160208201516040517fe4f36e1000000000000000000000000000000000000000000000000000000000815260009260649263e4f36e109261079f927f04000000000000000000000000000000000000000000000000000000000000009290916004016118b5565b6020604051808303816000875af11580156107be573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061043191906118f6565b73ffffffffffffffffffffffffffffffffffffffff831660009081526001602052604081205461081190610c9e565b73ffffffffffffffffffffffffffffffffffffffff80861660009081526002602090815260408083209388168352929052908120549192509061085390610c9e565b905060006108718261086c67ffffffffffffffff610b93565b610e2d565b9050600061087f8486610ead565b9050600061088d8487610ead565b905060006108b76108a7856108a28686610ec2565b610ec2565b6108b1878a610ed6565b87610eeb565b90506108c4898983610981565b505050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff8416610926576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8316610976576040517fec442f050000000000000000000000000000000000000000000000000000000081526000600482015260240161091d565b6106af848484610fb0565b73ffffffffffffffffffffffffffffffffffffffff83166109d1576040517fe602df050000000000000000000000000000000000000000000000000000000081526000600482015260240161091d565b73ffffffffffffffffffffffffffffffffffffffff8216610a21576040517f94280d620000000000000000000000000000000000000000000000000000000081526000600482015260240161091d565b6000610a2c82611142565b90506000610a3985610c68565b90506000610a478483610cbb565b9050610a5285610c68565b91506000610a608584610cbb565b9050604051806060016040528085815260200183815260200182815250600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000820151816000015560208201518160010155604082015181600201559050508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fb3fd5071835887567a0671151121894ddccc2842f1d10bedad13e0d17cace9a78484604051610b82929190918252602082015260400190565b60405180910390a350505050505050565b6040517fd9b60b600000000000000000000000000000000000000000000000000000000081527f0400000000000000000000000000000000000000000000000000000000000000600482015267ffffffffffffffff8216602482015260009060649063d9b60b609060440161079f565b600073ffffffffffffffffffffffffffffffffffffffff8316610c55576040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526000600482015260240161091d565b610c6183600084610fb0565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff80821660009081526020819052604081205490911680610431575090919050565b600081600003610cb2576104316000610b93565b6104318261119c565b60408051606083901b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660208201528151601481830301815260348201928390527f3c6f0e6800000000000000000000000000000000000000000000000000000000909252600091606491633c6f0e6891610d5d917f04000000000000000000000000000000000000000000000000000000000000009188916038016118b5565b6020604051808303816000875af1158015610d7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6191906118f6565b600073ffffffffffffffffffffffffffffffffffffffff8316610df2576040517fec442f050000000000000000000000000000000000000000000000000000000081526000600482015260240161091d565b610c6160008484610fb0565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260016020526040812054610c6181610c9e565b60006064637c12a1eb610e42600480856111ac565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681527fffffff000000000000000000000000000000000000000000000000000000000090911660048201526024810186905260448101859052606401610d5d565b6000606463dd148693610e42600480856111ac565b6000606463fb7da35f610e428380806111ac565b6000606463371d1bf2610e42600480856111ac565b600060646320cc408d610f00600480856111ac565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681527fffffff000000000000000000000000000000000000000000000000000000000090911660048201526024810187905260448101869052606481018590526084016020604051808303816000875af1158015610f8c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106af91906118f6565b6000808281610fbf6001611209565b905073ffffffffffffffffffffffffffffffffffffffff8716611023576000610fe9600354610c9e565b9050610ff58187611268565b905061100081611142565b600355600061100e88610dfe565b905061101a8188611268565b9450505061106b565b600061102e88610dfe565b9050600061103b88610dfe565b9050600061104a83838a61127d565b9097509450905061105b8a8261133b565b6110658683610ed6565b94505050505b73ffffffffffffffffffffffffffffffffffffffff86166110b3576000611093600354610c9e565b905061109f8184610ed6565b90506110aa81611142565b600355506110bd565b6110bd868461133b565b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f9ed053bb818ff08b8353cd46f78db1f0799f31c9e4458fdb425c10eccd2efc44611116858b610cbb565b611120868b610cbb565b6040805192835260208301919091520160405180910390a39695505050505050565b6000606463c50c9c0260045b60f81b846040518363ffffffff1660e01b815260040161079f9291907fff00000000000000000000000000000000000000000000000000000000000000929092168252602082015260400190565b6000606463d2c135e5600461114e565b60008160028111156111c0576111c0611886565b60ff1660088460048111156111d7576111d7611886565b61ffff16901b61ffff1660108660048111156111f5576111f5611886565b62ffffff16901b171760e81b949350505050565b6000808261121857600061121b565b60015b6040517fd9b60b600000000000000000000000000000000000000000000000000000000081526000600482015260ff9190911660248201819052915060649063d9b60b6090604401610d5d565b60006064638c5d0150610e42600480856111ac565b6000808080808060646356c72d28611298600480808661138e565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b81168252919091166004820152602481018c9052604481018b9052606481018a90526084016060604051808303816000875af1158015611305573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611329919061190f565b919b909a509098509650505050505050565b600061134683610c68565b9050611352828261140e565b73ffffffffffffffffffffffffffffffffffffffff90931660009081526001602081815260409092208551815594909101519301929092555050565b60008160028111156113a2576113a2611886565b60ff1660088460048111156113b9576113b9611886565b61ffff16901b61ffff1660108660048111156113d7576113d7611886565b62ffffff16901b62ffffff1660188860048111156113f7576113f7611886565b63ffffffff16901b17171760e01b95945050505050565b604080518082019091526000808252602082015261142b83611142565b81526114378383610cbb565b602082015292915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461146657600080fd5b919050565b60006020828403121561147d57600080fd5b610c6182611442565b6000815180845260005b818110156114ac57602081850181015186830182015201611490565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081526000610c616020830184611486565b60006040828403121561150f57600080fd5b50919050565b60008060006060848603121561152a57600080fd5b61153384611442565b925061154160208501611442565b9150604084013567ffffffffffffffff81111561155d57600080fd5b611569868287016114fd565b9150509250925092565b6000806040838503121561158657600080fd5b61158f83611442565b946020939093013593505050565b600080604083850312156115b057600080fd5b6115b983611442565b9150602083013567ffffffffffffffff811681146115d657600080fd5b809150509250929050565b6000806000606084860312156115f657600080fd5b6115ff84611442565b925061160d60208501611442565b9150604084013590509250925092565b6000806040838503121561163057600080fd5b61163983611442565b9150602083013580151581146115d657600080fd5b6000806040838503121561166157600080fd5b61166a83611442565b9150602083013567ffffffffffffffff81111561168657600080fd5b611692858286016114fd565b9150509250929050565b600080604083850312156116af57600080fd5b6116b883611442565b91506116c660208401611442565b90509250929050565b600181811c908216806116e357607f821691505b60208210810361150f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff8111828210171561176e5761176e61171c565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156117bb576117bb61171c565b604052919050565b6000604082360312156117d557600080fd5b6117dd61174b565b8235815260208084013567ffffffffffffffff808211156117fd57600080fd5b9085019036601f83011261181057600080fd5b8135818111156118225761182261171c565b611852847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611774565b9150808252368482850101111561186857600080fd5b80848401858401376000908201840152918301919091525092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7fff00000000000000000000000000000000000000000000000000000000000000841681528260208201526060604082015260006104676060830184611486565b60006020828403121561190857600080fd5b5051919050565b60008060006060848603121561192457600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220b225bdd80f2600281144c22cdfc914271367a373835d5fdb760649d1ad4f52a764736f6c63430008130033";
570
570
 
571
571
  type PrivateERC20MockConstructorParams =
572
572
  | [signer?: Signer]