@coti-io/coti-contracts 1.1.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (265) hide show
  1. package/.github/workflows/npm-publish.yml +18 -14
  2. package/README.md +3 -1
  3. package/contracts/disperse/coinByRatio/FixedRatioCoinDisperser.sol +452 -0
  4. package/contracts/disperse/coinByRatio/FixedRatioCoinDisperserLeftoverS1.sol +490 -0
  5. package/contracts/disperse/coinByRatio/FixedRatioCoinDisperserUnlimitedWindow.sol +432 -0
  6. package/contracts/disperse/disperseToken/MintDisperser.sol +120 -0
  7. package/contracts/disperse/disperseToken/TokenDisperser.sol +139 -0
  8. package/contracts/mocks/token/ERC20Mock.sol +19 -0
  9. package/contracts/mocks/token/PrivateERC20/EncryptedTokenReceiverMock.sol +18 -0
  10. package/contracts/mocks/token/PrivateERC20/PrivacyBridgeERC20Mock.sol +13 -0
  11. package/contracts/mocks/token/PrivateERC20/PrivateERC20AuditorSupplyMock.sol +44 -0
  12. package/contracts/mocks/token/PrivateERC20/PrivateERC20CappedMock.sol +23 -0
  13. package/contracts/mocks/token/PrivateERC20/PrivateERC20GtCallerMock.sol +29 -0
  14. package/contracts/mocks/token/PrivateERC20/PrivateERC20Mock.sol +9 -4
  15. package/contracts/mocks/token/PrivateERC20/PrivateERC20ReentrantReceiverMock.sol +39 -0
  16. package/contracts/mocks/token/PrivateERC20/PublicReentrantTokenReceiverMock.sol +29 -0
  17. package/contracts/mocks/token/PrivateERC20/PublicTokenReceiverBoolMock.sol +18 -0
  18. package/contracts/mocks/token/PrivateERC20/PublicTokenReceiverMock.sol +12 -0
  19. package/contracts/mocks/utils/mpc/Arithmetic128TestsContract.sol +123 -0
  20. package/contracts/mocks/utils/mpc/Arithmetic256TestsContract.sol +122 -0
  21. package/contracts/mocks/utils/mpc/Bitwise128TestsContract.sol +65 -0
  22. package/contracts/mocks/utils/mpc/Bitwise256TestsContract.sol +65 -0
  23. package/contracts/mocks/utils/mpc/CheckedArithmetic128WithOverflowBitTestsContract.sol +64 -0
  24. package/contracts/mocks/utils/mpc/CheckedArithmetic256WithOverflowBitTestsContract.sol +64 -0
  25. package/contracts/mocks/utils/mpc/Comparison128TestsContract.sol +98 -0
  26. package/contracts/mocks/utils/mpc/Comparison256TestsContract.sol +98 -0
  27. package/contracts/mocks/utils/mpc/MinMax128TestsContract.sol +44 -0
  28. package/contracts/mocks/utils/mpc/MinMax256TestsContract.sol +44 -0
  29. package/contracts/mocks/utils/mpc/MinimalImplementation.sol +55 -0
  30. package/contracts/mocks/utils/mpc/MinimalProxy.sol +27 -0
  31. package/contracts/mocks/utils/mpc/MpcOperations128TestContract.sol +267 -0
  32. package/contracts/mocks/utils/mpc/MpcOperationsTestContract.sol +334 -0
  33. package/contracts/mocks/utils/mpc/Mux128TestsContract.sol +24 -0
  34. package/contracts/mocks/utils/mpc/Mux256TestsContract.sol +24 -0
  35. package/contracts/mocks/utils/mpc/OnBoard128TestsContract.sol +93 -0
  36. package/contracts/mocks/utils/mpc/OnBoard256TestsContract.sol +116 -0
  37. package/contracts/mocks/utils/mpc/PrivacyImplementationV1.sol +157 -0
  38. package/contracts/mocks/utils/mpc/PrivacyImplementationV2.sol +133 -0
  39. package/contracts/mocks/utils/mpc/PrivacyProxy.sol +137 -0
  40. package/contracts/mocks/utils/mpc/Random128TestsContract.sol +32 -0
  41. package/contracts/mocks/utils/mpc/Random256TestsContract.sol +32 -0
  42. package/contracts/mocks/utils/mpc/Shift128TestsContract.sol +36 -0
  43. package/contracts/mocks/utils/mpc/Shift256TestsContract.sol +36 -0
  44. package/contracts/mocks/utils/mpc/Transfer128TestsContract.sol +29 -0
  45. package/contracts/mocks/utils/mpc/Transfer256TestsContract.sol +29 -0
  46. package/contracts/mocks/utils/mpc/TransferWithAllowance128TestsContract.sol +32 -0
  47. package/contracts/mocks/utils/mpc/TransferWithAllowance256TestsContract.sol +32 -0
  48. package/contracts/mocks/utils/mpc/ValidateCiphertext128TestsContract.sol +59 -0
  49. package/contracts/mocks/utils/mpc/ValidateCiphertext256TestsContract.sol +63 -0
  50. package/contracts/mocks/utils/mpc/ValidateCiphertextTestsContract.sol +99 -0
  51. package/contracts/mocks/wallet/PrivateERC20Wallet/PrivateERC20WalletMock.sol +7 -6
  52. package/contracts/node/CotiNodeRewards.sol +199 -0
  53. package/contracts/node/SoulboundNodeNFT.sol +519 -0
  54. package/contracts/privacyBridge/PrivacyBridge.sol +318 -0
  55. package/contracts/privacyBridge/PrivacyBridgeCotiNative.sol +268 -0
  56. package/contracts/privacyBridge/PrivacyBridgeERC20.sol +251 -0
  57. package/contracts/privacyBridge/PrivacyBridgeUSDCe.sol +16 -0
  58. package/contracts/privacyBridge/PrivacyBridgeUSDT.sol +17 -0
  59. package/contracts/privacyBridge/PrivacyBridgeWADA.sol +17 -0
  60. package/contracts/privacyBridge/PrivacyBridgeWBTC.sol +17 -0
  61. package/contracts/privacyBridge/PrivacyBridgeWETH.sol +17 -0
  62. package/contracts/privacyBridge/PrivacyBridgegCoti.sol +17 -0
  63. package/contracts/token/PrivateERC20/IPrivateERC20.sol +273 -40
  64. package/contracts/token/PrivateERC20/ITokenReceiver.sol +17 -0
  65. package/contracts/token/PrivateERC20/ITokenReceiverEncrypted.sol +20 -0
  66. package/contracts/token/PrivateERC20/PrivateERC20.sol +861 -152
  67. package/contracts/token/PrivateERC20/tokens/PrivateBridgedUSDC.sol +17 -0
  68. package/contracts/token/PrivateERC20/tokens/PrivateCOTI.sol +13 -0
  69. package/contracts/token/PrivateERC20/tokens/PrivateCOTITreasuryGovernanceToken.sol +17 -0
  70. package/contracts/token/PrivateERC20/tokens/PrivateTetherUSD.sol +17 -0
  71. package/contracts/token/PrivateERC20/tokens/PrivateWrappedADA.sol +17 -0
  72. package/contracts/token/PrivateERC20/tokens/PrivateWrappedBTC.sol +17 -0
  73. package/contracts/token/PrivateERC20/tokens/PrivateWrappedEther.sol +13 -0
  74. package/contracts/utils/mpc/MpcCore.sol +10780 -4962
  75. package/contracts/utils/mpc/MpcInterface.sol +7 -2
  76. package/hardhat/gasPriceBump.ts +60 -0
  77. package/hardhat.config.ts +60 -12
  78. package/package.json +21 -3
  79. package/scripts/deploySoulboundNodeNFT.ts +57 -0
  80. package/test/token/PrivateERC20/PrivacyBridge.fees.test.ts +327 -0
  81. package/test/token/PrivateERC20/PrivateERC20.test.ts +1109 -268
  82. package/test/utils/mpc/Bitwise128.test.ts +92 -0
  83. package/test/utils/mpc/Bitwise256.test.ts +101 -0
  84. package/test/utils/mpc/BuildInputText128.test.ts +398 -0
  85. package/test/utils/mpc/CheckedArithmetic128.test.ts +45 -0
  86. package/test/utils/mpc/CheckedArithmetic256.test.ts +45 -0
  87. package/test/utils/mpc/Comparison128.test.ts +48 -0
  88. package/test/utils/mpc/Comparison256.test.ts +48 -0
  89. package/test/utils/mpc/InvalidCiphertext.test.ts +179 -0
  90. package/test/utils/mpc/InvalidCiphertext128.test.ts +179 -0
  91. package/test/utils/mpc/InvalidCiphertext256.test.ts +201 -0
  92. package/test/utils/mpc/InvalidTransfer128.test.ts +166 -0
  93. package/test/utils/mpc/InvalidTransfer256.test.ts +158 -0
  94. package/test/utils/mpc/MinMax128.test.ts +44 -0
  95. package/test/utils/mpc/MinMax256.test.ts +44 -0
  96. package/test/utils/mpc/MinimalProxyDemo.test.ts +280 -0
  97. package/test/utils/mpc/MpcOperations.test.ts +589 -0
  98. package/test/utils/mpc/MpcOperations128.test.ts +632 -0
  99. package/test/utils/mpc/Mux128.test.ts +41 -0
  100. package/test/utils/mpc/Mux256.test.ts +41 -0
  101. package/test/utils/mpc/NegativeCases.test.ts +478 -0
  102. package/test/utils/mpc/NegativeCases128.test.ts +237 -0
  103. package/test/utils/mpc/NegativeCases256.test.ts +236 -0
  104. package/test/utils/mpc/OnBoard128.test.ts +90 -0
  105. package/test/utils/mpc/OnBoard256.test.ts +114 -0
  106. package/test/utils/mpc/Precompile128.test.ts +51 -0
  107. package/test/utils/mpc/Precompile256.test.ts +115 -0
  108. package/test/utils/mpc/ProxyValidation.test.ts +199 -0
  109. package/test/utils/mpc/Random128.test.ts +47 -0
  110. package/test/utils/mpc/Random256.test.ts +47 -0
  111. package/test/utils/mpc/Shift128.test.ts +41 -0
  112. package/test/utils/mpc/Shift256.test.ts +41 -0
  113. package/test/utils/mpc/Transfer128.test.ts +46 -0
  114. package/test/utils/mpc/Transfer256.test.ts +46 -0
  115. package/test/utils/mpc/TransferWithAllowance128.test.ts +48 -0
  116. package/test/utils/mpc/TransferWithAllowance256.test.ts +48 -0
  117. package/test/utils/mpc/UpgradeablePrivacyProxy.test.ts +307 -0
  118. package/test/utils/mpc/ValidateCiphertext.test.ts +221 -0
  119. package/test/utils/mpc/ValidateCiphertext256.test.ts +161 -0
  120. package/test/utils/mpc/ValidateCiphertext256Decryption.test.ts +383 -0
  121. package/test/utils/mpc/WalletEncryptionFailures.test.ts +494 -0
  122. package/test/utils/privateErc20Helpers.ts +97 -0
  123. package/typechain-types/@openzeppelin/contracts/access/Ownable.ts +153 -0
  124. package/typechain-types/@openzeppelin/contracts/access/index.ts +4 -0
  125. package/typechain-types/@openzeppelin/contracts/index.ts +2 -0
  126. package/typechain-types/@openzeppelin/contracts/token/ERC20/IERC20.ts +262 -0
  127. package/typechain-types/@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.ts +143 -0
  128. package/typechain-types/@openzeppelin/contracts/token/ERC20/extensions/index.ts +4 -0
  129. package/typechain-types/@openzeppelin/contracts/token/ERC20/index.ts +6 -0
  130. package/typechain-types/@openzeppelin/contracts/token/index.ts +2 -0
  131. package/typechain-types/contracts/disperse/coinByRatio/FixedRatioCoinDisperser.ts +679 -0
  132. package/typechain-types/contracts/disperse/coinByRatio/index.ts +4 -0
  133. package/typechain-types/contracts/disperse/disperseToken/MintDisperser.sol/IMintableERC20.ts +97 -0
  134. package/typechain-types/contracts/disperse/disperseToken/MintDisperser.sol/MintDisperser.ts +206 -0
  135. package/typechain-types/contracts/disperse/disperseToken/MintDisperser.sol/index.ts +5 -0
  136. package/typechain-types/contracts/disperse/disperseToken/TokenDisperser.ts +191 -0
  137. package/typechain-types/contracts/disperse/disperseToken/index.ts +6 -0
  138. package/typechain-types/contracts/disperse/index.ts +7 -0
  139. package/typechain-types/contracts/index.ts +2 -0
  140. package/typechain-types/contracts/mocks/token/PrivateERC20/PrivateERC20Mock.ts +77 -60
  141. package/typechain-types/contracts/mocks/utils/mpc/Arithmetic128TestsContract.ts +311 -0
  142. package/typechain-types/contracts/mocks/utils/mpc/Arithmetic256TestsContract.ts +311 -0
  143. package/typechain-types/contracts/mocks/utils/mpc/Bitwise128TestsContract.ts +179 -0
  144. package/typechain-types/contracts/mocks/utils/mpc/Bitwise256TestsContract.ts +179 -0
  145. package/typechain-types/contracts/mocks/utils/mpc/CheckedArithmetic128WithOverflowBitTestsContract.ts +206 -0
  146. package/typechain-types/contracts/mocks/utils/mpc/CheckedArithmetic256WithOverflowBitTestsContract.ts +206 -0
  147. package/typechain-types/contracts/mocks/utils/mpc/Comparison128TestsContract.ts +278 -0
  148. package/typechain-types/contracts/mocks/utils/mpc/Comparison256TestsContract.ts +278 -0
  149. package/typechain-types/contracts/mocks/utils/mpc/MinMax128TestsContract.ts +142 -0
  150. package/typechain-types/contracts/mocks/utils/mpc/MinMax256TestsContract.ts +142 -0
  151. package/typechain-types/contracts/mocks/utils/mpc/MinimalImplementation.ts +259 -0
  152. package/typechain-types/contracts/mocks/utils/mpc/MinimalProxy.ts +90 -0
  153. package/typechain-types/contracts/mocks/utils/mpc/MpcOperations128TestContract.ts +388 -0
  154. package/typechain-types/contracts/mocks/utils/mpc/MpcOperationsTestContract.ts +455 -0
  155. package/typechain-types/contracts/mocks/utils/mpc/Mux128TestsContract.ts +109 -0
  156. package/typechain-types/contracts/mocks/utils/mpc/Mux256TestsContract.ts +109 -0
  157. package/typechain-types/contracts/mocks/utils/mpc/OnBoard128TestsContract.ts +166 -0
  158. package/typechain-types/contracts/mocks/utils/mpc/OnBoard256TestsContract.ts +194 -0
  159. package/typechain-types/contracts/mocks/utils/mpc/PrivacyImplementationV1.ts +385 -0
  160. package/typechain-types/contracts/mocks/utils/mpc/PrivacyImplementationV2.ts +441 -0
  161. package/typechain-types/contracts/mocks/utils/mpc/PrivacyProxy.ts +201 -0
  162. package/typechain-types/contracts/mocks/utils/mpc/Random128TestsContract.ts +131 -0
  163. package/typechain-types/contracts/mocks/utils/mpc/Random256TestsContract.ts +131 -0
  164. package/typechain-types/contracts/mocks/utils/mpc/Shift128TestsContract.ts +142 -0
  165. package/typechain-types/contracts/mocks/utils/mpc/Shift256TestsContract.ts +142 -0
  166. package/typechain-types/contracts/mocks/utils/mpc/Transfer128TestsContract.ts +109 -0
  167. package/typechain-types/contracts/mocks/utils/mpc/Transfer256TestsContract.ts +109 -0
  168. package/typechain-types/contracts/mocks/utils/mpc/TransferWithAllowance128TestsContract.ts +128 -0
  169. package/typechain-types/contracts/mocks/utils/mpc/TransferWithAllowance256TestsContract.ts +128 -0
  170. package/typechain-types/contracts/mocks/utils/mpc/ValidateCiphertext128TestsContract.ts +198 -0
  171. package/typechain-types/contracts/mocks/utils/mpc/ValidateCiphertext256TestsContract.ts +182 -0
  172. package/typechain-types/contracts/mocks/utils/mpc/ValidateCiphertextTestsContract.ts +257 -0
  173. package/typechain-types/contracts/mocks/utils/mpc/index.ts +32 -8
  174. package/typechain-types/contracts/token/PrivateERC20/IPrivateERC20.ts +77 -60
  175. package/typechain-types/contracts/token/PrivateERC20/PrivateERC20.ts +77 -60
  176. package/typechain-types/contracts/utils/mpc/MpcInterface.sol/ExtendedOperations.ts +111 -10
  177. package/typechain-types/factories/@openzeppelin/contracts/access/Ownable__factory.ts +74 -0
  178. package/typechain-types/factories/@openzeppelin/contracts/access/index.ts +4 -0
  179. package/typechain-types/factories/@openzeppelin/contracts/index.ts +1 -0
  180. package/typechain-types/factories/@openzeppelin/contracts/token/ERC20/IERC20__factory.ts +205 -0
  181. package/typechain-types/factories/@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit__factory.ts +100 -0
  182. package/typechain-types/factories/@openzeppelin/contracts/token/ERC20/extensions/index.ts +4 -0
  183. package/typechain-types/factories/@openzeppelin/contracts/token/ERC20/index.ts +5 -0
  184. package/typechain-types/factories/@openzeppelin/contracts/token/index.ts +1 -0
  185. package/typechain-types/factories/contracts/disperse/coinByRatio/FixedRatioCoinDisperser__factory.ts +759 -0
  186. package/typechain-types/factories/contracts/disperse/coinByRatio/index.ts +4 -0
  187. package/typechain-types/factories/contracts/disperse/disperseToken/MintDisperser.sol/IMintableERC20__factory.ts +43 -0
  188. package/typechain-types/factories/contracts/disperse/disperseToken/MintDisperser.sol/MintDisperser__factory.ts +185 -0
  189. package/typechain-types/factories/contracts/disperse/disperseToken/MintDisperser.sol/index.ts +5 -0
  190. package/typechain-types/factories/contracts/disperse/disperseToken/TokenDisperser__factory.ts +198 -0
  191. package/typechain-types/factories/contracts/disperse/disperseToken/index.ts +5 -0
  192. package/typechain-types/factories/contracts/disperse/index.ts +5 -0
  193. package/typechain-types/factories/contracts/index.ts +1 -0
  194. package/typechain-types/factories/contracts/mocks/access/DataPrivacyFramework/DataPrivacyFrameworkMock__factory.ts +1 -1
  195. package/typechain-types/factories/contracts/mocks/token/PrivateERC20/PrivateERC20Mock__factory.ts +179 -47
  196. package/typechain-types/factories/contracts/mocks/utils/mpc/Arithmetic128TestsContract__factory.ts +330 -0
  197. package/typechain-types/factories/contracts/mocks/utils/mpc/Arithmetic256TestsContract__factory.ts +330 -0
  198. package/typechain-types/factories/contracts/mocks/utils/mpc/ArithmeticTestsContract__factory.ts +1 -1
  199. package/typechain-types/factories/contracts/mocks/utils/mpc/Bitwise128TestsContract__factory.ts +184 -0
  200. package/typechain-types/factories/contracts/mocks/utils/mpc/Bitwise256TestsContract__factory.ts +184 -0
  201. package/typechain-types/factories/contracts/mocks/utils/mpc/BitwiseTestsContract__factory.ts +1 -1
  202. package/typechain-types/factories/contracts/mocks/utils/mpc/CheckedArithmetic128WithOverflowBitTestsContract__factory.ts +203 -0
  203. package/typechain-types/factories/contracts/mocks/utils/mpc/CheckedArithmetic256WithOverflowBitTestsContract__factory.ts +203 -0
  204. package/typechain-types/factories/contracts/mocks/utils/mpc/CheckedArithmeticWIthOverflowBitTestsContract.sol/CheckedArithmeticWithOverflowBitTestsContract__factory.ts +1 -1
  205. package/typechain-types/factories/contracts/mocks/utils/mpc/Comparison128TestsContract__factory.ts +295 -0
  206. package/typechain-types/factories/contracts/mocks/utils/mpc/Comparison1TestsContract__factory.ts +1 -1
  207. package/typechain-types/factories/contracts/mocks/utils/mpc/Comparison256TestsContract__factory.ts +295 -0
  208. package/typechain-types/factories/contracts/mocks/utils/mpc/Comparison2TestsContract__factory.ts +1 -1
  209. package/typechain-types/factories/contracts/mocks/utils/mpc/MinMax128TestsContract__factory.ts +147 -0
  210. package/typechain-types/factories/contracts/mocks/utils/mpc/MinMax256TestsContract__factory.ts +147 -0
  211. package/typechain-types/factories/contracts/mocks/utils/mpc/MinMaxTestsContract__factory.ts +1 -1
  212. package/typechain-types/factories/contracts/mocks/utils/mpc/MinimalImplementation__factory.ts +263 -0
  213. package/typechain-types/factories/contracts/mocks/utils/mpc/MinimalProxy__factory.ts +104 -0
  214. package/typechain-types/factories/contracts/mocks/utils/mpc/Miscellaneous1TestsContract__factory.ts +1 -1
  215. package/typechain-types/factories/contracts/mocks/utils/mpc/MiscellaneousTestsContract__factory.ts +1 -1
  216. package/typechain-types/factories/contracts/mocks/utils/mpc/MpcOperations128TestContract__factory.ts +723 -0
  217. package/typechain-types/factories/contracts/mocks/utils/mpc/MpcOperationsTestContract__factory.ts +1410 -0
  218. package/typechain-types/factories/contracts/mocks/utils/mpc/Mux128TestsContract__factory.ts +115 -0
  219. package/typechain-types/factories/contracts/mocks/utils/mpc/Mux256TestsContract__factory.ts +115 -0
  220. package/typechain-types/factories/contracts/mocks/utils/mpc/OffboardToUserKeyTestContract__factory.ts +1 -1
  221. package/typechain-types/factories/contracts/mocks/utils/mpc/OnBoard128TestsContract__factory.ts +175 -0
  222. package/typechain-types/factories/contracts/mocks/utils/mpc/OnBoard256TestsContract__factory.ts +205 -0
  223. package/typechain-types/factories/contracts/mocks/utils/mpc/PrivacyImplementationV1__factory.ts +521 -0
  224. package/typechain-types/factories/contracts/mocks/utils/mpc/PrivacyImplementationV2__factory.ts +648 -0
  225. package/typechain-types/factories/contracts/mocks/utils/mpc/PrivacyProxy__factory.ts +179 -0
  226. package/typechain-types/factories/contracts/mocks/utils/mpc/Random128TestsContract__factory.ts +131 -0
  227. package/typechain-types/factories/contracts/mocks/utils/mpc/Random256TestsContract__factory.ts +131 -0
  228. package/typechain-types/factories/contracts/mocks/utils/mpc/Shift128TestsContract__factory.ts +147 -0
  229. package/typechain-types/factories/contracts/mocks/utils/mpc/Shift256TestsContract__factory.ts +147 -0
  230. package/typechain-types/factories/contracts/mocks/utils/mpc/ShiftTestsContract__factory.ts +1 -1
  231. package/typechain-types/factories/contracts/mocks/utils/mpc/StringTestsContract__factory.ts +1 -1
  232. package/typechain-types/factories/contracts/mocks/utils/mpc/Transfer128TestsContract__factory.ts +135 -0
  233. package/typechain-types/factories/contracts/mocks/utils/mpc/Transfer256TestsContract__factory.ts +135 -0
  234. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferScalarTestsContract__factory.ts +1 -1
  235. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferTestsContract__factory.ts +1 -1
  236. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance128TestsContract__factory.ts +154 -0
  237. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance256TestsContract__factory.ts +154 -0
  238. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance64_16TestsContract__factory.ts +1 -1
  239. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance64_32TestsContract__factory.ts +1 -1
  240. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance64_64TestsContract__factory.ts +1 -1
  241. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance64_8TestsContract__factory.ts +1 -1
  242. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowanceScalarTestsContract__factory.ts +1 -1
  243. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowanceTestsContract__factory.ts +1 -1
  244. package/typechain-types/factories/contracts/mocks/utils/mpc/ValidateCiphertext128TestsContract__factory.ts +190 -0
  245. package/typechain-types/factories/contracts/mocks/utils/mpc/ValidateCiphertext256TestsContract__factory.ts +210 -0
  246. package/typechain-types/factories/contracts/mocks/utils/mpc/ValidateCiphertextTestsContract__factory.ts +260 -0
  247. package/typechain-types/factories/contracts/mocks/utils/mpc/index.ts +32 -8
  248. package/typechain-types/factories/contracts/mocks/wallet/PrivateERC20Wallet/PrivateERC20WalletMock__factory.ts +7 -7
  249. package/typechain-types/factories/contracts/token/PrivateERC20/IPrivateERC20__factory.ts +174 -42
  250. package/typechain-types/factories/contracts/token/PrivateERC20/PrivateERC20__factory.ts +174 -42
  251. package/typechain-types/factories/contracts/utils/mpc/MpcInterface.sol/ExtendedOperations__factory.ts +126 -0
  252. package/typechain-types/hardhat.d.ts +638 -80
  253. package/typechain-types/index.ts +78 -16
  254. package/contracts/mocks/utils/mpc/Arithmetic128BitTestsContract.sol +0 -260
  255. package/contracts/mocks/utils/mpc/Arithmetic256BitTestsContract.sol +0 -264
  256. package/contracts/mocks/utils/mpc/Bitwise128BitTestsContract.sol +0 -91
  257. package/contracts/mocks/utils/mpc/Bitwise256BitTestsContract.sol +0 -91
  258. package/contracts/mocks/utils/mpc/Comparison128BitTestsContract.sol +0 -158
  259. package/contracts/mocks/utils/mpc/Comparison256BitTestsContract.sol +0 -158
  260. package/contracts/mocks/utils/mpc/Miscellaneous128BitTestsContract.sol +0 -185
  261. package/contracts/mocks/utils/mpc/Miscellaneous256BitTestsContract.sol +0 -190
  262. package/contracts/mocks/utils/mpc/README.md +0 -486
  263. package/test/utils/mpc/Unsigned128BitIntegers.test.ts +0 -945
  264. package/test/utils/mpc/Unsigned256BitIntegers.test.ts +0 -1124
  265. package/test/utils/mpc/helpers.ts +0 -77
