@enclave-e3/contracts 0.1.11 → 0.1.13

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 (257) hide show
  1. package/artifacts/@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol/ProxyAdmin.json +3 -3
  2. package/artifacts/@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol/artifacts.d.ts +3 -3
  3. package/artifacts/@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol/ITransparentUpgradeableProxy.json +1 -1
  4. package/artifacts/@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol/TransparentUpgradeableProxy.json +3 -3
  5. package/artifacts/@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol/artifacts.d.ts +4 -4
  6. package/artifacts/build-info/{solc-0_8_28-c77ac33099bb85c15f46d194dd2b735e036cb799.json → solc-0_8_28-e60a5d7c133605edcf61acdd5ba43ab44ee0928e.json} +27 -12
  7. package/artifacts/build-info/solc-0_8_28-e60a5d7c133605edcf61acdd5ba43ab44ee0928e.output.json +1 -0
  8. package/artifacts/contracts/E3RefundManager.sol/E3RefundManager.json +684 -0
  9. package/artifacts/contracts/E3RefundManager.sol/artifacts.d.ts +27 -0
  10. package/artifacts/contracts/Enclave.sol/Enclave.json +530 -182
  11. package/artifacts/contracts/Enclave.sol/artifacts.d.ts +4 -4
  12. package/artifacts/contracts/interfaces/IBondingRegistry.sol/IBondingRegistry.json +14 -1
  13. package/artifacts/contracts/interfaces/IBondingRegistry.sol/artifacts.d.ts +2 -2
  14. package/artifacts/contracts/interfaces/ICiphernodeRegistry.sol/ICiphernodeRegistry.json +55 -5
  15. package/artifacts/contracts/interfaces/ICiphernodeRegistry.sol/artifacts.d.ts +2 -2
  16. package/artifacts/contracts/interfaces/IComputeProvider.sol/IComputeProvider.json +1 -1
  17. package/artifacts/contracts/interfaces/IComputeProvider.sol/artifacts.d.ts +1 -1
  18. package/artifacts/contracts/interfaces/IDecryptionVerifier.sol/IDecryptionVerifier.json +1 -1
  19. package/artifacts/contracts/interfaces/IDecryptionVerifier.sol/artifacts.d.ts +1 -1
  20. package/artifacts/contracts/interfaces/IE3Program.sol/IE3Program.json +19 -24
  21. package/artifacts/contracts/interfaces/IE3Program.sol/artifacts.d.ts +2 -2
  22. package/artifacts/contracts/interfaces/IE3RefundManager.sol/IE3RefundManager.json +470 -0
  23. package/artifacts/contracts/interfaces/IE3RefundManager.sol/artifacts.d.ts +27 -0
  24. package/artifacts/contracts/interfaces/IEnclave.sol/IEnclave.json +383 -128
  25. package/artifacts/contracts/interfaces/IEnclave.sol/artifacts.d.ts +2 -2
  26. package/artifacts/contracts/interfaces/ISlashVerifier.sol/ISlashVerifier.json +1 -1
  27. package/artifacts/contracts/interfaces/ISlashVerifier.sol/artifacts.d.ts +1 -1
  28. package/artifacts/contracts/interfaces/ISlashingManager.sol/ISlashingManager.json +1 -1
  29. package/artifacts/contracts/interfaces/ISlashingManager.sol/artifacts.d.ts +1 -1
  30. package/artifacts/contracts/lib/ExitQueueLib.sol/ExitQueueLib.json +1 -1
  31. package/artifacts/contracts/lib/ExitQueueLib.sol/artifacts.d.ts +1 -1
  32. package/artifacts/contracts/registry/BondingRegistry.sol/BondingRegistry.json +16 -3
  33. package/artifacts/contracts/registry/BondingRegistry.sol/artifacts.d.ts +4 -4
  34. package/artifacts/contracts/registry/CiphernodeRegistryOwnable.sol/CiphernodeRegistryOwnable.json +91 -25
  35. package/artifacts/contracts/registry/CiphernodeRegistryOwnable.sol/artifacts.d.ts +6 -6
  36. package/artifacts/contracts/slashing/SlashingManager.sol/SlashingManager.json +3 -3
  37. package/artifacts/contracts/slashing/SlashingManager.sol/artifacts.d.ts +3 -3
  38. package/artifacts/contracts/test/MockCiphernodeRegistry.sol/MockCiphernodeRegistry.json +57 -7
  39. package/artifacts/contracts/test/MockCiphernodeRegistry.sol/MockCiphernodeRegistryEmptyKey.json +57 -7
  40. package/artifacts/contracts/test/MockCiphernodeRegistry.sol/artifacts.d.ts +8 -8
  41. package/artifacts/contracts/test/MockComputeProvider.sol/MockComputeProvider.json +3 -3
  42. package/artifacts/contracts/test/MockComputeProvider.sol/artifacts.d.ts +3 -3
  43. package/artifacts/contracts/test/MockDecryptionVerifier.sol/MockDecryptionVerifier.json +1 -1
  44. package/artifacts/contracts/test/MockDecryptionVerifier.sol/artifacts.d.ts +1 -1
  45. package/artifacts/contracts/test/MockE3Program.sol/MockE3Program.json +21 -26
  46. package/artifacts/contracts/test/MockE3Program.sol/artifacts.d.ts +4 -4
  47. package/artifacts/contracts/test/MockSlashingVerifier.sol/MockSlashingVerifier.json +1 -1
  48. package/artifacts/contracts/test/MockSlashingVerifier.sol/artifacts.d.ts +1 -1
  49. package/artifacts/contracts/test/MockStableToken.sol/MockUSDC.json +3 -3
  50. package/artifacts/contracts/test/MockStableToken.sol/artifacts.d.ts +3 -3
  51. package/artifacts/contracts/token/EnclaveTicketToken.sol/EnclaveTicketToken.json +14 -22
  52. package/artifacts/contracts/token/EnclaveTicketToken.sol/artifacts.d.ts +4 -4
  53. package/artifacts/contracts/token/EnclaveToken.sol/EnclaveToken.json +10 -10
  54. package/artifacts/contracts/token/EnclaveToken.sol/artifacts.d.ts +4 -4
  55. package/artifacts/contracts/verifier/DkgPkVerifier.sol/BaseZKHonkVerifier.json +89 -0
  56. package/artifacts/contracts/verifier/DkgPkVerifier.sol/CommitmentSchemeLib.json +13 -0
  57. package/artifacts/contracts/verifier/DkgPkVerifier.sol/DkgPkVerifier.json +186 -0
  58. package/artifacts/contracts/verifier/DkgPkVerifier.sol/FrLib.json +13 -0
  59. package/artifacts/contracts/verifier/DkgPkVerifier.sol/Honk.json +13 -0
  60. package/artifacts/contracts/verifier/DkgPkVerifier.sol/HonkVerificationKey.json +13 -0
  61. package/artifacts/contracts/verifier/DkgPkVerifier.sol/IVerifier.json +38 -0
  62. package/artifacts/contracts/verifier/DkgPkVerifier.sol/RelationsLib.json +13 -0
  63. package/artifacts/contracts/verifier/DkgPkVerifier.sol/ZKTranscriptLib.json +400 -0
  64. package/artifacts/contracts/verifier/DkgPkVerifier.sol/artifacts.d.ts +155 -0
  65. package/artifacts/poseidon-solidity/PoseidonT3.sol/PoseidonT3.json +1 -1
  66. package/artifacts/poseidon-solidity/PoseidonT3.sol/artifacts.d.ts +1 -1
  67. package/contracts/E3RefundManager.sol +365 -0
  68. package/contracts/Enclave.sol +426 -119
  69. package/contracts/interfaces/IBondingRegistry.sol +6 -0
  70. package/contracts/interfaces/ICiphernodeRegistry.sol +29 -7
  71. package/contracts/interfaces/IE3.sol +2 -6
  72. package/contracts/interfaces/IE3Program.sol +3 -7
  73. package/contracts/interfaces/IE3RefundManager.sol +150 -0
  74. package/contracts/interfaces/IEnclave.sol +186 -64
  75. package/contracts/registry/BondingRegistry.sol +9 -0
  76. package/contracts/registry/CiphernodeRegistryOwnable.sol +89 -42
  77. package/contracts/test/MockCiphernodeRegistry.sol +20 -6
  78. package/contracts/test/MockE3Program.sol +3 -8
  79. package/contracts/verifier/DkgPkVerifier.sol +3140 -0
  80. package/dist/hardhat.config.d.ts.map +1 -1
  81. package/dist/hardhat.config.js +4 -4
  82. package/dist/ignition/modules/dkgPkVerifier.d.ts +3 -0
  83. package/dist/ignition/modules/dkgPkVerifier.d.ts.map +1 -0
  84. package/dist/ignition/modules/dkgPkVerifier.js +10 -0
  85. package/dist/ignition/modules/e3RefundManager.d.ts +3 -0
  86. package/dist/ignition/modules/e3RefundManager.d.ts.map +1 -0
  87. package/dist/ignition/modules/e3RefundManager.js +23 -0
  88. package/dist/ignition/modules/enclave.d.ts.map +1 -1
  89. package/dist/ignition/modules/enclave.js +10 -0
  90. package/dist/scripts/deployAndSave/e3RefundManager.d.ts +20 -0
  91. package/dist/scripts/deployAndSave/e3RefundManager.d.ts.map +1 -0
  92. package/dist/scripts/deployAndSave/e3RefundManager.js +55 -0
  93. package/dist/scripts/deployAndSave/enclave.d.ts +13 -1
  94. package/dist/scripts/deployAndSave/enclave.d.ts.map +1 -1
  95. package/dist/scripts/deployAndSave/enclave.js +8 -1
  96. package/dist/scripts/deployAndSave/verifiers.d.ts +29 -0
  97. package/dist/scripts/deployAndSave/verifiers.d.ts.map +1 -0
  98. package/dist/scripts/deployAndSave/verifiers.js +109 -0
  99. package/dist/scripts/deployEnclave.d.ts.map +1 -1
  100. package/dist/scripts/deployEnclave.js +36 -0
  101. package/dist/scripts/deployVerifiers.d.ts +2 -0
  102. package/dist/scripts/deployVerifiers.d.ts.map +1 -0
  103. package/dist/scripts/deployVerifiers.js +33 -0
  104. package/dist/scripts/index.d.ts +1 -0
  105. package/dist/scripts/index.d.ts.map +1 -1
  106. package/dist/scripts/index.js +1 -0
  107. package/dist/tasks/enclave.d.ts +0 -2
  108. package/dist/tasks/enclave.d.ts.map +1 -1
  109. package/dist/tasks/enclave.js +8 -72
  110. package/dist/tasks/program.d.ts +2 -0
  111. package/dist/tasks/program.d.ts.map +1 -0
  112. package/dist/tasks/program.js +55 -0
  113. package/dist/test/E3Lifecycle/E3Integration.spec.d.ts +2 -0
  114. package/dist/test/E3Lifecycle/E3Integration.spec.d.ts.map +1 -0
  115. package/dist/test/E3Lifecycle/E3Integration.spec.js +757 -0
  116. package/dist/test/Enclave.spec.js +83 -406
  117. package/dist/test/Registry/CiphernodeRegistryOwnable.spec.js +133 -59
  118. package/dist/types/contracts/E3RefundManager.d.ts +379 -0
  119. package/dist/types/contracts/E3RefundManager.d.ts.map +1 -0
  120. package/dist/types/contracts/E3RefundManager.js +24 -0
  121. package/dist/types/contracts/Enclave.d.ts +325 -73
  122. package/dist/types/contracts/Enclave.d.ts.map +1 -1
  123. package/dist/types/contracts/Enclave.js +27 -3
  124. package/dist/types/contracts/index.d.ts +3 -0
  125. package/dist/types/contracts/index.d.ts.map +1 -1
  126. package/dist/types/contracts/interfaces/IBondingRegistry.d.ts +11 -1
  127. package/dist/types/contracts/interfaces/IBondingRegistry.d.ts.map +1 -1
  128. package/dist/types/contracts/interfaces/ICiphernodeRegistry.d.ts +35 -7
  129. package/dist/types/contracts/interfaces/ICiphernodeRegistry.d.ts.map +1 -1
  130. package/dist/types/contracts/interfaces/ICiphernodeRegistry.js +4 -0
  131. package/dist/types/contracts/interfaces/IE3Program.d.ts +16 -18
  132. package/dist/types/contracts/interfaces/IE3Program.d.ts.map +1 -1
  133. package/dist/types/contracts/interfaces/IE3RefundManager.d.ts +238 -0
  134. package/dist/types/contracts/interfaces/IE3RefundManager.d.ts.map +1 -0
  135. package/dist/types/contracts/interfaces/IE3RefundManager.js +16 -0
  136. package/dist/types/contracts/interfaces/IEnclave.d.ts +290 -62
  137. package/dist/types/contracts/interfaces/IEnclave.d.ts.map +1 -1
  138. package/dist/types/contracts/interfaces/IEnclave.js +27 -3
  139. package/dist/types/contracts/interfaces/index.d.ts +1 -0
  140. package/dist/types/contracts/interfaces/index.d.ts.map +1 -1
  141. package/dist/types/contracts/registry/BondingRegistry.d.ts +11 -1
  142. package/dist/types/contracts/registry/BondingRegistry.d.ts.map +1 -1
  143. package/dist/types/contracts/registry/CiphernodeRegistryOwnable.d.ts +35 -7
  144. package/dist/types/contracts/registry/CiphernodeRegistryOwnable.d.ts.map +1 -1
  145. package/dist/types/contracts/registry/CiphernodeRegistryOwnable.js +4 -0
  146. package/dist/types/contracts/test/MockCiphernodeRegistry.sol/MockCiphernodeRegistry.d.ts +35 -7
  147. package/dist/types/contracts/test/MockCiphernodeRegistry.sol/MockCiphernodeRegistry.d.ts.map +1 -1
  148. package/dist/types/contracts/test/MockCiphernodeRegistry.sol/MockCiphernodeRegistry.js +4 -0
  149. package/dist/types/contracts/test/MockCiphernodeRegistry.sol/MockCiphernodeRegistryEmptyKey.d.ts +35 -7
  150. package/dist/types/contracts/test/MockCiphernodeRegistry.sol/MockCiphernodeRegistryEmptyKey.d.ts.map +1 -1
  151. package/dist/types/contracts/test/MockCiphernodeRegistry.sol/MockCiphernodeRegistryEmptyKey.js +4 -0
  152. package/dist/types/contracts/test/MockE3Program.d.ts +16 -18
  153. package/dist/types/contracts/test/MockE3Program.d.ts.map +1 -1
  154. package/dist/types/contracts/verifier/DkgPkVerifier.sol/BaseZKHonkVerifier.d.ts +36 -0
  155. package/dist/types/contracts/verifier/DkgPkVerifier.sol/BaseZKHonkVerifier.d.ts.map +1 -0
  156. package/dist/types/contracts/verifier/DkgPkVerifier.sol/BaseZKHonkVerifier.js +1 -0
  157. package/dist/types/contracts/verifier/DkgPkVerifier.sol/DkgPkVerifier.d.ts +36 -0
  158. package/dist/types/contracts/verifier/DkgPkVerifier.sol/DkgPkVerifier.d.ts.map +1 -0
  159. package/dist/types/contracts/verifier/DkgPkVerifier.sol/DkgPkVerifier.js +1 -0
  160. package/dist/types/contracts/verifier/DkgPkVerifier.sol/IVerifier.d.ts +36 -0
  161. package/dist/types/contracts/verifier/DkgPkVerifier.sol/IVerifier.d.ts.map +1 -0
  162. package/dist/types/contracts/verifier/DkgPkVerifier.sol/IVerifier.js +1 -0
  163. package/dist/types/contracts/verifier/DkgPkVerifier.sol/ZKTranscriptLib.d.ts +138 -0
  164. package/dist/types/contracts/verifier/DkgPkVerifier.sol/ZKTranscriptLib.d.ts.map +1 -0
  165. package/dist/types/contracts/verifier/DkgPkVerifier.sol/ZKTranscriptLib.js +1 -0
  166. package/dist/types/contracts/verifier/DkgPkVerifier.sol/index.d.ts +5 -0
  167. package/dist/types/contracts/verifier/DkgPkVerifier.sol/index.d.ts.map +1 -0
  168. package/dist/types/contracts/verifier/DkgPkVerifier.sol/index.js +1 -0
  169. package/dist/types/contracts/verifier/index.d.ts +3 -0
  170. package/dist/types/contracts/verifier/index.d.ts.map +1 -0
  171. package/dist/types/contracts/verifier/index.js +1 -0
  172. package/dist/types/factories/@openzeppelin/contracts/proxy/transparent/ProxyAdmin__factory.d.ts +1 -1
  173. package/dist/types/factories/@openzeppelin/contracts/proxy/transparent/ProxyAdmin__factory.d.ts.map +1 -1
  174. package/dist/types/factories/@openzeppelin/contracts/proxy/transparent/ProxyAdmin__factory.js +1 -1
  175. package/dist/types/factories/@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol/TransparentUpgradeableProxy__factory.d.ts +1 -1
  176. package/dist/types/factories/@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol/TransparentUpgradeableProxy__factory.d.ts.map +1 -1
  177. package/dist/types/factories/@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol/TransparentUpgradeableProxy__factory.js +1 -1
  178. package/dist/types/factories/contracts/E3RefundManager__factory.d.ts +540 -0
  179. package/dist/types/factories/contracts/E3RefundManager__factory.d.ts.map +1 -0
  180. package/dist/types/factories/contracts/E3RefundManager__factory.js +706 -0
  181. package/dist/types/factories/contracts/Enclave__factory.d.ts +412 -143
  182. package/dist/types/factories/contracts/Enclave__factory.d.ts.map +1 -1
  183. package/dist/types/factories/contracts/Enclave__factory.js +528 -180
  184. package/dist/types/factories/contracts/index.d.ts +2 -0
  185. package/dist/types/factories/contracts/index.d.ts.map +1 -1
  186. package/dist/types/factories/contracts/index.js +2 -0
  187. package/dist/types/factories/contracts/interfaces/IBondingRegistry__factory.d.ts +10 -0
  188. package/dist/types/factories/contracts/interfaces/IBondingRegistry__factory.d.ts.map +1 -1
  189. package/dist/types/factories/contracts/interfaces/IBondingRegistry__factory.js +13 -0
  190. package/dist/types/factories/contracts/interfaces/ICiphernodeRegistry__factory.d.ts +42 -4
  191. package/dist/types/factories/contracts/interfaces/ICiphernodeRegistry__factory.d.ts.map +1 -1
  192. package/dist/types/factories/contracts/interfaces/ICiphernodeRegistry__factory.js +54 -4
  193. package/dist/types/factories/contracts/interfaces/IE3Program__factory.d.ts +14 -18
  194. package/dist/types/factories/contracts/interfaces/IE3Program__factory.d.ts.map +1 -1
  195. package/dist/types/factories/contracts/interfaces/IE3Program__factory.js +18 -23
  196. package/dist/types/factories/contracts/interfaces/IE3RefundManager__factory.d.ts +358 -0
  197. package/dist/types/factories/contracts/interfaces/IE3RefundManager__factory.d.ts.map +1 -0
  198. package/dist/types/factories/contracts/interfaces/IE3RefundManager__factory.js +471 -0
  199. package/dist/types/factories/contracts/interfaces/IEnclave__factory.d.ts +303 -103
  200. package/dist/types/factories/contracts/interfaces/IEnclave__factory.d.ts.map +1 -1
  201. package/dist/types/factories/contracts/interfaces/IEnclave__factory.js +382 -127
  202. package/dist/types/factories/contracts/interfaces/index.d.ts +1 -0
  203. package/dist/types/factories/contracts/interfaces/index.d.ts.map +1 -1
  204. package/dist/types/factories/contracts/interfaces/index.js +1 -0
  205. package/dist/types/factories/contracts/registry/BondingRegistry__factory.d.ts +11 -1
  206. package/dist/types/factories/contracts/registry/BondingRegistry__factory.d.ts.map +1 -1
  207. package/dist/types/factories/contracts/registry/BondingRegistry__factory.js +14 -1
  208. package/dist/types/factories/contracts/registry/CiphernodeRegistryOwnable__factory.d.ts +62 -12
  209. package/dist/types/factories/contracts/registry/CiphernodeRegistryOwnable__factory.d.ts.map +1 -1
  210. package/dist/types/factories/contracts/registry/CiphernodeRegistryOwnable__factory.js +79 -13
  211. package/dist/types/factories/contracts/slashing/SlashingManager__factory.d.ts +1 -1
  212. package/dist/types/factories/contracts/slashing/SlashingManager__factory.d.ts.map +1 -1
  213. package/dist/types/factories/contracts/slashing/SlashingManager__factory.js +1 -1
  214. package/dist/types/factories/contracts/test/MockCiphernodeRegistry.sol/MockCiphernodeRegistryEmptyKey__factory.d.ts +43 -5
  215. package/dist/types/factories/contracts/test/MockCiphernodeRegistry.sol/MockCiphernodeRegistryEmptyKey__factory.d.ts.map +1 -1
  216. package/dist/types/factories/contracts/test/MockCiphernodeRegistry.sol/MockCiphernodeRegistryEmptyKey__factory.js +55 -5
  217. package/dist/types/factories/contracts/test/MockCiphernodeRegistry.sol/MockCiphernodeRegistry__factory.d.ts +43 -5
  218. package/dist/types/factories/contracts/test/MockCiphernodeRegistry.sol/MockCiphernodeRegistry__factory.d.ts.map +1 -1
  219. package/dist/types/factories/contracts/test/MockCiphernodeRegistry.sol/MockCiphernodeRegistry__factory.js +55 -5
  220. package/dist/types/factories/contracts/test/MockComputeProvider__factory.d.ts +1 -1
  221. package/dist/types/factories/contracts/test/MockComputeProvider__factory.d.ts.map +1 -1
  222. package/dist/types/factories/contracts/test/MockComputeProvider__factory.js +1 -1
  223. package/dist/types/factories/contracts/test/MockE3Program__factory.d.ts +15 -19
  224. package/dist/types/factories/contracts/test/MockE3Program__factory.d.ts.map +1 -1
  225. package/dist/types/factories/contracts/test/MockE3Program__factory.js +19 -24
  226. package/dist/types/factories/contracts/test/MockStableToken.sol/MockUSDC__factory.d.ts +1 -1
  227. package/dist/types/factories/contracts/test/MockStableToken.sol/MockUSDC__factory.d.ts.map +1 -1
  228. package/dist/types/factories/contracts/test/MockStableToken.sol/MockUSDC__factory.js +1 -1
  229. package/dist/types/factories/contracts/token/EnclaveTicketToken__factory.d.ts +1 -1
  230. package/dist/types/factories/contracts/token/EnclaveTicketToken__factory.d.ts.map +1 -1
  231. package/dist/types/factories/contracts/token/EnclaveTicketToken__factory.js +1 -1
  232. package/dist/types/factories/contracts/token/EnclaveToken__factory.d.ts +1 -1
  233. package/dist/types/factories/contracts/token/EnclaveToken__factory.d.ts.map +1 -1
  234. package/dist/types/factories/contracts/token/EnclaveToken__factory.js +1 -1
  235. package/dist/types/factories/contracts/verifier/DkgPkVerifier.sol/BaseZKHonkVerifier__factory.d.ts +66 -0
  236. package/dist/types/factories/contracts/verifier/DkgPkVerifier.sol/BaseZKHonkVerifier__factory.d.ts.map +1 -0
  237. package/dist/types/factories/contracts/verifier/DkgPkVerifier.sol/BaseZKHonkVerifier__factory.js +90 -0
  238. package/dist/types/factories/contracts/verifier/DkgPkVerifier.sol/DkgPkVerifier__factory.d.ts +87 -0
  239. package/dist/types/factories/contracts/verifier/DkgPkVerifier.sol/DkgPkVerifier__factory.d.ts.map +1 -0
  240. package/dist/types/factories/contracts/verifier/DkgPkVerifier.sol/DkgPkVerifier__factory.js +122 -0
  241. package/dist/types/factories/contracts/verifier/DkgPkVerifier.sol/IVerifier__factory.d.ts +26 -0
  242. package/dist/types/factories/contracts/verifier/DkgPkVerifier.sol/IVerifier__factory.d.ts.map +1 -0
  243. package/dist/types/factories/contracts/verifier/DkgPkVerifier.sol/IVerifier__factory.js +39 -0
  244. package/dist/types/factories/contracts/verifier/DkgPkVerifier.sol/ZKTranscriptLib__factory.d.ts +323 -0
  245. package/dist/types/factories/contracts/verifier/DkgPkVerifier.sol/ZKTranscriptLib__factory.d.ts.map +1 -0
  246. package/dist/types/factories/contracts/verifier/DkgPkVerifier.sol/ZKTranscriptLib__factory.js +422 -0
  247. package/dist/types/factories/contracts/verifier/DkgPkVerifier.sol/index.d.ts +5 -0
  248. package/dist/types/factories/contracts/verifier/DkgPkVerifier.sol/index.d.ts.map +1 -0
  249. package/dist/types/factories/contracts/verifier/DkgPkVerifier.sol/index.js +7 -0
  250. package/dist/types/factories/contracts/verifier/index.d.ts +2 -0
  251. package/dist/types/factories/contracts/verifier/index.d.ts.map +1 -0
  252. package/dist/types/factories/contracts/verifier/index.js +4 -0
  253. package/dist/types/index.d.ts +12 -0
  254. package/dist/types/index.d.ts.map +1 -1
  255. package/dist/types/index.js +6 -0
  256. package/package.json +17 -3
  257. package/artifacts/build-info/solc-0_8_28-c77ac33099bb85c15f46d194dd2b735e036cb799.output.json +0 -1