@@ -0,0 +1,295 @@
1
+ /* Autogenerated file. Do not edit manually. */
2
+ /* tslint:disable */
3
+ /* eslint-disable */
4
+ import {
5
+ Contract,
6
+ ContractFactory,
7
+ ContractTransactionResponse,
8
+ Interface,
9
+ } from "ethers";
10
+ import type { Signer, ContractDeployTransaction, ContractRunner } from "ethers";
11
+ import type { NonPayableOverrides } from "../../../../../common";
12
+ import type {
13
+ Comparison128TestsContract,
14
+ Comparison128TestsContractInterface,
15
+ } from "../../../../../contracts/mocks/utils/mpc/Comparison128TestsContract";
16
+
17
+ const _abi = [
18
+ {
19
+ inputs: [
20
+ {
21
+ internalType: "uint128",
22
+ name: "a",
23
+ type: "uint128",
24
+ },
25
+ {
26
+ internalType: "uint128",
27
+ name: "b",
28
+ type: "uint128",
29
+ },
30
+ ],
31
+ name: "eqTest",
32
+ outputs: [
33
+ {
34
+ internalType: "bool",
35
+ name: "",
36
+ type: "bool",
37
+ },
38
+ ],
39
+ stateMutability: "nonpayable",
40
+ type: "function",
41
+ },
42
+ {
43
+ inputs: [
44
+ {
45
+ internalType: "uint128",
46
+ name: "a",
47
+ type: "uint128",
48
+ },
49
+ {
50
+ internalType: "uint128",
51
+ name: "b",
52
+ type: "uint128",
53
+ },
54
+ ],
55
+ name: "geTest",
56
+ outputs: [
57
+ {
58
+ internalType: "bool",
59
+ name: "",
60
+ type: "bool",
61
+ },
62
+ ],
63
+ stateMutability: "nonpayable",
64
+ type: "function",
65
+ },
66
+ {
67
+ inputs: [],
68
+ name: "getEqResult",
69
+ outputs: [
70
+ {
71
+ internalType: "bool",
72
+ name: "",
73
+ type: "bool",
74
+ },
75
+ ],
76
+ stateMutability: "view",
77
+ type: "function",
78
+ },
79
+ {
80
+ inputs: [],
81
+ name: "getGeResult",
82
+ outputs: [
83
+ {
84
+ internalType: "bool",
85
+ name: "",
86
+ type: "bool",
87
+ },
88
+ ],
89
+ stateMutability: "view",
90
+ type: "function",
91
+ },
92
+ {
93
+ inputs: [],
94
+ name: "getGtResult",
95
+ outputs: [
96
+ {
97
+ internalType: "bool",
98
+ name: "",
99
+ type: "bool",
100
+ },
101
+ ],
102
+ stateMutability: "view",
103
+ type: "function",
104
+ },
105
+ {
106
+ inputs: [],
107
+ name: "getLeResult",
108
+ outputs: [
109
+ {
110
+ internalType: "bool",
111
+ name: "",
112
+ type: "bool",
113
+ },
114
+ ],
115
+ stateMutability: "view",
116
+ type: "function",
117
+ },
118
+ {
119
+ inputs: [],
120
+ name: "getLtResult",
121
+ outputs: [
122
+ {
123
+ internalType: "bool",
124
+ name: "",
125
+ type: "bool",
126
+ },
127
+ ],
128
+ stateMutability: "view",
129
+ type: "function",
130
+ },
131
+ {
132
+ inputs: [],
133
+ name: "getNeResult",
134
+ outputs: [
135
+ {
136
+ internalType: "bool",
137
+ name: "",
138
+ type: "bool",
139
+ },
140
+ ],
141
+ stateMutability: "view",
142
+ type: "function",
143
+ },
144
+ {
145
+ inputs: [
146
+ {
147
+ internalType: "uint128",
148
+ name: "a",
149
+ type: "uint128",
150
+ },
151
+ {
152
+ internalType: "uint128",
153
+ name: "b",
154
+ type: "uint128",
155
+ },
156
+ ],
157
+ name: "gtTest",
158
+ outputs: [
159
+ {
160
+ internalType: "bool",
161
+ name: "",
162
+ type: "bool",
163
+ },
164
+ ],
165
+ stateMutability: "nonpayable",
166
+ type: "function",
167
+ },
168
+ {
169
+ inputs: [
170
+ {
171
+ internalType: "uint128",
172
+ name: "a",
173
+ type: "uint128",
174
+ },
175
+ {
176
+ internalType: "uint128",
177
+ name: "b",
178
+ type: "uint128",
179
+ },
180
+ ],
181
+ name: "leTest",
182
+ outputs: [
183
+ {
184
+ internalType: "bool",
185
+ name: "",
186
+ type: "bool",
187
+ },
188
+ ],
189
+ stateMutability: "nonpayable",
190
+ type: "function",
191
+ },
192
+ {
193
+ inputs: [
194
+ {
195
+ internalType: "uint128",
196
+ name: "a",
197
+ type: "uint128",
198
+ },
199
+ {
200
+ internalType: "uint128",
201
+ name: "b",
202
+ type: "uint128",
203
+ },
204
+ ],
205
+ name: "ltTest",
206
+ outputs: [
207
+ {
208
+ internalType: "bool",
209
+ name: "",
210
+ type: "bool",
211
+ },
212
+ ],
213
+ stateMutability: "nonpayable",
214
+ type: "function",
215
+ },
216
+ {
217
+ inputs: [
218
+ {
219
+ internalType: "uint128",
220
+ name: "a",
221
+ type: "uint128",
222
+ },
223
+ {
224
+ internalType: "uint128",
225
+ name: "b",
226
+ type: "uint128",
227
+ },
228
+ ],
229
+ name: "neTest",
230
+ outputs: [
231
+ {
232
+ internalType: "bool",
233
+ name: "",
234
+ type: "bool",
235
+ },
236
+ ],
237
+ stateMutability: "nonpayable",
238
+ type: "function",
239
+ },
240
+ ] as const;
241
+
242
+ const _bytecode =
243
+ "0x608060405234801561001057600080fd5b506107a8806100206000396000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c80632ff336bf116100815780637d2e0f481161005b5780637d2e0f48146101945780639a0c13d8146101a6578063df2ce28e146101b157600080fd5b80632ff336bf1461015b578063645e46371461016e578063748533df1461018157600080fd5b806329875348116100b257806329875348146101235780632e5950eb146101365780632fd37f4b1461014a57600080fd5b8063053cfe98146100d9578063097c446b146101005780630d980bf014610113575b600080fd5b6100ec6100e7366004610720565b6101c4565b604051901515815260200160405180910390f35b6100ec61010e366004610720565b61022d565b600054610100900460ff166100ec565b600054640100000000900460ff166100ec565b60005465010000000000900460ff166100ec565b60005462010000900460ff166100ec565b6100ec610169366004610720565b610292565b6100ec61017c366004610720565b6102f9565b6100ec61018f366004610720565b610359565b6000546301000000900460ff166100ec565b60005460ff166100ec565b6100ec6101bf366004610720565b6103bf565b6000806101d084610427565b905060006101dd84610427565b905060006101f36101ee84846104e3565b6105a8565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100831515021790559695505050505050565b60008061023984610427565b9050600061024684610427565b905060006102576101ee8484610639565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff1662010000831515021790559695505050505050565b60008061029e84610427565b905060006102ab84610427565b905060006102bc6101ee848461064e565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff16640100000000831515021790559695505050505050565b60008061030584610427565b9050600061031284610427565b905060006103236101ee8484610663565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168215151790559695505050505050565b60008061036584610427565b9050600061037284610427565b905060006103836101ee8484610678565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff166301000000831515021790559695505050505050565b6000806103cb84610427565b905060006103d884610427565b905060006103e96101ee848461068d565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffff1665010000000000831515021790559695505050505050565b6040517fd9b60b600000000000000000000000000000000000000000000000000000000081527f050000000000000000000000000000000000000000000000000000000000000060048201526fffffffffffffffffffffffffffffffff8216602482015260009060649063d9b60b60906044016020604051808303816000875af11580156104b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104dd9190610782565b92915050565b600060646342094c566104f86005808561069e565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681527fffffff0000000000000000000000000000000000000000000000000000000000909116600482015260248101869052604481018590526064016020604051808303816000875af115801561057d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105a19190610782565b9392505050565b6040517f0cfed56100000000000000000000000000000000000000000000000000000000815260006004820181905260248201839052908190606490630cfed561906044016020604051808303816000875af115801561060c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106309190610782565b15159392505050565b6000606463813b20746104f86005808561069e565b6000606463145fca2c6104f86005808561069e565b60006064637c12a1eb6104f86005808561069e565b60006064636d82e45e6104f86005808561069e565b6000606463dd1486936104f8600580855b60008160028111156106b2576106b2610753565b60ff1660088460068111156106c9576106c9610753565b61ffff16901b61ffff1660108660068111156106e7576106e7610753565b62ffffff16901b171760e81b949350505050565b80356fffffffffffffffffffffffffffffffff8116811461071b57600080fd5b919050565b6000806040838503121561073357600080fd5b61073c836106fb565b915061074a602084016106fb565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60006020828403121561079457600080fd5b505191905056fea164736f6c6343000813000a";
244
+
245
+ type Comparison128TestsContractConstructorParams =
246
+ | [signer?: Signer]
247
+ | ConstructorParameters<typeof ContractFactory>;
248
+
249
+ const isSuperArgs = (
250
+ xs: Comparison128TestsContractConstructorParams
251
+ ): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;
252
+
253
+ export class Comparison128TestsContract__factory extends ContractFactory {
254
+ constructor(...args: Comparison128TestsContractConstructorParams) {
255
+ if (isSuperArgs(args)) {
256
+ super(...args);
257
+ } else {
258
+ super(_abi, _bytecode, args[0]);
259
+ }
260
+ }
261
+
262
+ override getDeployTransaction(
263
+ overrides?: NonPayableOverrides & { from?: string }
264
+ ): Promise<ContractDeployTransaction> {
265
+ return super.getDeployTransaction(overrides || {});
266
+ }
267
+ override deploy(overrides?: NonPayableOverrides & { from?: string }) {
268
+ return super.deploy(overrides || {}) as Promise<
269
+ Comparison128TestsContract & {
270
+ deploymentTransaction(): ContractTransactionResponse;
271
+ }
272
+ >;
273
+ }
274
+ override connect(
275
+ runner: ContractRunner | null
276
+ ): Comparison128TestsContract__factory {
277
+ return super.connect(runner) as Comparison128TestsContract__factory;
278
+ }
279
+
280
+ static readonly bytecode = _bytecode;
281
+ static readonly abi = _abi;
282
+ static createInterface(): Comparison128TestsContractInterface {
283
+ return new Interface(_abi) as Comparison128TestsContractInterface;
284
+ }
285
+ static connect(
286
+ address: string,
287
+ runner?: ContractRunner | null
288
+ ): Comparison128TestsContract {
289
+ return new Contract(
290
+ address,
291
+ _abi,
292
+ runner
293
+ ) as unknown as Comparison128TestsContract;
294
+ }
295
+ }
@@ -332,7 +332,7 @@ const _abi = [
332
332
  ] as const;
333
333
 
334
334
  const _bytecode =
335
- "0x608060405234801561001057600080fd5b50612804806100206000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c80637d2e0f48116100765780638b6e7a8c1161005b5780638b6e7a8c1461014f578063acb3816914610162578063ebb571fd1461017557600080fd5b80637d2e0f481461013157806380f937bc1461013c57600080fd5b80632e544aa0116100a75780632e544aa0146100fa5780632e5950eb1461010d578063791175491461011e57600080fd5b806308c90f0d146100c357806329875348146100ea575b600080fd5b6100d66100d13660046124c3565b61018a565b604051901515815260200160405180910390f35b600054610100900460ff166100d6565b6100d6610108366004612547565b610818565b60005462010000900460ff166100d6565b6100d661012c3660046124c3565b6108f6565b60005460ff166100d6565b6100d661014a3660046125ca565b610f6f565b6100d661015d3660046124c3565b611014565b6100d6610170366004612675565b61168e565b61018861018336600461270c565b6116fd565b005b60006101d460405180610100016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6101f860405180606001604052806000815260200160008152602001600081525090565b61022a6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b61026a6040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6102758488886116fd565b600061029161028c86600001518760200151611784565b61184a565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016821515179055604086015160608701519192506102d3916118db565b8452845160608601516102e691906118f0565b84602001818152505061030185604001518660200151611906565b6040850152600061031185610818565b90508115158115151461036b5760405162461bcd60e51b815260206004820152601660248201527f6774546573743a2063617374203136206661696c65640000000000000000000060448201526064015b60405180910390fd5b61037d86608001518760a0015161191c565b8452855160a08701516103909190611931565b8460200181815250506103ab86608001518760200151611947565b8460400181815250506103c686604001518760a0015161195d565b8460600181815250506103e186608001518760600151611973565b608085015260006103f18561168e565b9050801515831515146104465760405162461bcd60e51b815260206004820152601660248201527f6774546573743a2063617374203332206661696c6564000000000000000000006044820152606401610362565b6104588760c001518860e00151611989565b8452865160e088015161046b919061199e565b8460200181815250506104868760c0015188602001516119b4565b8460400181815250506104a187604001518860e001516119ca565b8460600181815250506104bc8760c0015188606001516119e0565b8460800181815250506104d787608001518860e001516119f6565b8460a00181815250506104f28760c001518860a00151611a0c565b60c0850152600061050285610f6f565b9050801515841515146105575760405162461bcd60e51b815260206004820152601660248201527f6774546573743a2063617374203634206661696c6564000000000000000000006044820152606401610362565b61056861028c8c8a60200151611a22565b151584151514801561058d575061058661028c89600001518c611aa4565b1515841515145b6105ff5760405162461bcd60e51b815260206004820152602660248201527f6774546573743a2074657374203820626974732077697468207363616c61722060448201527f6661696c656400000000000000000000000000000000000000000000000000006064820152608401610362565b61061361028c8c60ff168a60600151611b27565b151584151514801561063b575061063461028c89604001518c60ff16611bab565b1515841515145b6106ad5760405162461bcd60e51b815260206004820152602760248201527f6774546573743a207465737420313620626974732077697468207363616c617260448201527f206661696c6564000000000000000000000000000000000000000000000000006064820152608401610362565b6106c161028c8c60ff168a60a00151611c2e565b15158415151480156106e957506106e261028c89608001518c60ff16611cb4565b1515841515145b61075b5760405162461bcd60e51b815260206004820152602760248201527f6774546573743a207465737420333220626974732077697468207363616c617260448201527f206661696c6564000000000000000000000000000000000000000000000000006064820152608401610362565b61076f61028c8c60ff168a60e00151611d3a565b1515841515148015610797575061079061028c8960c001518c60ff16611dc4565b1515841515145b6108095760405162461bcd60e51b815260206004820152602760248201527f6774546573743a207465737420363420626974732077697468207363616c617260448201527f206661696c6564000000000000000000000000000000000000000000000000006064820152608401610362565b50919998505050505050505050565b600080610828836000015161184a565b9050610837836020015161184a565b15158115151480156108585750610851836040015161184a565b1515811515145b6108f05760405162461bcd60e51b815260206004820152604660248201527f64656372797074416e64436f6d70617265416c6c526573756c74733a2046616960448201527f6c656420746f206465637279707420616e6420636f6d7061726520616c6c207260648201527f6573756c74730000000000000000000000000000000000000000000000000000608482015260a401610362565b92915050565b600061094060405180610100016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b61096460405180606001604052806000815260200160008152602001600081525090565b6109966040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b6109d66040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6109e18488886116fd565b60006109f861028c86600001518760200151611e4e565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101008315150217905560408601516060870151919250610a3e91611e63565b845284516060860151610a519190611e78565b846020018181525050610a6c85604001518660200151611e8e565b60408501526000610a7c85610818565b905081151581151514610ad15760405162461bcd60e51b815260206004820152601660248201527f6c65546573743a2063617374203136206661696c6564000000000000000000006044820152606401610362565b610ae386608001518760a00151611ea4565b8452855160a0870151610af69190611eb9565b846020018181525050610b1186608001518760200151611ecf565b846040018181525050610b2c86604001518760a00151611ee5565b846060018181525050610b4786608001518760600151611efb565b60808501526000610b578561168e565b905080151583151514610bac5760405162461bcd60e51b815260206004820152601660248201527f6c65546573743a2063617374203332206661696c6564000000000000000000006044820152606401610362565b610bbe8760c001518860e00151611f11565b8452865160e0880151610bd19190611f26565b846020018181525050610bec8760c001518860200151611f3c565b846040018181525050610c0787604001518860e00151611f52565b846060018181525050610c228760c001518860600151611f68565b846080018181525050610c3d87608001518860e00151611f7e565b8460a0018181525050610c588760c001518860a00151611f94565b60c08501526000610c6885610f6f565b905080151584151514610cbd5760405162461bcd60e51b815260206004820152601660248201527f6c65546573743a2063617374203634206661696c6564000000000000000000006044820152606401610362565b610cce61028c8c8a60200151611faa565b1515841515148015610cf35750610cec61028c89600001518c611fbf565b1515841515145b610d655760405162461bcd60e51b815260206004820152602660248201527f6c65546573743a2074657374203820626974732077697468207363616c61722060448201527f6661696c656400000000000000000000000000000000000000000000000000006064820152608401610362565b610d7961028c8c60ff168a60600151611fd5565b1515841515148015610da15750610d9a61028c89604001518c60ff16611feb565b1515841515145b610e135760405162461bcd60e51b815260206004820152602760248201527f6c65546573743a207465737420313620626974732077697468207363616c617260448201527f206661696c6564000000000000000000000000000000000000000000000000006064820152608401610362565b610e2761028c8c60ff168a60a00151612000565b1515841515148015610e4f5750610e4861028c89608001518c60ff16612016565b1515841515145b610ec15760405162461bcd60e51b815260206004820152602760248201527f6c65546573743a207465737420333220626974732077697468207363616c617260448201527f206661696c6564000000000000000000000000000000000000000000000000006064820152608401610362565b610ed561028c8c60ff168a60e0015161202c565b1515841515148015610efd5750610ef661028c8960c001518c60ff16612042565b1515841515145b6108095760405162461bcd60e51b815260206004820152602760248201527f6c65546573743a207465737420363420626974732077697468207363616c617260448201527f206661696c6564000000000000000000000000000000000000000000000000006064820152608401610362565b600080610f7f836000015161184a565b9050610f8e836020015161184a565b1515811515148015610faf5750610fa8836040015161184a565b1515811515145b8015610fca5750610fc3836080015161184a565b1515811515145b8015610fe55750610fde836060015161184a565b1515811515145b80156110005750610ff98360c0015161184a565b1515811515145b801561085857506108518360a0015161184a565b600061105e60405180610100016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b61108260405180606001604052806000815260200160008152602001600081525090565b6110b46040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b6110f46040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6110ff8488886116fd565b600061111661028c86600001518760200151612058565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff1662010000831515021790556040860151606087015191925061115d9161206d565b8452845160608601516111709190612082565b84602001818152505061118b85604001518660200151612098565b6040850152600061119b85610818565b9050811515811515146111f05760405162461bcd60e51b815260206004820152601760248201527f6c6574546573743a2063617374203136206661696c65640000000000000000006044820152606401610362565b61120286608001518760a001516120ae565b8452855160a087015161121591906120c3565b846020018181525050611230866080015187602001516120d9565b84604001818152505061124b86604001518760a001516120ef565b84606001818152505061126686608001518760600151612105565b608085015260006112768561168e565b9050801515831515146112cb5760405162461bcd60e51b815260206004820152601760248201527f6c6574546573743a2063617374203332206661696c65640000000000000000006044820152606401610362565b6112dd8760c001518860e0015161211b565b8452865160e08801516112f09190612130565b84602001818152505061130b8760c001518860200151612146565b84604001818152505061132687604001518860e0015161215c565b8460600181815250506113418760c001518860600151612172565b84608001818152505061135c87608001518860e00151612188565b8460a00181815250506113778760c001518860a0015161219e565b60c0850152600061138785610f6f565b9050801515841515146113dc5760405162461bcd60e51b815260206004820152601760248201527f6c6574546573743a2063617374203634206661696c65640000000000000000006044820152606401610362565b6113ed61028c8c8a602001516121b4565b1515841515148015611412575061140b61028c89600001518c6121c9565b1515841515145b6114845760405162461bcd60e51b815260206004820152602760248201527f6c6574546573743a2074657374203820626974732077697468207363616c617260448201527f206661696c6564000000000000000000000000000000000000000000000000006064820152608401610362565b61149861028c8c60ff168a606001516121df565b15158415151480156114c057506114b961028c89604001518c60ff166121f5565b1515841515145b6115325760405162461bcd60e51b815260206004820152602860248201527f6c6574546573743a207465737420313620626974732077697468207363616c6160448201527f72206661696c65640000000000000000000000000000000000000000000000006064820152608401610362565b61154661028c8c60ff168a60a0015161220a565b151584151514801561156e575061156761028c89608001518c60ff16612220565b1515841515145b6115e05760405162461bcd60e51b815260206004820152602860248201527f6c6574546573743a207465737420333220626974732077697468207363616c6160448201527f72206661696c65640000000000000000000000000000000000000000000000006064820152608401610362565b6115f461028c8c60ff168a60e00151612236565b151584151514801561161c575061161561028c8960c001518c60ff1661224c565b1515841515145b6108095760405162461bcd60e51b815260206004820152602860248201527f6c6574546573743a207465737420363420626974732077697468207363616c6160448201527f72206661696c65640000000000000000000000000000000000000000000000006064820152608401610362565b60008061169e836000015161184a565b90506116ad836020015161184a565b15158115151480156116ce57506116c7836040015161184a565b1515811515145b80156116e957506116e2836080015161184a565b1515811515145b80156108585750610851836060015161184a565b61170682612262565b835261171181612262565b602084015261172260ff831661230a565b604084015261173360ff821661230a565b606084015261174460ff8316612374565b608084015261175560ff8216612374565b60a084015261176660ff83166123e0565b60c084015261177760ff82166123e0565b60e0909301929092525050565b60006064636d82e45e61179960018085612450565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681527fffffff0000000000000000000000000000000000000000000000000000000000909116600482015260248101869052604481018590526064015b6020604051808303816000875af115801561181f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061184391906127af565b9392505050565b6040517f0cfed56100000000000000000000000000000000000000000000000000000000815260006004820181905260248201839052908190606490630cfed561906044016020604051808303816000875af11580156118ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118d291906127af565b15159392505050565b60006064636d82e45e61179960028085612450565b60006064636d82e45e6117996001600285612450565b60006064636d82e45e6117996002600185612450565b60006064636d82e45e61179960038085612450565b60006064636d82e45e6117996001600385612450565b60006064636d82e45e6117996003600185612450565b60006064636d82e45e6117996002600385612450565b60006064636d82e45e6117996003600285612450565b60006064636d82e45e61179960048085612450565b60006064636d82e45e6117996001600485612450565b60006064636d82e45e6117996004600185612450565b60006064636d82e45e6117996002600485612450565b60006064636d82e45e6117996004600285612450565b60006064636d82e45e6117996003600485612450565b60006064636d82e45e6117996004600385612450565b60006064636d82e45e611a3760018080612450565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681527fffffff0000000000000000000000000000000000000000000000000000000000909116600482015260ff8616602482015260448101859052606401611800565b60006064636d82e45e611aba6001806002612450565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681527fffffff000000000000000000000000000000000000000000000000000000000090911660048201526024810186905260ff85166044820152606401611800565b60006064636d82e45e611b3d6002806001612450565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681527fffffff0000000000000000000000000000000000000000000000000000000000909116600482015261ffff8616602482015260448101859052606401611800565b60006064636d82e45e611bc060028080612450565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681527fffffff000000000000000000000000000000000000000000000000000000000090911660048201526024810186905261ffff85166044820152606401611800565b60006064636d82e45e611c446003806001612450565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681527fffffff0000000000000000000000000000000000000000000000000000000000909116600482015263ffffffff8616602482015260448101859052606401611800565b60006064636d82e45e611cca6003806002612450565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681527fffffff000000000000000000000000000000000000000000000000000000000090911660048201526024810186905263ffffffff85166044820152606401611800565b60006064636d82e45e611d506004806001612450565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681527fffffff0000000000000000000000000000000000000000000000000000000000909116600482015267ffffffffffffffff8616602482015260448101859052606401611800565b60006064636d82e45e611dda6004806002612450565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681527fffffff000000000000000000000000000000000000000000000000000000000090911660048201526024810186905267ffffffffffffffff85166044820152606401611800565b6000606463145fca2c61179960018085612450565b6000606463145fca2c61179960028085612450565b6000606463145fca2c6117996001600285612450565b6000606463145fca2c6117996002600185612450565b6000606463145fca2c61179960038085612450565b6000606463145fca2c6117996001600385612450565b6000606463145fca2c6117996003600185612450565b6000606463145fca2c6117996002600385612450565b6000606463145fca2c6117996003600285612450565b6000606463145fca2c61179960048085612450565b6000606463145fca2c6117996001600485612450565b6000606463145fca2c6117996004600185612450565b6000606463145fca2c6117996002600485612450565b6000606463145fca2c6117996004600285612450565b6000606463145fca2c6117996003600485612450565b6000606463145fca2c6117996004600385612450565b6000606463145fca2c611a3760018080612450565b6000606463145fca2c611aba6001806002612450565b6000606463145fca2c611b3d6002806001612450565b6000606463145fca2c611bc060028080612450565b6000606463145fca2c611c446003806001612450565b6000606463145fca2c611cca6003806002612450565b6000606463145fca2c611d506004806001612450565b6000606463145fca2c611dda6004806002612450565b6000606463dd14869361179960018085612450565b6000606463dd14869361179960028085612450565b6000606463dd1486936117996001600285612450565b6000606463dd1486936117996002600185612450565b6000606463dd14869361179960038085612450565b6000606463dd1486936117996001600385612450565b6000606463dd1486936117996003600185612450565b6000606463dd1486936117996002600385612450565b6000606463dd1486936117996003600285612450565b6000606463dd14869361179960048085612450565b6000606463dd1486936117996001600485612450565b6000606463dd1486936117996004600185612450565b6000606463dd1486936117996002600485612450565b6000606463dd1486936117996004600285612450565b6000606463dd1486936117996003600485612450565b6000606463dd1486936117996004600385612450565b6000606463dd148693611a3760018080612450565b6000606463dd148693611aba6001806002612450565b6000606463dd148693611b3d6002806001612450565b6000606463dd148693611bc060028080612450565b6000606463dd148693611c446003806001612450565b6000606463dd148693611cca6003806002612450565b6000606463dd148693611d506004806001612450565b6000606463dd148693611dda6004806002612450565b6040517fd9b60b600000000000000000000000000000000000000000000000000000000081527f0100000000000000000000000000000000000000000000000000000000000000600482015260ff8216602482015260009060649063d9b60b60906044015b6020604051808303816000875af11580156122e6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f091906127af565b6040517fd9b60b600000000000000000000000000000000000000000000000000000000081527f0200000000000000000000000000000000000000000000000000000000000000600482015261ffff8216602482015260009060649063d9b60b60906044016122c7565b6040517fd9b60b600000000000000000000000000000000000000000000000000000000081527f0300000000000000000000000000000000000000000000000000000000000000600482015263ffffffff8216602482015260009060649063d9b60b60906044016122c7565b6040517fd9b60b600000000000000000000000000000000000000000000000000000000081527f0400000000000000000000000000000000000000000000000000000000000000600482015267ffffffffffffffff8216602482015260009060649063d9b60b60906044016122c7565b6000816002811115612464576124646127c8565b60ff16600884600481111561247b5761247b6127c8565b61ffff16901b61ffff166010866004811115612499576124996127c8565b62ffffff16901b171760e81b949350505050565b803560ff811681146124be57600080fd5b919050565b600080604083850312156124d657600080fd5b6124df836124ad565b91506124ed602084016124ad565b90509250929050565b604051610100810167ffffffffffffffff81118282101715612541577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405290565b60006060828403121561255957600080fd5b6040516060810181811067ffffffffffffffff821117156125a3577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b80604052508235815260208301356020820152604083013560408201528091505092915050565b600060e082840312156125dc57600080fd5b60405160e0810181811067ffffffffffffffff82111715612626577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b8060405250823581526020830135602082015260408301356040820152606083013560608201526080830135608082015260a083013560a082015260c083013560c08201528091505092915050565b600060a0828403121561268757600080fd5b60405160a0810181811067ffffffffffffffff821117156126d1577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b806040525082358152602083013560208201526040830135604082015260608301356060820152608083013560808201528091505092915050565b600080600083850361014081121561272357600080fd5b6101008082121561273357600080fd5b61273b6124f6565b9150853582526020860135602083015260408601356040830152606086013560608301526080860135608083015260a086013560a083015260c086013560c083015260e086013560e08301528194506127958187016124ad565b935050506127a661012085016124ad565b90509250925092565b6000602082840312156127c157600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c6343000813000a";
335
+ "0x608060405234801561001057600080fd5b50612804806100206000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c80637d2e0f48116100765780638b6e7a8c1161005b5780638b6e7a8c1461014f578063acb3816914610162578063ebb571fd1461017557600080fd5b80637d2e0f481461013157806380f937bc1461013c57600080fd5b80632e544aa0116100a75780632e544aa0146100fa5780632e5950eb1461010d578063791175491461011e57600080fd5b806308c90f0d146100c357806329875348146100ea575b600080fd5b6100d66100d13660046124c3565b61018a565b604051901515815260200160405180910390f35b600054610100900460ff166100d6565b6100d6610108366004612547565b610818565b60005462010000900460ff166100d6565b6100d661012c3660046124c3565b6108f6565b60005460ff166100d6565b6100d661014a3660046125ca565b610f6f565b6100d661015d3660046124c3565b611014565b6100d6610170366004612675565b61168e565b61018861018336600461270c565b6116fd565b005b60006101d460405180610100016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6101f860405180606001604052806000815260200160008152602001600081525090565b61022a6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b61026a6040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6102758488886116fd565b600061029161028c86600001518760200151611784565b61184a565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016821515179055604086015160608701519192506102d3916118db565b8452845160608601516102e691906118f0565b84602001818152505061030185604001518660200151611906565b6040850152600061031185610818565b90508115158115151461036b5760405162461bcd60e51b815260206004820152601660248201527f6774546573743a2063617374203136206661696c65640000000000000000000060448201526064015b60405180910390fd5b61037d86608001518760a0015161191c565b8452855160a08701516103909190611931565b8460200181815250506103ab86608001518760200151611947565b8460400181815250506103c686604001518760a0015161195d565b8460600181815250506103e186608001518760600151611973565b608085015260006103f18561168e565b9050801515831515146104465760405162461bcd60e51b815260206004820152601660248201527f6774546573743a2063617374203332206661696c6564000000000000000000006044820152606401610362565b6104588760c001518860e00151611989565b8452865160e088015161046b919061199e565b8460200181815250506104868760c0015188602001516119b4565b8460400181815250506104a187604001518860e001516119ca565b8460600181815250506104bc8760c0015188606001516119e0565b8460800181815250506104d787608001518860e001516119f6565b8460a00181815250506104f28760c001518860a00151611a0c565b60c0850152600061050285610f6f565b9050801515841515146105575760405162461bcd60e51b815260206004820152601660248201527f6774546573743a2063617374203634206661696c6564000000000000000000006044820152606401610362565b61056861028c8c8a60200151611a22565b151584151514801561058d575061058661028c89600001518c611aa4565b1515841515145b6105ff5760405162461bcd60e51b815260206004820152602660248201527f6774546573743a2074657374203820626974732077697468207363616c61722060448201527f6661696c656400000000000000000000000000000000000000000000000000006064820152608401610362565b61061361028c8c60ff168a60600151611b27565b151584151514801561063b575061063461028c89604001518c60ff16611bab565b1515841515145b6106ad5760405162461bcd60e51b815260206004820152602760248201527f6774546573743a207465737420313620626974732077697468207363616c617260448201527f206661696c6564000000000000000000000000000000000000000000000000006064820152608401610362565b6106c161028c8c60ff168a60a00151611c2e565b15158415151480156106e957506106e261028c89608001518c60ff16611cb4565b1515841515145b61075b5760405162461bcd60e51b815260206004820152602760248201527f6774546573743a207465737420333220626974732077697468207363616c617260448201527f206661696c6564000000000000000000000000000000000000000000000000006064820152608401610362565b61076f61028c8c60ff168a60e00151611d3a565b1515841515148015610797575061079061028c8960c001518c60ff16611dc4565b1515841515145b6108095760405162461bcd60e51b815260206004820152602760248201527f6774546573743a207465737420363420626974732077697468207363616c617260448201527f206661696c6564000000000000000000000000000000000000000000000000006064820152608401610362565b50919998505050505050505050565b600080610828836000015161184a565b9050610837836020015161184a565b15158115151480156108585750610851836040015161184a565b1515811515145b6108f05760405162461bcd60e51b815260206004820152604660248201527f64656372797074416e64436f6d70617265416c6c526573756c74733a2046616960448201527f6c656420746f206465637279707420616e6420636f6d7061726520616c6c207260648201527f6573756c74730000000000000000000000000000000000000000000000000000608482015260a401610362565b92915050565b600061094060405180610100016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b61096460405180606001604052806000815260200160008152602001600081525090565b6109966040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b6109d66040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6109e18488886116fd565b60006109f861028c86600001518760200151611e4e565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101008315150217905560408601516060870151919250610a3e91611e63565b845284516060860151610a519190611e78565b846020018181525050610a6c85604001518660200151611e8e565b60408501526000610a7c85610818565b905081151581151514610ad15760405162461bcd60e51b815260206004820152601660248201527f6c65546573743a2063617374203136206661696c6564000000000000000000006044820152606401610362565b610ae386608001518760a00151611ea4565b8452855160a0870151610af69190611eb9565b846020018181525050610b1186608001518760200151611ecf565b846040018181525050610b2c86604001518760a00151611ee5565b846060018181525050610b4786608001518760600151611efb565b60808501526000610b578561168e565b905080151583151514610bac5760405162461bcd60e51b815260206004820152601660248201527f6c65546573743a2063617374203332206661696c6564000000000000000000006044820152606401610362565b610bbe8760c001518860e00151611f11565b8452865160e0880151610bd19190611f26565b846020018181525050610bec8760c001518860200151611f3c565b846040018181525050610c0787604001518860e00151611f52565b846060018181525050610c228760c001518860600151611f68565b846080018181525050610c3d87608001518860e00151611f7e565b8460a0018181525050610c588760c001518860a00151611f94565b60c08501526000610c6885610f6f565b905080151584151514610cbd5760405162461bcd60e51b815260206004820152601660248201527f6c65546573743a2063617374203634206661696c6564000000000000000000006044820152606401610362565b610cce61028c8c8a60200151611faa565b1515841515148015610cf35750610cec61028c89600001518c611fbf565b1515841515145b610d655760405162461bcd60e51b815260206004820152602660248201527f6c65546573743a2074657374203820626974732077697468207363616c61722060448201527f6661696c656400000000000000000000000000000000000000000000000000006064820152608401610362565b610d7961028c8c60ff168a60600151611fd5565b1515841515148015610da15750610d9a61028c89604001518c60ff16611feb565b1515841515145b610e135760405162461bcd60e51b815260206004820152602760248201527f6c65546573743a207465737420313620626974732077697468207363616c617260448201527f206661696c6564000000000000000000000000000000000000000000000000006064820152608401610362565b610e2761028c8c60ff168a60a00151612000565b1515841515148015610e4f5750610e4861028c89608001518c60ff16612016565b1515841515145b610ec15760405162461bcd60e51b815260206004820152602760248201527f6c65546573743a207465737420333220626974732077697468207363616c617260448201527f206661696c6564000000000000000000000000000000000000000000000000006064820152608401610362565b610ed561028c8c60ff168a60e0015161202c565b1515841515148015610efd5750610ef661028c8960c001518c60ff16612042565b1515841515145b6108095760405162461bcd60e51b815260206004820152602760248201527f6c65546573743a207465737420363420626974732077697468207363616c617260448201527f206661696c6564000000000000000000000000000000000000000000000000006064820152608401610362565b600080610f7f836000015161184a565b9050610f8e836020015161184a565b1515811515148015610faf5750610fa8836040015161184a565b1515811515145b8015610fca5750610fc3836080015161184a565b1515811515145b8015610fe55750610fde836060015161184a565b1515811515145b80156110005750610ff98360c0015161184a565b1515811515145b801561085857506108518360a0015161184a565b600061105e60405180610100016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b61108260405180606001604052806000815260200160008152602001600081525090565b6110b46040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b6110f46040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6110ff8488886116fd565b600061111661028c86600001518760200151612058565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff1662010000831515021790556040860151606087015191925061115d9161206d565b8452845160608601516111709190612082565b84602001818152505061118b85604001518660200151612098565b6040850152600061119b85610818565b9050811515811515146111f05760405162461bcd60e51b815260206004820152601760248201527f6c6574546573743a2063617374203136206661696c65640000000000000000006044820152606401610362565b61120286608001518760a001516120ae565b8452855160a087015161121591906120c3565b846020018181525050611230866080015187602001516120d9565b84604001818152505061124b86604001518760a001516120ef565b84606001818152505061126686608001518760600151612105565b608085015260006112768561168e565b9050801515831515146112cb5760405162461bcd60e51b815260206004820152601760248201527f6c6574546573743a2063617374203332206661696c65640000000000000000006044820152606401610362565b6112dd8760c001518860e0015161211b565b8452865160e08801516112f09190612130565b84602001818152505061130b8760c001518860200151612146565b84604001818152505061132687604001518860e0015161215c565b8460600181815250506113418760c001518860600151612172565b84608001818152505061135c87608001518860e00151612188565b8460a00181815250506113778760c001518860a0015161219e565b60c0850152600061138785610f6f565b9050801515841515146113dc5760405162461bcd60e51b815260206004820152601760248201527f6c6574546573743a2063617374203634206661696c65640000000000000000006044820152606401610362565b6113ed61028c8c8a602001516121b4565b1515841515148015611412575061140b61028c89600001518c6121c9565b1515841515145b6114845760405162461bcd60e51b815260206004820152602760248201527f6c6574546573743a2074657374203820626974732077697468207363616c617260448201527f206661696c6564000000000000000000000000000000000000000000000000006064820152608401610362565b61149861028c8c60ff168a606001516121df565b15158415151480156114c057506114b961028c89604001518c60ff166121f5565b1515841515145b6115325760405162461bcd60e51b815260206004820152602860248201527f6c6574546573743a207465737420313620626974732077697468207363616c6160448201527f72206661696c65640000000000000000000000000000000000000000000000006064820152608401610362565b61154661028c8c60ff168a60a0015161220a565b151584151514801561156e575061156761028c89608001518c60ff16612220565b1515841515145b6115e05760405162461bcd60e51b815260206004820152602860248201527f6c6574546573743a207465737420333220626974732077697468207363616c6160448201527f72206661696c65640000000000000000000000000000000000000000000000006064820152608401610362565b6115f461028c8c60ff168a60e00151612236565b151584151514801561161c575061161561028c8960c001518c60ff1661224c565b1515841515145b6108095760405162461bcd60e51b815260206004820152602860248201527f6c6574546573743a207465737420363420626974732077697468207363616c6160448201527f72206661696c65640000000000000000000000000000000000000000000000006064820152608401610362565b60008061169e836000015161184a565b90506116ad836020015161184a565b15158115151480156116ce57506116c7836040015161184a565b1515811515145b80156116e957506116e2836080015161184a565b1515811515145b80156108585750610851836060015161184a565b61170682612262565b835261171181612262565b602084015261172260ff831661230a565b604084015261173360ff821661230a565b606084015261174460ff8316612374565b608084015261175560ff8216612374565b60a084015261176660ff83166123e0565b60c084015261177760ff82166123e0565b60e0909301929092525050565b60006064636d82e45e61179960018085612450565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681527fffffff0000000000000000000000000000000000000000000000000000000000909116600482015260248101869052604481018590526064015b6020604051808303816000875af115801561181f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061184391906127af565b9392505050565b6040517f0cfed56100000000000000000000000000000000000000000000000000000000815260006004820181905260248201839052908190606490630cfed561906044016020604051808303816000875af11580156118ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118d291906127af565b15159392505050565b60006064636d82e45e61179960028085612450565b60006064636d82e45e6117996001600285612450565b60006064636d82e45e6117996002600185612450565b60006064636d82e45e61179960038085612450565b60006064636d82e45e6117996001600385612450565b60006064636d82e45e6117996003600185612450565b60006064636d82e45e6117996002600385612450565b60006064636d82e45e6117996003600285612450565b60006064636d82e45e61179960048085612450565b60006064636d82e45e6117996001600485612450565b60006064636d82e45e6117996004600185612450565b60006064636d82e45e6117996002600485612450565b60006064636d82e45e6117996004600285612450565b60006064636d82e45e6117996003600485612450565b60006064636d82e45e6117996004600385612450565b60006064636d82e45e611a3760018080612450565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681527fffffff0000000000000000000000000000000000000000000000000000000000909116600482015260ff8616602482015260448101859052606401611800565b60006064636d82e45e611aba6001806002612450565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681527fffffff000000000000000000000000000000000000000000000000000000000090911660048201526024810186905260ff85166044820152606401611800565b60006064636d82e45e611b3d6002806001612450565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681527fffffff0000000000000000000000000000000000000000000000000000000000909116600482015261ffff8616602482015260448101859052606401611800565b60006064636d82e45e611bc060028080612450565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681527fffffff000000000000000000000000000000000000000000000000000000000090911660048201526024810186905261ffff85166044820152606401611800565b60006064636d82e45e611c446003806001612450565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681527fffffff0000000000000000000000000000000000000000000000000000000000909116600482015263ffffffff8616602482015260448101859052606401611800565b60006064636d82e45e611cca6003806002612450565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681527fffffff000000000000000000000000000000000000000000000000000000000090911660048201526024810186905263ffffffff85166044820152606401611800565b60006064636d82e45e611d506004806001612450565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681527fffffff0000000000000000000000000000000000000000000000000000000000909116600482015267ffffffffffffffff8616602482015260448101859052606401611800565b60006064636d82e45e611dda6004806002612450565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681527fffffff000000000000000000000000000000000000000000000000000000000090911660048201526024810186905267ffffffffffffffff85166044820152606401611800565b6000606463145fca2c61179960018085612450565b6000606463145fca2c61179960028085612450565b6000606463145fca2c6117996001600285612450565b6000606463145fca2c6117996002600185612450565b6000606463145fca2c61179960038085612450565b6000606463145fca2c6117996001600385612450565b6000606463145fca2c6117996003600185612450565b6000606463145fca2c6117996002600385612450565b6000606463145fca2c6117996003600285612450565b6000606463145fca2c61179960048085612450565b6000606463145fca2c6117996001600485612450565b6000606463145fca2c6117996004600185612450565b6000606463145fca2c6117996002600485612450565b6000606463145fca2c6117996004600285612450565b6000606463145fca2c6117996003600485612450565b6000606463145fca2c6117996004600385612450565b6000606463145fca2c611a3760018080612450565b6000606463145fca2c611aba6001806002612450565b6000606463145fca2c611b3d6002806001612450565b6000606463145fca2c611bc060028080612450565b6000606463145fca2c611c446003806001612450565b6000606463145fca2c611cca6003806002612450565b6000606463145fca2c611d506004806001612450565b6000606463145fca2c611dda6004806002612450565b6000606463dd14869361179960018085612450565b6000606463dd14869361179960028085612450565b6000606463dd1486936117996001600285612450565b6000606463dd1486936117996002600185612450565b6000606463dd14869361179960038085612450565b6000606463dd1486936117996001600385612450565b6000606463dd1486936117996003600185612450565b6000606463dd1486936117996002600385612450565b6000606463dd1486936117996003600285612450565b6000606463dd14869361179960048085612450565b6000606463dd1486936117996001600485612450565b6000606463dd1486936117996004600185612450565b6000606463dd1486936117996002600485612450565b6000606463dd1486936117996004600285612450565b6000606463dd1486936117996003600485612450565b6000606463dd1486936117996004600385612450565b6000606463dd148693611a3760018080612450565b6000606463dd148693611aba6001806002612450565b6000606463dd148693611b3d6002806001612450565b6000606463dd148693611bc060028080612450565b6000606463dd148693611c446003806001612450565b6000606463dd148693611cca6003806002612450565b6000606463dd148693611d506004806001612450565b6000606463dd148693611dda6004806002612450565b6040517fd9b60b600000000000000000000000000000000000000000000000000000000081527f0100000000000000000000000000000000000000000000000000000000000000600482015260ff8216602482015260009060649063d9b60b60906044015b6020604051808303816000875af11580156122e6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f091906127af565b6040517fd9b60b600000000000000000000000000000000000000000000000000000000081527f0200000000000000000000000000000000000000000000000000000000000000600482015261ffff8216602482015260009060649063d9b60b60906044016122c7565b6040517fd9b60b600000000000000000000000000000000000000000000000000000000081527f0300000000000000000000000000000000000000000000000000000000000000600482015263ffffffff8216602482015260009060649063d9b60b60906044016122c7565b6040517fd9b60b600000000000000000000000000000000000000000000000000000000081527f0400000000000000000000000000000000000000000000000000000000000000600482015267ffffffffffffffff8216602482015260009060649063d9b60b60906044016122c7565b6000816002811115612464576124646127c8565b60ff16600884600681111561247b5761247b6127c8565b61ffff16901b61ffff166010866006811115612499576124996127c8565b62ffffff16901b171760e81b949350505050565b803560ff811681146124be57600080fd5b919050565b600080604083850312156124d657600080fd5b6124df836124ad565b91506124ed602084016124ad565b90509250929050565b604051610100810167ffffffffffffffff81118282101715612541577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405290565b60006060828403121561255957600080fd5b6040516060810181811067ffffffffffffffff821117156125a3577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b80604052508235815260208301356020820152604083013560408201528091505092915050565b600060e082840312156125dc57600080fd5b60405160e0810181811067ffffffffffffffff82111715612626577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b8060405250823581526020830135602082015260408301356040820152606083013560608201526080830135608082015260a083013560a082015260c083013560c08201528091505092915050565b600060a0828403121561268757600080fd5b60405160a0810181811067ffffffffffffffff821117156126d1577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b806040525082358152602083013560208201526040830135604082015260608301356060820152608083013560808201528091505092915050565b600080600083850361014081121561272357600080fd5b6101008082121561273357600080fd5b61273b6124f6565b9150853582526020860135602083015260408601356040830152606086013560608301526080860135608083015260a086013560a083015260c086013560c083015260e086013560e08301528194506127958187016124ad565b935050506127a661012085016124ad565b90509250925092565b6000602082840312156127c157600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c6343000813000a";
336
336
 
337
337
  type Comparison1TestsContractConstructorParams =
338
338
  | [signer?: Signer]