@@ -0,0 +1,89 @@
1
+ {
2
+ "_format": "hh3-artifact-1",
3
+ "contractName": "BaseZKHonkVerifier",
4
+ "sourceName": "contracts/verifier/DkgPkVerifier.sol",
5
+ "abi": [
6
+ {
7
+ "inputs": [],
8
+ "name": "ConsistencyCheckFailed",
9
+ "type": "error"
10
+ },
11
+ {
12
+ "inputs": [],
13
+ "name": "GeminiChallengeInSubgroup",
14
+ "type": "error"
15
+ },
16
+ {
17
+ "inputs": [],
18
+ "name": "ProofLengthWrong",
19
+ "type": "error"
20
+ },
21
+ {
22
+ "inputs": [
23
+ {
24
+ "internalType": "uint256",
25
+ "name": "logN",
26
+ "type": "uint256"
27
+ },
28
+ {
29
+ "internalType": "uint256",
30
+ "name": "actualLength",
31
+ "type": "uint256"
32
+ },
33
+ {
34
+ "internalType": "uint256",
35
+ "name": "expectedLength",
36
+ "type": "uint256"
37
+ }
38
+ ],
39
+ "name": "ProofLengthWrongWithLogN",
40
+ "type": "error"
41
+ },
42
+ {
43
+ "inputs": [],
44
+ "name": "PublicInputsLengthWrong",
45
+ "type": "error"
46
+ },
47
+ {
48
+ "inputs": [],
49
+ "name": "ShpleminiFailed",
50
+ "type": "error"
51
+ },
52
+ {
53
+ "inputs": [],
54
+ "name": "SumcheckFailed",
55
+ "type": "error"
56
+ },
57
+ {
58
+ "inputs": [
59
+ {
60
+ "internalType": "bytes",
61
+ "name": "proof",
62
+ "type": "bytes"
63
+ },
64
+ {
65
+ "internalType": "bytes32[]",
66
+ "name": "publicInputs",
67
+ "type": "bytes32[]"
68
+ }
69
+ ],
70
+ "name": "verify",
71
+ "outputs": [
72
+ {
73
+ "internalType": "bool",
74
+ "name": "verified",
75
+ "type": "bool"
76
+ }
77
+ ],
78
+ "stateMutability": "view",
79
+ "type": "function"
80
+ }
81
+ ],
82
+ "bytecode": "0x",
83
+ "deployedBytecode": "0x",
84
+ "linkReferences": {},
85
+ "deployedLinkReferences": {},
86
+ "immutableReferences": {},
87
+ "inputSourceName": "project/contracts/verifier/DkgPkVerifier.sol",
88
+ "buildInfoId": "solc-0_8_28-e60a5d7c133605edcf61acdd5ba43ab44ee0928e"
89
+ }
@@ -0,0 +1,13 @@
1
+ {
2
+ "_format": "hh3-artifact-1",
3
+ "contractName": "CommitmentSchemeLib",
4
+ "sourceName": "contracts/verifier/DkgPkVerifier.sol",
5
+ "abi": [],
6
+ "bytecode": "0x602c6032600b8282823980515f1a607314602657634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe730000000000000000000000000000000000000000301460806040525f5ffdfea164736f6c634300081c000a",
7
+ "deployedBytecode": "0x730000000000000000000000000000000000000000301460806040525f5ffdfea164736f6c634300081c000a",
8
+ "linkReferences": {},
9
+ "deployedLinkReferences": {},
10
+ "immutableReferences": {},
11
+ "inputSourceName": "project/contracts/verifier/DkgPkVerifier.sol",
12
+ "buildInfoId": "solc-0_8_28-e60a5d7c133605edcf61acdd5ba43ab44ee0928e"
13
+ }
@@ -0,0 +1,186 @@
1
+ {
2
+ "_format": "hh3-artifact-1",
3
+ "contractName": "DkgPkVerifier",
4
+ "sourceName": "contracts/verifier/DkgPkVerifier.sol",
5
+ "abi": [
6
+ {
7
+ "inputs": [],
8
+ "name": "ConsistencyCheckFailed",
9
+ "type": "error"
10
+ },
11
+ {
12
+ "inputs": [],
13
+ "name": "GeminiChallengeInSubgroup",
14
+ "type": "error"
15
+ },
16
+ {
17
+ "inputs": [],
18
+ "name": "ProofLengthWrong",
19
+ "type": "error"
20
+ },
21
+ {
22
+ "inputs": [
23
+ {
24
+ "internalType": "uint256",
25
+ "name": "logN",
26
+ "type": "uint256"
27
+ },
28
+ {
29
+ "internalType": "uint256",
30
+ "name": "actualLength",
31
+ "type": "uint256"
32
+ },
33
+ {
34
+ "internalType": "uint256",
35
+ "name": "expectedLength",
36
+ "type": "uint256"
37
+ }
38
+ ],
39
+ "name": "ProofLengthWrongWithLogN",
40
+ "type": "error"
41
+ },
42
+ {
43
+ "inputs": [],
44
+ "name": "PublicInputsLengthWrong",
45
+ "type": "error"
46
+ },
47
+ {
48
+ "inputs": [],
49
+ "name": "ShpleminiFailed",
50
+ "type": "error"
51
+ },
52
+ {
53
+ "inputs": [],
54
+ "name": "SumcheckFailed",
55
+ "type": "error"
56
+ },
57
+ {
58
+ "inputs": [
59
+ {
60
+ "internalType": "bytes",
61
+ "name": "proof",
62
+ "type": "bytes"
63
+ },
64
+ {
65
+ "internalType": "bytes32[]",
66
+ "name": "publicInputs",
67
+ "type": "bytes32[]"
68
+ }
69
+ ],
70
+ "name": "verify",
71
+ "outputs": [
72
+ {
73
+ "internalType": "bool",
74
+ "name": "verified",
75
+ "type": "bool"
76
+ }
77
+ ],
78
+ "stateMutability": "view",
79
+ "type": "function"
80
+ }
81
+ ],
82
+ "bytecode": "0x610100604052348015610010575f5ffd5b50612000608052600d60a0527f170affbea8713b79ad326398ea7b49424c51fa4dca10a65185ad33dbce4d600160c052601160e05260805160a05160c05160e051615cbb6100dc5f395f81816101b0015261090201525f61018e01525f8181605b01528181609401528181610101015281816101d201528181610a3001528181610b3d01528181610bdc01528181610c0a01528181610c9001528181611524015281816115d3015281816116060152818161181001528181612b930152612ebc01525f5050615cbb5ff3fe608060405234801561000f575f5ffd5b5060043610610029575f3560e01c8063ea50d0e41461002d575b5f5ffd5b61004061003b3660046154e5565b610054565b604051901515815260200160405180910390f35b5f5f61007f7f00000000000000000000000000000000000000000000000000000000000000006102ee565b905061008c8160206155bd565b85146100ee577f0000000000000000000000000000000000000000000000000000000000000000856100bf8360206155bd565b6040516359895a5360e01b81526004810193909352602483019190915260448201526064015b60405180910390fd5b5f6100f76103e4565b90505f61012588887f00000000000000000000000000000000000000000000000000000000000000006103f9565b90506010826040015161013891906155d4565b85146101575760405163fa06659360e01b815260040160405180910390fd5b60405163995bf45760e01b81525f9073__$3f925933ac313a1c84f3f4c25b9ea43c90$__9063995bf457906101fa9085908b908b907f0000000000000000000000000000000000000000000000000000000000000000907f0000000000000000000000000000000000000000000000000000000000000000907f000000000000000000000000000000000000000000000000000000000000000090600401615757565b610be060405180830381865af4158015610216573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061023a9190615a90565b905061028a8787808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525050855185516060810151608090910151919350915060016108ac565b815160a0015261029a8282610a13565b6102b7576040516313f8744360e31b815260040160405180910390fd5b6102c2828483610bc8565b6102df576040516352ec174560e11b815260040160405180910390fd5b50600198975050505050505050565b5f806102fc600260086155bd565b905061030a600260046155bd565b6103149082615b3a565b905060016103236009856155bd565b61032d91906155bd565b6103379082615b3a565b9050610345600160296155bd565b61034f9082615b3a565b905061035d600160036155bd565b6103679082615b3a565b90506103746001846155bd565b61037e9082615b3a565b905061038c600160046155bd565b6103969082615b3a565b905060026103a56001856155d4565b6103af91906155bd565b6103b99082615b3a565b90506103c66002806155bd565b6103d09082615b3a565b90506103dd601082615b3a565b9392505050565b6103ec615031565b6103f4611c0a565b905090565b6104016151bb565b5f805b60108110156104635761043086838761041e602083615b3a565b9261042b93929190615b4d565b612542565b8351826010811061044357610443615b74565b6020020181815250506020826104599190615b3a565b9150600101610404565b50610487858286610475604083615b3a565b9261048293929190615b4d565b612555565b6020830152610497604082615b3a565b90506104aa858286610475604083615b3a565b6040808401919091526104bd9082615b3a565b90506104d0858286610475604083615b3a565b60608301526104e0604082615b3a565b90506104f3858286610475604083615b3a565b60a0830152610503604082615b3a565b9050610516858286610475604083615b3a565b60c0830152610526604082615b3a565b9050610539858286610475604083615b3a565b6080830152610549604082615b3a565b905061055c858286610475604083615b3a565b60e083015261056c604082615b3a565b905061057f858286610475604083615b3a565b610100830152610590604082615b3a565b90506105a3858286610475604083615b3a565b610120830151526105b5604082615b3a565b90506105c885828661041e602083615b3a565b6101408301526105d9602082615b3a565b90505f5b83811015610657575f5b600981101561064e5761060187848861041e602083615b3a565b84610160015183601c811061061857610618615b74565b6020020151826009811061062e5761062e615b74565b6020020181815250506020836106449190615b3a565b92506001016105e7565b506001016105dd565b505f5b60298110156106ab5761067486838761041e602083615b3a565b836101800151826029811061068b5761068b615b74565b6020020181815250506020826106a19190615b3a565b915060010161065a565b506106bd85828661041e602083615b3a565b6101a08301526106ce602082615b3a565b90506106e1858286610475604083615b3a565b610120830151602001526106f6604082615b3a565b9050610709858286610475604083615b3a565b61012083015160026020020152610721604082615b3a565b9050610734858286610475604083615b3a565b6101c0830152610745604082615b3a565b905061075885828661041e602083615b3a565b6101e0830152610769602082615b3a565b90505f5b6107786001856155d4565b8110156107c157610790868387610475604083615b3a565b83610200015182601b81106107a7576107a7615b74565b60200201526107b7604083615b3a565b915060010161076d565b505f5b83811015610814576107dd86838761041e602083615b3a565b83610220015182601c81106107f4576107f4615b74565b60200201818152505060208261080a9190615b3a565b91506001016107c4565b505f5b60048110156108685761083186838761041e602083615b3a565b836102400151826004811061084857610848615b74565b60200201818152505060208261085e9190615b3a565b9150600101610817565b5061087a858286610475604083615b3a565b61026083015261088b604082615b3a565b905061089e858286610475604083615b3a565b610280830152509392505050565b5f600180826108d9866108d4896108cf6108ca8a6310000000615b3a565b6125d7565b6125ef565b61260a565b90505f6108f7876108f28a6108cf6108ca8b6001615b3a565b612623565b90505f5b61092660107f00000000000000000000000000000000000000000000000000000000000000006155d4565b811015610993575f6109508c838151811061094357610943615b74565b602002602001015161264b565b9050610960866108cf868461260a565b9550610970856108cf858461260a565b945061097c848b61260a565b9350610988838b612623565b9250506001016108fb565b505f5b60108110156109fa575f8a82601081106109b2576109b2615b74565b602002015190506109c7866108cf868461260a565b95506109d7856108cf858461260a565b94506109e3848b61260a565b93506109ef838b612623565b925050600101610996565b50610a058484612660565b9a9950505050505050505050565b5f5f610a2883606001518561014001516125ef565b905060015f5b7f0000000000000000000000000000000000000000000000000000000000000000811015610b1a575f86610160015182601c8110610a6e57610a6e615b74565b602002015180519091505f90610a8c908360015b602002015161260a565b9050848114610aae576040516313f8744360e31b815260040160405180910390fd5b5f876080015184601c8110610ac557610ac5615b74565b60200201519050610ad6838261266e565b9550610b0a856108cf60016108d4856108cf8e604001518b601c8110610afe57610afe615b74565b60200201516001612623565b9450505050806001019050610a2e565b505f610b34866101800151865f015187602001518561281c565b9050600160025b7f0000000000000000000000000000000000000000000000000000000000000000811015610b9157610b8782886080015183601c8110610b7d57610b7d615b74565b60200201516125ef565b9150600101610b3b565b50610bb7610ba4836108cf600185612623565b6108d4896101a0015189606001516125ef565b91508382145b979650505050505050565b5f610bd16152a4565b5f610c008460c001517f0000000000000000000000000000000000000000000000000000000000000000612895565b90505f6003610c307f00000000000000000000000000000000000000000000000000000000000000006024615b3a565b610c3a9190615b3a565b610c45906003615b3a565b6001600160401b03811115610c5c57610c5c615941565b604051908082528060200260200182016040528015610c85578160200160208202803683370190505b5090505f6003610cb67f00000000000000000000000000000000000000000000000000000000000000006024615b3a565b610cc09190615b3a565b610ccb906003615b3a565b6001600160401b03811115610ce257610ce2615941565b604051908082528060200260200182016040528015610d1b57816020015b610d08615314565b815260200190600190039081610d005790505b509050610d4e610d49876101000151855f81518110610d3c57610d3c615b74565b6020026020010151612623565b61295e565b84610120018181525050610d83610d49876101000151855f81518110610d7657610d76615b74565b602002602001015161260a565b610140850181905261012085015160e0880151610da4926108d491906125ef565b845260c0860151610dd490610db89061295e565b6108cf8661012001516108f28a60e001518961014001516125ef565b6020850152815160019083905f90610dee57610dee615b74565b602002602001018181525050876102600151815f81518110610e1257610e12615b74565b60209081029190910101526101e088015160c085015260a080870151908501528351610e3d906129ce565b60408501526020840151610e50906129ce565b60608501526040840151825183906001908110610e6f57610e6f615b74565b60209081029190910101525f5b6024811015610f1657610e9785604001518660a001516125ef565b83610ea3836002615b3a565b81518110610eb357610eb3615b74565b602002602001018181525050610ef08560c001516108d48b61018001518460298110610ee157610ee1615b74565b60200201518860a001516125ef565b60c086015260a08086015190880151610f0991906125ef565b60a0860152600101610e7c565b505f5b6005811015610fe4575f610f2e601e83615b3a565b90505f610f3c602484615b3a565b9050610f6d858381518110610f5357610f53615b74565b60200260200101516108d489606001518a60a001516125ef565b858381518110610f7f57610f7f615b74565b602002602001018181525050610fbc8760c001516108d48d61018001518460298110610fad57610fad615b74565b60200201518a60a001516125ef565b60c088015260a080880151908a0151610fd591906125ef565b60a08801525050600101610f19565b50876101c0015181600181518110610ffe57610ffe615b74565b602002602001018190525086606001518160028151811061102157611021615b74565b602002602001018190525086608001518160038151811061104457611044615b74565b60200260200101819052508660a001518160048151811061106757611067615b74565b60200260200101819052508660c001518160058151811061108a5761108a615b74565b60200260200101819052508660e00151816006815181106110ad576110ad615b74565b6020026020010181905250866101000151816007815181106110d1576110d1615b74565b6020026020010181905250866101200151816008815181106110f5576110f5615b74565b60200260200101819052508661014001518160098151811061111957611119615b74565b602002602001018190525086610160015181600a8151811061113d5761113d615b74565b6020026020010181905250866101c0015181600b8151811061116157611161615b74565b602002602001018190525086610180015181600c8151811061118557611185615b74565b6020026020010181905250866101a0015181600d815181106111a9576111a9615b74565b6020026020010181905250866101e0015181600e815181106111cd576111cd615b74565b602002602001018190525086610200015181600f815181106111f1576111f1615b74565b60200260200101819052508661022001518160108151811061121557611215615b74565b60200260200101819052508661024001518160118151811061123957611239615b74565b60200260200101819052508661026001518160128151811061125d5761125d615b74565b60200260200101819052508661028001518160138151811061128157611281615b74565b6020026020010181905250866102a00151816014815181106112a5576112a5615b74565b6020026020010181905250866102c00151816015815181106112c9576112c9615b74565b6020026020010181905250866102e00151816016815181106112ed576112ed615b74565b60200260200101819052508661030001518160178151811061131157611311615b74565b60200260200101819052508661032001518160188151811061133557611335615b74565b60200260200101819052508661034001518160198151811061135957611359615b74565b602002602001018190525086610360015181601a8151811061137d5761137d615b74565b602002602001018190525086610380015181601b815181106113a1576113a1615b74565b6020026020010181905250866103a0015181601c815181106113c5576113c5615b74565b6020026020010181905250866103c0015181601d815181106113e9576113e9615b74565b6020026020010181905250876020015181601e8151811061140c5761140c615b74565b6020026020010181905250876040015181601f8151811061142f5761142f615b74565b602002602001018190525087606001518160208151811061145257611452615b74565b602002602001018190525087608001518160218151811061147557611475615b74565b60200260200101819052508761010001518160228151811061149957611499615b74565b60200260200101819052508760e00151816023815181106114bc576114bc615b74565b60200260200101819052508760a00151816024815181106114df576114df615b74565b60200260200101819052508760c001518160258151811061150257611502615b74565b60200260200101819052505f61154887608001518660c001518b6102200151877f00000000000000000000000000000000000000000000000000000000000000006129e0565b9050611572815f8151811061155f5761155f615b74565b60200260200101518661012001516125ef565b608086018190526102208a01515160e08901516115a392916108d49161159891906125ef565b8861014001516125ef565b608086015260e08701516115b690612b3e565b60a08601525f6115c860246002615b3a565b90505f5b6115f760017f00000000000000000000000000000000000000000000000000000000000000006155d4565b811015611808575f61162a60017f00000000000000000000000000000000000000000000000000000000000000006155d4565b8210159050806117995761165e610d498b61010001518985600161164e9190615b3a565b81518110610d3c57610d3c615b74565b6101208901526101008a015161168e90610d49908961167e866001615b3a565b81518110610d7657610d76615b74565b61014089015260a08801516101208901516116a991906125ef565b61016089015260a088015160e08b01516116d1916116c6916125ef565b8961014001516125ef565b61018089018190526116f4906116e6906129ce565b6108d48a61016001516129ce565b866116ff8486615b3a565b8151811061170f5761170f615b74565b6020026020010181815250505f6117488961018001518e61022001518560016117389190615b3a565b601c8110610b7d57610b7d615b74565b9050611782816108d48b6101600151888760016117659190615b3a565b8151811061177557611775615b74565b60200260200101516125ef565b905061179289608001518261260a565b60808a0152505b6117b86117ae8960a001518c60e001516125ef565b8b60e001516125ef565b60a08901526102008c015182601b81106117d4576117d4615b74565b6020020151856117e48486615b3a565b815181106117f4576117f4615b74565b6020908102919091010152506001016115cc565b5061183460017f00000000000000000000000000000000000000000000000000000000000000006155d4565b61183e9082615b3a565b905061185e6118568961010001518a60c00151612623565b600190612660565b60e08701515261010088015160c08901516118a291611856916108f2907f07b0c561a6148404f086204a9f36ffb0617942546750f230c893619174a57a76906125ef565b60e0878101805160200192909252815180516040909101529051805160609091015260a0870151908901516118e4916118da916125ef565b8960e001516125ef565b60a08701525f5b6004811015611992575f61191d8860e00151836004811061190e5761190e615b74565b60200201518960a001516125ef565b9050611928816129ce565b886101000151836004811061193f5761193f615b74565b602002015260a088015160e08b015161195891906125ef565b8860a001818152505061198488608001516108d4838f61024001518660048110610b7d57610b7d615b74565b6080890152506001016118eb565b506101008601515184518590839081106119ae576119ae615b74565b602090810291909101810191909152610100870151908101516119d2916002610a82565b846119de836001615b3a565b815181106119ee576119ee615b74565b60209081029190910101526101008601516060015184611a0f836002615b3a565b81518110611a1f57611a1f615b74565b60209081029190910101525f5b6003811015611a81578a61012001518160038110611a4c57611a4c615b74565b60200201518483611a5c81615b88565b945081518110611a6e57611a6e615b74565b6020908102919091010152600101611a2c565b506040518060400160405280600181526020016002815250838281518110611aab57611aab615b74565b60200260200101819052508560800151848280611ac790615b88565b935081518110611ad957611ad9615b74565b602002602001018181525050611b038a61024001518960c001518a608001518d6101a00151612b49565b611b205760405163a2a2ac8360e01b815260040160405180910390fd5b5f8a6102800151905080848381518110611b3c57611b3c615b74565b6020026020010181905250886101000151858381518110611b5f57611b5f615b74565b602002602001018181525050611b7361532c565b611b7d8587612eac565b8152611b8882612fc8565b602082018190528c5182515f92611ba092919061300e565b90505f5f611bb08f5f0151613094565b91509150611bbd82613155565b611bc681613155565b8351611bd39083856131f4565b84526020840151611be59082856131f4565b602085018190528451611bf791613223565b9f9e505050505050505050505050505050565b611c12615031565b50604080516103e0810182526120008152600d602080830191909152601182840152825180840184527f1a5c96bf5dac44c45e28380daccedfec1d9a8919999a0d748a8686f7f42cba7681527f28c5876a4c88720ff49870cbc3b7f41c26a131f4d57ce95cbc6127859c08931f818301526060830152825180840184527f2c740230a118ad04f1482eeef2e75a14aed0f961b763120de34d0fbe63ca12b081527f1b9aa7fd5bf93acbaadd615b6e0829e714539fe471bece34b359cd6a96d00294818301526080830152825180840184527f22a702d6d3957500783049fee5af2a27155cfdf1b6c2958942f5cde4bc63d16381527e3567b43861479b2347249040b9a4c4423f494e6dd8a7de9a4e3900741c45518183015260a0830152825180840184527f1333cd6f8595ef95ab9d9744d1d00175a56c1b0bc60000ac6d4eb9ec7315c70a81527f1c891650f45fe25cf375ea0b322372757b89799546eed2152766130e6b99efa08183015260c0830152825180840184527f251fdc445de2b90170e8c86c41a81303bb3de75352f2bd6f095bdab77486445a81527f06f20c995414f9b6bdb794492d328124e2b7676329a5a1724365076751ad2a8a8183015260e0830152825180840184527f12600bb185b845c63e4b9d5c310db2d257aa5d1d09090ef3c8bdd7334e8991d081527f017ccf0bdad7381ff8a3bef25259d90c296b71c037ee58bcce51cb0b7a6e97f481830152610100830152825180840184527f0c4032c3079594eb75a8449d3d5ce8bc3661650d53f9b24d923d8f404cb0bbc981527f1084d709650356d40f0158fd6da81f54eb5fe796a0ca89441369b7c24301f85181830152610120830152825180840184527f1f13031b7801d2da6d5206a7da087d7661d87905cef81f24e3cbe9e7a1c5148881527f2d93aa6923ac15844842bd024199117f43ca14c883f37570030fdf385356a18a81830152610140830152825180840184527f300557c1eda8ed63912d72e051bb3431bd54f7395755b820a59ff85295eb36d981527f227e5f5f62555201e96e188514b5387fb7e026a4af0ac209ec6730c4e0e6cc7681830152610160830152825180840184527f02095e5acd019e4edaf8d736615b4a159deafdb98a171db591ed499b0219fb4b81527f0644f4dc54ac72663d956a233412f748e74b1591553ecbca703829acf75e471a81830152610180830152825180840184527f022bae55678012a184d4cb970b8f9a6d1334097d611de534bef96fc9f8d9d01181527f284ee2d499274885bcb7a0d77b0a261d9192ec413b0c0a86fb27ae88cdd5a72c818301526101a0830152825180840184527f20a7925feb244b2ba41d31db4651a6c6c6be672ed0e7711f2ef4c2b89f9c4a5f81527f2472b531a32a7d7f80ec3c3375977ba4968f326786473e34d1fd73e6236cf661818301526101c0830152825180840184527f2dd8c7e5ce5f6a7053c173bb140d46830ab962c6c45d637d66171ee540bb21d581527f033b47f5f8496af8d227ef175c47b3f7cd666ebc94f0e63562ebfcf30d73f6e2818301526101e0830152825180840184527f2940b2ab034af88869e264e12ee268b16c221b5f2cdd96748cce870c1a7bb24a81527f04cfb9bfe08adf0e6f25c2cc9e83448d8f23d9fb3a0efba8d41768520d62d0e881830152610200830152825180840184527f1b300dbb752984d39a06a3278fc9048a525d0fdf14ef98f17ffb42a971fb903281527f01ccd716ea4eeba47b57e3110f305af0d1e2feec11f2656816dbb234ea0b3b1b81830152610220830152825180840184527f0d2e187f65cf5ab43eac061f54e93bdcc292b2f518ee632b030ea3290143139c81527f03ff9967978b924f43af1e71f6281ee36a96c1b647bbf8c17e3cb4626068b78b81830152610240830152825180840184527f2106e82e5e59b21be7c8ac07ede04efc6445f01e31b5ce7894444cb081df43d181527f0571641ab150cfa4371421f984cc897945b69ca100d0960c2ee5ca1d17cd967081830152610260830152825180840184527f27599a711decc65fa4aad9515655e029868cc54d495fb8b53fa44e165702a5ee81527f1d9db80b8419761979511454f69fa448fc50d15062e434c6994c4ccc4912f67281830152610280830152825180840184527f1fa05f284bf1410f37f0d556ccfeb052395ec8625620cf724d146a3b15496d4d81527f0c8fc17b9b81b4f93a7b9bdd1cc5f01a30ef6e808409c456f6d6d13fe7d2eb17818301526102a0830152825180840184527f05798d2cd96b3294d8cc2f0120fa58ffea3a662e32039784f0b0b051e34e871881527f02d377efbb702de6d6a38e5c42c6aaf56cc11762d724a635ea4d5dc72eb9e0ca818301526102c0830152825180840184527f110bd6ab5007b97692cd6e8ea8cab85d8b039d9e8dc2a9931fa6dcd72e0adac881527f2e418397e17371fcf5a1a5c614f4dfe9727b79d5aa127ab98c04a7a4c06ccb9f818301526102e0830152825180840184527f0ccf438e4b27c76e599cda77ba04ad29cbaf538ded427e979eef69a5a9884b7881527f09117b0cb34fc65ed20f92de70c6f8e073c755fb4acf2d74f402c6a97ee3d01a81830152610300830152825180840184527f099e3bd5a0a00ab7fe18040105b9b395b5d8b7b4a63b05df652b0d10ef146d2681527e15b8d2515d76e2ccec99dcd194592129af3a637f5a622a32440f860d1e2a7f81830152610320830152825180840184527f1b917517920bad3d8bc01c9595092a222b888108dc25d1aa450e0b4bc212c37e81527f305e8992b148eedb22e6e992077a84482141c7ebe42000a1d58ccb74381f6d1981830152610340830152825180840184527f13567e3b915c81013ada15236ba5cfa60111b440400b2bca37e2b1085e924a7781527f0148d22589b91f0d8f4674af5744dedafd63caea904b434e748f9713de8cc3d781830152610360830152825180840184527f043d063b130adfb37342af45d0155a28edd1a7e46c840d9c943fdf45521c64ce81527f261522c4089330646aff96736194949330952ae74c573d1686d9cb4a007338548183015261038083015282518084018452600181526002818301526103a083015282518084019093527f22671e023cbbeb82d51b48eb911951a7a1f9c2bb913f3f42a56f272e205d462483527f139bdfe9fe99633e5abe888702fa64a75c80d62184d0a16bd999840553954bb1908301526103c081019190915290565b5f6103dd6125508385615ba0565b61264b565b61255d615314565b60408051808201909152805f516020615c6f5f395f51905f5261258360205f8789615b4d565b61258c91615ba0565b6125969190615bbd565b81526020908101905f516020615c6f5f395f51905f52906125bb906040908789615b4d565b6125c491615ba0565b6125ce9190615bbd565b90529392505050565b5f5f516020615c8f5f395f51905f52825b0692915050565b5f5f516020615c8f5f395f51905f5282840990505b92915050565b5f5f516020615c8f5f395f51905f528284089392505050565b5f5f516020615c8f5f395f51905f52825f516020615c8f5f395f51905f520384089392505050565b5f5f516020615c8f5f395f51905f52826125e8565b5f6103dd836108cf8461295e565b5f5f604051806101200160405280619d8081526020017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593efffec5181526020016105a081526020017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593effffd31815260200161024081526020017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593effffd3181526020016105a081526020017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593efffec518152602001619d8081525090505f600190505f5f90505b60098110156127675761275d826108cf8784612623565b9150600101612746565b5061277061533f565b5f5b60098110156127c1576127a2610d4985836009811061279357612793615b74565b60200201516108cf8985612623565b8282600981106127b4576127b4615b74565b6020020152600101612772565b505f5b6009811015612807576127fd856108d48984600981106127e6576127e6615b74565b6020020151858560098110610b7d57610b7d615b74565b94506001016127c4565b5061281284836125ef565b9695505050505050565b5f61282561535e565b612830868285613417565b61283c868683866135c3565b612848868683866137af565b6128538682856139d4565b61285e868285613bc8565b61286a86868386613f11565b6128758682856143bd565b6128808682856147cf565b61288b868285614b90565b6128128185614e90565b60605f826001600160401b038111156128b0576128b0615941565b6040519080825280602002602001820160405280156128d9578160200160208202803683370190505b50905083815f815181106128ef576128ef615b74565b602090810291909101015260015b8381101561295657612931826129146001846155d4565b8151811061292457612924615b74565b6020026020010151612b3e565b82828151811061294357612943615b74565b60209081029190910101526001016128fd565b509392505050565b5f5f8290505f604051602081526020808201526020604082015282606082015260025f516020615c8f5f395f51905f520360808201525f516020615c8f5f395f51905f5260a082015260205f60c08360055afa806129ba575f5ffd5b505f51608091909101604052949350505050565b5f516020615c8f5f395f51905f520390565b60605f826001600160401b038111156129fb576129fb615941565b604051908082528060200260200182016040528015612a24578160200160208202803683370190505b509050825b8015612b33575f85612a3c6001846155d4565b81518110612a4c57612a4c615b74565b602002602001015190505f89600184612a6591906155d4565b601c8110612a7557612a75615b74565b602002015190505f612ad0612a94612a8d858d6125ef565b60026125ef565b6108f28b612aa36001896155d4565b601c8110612ab357612ab3615b74565b60200201516108cf612aca886108cf60018a612623565b87612623565b9050612af1816108cf610d49612aeb876108cf600189612623565b8661260a565b99508990508085612b036001876155d4565b81518110612b1357612b13615b74565b60200260200101818152505050505080612b2c90615bdc565b9050612a29565b509695505050505050565b5f61260482836125ef565b5f600181612b62612b5c87610100614ee9565b83612623565b905080612b825760405163835eb8f760e01b815260040160405180910390fd5b612b8a61537d565b80518390525f5b7f0000000000000000000000000000000000000000000000000000000000000000811015612c73575f612bc58260096155bd565b612bd0906001615b3a565b905084835f0151826101008110612be957612be9615b74565b60200201525f612bfa826001615b3a565b90505b612c08600983615b3a565b811015612c69578351612c4890612c206001846155d4565b6101008110612c3157612c31615b74565b60200201518a85601c8110610b7d57610b7d615b74565b8451826101008110612c5c57612c5c615b74565b6020020152600101612bfd565b5050600101612b91565b50608081018390525f602082018190525b610100811015612d8457612ca5612c9f83608001518a6125ef565b85612623565b8260a00151826101008110612cbc57612cbc615b74565b602002015260a0820151612ce690826101008110612cdc57612cdc615b74565b602002015161295e565b8260a00151826101008110612cfd57612cfd615b74565b602002018181525050612d4382602001516108d4845f0151846101008110612d2757612d27615b74565b60200201518560a00151856101008110610b7d57610b7d615b74565b60208301526080820151612d77907f204bd3277422fad364751ad938e2b5e6a54cf8c68712848a692c553d0329f5d66125ef565b6080830152600101612c84565b505f612d95836108cf61010061295e565b9050612da58260200151826125ef565b602083015260a0820151612dc0905f5b6020020151826125ef565b604083015260a0820151612dec90612ddb60016101006155d4565b6101008110612db557612db5615b74565b60608301526040820151612e02908a6002610b7d565b60c08301819052612e62906108d4612e3a8b7f204bd3277422fad364751ad938e2b5e6a54cf8c68712848a692c553d0329f5d6612623565b60208d015160408e01516108cf91612e5191612623565b8e5160208901516108f291906125ef565b60c083018190526060830151612e9791612e8b916108d4906108cf8e600260200201518c612623565b6108f2858c6003610b7d565b60c08301819052159998505050505050505050565b612eb4615314565b5f6003612ee27f00000000000000000000000000000000000000000000000000000000000000006024615b3a565b612eec9190615b3a565b612ef7906003615b3a565b90505f5b81811015612f2d57612f25858281518110612f1857612f18615b74565b6020026020010151613155565b600101612efb565b50604051600190815b60018401811015612f925760208102870160208202870181515160408501528151602001516060850152805160808501525050604080830160606040850160075afa8316925060408260808460065afa90921691600101612f36565b5080518452602081015160208501525080612fc0576040516352ec174560e11b815260040160405180910390fd5b505092915050565b612fd0615314565b5f516020615c6f5f395f51905f5282602001515f516020615c6f5f395f51905f52612ffb91906155d4565b6130059190615bbd565b60208301525090565b5f5f5f61301a86613094565b915091506130266153c1565b82518152602080840151818301528251604080840191909152838201516060840152875160808401528782015160a0840152865160c08401528682015160e084015251610bbd9161307991849101615bf1565b6040516020818303038152906040528051906020012061264b565b61309c615314565b6130a4615314565b82516020808501516040860151606087015160cc90811b608892831b604494851b90961795909517949094178652608087015160a088015160c089015160e08a0151871b90841b91851b9092171717868401526101008701516101208801516101408901516101608a0151871b90841b91851b909217171785526101808701516101a08801516101c08901516101e09099015190951b9790911b9390911b1791909117939093179281019290925291565b805160208201515f5f516020615c6f5f395f51905f528380095f516020615c6f5f395f51905f5260035f516020615c6f5f395f51905f52838709085f516020615c6f5f395f51905f5284850914915050806131ee5760405162461bcd60e51b8152602060048201526019602482015278706f696e74206973206e6f74206f6e2074686520637572766560381b60448201526064016100e5565b50505050565b6131fc615314565b613204615314565b61320e8386614f4a565b905061321a8185614fa0565b95945050505050565b81516020808401518351848301516040805194850195909552938301919091527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c260608301527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed60808301527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b60a08301527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa60c083015260e08201526101008101919091527f260e01b251f6f1c7e7ff4e580791dee8ea51d87a358e038b4efe30fac09383c16101208201527f0118c4d5b837bcc2bc89b5b398b5974e9f5944073b32078b7e231fec938883b06101408201527f04fc6369f7110fe3d25156c1bb9a72859cf2a04641f99ba4ee413c80da6a5fe46101608201527f22febda3c0c0632a56475b4214e5615e11e6dd3f96e6cea2854a87d4dacc5e556101808201525f9081906101a00160405160208183030381529060405290505f5f60086001600160a01b0316836040516133b99190615c25565b5f60405180830381855afa9150503d805f81146133f1576040519150601f19603f3d011682016040523d82523d5f602084013e6133f6565b606091505b50915091508180156128125750808060200190518101906128129190615c3b565b5f613423846007615001565b90507f183227397098d014dc2822db40c0ac2e9419f4243cdcb848a1f0fac9f80000005f61348461347e613458856003612623565b6108cf6134736134688b5f615001565b6108cf8c601d615001565b6108cf8b601c615001565b836125ef565b90506135056134fa6134e16134c86134af856108d46134a48d6002615001565b6108cf8e601c615001565b6108d46134bd8c6003615001565b6108cf8d601d615001565b6108d46134d68b6004615001565b6108cf8c601e615001565b6108d46134ef8a6005615001565b6108cf8b601f615001565b6108d4886001615001565b9050613524816108d4613519866001612623565b6108cf8a6027615001565b905061353081846125ef565b905061353c81856125ef565b8552505f905061357661356c61356161355688601c615001565b6108d489601f615001565b6108f2886024615001565b6108d4875f615001565b9050613587816108cf846002612623565b9050613598816108cf846001612623565b90506135a481836125ef565b90506135b081846125ef565b9050808460015b60200201525050505050565b5f5f5f6135f96135ef6135d789601c615001565b6108d46135e58b6012615001565b8a606001516125ef565b876080015161260a565b9050613632816108cf6136286136108b601d615001565b6108d461361e8d6013615001565b8c606001516125ef565b896080015161260a565b9050613657816108cf6136286136498b601e615001565b6108d461361e8d6014615001565b905061367c816108cf61362861366e8b601f615001565b6108d461361e8d6015615001565b92505f90506136a06135ef61369289601c615001565b6108d46135e58b600e615001565b90506136c5816108cf6136286136b78b601d615001565b6108d461361e8d600f615001565b90506136ea816108cf6136286136dc8b601e615001565b6108d461361e8d6010615001565b905061370f816108cf6136286137018b601f615001565b6108d461361e8d6011615001565b91505f9050613736613730613725896020615001565b6108d48a601a615001565b846125ef565b905061376b816108f261376561374d8b6028615001565b6108d461375b8d601b615001565b8c60a001516125ef565b856125ef565b905061377781856125ef565b6040860152505f61379a61376561378f89601b615001565b6108cf8a6028615001565b9050808560035b602002015250505050505050565b5f5f61380d6137f56137dd6137c86136288a6016615001565b6108d46137d68b6017615001565b8a516125ef565b6108d46137eb8a6018615001565b89602001516125ef565b6108d4613803896019615001565b88604001516125ef565b91505f61384461382b61382189601c615001565b886080015161260a565b6108d46138398a6003615001565b6108cf8b6024615001565b90505f61386d61385589601d615001565b6108d46138628b5f615001565b6108cf8c6025615001565b90505f61389761387e8a601e615001565b6108d461388c8c6001615001565b6108cf8d6026615001565b90506138d66138be6138b0856108d4868d5f01516125ef565b6108d4848c602001516125ef565b6108d46138cc8c6004615001565b8b604001516125ef565b93505050505f6138ea613730886021615001565b90505f6138fb613730896021615001565b90505f61393361391a61390f8b6023615001565b6108d48c6006615001565b6108f26139288c6023615001565b6108cf8d6006615001565b90505f613951612b5c61394687896125ef565b6108cf8d6021615001565b905061395d81886125ef565b90505f6139856139776139718d6006615001565b876125ef565b6108f26139718e6022615001565b90505f6139938c6023615001565b90505f6139a3612b5c83846125ef565b60808c0185905260a08c0184905290506139bd818b6125ef565b8b6006602002015250505050505050505050505050565b5f6139e05f6001612623565b90505f6139ee5f6002612623565b90505f6139fc5f6003612623565b90505f613a18613a0d88601d615001565b6108f289601c615001565b90505f613a34613a2989601e615001565b6108f28a601d615001565b90505f613a50613a458a601f615001565b6108f28b601e615001565b90505f613a6c613a618b6024615001565b6108f28c601f615001565b905083613a7d816108cf818b61260a565b9050613a8d816108cf878a61260a565b9050613a9d816108cf878961260a565b9050613aae816108cf8d6008615001565b9050613aba818a6125ef565b60e08b01525082613acf816108cf818b61260a565b9050613adf816108cf868a61260a565b9050613aef816108cf868961260a565b9050613b00816108cf8d6008615001565b9050613b0c818a6125ef565b6101008b01525081613b22816108cf818b61260a565b9050613b32816108cf858a61260a565b9050613b42816108cf858961260a565b9050613b53816108cf8d6008615001565b9050613b5f818a6125ef565b6101208b01525080613b75816108cf818b61260a565b9050613b85816108cf848a61260a565b9050613b95816108cf848961260a565b9050613ba6816108cf8d6008615001565b9050613bb2818a6125ef565b610140909a019990995250505050505050505050565b613c016040518060e001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b613c0c84601d615001565b8152613c1984601e615001565b6020820152613c29846024615001565b6040820152613c39846027615001565b6060820152613c49846026615001565b6080820152613c59846025615001565b60a08201525f613c6a856002615001565b90505f613c77865f615001565b90505f613c8b8460400151855f0151612623565b90505f613ca0856020015186602001516125ef565b606086015190915086905f90613cb690806125ef565b90505f613cd4613cce89602001518a606001516125ef565b886125ef565b90505f613cf3613cec8a60a001518b6040015161260a565b8a5161260a565b9050613d0261397182886125ef565b9050613d29613d23613d1d613d178487612623565b88612623565b8461260a565b8361260a565b9050613d51613d46613d3b83876125ef565b6108cf8f6009615001565b6108cf60018a612623565b6101608c015250505050602085015160808601515f91613d709161260a565b90505f613d8e613d848860600151886125ef565b8860200151612623565b90505f613db2613d9e84876125ef565b6108d46137658b60a001518c5f0151612623565b9050613dda613dcf613dc4838c6125ef565b6108cf8e6009615001565b6108cf600189612623565b6101808b0152505f9150613dfb9050613df483601161260a565b87516125ef565b90505f613e08838461260a565b9050613e14818261260a565b90505f613e228360096125ef565b9050613e4b613e45613730613e3e8b60a001518c5f015161260a565b8b5161260a565b82612623565b60c089018190525f90613e6690613cce90613d3b908d6125ef565b9050613e798b600b60200201518261260a565b6101608c0152505086515f9250613ea09150613df490613e99908061260a565b885161260a565b90505f613ee0613ebb836108cf8a5f01518b60a00151612623565b60208901516108f290613ece908061260a565b6108cf8b602001518c6080015161260a565b9050613efd89600c60200201516108d4613cce613d3b858d6125ef565b89600c602002015250505050505050505050565b613f7b604051806101e001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b613f93613f8986601e615001565b85604001516125ef565b808252613fb2906108d4613fa888601d615001565b87602001516125ef565b808252613fc7906108d4613df488601c615001565b808252613fd9906108d4876001615001565b80825260208201819052613ff2906108f287601f615001565b815261400d614002866024615001565b6108f287601c615001565b608082015261402b614020866027615001565b6108f287601f615001565b60608201526080810151614044906108cf816001612623565b6101c082015260808101516140849061407a90614073906108cf60015f516020615c8f5f395f51905f526155d4565b600161260a565b82606001516125ef565b60a082018190526140ba906140ac906108cf6140a1896002615001565b6108cf8a6003615001565b6108cf61376588600a615001565b83600e60200201526101c08101516140de906140ac906108cf6140a1896002615001565b6101e08401528051614103906108cf6140f8886002615001565b6108cf896003615001565b6101208201525f61412261411887601f615001565b8360200151612623565b9050614133816108cf836001612623565b60e0830152614150614146876026615001565b86604001516125ef565b60408301819052614173906108d4614169896025615001565b88602001516125ef565b60408301819052614193906108d461418c896024615001565b88516125ef565b60408301526141b06141a6876027615001565b8360400151612623565b60408301525f6141cf6141c4886026615001565b6108f289601e615001565b90506142216141fc61347e614073866080015160015f516020615c8f5f395f51905f526108cf91906155d4565b6108cf614073866040015160015f516020615c8f5f395f51905f526108cf91906155d4565b60c084015260408301516142439061423990806125ef565b8460400151612623565b61010084015260c083015161426f90614261906108cf8a6004615001565b6108cf6139718a600a615001565b6102008601526101c083015161428e90614261906108cf8a6004615001565b6102208601526101008301516142ad90614261906108cf8a6004615001565b61024086015260e08301516142c7906108cf896004615001565b6101408401526142e66142db886025615001565b6108f289601d615001565b6101608401526080830151614324906141c49061431990614073906108cf60015f516020615c8f5f395f51905f526155d4565b8561016001516125ef565b61018084018190526101208401516101a0850181905261435b916108d4906108cf6143508c6005615001565b6108cf8d6002615001565b6101a08401819052835161437b91906108d4906108cf6143508c5f615001565b6101a08401819052610140840151614393919061260a565b6101a084018190526143ad906108cf6139718a600a615001565b6101a0840181905285600d6137a1565b6143f66040518060e001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b61442b61441261440786601c615001565b6108cf876025615001565b6108d4614420876024615001565b6108cf88601d615001565b815261447061446561444c61444187601c615001565b6108cf88601f615001565b6108d461445a88601d615001565b6108cf89601e615001565b6108f2866026615001565b6040820181905261448590600160441b6125ef565b6040820181905261449b906108f2866027615001565b6040820181905281516144ae919061260a565b604082018190526144c4906108cf866005615001565b604082015280516144d990600160441b6125ef565b8082526144f9906108d46144ee876024615001565b6108cf886025615001565b80825260208201819052614520906108f261451587601e615001565b6108d488601f615001565b60208201819052614536906108cf866004615001565b6020820152805160608201819052614553906108d486601f615001565b60608201819052614577906108f261456c876026615001565b6108d4886027615001565b6060820181905261458c906108cf865f615001565b8160600181815250505f6145b56145ab8360200151846040015161260a565b836060015161260a565b90506145c6816108cf876003615001565b90506145de6145d6866025615001565b6140006125ef565b608083018190526145f4906108d4876024615001565b60808301819052614607906140006125ef565b6080830181905261461d906108d487601e615001565b60808301819052614630906140006125ef565b60808301819052614646906108d487601d615001565b60808301819052614659906140006125ef565b6080830181905261466f906108d487601c615001565b60808301819052614685906108f287601f615001565b6080830181905261469b906108cf876005615001565b60808301526146ae6145d6866026615001565b60a083018190526146c4906108d4876025615001565b60a083018190526146d7906140006125ef565b60a083018190526146ed906108d4876024615001565b60a08301819052614700906140006125ef565b60a08301819052614716906108d487601f615001565b60a08301819052614729906140006125ef565b60a0830181905261473f906108d487601e615001565b60a08301819052614755906108f2876027615001565b60a0830181905261476a906108cf875f615001565b60a0830181905260808301515f91614782919061260a565b9050614793816108cf886004615001565b905061479f828261260a565b60c084018190526147b8906108cf61397189600b615001565b60c084018190528560136020020152505050505050565b6148456040518061022001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b61485e61485385601c615001565b6108d4866002615001565b815261487961486e85601d615001565b6108d4866003615001565b602082015261489761488c85601e615001565b6108d4866004615001565b60408201526148b56148aa85601f615001565b6108d4866005615001565b606082015280516148e7906148e0906148d9906148d290806125ef565b84516125ef565b83516125ef565b82516125ef565b608082015260208101516149259061491b906149119061490790806125ef565b84602001516125ef565b83602001516125ef565b82602001516125ef565b60a08201526040810151614963906149599061494f9061494590806125ef565b84604001516125ef565b83604001516125ef565b82604001516125ef565b60c082015260608101516149979061407a9061498d9061498390806125ef565b84606001516125ef565b83606001516125ef565b60e0820152608081015160a08201516149b0919061260a565b61010082015260c081015160e08201516149ca919061260a565b61012082015260a08101516149ee906149e3908061260a565b82610120015161260a565b61014082015260e0810151614a1290614a07908061260a565b82610100015161260a565b610160820152610120810151614a28908061260a565b6101e08201819052614a4990614a3e908061260a565b82610160015161260a565b6101e0820152610100810151614a5f908061260a565b6101a08201819052614a8090614a75908061260a565b82610140015161260a565b6101a08201819052610160820151614a979161260a565b6101808201526101408101516101e0820151614ab3919061260a565b6101c0820152614ac761347e85600c615001565b6102008201819052610280840151610180830151614af2926108d4916108cf906108f28a6024615001565b8360146020020152614b2283601560200201516108d48361020001516108cf856101a001516108f28a6025615001565b8360156020020152614b5283601660200201516108d48361020001516108cf856101c001516108f28a6026615001565b8360166020020152614b8283601760200201516108d48361020001516108cf856101e001516108f28a6027615001565b836017602002015250505050565b614be26040518061016001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b5f6040518060800160405280614c177f10dc6e9c006ea38b04b1e03b4bd9490c0d03f98929ca1d7fb56821fd19d3b6e76125d7565b8152602001614c457f0c28145b6a44df3e0149b3d0a30b3bb599df9756d4dd9b84a86b38cfb45a740b6125d7565b8152602001614c727e544b8338791518b2c7645a50392798b21f75bb60e3596170067d00141cac156125d7565b8152602001614ca07f222c01175718386f2e2e82eb122789e352e105a3b8fa852613bc534433ee428b6125d7565b90529050614cbd614cb286601c615001565b6108d4876002615001565b6101208301819052614cfc90614cf190614ce690614cdb90806125ef565b8561012001516125ef565b8461012001516125ef565b8361012001516125ef565b8252614d0985601d615001565b6020830152614d1985601e615001565b6040830152614d2985601f615001565b606083015281516020830151614d51916145ab91614d47919061260a565b846040015161260a565b6080830152614d6461373086600d615001565b6101408301528151614d8590614d7b90835f610b7d565b836080015161260a565b60a0830152614db184601860200201516108d48461014001516108cf8660a001516108f28b6024615001565b6103008501526020820151614dcc90614d7b90836001610b7d565b60c0830152614df884601960200201516108d48461014001516108cf8660c001516108f28b6025615001565b6103208501526040820151614e1390614d7b90836002610b7d565b60e0830152614e3f84601a60200201516108d48461014001516108cf8660e001516108f28b6026615001565b6103408501526060820151614e5a90614d7b90836003610b7d565b610100830152614e8884601b60200201516108d48461014001516108cf8661010001516108f28b6027615001565b84601b6135b7565b815160015b601c811015614ee257614ed8826108d48684601c8110614eb757614eb7615b74565b602002015186614ec86001876155d4565b601b8110610b7d57610b7d615b74565b9150600101614e95565b5092915050565b5f5f8390505f60405160208152602080820152602060408201528260608201528460808201525f516020615c8f5f395f51905f5260a082015260205f60c08360055afa80614f35575f5ffd5b505f5160809190910160405295945050505050565b614f52615314565b614f5a615314565b604051835181526020840151602082015284604082015260408160608360075afa80614f84575f5ffd5b5080518252602080820151908301526060016040529392505050565b614fa8615314565b614fb0615314565b6040518451815260208501516020820152835160408201526020840151606082015260408160808360065afa80614fe5575f5ffd5b5080518252602080820151908301526080016040529392505050565b5f8282602881111561501557615015615c5a565b6029811061502557615025615b74565b60200201519392505050565b604051806103e001604052805f81526020015f81526020015f8152602001615057615314565b8152602001615064615314565b8152602001615071615314565b815260200161507e615314565b815260200161508b615314565b8152602001615098615314565b81526020016150a5615314565b81526020016150b2615314565b81526020016150bf615314565b81526020016150cc615314565b81526020016150d9615314565b81526020016150e6615314565b81526020016150f3615314565b8152602001615100615314565b815260200161510d615314565b815260200161511a615314565b8152602001615127615314565b8152602001615134615314565b8152602001615141615314565b815260200161514e615314565b815260200161515b615314565b8152602001615168615314565b8152602001615175615314565b8152602001615182615314565b815260200161518f615314565b815260200161519c615314565b81526020016151a9615314565b81526020016151b6615314565b905290565b604051806102a001604052806151cf6153e0565b81526020016151dc615314565b81526020016151e9615314565b81526020016151f6615314565b8152602001615203615314565b8152602001615210615314565b815260200161521d615314565b815260200161522a615314565b8152602001615237615314565b81526020016152446153ff565b81526020015f815260200161525761542c565b815260200161526461545a565b81526020015f8152602001615277615314565b81526020015f815260200161528a615479565b815260200161529761535e565b815260200161519c6154a7565b604051806101c001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020016152e26154a7565b81526020016152ef6154a7565b81526020015f81526020015f81526020015f81526020015f8152602001606081525090565b60405180604001604052805f81526020015f81525090565b60405180604001604052806151a9615314565b6040518061012001604052806009906020820280368337509192915050565b604051806103800160405280601c906020820280368337509192915050565b6040518060e001604052806153906154c5565b81526020015f81526020015f81526020015f81526020015f81526020016153b56154c5565b81526020015f81525090565b6040518061010001604052806008906020820280368337509192915050565b6040518061020001604052806010906020820280368337509192915050565b60405180606001604052806003905b615416615314565b81526020019060019003908161540e5790505090565b604051806103800160405280601c905b61544461533f565b81526020019060019003908161543c5790505090565b6040518061052001604052806029906020820280368337509192915050565b604051806103600160405280601b905b615491615314565b8152602001906001900390816154895790505090565b60405180608001604052806004906020820280368337509192915050565b604051806120000160405280610100906020820280368337509192915050565b5f5f5f5f604085870312156154f8575f5ffd5b84356001600160401b0381111561550d575f5ffd5b8501601f8101871361551d575f5ffd5b80356001600160401b03811115615532575f5ffd5b876020828401011115615543575f5ffd5b6020918201955093508501356001600160401b03811115615562575f5ffd5b8501601f81018713615572575f5ffd5b80356001600160401b03811115615587575f5ffd5b8760208260051b840101111561559b575f5ffd5b949793965060200194505050565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417612604576126046155a9565b81810381811115612604576126046155a9565b805f5b60108110156131ee5781518452602093840193909101906001016155ea565b805f5b60038110156131ee5761562a84835180518252602090810151910152565b604093909301926020919091019060010161560c565b805f5b601c8110156131ee578151845f5b6009811015615670578251825260209283019290910190600101615651565b505050610120939093019260209190910190600101615643565b805f5b60298110156131ee57815184526020938401939091019060010161568d565b805f5b601b8110156131ee576156cd84835180518252602090810151910152565b60409390930192602091909101906001016156af565b805f5b601c8110156131ee5781518452602093840193909101906001016156e6565b805f5b60048110156131ee578151845260209384019390910190600101615708565b8183525f6001600160fb1b0383111561573e575f5ffd5b8260051b80836020870137939093016020019392505050565b6157628188516155e7565b5f602088015161578061020084018280518252602090810151910152565b5060408801518051610240840152602090810151610260840152606089015180516102808501528101516102a0840152608089015180516102c08501528101516102e084015260a0890151805161030085015281015161032084015260c0890151805161034085015281015161036084015260e089015180516103808501528101516103a084015261010089015180516103c085015201516103e0830152610120880151615832610400840182615609565b506101408801516104c08301526101608801516158536104e0840182615640565b5061018088015161586861246084018261568a565b506101a08801516129808301526101c088015180516129a0840152602001516129c08301526101e08801516129e08301526102008801516158ad612a008401826156ac565b506102208801516158c26130c08401826156e3565b506102408801516158d7613440840182615705565b5061026088015180516134c08401526020908101516134e0840152610280890151805161350085015201516135208301526135c061354083018190526159209083018789615727565b613560830195909552506135808101929092526135a0909101529392505050565b634e487b7160e01b5f52604160045260245ffd5b60405161014081016001600160401b038111828210171561597857615978615941565b60405290565b604051601f8201601f191681016001600160401b03811182821017156159a6576159a6615941565b604052919050565b5f60c082840312156159be575f5ffd5b60405160c081016001600160401b03811182821017156159e0576159e0615941565b604090815283518252602080850151908301528381015190820152606080840151908201526080808401519082015260a0928301519281019290925250919050565b5f82601f830112615a31575f5ffd5b5f610360615a3e8161597e565b915083018185821115615a4f575f5ffd5b845b82811015615a69578051825260209182019101615a51565b509195945050505050565b5f82601f830112615a83575f5ffd5b5f610380615a3e8161597e565b5f610be0828403128015615aa2575f5ffd5b50615aab615955565b615ab584846159ae565b8152615ac48460c08501615a22565b6020820152615ad7846104208501615a74565b60408201526107a08301516060820152615af5846107c08501615a74565b6080820152610b4083015160a0820152610b6083015160c0820152610b8083015160e0820152610ba0830151610100820152610bc09092015161012083015250919050565b80820180821115612604576126046155a9565b5f5f85851115615b5b575f5ffd5b83861115615b67575f5ffd5b5050820193919092039150565b634e487b7160e01b5f52603260045260245ffd5b5f60018201615b9957615b996155a9565b5060010190565b80356020831015612604575f19602084900360031b1b1692915050565b5f82615bd757634e487b7160e01b5f52601260045260245ffd5b500690565b5f81615bea57615bea6155a9565b505f190190565b5f8183825b6008811015615c15578151835260209283019290910190600101615bf6565b5050506101008201905092915050565b5f82518060208501845e5f920191825250919050565b5f60208284031215615c4b575f5ffd5b815180151581146103dd575f5ffd5b634e487b7160e01b5f52602160045260245ffdfe30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4730644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001a164736f6c634300081c000a",
83
+ "deployedBytecode": "0x608060405234801561000f575f5ffd5b5060043610610029575f3560e01c8063ea50d0e41461002d575b5f5ffd5b61004061003b3660046154e5565b610054565b604051901515815260200160405180910390f35b5f5f61007f7f00000000000000000000000000000000000000000000000000000000000000006102ee565b905061008c8160206155bd565b85146100ee577f0000000000000000000000000000000000000000000000000000000000000000856100bf8360206155bd565b6040516359895a5360e01b81526004810193909352602483019190915260448201526064015b60405180910390fd5b5f6100f76103e4565b90505f61012588887f00000000000000000000000000000000000000000000000000000000000000006103f9565b90506010826040015161013891906155d4565b85146101575760405163fa06659360e01b815260040160405180910390fd5b60405163995bf45760e01b81525f9073__$3f925933ac313a1c84f3f4c25b9ea43c90$__9063995bf457906101fa9085908b908b907f0000000000000000000000000000000000000000000000000000000000000000907f0000000000000000000000000000000000000000000000000000000000000000907f000000000000000000000000000000000000000000000000000000000000000090600401615757565b610be060405180830381865af4158015610216573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061023a9190615a90565b905061028a8787808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525050855185516060810151608090910151919350915060016108ac565b815160a0015261029a8282610a13565b6102b7576040516313f8744360e31b815260040160405180910390fd5b6102c2828483610bc8565b6102df576040516352ec174560e11b815260040160405180910390fd5b50600198975050505050505050565b5f806102fc600260086155bd565b905061030a600260046155bd565b6103149082615b3a565b905060016103236009856155bd565b61032d91906155bd565b6103379082615b3a565b9050610345600160296155bd565b61034f9082615b3a565b905061035d600160036155bd565b6103679082615b3a565b90506103746001846155bd565b61037e9082615b3a565b905061038c600160046155bd565b6103969082615b3a565b905060026103a56001856155d4565b6103af91906155bd565b6103b99082615b3a565b90506103c66002806155bd565b6103d09082615b3a565b90506103dd601082615b3a565b9392505050565b6103ec615031565b6103f4611c0a565b905090565b6104016151bb565b5f805b60108110156104635761043086838761041e602083615b3a565b9261042b93929190615b4d565b612542565b8351826010811061044357610443615b74565b6020020181815250506020826104599190615b3a565b9150600101610404565b50610487858286610475604083615b3a565b9261048293929190615b4d565b612555565b6020830152610497604082615b3a565b90506104aa858286610475604083615b3a565b6040808401919091526104bd9082615b3a565b90506104d0858286610475604083615b3a565b60608301526104e0604082615b3a565b90506104f3858286610475604083615b3a565b60a0830152610503604082615b3a565b9050610516858286610475604083615b3a565b60c0830152610526604082615b3a565b9050610539858286610475604083615b3a565b6080830152610549604082615b3a565b905061055c858286610475604083615b3a565b60e083015261056c604082615b3a565b905061057f858286610475604083615b3a565b610100830152610590604082615b3a565b90506105a3858286610475604083615b3a565b610120830151526105b5604082615b3a565b90506105c885828661041e602083615b3a565b6101408301526105d9602082615b3a565b90505f5b83811015610657575f5b600981101561064e5761060187848861041e602083615b3a565b84610160015183601c811061061857610618615b74565b6020020151826009811061062e5761062e615b74565b6020020181815250506020836106449190615b3a565b92506001016105e7565b506001016105dd565b505f5b60298110156106ab5761067486838761041e602083615b3a565b836101800151826029811061068b5761068b615b74565b6020020181815250506020826106a19190615b3a565b915060010161065a565b506106bd85828661041e602083615b3a565b6101a08301526106ce602082615b3a565b90506106e1858286610475604083615b3a565b610120830151602001526106f6604082615b3a565b9050610709858286610475604083615b3a565b61012083015160026020020152610721604082615b3a565b9050610734858286610475604083615b3a565b6101c0830152610745604082615b3a565b905061075885828661041e602083615b3a565b6101e0830152610769602082615b3a565b90505f5b6107786001856155d4565b8110156107c157610790868387610475604083615b3a565b83610200015182601b81106107a7576107a7615b74565b60200201526107b7604083615b3a565b915060010161076d565b505f5b83811015610814576107dd86838761041e602083615b3a565b83610220015182601c81106107f4576107f4615b74565b60200201818152505060208261080a9190615b3a565b91506001016107c4565b505f5b60048110156108685761083186838761041e602083615b3a565b836102400151826004811061084857610848615b74565b60200201818152505060208261085e9190615b3a565b9150600101610817565b5061087a858286610475604083615b3a565b61026083015261088b604082615b3a565b905061089e858286610475604083615b3a565b610280830152509392505050565b5f600180826108d9866108d4896108cf6108ca8a6310000000615b3a565b6125d7565b6125ef565b61260a565b90505f6108f7876108f28a6108cf6108ca8b6001615b3a565b612623565b90505f5b61092660107f00000000000000000000000000000000000000000000000000000000000000006155d4565b811015610993575f6109508c838151811061094357610943615b74565b602002602001015161264b565b9050610960866108cf868461260a565b9550610970856108cf858461260a565b945061097c848b61260a565b9350610988838b612623565b9250506001016108fb565b505f5b60108110156109fa575f8a82601081106109b2576109b2615b74565b602002015190506109c7866108cf868461260a565b95506109d7856108cf858461260a565b94506109e3848b61260a565b93506109ef838b612623565b925050600101610996565b50610a058484612660565b9a9950505050505050505050565b5f5f610a2883606001518561014001516125ef565b905060015f5b7f0000000000000000000000000000000000000000000000000000000000000000811015610b1a575f86610160015182601c8110610a6e57610a6e615b74565b602002015180519091505f90610a8c908360015b602002015161260a565b9050848114610aae576040516313f8744360e31b815260040160405180910390fd5b5f876080015184601c8110610ac557610ac5615b74565b60200201519050610ad6838261266e565b9550610b0a856108cf60016108d4856108cf8e604001518b601c8110610afe57610afe615b74565b60200201516001612623565b9450505050806001019050610a2e565b505f610b34866101800151865f015187602001518561281c565b9050600160025b7f0000000000000000000000000000000000000000000000000000000000000000811015610b9157610b8782886080015183601c8110610b7d57610b7d615b74565b60200201516125ef565b9150600101610b3b565b50610bb7610ba4836108cf600185612623565b6108d4896101a0015189606001516125ef565b91508382145b979650505050505050565b5f610bd16152a4565b5f610c008460c001517f0000000000000000000000000000000000000000000000000000000000000000612895565b90505f6003610c307f00000000000000000000000000000000000000000000000000000000000000006024615b3a565b610c3a9190615b3a565b610c45906003615b3a565b6001600160401b03811115610c5c57610c5c615941565b604051908082528060200260200182016040528015610c85578160200160208202803683370190505b5090505f6003610cb67f00000000000000000000000000000000000000000000000000000000000000006024615b3a565b610cc09190615b3a565b610ccb906003615b3a565b6001600160401b03811115610ce257610ce2615941565b604051908082528060200260200182016040528015610d1b57816020015b610d08615314565b815260200190600190039081610d005790505b509050610d4e610d49876101000151855f81518110610d3c57610d3c615b74565b6020026020010151612623565b61295e565b84610120018181525050610d83610d49876101000151855f81518110610d7657610d76615b74565b602002602001015161260a565b610140850181905261012085015160e0880151610da4926108d491906125ef565b845260c0860151610dd490610db89061295e565b6108cf8661012001516108f28a60e001518961014001516125ef565b6020850152815160019083905f90610dee57610dee615b74565b602002602001018181525050876102600151815f81518110610e1257610e12615b74565b60209081029190910101526101e088015160c085015260a080870151908501528351610e3d906129ce565b60408501526020840151610e50906129ce565b60608501526040840151825183906001908110610e6f57610e6f615b74565b60209081029190910101525f5b6024811015610f1657610e9785604001518660a001516125ef565b83610ea3836002615b3a565b81518110610eb357610eb3615b74565b602002602001018181525050610ef08560c001516108d48b61018001518460298110610ee157610ee1615b74565b60200201518860a001516125ef565b60c086015260a08086015190880151610f0991906125ef565b60a0860152600101610e7c565b505f5b6005811015610fe4575f610f2e601e83615b3a565b90505f610f3c602484615b3a565b9050610f6d858381518110610f5357610f53615b74565b60200260200101516108d489606001518a60a001516125ef565b858381518110610f7f57610f7f615b74565b602002602001018181525050610fbc8760c001516108d48d61018001518460298110610fad57610fad615b74565b60200201518a60a001516125ef565b60c088015260a080880151908a0151610fd591906125ef565b60a08801525050600101610f19565b50876101c0015181600181518110610ffe57610ffe615b74565b602002602001018190525086606001518160028151811061102157611021615b74565b602002602001018190525086608001518160038151811061104457611044615b74565b60200260200101819052508660a001518160048151811061106757611067615b74565b60200260200101819052508660c001518160058151811061108a5761108a615b74565b60200260200101819052508660e00151816006815181106110ad576110ad615b74565b6020026020010181905250866101000151816007815181106110d1576110d1615b74565b6020026020010181905250866101200151816008815181106110f5576110f5615b74565b60200260200101819052508661014001518160098151811061111957611119615b74565b602002602001018190525086610160015181600a8151811061113d5761113d615b74565b6020026020010181905250866101c0015181600b8151811061116157611161615b74565b602002602001018190525086610180015181600c8151811061118557611185615b74565b6020026020010181905250866101a0015181600d815181106111a9576111a9615b74565b6020026020010181905250866101e0015181600e815181106111cd576111cd615b74565b602002602001018190525086610200015181600f815181106111f1576111f1615b74565b60200260200101819052508661022001518160108151811061121557611215615b74565b60200260200101819052508661024001518160118151811061123957611239615b74565b60200260200101819052508661026001518160128151811061125d5761125d615b74565b60200260200101819052508661028001518160138151811061128157611281615b74565b6020026020010181905250866102a00151816014815181106112a5576112a5615b74565b6020026020010181905250866102c00151816015815181106112c9576112c9615b74565b6020026020010181905250866102e00151816016815181106112ed576112ed615b74565b60200260200101819052508661030001518160178151811061131157611311615b74565b60200260200101819052508661032001518160188151811061133557611335615b74565b60200260200101819052508661034001518160198151811061135957611359615b74565b602002602001018190525086610360015181601a8151811061137d5761137d615b74565b602002602001018190525086610380015181601b815181106113a1576113a1615b74565b6020026020010181905250866103a0015181601c815181106113c5576113c5615b74565b6020026020010181905250866103c0015181601d815181106113e9576113e9615b74565b6020026020010181905250876020015181601e8151811061140c5761140c615b74565b6020026020010181905250876040015181601f8151811061142f5761142f615b74565b602002602001018190525087606001518160208151811061145257611452615b74565b602002602001018190525087608001518160218151811061147557611475615b74565b60200260200101819052508761010001518160228151811061149957611499615b74565b60200260200101819052508760e00151816023815181106114bc576114bc615b74565b60200260200101819052508760a00151816024815181106114df576114df615b74565b60200260200101819052508760c001518160258151811061150257611502615b74565b60200260200101819052505f61154887608001518660c001518b6102200151877f00000000000000000000000000000000000000000000000000000000000000006129e0565b9050611572815f8151811061155f5761155f615b74565b60200260200101518661012001516125ef565b608086018190526102208a01515160e08901516115a392916108d49161159891906125ef565b8861014001516125ef565b608086015260e08701516115b690612b3e565b60a08601525f6115c860246002615b3a565b90505f5b6115f760017f00000000000000000000000000000000000000000000000000000000000000006155d4565b811015611808575f61162a60017f00000000000000000000000000000000000000000000000000000000000000006155d4565b8210159050806117995761165e610d498b61010001518985600161164e9190615b3a565b81518110610d3c57610d3c615b74565b6101208901526101008a015161168e90610d49908961167e866001615b3a565b81518110610d7657610d76615b74565b61014089015260a08801516101208901516116a991906125ef565b61016089015260a088015160e08b01516116d1916116c6916125ef565b8961014001516125ef565b61018089018190526116f4906116e6906129ce565b6108d48a61016001516129ce565b866116ff8486615b3a565b8151811061170f5761170f615b74565b6020026020010181815250505f6117488961018001518e61022001518560016117389190615b3a565b601c8110610b7d57610b7d615b74565b9050611782816108d48b6101600151888760016117659190615b3a565b8151811061177557611775615b74565b60200260200101516125ef565b905061179289608001518261260a565b60808a0152505b6117b86117ae8960a001518c60e001516125ef565b8b60e001516125ef565b60a08901526102008c015182601b81106117d4576117d4615b74565b6020020151856117e48486615b3a565b815181106117f4576117f4615b74565b6020908102919091010152506001016115cc565b5061183460017f00000000000000000000000000000000000000000000000000000000000000006155d4565b61183e9082615b3a565b905061185e6118568961010001518a60c00151612623565b600190612660565b60e08701515261010088015160c08901516118a291611856916108f2907f07b0c561a6148404f086204a9f36ffb0617942546750f230c893619174a57a76906125ef565b60e0878101805160200192909252815180516040909101529051805160609091015260a0870151908901516118e4916118da916125ef565b8960e001516125ef565b60a08701525f5b6004811015611992575f61191d8860e00151836004811061190e5761190e615b74565b60200201518960a001516125ef565b9050611928816129ce565b886101000151836004811061193f5761193f615b74565b602002015260a088015160e08b015161195891906125ef565b8860a001818152505061198488608001516108d4838f61024001518660048110610b7d57610b7d615b74565b6080890152506001016118eb565b506101008601515184518590839081106119ae576119ae615b74565b602090810291909101810191909152610100870151908101516119d2916002610a82565b846119de836001615b3a565b815181106119ee576119ee615b74565b60209081029190910101526101008601516060015184611a0f836002615b3a565b81518110611a1f57611a1f615b74565b60209081029190910101525f5b6003811015611a81578a61012001518160038110611a4c57611a4c615b74565b60200201518483611a5c81615b88565b945081518110611a6e57611a6e615b74565b6020908102919091010152600101611a2c565b506040518060400160405280600181526020016002815250838281518110611aab57611aab615b74565b60200260200101819052508560800151848280611ac790615b88565b935081518110611ad957611ad9615b74565b602002602001018181525050611b038a61024001518960c001518a608001518d6101a00151612b49565b611b205760405163a2a2ac8360e01b815260040160405180910390fd5b5f8a6102800151905080848381518110611b3c57611b3c615b74565b6020026020010181905250886101000151858381518110611b5f57611b5f615b74565b602002602001018181525050611b7361532c565b611b7d8587612eac565b8152611b8882612fc8565b602082018190528c5182515f92611ba092919061300e565b90505f5f611bb08f5f0151613094565b91509150611bbd82613155565b611bc681613155565b8351611bd39083856131f4565b84526020840151611be59082856131f4565b602085018190528451611bf791613223565b9f9e505050505050505050505050505050565b611c12615031565b50604080516103e0810182526120008152600d602080830191909152601182840152825180840184527f1a5c96bf5dac44c45e28380daccedfec1d9a8919999a0d748a8686f7f42cba7681527f28c5876a4c88720ff49870cbc3b7f41c26a131f4d57ce95cbc6127859c08931f818301526060830152825180840184527f2c740230a118ad04f1482eeef2e75a14aed0f961b763120de34d0fbe63ca12b081527f1b9aa7fd5bf93acbaadd615b6e0829e714539fe471bece34b359cd6a96d00294818301526080830152825180840184527f22a702d6d3957500783049fee5af2a27155cfdf1b6c2958942f5cde4bc63d16381527e3567b43861479b2347249040b9a4c4423f494e6dd8a7de9a4e3900741c45518183015260a0830152825180840184527f1333cd6f8595ef95ab9d9744d1d00175a56c1b0bc60000ac6d4eb9ec7315c70a81527f1c891650f45fe25cf375ea0b322372757b89799546eed2152766130e6b99efa08183015260c0830152825180840184527f251fdc445de2b90170e8c86c41a81303bb3de75352f2bd6f095bdab77486445a81527f06f20c995414f9b6bdb794492d328124e2b7676329a5a1724365076751ad2a8a8183015260e0830152825180840184527f12600bb185b845c63e4b9d5c310db2d257aa5d1d09090ef3c8bdd7334e8991d081527f017ccf0bdad7381ff8a3bef25259d90c296b71c037ee58bcce51cb0b7a6e97f481830152610100830152825180840184527f0c4032c3079594eb75a8449d3d5ce8bc3661650d53f9b24d923d8f404cb0bbc981527f1084d709650356d40f0158fd6da81f54eb5fe796a0ca89441369b7c24301f85181830152610120830152825180840184527f1f13031b7801d2da6d5206a7da087d7661d87905cef81f24e3cbe9e7a1c5148881527f2d93aa6923ac15844842bd024199117f43ca14c883f37570030fdf385356a18a81830152610140830152825180840184527f300557c1eda8ed63912d72e051bb3431bd54f7395755b820a59ff85295eb36d981527f227e5f5f62555201e96e188514b5387fb7e026a4af0ac209ec6730c4e0e6cc7681830152610160830152825180840184527f02095e5acd019e4edaf8d736615b4a159deafdb98a171db591ed499b0219fb4b81527f0644f4dc54ac72663d956a233412f748e74b1591553ecbca703829acf75e471a81830152610180830152825180840184527f022bae55678012a184d4cb970b8f9a6d1334097d611de534bef96fc9f8d9d01181527f284ee2d499274885bcb7a0d77b0a261d9192ec413b0c0a86fb27ae88cdd5a72c818301526101a0830152825180840184527f20a7925feb244b2ba41d31db4651a6c6c6be672ed0e7711f2ef4c2b89f9c4a5f81527f2472b531a32a7d7f80ec3c3375977ba4968f326786473e34d1fd73e6236cf661818301526101c0830152825180840184527f2dd8c7e5ce5f6a7053c173bb140d46830ab962c6c45d637d66171ee540bb21d581527f033b47f5f8496af8d227ef175c47b3f7cd666ebc94f0e63562ebfcf30d73f6e2818301526101e0830152825180840184527f2940b2ab034af88869e264e12ee268b16c221b5f2cdd96748cce870c1a7bb24a81527f04cfb9bfe08adf0e6f25c2cc9e83448d8f23d9fb3a0efba8d41768520d62d0e881830152610200830152825180840184527f1b300dbb752984d39a06a3278fc9048a525d0fdf14ef98f17ffb42a971fb903281527f01ccd716ea4eeba47b57e3110f305af0d1e2feec11f2656816dbb234ea0b3b1b81830152610220830152825180840184527f0d2e187f65cf5ab43eac061f54e93bdcc292b2f518ee632b030ea3290143139c81527f03ff9967978b924f43af1e71f6281ee36a96c1b647bbf8c17e3cb4626068b78b81830152610240830152825180840184527f2106e82e5e59b21be7c8ac07ede04efc6445f01e31b5ce7894444cb081df43d181527f0571641ab150cfa4371421f984cc897945b69ca100d0960c2ee5ca1d17cd967081830152610260830152825180840184527f27599a711decc65fa4aad9515655e029868cc54d495fb8b53fa44e165702a5ee81527f1d9db80b8419761979511454f69fa448fc50d15062e434c6994c4ccc4912f67281830152610280830152825180840184527f1fa05f284bf1410f37f0d556ccfeb052395ec8625620cf724d146a3b15496d4d81527f0c8fc17b9b81b4f93a7b9bdd1cc5f01a30ef6e808409c456f6d6d13fe7d2eb17818301526102a0830152825180840184527f05798d2cd96b3294d8cc2f0120fa58ffea3a662e32039784f0b0b051e34e871881527f02d377efbb702de6d6a38e5c42c6aaf56cc11762d724a635ea4d5dc72eb9e0ca818301526102c0830152825180840184527f110bd6ab5007b97692cd6e8ea8cab85d8b039d9e8dc2a9931fa6dcd72e0adac881527f2e418397e17371fcf5a1a5c614f4dfe9727b79d5aa127ab98c04a7a4c06ccb9f818301526102e0830152825180840184527f0ccf438e4b27c76e599cda77ba04ad29cbaf538ded427e979eef69a5a9884b7881527f09117b0cb34fc65ed20f92de70c6f8e073c755fb4acf2d74f402c6a97ee3d01a81830152610300830152825180840184527f099e3bd5a0a00ab7fe18040105b9b395b5d8b7b4a63b05df652b0d10ef146d2681527e15b8d2515d76e2ccec99dcd194592129af3a637f5a622a32440f860d1e2a7f81830152610320830152825180840184527f1b917517920bad3d8bc01c9595092a222b888108dc25d1aa450e0b4bc212c37e81527f305e8992b148eedb22e6e992077a84482141c7ebe42000a1d58ccb74381f6d1981830152610340830152825180840184527f13567e3b915c81013ada15236ba5cfa60111b440400b2bca37e2b1085e924a7781527f0148d22589b91f0d8f4674af5744dedafd63caea904b434e748f9713de8cc3d781830152610360830152825180840184527f043d063b130adfb37342af45d0155a28edd1a7e46c840d9c943fdf45521c64ce81527f261522c4089330646aff96736194949330952ae74c573d1686d9cb4a007338548183015261038083015282518084018452600181526002818301526103a083015282518084019093527f22671e023cbbeb82d51b48eb911951a7a1f9c2bb913f3f42a56f272e205d462483527f139bdfe9fe99633e5abe888702fa64a75c80d62184d0a16bd999840553954bb1908301526103c081019190915290565b5f6103dd6125508385615ba0565b61264b565b61255d615314565b60408051808201909152805f516020615c6f5f395f51905f5261258360205f8789615b4d565b61258c91615ba0565b6125969190615bbd565b81526020908101905f516020615c6f5f395f51905f52906125bb906040908789615b4d565b6125c491615ba0565b6125ce9190615bbd565b90529392505050565b5f5f516020615c8f5f395f51905f52825b0692915050565b5f5f516020615c8f5f395f51905f5282840990505b92915050565b5f5f516020615c8f5f395f51905f528284089392505050565b5f5f516020615c8f5f395f51905f52825f516020615c8f5f395f51905f520384089392505050565b5f5f516020615c8f5f395f51905f52826125e8565b5f6103dd836108cf8461295e565b5f5f604051806101200160405280619d8081526020017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593efffec5181526020016105a081526020017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593effffd31815260200161024081526020017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593effffd3181526020016105a081526020017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593efffec518152602001619d8081525090505f600190505f5f90505b60098110156127675761275d826108cf8784612623565b9150600101612746565b5061277061533f565b5f5b60098110156127c1576127a2610d4985836009811061279357612793615b74565b60200201516108cf8985612623565b8282600981106127b4576127b4615b74565b6020020152600101612772565b505f5b6009811015612807576127fd856108d48984600981106127e6576127e6615b74565b6020020151858560098110610b7d57610b7d615b74565b94506001016127c4565b5061281284836125ef565b9695505050505050565b5f61282561535e565b612830868285613417565b61283c868683866135c3565b612848868683866137af565b6128538682856139d4565b61285e868285613bc8565b61286a86868386613f11565b6128758682856143bd565b6128808682856147cf565b61288b868285614b90565b6128128185614e90565b60605f826001600160401b038111156128b0576128b0615941565b6040519080825280602002602001820160405280156128d9578160200160208202803683370190505b50905083815f815181106128ef576128ef615b74565b602090810291909101015260015b8381101561295657612931826129146001846155d4565b8151811061292457612924615b74565b6020026020010151612b3e565b82828151811061294357612943615b74565b60209081029190910101526001016128fd565b509392505050565b5f5f8290505f604051602081526020808201526020604082015282606082015260025f516020615c8f5f395f51905f520360808201525f516020615c8f5f395f51905f5260a082015260205f60c08360055afa806129ba575f5ffd5b505f51608091909101604052949350505050565b5f516020615c8f5f395f51905f520390565b60605f826001600160401b038111156129fb576129fb615941565b604051908082528060200260200182016040528015612a24578160200160208202803683370190505b509050825b8015612b33575f85612a3c6001846155d4565b81518110612a4c57612a4c615b74565b602002602001015190505f89600184612a6591906155d4565b601c8110612a7557612a75615b74565b602002015190505f612ad0612a94612a8d858d6125ef565b60026125ef565b6108f28b612aa36001896155d4565b601c8110612ab357612ab3615b74565b60200201516108cf612aca886108cf60018a612623565b87612623565b9050612af1816108cf610d49612aeb876108cf600189612623565b8661260a565b99508990508085612b036001876155d4565b81518110612b1357612b13615b74565b60200260200101818152505050505080612b2c90615bdc565b9050612a29565b509695505050505050565b5f61260482836125ef565b5f600181612b62612b5c87610100614ee9565b83612623565b905080612b825760405163835eb8f760e01b815260040160405180910390fd5b612b8a61537d565b80518390525f5b7f0000000000000000000000000000000000000000000000000000000000000000811015612c73575f612bc58260096155bd565b612bd0906001615b3a565b905084835f0151826101008110612be957612be9615b74565b60200201525f612bfa826001615b3a565b90505b612c08600983615b3a565b811015612c69578351612c4890612c206001846155d4565b6101008110612c3157612c31615b74565b60200201518a85601c8110610b7d57610b7d615b74565b8451826101008110612c5c57612c5c615b74565b6020020152600101612bfd565b5050600101612b91565b50608081018390525f602082018190525b610100811015612d8457612ca5612c9f83608001518a6125ef565b85612623565b8260a00151826101008110612cbc57612cbc615b74565b602002015260a0820151612ce690826101008110612cdc57612cdc615b74565b602002015161295e565b8260a00151826101008110612cfd57612cfd615b74565b602002018181525050612d4382602001516108d4845f0151846101008110612d2757612d27615b74565b60200201518560a00151856101008110610b7d57610b7d615b74565b60208301526080820151612d77907f204bd3277422fad364751ad938e2b5e6a54cf8c68712848a692c553d0329f5d66125ef565b6080830152600101612c84565b505f612d95836108cf61010061295e565b9050612da58260200151826125ef565b602083015260a0820151612dc0905f5b6020020151826125ef565b604083015260a0820151612dec90612ddb60016101006155d4565b6101008110612db557612db5615b74565b60608301526040820151612e02908a6002610b7d565b60c08301819052612e62906108d4612e3a8b7f204bd3277422fad364751ad938e2b5e6a54cf8c68712848a692c553d0329f5d6612623565b60208d015160408e01516108cf91612e5191612623565b8e5160208901516108f291906125ef565b60c083018190526060830151612e9791612e8b916108d4906108cf8e600260200201518c612623565b6108f2858c6003610b7d565b60c08301819052159998505050505050505050565b612eb4615314565b5f6003612ee27f00000000000000000000000000000000000000000000000000000000000000006024615b3a565b612eec9190615b3a565b612ef7906003615b3a565b90505f5b81811015612f2d57612f25858281518110612f1857612f18615b74565b6020026020010151613155565b600101612efb565b50604051600190815b60018401811015612f925760208102870160208202870181515160408501528151602001516060850152805160808501525050604080830160606040850160075afa8316925060408260808460065afa90921691600101612f36565b5080518452602081015160208501525080612fc0576040516352ec174560e11b815260040160405180910390fd5b505092915050565b612fd0615314565b5f516020615c6f5f395f51905f5282602001515f516020615c6f5f395f51905f52612ffb91906155d4565b6130059190615bbd565b60208301525090565b5f5f5f61301a86613094565b915091506130266153c1565b82518152602080840151818301528251604080840191909152838201516060840152875160808401528782015160a0840152865160c08401528682015160e084015251610bbd9161307991849101615bf1565b6040516020818303038152906040528051906020012061264b565b61309c615314565b6130a4615314565b82516020808501516040860151606087015160cc90811b608892831b604494851b90961795909517949094178652608087015160a088015160c089015160e08a0151871b90841b91851b9092171717868401526101008701516101208801516101408901516101608a0151871b90841b91851b909217171785526101808701516101a08801516101c08901516101e09099015190951b9790911b9390911b1791909117939093179281019290925291565b805160208201515f5f516020615c6f5f395f51905f528380095f516020615c6f5f395f51905f5260035f516020615c6f5f395f51905f52838709085f516020615c6f5f395f51905f5284850914915050806131ee5760405162461bcd60e51b8152602060048201526019602482015278706f696e74206973206e6f74206f6e2074686520637572766560381b60448201526064016100e5565b50505050565b6131fc615314565b613204615314565b61320e8386614f4a565b905061321a8185614fa0565b95945050505050565b81516020808401518351848301516040805194850195909552938301919091527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c260608301527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed60808301527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b60a08301527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa60c083015260e08201526101008101919091527f260e01b251f6f1c7e7ff4e580791dee8ea51d87a358e038b4efe30fac09383c16101208201527f0118c4d5b837bcc2bc89b5b398b5974e9f5944073b32078b7e231fec938883b06101408201527f04fc6369f7110fe3d25156c1bb9a72859cf2a04641f99ba4ee413c80da6a5fe46101608201527f22febda3c0c0632a56475b4214e5615e11e6dd3f96e6cea2854a87d4dacc5e556101808201525f9081906101a00160405160208183030381529060405290505f5f60086001600160a01b0316836040516133b99190615c25565b5f60405180830381855afa9150503d805f81146133f1576040519150601f19603f3d011682016040523d82523d5f602084013e6133f6565b606091505b50915091508180156128125750808060200190518101906128129190615c3b565b5f613423846007615001565b90507f183227397098d014dc2822db40c0ac2e9419f4243cdcb848a1f0fac9f80000005f61348461347e613458856003612623565b6108cf6134736134688b5f615001565b6108cf8c601d615001565b6108cf8b601c615001565b836125ef565b90506135056134fa6134e16134c86134af856108d46134a48d6002615001565b6108cf8e601c615001565b6108d46134bd8c6003615001565b6108cf8d601d615001565b6108d46134d68b6004615001565b6108cf8c601e615001565b6108d46134ef8a6005615001565b6108cf8b601f615001565b6108d4886001615001565b9050613524816108d4613519866001612623565b6108cf8a6027615001565b905061353081846125ef565b905061353c81856125ef565b8552505f905061357661356c61356161355688601c615001565b6108d489601f615001565b6108f2886024615001565b6108d4875f615001565b9050613587816108cf846002612623565b9050613598816108cf846001612623565b90506135a481836125ef565b90506135b081846125ef565b9050808460015b60200201525050505050565b5f5f5f6135f96135ef6135d789601c615001565b6108d46135e58b6012615001565b8a606001516125ef565b876080015161260a565b9050613632816108cf6136286136108b601d615001565b6108d461361e8d6013615001565b8c606001516125ef565b896080015161260a565b9050613657816108cf6136286136498b601e615001565b6108d461361e8d6014615001565b905061367c816108cf61362861366e8b601f615001565b6108d461361e8d6015615001565b92505f90506136a06135ef61369289601c615001565b6108d46135e58b600e615001565b90506136c5816108cf6136286136b78b601d615001565b6108d461361e8d600f615001565b90506136ea816108cf6136286136dc8b601e615001565b6108d461361e8d6010615001565b905061370f816108cf6136286137018b601f615001565b6108d461361e8d6011615001565b91505f9050613736613730613725896020615001565b6108d48a601a615001565b846125ef565b905061376b816108f261376561374d8b6028615001565b6108d461375b8d601b615001565b8c60a001516125ef565b856125ef565b905061377781856125ef565b6040860152505f61379a61376561378f89601b615001565b6108cf8a6028615001565b9050808560035b602002015250505050505050565b5f5f61380d6137f56137dd6137c86136288a6016615001565b6108d46137d68b6017615001565b8a516125ef565b6108d46137eb8a6018615001565b89602001516125ef565b6108d4613803896019615001565b88604001516125ef565b91505f61384461382b61382189601c615001565b886080015161260a565b6108d46138398a6003615001565b6108cf8b6024615001565b90505f61386d61385589601d615001565b6108d46138628b5f615001565b6108cf8c6025615001565b90505f61389761387e8a601e615001565b6108d461388c8c6001615001565b6108cf8d6026615001565b90506138d66138be6138b0856108d4868d5f01516125ef565b6108d4848c602001516125ef565b6108d46138cc8c6004615001565b8b604001516125ef565b93505050505f6138ea613730886021615001565b90505f6138fb613730896021615001565b90505f61393361391a61390f8b6023615001565b6108d48c6006615001565b6108f26139288c6023615001565b6108cf8d6006615001565b90505f613951612b5c61394687896125ef565b6108cf8d6021615001565b905061395d81886125ef565b90505f6139856139776139718d6006615001565b876125ef565b6108f26139718e6022615001565b90505f6139938c6023615001565b90505f6139a3612b5c83846125ef565b60808c0185905260a08c0184905290506139bd818b6125ef565b8b6006602002015250505050505050505050505050565b5f6139e05f6001612623565b90505f6139ee5f6002612623565b90505f6139fc5f6003612623565b90505f613a18613a0d88601d615001565b6108f289601c615001565b90505f613a34613a2989601e615001565b6108f28a601d615001565b90505f613a50613a458a601f615001565b6108f28b601e615001565b90505f613a6c613a618b6024615001565b6108f28c601f615001565b905083613a7d816108cf818b61260a565b9050613a8d816108cf878a61260a565b9050613a9d816108cf878961260a565b9050613aae816108cf8d6008615001565b9050613aba818a6125ef565b60e08b01525082613acf816108cf818b61260a565b9050613adf816108cf868a61260a565b9050613aef816108cf868961260a565b9050613b00816108cf8d6008615001565b9050613b0c818a6125ef565b6101008b01525081613b22816108cf818b61260a565b9050613b32816108cf858a61260a565b9050613b42816108cf858961260a565b9050613b53816108cf8d6008615001565b9050613b5f818a6125ef565b6101208b01525080613b75816108cf818b61260a565b9050613b85816108cf848a61260a565b9050613b95816108cf848961260a565b9050613ba6816108cf8d6008615001565b9050613bb2818a6125ef565b610140909a019990995250505050505050505050565b613c016040518060e001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b613c0c84601d615001565b8152613c1984601e615001565b6020820152613c29846024615001565b6040820152613c39846027615001565b6060820152613c49846026615001565b6080820152613c59846025615001565b60a08201525f613c6a856002615001565b90505f613c77865f615001565b90505f613c8b8460400151855f0151612623565b90505f613ca0856020015186602001516125ef565b606086015190915086905f90613cb690806125ef565b90505f613cd4613cce89602001518a606001516125ef565b886125ef565b90505f613cf3613cec8a60a001518b6040015161260a565b8a5161260a565b9050613d0261397182886125ef565b9050613d29613d23613d1d613d178487612623565b88612623565b8461260a565b8361260a565b9050613d51613d46613d3b83876125ef565b6108cf8f6009615001565b6108cf60018a612623565b6101608c015250505050602085015160808601515f91613d709161260a565b90505f613d8e613d848860600151886125ef565b8860200151612623565b90505f613db2613d9e84876125ef565b6108d46137658b60a001518c5f0151612623565b9050613dda613dcf613dc4838c6125ef565b6108cf8e6009615001565b6108cf600189612623565b6101808b0152505f9150613dfb9050613df483601161260a565b87516125ef565b90505f613e08838461260a565b9050613e14818261260a565b90505f613e228360096125ef565b9050613e4b613e45613730613e3e8b60a001518c5f015161260a565b8b5161260a565b82612623565b60c089018190525f90613e6690613cce90613d3b908d6125ef565b9050613e798b600b60200201518261260a565b6101608c0152505086515f9250613ea09150613df490613e99908061260a565b885161260a565b90505f613ee0613ebb836108cf8a5f01518b60a00151612623565b60208901516108f290613ece908061260a565b6108cf8b602001518c6080015161260a565b9050613efd89600c60200201516108d4613cce613d3b858d6125ef565b89600c602002015250505050505050505050565b613f7b604051806101e001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b613f93613f8986601e615001565b85604001516125ef565b808252613fb2906108d4613fa888601d615001565b87602001516125ef565b808252613fc7906108d4613df488601c615001565b808252613fd9906108d4876001615001565b80825260208201819052613ff2906108f287601f615001565b815261400d614002866024615001565b6108f287601c615001565b608082015261402b614020866027615001565b6108f287601f615001565b60608201526080810151614044906108cf816001612623565b6101c082015260808101516140849061407a90614073906108cf60015f516020615c8f5f395f51905f526155d4565b600161260a565b82606001516125ef565b60a082018190526140ba906140ac906108cf6140a1896002615001565b6108cf8a6003615001565b6108cf61376588600a615001565b83600e60200201526101c08101516140de906140ac906108cf6140a1896002615001565b6101e08401528051614103906108cf6140f8886002615001565b6108cf896003615001565b6101208201525f61412261411887601f615001565b8360200151612623565b9050614133816108cf836001612623565b60e0830152614150614146876026615001565b86604001516125ef565b60408301819052614173906108d4614169896025615001565b88602001516125ef565b60408301819052614193906108d461418c896024615001565b88516125ef565b60408301526141b06141a6876027615001565b8360400151612623565b60408301525f6141cf6141c4886026615001565b6108f289601e615001565b90506142216141fc61347e614073866080015160015f516020615c8f5f395f51905f526108cf91906155d4565b6108cf614073866040015160015f516020615c8f5f395f51905f526108cf91906155d4565b60c084015260408301516142439061423990806125ef565b8460400151612623565b61010084015260c083015161426f90614261906108cf8a6004615001565b6108cf6139718a600a615001565b6102008601526101c083015161428e90614261906108cf8a6004615001565b6102208601526101008301516142ad90614261906108cf8a6004615001565b61024086015260e08301516142c7906108cf896004615001565b6101408401526142e66142db886025615001565b6108f289601d615001565b6101608401526080830151614324906141c49061431990614073906108cf60015f516020615c8f5f395f51905f526155d4565b8561016001516125ef565b61018084018190526101208401516101a0850181905261435b916108d4906108cf6143508c6005615001565b6108cf8d6002615001565b6101a08401819052835161437b91906108d4906108cf6143508c5f615001565b6101a08401819052610140840151614393919061260a565b6101a084018190526143ad906108cf6139718a600a615001565b6101a0840181905285600d6137a1565b6143f66040518060e001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b61442b61441261440786601c615001565b6108cf876025615001565b6108d4614420876024615001565b6108cf88601d615001565b815261447061446561444c61444187601c615001565b6108cf88601f615001565b6108d461445a88601d615001565b6108cf89601e615001565b6108f2866026615001565b6040820181905261448590600160441b6125ef565b6040820181905261449b906108f2866027615001565b6040820181905281516144ae919061260a565b604082018190526144c4906108cf866005615001565b604082015280516144d990600160441b6125ef565b8082526144f9906108d46144ee876024615001565b6108cf886025615001565b80825260208201819052614520906108f261451587601e615001565b6108d488601f615001565b60208201819052614536906108cf866004615001565b6020820152805160608201819052614553906108d486601f615001565b60608201819052614577906108f261456c876026615001565b6108d4886027615001565b6060820181905261458c906108cf865f615001565b8160600181815250505f6145b56145ab8360200151846040015161260a565b836060015161260a565b90506145c6816108cf876003615001565b90506145de6145d6866025615001565b6140006125ef565b608083018190526145f4906108d4876024615001565b60808301819052614607906140006125ef565b6080830181905261461d906108d487601e615001565b60808301819052614630906140006125ef565b60808301819052614646906108d487601d615001565b60808301819052614659906140006125ef565b6080830181905261466f906108d487601c615001565b60808301819052614685906108f287601f615001565b6080830181905261469b906108cf876005615001565b60808301526146ae6145d6866026615001565b60a083018190526146c4906108d4876025615001565b60a083018190526146d7906140006125ef565b60a083018190526146ed906108d4876024615001565b60a08301819052614700906140006125ef565b60a08301819052614716906108d487601f615001565b60a08301819052614729906140006125ef565b60a0830181905261473f906108d487601e615001565b60a08301819052614755906108f2876027615001565b60a0830181905261476a906108cf875f615001565b60a0830181905260808301515f91614782919061260a565b9050614793816108cf886004615001565b905061479f828261260a565b60c084018190526147b8906108cf61397189600b615001565b60c084018190528560136020020152505050505050565b6148456040518061022001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b61485e61485385601c615001565b6108d4866002615001565b815261487961486e85601d615001565b6108d4866003615001565b602082015261489761488c85601e615001565b6108d4866004615001565b60408201526148b56148aa85601f615001565b6108d4866005615001565b606082015280516148e7906148e0906148d9906148d290806125ef565b84516125ef565b83516125ef565b82516125ef565b608082015260208101516149259061491b906149119061490790806125ef565b84602001516125ef565b83602001516125ef565b82602001516125ef565b60a08201526040810151614963906149599061494f9061494590806125ef565b84604001516125ef565b83604001516125ef565b82604001516125ef565b60c082015260608101516149979061407a9061498d9061498390806125ef565b84606001516125ef565b83606001516125ef565b60e0820152608081015160a08201516149b0919061260a565b61010082015260c081015160e08201516149ca919061260a565b61012082015260a08101516149ee906149e3908061260a565b82610120015161260a565b61014082015260e0810151614a1290614a07908061260a565b82610100015161260a565b610160820152610120810151614a28908061260a565b6101e08201819052614a4990614a3e908061260a565b82610160015161260a565b6101e0820152610100810151614a5f908061260a565b6101a08201819052614a8090614a75908061260a565b82610140015161260a565b6101a08201819052610160820151614a979161260a565b6101808201526101408101516101e0820151614ab3919061260a565b6101c0820152614ac761347e85600c615001565b6102008201819052610280840151610180830151614af2926108d4916108cf906108f28a6024615001565b8360146020020152614b2283601560200201516108d48361020001516108cf856101a001516108f28a6025615001565b8360156020020152614b5283601660200201516108d48361020001516108cf856101c001516108f28a6026615001565b8360166020020152614b8283601760200201516108d48361020001516108cf856101e001516108f28a6027615001565b836017602002015250505050565b614be26040518061016001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b5f6040518060800160405280614c177f10dc6e9c006ea38b04b1e03b4bd9490c0d03f98929ca1d7fb56821fd19d3b6e76125d7565b8152602001614c457f0c28145b6a44df3e0149b3d0a30b3bb599df9756d4dd9b84a86b38cfb45a740b6125d7565b8152602001614c727e544b8338791518b2c7645a50392798b21f75bb60e3596170067d00141cac156125d7565b8152602001614ca07f222c01175718386f2e2e82eb122789e352e105a3b8fa852613bc534433ee428b6125d7565b90529050614cbd614cb286601c615001565b6108d4876002615001565b6101208301819052614cfc90614cf190614ce690614cdb90806125ef565b8561012001516125ef565b8461012001516125ef565b8361012001516125ef565b8252614d0985601d615001565b6020830152614d1985601e615001565b6040830152614d2985601f615001565b606083015281516020830151614d51916145ab91614d47919061260a565b846040015161260a565b6080830152614d6461373086600d615001565b6101408301528151614d8590614d7b90835f610b7d565b836080015161260a565b60a0830152614db184601860200201516108d48461014001516108cf8660a001516108f28b6024615001565b6103008501526020820151614dcc90614d7b90836001610b7d565b60c0830152614df884601960200201516108d48461014001516108cf8660c001516108f28b6025615001565b6103208501526040820151614e1390614d7b90836002610b7d565b60e0830152614e3f84601a60200201516108d48461014001516108cf8660e001516108f28b6026615001565b6103408501526060820151614e5a90614d7b90836003610b7d565b610100830152614e8884601b60200201516108d48461014001516108cf8661010001516108f28b6027615001565b84601b6135b7565b815160015b601c811015614ee257614ed8826108d48684601c8110614eb757614eb7615b74565b602002015186614ec86001876155d4565b601b8110610b7d57610b7d615b74565b9150600101614e95565b5092915050565b5f5f8390505f60405160208152602080820152602060408201528260608201528460808201525f516020615c8f5f395f51905f5260a082015260205f60c08360055afa80614f35575f5ffd5b505f5160809190910160405295945050505050565b614f52615314565b614f5a615314565b604051835181526020840151602082015284604082015260408160608360075afa80614f84575f5ffd5b5080518252602080820151908301526060016040529392505050565b614fa8615314565b614fb0615314565b6040518451815260208501516020820152835160408201526020840151606082015260408160808360065afa80614fe5575f5ffd5b5080518252602080820151908301526080016040529392505050565b5f8282602881111561501557615015615c5a565b6029811061502557615025615b74565b60200201519392505050565b604051806103e001604052805f81526020015f81526020015f8152602001615057615314565b8152602001615064615314565b8152602001615071615314565b815260200161507e615314565b815260200161508b615314565b8152602001615098615314565b81526020016150a5615314565b81526020016150b2615314565b81526020016150bf615314565b81526020016150cc615314565b81526020016150d9615314565b81526020016150e6615314565b81526020016150f3615314565b8152602001615100615314565b815260200161510d615314565b815260200161511a615314565b8152602001615127615314565b8152602001615134615314565b8152602001615141615314565b815260200161514e615314565b815260200161515b615314565b8152602001615168615314565b8152602001615175615314565b8152602001615182615314565b815260200161518f615314565b815260200161519c615314565b81526020016151a9615314565b81526020016151b6615314565b905290565b604051806102a001604052806151cf6153e0565b81526020016151dc615314565b81526020016151e9615314565b81526020016151f6615314565b8152602001615203615314565b8152602001615210615314565b815260200161521d615314565b815260200161522a615314565b8152602001615237615314565b81526020016152446153ff565b81526020015f815260200161525761542c565b815260200161526461545a565b81526020015f8152602001615277615314565b81526020015f815260200161528a615479565b815260200161529761535e565b815260200161519c6154a7565b604051806101c001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020016152e26154a7565b81526020016152ef6154a7565b81526020015f81526020015f81526020015f81526020015f8152602001606081525090565b60405180604001604052805f81526020015f81525090565b60405180604001604052806151a9615314565b6040518061012001604052806009906020820280368337509192915050565b604051806103800160405280601c906020820280368337509192915050565b6040518060e001604052806153906154c5565b81526020015f81526020015f81526020015f81526020015f81526020016153b56154c5565b81526020015f81525090565b6040518061010001604052806008906020820280368337509192915050565b6040518061020001604052806010906020820280368337509192915050565b60405180606001604052806003905b615416615314565b81526020019060019003908161540e5790505090565b604051806103800160405280601c905b61544461533f565b81526020019060019003908161543c5790505090565b6040518061052001604052806029906020820280368337509192915050565b604051806103600160405280601b905b615491615314565b8152602001906001900390816154895790505090565b60405180608001604052806004906020820280368337509192915050565b604051806120000160405280610100906020820280368337509192915050565b5f5f5f5f604085870312156154f8575f5ffd5b84356001600160401b0381111561550d575f5ffd5b8501601f8101871361551d575f5ffd5b80356001600160401b03811115615532575f5ffd5b876020828401011115615543575f5ffd5b6020918201955093508501356001600160401b03811115615562575f5ffd5b8501601f81018713615572575f5ffd5b80356001600160401b03811115615587575f5ffd5b8760208260051b840101111561559b575f5ffd5b949793965060200194505050565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417612604576126046155a9565b81810381811115612604576126046155a9565b805f5b60108110156131ee5781518452602093840193909101906001016155ea565b805f5b60038110156131ee5761562a84835180518252602090810151910152565b604093909301926020919091019060010161560c565b805f5b601c8110156131ee578151845f5b6009811015615670578251825260209283019290910190600101615651565b505050610120939093019260209190910190600101615643565b805f5b60298110156131ee57815184526020938401939091019060010161568d565b805f5b601b8110156131ee576156cd84835180518252602090810151910152565b60409390930192602091909101906001016156af565b805f5b601c8110156131ee5781518452602093840193909101906001016156e6565b805f5b60048110156131ee578151845260209384019390910190600101615708565b8183525f6001600160fb1b0383111561573e575f5ffd5b8260051b80836020870137939093016020019392505050565b6157628188516155e7565b5f602088015161578061020084018280518252602090810151910152565b5060408801518051610240840152602090810151610260840152606089015180516102808501528101516102a0840152608089015180516102c08501528101516102e084015260a0890151805161030085015281015161032084015260c0890151805161034085015281015161036084015260e089015180516103808501528101516103a084015261010089015180516103c085015201516103e0830152610120880151615832610400840182615609565b506101408801516104c08301526101608801516158536104e0840182615640565b5061018088015161586861246084018261568a565b506101a08801516129808301526101c088015180516129a0840152602001516129c08301526101e08801516129e08301526102008801516158ad612a008401826156ac565b506102208801516158c26130c08401826156e3565b506102408801516158d7613440840182615705565b5061026088015180516134c08401526020908101516134e0840152610280890151805161350085015201516135208301526135c061354083018190526159209083018789615727565b613560830195909552506135808101929092526135a0909101529392505050565b634e487b7160e01b5f52604160045260245ffd5b60405161014081016001600160401b038111828210171561597857615978615941565b60405290565b604051601f8201601f191681016001600160401b03811182821017156159a6576159a6615941565b604052919050565b5f60c082840312156159be575f5ffd5b60405160c081016001600160401b03811182821017156159e0576159e0615941565b604090815283518252602080850151908301528381015190820152606080840151908201526080808401519082015260a0928301519281019290925250919050565b5f82601f830112615a31575f5ffd5b5f610360615a3e8161597e565b915083018185821115615a4f575f5ffd5b845b82811015615a69578051825260209182019101615a51565b509195945050505050565b5f82601f830112615a83575f5ffd5b5f610380615a3e8161597e565b5f610be0828403128015615aa2575f5ffd5b50615aab615955565b615ab584846159ae565b8152615ac48460c08501615a22565b6020820152615ad7846104208501615a74565b60408201526107a08301516060820152615af5846107c08501615a74565b6080820152610b4083015160a0820152610b6083015160c0820152610b8083015160e0820152610ba0830151610100820152610bc09092015161012083015250919050565b80820180821115612604576126046155a9565b5f5f85851115615b5b575f5ffd5b83861115615b67575f5ffd5b5050820193919092039150565b634e487b7160e01b5f52603260045260245ffd5b5f60018201615b9957615b996155a9565b5060010190565b80356020831015612604575f19602084900360031b1b1692915050565b5f82615bd757634e487b7160e01b5f52601260045260245ffd5b500690565b5f81615bea57615bea6155a9565b505f190190565b5f8183825b6008811015615c15578151835260209283019290910190600101615bf6565b5050506101008201905092915050565b5f82518060208501845e5f920191825250919050565b5f60208284031215615c4b575f5ffd5b815180151581146103dd575f5ffd5b634e487b7160e01b5f52602160045260245ffdfe30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4730644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001a164736f6c634300081c000a",
84
+ "linkReferences": {
85
+ "project/contracts/verifier/DkgPkVerifier.sol": {
86
+ "ZKTranscriptLib": [
87
+ {
88
+ "length": 20,
89
+ "start": 580
90
+ }
91
+ ]
92
+ }
93
+ },
94
+ "deployedLinkReferences": {
95
+ "project/contracts/verifier/DkgPkVerifier.sol": {
96
+ "ZKTranscriptLib": [
97
+ {
98
+ "length": 20,
99
+ "start": 360
100
+ }
101
+ ]
102
+ }
103
+ },
104
+ "immutableReferences": {
105
+ "32281": [
106
+ {
107
+ "length": 32,
108
+ "start": 91
109
+ },
110
+ {
111
+ "length": 32,
112
+ "start": 148
113
+ },
114
+ {
115
+ "length": 32,
116
+ "start": 257
117
+ },
118
+ {
119
+ "length": 32,
120
+ "start": 466
121
+ },
122
+ {
123
+ "length": 32,
124
+ "start": 2608
125
+ },
126
+ {
127
+ "length": 32,
128
+ "start": 2877
129
+ },
130
+ {
131
+ "length": 32,
132
+ "start": 3036
133
+ },
134
+ {
135
+ "length": 32,
136
+ "start": 3082
137
+ },
138
+ {
139
+ "length": 32,
140
+ "start": 3216
141
+ },
142
+ {
143
+ "length": 32,
144
+ "start": 5412
145
+ },
146
+ {
147
+ "length": 32,
148
+ "start": 5587
149
+ },
150
+ {
151
+ "length": 32,
152
+ "start": 5638
153
+ },
154
+ {
155
+ "length": 32,
156
+ "start": 6160
157
+ },
158
+ {
159
+ "length": 32,
160
+ "start": 11155
161
+ },
162
+ {
163
+ "length": 32,
164
+ "start": 11964
165
+ }
166
+ ],
167
+ "32283": [
168
+ {
169
+ "length": 32,
170
+ "start": 398
171
+ }
172
+ ],
173
+ "32285": [
174
+ {
175
+ "length": 32,
176
+ "start": 432
177
+ },
178
+ {
179
+ "length": 32,
180
+ "start": 2306
181
+ }
182
+ ]
183
+ },
184
+ "inputSourceName": "project/contracts/verifier/DkgPkVerifier.sol",
185
+ "buildInfoId": "solc-0_8_28-e60a5d7c133605edcf61acdd5ba43ab44ee0928e"
186
+ }
@@ -0,0 +1,13 @@
1
+ {
2
+ "_format": "hh3-artifact-1",
3
+ "contractName": "FrLib",
4
+ "sourceName": "contracts/verifier/DkgPkVerifier.sol",
5
+ "abi": [],
6
+ "bytecode": "0x602c6032600b8282823980515f1a607314602657634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe730000000000000000000000000000000000000000301460806040525f5ffdfea164736f6c634300081c000a",
7
+ "deployedBytecode": "0x730000000000000000000000000000000000000000301460806040525f5ffdfea164736f6c634300081c000a",
8
+ "linkReferences": {},
9
+ "deployedLinkReferences": {},
10
+ "immutableReferences": {},
11
+ "inputSourceName": "project/contracts/verifier/DkgPkVerifier.sol",
12
+ "buildInfoId": "solc-0_8_28-e60a5d7c133605edcf61acdd5ba43ab44ee0928e"
13
+ }
@@ -0,0 +1,13 @@
1
+ {
2
+ "_format": "hh3-artifact-1",
3
+ "contractName": "Honk",
4
+ "sourceName": "contracts/verifier/DkgPkVerifier.sol",
5
+ "abi": [],
6
+ "bytecode": "0x602c6032600b8282823980515f1a607314602657634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe730000000000000000000000000000000000000000301460806040525f5ffdfea164736f6c634300081c000a",
7
+ "deployedBytecode": "0x730000000000000000000000000000000000000000301460806040525f5ffdfea164736f6c634300081c000a",
8
+ "linkReferences": {},
9
+ "deployedLinkReferences": {},
10
+ "immutableReferences": {},
11
+ "inputSourceName": "project/contracts/verifier/DkgPkVerifier.sol",
12
+ "buildInfoId": "solc-0_8_28-e60a5d7c133605edcf61acdd5ba43ab44ee0928e"
13
+ }
@@ -0,0 +1,13 @@
1
+ {
2
+ "_format": "hh3-artifact-1",
3
+ "contractName": "HonkVerificationKey",
4
+ "sourceName": "contracts/verifier/DkgPkVerifier.sol",
5
+ "abi": [],
6
+ "bytecode": "0x602c6032600b8282823980515f1a607314602657634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe730000000000000000000000000000000000000000301460806040525f5ffdfea164736f6c634300081c000a",
7
+ "deployedBytecode": "0x730000000000000000000000000000000000000000301460806040525f5ffdfea164736f6c634300081c000a",
8
+ "linkReferences": {},
9
+ "deployedLinkReferences": {},
10
+ "immutableReferences": {},
11
+ "inputSourceName": "project/contracts/verifier/DkgPkVerifier.sol",
12
+ "buildInfoId": "solc-0_8_28-e60a5d7c133605edcf61acdd5ba43ab44ee0928e"
13
+ }
@@ -0,0 +1,38 @@
1
+ {
2
+ "_format": "hh3-artifact-1",
3
+ "contractName": "IVerifier",
4
+ "sourceName": "contracts/verifier/DkgPkVerifier.sol",
5
+ "abi": [
6
+ {
7
+ "inputs": [
8
+ {
9
+ "internalType": "bytes",
10
+ "name": "_proof",
11
+ "type": "bytes"
12
+ },
13
+ {
14
+ "internalType": "bytes32[]",
15
+ "name": "_publicInputs",
16
+ "type": "bytes32[]"
17
+ }
18
+ ],
19
+ "name": "verify",
20
+ "outputs": [
21
+ {
22
+ "internalType": "bool",
23
+ "name": "",
24
+ "type": "bool"
25
+ }
26
+ ],
27
+ "stateMutability": "nonpayable",
28
+ "type": "function"
29
+ }
30
+ ],
31
+ "bytecode": "0x",
32
+ "deployedBytecode": "0x",
33
+ "linkReferences": {},
34
+ "deployedLinkReferences": {},
35
+ "immutableReferences": {},
36
+ "inputSourceName": "project/contracts/verifier/DkgPkVerifier.sol",
37
+ "buildInfoId": "solc-0_8_28-e60a5d7c133605edcf61acdd5ba43ab44ee0928e"
38
+ }
@@ -0,0 +1,13 @@
1
+ {
2
+ "_format": "hh3-artifact-1",
3
+ "contractName": "RelationsLib",
4
+ "sourceName": "contracts/verifier/DkgPkVerifier.sol",
5
+ "abi": [],
6
+ "bytecode": "0x602c6032600b8282823980515f1a607314602657634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe730000000000000000000000000000000000000000301460806040525f5ffdfea164736f6c634300081c000a",
7
+ "deployedBytecode": "0x730000000000000000000000000000000000000000301460806040525f5ffdfea164736f6c634300081c000a",
8
+ "linkReferences": {},
9
+ "deployedLinkReferences": {},
10
+ "immutableReferences": {},
11
+ "inputSourceName": "project/contracts/verifier/DkgPkVerifier.sol",
12
+ "buildInfoId": "solc-0_8_28-e60a5d7c133605edcf61acdd5ba43ab44ee0928e"
13
+ }