@raac/rpc 1.1.0-beta.5 → 1.1.0-beta.6

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 (481) hide show
  1. package/dist/RPCLibrary.js +52 -23
  2. package/dist/artifacts/core/collectors/FeeCollector.sol/FeeCollector.json +83 -29
  3. package/dist/artifacts/core/minters/RAACMinter/RAACMinter.sol/RAACMinter.json +82 -31
  4. package/dist/artifacts/core/oracles/BaseVRFv2Consumer.sol/BaseVRFv2Consumer.json +114 -5
  5. package/dist/artifacts/core/oracles/RAACPrimeRateOracle.sol/RAACPrimeRateOracle.json +2 -2
  6. package/dist/artifacts/core/pools/LendingPool/ERC20AssetAdapter.sol/ERC20AssetAdapter.json +465 -0
  7. package/dist/artifacts/core/pools/LendingPool/ERC721AssetAdapter.sol/ERC721AssetAdapter.json +497 -0
  8. package/dist/artifacts/core/pools/LendingPool/LendingPool.sol/LendingPool.json +1065 -337
  9. package/dist/artifacts/core/pools/StabilityPool/StabilityPool.sol/StabilityPool.json +180 -99
  10. package/dist/artifacts/core/primitives/RAACHousePrices.sol/RAACHousePrices.json +20 -2
  11. package/dist/artifacts/core/tokens/DEToken.sol/DEToken.json +2 -29
  12. package/dist/artifacts/core/tokens/RAACNFT.sol/RAACNFT.json +158 -38
  13. package/dist/artifacts/core/tokens/RAACToken.sol/RAACToken.json +2 -2
  14. package/dist/artifacts/core/tokens/RToken.sol/RToken.json +2 -29
  15. package/dist/artifacts/core/tokens/veRAACToken.sol/veRAACToken.json +553 -224
  16. package/dist/artifacts/core/vaults/ERC20VaultAdapter.sol/ERC20VaultAdapter.json +354 -0
  17. package/dist/artifacts/core/vaults/ERC721VaultAdapter.sol/ERC721VaultAdapter.json +356 -0
  18. package/dist/artifacts/core/vaults/RWAVault.sol/RWAVault.json +1036 -0
  19. package/dist/artifacts/mocks/core/oracles/MockVRFCoordinatorV2.sol/MockVRFCoordinatorV2.json +622 -207
  20. package/dist/artifacts/mocks/core/tokens/crvUSDToken.sol/crvUSDToken.json +2 -2
  21. package/dist/artifacts/zeno/Auction.sol/Auction.json +89 -15
  22. package/dist/artifacts/zeno/AuctionFactory.sol/AuctionFactory.json +2 -2
  23. package/dist/artifacts/zeno/Zeno.sol/Zeno.json +108 -38
  24. package/dist/artifacts/zeno/ZenoFactory.sol/ZenoFactory.json +2 -2
  25. package/dist/configs/chains/17000.json +36 -0
  26. package/dist/configs/chains/8453.json +36 -0
  27. package/dist/pools/lendingPool/_helpers.js +29 -0
  28. package/dist/pools/lendingPool/adapters/erc20/getERC20AdapterBalance.js +20 -0
  29. package/dist/pools/lendingPool/adapters/erc20/getERC20AdapterInfo.js +32 -0
  30. package/dist/pools/lendingPool/adapters/erc721/getERC721AdapterDeposits.js +20 -0
  31. package/dist/pools/lendingPool/adapters/erc721/getERC721AdapterInfo.js +32 -0
  32. package/dist/pools/lendingPool/borrowFromLendingPool.js +2 -2
  33. package/dist/pools/lendingPool/borrowFromLendingPoolWithInsurance.js +4 -3
  34. package/dist/pools/lendingPool/calculateInsuranceFee.js +3 -2
  35. package/dist/pools/lendingPool/closeLiquidation.js +3 -2
  36. package/dist/pools/lendingPool/depositAssetToLendingPool.js +60 -0
  37. package/dist/pools/lendingPool/{getPendingReward.js → getAdapters.js} +10 -6
  38. package/dist/pools/lendingPool/getHealthFactor.js +2 -2
  39. package/dist/pools/lendingPool/getLendingPoolInfo.js +4 -13
  40. package/dist/pools/lendingPool/getParameters.js +33 -0
  41. package/dist/pools/lendingPool/getPositionDebt.js +3 -2
  42. package/dist/pools/lendingPool/getPositionScaledDebt.js +3 -2
  43. package/dist/pools/lendingPool/getPositionView.js +5 -2
  44. package/dist/pools/lendingPool/getPositionsScaledDebt.js +1 -0
  45. package/dist/pools/lendingPool/getUserCollateralValue.js +1 -0
  46. package/dist/pools/lendingPool/initializeLiquidation.js +2 -2
  47. package/dist/pools/lendingPool/repayToLendingPool.js +2 -2
  48. package/dist/pools/lendingPool/{withdrawNFTFromLendingPool.js → withdrawAssetFromLendingPool.js} +5 -5
  49. package/dist/pools/rwaVault/adapters/erc20/getERC20VaultAdapterAssetValue.js +21 -0
  50. package/dist/pools/rwaVault/adapters/erc20/getERC20VaultAdapterInfo.js +30 -0
  51. package/dist/pools/rwaVault/adapters/erc20/getERC20VaultAdapterTotalValue.js +20 -0
  52. package/dist/pools/rwaVault/adapters/erc721/getERC721VaultAdapterAssetValue.js +21 -0
  53. package/dist/pools/rwaVault/adapters/erc721/getERC721VaultAdapterDeposits.js +20 -0
  54. package/dist/pools/rwaVault/adapters/erc721/getERC721VaultAdapterInfo.js +30 -0
  55. package/dist/pools/rwaVault/adapters/erc721/getERC721VaultAdapterTotalValue.js +20 -0
  56. package/dist/pools/rwaVault/depositToRWAVault.js +27 -0
  57. package/dist/pools/rwaVault/getNextRandomNFT.js +25 -0
  58. package/dist/pools/rwaVault/getRWAVaultInfo.js +52 -0
  59. package/dist/pools/rwaVault/redeemNFTFromRWAVault.js +27 -0
  60. package/dist/pools/rwaVault/requestRandomSeed.js +27 -0
  61. package/dist/scripts/index.js +219 -152
  62. package/dist/types/RPCLibrary.d.ts +40 -21
  63. package/dist/types/pools/lendingPool/_helpers.d.ts +8 -0
  64. package/dist/types/pools/lendingPool/adapters/erc20/getERC20AdapterBalance.d.ts +4 -0
  65. package/dist/types/pools/lendingPool/adapters/erc20/getERC20AdapterInfo.d.ts +11 -0
  66. package/dist/types/pools/lendingPool/adapters/erc721/getERC721AdapterDeposits.d.ts +4 -0
  67. package/dist/types/pools/lendingPool/adapters/erc721/getERC721AdapterInfo.d.ts +11 -0
  68. package/dist/types/pools/lendingPool/borrowFromLendingPool.d.ts +2 -2
  69. package/dist/types/pools/lendingPool/borrowFromLendingPoolWithInsurance.d.ts +2 -2
  70. package/dist/types/pools/lendingPool/calculateInsuranceFee.d.ts +2 -2
  71. package/dist/types/pools/lendingPool/closeLiquidation.d.ts +2 -2
  72. package/dist/types/pools/lendingPool/depositAssetToLendingPool.d.ts +4 -0
  73. package/dist/types/pools/lendingPool/getAdapters.d.ts +8 -0
  74. package/dist/types/pools/lendingPool/getHealthFactor.d.ts +2 -2
  75. package/dist/types/pools/lendingPool/getLendingPoolInfo.d.ts +1 -3
  76. package/dist/types/pools/lendingPool/getParameters.d.ts +17 -0
  77. package/dist/types/pools/lendingPool/getPositionDebt.d.ts +2 -2
  78. package/dist/types/pools/lendingPool/getPositionScaledDebt.d.ts +2 -2
  79. package/dist/types/pools/lendingPool/getPositionView.d.ts +17 -14
  80. package/dist/types/pools/lendingPool/initializeLiquidation.d.ts +2 -2
  81. package/dist/types/pools/lendingPool/repayToLendingPool.d.ts +2 -2
  82. package/dist/types/pools/lendingPool/withdrawAssetFromLendingPool.d.ts +4 -0
  83. package/dist/types/pools/rwaVault/adapters/erc20/getERC20VaultAdapterAssetValue.d.ts +4 -0
  84. package/dist/types/pools/rwaVault/adapters/erc20/getERC20VaultAdapterInfo.d.ts +10 -0
  85. package/dist/types/pools/rwaVault/adapters/erc20/getERC20VaultAdapterTotalValue.d.ts +4 -0
  86. package/dist/types/pools/rwaVault/adapters/erc721/getERC721VaultAdapterAssetValue.d.ts +4 -0
  87. package/dist/types/pools/rwaVault/adapters/erc721/getERC721VaultAdapterDeposits.d.ts +4 -0
  88. package/dist/types/pools/rwaVault/adapters/erc721/getERC721VaultAdapterInfo.d.ts +10 -0
  89. package/dist/types/pools/rwaVault/adapters/erc721/getERC721VaultAdapterTotalValue.d.ts +4 -0
  90. package/dist/types/pools/rwaVault/depositToRWAVault.d.ts +4 -0
  91. package/dist/types/pools/rwaVault/getNextRandomNFT.d.ts +8 -0
  92. package/dist/types/pools/rwaVault/getRWAVaultInfo.d.ts +20 -0
  93. package/dist/types/pools/rwaVault/redeemNFTFromRWAVault.d.ts +4 -0
  94. package/dist/types/pools/rwaVault/requestRandomSeed.d.ts +4 -0
  95. package/dist/types/scripts/index.d.ts +0 -1
  96. package/dist/types/typechain-types/@chainlink/contracts/src/v0.8/shared/interfaces/AggregatorV3Interface.d.ts +103 -0
  97. package/dist/types/typechain-types/@chainlink/contracts/src/v0.8/shared/interfaces/IERC677Receiver.d.ts +37 -0
  98. package/dist/types/typechain-types/@chainlink/contracts/src/v0.8/shared/interfaces/LinkTokenInterface.d.ts +143 -0
  99. package/dist/types/typechain-types/@chainlink/contracts/src/v0.8/shared/interfaces/index.d.ts +3 -0
  100. package/dist/types/typechain-types/@chainlink/contracts/src/v0.8/vrf/dev/SubscriptionAPI.d.ts +529 -0
  101. package/dist/types/typechain-types/@chainlink/contracts/src/v0.8/vrf/dev/VRFConsumerBaseV2Plus.d.ts +109 -0
  102. package/dist/types/typechain-types/@chainlink/contracts/src/v0.8/vrf/dev/index.d.ts +6 -0
  103. package/dist/types/typechain-types/@chainlink/contracts/src/v0.8/vrf/dev/interfaces/IVRFCoordinatorV2Plus.d.ts +192 -0
  104. package/dist/types/typechain-types/@chainlink/contracts/src/v0.8/vrf/dev/interfaces/IVRFMigratableConsumerV2Plus.d.ts +45 -0
  105. package/dist/types/typechain-types/@chainlink/contracts/src/v0.8/vrf/dev/interfaces/IVRFSubscriptionV2Plus.d.ts +155 -0
  106. package/dist/types/typechain-types/@chainlink/contracts/src/v0.8/vrf/dev/interfaces/index.d.ts +3 -0
  107. package/dist/types/typechain-types/@chainlink/contracts/src/v0.8/vrf/dev/libraries/VRFV2PlusClient.d.ts +25 -0
  108. package/dist/types/typechain-types/@chainlink/contracts/src/v0.8/vrf/dev/libraries/index.d.ts +1 -0
  109. package/dist/types/typechain-types/@chainlink/contracts/src/v0.8/vrf/index.d.ts +4 -0
  110. package/dist/types/typechain-types/@chainlink/contracts/src/v0.8/vrf/mocks/VRFCoordinatorV2_5Mock.d.ts +731 -0
  111. package/dist/types/typechain-types/@chainlink/contracts/src/v0.8/vrf/mocks/index.d.ts +1 -0
  112. package/dist/types/typechain-types/@openzeppelin/contracts/access/Ownable2Step.d.ts +77 -0
  113. package/dist/types/typechain-types/@openzeppelin/contracts/access/index.d.ts +1 -0
  114. package/dist/types/typechain-types/@openzeppelin/contracts/interfaces/IERC1363.d.ts +231 -0
  115. package/dist/types/typechain-types/@openzeppelin/contracts/interfaces/IERC2981.d.ts +49 -0
  116. package/dist/types/typechain-types/@openzeppelin/contracts/interfaces/index.d.ts +2 -0
  117. package/dist/types/typechain-types/@openzeppelin/contracts/utils/Errors.d.ts +20 -0
  118. package/dist/types/typechain-types/@openzeppelin/contracts/utils/cryptography/MerkleProof.d.ts +20 -0
  119. package/dist/types/typechain-types/@openzeppelin/contracts/utils/cryptography/index.d.ts +1 -0
  120. package/dist/types/typechain-types/@openzeppelin/contracts/utils/index.d.ts +1 -0
  121. package/dist/types/typechain-types/@openzeppelin/contracts/utils/math/index.d.ts +0 -1
  122. package/dist/types/typechain-types/contracts/core/collectors/FeeCollector.d.ts +30 -1
  123. package/dist/types/typechain-types/contracts/core/collectors/NFTRoyaltyFeeCollector.sol/IWETH10Minimal.d.ts +53 -0
  124. package/dist/types/typechain-types/contracts/core/collectors/NFTRoyaltyFeeCollector.sol/NFTRoyaltyFeeCollector.d.ts +115 -0
  125. package/dist/types/typechain-types/contracts/core/collectors/NFTRoyaltyFeeCollector.sol/index.d.ts +2 -0
  126. package/dist/types/typechain-types/contracts/core/collectors/Treasury.d.ts +15 -1
  127. package/dist/types/typechain-types/contracts/core/collectors/index.d.ts +2 -0
  128. package/dist/types/typechain-types/contracts/core/governance/gauges/BaseGauge.d.ts +616 -142
  129. package/dist/types/typechain-types/contracts/core/governance/gauges/GaugeController.d.ts +396 -108
  130. package/dist/types/typechain-types/contracts/core/governance/gauges/GaugeRewardsDistributor.d.ts +623 -0
  131. package/dist/types/typechain-types/contracts/core/governance/gauges/RAACGauge.d.ts +609 -155
  132. package/dist/types/typechain-types/contracts/core/governance/gauges/RWAGauge.d.ts +610 -156
  133. package/dist/types/typechain-types/contracts/core/governance/gauges/index.d.ts +1 -0
  134. package/dist/types/typechain-types/contracts/core/governance/index.d.ts +0 -2
  135. package/dist/types/typechain-types/contracts/core/governance/proposals/Governance.d.ts +45 -67
  136. package/dist/types/typechain-types/contracts/core/index.d.ts +4 -0
  137. package/dist/types/typechain-types/contracts/core/lockers/LLamaTemple.d.ts +721 -0
  138. package/dist/types/typechain-types/contracts/core/lockers/index.d.ts +1 -0
  139. package/dist/types/typechain-types/contracts/core/minters/RAACMinter/RAACMinter.d.ts +69 -12
  140. package/dist/types/typechain-types/contracts/core/oracles/BaseChainlinkFunctionsOracle.d.ts +22 -4
  141. package/dist/types/typechain-types/contracts/core/oracles/BaseVRFv2Consumer.d.ts +40 -2
  142. package/dist/types/typechain-types/contracts/core/oracles/RAACHousePriceOracle.d.ts +41 -8
  143. package/dist/types/typechain-types/contracts/core/oracles/RAACPrimeRateOracle.d.ts +39 -7
  144. package/dist/types/typechain-types/contracts/core/pools/LendingPool/ERC20AssetAdapter.sol/ERC20AssetAdapter.d.ts +232 -0
  145. package/dist/types/typechain-types/contracts/core/pools/LendingPool/ERC20AssetAdapter.sol/IERC20Adapter.d.ts +25 -0
  146. package/dist/types/typechain-types/contracts/core/pools/LendingPool/ERC20AssetAdapter.sol/IPriceOracle.d.ts +25 -0
  147. package/dist/types/typechain-types/contracts/core/pools/LendingPool/ERC20AssetAdapter.sol/index.d.ts +3 -0
  148. package/dist/types/typechain-types/contracts/core/pools/LendingPool/ERC721AssetAdapter.sol/ERC721AssetAdapter.d.ts +254 -0
  149. package/dist/types/typechain-types/contracts/core/pools/LendingPool/ERC721AssetAdapter.sol/IPriceOracle.d.ts +29 -0
  150. package/dist/types/typechain-types/contracts/core/pools/LendingPool/ERC721AssetAdapter.sol/index.d.ts +2 -0
  151. package/dist/types/typechain-types/contracts/core/pools/LendingPool/LendingPool.d.ts +728 -205
  152. package/dist/types/typechain-types/contracts/core/pools/LendingPool/LendingPoolStorage.d.ts +440 -0
  153. package/dist/types/typechain-types/contracts/core/pools/LendingPool/LiquidationProxy.d.ts +538 -0
  154. package/dist/types/typechain-types/contracts/core/pools/LendingPool/VaultProxy.d.ts +485 -0
  155. package/dist/types/typechain-types/contracts/core/pools/LendingPool/index.d.ts +7 -0
  156. package/dist/types/typechain-types/contracts/core/pools/StabilityPool/LiquidationStrategyProxy.d.ts +158 -0
  157. package/dist/types/typechain-types/contracts/core/pools/StabilityPool/LiquidationSwap.d.ts +124 -0
  158. package/dist/types/typechain-types/contracts/core/pools/StabilityPool/StabilityPool.d.ts +135 -79
  159. package/dist/types/typechain-types/contracts/core/pools/StabilityPool/StabilityPoolStorage.d.ts +140 -0
  160. package/dist/types/typechain-types/contracts/core/pools/StabilityPool/index.d.ts +3 -1
  161. package/dist/types/typechain-types/contracts/core/primitives/ComplianceRegistry.d.ts +203 -0
  162. package/dist/types/typechain-types/contracts/core/primitives/RAACHousePrices.d.ts +23 -1
  163. package/dist/types/typechain-types/contracts/core/primitives/WithCompliance.d.ts +25 -0
  164. package/dist/types/typechain-types/contracts/core/primitives/index.d.ts +2 -0
  165. package/dist/types/typechain-types/contracts/core/tokens/DebtToken.d.ts +6 -15
  166. package/dist/types/typechain-types/contracts/core/tokens/RAACNFT.d.ts +94 -11
  167. package/dist/types/typechain-types/contracts/core/tokens/RToken.d.ts +1 -17
  168. package/dist/types/typechain-types/contracts/core/tokens/RWAIndexToken.d.ts +264 -0
  169. package/dist/types/typechain-types/contracts/core/tokens/VeRAACToken.d.ts +433 -172
  170. package/dist/types/typechain-types/contracts/core/tokens/index.d.ts +1 -1
  171. package/dist/types/typechain-types/contracts/core/vaults/ERC20VaultAdapter.sol/ERC20VaultAdapter.d.ts +174 -0
  172. package/dist/types/typechain-types/contracts/core/vaults/ERC20VaultAdapter.sol/IPriceOracle.d.ts +25 -0
  173. package/dist/types/typechain-types/contracts/core/vaults/ERC20VaultAdapter.sol/index.d.ts +2 -0
  174. package/dist/types/typechain-types/contracts/core/vaults/ERC721VaultAdapter.sol/ERC721VaultAdapter.d.ts +178 -0
  175. package/dist/types/typechain-types/contracts/core/vaults/ERC721VaultAdapter.sol/IPriceOracle.d.ts +29 -0
  176. package/dist/types/typechain-types/contracts/core/vaults/ERC721VaultAdapter.sol/index.d.ts +2 -0
  177. package/dist/types/typechain-types/contracts/core/vaults/RWAVault.d.ts +511 -0
  178. package/dist/types/typechain-types/contracts/core/vaults/index.d.ts +5 -0
  179. package/dist/types/typechain-types/contracts/interfaces/IComplianceRegistry.d.ts +63 -0
  180. package/dist/types/typechain-types/contracts/interfaces/INFTLiquidator.d.ts +190 -23
  181. package/dist/types/typechain-types/contracts/interfaces/INFTWhitelist.d.ts +75 -0
  182. package/dist/types/typechain-types/contracts/interfaces/core/collectors/IFeeCollector.d.ts +9 -0
  183. package/dist/types/typechain-types/contracts/interfaces/core/governance/gauges/IBaseGauge.d.ts +527 -0
  184. package/dist/types/typechain-types/contracts/interfaces/core/governance/gauges/IGaugeController.d.ts +222 -40
  185. package/dist/types/typechain-types/contracts/interfaces/core/governance/gauges/IGaugeRewardsDistributor.d.ts +351 -0
  186. package/dist/types/typechain-types/contracts/interfaces/core/governance/gauges/index.d.ts +2 -1
  187. package/dist/types/typechain-types/contracts/interfaces/core/governance/index.d.ts +0 -1
  188. package/dist/types/typechain-types/contracts/interfaces/core/governance/proposals/IGovernance.d.ts +45 -67
  189. package/dist/types/typechain-types/contracts/interfaces/core/index.d.ts +2 -0
  190. package/dist/types/typechain-types/contracts/interfaces/core/lockers/ILLamaLocker.d.ts +332 -0
  191. package/dist/types/typechain-types/contracts/interfaces/core/lockers/ILLamaTemple.d.ts +302 -0
  192. package/dist/types/typechain-types/contracts/interfaces/core/lockers/index.d.ts +2 -0
  193. package/dist/types/typechain-types/contracts/interfaces/core/minters/RAACMinter/IRAACMinter.d.ts +30 -1
  194. package/dist/types/typechain-types/contracts/interfaces/core/minters/RAACMinter/IRAACMinterRewardsReceiver.d.ts +49 -0
  195. package/dist/types/typechain-types/contracts/interfaces/core/minters/RAACMinter/index.d.ts +1 -0
  196. package/dist/types/typechain-types/contracts/interfaces/core/oracles/IBaseVRFv2Consumer.d.ts +5 -1
  197. package/dist/types/typechain-types/contracts/interfaces/core/oracles/IRAACHousePrices.d.ts +31 -24
  198. package/dist/types/typechain-types/contracts/interfaces/core/pools/LendingPool/IAssetAdapter.d.ts +143 -0
  199. package/dist/types/typechain-types/contracts/interfaces/core/pools/LendingPool/IERC721Adapter.d.ts +51 -0
  200. package/dist/types/typechain-types/contracts/interfaces/core/pools/LendingPool/ILendingPool.d.ts +369 -150
  201. package/dist/types/typechain-types/contracts/interfaces/core/pools/LendingPool/ILendingPoolStorage.d.ts +102 -0
  202. package/dist/types/typechain-types/contracts/interfaces/core/pools/LendingPool/index.d.ts +3 -0
  203. package/dist/types/typechain-types/contracts/interfaces/core/pools/StabilityPool/ILiquidationSwap.d.ts +51 -0
  204. package/dist/types/typechain-types/contracts/interfaces/core/pools/StabilityPool/IStabilityPool.d.ts +19 -64
  205. package/dist/types/typechain-types/contracts/interfaces/core/pools/StabilityPool/IStabilityPoolStorage.d.ts +49 -0
  206. package/dist/types/typechain-types/contracts/interfaces/core/pools/StabilityPool/index.d.ts +2 -0
  207. package/dist/types/typechain-types/contracts/interfaces/core/tokens/IDebtToken.d.ts +6 -15
  208. package/dist/types/typechain-types/contracts/interfaces/core/tokens/IRAACNFT.d.ts +70 -7
  209. package/dist/types/typechain-types/contracts/interfaces/core/tokens/IVaultToken.d.ts +197 -0
  210. package/dist/types/typechain-types/contracts/interfaces/core/tokens/IveRAACToken.d.ts +295 -36
  211. package/dist/types/typechain-types/contracts/interfaces/core/tokens/index.d.ts +1 -0
  212. package/dist/types/typechain-types/contracts/interfaces/core/vaults/IBaseHybridVault.d.ts +208 -0
  213. package/dist/types/typechain-types/contracts/interfaces/core/vaults/IVaultAssetAdapter.d.ts +89 -0
  214. package/dist/types/typechain-types/contracts/interfaces/core/vaults/index.d.ts +2 -0
  215. package/dist/types/typechain-types/contracts/interfaces/curve/ICurveLiquidityGaugeV5.d.ts +357 -0
  216. package/dist/types/typechain-types/contracts/interfaces/curve/index.d.ts +1 -0
  217. package/dist/types/typechain-types/contracts/interfaces/index.d.ts +2 -4
  218. package/dist/types/typechain-types/contracts/interfaces/zeno/IAuction.d.ts +18 -3
  219. package/dist/types/typechain-types/contracts/interfaces/zeno/IZENO.d.ts +31 -1
  220. package/dist/types/typechain-types/contracts/libraries/governance/LockManager.d.ts +9 -2
  221. package/dist/types/typechain-types/contracts/libraries/governance/PowerCheckpoint.d.ts +34 -1
  222. package/dist/types/typechain-types/contracts/libraries/governance/index.d.ts +0 -3
  223. package/dist/types/typechain-types/contracts/libraries/math/TimeWeightedAverage.d.ts +1 -25
  224. package/dist/types/typechain-types/contracts/mocks/core/collectors/MockWETH.d.ts +225 -0
  225. package/dist/types/typechain-types/contracts/mocks/core/collectors/index.d.ts +1 -0
  226. package/dist/types/typechain-types/contracts/mocks/core/curve/CurveLiquidityGaugeV5Mock.sol/CurveLiquidityGaugeV5Mock.d.ts +56 -0
  227. package/dist/types/typechain-types/contracts/mocks/core/curve/CurveLiquidityGaugeV5Mock.sol/ILiquidityGauge.d.ts +35 -0
  228. package/dist/types/typechain-types/contracts/mocks/core/curve/CurveLiquidityGaugeV5Mock.sol/index.d.ts +2 -0
  229. package/dist/types/typechain-types/contracts/mocks/core/curve/index.d.ts +2 -0
  230. package/dist/types/typechain-types/contracts/mocks/core/governance/gauges/MockGaugeController.d.ts +2 -6
  231. package/dist/types/typechain-types/contracts/mocks/core/governance/gauges/index.d.ts +0 -1
  232. package/dist/types/typechain-types/contracts/mocks/core/index.d.ts +4 -0
  233. package/dist/types/typechain-types/contracts/mocks/core/lockers/LLamaLocker.sol/LlamaLocker.d.ts +394 -0
  234. package/dist/types/typechain-types/contracts/mocks/core/lockers/LLamaLocker.sol/index.d.ts +1 -0
  235. package/dist/types/typechain-types/contracts/mocks/core/lockers/index.d.ts +2 -0
  236. package/dist/types/typechain-types/contracts/mocks/core/oracles/MockERC20PriceOracle.sol/IPriceOracle.d.ts +25 -0
  237. package/dist/types/typechain-types/contracts/mocks/core/oracles/MockERC20PriceOracle.sol/MockERC20PriceOracle.d.ts +33 -0
  238. package/dist/types/typechain-types/contracts/mocks/core/oracles/MockERC20PriceOracle.sol/index.d.ts +2 -0
  239. package/dist/types/typechain-types/contracts/mocks/core/oracles/MockFunctionsRouter.sol/MockFunctionsRouter.d.ts +2 -2
  240. package/dist/types/typechain-types/contracts/mocks/core/oracles/MockVRFCoordinatorV2.d.ts +349 -148
  241. package/dist/types/typechain-types/contracts/mocks/core/oracles/TestRAACHousePriceOracle.d.ts +41 -8
  242. package/dist/types/typechain-types/contracts/mocks/core/oracles/TestRAACPrimeRateOracle.d.ts +39 -7
  243. package/dist/types/typechain-types/contracts/mocks/core/oracles/index.d.ts +2 -0
  244. package/dist/types/typechain-types/contracts/mocks/core/pools/MockLendingPoolDebtToken.d.ts +367 -140
  245. package/dist/types/typechain-types/contracts/mocks/core/tokens/MockFeeCollectorToken.d.ts +1 -5
  246. package/dist/types/typechain-types/contracts/mocks/core/tokens/MockToken.d.ts +1 -5
  247. package/dist/types/typechain-types/contracts/mocks/core/tokens/index.d.ts +0 -1
  248. package/dist/types/typechain-types/contracts/mocks/libraries/governance/BoostCalculatorMock.d.ts +68 -139
  249. package/dist/types/typechain-types/contracts/mocks/libraries/governance/LockManagerMock.d.ts +19 -9
  250. package/dist/types/typechain-types/contracts/mocks/libraries/governance/PowerCheckpointMock.d.ts +37 -18
  251. package/dist/types/typechain-types/contracts/mocks/libraries/governance/index.d.ts +0 -3
  252. package/dist/types/typechain-types/contracts/mocks/tests/index.d.ts +0 -2
  253. package/dist/types/typechain-types/contracts/zeno/Auction.d.ts +37 -8
  254. package/dist/types/typechain-types/contracts/zeno/ZENO.d.ts +62 -6
  255. package/dist/types/typechain-types/factories/@chainlink/contracts/src/v0.8/functions/v1_0_0/libraries/FunctionsRequest__factory.d.ts +1 -1
  256. package/dist/types/typechain-types/factories/@chainlink/contracts/src/v0.8/shared/access/ConfirmedOwnerWithProposal__factory.d.ts +1 -1
  257. package/dist/types/typechain-types/factories/@chainlink/contracts/src/v0.8/shared/access/ConfirmedOwner__factory.d.ts +1 -1
  258. package/dist/types/typechain-types/factories/@chainlink/contracts/src/v0.8/shared/interfaces/AggregatorV3Interface__factory.d.ts +93 -0
  259. package/dist/types/typechain-types/factories/@chainlink/contracts/src/v0.8/shared/interfaces/IERC677Receiver__factory.d.ts +25 -0
  260. package/dist/types/typechain-types/factories/@chainlink/contracts/src/v0.8/shared/interfaces/LinkTokenInterface__factory.d.ts +191 -0
  261. package/dist/types/typechain-types/factories/@chainlink/contracts/src/v0.8/shared/interfaces/index.d.ts +3 -0
  262. package/dist/types/typechain-types/factories/@chainlink/contracts/src/v0.8/vrf/dev/SubscriptionAPI__factory.d.ts +663 -0
  263. package/dist/types/typechain-types/factories/@chainlink/contracts/src/v0.8/vrf/dev/VRFConsumerBaseV2Plus__factory.d.ts +139 -0
  264. package/dist/types/typechain-types/factories/@chainlink/contracts/src/v0.8/vrf/dev/index.d.ts +4 -0
  265. package/dist/types/typechain-types/factories/@chainlink/contracts/src/v0.8/vrf/dev/interfaces/IVRFCoordinatorV2Plus__factory.d.ts +194 -0
  266. package/dist/types/typechain-types/factories/@chainlink/contracts/src/v0.8/vrf/dev/interfaces/IVRFMigratableConsumerV2Plus__factory.d.ts +27 -0
  267. package/dist/types/typechain-types/factories/@chainlink/contracts/src/v0.8/vrf/dev/interfaces/IVRFSubscriptionV2Plus__factory.d.ts +155 -0
  268. package/dist/types/typechain-types/factories/@chainlink/contracts/src/v0.8/vrf/dev/interfaces/index.d.ts +3 -0
  269. package/dist/types/typechain-types/factories/@chainlink/contracts/src/v0.8/vrf/dev/libraries/VRFV2PlusClient__factory.d.ts +32 -0
  270. package/dist/types/typechain-types/factories/@chainlink/contracts/src/v0.8/vrf/dev/libraries/index.d.ts +1 -0
  271. package/dist/types/typechain-types/factories/@chainlink/contracts/src/v0.8/vrf/index.d.ts +2 -0
  272. package/dist/types/typechain-types/factories/@chainlink/contracts/src/v0.8/vrf/mocks/VRFCoordinatorV2_5Mock__factory.d.ts +944 -0
  273. package/dist/types/typechain-types/factories/@chainlink/contracts/src/v0.8/vrf/mocks/index.d.ts +1 -0
  274. package/dist/types/typechain-types/factories/@openzeppelin/contracts/access/Ownable2Step__factory.d.ts +95 -0
  275. package/dist/types/typechain-types/factories/@openzeppelin/contracts/access/index.d.ts +1 -0
  276. package/dist/types/typechain-types/factories/@openzeppelin/contracts/interfaces/IERC1363__factory.d.ts +289 -0
  277. package/dist/types/typechain-types/factories/@openzeppelin/contracts/interfaces/IERC2981__factory.d.ts +43 -0
  278. package/dist/types/typechain-types/factories/@openzeppelin/contracts/interfaces/index.d.ts +2 -0
  279. package/dist/types/typechain-types/factories/@openzeppelin/contracts/token/ERC20/utils/SafeERC20__factory.d.ts +1 -1
  280. package/dist/types/typechain-types/factories/@openzeppelin/contracts/utils/Address__factory.d.ts +1 -13
  281. package/dist/types/typechain-types/factories/@openzeppelin/contracts/utils/Errors__factory.d.ts +50 -0
  282. package/dist/types/typechain-types/factories/@openzeppelin/contracts/utils/ShortStrings__factory.d.ts +1 -1
  283. package/dist/types/typechain-types/factories/@openzeppelin/contracts/utils/Strings__factory.d.ts +9 -1
  284. package/dist/types/typechain-types/factories/@openzeppelin/contracts/utils/cryptography/ECDSA__factory.d.ts +1 -1
  285. package/dist/types/typechain-types/factories/@openzeppelin/contracts/utils/cryptography/MerkleProof__factory.d.ts +26 -0
  286. package/dist/types/typechain-types/factories/@openzeppelin/contracts/utils/cryptography/index.d.ts +1 -0
  287. package/dist/types/typechain-types/factories/@openzeppelin/contracts/utils/index.d.ts +1 -0
  288. package/dist/types/typechain-types/factories/@openzeppelin/contracts/utils/math/SafeCast__factory.d.ts +1 -1
  289. package/dist/types/typechain-types/factories/@openzeppelin/contracts/utils/math/index.d.ts +0 -1
  290. package/dist/types/typechain-types/factories/contracts/core/collectors/FeeCollector__factory.d.ts +65 -21
  291. package/dist/types/typechain-types/factories/contracts/core/collectors/NFTRoyaltyFeeCollector.sol/IWETH10Minimal__factory.d.ts +49 -0
  292. package/dist/types/typechain-types/factories/contracts/core/collectors/NFTRoyaltyFeeCollector.sol/NFTRoyaltyFeeCollector__factory.d.ts +177 -0
  293. package/dist/types/typechain-types/factories/contracts/core/collectors/NFTRoyaltyFeeCollector.sol/index.d.ts +2 -0
  294. package/dist/types/typechain-types/factories/contracts/core/collectors/Treasury__factory.d.ts +15 -1
  295. package/dist/types/typechain-types/factories/contracts/core/collectors/index.d.ts +1 -0
  296. package/dist/types/typechain-types/factories/contracts/core/governance/gauges/BaseGauge__factory.d.ts +698 -144
  297. package/dist/types/typechain-types/factories/contracts/core/governance/gauges/GaugeController__factory.d.ts +461 -137
  298. package/dist/types/typechain-types/factories/contracts/core/governance/gauges/GaugeRewardsDistributor__factory.d.ts +848 -0
  299. package/dist/types/typechain-types/factories/contracts/core/governance/gauges/RAACGauge__factory.d.ts +686 -162
  300. package/dist/types/typechain-types/factories/contracts/core/governance/gauges/RWAGauge__factory.d.ts +689 -155
  301. package/dist/types/typechain-types/factories/contracts/core/governance/gauges/index.d.ts +1 -0
  302. package/dist/types/typechain-types/factories/contracts/core/governance/index.d.ts +0 -1
  303. package/dist/types/typechain-types/factories/contracts/core/governance/proposals/Governance__factory.d.ts +42 -80
  304. package/dist/types/typechain-types/factories/contracts/core/governance/proposals/TimelockController__factory.d.ts +1 -1
  305. package/dist/types/typechain-types/factories/contracts/core/index.d.ts +2 -0
  306. package/dist/types/typechain-types/factories/contracts/core/lockers/LLamaTemple__factory.d.ts +1028 -0
  307. package/dist/types/typechain-types/factories/contracts/core/lockers/index.d.ts +1 -0
  308. package/dist/types/typechain-types/factories/contracts/core/minters/RAACMinter/RAACMinter__factory.d.ts +66 -25
  309. package/dist/types/typechain-types/factories/contracts/core/minters/RAACReleaseOrchestrator/RAACReleaseOrchestrator__factory.d.ts +5 -1
  310. package/dist/types/typechain-types/factories/contracts/core/oracles/BaseChainlinkFunctionsOracle__factory.d.ts +37 -1
  311. package/dist/types/typechain-types/factories/contracts/core/oracles/BaseVRFv2Consumer__factory.d.ts +90 -6
  312. package/dist/types/typechain-types/factories/contracts/core/oracles/RAACHousePriceOracle__factory.d.ts +64 -9
  313. package/dist/types/typechain-types/factories/contracts/core/oracles/RAACPrimeRateOracle__factory.d.ts +49 -3
  314. package/dist/types/typechain-types/factories/contracts/core/pools/LendingPool/ERC20AssetAdapter.sol/ERC20AssetAdapter__factory.d.ts +369 -0
  315. package/dist/types/typechain-types/factories/contracts/core/pools/LendingPool/ERC20AssetAdapter.sol/IERC20Adapter__factory.d.ts +21 -0
  316. package/dist/types/typechain-types/factories/contracts/core/pools/LendingPool/ERC20AssetAdapter.sol/IPriceOracle__factory.d.ts +17 -0
  317. package/dist/types/typechain-types/factories/contracts/core/pools/LendingPool/ERC20AssetAdapter.sol/index.d.ts +3 -0
  318. package/dist/types/typechain-types/factories/contracts/core/pools/LendingPool/ERC721AssetAdapter.sol/ERC721AssetAdapter__factory.d.ts +393 -0
  319. package/dist/types/typechain-types/factories/contracts/core/pools/LendingPool/ERC721AssetAdapter.sol/IPriceOracle__factory.d.ts +21 -0
  320. package/dist/types/typechain-types/factories/contracts/core/pools/LendingPool/ERC721AssetAdapter.sol/index.d.ts +2 -0
  321. package/dist/types/typechain-types/factories/contracts/core/pools/LendingPool/LendingPoolStorage__factory.d.ts +578 -0
  322. package/dist/types/typechain-types/factories/contracts/core/pools/LendingPool/LendingPool__factory.d.ts +881 -306
  323. package/dist/types/typechain-types/factories/contracts/core/pools/LendingPool/LiquidationProxy__factory.d.ts +716 -0
  324. package/dist/types/typechain-types/factories/contracts/core/pools/LendingPool/VaultProxy__factory.d.ts +636 -0
  325. package/dist/types/typechain-types/factories/contracts/core/pools/LendingPool/index.d.ts +5 -0
  326. package/dist/types/typechain-types/factories/contracts/core/pools/StabilityPool/LiquidationStrategyProxy__factory.d.ts +281 -0
  327. package/dist/types/typechain-types/factories/contracts/core/pools/StabilityPool/LiquidationSwap__factory.d.ts +227 -0
  328. package/dist/types/typechain-types/factories/contracts/core/pools/StabilityPool/StabilityPoolStorage__factory.d.ts +255 -0
  329. package/dist/types/typechain-types/factories/contracts/core/pools/StabilityPool/StabilityPool__factory.d.ts +151 -85
  330. package/dist/types/typechain-types/factories/contracts/core/pools/StabilityPool/index.d.ts +3 -1
  331. package/dist/types/typechain-types/factories/contracts/core/primitives/ComplianceRegistry__factory.d.ts +276 -0
  332. package/dist/types/typechain-types/factories/contracts/core/primitives/RAACHousePrices__factory.d.ts +29 -1
  333. package/dist/types/typechain-types/factories/contracts/core/primitives/WithCompliance__factory.d.ts +17 -0
  334. package/dist/types/typechain-types/factories/contracts/core/primitives/index.d.ts +2 -0
  335. package/dist/types/typechain-types/factories/contracts/core/tokens/DEToken__factory.d.ts +1 -21
  336. package/dist/types/typechain-types/factories/contracts/core/tokens/DebtToken__factory.d.ts +7 -11
  337. package/dist/types/typechain-types/factories/contracts/core/tokens/LPToken__factory.d.ts +1 -1
  338. package/dist/types/typechain-types/factories/contracts/core/tokens/RAACNFT__factory.d.ts +124 -31
  339. package/dist/types/typechain-types/factories/contracts/core/tokens/RAACToken__factory.d.ts +1 -1
  340. package/dist/types/typechain-types/factories/contracts/core/tokens/RToken__factory.d.ts +1 -61
  341. package/dist/types/typechain-types/factories/contracts/core/tokens/RWAIndexToken__factory.d.ts +465 -0
  342. package/dist/types/typechain-types/factories/contracts/core/tokens/VeRAACToken__factory.d.ts +446 -186
  343. package/dist/types/typechain-types/factories/contracts/core/tokens/index.d.ts +1 -1
  344. package/dist/types/typechain-types/factories/contracts/core/vaults/ERC20VaultAdapter.sol/ERC20VaultAdapter__factory.d.ts +285 -0
  345. package/dist/types/typechain-types/factories/contracts/core/vaults/ERC20VaultAdapter.sol/IPriceOracle__factory.d.ts +17 -0
  346. package/dist/types/typechain-types/factories/contracts/core/vaults/ERC20VaultAdapter.sol/index.d.ts +2 -0
  347. package/dist/types/typechain-types/factories/contracts/core/vaults/ERC721VaultAdapter.sol/ERC721VaultAdapter__factory.d.ts +287 -0
  348. package/dist/types/typechain-types/factories/contracts/core/vaults/ERC721VaultAdapter.sol/IPriceOracle__factory.d.ts +21 -0
  349. package/dist/types/typechain-types/factories/contracts/core/vaults/ERC721VaultAdapter.sol/index.d.ts +2 -0
  350. package/dist/types/typechain-types/factories/contracts/core/vaults/RWAVault__factory.d.ts +808 -0
  351. package/dist/types/typechain-types/factories/contracts/core/vaults/index.d.ts +3 -0
  352. package/dist/types/typechain-types/factories/contracts/interfaces/IComplianceRegistry__factory.d.ts +67 -0
  353. package/dist/types/typechain-types/factories/contracts/interfaces/INFTLiquidator__factory.d.ts +213 -6
  354. package/dist/types/typechain-types/factories/contracts/interfaces/INFTWhitelist__factory.d.ts +77 -0
  355. package/dist/types/typechain-types/factories/contracts/interfaces/core/collectors/IFeeCollector__factory.d.ts +32 -0
  356. package/dist/types/typechain-types/factories/contracts/interfaces/core/governance/gauges/IBaseGauge__factory.d.ts +643 -0
  357. package/dist/types/typechain-types/factories/contracts/interfaces/core/governance/gauges/IGaugeController__factory.d.ts +239 -65
  358. package/dist/types/typechain-types/factories/contracts/interfaces/core/governance/gauges/IGaugeRewardsDistributor__factory.d.ts +425 -0
  359. package/dist/types/typechain-types/factories/contracts/interfaces/core/governance/gauges/index.d.ts +2 -1
  360. package/dist/types/typechain-types/factories/contracts/interfaces/core/governance/index.d.ts +0 -1
  361. package/dist/types/typechain-types/factories/contracts/interfaces/core/governance/proposals/IGovernance__factory.d.ts +41 -79
  362. package/dist/types/typechain-types/factories/contracts/interfaces/core/index.d.ts +1 -0
  363. package/dist/types/typechain-types/factories/contracts/interfaces/core/lockers/ILLamaLocker__factory.d.ts +390 -0
  364. package/dist/types/typechain-types/factories/contracts/interfaces/core/lockers/ILLamaTemple__factory.d.ts +390 -0
  365. package/dist/types/typechain-types/factories/contracts/interfaces/core/lockers/index.d.ts +2 -0
  366. package/dist/types/typechain-types/factories/contracts/interfaces/core/minters/RAACMinter/IRAACMinterRewardsReceiver__factory.d.ts +35 -0
  367. package/dist/types/typechain-types/factories/contracts/interfaces/core/minters/RAACMinter/IRAACMinter__factory.d.ts +33 -0
  368. package/dist/types/typechain-types/factories/contracts/interfaces/core/minters/RAACMinter/index.d.ts +1 -0
  369. package/dist/types/typechain-types/factories/contracts/interfaces/core/minters/RAACReleaseOrchestrator/IReleaseOrchestrator__factory.d.ts +4 -0
  370. package/dist/types/typechain-types/factories/contracts/interfaces/core/oracles/IBaseVRFv2Consumer__factory.d.ts +14 -0
  371. package/dist/types/typechain-types/factories/contracts/interfaces/core/oracles/IRAACHousePrices__factory.d.ts +24 -29
  372. package/dist/types/typechain-types/factories/contracts/interfaces/core/pools/LendingPool/IAssetAdapter__factory.d.ts +189 -0
  373. package/dist/types/typechain-types/factories/contracts/interfaces/core/pools/LendingPool/IERC721Adapter__factory.d.ts +53 -0
  374. package/dist/types/typechain-types/factories/contracts/interfaces/core/pools/LendingPool/ILendingPoolStorage__factory.d.ts +183 -0
  375. package/dist/types/typechain-types/factories/contracts/interfaces/core/pools/LendingPool/ILendingPool__factory.d.ts +428 -143
  376. package/dist/types/typechain-types/factories/contracts/interfaces/core/pools/LendingPool/index.d.ts +3 -0
  377. package/dist/types/typechain-types/factories/contracts/interfaces/core/pools/StabilityPool/ILiquidationSwap__factory.d.ts +53 -0
  378. package/dist/types/typechain-types/factories/contracts/interfaces/core/pools/StabilityPool/IStabilityPoolStorage__factory.d.ts +56 -0
  379. package/dist/types/typechain-types/factories/contracts/interfaces/core/pools/StabilityPool/IStabilityPool__factory.d.ts +26 -75
  380. package/dist/types/typechain-types/factories/contracts/interfaces/core/pools/StabilityPool/index.d.ts +2 -0
  381. package/dist/types/typechain-types/factories/contracts/interfaces/core/tokens/IDebtToken__factory.d.ts +6 -10
  382. package/dist/types/typechain-types/factories/contracts/interfaces/core/tokens/IRAACNFT__factory.d.ts +79 -4
  383. package/dist/types/typechain-types/factories/contracts/interfaces/core/tokens/IVaultToken__factory.d.ts +223 -0
  384. package/dist/types/typechain-types/factories/contracts/interfaces/core/tokens/IveRAACToken__factory.d.ts +355 -29
  385. package/dist/types/typechain-types/factories/contracts/interfaces/core/tokens/index.d.ts +1 -0
  386. package/dist/types/typechain-types/factories/contracts/interfaces/core/vaults/IBaseHybridVault__factory.d.ts +256 -0
  387. package/dist/types/typechain-types/factories/contracts/interfaces/core/vaults/IVaultAssetAdapter__factory.d.ts +119 -0
  388. package/dist/types/typechain-types/factories/contracts/interfaces/core/vaults/index.d.ts +2 -0
  389. package/dist/types/typechain-types/factories/contracts/interfaces/curve/ICurveLiquidityGaugeV5__factory.d.ts +503 -0
  390. package/dist/types/typechain-types/factories/contracts/interfaces/curve/index.d.ts +1 -0
  391. package/dist/types/typechain-types/factories/contracts/interfaces/index.d.ts +2 -4
  392. package/dist/types/typechain-types/factories/contracts/interfaces/zeno/IAuction__factory.d.ts +44 -1
  393. package/dist/types/typechain-types/factories/contracts/interfaces/zeno/IZENO__factory.d.ts +42 -0
  394. package/dist/types/typechain-types/factories/contracts/libraries/governance/BoostCalculator__factory.d.ts +1 -1
  395. package/dist/types/typechain-types/factories/contracts/libraries/governance/LockManager__factory.d.ts +10 -1
  396. package/dist/types/typechain-types/factories/contracts/libraries/governance/PowerCheckpoint__factory.d.ts +47 -1
  397. package/dist/types/typechain-types/factories/contracts/libraries/governance/index.d.ts +0 -3
  398. package/dist/types/typechain-types/factories/contracts/libraries/math/TimeWeightedAverage__factory.d.ts +1 -29
  399. package/dist/types/typechain-types/factories/contracts/libraries/pools/ReserveLibrary__factory.d.ts +1 -1
  400. package/dist/types/typechain-types/factories/contracts/libraries/utils/StringUtils__factory.d.ts +1 -1
  401. package/dist/types/typechain-types/factories/contracts/mocks/core/collectors/MockTreasury__factory.d.ts +1 -1
  402. package/dist/types/typechain-types/factories/contracts/mocks/core/collectors/MockWETH__factory.d.ts +353 -0
  403. package/dist/types/typechain-types/factories/contracts/mocks/core/collectors/index.d.ts +1 -0
  404. package/dist/types/typechain-types/factories/contracts/mocks/core/curve/CurveLiquidityGaugeV5Mock.sol/CurveLiquidityGaugeV5Mock__factory.d.ts +65 -0
  405. package/dist/types/typechain-types/factories/contracts/mocks/core/curve/CurveLiquidityGaugeV5Mock.sol/ILiquidityGauge__factory.d.ts +21 -0
  406. package/dist/types/typechain-types/factories/contracts/mocks/core/curve/CurveLiquidityGaugeV5Mock.sol/index.d.ts +2 -0
  407. package/dist/types/typechain-types/factories/contracts/mocks/core/curve/index.d.ts +1 -0
  408. package/dist/types/typechain-types/factories/contracts/mocks/core/governance/gauges/MockGaugeController__factory.d.ts +1 -15
  409. package/dist/types/typechain-types/factories/contracts/mocks/core/governance/gauges/index.d.ts +0 -1
  410. package/dist/types/typechain-types/factories/contracts/mocks/core/governance/proposals/TimelockTestTarget__factory.d.ts +1 -1
  411. package/dist/types/typechain-types/factories/contracts/mocks/core/index.d.ts +2 -0
  412. package/dist/types/typechain-types/factories/contracts/mocks/core/lockers/LLamaLocker.sol/LlamaLocker__factory.d.ts +591 -0
  413. package/dist/types/typechain-types/factories/contracts/mocks/core/lockers/LLamaLocker.sol/index.d.ts +1 -0
  414. package/dist/types/typechain-types/factories/contracts/mocks/core/lockers/index.d.ts +1 -0
  415. package/dist/types/typechain-types/factories/contracts/mocks/core/oracles/MockERC20PriceOracle.sol/IPriceOracle__factory.d.ts +17 -0
  416. package/dist/types/typechain-types/factories/contracts/mocks/core/oracles/MockERC20PriceOracle.sol/MockERC20PriceOracle__factory.d.ts +42 -0
  417. package/dist/types/typechain-types/factories/contracts/mocks/core/oracles/MockERC20PriceOracle.sol/index.d.ts +2 -0
  418. package/dist/types/typechain-types/factories/contracts/mocks/core/oracles/MockFunctionsRouter.sol/MockFunctionsRouter__factory.d.ts +2 -2
  419. package/dist/types/typechain-types/factories/contracts/mocks/core/oracles/MockOracle__factory.d.ts +1 -1
  420. package/dist/types/typechain-types/factories/contracts/mocks/core/oracles/MockVRFCoordinatorV2__factory.d.ts +490 -166
  421. package/dist/types/typechain-types/factories/contracts/mocks/core/oracles/TestRAACHousePriceOracle__factory.d.ts +67 -12
  422. package/dist/types/typechain-types/factories/contracts/mocks/core/oracles/TestRAACPrimeRateOracle__factory.d.ts +49 -3
  423. package/dist/types/typechain-types/factories/contracts/mocks/core/oracles/index.d.ts +1 -0
  424. package/dist/types/typechain-types/factories/contracts/mocks/core/pools/MockLendingPoolCollector__factory.d.ts +1 -21
  425. package/dist/types/typechain-types/factories/contracts/mocks/core/pools/MockLendingPoolDebtToken__factory.d.ts +427 -132
  426. package/dist/types/typechain-types/factories/contracts/mocks/core/pools/MockLendingPool__factory.d.ts +1 -1
  427. package/dist/types/typechain-types/factories/contracts/mocks/core/pools/MockLiquidityPool__factory.d.ts +1 -21
  428. package/dist/types/typechain-types/factories/contracts/mocks/core/pools/MockPool__factory.d.ts +1 -1
  429. package/dist/types/typechain-types/factories/contracts/mocks/core/pools/MockStabilityPool__factory.d.ts +1 -1
  430. package/dist/types/typechain-types/factories/contracts/mocks/core/primitives/MockContractWithConfig__factory.d.ts +1 -1
  431. package/dist/types/typechain-types/factories/contracts/mocks/core/primitives/MockContract__factory.d.ts +1 -1
  432. package/dist/types/typechain-types/factories/contracts/mocks/core/primitives/MockDistributableContract__factory.d.ts +1 -21
  433. package/dist/types/typechain-types/factories/contracts/mocks/core/primitives/RAACHousePricesMock__factory.d.ts +1 -1
  434. package/dist/types/typechain-types/factories/contracts/mocks/core/tokens/CrvUSDToken__factory.d.ts +1 -1
  435. package/dist/types/typechain-types/factories/contracts/mocks/core/tokens/ERC20Mock__factory.d.ts +8 -4
  436. package/dist/types/typechain-types/factories/contracts/mocks/core/tokens/ERC721Mock__factory.d.ts +1 -1
  437. package/dist/types/typechain-types/factories/contracts/mocks/core/tokens/MockCollectableUnderlying__factory.d.ts +1 -21
  438. package/dist/types/typechain-types/factories/contracts/mocks/core/tokens/MockFeeCollectorToken__factory.d.ts +1 -15
  439. package/dist/types/typechain-types/factories/contracts/mocks/core/tokens/MockToken__factory.d.ts +1 -15
  440. package/dist/types/typechain-types/factories/contracts/mocks/core/tokens/MockUSDC__factory.d.ts +1 -1
  441. package/dist/types/typechain-types/factories/contracts/mocks/core/tokens/RAACMockERC20__factory.d.ts +1 -1
  442. package/dist/types/typechain-types/factories/contracts/mocks/core/tokens/index.d.ts +0 -1
  443. package/dist/types/typechain-types/factories/contracts/mocks/core/vaults/MockVault__factory.d.ts +1 -21
  444. package/dist/types/typechain-types/factories/contracts/mocks/libraries/MockStringUtils__factory.d.ts +1 -1
  445. package/dist/types/typechain-types/factories/contracts/mocks/libraries/governance/BoostCalculatorMock__factory.d.ts +53 -122
  446. package/dist/types/typechain-types/factories/contracts/mocks/libraries/governance/LockManagerMock__factory.d.ts +21 -12
  447. package/dist/types/typechain-types/factories/contracts/mocks/libraries/governance/PowerCheckpointMock__factory.d.ts +39 -14
  448. package/dist/types/typechain-types/factories/contracts/mocks/libraries/governance/index.d.ts +0 -3
  449. package/dist/types/typechain-types/factories/contracts/mocks/libraries/math/TimeWeightedAverageMock__factory.d.ts +1 -1
  450. package/dist/types/typechain-types/factories/contracts/mocks/libraries/math/WadRayMathMock__factory.d.ts +1 -1
  451. package/dist/types/typechain-types/factories/contracts/mocks/libraries/pools/ReserveLibraryMock__factory.d.ts +1 -1
  452. package/dist/types/typechain-types/factories/contracts/mocks/tests/MaliciousDeposit__factory.d.ts +1 -1
  453. package/dist/types/typechain-types/factories/contracts/mocks/tests/MaliciousWithdraw__factory.d.ts +1 -1
  454. package/dist/types/typechain-types/factories/contracts/mocks/tests/VeRAACFuzzHelper__factory.d.ts +1 -1
  455. package/dist/types/typechain-types/factories/contracts/mocks/tests/index.d.ts +0 -1
  456. package/dist/types/typechain-types/factories/contracts/zeno/AuctionFactory__factory.d.ts +5 -1
  457. package/dist/types/typechain-types/factories/contracts/zeno/Auction__factory.d.ts +83 -14
  458. package/dist/types/typechain-types/factories/contracts/zeno/ZENOFactory__factory.d.ts +13 -1
  459. package/dist/types/typechain-types/factories/contracts/zeno/ZENO__factory.d.ts +87 -31
  460. package/dist/types/typechain-types/index.d.ts +112 -40
  461. package/dist/types/utils/artifacts.d.ts +713 -166
  462. package/dist/utils/artifacts.js +13 -0
  463. package/package.json +1 -1
  464. package/dist/contracts/indexToken/getNextRandomNFT.js +0 -30
  465. package/dist/contracts/indexToken/redeemNFT.js +0 -39
  466. package/dist/pools/lendingPool/claimReward.js +0 -22
  467. package/dist/pools/lendingPool/depositNFTToLendingPool.js +0 -50
  468. package/dist/pools/lendingPool/getAllUserData.js +0 -28
  469. package/dist/pools/lendingPool/getUserOfDepositedNFT.js +0 -27
  470. package/dist/pools/stabilityPool/calculateRAACRewards.js +0 -21
  471. package/dist/pools/stabilityPool/depositNFTToStabilityPool.js +0 -40
  472. package/dist/types/contracts/indexToken/getNextRandomNFT.d.ts +0 -7
  473. package/dist/types/contracts/indexToken/redeemNFT.d.ts +0 -4
  474. package/dist/types/pools/lendingPool/claimReward.d.ts +0 -4
  475. package/dist/types/pools/lendingPool/depositNFTToLendingPool.d.ts +0 -4
  476. package/dist/types/pools/lendingPool/getAllUserData.d.ts +0 -17
  477. package/dist/types/pools/lendingPool/getPendingReward.d.ts +0 -4
  478. package/dist/types/pools/lendingPool/getUserOfDepositedNFT.d.ts +0 -11
  479. package/dist/types/pools/lendingPool/withdrawNFTFromLendingPool.d.ts +0 -4
  480. package/dist/types/pools/stabilityPool/calculateRAACRewards.d.ts +0 -4
  481. package/dist/types/pools/stabilityPool/depositNFTToStabilityPool.d.ts +0 -4
@@ -22,18 +22,28 @@
22
22
  },
23
23
  {
24
24
  "internalType": "address",
25
- "name": "_raacNFTAddress",
25
+ "name": "_liquidationProxyAddress",
26
26
  "type": "address"
27
27
  },
28
28
  {
29
29
  "internalType": "address",
30
- "name": "_priceOracleAddress",
30
+ "name": "_vaultProxy",
31
+ "type": "address"
32
+ },
33
+ {
34
+ "internalType": "address",
35
+ "name": "_complianceRegistry",
31
36
  "type": "address"
32
37
  },
33
38
  {
34
39
  "internalType": "uint256",
35
40
  "name": "_initialPrimeRate",
36
41
  "type": "uint256"
42
+ },
43
+ {
44
+ "internalType": "address",
45
+ "name": "_admin",
46
+ "type": "address"
37
47
  }
38
48
  ],
39
49
  "stateMutability": "nonpayable",
@@ -41,29 +51,63 @@
41
51
  },
42
52
  {
43
53
  "inputs": [],
44
- "name": "AddressCannotBeZero",
54
+ "name": "AccessControlBadConfirmation",
45
55
  "type": "error"
46
56
  },
47
57
  {
48
58
  "inputs": [
49
59
  {
50
60
  "internalType": "address",
51
- "name": "target",
61
+ "name": "account",
52
62
  "type": "address"
63
+ },
64
+ {
65
+ "internalType": "bytes32",
66
+ "name": "neededRole",
67
+ "type": "bytes32"
53
68
  }
54
69
  ],
55
- "name": "AddressEmptyCode",
70
+ "name": "AccessControlUnauthorizedAccount",
56
71
  "type": "error"
57
72
  },
58
73
  {
59
- "inputs": [
60
- {
61
- "internalType": "address",
62
- "name": "account",
63
- "type": "address"
64
- }
65
- ],
66
- "name": "AddressInsufficientBalance",
74
+ "inputs": [],
75
+ "name": "AccessDenied",
76
+ "type": "error"
77
+ },
78
+ {
79
+ "inputs": [],
80
+ "name": "AdapterAlreadySupported",
81
+ "type": "error"
82
+ },
83
+ {
84
+ "inputs": [],
85
+ "name": "AdapterNotSupported",
86
+ "type": "error"
87
+ },
88
+ {
89
+ "inputs": [],
90
+ "name": "AddressCannotBeZero",
91
+ "type": "error"
92
+ },
93
+ {
94
+ "inputs": [],
95
+ "name": "AmountDifferentThanRequested",
96
+ "type": "error"
97
+ },
98
+ {
99
+ "inputs": [],
100
+ "name": "ApprovalFailed",
101
+ "type": "error"
102
+ },
103
+ {
104
+ "inputs": [],
105
+ "name": "BlacklistedAddress",
106
+ "type": "error"
107
+ },
108
+ {
109
+ "inputs": [],
110
+ "name": "BorrowCapReached",
67
111
  "type": "error"
68
112
  },
69
113
  {
@@ -83,22 +127,27 @@
83
127
  },
84
128
  {
85
129
  "inputs": [],
86
- "name": "DebtNotZero",
130
+ "name": "CapExceedSupply",
87
131
  "type": "error"
88
132
  },
89
133
  {
90
134
  "inputs": [],
91
- "name": "EnforcedPause",
135
+ "name": "CapZero",
92
136
  "type": "error"
93
137
  },
94
138
  {
95
139
  "inputs": [],
96
- "name": "ExpectedPause",
140
+ "name": "DebtNotZero",
141
+ "type": "error"
142
+ },
143
+ {
144
+ "inputs": [],
145
+ "name": "EnforcedPause",
97
146
  "type": "error"
98
147
  },
99
148
  {
100
149
  "inputs": [],
101
- "name": "FailedInnerCall",
150
+ "name": "ExpectedPause",
102
151
  "type": "error"
103
152
  },
104
153
  {
@@ -131,6 +180,11 @@
131
180
  "name": "InsufficientLiquidity",
132
181
  "type": "error"
133
182
  },
183
+ {
184
+ "inputs": [],
185
+ "name": "InsufficientLiquidityAfterWithdrawal",
186
+ "type": "error"
187
+ },
134
188
  {
135
189
  "inputs": [],
136
190
  "name": "InvalidAmount",
@@ -141,6 +195,16 @@
141
195
  "name": "InvalidAmount",
142
196
  "type": "error"
143
197
  },
198
+ {
199
+ "inputs": [],
200
+ "name": "InvalidBoolean",
201
+ "type": "error"
202
+ },
203
+ {
204
+ "inputs": [],
205
+ "name": "InvalidGracePeriod",
206
+ "type": "error"
207
+ },
144
208
  {
145
209
  "inputs": [],
146
210
  "name": "InvalidInterestRateMode",
@@ -161,6 +225,11 @@
161
225
  "name": "InvalidParameter",
162
226
  "type": "error"
163
227
  },
228
+ {
229
+ "inputs": [],
230
+ "name": "InvalidPercentage",
231
+ "type": "error"
232
+ },
164
233
  {
165
234
  "inputs": [],
166
235
  "name": "InvalidVaultAsset",
@@ -183,22 +252,22 @@
183
252
  },
184
253
  {
185
254
  "inputs": [],
186
- "name": "NFTNotInsured",
255
+ "name": "NoActiveRewardToken",
187
256
  "type": "error"
188
257
  },
189
258
  {
190
259
  "inputs": [],
191
- "name": "NoActiveRewardToken",
260
+ "name": "NoCollateral",
192
261
  "type": "error"
193
262
  },
194
263
  {
195
264
  "inputs": [],
196
- "name": "NoCollateral",
265
+ "name": "NoDeposits",
197
266
  "type": "error"
198
267
  },
199
268
  {
200
269
  "inputs": [],
201
- "name": "NoDeposits",
270
+ "name": "NoPendingWithdraw",
202
271
  "type": "error"
203
272
  },
204
273
  {
@@ -206,11 +275,26 @@
206
275
  "name": "NoRewardsToClaim",
207
276
  "type": "error"
208
277
  },
278
+ {
279
+ "inputs": [],
280
+ "name": "NoVaultSet",
281
+ "type": "error"
282
+ },
209
283
  {
210
284
  "inputs": [],
211
285
  "name": "NotEnoughCollateralToBorrow",
212
286
  "type": "error"
213
287
  },
288
+ {
289
+ "inputs": [],
290
+ "name": "NotEnoughLiquidity",
291
+ "type": "error"
292
+ },
293
+ {
294
+ "inputs": [],
295
+ "name": "NotInsured",
296
+ "type": "error"
297
+ },
214
298
  {
215
299
  "inputs": [],
216
300
  "name": "NotOwnerOfNFT",
@@ -310,6 +394,21 @@
310
394
  "name": "StalePrice",
311
395
  "type": "error"
312
396
  },
397
+ {
398
+ "inputs": [],
399
+ "name": "SupplyCapReached",
400
+ "type": "error"
401
+ },
402
+ {
403
+ "inputs": [],
404
+ "name": "TimelockDisabled",
405
+ "type": "error"
406
+ },
407
+ {
408
+ "inputs": [],
409
+ "name": "TimelockNotExpired",
410
+ "type": "error"
411
+ },
313
412
  {
314
413
  "inputs": [],
315
414
  "name": "TransferFailed",
@@ -325,6 +424,16 @@
325
424
  "name": "UserAlreadyUnderLiquidation",
326
425
  "type": "error"
327
426
  },
427
+ {
428
+ "inputs": [],
429
+ "name": "VaultPositionAlreadyOpened",
430
+ "type": "error"
431
+ },
432
+ {
433
+ "inputs": [],
434
+ "name": "VaultPositionNotOpened",
435
+ "type": "error"
436
+ },
328
437
  {
329
438
  "inputs": [],
330
439
  "name": "WithdrawalWouldLeaveUserUnderCollateralized",
@@ -335,6 +444,32 @@
335
444
  "name": "WithdrawalsArePaused",
336
445
  "type": "error"
337
446
  },
447
+ {
448
+ "anonymous": false,
449
+ "inputs": [
450
+ {
451
+ "indexed": false,
452
+ "internalType": "address",
453
+ "name": "adapter",
454
+ "type": "address"
455
+ }
456
+ ],
457
+ "name": "AdapterRegistered",
458
+ "type": "event"
459
+ },
460
+ {
461
+ "anonymous": false,
462
+ "inputs": [
463
+ {
464
+ "indexed": false,
465
+ "internalType": "address",
466
+ "name": "adapter",
467
+ "type": "address"
468
+ }
469
+ ],
470
+ "name": "AdapterRemoved",
471
+ "type": "event"
472
+ },
338
473
  {
339
474
  "anonymous": false,
340
475
  "inputs": [
@@ -354,6 +489,25 @@
354
489
  "name": "Borrow",
355
490
  "type": "event"
356
491
  },
492
+ {
493
+ "anonymous": false,
494
+ "inputs": [
495
+ {
496
+ "indexed": false,
497
+ "internalType": "uint256",
498
+ "name": "oldalue",
499
+ "type": "uint256"
500
+ },
501
+ {
502
+ "indexed": false,
503
+ "internalType": "uint256",
504
+ "name": "newValue",
505
+ "type": "uint256"
506
+ }
507
+ ],
508
+ "name": "BorrowCapUpdated",
509
+ "type": "event"
510
+ },
357
511
  {
358
512
  "anonymous": false,
359
513
  "inputs": [
@@ -417,6 +571,25 @@
417
571
  "name": "Deposit",
418
572
  "type": "event"
419
573
  },
574
+ {
575
+ "anonymous": false,
576
+ "inputs": [
577
+ {
578
+ "indexed": false,
579
+ "internalType": "uint256",
580
+ "name": "oldDepositFee",
581
+ "type": "uint256"
582
+ },
583
+ {
584
+ "indexed": false,
585
+ "internalType": "uint256",
586
+ "name": "newDepositFee",
587
+ "type": "uint256"
588
+ }
589
+ ],
590
+ "name": "DepositFeeUpdated",
591
+ "type": "event"
592
+ },
420
593
  {
421
594
  "anonymous": false,
422
595
  "inputs": [
@@ -466,9 +639,21 @@
466
639
  "inputs": [
467
640
  {
468
641
  "indexed": true,
469
- "internalType": "uint256",
470
- "name": "tokenId",
471
- "type": "uint256"
642
+ "internalType": "address",
643
+ "name": "asset",
644
+ "type": "address"
645
+ },
646
+ {
647
+ "indexed": false,
648
+ "internalType": "address",
649
+ "name": "user",
650
+ "type": "address"
651
+ },
652
+ {
653
+ "indexed": false,
654
+ "internalType": "bytes",
655
+ "name": "data",
656
+ "type": "bytes"
472
657
  },
473
658
  {
474
659
  "indexed": false,
@@ -477,7 +662,7 @@
477
662
  "type": "uint256"
478
663
  }
479
664
  ],
480
- "name": "InsuredNFT",
665
+ "name": "InsuredAsset",
481
666
  "type": "event"
482
667
  },
483
668
  {
@@ -540,10 +725,16 @@
540
725
  "type": "address"
541
726
  },
542
727
  {
543
- "indexed": true,
544
- "internalType": "uint256",
545
- "name": "tokenId",
546
- "type": "uint256"
728
+ "indexed": false,
729
+ "internalType": "address",
730
+ "name": "adapter",
731
+ "type": "address"
732
+ },
733
+ {
734
+ "indexed": false,
735
+ "internalType": "bytes",
736
+ "name": "data",
737
+ "type": "bytes"
547
738
  }
548
739
  ],
549
740
  "name": "LiquidationClosed",
@@ -565,10 +756,16 @@
565
756
  "type": "address"
566
757
  },
567
758
  {
568
- "indexed": true,
569
- "internalType": "uint256",
570
- "name": "tokenId",
571
- "type": "uint256"
759
+ "indexed": false,
760
+ "internalType": "address",
761
+ "name": "adapter",
762
+ "type": "address"
763
+ },
764
+ {
765
+ "indexed": false,
766
+ "internalType": "bytes",
767
+ "name": "data",
768
+ "type": "bytes"
572
769
  },
573
770
  {
574
771
  "indexed": false,
@@ -602,10 +799,16 @@
602
799
  "type": "address"
603
800
  },
604
801
  {
605
- "indexed": true,
606
- "internalType": "uint256",
607
- "name": "tokenId",
608
- "type": "uint256"
802
+ "indexed": false,
803
+ "internalType": "address",
804
+ "name": "adapter",
805
+ "type": "address"
806
+ },
807
+ {
808
+ "indexed": false,
809
+ "internalType": "bytes",
810
+ "name": "data",
811
+ "type": "bytes"
609
812
  }
610
813
  ],
611
814
  "name": "LiquidationInitiated",
@@ -636,6 +839,25 @@
636
839
  "name": "LiquidationParametersUpdated",
637
840
  "type": "event"
638
841
  },
842
+ {
843
+ "anonymous": false,
844
+ "inputs": [
845
+ {
846
+ "indexed": true,
847
+ "internalType": "address",
848
+ "name": "oldLiquidationProxy",
849
+ "type": "address"
850
+ },
851
+ {
852
+ "indexed": true,
853
+ "internalType": "address",
854
+ "name": "newLiquidationProxy",
855
+ "type": "address"
856
+ }
857
+ ],
858
+ "name": "LiquidationProxyUpdated",
859
+ "type": "event"
860
+ },
639
861
  {
640
862
  "anonymous": false,
641
863
  "inputs": [
@@ -742,31 +964,24 @@
742
964
  "inputs": [
743
965
  {
744
966
  "indexed": false,
745
- "internalType": "address",
746
- "name": "account",
747
- "type": "address"
748
- }
749
- ],
750
- "name": "Paused",
751
- "type": "event"
752
- },
753
- {
754
- "anonymous": false,
755
- "inputs": [
967
+ "internalType": "enum ILendingPool.OwnerParameter",
968
+ "name": "parameter",
969
+ "type": "uint8"
970
+ },
756
971
  {
757
972
  "indexed": false,
758
973
  "internalType": "uint256",
759
- "name": "oldPrimeRate",
974
+ "name": "oldalue",
760
975
  "type": "uint256"
761
976
  },
762
977
  {
763
978
  "indexed": false,
764
979
  "internalType": "uint256",
765
- "name": "newPrimeRate",
980
+ "name": "newValue",
766
981
  "type": "uint256"
767
982
  }
768
983
  ],
769
- "name": "PrimeRateUpdated",
984
+ "name": "ParameterChanged",
770
985
  "type": "event"
771
986
  },
772
987
  {
@@ -774,8 +989,40 @@
774
989
  "inputs": [
775
990
  {
776
991
  "indexed": false,
777
- "internalType": "uint256",
778
- "name": "oldValue",
992
+ "internalType": "address",
993
+ "name": "account",
994
+ "type": "address"
995
+ }
996
+ ],
997
+ "name": "Paused",
998
+ "type": "event"
999
+ },
1000
+ {
1001
+ "anonymous": false,
1002
+ "inputs": [
1003
+ {
1004
+ "indexed": false,
1005
+ "internalType": "uint256",
1006
+ "name": "oldPrimeRate",
1007
+ "type": "uint256"
1008
+ },
1009
+ {
1010
+ "indexed": false,
1011
+ "internalType": "uint256",
1012
+ "name": "newPrimeRate",
1013
+ "type": "uint256"
1014
+ }
1015
+ ],
1016
+ "name": "PrimeRateUpdated",
1017
+ "type": "event"
1018
+ },
1019
+ {
1020
+ "anonymous": false,
1021
+ "inputs": [
1022
+ {
1023
+ "indexed": false,
1024
+ "internalType": "uint256",
1025
+ "name": "oldValue",
779
1026
  "type": "uint256"
780
1027
  },
781
1028
  {
@@ -983,6 +1230,81 @@
983
1230
  "name": "RewardTokensDeposited",
984
1231
  "type": "event"
985
1232
  },
1233
+ {
1234
+ "anonymous": false,
1235
+ "inputs": [
1236
+ {
1237
+ "indexed": true,
1238
+ "internalType": "bytes32",
1239
+ "name": "role",
1240
+ "type": "bytes32"
1241
+ },
1242
+ {
1243
+ "indexed": true,
1244
+ "internalType": "bytes32",
1245
+ "name": "previousAdminRole",
1246
+ "type": "bytes32"
1247
+ },
1248
+ {
1249
+ "indexed": true,
1250
+ "internalType": "bytes32",
1251
+ "name": "newAdminRole",
1252
+ "type": "bytes32"
1253
+ }
1254
+ ],
1255
+ "name": "RoleAdminChanged",
1256
+ "type": "event"
1257
+ },
1258
+ {
1259
+ "anonymous": false,
1260
+ "inputs": [
1261
+ {
1262
+ "indexed": true,
1263
+ "internalType": "bytes32",
1264
+ "name": "role",
1265
+ "type": "bytes32"
1266
+ },
1267
+ {
1268
+ "indexed": true,
1269
+ "internalType": "address",
1270
+ "name": "account",
1271
+ "type": "address"
1272
+ },
1273
+ {
1274
+ "indexed": true,
1275
+ "internalType": "address",
1276
+ "name": "sender",
1277
+ "type": "address"
1278
+ }
1279
+ ],
1280
+ "name": "RoleGranted",
1281
+ "type": "event"
1282
+ },
1283
+ {
1284
+ "anonymous": false,
1285
+ "inputs": [
1286
+ {
1287
+ "indexed": true,
1288
+ "internalType": "bytes32",
1289
+ "name": "role",
1290
+ "type": "bytes32"
1291
+ },
1292
+ {
1293
+ "indexed": true,
1294
+ "internalType": "address",
1295
+ "name": "account",
1296
+ "type": "address"
1297
+ },
1298
+ {
1299
+ "indexed": true,
1300
+ "internalType": "address",
1301
+ "name": "sender",
1302
+ "type": "address"
1303
+ }
1304
+ ],
1305
+ "name": "RoleRevoked",
1306
+ "type": "event"
1307
+ },
986
1308
  {
987
1309
  "anonymous": false,
988
1310
  "inputs": [
@@ -1002,6 +1324,25 @@
1002
1324
  "name": "StabilityPoolUpdated",
1003
1325
  "type": "event"
1004
1326
  },
1327
+ {
1328
+ "anonymous": false,
1329
+ "inputs": [
1330
+ {
1331
+ "indexed": false,
1332
+ "internalType": "uint256",
1333
+ "name": "oldalue",
1334
+ "type": "uint256"
1335
+ },
1336
+ {
1337
+ "indexed": false,
1338
+ "internalType": "uint256",
1339
+ "name": "newValue",
1340
+ "type": "uint256"
1341
+ }
1342
+ ],
1343
+ "name": "SupplyCapUpdated",
1344
+ "type": "event"
1345
+ },
1005
1346
  {
1006
1347
  "anonymous": false,
1007
1348
  "inputs": [
@@ -1015,6 +1356,44 @@
1015
1356
  "name": "Unpaused",
1016
1357
  "type": "event"
1017
1358
  },
1359
+ {
1360
+ "anonymous": false,
1361
+ "inputs": [
1362
+ {
1363
+ "indexed": false,
1364
+ "internalType": "address",
1365
+ "name": "user",
1366
+ "type": "address"
1367
+ },
1368
+ {
1369
+ "indexed": false,
1370
+ "internalType": "uint256",
1371
+ "name": "fee",
1372
+ "type": "uint256"
1373
+ }
1374
+ ],
1375
+ "name": "VaultOpeningFeePaid",
1376
+ "type": "event"
1377
+ },
1378
+ {
1379
+ "anonymous": false,
1380
+ "inputs": [
1381
+ {
1382
+ "indexed": false,
1383
+ "internalType": "uint256",
1384
+ "name": "oldalue",
1385
+ "type": "uint256"
1386
+ },
1387
+ {
1388
+ "indexed": false,
1389
+ "internalType": "uint256",
1390
+ "name": "newValue",
1391
+ "type": "uint256"
1392
+ }
1393
+ ],
1394
+ "name": "VaultOpeningFeeUpdated",
1395
+ "type": "event"
1396
+ },
1018
1397
  {
1019
1398
  "anonymous": false,
1020
1399
  "inputs": [
@@ -1104,6 +1483,82 @@
1104
1483
  "name": "Withdraw",
1105
1484
  "type": "event"
1106
1485
  },
1486
+ {
1487
+ "anonymous": false,
1488
+ "inputs": [
1489
+ {
1490
+ "indexed": true,
1491
+ "internalType": "address",
1492
+ "name": "user",
1493
+ "type": "address"
1494
+ }
1495
+ ],
1496
+ "name": "WithdrawCancelled",
1497
+ "type": "event"
1498
+ },
1499
+ {
1500
+ "anonymous": false,
1501
+ "inputs": [
1502
+ {
1503
+ "indexed": false,
1504
+ "internalType": "uint256",
1505
+ "name": "oldWithdrawalFee",
1506
+ "type": "uint256"
1507
+ },
1508
+ {
1509
+ "indexed": false,
1510
+ "internalType": "uint256",
1511
+ "name": "newWithdrawalFee",
1512
+ "type": "uint256"
1513
+ }
1514
+ ],
1515
+ "name": "WithdrawFeeUpdated",
1516
+ "type": "event"
1517
+ },
1518
+ {
1519
+ "anonymous": false,
1520
+ "inputs": [
1521
+ {
1522
+ "indexed": true,
1523
+ "internalType": "address",
1524
+ "name": "user",
1525
+ "type": "address"
1526
+ },
1527
+ {
1528
+ "indexed": false,
1529
+ "internalType": "uint256",
1530
+ "name": "amount",
1531
+ "type": "uint256"
1532
+ },
1533
+ {
1534
+ "indexed": false,
1535
+ "internalType": "uint256",
1536
+ "name": "readyAt",
1537
+ "type": "uint256"
1538
+ }
1539
+ ],
1540
+ "name": "WithdrawQueued",
1541
+ "type": "event"
1542
+ },
1543
+ {
1544
+ "anonymous": false,
1545
+ "inputs": [
1546
+ {
1547
+ "indexed": false,
1548
+ "internalType": "uint256",
1549
+ "name": "oldValue",
1550
+ "type": "uint256"
1551
+ },
1552
+ {
1553
+ "indexed": false,
1554
+ "internalType": "uint256",
1555
+ "name": "newValue",
1556
+ "type": "uint256"
1557
+ }
1558
+ ],
1559
+ "name": "WithdrawTimelockDurationUpdated",
1560
+ "type": "event"
1561
+ },
1107
1562
  {
1108
1563
  "anonymous": false,
1109
1564
  "inputs": [
@@ -1156,12 +1611,75 @@
1156
1611
  "stateMutability": "view",
1157
1612
  "type": "function"
1158
1613
  },
1614
+ {
1615
+ "inputs": [],
1616
+ "name": "DEFAULT_ADMIN_ROLE",
1617
+ "outputs": [
1618
+ {
1619
+ "internalType": "bytes32",
1620
+ "name": "",
1621
+ "type": "bytes32"
1622
+ }
1623
+ ],
1624
+ "stateMutability": "view",
1625
+ "type": "function"
1626
+ },
1627
+ {
1628
+ "inputs": [],
1629
+ "name": "GOVERNANCE_ROLE",
1630
+ "outputs": [
1631
+ {
1632
+ "internalType": "bytes32",
1633
+ "name": "",
1634
+ "type": "bytes32"
1635
+ }
1636
+ ],
1637
+ "stateMutability": "view",
1638
+ "type": "function"
1639
+ },
1640
+ {
1641
+ "inputs": [],
1642
+ "name": "PROTOCOL_ROLE",
1643
+ "outputs": [
1644
+ {
1645
+ "internalType": "bytes32",
1646
+ "name": "",
1647
+ "type": "bytes32"
1648
+ }
1649
+ ],
1650
+ "stateMutability": "view",
1651
+ "type": "function"
1652
+ },
1159
1653
  {
1160
1654
  "inputs": [
1161
1655
  {
1162
1656
  "internalType": "uint256",
1163
- "name": "tokenId",
1657
+ "name": "",
1164
1658
  "type": "uint256"
1659
+ }
1660
+ ],
1661
+ "name": "adapters",
1662
+ "outputs": [
1663
+ {
1664
+ "internalType": "address",
1665
+ "name": "",
1666
+ "type": "address"
1667
+ }
1668
+ ],
1669
+ "stateMutability": "view",
1670
+ "type": "function"
1671
+ },
1672
+ {
1673
+ "inputs": [
1674
+ {
1675
+ "internalType": "address",
1676
+ "name": "adapter",
1677
+ "type": "address"
1678
+ },
1679
+ {
1680
+ "internalType": "bytes",
1681
+ "name": "data",
1682
+ "type": "bytes"
1165
1683
  },
1166
1684
  {
1167
1685
  "internalType": "uint256",
@@ -1177,9 +1695,14 @@
1177
1695
  {
1178
1696
  "inputs": [
1179
1697
  {
1180
- "internalType": "uint256",
1181
- "name": "tokenId",
1182
- "type": "uint256"
1698
+ "internalType": "address",
1699
+ "name": "adapter",
1700
+ "type": "address"
1701
+ },
1702
+ {
1703
+ "internalType": "bytes",
1704
+ "name": "data",
1705
+ "type": "bytes"
1183
1706
  },
1184
1707
  {
1185
1708
  "internalType": "uint256",
@@ -1196,13 +1719,18 @@
1196
1719
  "inputs": [
1197
1720
  {
1198
1721
  "internalType": "address",
1199
- "name": "userAddress",
1722
+ "name": "adapter",
1200
1723
  "type": "address"
1201
1724
  },
1202
1725
  {
1203
- "internalType": "uint256",
1204
- "name": "tokenId",
1205
- "type": "uint256"
1726
+ "internalType": "address",
1727
+ "name": "user",
1728
+ "type": "address"
1729
+ },
1730
+ {
1731
+ "internalType": "bytes",
1732
+ "name": "data",
1733
+ "type": "bytes"
1206
1734
  }
1207
1735
  ],
1208
1736
  "name": "calculateHealthFactor",
@@ -1218,15 +1746,20 @@
1218
1746
  },
1219
1747
  {
1220
1748
  "inputs": [
1749
+ {
1750
+ "internalType": "address",
1751
+ "name": "adapter",
1752
+ "type": "address"
1753
+ },
1221
1754
  {
1222
1755
  "internalType": "address",
1223
1756
  "name": "user",
1224
1757
  "type": "address"
1225
1758
  },
1226
1759
  {
1227
- "internalType": "uint256",
1228
- "name": "tokenId",
1229
- "type": "uint256"
1760
+ "internalType": "bytes",
1761
+ "name": "data",
1762
+ "type": "bytes"
1230
1763
  },
1231
1764
  {
1232
1765
  "internalType": "uint256",
@@ -1245,19 +1778,6 @@
1245
1778
  "stateMutability": "view",
1246
1779
  "type": "function"
1247
1780
  },
1248
- {
1249
- "inputs": [],
1250
- "name": "canPaybackDebt",
1251
- "outputs": [
1252
- {
1253
- "internalType": "bool",
1254
- "name": "",
1255
- "type": "bool"
1256
- }
1257
- ],
1258
- "stateMutability": "view",
1259
- "type": "function"
1260
- },
1261
1781
  {
1262
1782
  "inputs": [],
1263
1783
  "name": "claimCollectorRewards",
@@ -1287,9 +1807,14 @@
1287
1807
  {
1288
1808
  "inputs": [
1289
1809
  {
1290
- "internalType": "uint256",
1291
- "name": "tokenId",
1292
- "type": "uint256"
1810
+ "internalType": "address",
1811
+ "name": "adapter",
1812
+ "type": "address"
1813
+ },
1814
+ {
1815
+ "internalType": "bytes",
1816
+ "name": "data",
1817
+ "type": "bytes"
1293
1818
  }
1294
1819
  ],
1295
1820
  "name": "closeLiquidation",
@@ -1299,10 +1824,10 @@
1299
1824
  },
1300
1825
  {
1301
1826
  "inputs": [],
1302
- "name": "debtToken",
1827
+ "name": "complianceRegistry",
1303
1828
  "outputs": [
1304
1829
  {
1305
- "internalType": "contract IDebtToken",
1830
+ "internalType": "contract IComplianceRegistry",
1306
1831
  "name": "",
1307
1832
  "type": "address"
1308
1833
  }
@@ -1326,12 +1851,17 @@
1326
1851
  {
1327
1852
  "inputs": [
1328
1853
  {
1329
- "internalType": "uint256",
1330
- "name": "tokenId",
1331
- "type": "uint256"
1854
+ "internalType": "address",
1855
+ "name": "adapter",
1856
+ "type": "address"
1857
+ },
1858
+ {
1859
+ "internalType": "bytes",
1860
+ "name": "data",
1861
+ "type": "bytes"
1332
1862
  }
1333
1863
  ],
1334
- "name": "depositNFT",
1864
+ "name": "depositAsset",
1335
1865
  "outputs": [],
1336
1866
  "stateMutability": "nonpayable",
1337
1867
  "type": "function"
@@ -1366,93 +1896,33 @@
1366
1896
  "inputs": [
1367
1897
  {
1368
1898
  "internalType": "address",
1369
- "name": "userAddress",
1899
+ "name": "adapter",
1370
1900
  "type": "address"
1371
1901
  },
1372
- {
1373
- "internalType": "uint256",
1374
- "name": "tokenId",
1375
- "type": "uint256"
1376
- }
1377
- ],
1378
- "name": "finalizeLiquidation",
1379
- "outputs": [],
1380
- "stateMutability": "nonpayable",
1381
- "type": "function"
1382
- },
1383
- {
1384
- "inputs": [
1385
1902
  {
1386
1903
  "internalType": "address",
1387
- "name": "userAddress",
1904
+ "name": "user",
1388
1905
  "type": "address"
1906
+ },
1907
+ {
1908
+ "internalType": "bytes",
1909
+ "name": "data",
1910
+ "type": "bytes"
1389
1911
  }
1390
1912
  ],
1391
- "name": "getAllUserData",
1913
+ "name": "finalizeLiquidation",
1914
+ "outputs": [],
1915
+ "stateMutability": "nonpayable",
1916
+ "type": "function"
1917
+ },
1918
+ {
1919
+ "inputs": [],
1920
+ "name": "getAdapters",
1392
1921
  "outputs": [
1393
1922
  {
1394
- "components": [
1395
- {
1396
- "internalType": "uint256[]",
1397
- "name": "nftTokenIds",
1398
- "type": "uint256[]"
1399
- },
1400
- {
1401
- "internalType": "uint256",
1402
- "name": "scaledDebtBalance",
1403
- "type": "uint256"
1404
- },
1405
- {
1406
- "internalType": "uint256",
1407
- "name": "collateralValue",
1408
- "type": "uint256"
1409
- },
1410
- {
1411
- "components": [
1412
- {
1413
- "internalType": "uint256",
1414
- "name": "rawDebtBalance",
1415
- "type": "uint256"
1416
- },
1417
- {
1418
- "internalType": "uint256",
1419
- "name": "scaledDebtBalance",
1420
- "type": "uint256"
1421
- },
1422
- {
1423
- "internalType": "uint256",
1424
- "name": "healthFactor",
1425
- "type": "uint256"
1426
- },
1427
- {
1428
- "internalType": "bool",
1429
- "name": "isUnderLiquidation",
1430
- "type": "bool"
1431
- },
1432
- {
1433
- "internalType": "uint256",
1434
- "name": "liquidationStartTime",
1435
- "type": "uint256"
1436
- },
1437
- {
1438
- "internalType": "uint256",
1439
- "name": "positionIndex",
1440
- "type": "uint256"
1441
- },
1442
- {
1443
- "internalType": "bool",
1444
- "name": "isInsured",
1445
- "type": "bool"
1446
- }
1447
- ],
1448
- "internalType": "struct ILendingPool.NFTPositionView[]",
1449
- "name": "positions",
1450
- "type": "tuple[]"
1451
- }
1452
- ],
1453
- "internalType": "struct ILendingPool.UserDataView",
1923
+ "internalType": "address[]",
1454
1924
  "name": "",
1455
- "type": "tuple"
1925
+ "type": "address[]"
1456
1926
  }
1457
1927
  ],
1458
1928
  "stateMutability": "view",
@@ -1460,13 +1930,23 @@
1460
1930
  },
1461
1931
  {
1462
1932
  "inputs": [
1933
+ {
1934
+ "internalType": "address",
1935
+ "name": "adapter",
1936
+ "type": "address"
1937
+ },
1463
1938
  {
1464
1939
  "internalType": "address",
1465
1940
  "name": "user",
1466
1941
  "type": "address"
1942
+ },
1943
+ {
1944
+ "internalType": "bytes",
1945
+ "name": "data",
1946
+ "type": "bytes"
1467
1947
  }
1468
1948
  ],
1469
- "name": "getEligibleUserDeposits",
1949
+ "name": "getAssetValue",
1470
1950
  "outputs": [
1471
1951
  {
1472
1952
  "internalType": "uint256",
@@ -1480,12 +1960,12 @@
1480
1960
  {
1481
1961
  "inputs": [
1482
1962
  {
1483
- "internalType": "uint256",
1484
- "name": "tokenId",
1485
- "type": "uint256"
1963
+ "internalType": "address",
1964
+ "name": "user",
1965
+ "type": "address"
1486
1966
  }
1487
1967
  ],
1488
- "name": "getNFTPrice",
1968
+ "name": "getEligibleUserDeposits",
1489
1969
  "outputs": [
1490
1970
  {
1491
1971
  "internalType": "uint256",
@@ -1543,15 +2023,20 @@
1543
2023
  },
1544
2024
  {
1545
2025
  "inputs": [
2026
+ {
2027
+ "internalType": "address",
2028
+ "name": "adapter",
2029
+ "type": "address"
2030
+ },
1546
2031
  {
1547
2032
  "internalType": "address",
1548
2033
  "name": "user",
1549
2034
  "type": "address"
1550
2035
  },
1551
2036
  {
1552
- "internalType": "uint256",
1553
- "name": "tokenId",
1554
- "type": "uint256"
2037
+ "internalType": "bytes",
2038
+ "name": "data",
2039
+ "type": "bytes"
1555
2040
  }
1556
2041
  ],
1557
2042
  "name": "getPosition",
@@ -1589,7 +2074,7 @@
1589
2074
  "type": "uint256"
1590
2075
  }
1591
2076
  ],
1592
- "internalType": "struct ILendingPool.NFTPosition",
2077
+ "internalType": "struct ILendingPoolStorage.CollateralPosition",
1593
2078
  "name": "",
1594
2079
  "type": "tuple"
1595
2080
  }
@@ -1599,15 +2084,20 @@
1599
2084
  },
1600
2085
  {
1601
2086
  "inputs": [
2087
+ {
2088
+ "internalType": "address",
2089
+ "name": "adapter",
2090
+ "type": "address"
2091
+ },
1602
2092
  {
1603
2093
  "internalType": "address",
1604
2094
  "name": "user",
1605
2095
  "type": "address"
1606
2096
  },
1607
2097
  {
1608
- "internalType": "uint256",
1609
- "name": "tokenId",
1610
- "type": "uint256"
2098
+ "internalType": "bytes",
2099
+ "name": "data",
2100
+ "type": "bytes"
1611
2101
  }
1612
2102
  ],
1613
2103
  "name": "getPositionData",
@@ -1630,13 +2120,18 @@
1630
2120
  "inputs": [
1631
2121
  {
1632
2122
  "internalType": "address",
1633
- "name": "userAddress",
2123
+ "name": "adapter",
1634
2124
  "type": "address"
1635
2125
  },
1636
2126
  {
1637
- "internalType": "uint256",
1638
- "name": "tokenId",
1639
- "type": "uint256"
2127
+ "internalType": "address",
2128
+ "name": "user",
2129
+ "type": "address"
2130
+ },
2131
+ {
2132
+ "internalType": "bytes",
2133
+ "name": "data",
2134
+ "type": "bytes"
1640
2135
  }
1641
2136
  ],
1642
2137
  "name": "getPositionDebt",
@@ -1654,13 +2149,18 @@
1654
2149
  "inputs": [
1655
2150
  {
1656
2151
  "internalType": "address",
1657
- "name": "userAddress",
2152
+ "name": "adapter",
1658
2153
  "type": "address"
1659
2154
  },
1660
2155
  {
1661
- "internalType": "uint256",
1662
- "name": "tokenId",
1663
- "type": "uint256"
2156
+ "internalType": "address",
2157
+ "name": "user",
2158
+ "type": "address"
2159
+ },
2160
+ {
2161
+ "internalType": "bytes",
2162
+ "name": "data",
2163
+ "type": "bytes"
1664
2164
  }
1665
2165
  ],
1666
2166
  "name": "getPositionScaledDebt",
@@ -1676,15 +2176,20 @@
1676
2176
  },
1677
2177
  {
1678
2178
  "inputs": [
2179
+ {
2180
+ "internalType": "address",
2181
+ "name": "adapter",
2182
+ "type": "address"
2183
+ },
1679
2184
  {
1680
2185
  "internalType": "address",
1681
2186
  "name": "user",
1682
2187
  "type": "address"
1683
2188
  },
1684
2189
  {
1685
- "internalType": "uint256",
1686
- "name": "tokenId",
1687
- "type": "uint256"
2190
+ "internalType": "bytes",
2191
+ "name": "data",
2192
+ "type": "bytes"
1688
2193
  }
1689
2194
  ],
1690
2195
  "name": "getPositionView",
@@ -1725,9 +2230,19 @@
1725
2230
  "internalType": "bool",
1726
2231
  "name": "isInsured",
1727
2232
  "type": "bool"
2233
+ },
2234
+ {
2235
+ "internalType": "address",
2236
+ "name": "adapter",
2237
+ "type": "address"
2238
+ },
2239
+ {
2240
+ "internalType": "address",
2241
+ "name": "asset",
2242
+ "type": "address"
1728
2243
  }
1729
2244
  ],
1730
- "internalType": "struct ILendingPool.NFTPositionView",
2245
+ "internalType": "struct ILendingPoolStorage.CollateralPositionView",
1731
2246
  "name": "",
1732
2247
  "type": "tuple"
1733
2248
  }
@@ -1739,7 +2254,7 @@
1739
2254
  "inputs": [
1740
2255
  {
1741
2256
  "internalType": "address",
1742
- "name": "userAddress",
2257
+ "name": "user",
1743
2258
  "type": "address"
1744
2259
  }
1745
2260
  ],
@@ -1767,19 +2282,6 @@
1767
2282
  "stateMutability": "view",
1768
2283
  "type": "function"
1769
2284
  },
1770
- {
1771
- "inputs": [],
1772
- "name": "getRAACNFTAddress",
1773
- "outputs": [
1774
- {
1775
- "internalType": "address",
1776
- "name": "",
1777
- "type": "address"
1778
- }
1779
- ],
1780
- "stateMutability": "view",
1781
- "type": "function"
1782
- },
1783
2285
  {
1784
2286
  "inputs": [],
1785
2287
  "name": "getReserveRateData",
@@ -1890,6 +2392,25 @@
1890
2392
  "stateMutability": "view",
1891
2393
  "type": "function"
1892
2394
  },
2395
+ {
2396
+ "inputs": [
2397
+ {
2398
+ "internalType": "bytes32",
2399
+ "name": "role",
2400
+ "type": "bytes32"
2401
+ }
2402
+ ],
2403
+ "name": "getRoleAdmin",
2404
+ "outputs": [
2405
+ {
2406
+ "internalType": "bytes32",
2407
+ "name": "",
2408
+ "type": "bytes32"
2409
+ }
2410
+ ],
2411
+ "stateMutability": "view",
2412
+ "type": "function"
2413
+ },
1893
2414
  {
1894
2415
  "inputs": [],
1895
2416
  "name": "getUnclaimedVaultRewards",
@@ -1905,15 +2426,20 @@
1905
2426
  },
1906
2427
  {
1907
2428
  "inputs": [
2429
+ {
2430
+ "internalType": "address",
2431
+ "name": "adapter",
2432
+ "type": "address"
2433
+ },
1908
2434
  {
1909
2435
  "internalType": "address",
1910
2436
  "name": "user",
1911
2437
  "type": "address"
1912
2438
  },
1913
2439
  {
1914
- "internalType": "uint256",
1915
- "name": "tokenId",
1916
- "type": "uint256"
2440
+ "internalType": "bytes",
2441
+ "name": "data",
2442
+ "type": "bytes"
1917
2443
  }
1918
2444
  ],
1919
2445
  "name": "getUninsuredBalance",
@@ -1931,7 +2457,7 @@
1931
2457
  "inputs": [
1932
2458
  {
1933
2459
  "internalType": "address",
1934
- "name": "userAddress",
2460
+ "name": "user",
1935
2461
  "type": "address"
1936
2462
  }
1937
2463
  ],
@@ -1939,7 +2465,7 @@
1939
2465
  "outputs": [
1940
2466
  {
1941
2467
  "internalType": "uint256",
1942
- "name": "",
2468
+ "name": "totalValue",
1943
2469
  "type": "uint256"
1944
2470
  }
1945
2471
  ],
@@ -1950,7 +2476,7 @@
1950
2476
  "inputs": [
1951
2477
  {
1952
2478
  "internalType": "address",
1953
- "name": "userAddress",
2479
+ "name": "user",
1954
2480
  "type": "address"
1955
2481
  }
1956
2482
  ],
@@ -1958,7 +2484,7 @@
1958
2484
  "outputs": [
1959
2485
  {
1960
2486
  "internalType": "uint256",
1961
- "name": "",
2487
+ "name": "totalDebt",
1962
2488
  "type": "uint256"
1963
2489
  }
1964
2490
  ],
@@ -2006,30 +2532,40 @@
2006
2532
  {
2007
2533
  "inputs": [
2008
2534
  {
2009
- "internalType": "uint256",
2010
- "name": "nftId",
2011
- "type": "uint256"
2012
- }
2013
- ],
2014
- "name": "getUserOfDepositedNFT",
2015
- "outputs": [
2535
+ "internalType": "bytes32",
2536
+ "name": "role",
2537
+ "type": "bytes32"
2538
+ },
2016
2539
  {
2017
2540
  "internalType": "address",
2018
- "name": "",
2541
+ "name": "account",
2019
2542
  "type": "address"
2020
2543
  }
2021
2544
  ],
2022
- "stateMutability": "view",
2545
+ "name": "grantRole",
2546
+ "outputs": [],
2547
+ "stateMutability": "nonpayable",
2023
2548
  "type": "function"
2024
2549
  },
2025
2550
  {
2026
- "inputs": [],
2027
- "name": "healthFactorLiquidationThreshold",
2551
+ "inputs": [
2552
+ {
2553
+ "internalType": "bytes32",
2554
+ "name": "role",
2555
+ "type": "bytes32"
2556
+ },
2557
+ {
2558
+ "internalType": "address",
2559
+ "name": "account",
2560
+ "type": "address"
2561
+ }
2562
+ ],
2563
+ "name": "hasRole",
2028
2564
  "outputs": [
2029
2565
  {
2030
- "internalType": "uint256",
2566
+ "internalType": "bool",
2031
2567
  "name": "",
2032
- "type": "uint256"
2568
+ "type": "bool"
2033
2569
  }
2034
2570
  ],
2035
2571
  "stateMutability": "view",
@@ -2039,13 +2575,18 @@
2039
2575
  "inputs": [
2040
2576
  {
2041
2577
  "internalType": "address",
2042
- "name": "userAddress",
2578
+ "name": "adapter",
2043
2579
  "type": "address"
2044
2580
  },
2045
2581
  {
2046
- "internalType": "uint256",
2047
- "name": "tokenId",
2048
- "type": "uint256"
2582
+ "internalType": "address",
2583
+ "name": "user",
2584
+ "type": "address"
2585
+ },
2586
+ {
2587
+ "internalType": "bytes",
2588
+ "name": "data",
2589
+ "type": "bytes"
2049
2590
  }
2050
2591
  ],
2051
2592
  "name": "initiateLiquidation",
@@ -2055,98 +2596,134 @@
2055
2596
  },
2056
2597
  {
2057
2598
  "inputs": [],
2058
- "name": "insuranceFee",
2599
+ "name": "liquidationProxy",
2059
2600
  "outputs": [
2060
2601
  {
2061
- "internalType": "uint256",
2602
+ "internalType": "address",
2062
2603
  "name": "",
2063
- "type": "uint256"
2604
+ "type": "address"
2064
2605
  }
2065
2606
  ],
2066
2607
  "stateMutability": "view",
2067
2608
  "type": "function"
2068
2609
  },
2069
2610
  {
2070
- "inputs": [],
2071
- "name": "liquidationGracePeriod",
2072
- "outputs": [
2611
+ "inputs": [
2612
+ {
2613
+ "internalType": "address",
2614
+ "name": "",
2615
+ "type": "address"
2616
+ },
2617
+ {
2618
+ "internalType": "address",
2619
+ "name": "",
2620
+ "type": "address"
2621
+ },
2073
2622
  {
2074
2623
  "internalType": "uint256",
2075
2624
  "name": "",
2076
2625
  "type": "uint256"
2626
+ },
2627
+ {
2628
+ "internalType": "bytes",
2629
+ "name": "",
2630
+ "type": "bytes"
2077
2631
  }
2078
2632
  ],
2079
- "stateMutability": "view",
2080
- "type": "function"
2081
- },
2082
- {
2083
- "inputs": [],
2084
- "name": "liquidationThreshold",
2633
+ "name": "onERC721Received",
2085
2634
  "outputs": [
2086
2635
  {
2087
- "internalType": "uint256",
2636
+ "internalType": "bytes4",
2088
2637
  "name": "",
2089
- "type": "uint256"
2638
+ "type": "bytes4"
2090
2639
  }
2091
2640
  ],
2092
- "stateMutability": "view",
2641
+ "stateMutability": "nonpayable",
2642
+ "type": "function"
2643
+ },
2644
+ {
2645
+ "inputs": [],
2646
+ "name": "openVaultPosition",
2647
+ "outputs": [],
2648
+ "stateMutability": "nonpayable",
2093
2649
  "type": "function"
2094
2650
  },
2095
2651
  {
2096
2652
  "inputs": [],
2097
- "name": "liquidityBufferRatio",
2653
+ "name": "owner",
2098
2654
  "outputs": [
2099
2655
  {
2100
- "internalType": "uint256",
2656
+ "internalType": "address",
2101
2657
  "name": "",
2102
- "type": "uint256"
2658
+ "type": "address"
2103
2659
  }
2104
2660
  ],
2105
2661
  "stateMutability": "view",
2106
2662
  "type": "function"
2107
2663
  },
2108
2664
  {
2109
- "inputs": [
2665
+ "inputs": [],
2666
+ "name": "parameters",
2667
+ "outputs": [
2110
2668
  {
2111
- "internalType": "address",
2112
- "name": "",
2113
- "type": "address"
2669
+ "internalType": "bool",
2670
+ "name": "canPaybackDebt",
2671
+ "type": "bool"
2114
2672
  },
2115
2673
  {
2116
- "internalType": "address",
2117
- "name": "",
2118
- "type": "address"
2674
+ "internalType": "bool",
2675
+ "name": "withdrawalsPaused",
2676
+ "type": "bool"
2119
2677
  },
2120
2678
  {
2121
2679
  "internalType": "uint256",
2122
- "name": "",
2680
+ "name": "liquidationThreshold",
2123
2681
  "type": "uint256"
2124
2682
  },
2125
2683
  {
2126
- "internalType": "bytes",
2127
- "name": "",
2128
- "type": "bytes"
2129
- }
2130
- ],
2131
- "name": "onERC721Received",
2132
- "outputs": [
2684
+ "internalType": "uint256",
2685
+ "name": "healthFactorLiquidationThreshold",
2686
+ "type": "uint256"
2687
+ },
2688
+ {
2689
+ "internalType": "uint256",
2690
+ "name": "liquidationGracePeriod",
2691
+ "type": "uint256"
2692
+ },
2693
+ {
2694
+ "internalType": "uint256",
2695
+ "name": "insuranceFee",
2696
+ "type": "uint256"
2697
+ },
2698
+ {
2699
+ "internalType": "uint256",
2700
+ "name": "depositFee",
2701
+ "type": "uint256"
2702
+ },
2703
+ {
2704
+ "internalType": "uint256",
2705
+ "name": "liquidityBufferRatio",
2706
+ "type": "uint256"
2707
+ },
2708
+ {
2709
+ "internalType": "uint256",
2710
+ "name": "supplyCap",
2711
+ "type": "uint256"
2712
+ },
2133
2713
  {
2134
- "internalType": "bytes4",
2135
- "name": "",
2136
- "type": "bytes4"
2137
- }
2138
- ],
2139
- "stateMutability": "nonpayable",
2140
- "type": "function"
2141
- },
2142
- {
2143
- "inputs": [],
2144
- "name": "owner",
2145
- "outputs": [
2714
+ "internalType": "uint256",
2715
+ "name": "borrowCap",
2716
+ "type": "uint256"
2717
+ },
2146
2718
  {
2147
- "internalType": "address",
2148
- "name": "",
2149
- "type": "address"
2719
+ "internalType": "uint256",
2720
+ "name": "withdrawTimelockDuration",
2721
+ "type": "uint256"
2722
+ },
2723
+ {
2724
+ "internalType": "uint256",
2725
+ "name": "vaultOpeningFee",
2726
+ "type": "uint256"
2150
2727
  }
2151
2728
  ],
2152
2729
  "stateMutability": "view",
@@ -2180,9 +2757,9 @@
2180
2757
  "type": "address"
2181
2758
  },
2182
2759
  {
2183
- "internalType": "uint256",
2760
+ "internalType": "bytes32",
2184
2761
  "name": "",
2185
- "type": "uint256"
2762
+ "type": "bytes32"
2186
2763
  }
2187
2764
  ],
2188
2765
  "name": "positions",
@@ -2221,19 +2798,6 @@
2221
2798
  "stateMutability": "view",
2222
2799
  "type": "function"
2223
2800
  },
2224
- {
2225
- "inputs": [],
2226
- "name": "priceOracle",
2227
- "outputs": [
2228
- {
2229
- "internalType": "contract IRAACHousePrices",
2230
- "name": "",
2231
- "type": "address"
2232
- }
2233
- ],
2234
- "stateMutability": "view",
2235
- "type": "function"
2236
- },
2237
2801
  {
2238
2802
  "inputs": [],
2239
2803
  "name": "primeRateOracle",
@@ -2247,32 +2811,6 @@
2247
2811
  "stateMutability": "view",
2248
2812
  "type": "function"
2249
2813
  },
2250
- {
2251
- "inputs": [],
2252
- "name": "rToken",
2253
- "outputs": [
2254
- {
2255
- "internalType": "contract IRToken",
2256
- "name": "",
2257
- "type": "address"
2258
- }
2259
- ],
2260
- "stateMutability": "view",
2261
- "type": "function"
2262
- },
2263
- {
2264
- "inputs": [],
2265
- "name": "raacNFT",
2266
- "outputs": [
2267
- {
2268
- "internalType": "contract IRAACNFT",
2269
- "name": "",
2270
- "type": "address"
2271
- }
2272
- ],
2273
- "stateMutability": "view",
2274
- "type": "function"
2275
- },
2276
2814
  {
2277
2815
  "inputs": [],
2278
2816
  "name": "rateData",
@@ -2321,6 +2859,19 @@
2321
2859
  "stateMutability": "view",
2322
2860
  "type": "function"
2323
2861
  },
2862
+ {
2863
+ "inputs": [
2864
+ {
2865
+ "internalType": "address",
2866
+ "name": "adapter",
2867
+ "type": "address"
2868
+ }
2869
+ ],
2870
+ "name": "registerAdapter",
2871
+ "outputs": [],
2872
+ "stateMutability": "nonpayable",
2873
+ "type": "function"
2874
+ },
2324
2875
  {
2325
2876
  "inputs": [],
2326
2877
  "name": "renounceOwnership",
@@ -2331,9 +2882,32 @@
2331
2882
  {
2332
2883
  "inputs": [
2333
2884
  {
2334
- "internalType": "uint256",
2335
- "name": "tokenId",
2336
- "type": "uint256"
2885
+ "internalType": "bytes32",
2886
+ "name": "role",
2887
+ "type": "bytes32"
2888
+ },
2889
+ {
2890
+ "internalType": "address",
2891
+ "name": "callerConfirmation",
2892
+ "type": "address"
2893
+ }
2894
+ ],
2895
+ "name": "renounceRole",
2896
+ "outputs": [],
2897
+ "stateMutability": "nonpayable",
2898
+ "type": "function"
2899
+ },
2900
+ {
2901
+ "inputs": [
2902
+ {
2903
+ "internalType": "address",
2904
+ "name": "adapter",
2905
+ "type": "address"
2906
+ },
2907
+ {
2908
+ "internalType": "bytes",
2909
+ "name": "data",
2910
+ "type": "bytes"
2337
2911
  },
2338
2912
  {
2339
2913
  "internalType": "uint256",
@@ -2349,9 +2923,14 @@
2349
2923
  {
2350
2924
  "inputs": [
2351
2925
  {
2352
- "internalType": "uint256",
2353
- "name": "tokenId",
2354
- "type": "uint256"
2926
+ "internalType": "address",
2927
+ "name": "adapter",
2928
+ "type": "address"
2929
+ },
2930
+ {
2931
+ "internalType": "bytes",
2932
+ "name": "data",
2933
+ "type": "bytes"
2355
2934
  },
2356
2935
  {
2357
2936
  "internalType": "uint256",
@@ -2369,6 +2948,19 @@
2369
2948
  "stateMutability": "nonpayable",
2370
2949
  "type": "function"
2371
2950
  },
2951
+ {
2952
+ "inputs": [
2953
+ {
2954
+ "internalType": "uint256",
2955
+ "name": "amount",
2956
+ "type": "uint256"
2957
+ }
2958
+ ],
2959
+ "name": "requestWithdraw",
2960
+ "outputs": [],
2961
+ "stateMutability": "nonpayable",
2962
+ "type": "function"
2963
+ },
2372
2964
  {
2373
2965
  "inputs": [
2374
2966
  {
@@ -2441,16 +3033,21 @@
2441
3033
  "type": "function"
2442
3034
  },
2443
3035
  {
2444
- "inputs": [],
2445
- "name": "reserveAssetToken",
2446
- "outputs": [
3036
+ "inputs": [
2447
3037
  {
2448
- "internalType": "contract IERC20",
2449
- "name": "",
3038
+ "internalType": "bytes32",
3039
+ "name": "role",
3040
+ "type": "bytes32"
3041
+ },
3042
+ {
3043
+ "internalType": "address",
3044
+ "name": "account",
2450
3045
  "type": "address"
2451
3046
  }
2452
3047
  ],
2453
- "stateMutability": "view",
3048
+ "name": "revokeRole",
3049
+ "outputs": [],
3050
+ "stateMutability": "nonpayable",
2454
3051
  "type": "function"
2455
3052
  },
2456
3053
  {
@@ -2489,6 +3086,19 @@
2489
3086
  "stateMutability": "nonpayable",
2490
3087
  "type": "function"
2491
3088
  },
3089
+ {
3090
+ "inputs": [
3091
+ {
3092
+ "internalType": "address",
3093
+ "name": "_liquidationProxy",
3094
+ "type": "address"
3095
+ }
3096
+ ],
3097
+ "name": "setLiquidationProxy",
3098
+ "outputs": [],
3099
+ "stateMutability": "nonpayable",
3100
+ "type": "function"
3101
+ },
2492
3102
  {
2493
3103
  "inputs": [
2494
3104
  {
@@ -2585,6 +3195,63 @@
2585
3195
  "stateMutability": "view",
2586
3196
  "type": "function"
2587
3197
  },
3198
+ {
3199
+ "inputs": [
3200
+ {
3201
+ "internalType": "address",
3202
+ "name": "adapter",
3203
+ "type": "address"
3204
+ }
3205
+ ],
3206
+ "name": "supportedAdapter",
3207
+ "outputs": [
3208
+ {
3209
+ "internalType": "bool",
3210
+ "name": "",
3211
+ "type": "bool"
3212
+ }
3213
+ ],
3214
+ "stateMutability": "view",
3215
+ "type": "function"
3216
+ },
3217
+ {
3218
+ "inputs": [
3219
+ {
3220
+ "internalType": "address",
3221
+ "name": "",
3222
+ "type": "address"
3223
+ }
3224
+ ],
3225
+ "name": "supportedAdapters",
3226
+ "outputs": [
3227
+ {
3228
+ "internalType": "bool",
3229
+ "name": "",
3230
+ "type": "bool"
3231
+ }
3232
+ ],
3233
+ "stateMutability": "view",
3234
+ "type": "function"
3235
+ },
3236
+ {
3237
+ "inputs": [
3238
+ {
3239
+ "internalType": "bytes4",
3240
+ "name": "interfaceId",
3241
+ "type": "bytes4"
3242
+ }
3243
+ ],
3244
+ "name": "supportsInterface",
3245
+ "outputs": [
3246
+ {
3247
+ "internalType": "bool",
3248
+ "name": "",
3249
+ "type": "bool"
3250
+ }
3251
+ ],
3252
+ "stateMutability": "view",
3253
+ "type": "function"
3254
+ },
2588
3255
  {
2589
3256
  "inputs": [
2590
3257
  {
@@ -2623,6 +3290,19 @@
2623
3290
  "stateMutability": "nonpayable",
2624
3291
  "type": "function"
2625
3292
  },
3293
+ {
3294
+ "inputs": [
3295
+ {
3296
+ "internalType": "address",
3297
+ "name": "adapter",
3298
+ "type": "address"
3299
+ }
3300
+ ],
3301
+ "name": "unregisterAdapter",
3302
+ "outputs": [],
3303
+ "stateMutability": "nonpayable",
3304
+ "type": "function"
3305
+ },
2626
3306
  {
2627
3307
  "inputs": [],
2628
3308
  "name": "updateState",
@@ -2675,6 +3355,38 @@
2675
3355
  "stateMutability": "view",
2676
3356
  "type": "function"
2677
3357
  },
3358
+ {
3359
+ "inputs": [
3360
+ {
3361
+ "internalType": "address",
3362
+ "name": "",
3363
+ "type": "address"
3364
+ }
3365
+ ],
3366
+ "name": "vaultOpened",
3367
+ "outputs": [
3368
+ {
3369
+ "internalType": "bool",
3370
+ "name": "",
3371
+ "type": "bool"
3372
+ }
3373
+ ],
3374
+ "stateMutability": "view",
3375
+ "type": "function"
3376
+ },
3377
+ {
3378
+ "inputs": [],
3379
+ "name": "vaultProxy",
3380
+ "outputs": [
3381
+ {
3382
+ "internalType": "address",
3383
+ "name": "",
3384
+ "type": "address"
3385
+ }
3386
+ ],
3387
+ "stateMutability": "view",
3388
+ "type": "function"
3389
+ },
2678
3390
  {
2679
3391
  "inputs": [],
2680
3392
  "name": "vaultRewards",
@@ -2729,32 +3441,48 @@
2729
3441
  {
2730
3442
  "inputs": [
2731
3443
  {
2732
- "internalType": "uint256",
2733
- "name": "tokenId",
2734
- "type": "uint256"
3444
+ "internalType": "address",
3445
+ "name": "adapter",
3446
+ "type": "address"
3447
+ },
3448
+ {
3449
+ "internalType": "bytes",
3450
+ "name": "data",
3451
+ "type": "bytes"
2735
3452
  }
2736
3453
  ],
2737
- "name": "withdrawNFT",
3454
+ "name": "withdrawAsset",
2738
3455
  "outputs": [],
2739
3456
  "stateMutability": "nonpayable",
2740
3457
  "type": "function"
2741
3458
  },
2742
3459
  {
2743
- "inputs": [],
2744
- "name": "withdrawalsPaused",
2745
- "outputs": [
3460
+ "inputs": [
2746
3461
  {
2747
- "internalType": "bool",
3462
+ "internalType": "address",
2748
3463
  "name": "",
2749
- "type": "bool"
3464
+ "type": "address"
3465
+ }
3466
+ ],
3467
+ "name": "withdrawTimelock",
3468
+ "outputs": [
3469
+ {
3470
+ "internalType": "uint256",
3471
+ "name": "amount",
3472
+ "type": "uint256"
3473
+ },
3474
+ {
3475
+ "internalType": "uint256",
3476
+ "name": "readyAt",
3477
+ "type": "uint256"
2750
3478
  }
2751
3479
  ],
2752
3480
  "stateMutability": "view",
2753
3481
  "type": "function"
2754
3482
  }
2755
3483
  ],
2756
- "bytecode": "0x60a0604052601e805460ff60a01b1916600160a01b17905561012c6029556107d0602b55602c805460ff191690553480156200003a57600080fd5b506040516200630f3803806200630f8339810160408190526200005d91620002f5565b33806200008457604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b6200008f8162000261565b50600180556002805460ff191690556001600160a01b0386161580620000bc57506001600160a01b038516155b80620000cf57506001600160a01b038416155b80620000e257506001600160a01b038316155b80620000f557506001600160a01b038216155b80620000ff575080155b156200011e576040516303988b8160e61b815260040160405180910390fd5b601b80546001600160a01b03199081166001600160a01b03898116918217909355858316608052601980548316868516179055601c80548316898516908117909155601d8054841694891694851790557b033b2e3c9fd0803ce800000000000000033b2e3c9fd0803ce80000006008556009805464ffffffffff19164264ffffffffff1617905560038054841690911790556004805483169091179055600580549091169091179055600c819055620001da816109c4620002b1565b600d55600c54620001ee90611388620002b1565b600e55600c546200020290619c40620002b1565b600f556200021f6b033b2e3c9fd0803ce8000000611f40620002b1565b6010555050600060115550506b033b2e3c9fd0803ce8000000600a819055600b555050611f40602655670de0b6b3a76400006027556203f4806028556200036d565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600081156113881983900484111517620002ca57600080fd5b506127109102611388010490565b80516001600160a01b0381168114620002f057600080fd5b919050565b60008060008060008060c087890312156200030f57600080fd5b6200031a87620002d8565b95506200032a60208801620002d8565b94506200033a60408801620002d8565b93506200034a60608801620002d8565b92506200035a60808801620002d8565b915060a087015190509295509295509295565b608051615f5c620003b36000396000818161094801528181610a1801528181611051015281816129ce01528181613382015281816134b401526135970152615f5c6000f3fe608060405234801561001057600080fd5b50600436106104965760003560e01c80638aabb2d111610262578063c4f8911c11610151578063e91a7ca6116100ce578063f2fde38b11610092578063f2fde38b14610ddd578063f5b3b9e714610df0578063f8d8989814610e03578063f91c3b0d14610e16578063fbf4a61214610e29578063fbfa77cf14610e3857600080fd5b8063e91a7ca614610c84578063e9f2838e14610c97578063ec915ee614610ca4578063ef5bac2514610d05578063f1caf09f14610dca57600080fd5b8063d5db7d5d11610115578063d5db7d5d14610c25578063d81a698614610c38578063d8aed14514610c4b578063e5711e8b14610c5e578063e65896c914610c7157600080fd5b8063c4f8911c14610b1f578063c6d6916c14610b32578063c891091314610b45578063cd3293de14610b68578063d17e988314610c1257600080fd5b8063a8de4834116101df578063b88a802f116101a3578063b88a802f14610a4d578063bf4eccdf14610a55578063bfd91c2314610a68578063c1be667714610a88578063c415b95c14610b0c57600080fd5b8063a8de4834146109e5578063a90d728f146109f8578063a9bf805c14610a00578063ac919fd414610a13578063b6b55f2514610a3a57600080fd5b806397c4fac71161022657806397c4fac71461099057806398d721e0146109995780639daa54b4146109ac578063a42dce80146109bf578063a5b350c9146109d257600080fd5b80638aabb2d1146109205780638aee8127146109335780638bc2ff5b146109465780638da5cb5b1461096c578063929761791461097d57600080fd5b80632a5bf6d2116103895780635c975abb11610306578063768bab45116102ca578063768bab451461088e5780637bc7780b146108a157806383ba103f146108a95780638429d51f146108bc5780638456cb5914610907578063883c6b241461090f57600080fd5b80635c975abb146108155780636061ffc3146108205780636817031b14610860578063715018a61461087357806375417da61461087b57600080fd5b80633f4ba83a1161034d5780633f4ba83a1461073e5780634031234c1461074657806340c65f721461074f5780634df9d6ba14610762578063523a19ac1461077557600080fd5b80632a5bf6d21461067e5780632ab414fc146106915780632e1a7d4d146106a45780633adbb5af146106b75780633e20bf141461071a57600080fd5b8063150b7a02116104175780631d00ac3a116103db5780631d00ac3a146106285780631d4bf4a0146106485780631d8557d7146106505780632630c12f1461065857806327156a681461066b57600080fd5b8063150b7a02146105c457806316a6c4c5146105f057806316c621e0146105f95780631705ffad1461060c57806319c2d37e1461061557600080fd5b80630c34b9141161045e5780630c34b914146105195780630c42dcaf146105825780630c679a7b1461058b5780630d4085121461059e5780630ecbcdab146105b157600080fd5b8063023245d71461049b578063048c661d146104b0578063057e9b7b146104e057806309bf1e73146104f75780630ab30d8a14610501575b600080fd5b6104ae6104a9366004615701565b610e4b565b005b601e546104c3906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6104e960275481565b6040519081526020016104d7565b6104e96203f48081565b600854600160801b90046001600160801b03166104e9565b610521611102565b6040516104d79190600061010082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015160e083015292915050565b6104e9611f4081565b6104ae61059936600461572f565b611198565b6104e96105ac36600461574c565b6111c2565b6104ae6105bf366004615778565b61123e565b6105d76105d23660046157dd565b611288565b6040516001600160e01b031990911681526020016104d7565b6104e960285481565b6104ae610607366004615701565b611299565b6104e9602b5481565b6104e961062336600461574c565b61134a565b61063b61063636600461574c565b6113c3565b6040516104d791906158ed565b6021546104e9565b6104ae611499565b6019546104c3906001600160a01b031681565b6104e961067936600461572f565b6114a7565b6104e961068c36600461572f565b6114cc565b6104ae61069f3660046158fb565b61153b565b6104ae6106b2366004615701565b611a41565b6106ca6106c536600461574c565b611b18565b6040516104d79190600060c08201905082518252602083015115156020830152604083015160408301526060830151606083015260808301511515608083015260a083015160a083015292915050565b601e5461072e90600160a01b900460ff1681565b60405190151581526020016104d7565b6104ae611bcd565b6104e960265481565b601c546104c3906001600160a01b031681565b6104e961077036600461572f565b611bdd565b61080061078336600461574c565b6001600160a01b0391909116600090815260126020908152604080832093835292815290829020825160c0810184528154808252600183015460ff90811615159483019490945260028301549482019490945260038201546060820181905260048301549093161515608082015260059091015460a09091015291565b604080519283526020830191909152016104d7565b60025460ff1661072e565b60145460155460165461083b926001600160a01b0316919083565b604080516001600160a01b0390941684526020840192909252908201526060016104d7565b6104ae61086e36600461572f565b611c7f565b6104ae611f1d565b6104e961088936600461572f565b611f2f565b6104ae61089c36600461574c565b611fb6565b600c546104e9565b6104e96108b736600461574c565b6120a0565b6020546021546022546023546024546025546108da95949392919086565b604080519687526020870195909552938501929092526060840152608083015260a082015260c0016104d7565b6104ae6120d4565b6008546001600160801b03166104e9565b6104ae61092e366004615701565b6120e4565b6104ae61094136600461572f565b61226e565b7f00000000000000000000000000000000000000000000000000000000000000006104c3565b6000546001600160a01b03166104c3565b6104e961098b366004615701565b6122c2565b6104e960295481565b6104ae6109a736600461572f565b612358565b6104e96109ba36600461572f565b612408565b6104ae6109cd36600461572f565b61248b565b6104e96109e036600461574c565b61250c565b6104ae6109f336600461591d565b6125b5565b6104e9612652565b601a546104c3906001600160a01b031681565b6104c37f000000000000000000000000000000000000000000000000000000000000000081565b6104ae610a48366004615701565b61272c565b61072e61282e565b6104ae610a6336600461574c565b61284d565b610a7b610a7636600461572f565b612bb0565b6040516104d7919061599b565b610add610a9636600461574c565b6012602090815260009283526040808420909152908252902080546001820154600283015460038401546004850154600590950154939460ff938416949293919291169086565b6040805196875294151560208701529385019290925260608401521515608083015260a082015260c0016104d7565b601f546104c3906001600160a01b031681565b6104ae610b2d366004615701565b612e24565b6104ae610b4036600461572f565b612e5b565b6104e9610b5336600461572f565b60136020526000908152604090206001015481565b600354600454600554600654600754600854600954610bb4966001600160a01b0390811696811695169392916001600160801b0380821692600160801b909204169064ffffffffff1688565b604080516001600160a01b03998a16815297891660208901529590971694860194909452606085019290925260808401526001600160801b0390811660a08401521660c082015264ffffffffff90911660e0820152610100016104d7565b6104e9610c2036600461572f565b612f63565b601b546104c3906001600160a01b031681565b6104ae610c46366004615778565b61302d565b6104ae610c59366004615778565b61321b565b6104ae610c6c366004615a11565b613258565b6104e9610c7f36600461572f565b6132c9565b6104ae610c92366004615701565b613346565b602c5461072e9060ff1681565b600a54600b54600c54600d54600e54600f54601054601154610cca979695949392919088565b604080519889526020890197909752958701949094526060860192909252608085015260a084015260c083015260e0820152610100016104d7565b610dbd6040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101919091525060408051610100810182526003546001600160a01b039081168252600454811660208301526005541691810191909152600654606082015260075460808201526008546001600160801b0380821660a0840152600160801b9091041660c082015260095464ffffffffff1660e082015290565b6040516104d79190615a52565b6104c3610dd8366004615701565b613565565b6104ae610deb36600461572f565b613626565b6104e9610dfe366004615ad0565b613661565b601d546104c3906001600160a01b031681565b6104ae610e2436600461574c565b613693565b6104e9670de0b6b3a764000081565b602a546104c3906001600160a01b031681565b610e536137c8565b610e5b6137f2565b3360009081526012602090815260408083208484529091529020600181015460ff1615610e9b576040516367c11db560e01b815260040160405180910390fd5b336000908152601360209081526040808320858452600281019092529091205460ff16610edb5760405163346fad7360e01b815260040160405180910390fd5b610ee76003600a613816565b6000610ef3338561134a565b90508015610f14576040516302c9375f60e21b815260040160405180910390fd5b60008481526002830160209081526040808320805460ff19169055602d909152812080546001600160a01b03191690558254610f5290600190615b1b565b67ffffffffffffffff811115610f6a57610f6a61579a565b604051908082528060200260200182016040528015610f93578160200160208202803683370190505b5090506000805b84548110156110265786856000018281548110610fb957610fb9615b2e565b90600052602060002001541461101457846000018181548110610fde57610fde615b2e565b9060005260206000200154838381518110610ffb57610ffb615b2e565b60209081029190910101528161101081615b44565b9250505b8061101e81615b44565b915050610f9a565b5081516110399085906020850190615664565b50604051632142170760e11b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906342842e0e9061108a90309033908b90600401615b5d565b600060405180830381600087803b1580156110a457600080fd5b505af11580156110b8573d6000803e3d6000fd5b50506040518881523392507f2aa1b4c95f3b2da9c955947fca584743ea0d457708fadf209c093061e98c4ccb915060200160405180910390a250505050506110ff60018055565b50565b61114a60405180610100016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b506040805161010081018252600a548152600b546020820152600c5491810191909152600d546060820152600e546080820152600f5460a082015260105460c082015260115460e082015290565b6111a0613820565b601a80546001600160a01b0319166001600160a01b0392909216919091179055565b6000806111ce836122c2565b905060006111dc858561250c565b905060018110156111fc57676765c793fa10079d601b1b92505050611238565b60006112136026548461384d90919063ffffffff16565b90508161122882670de0b6b3a7640000615b81565b6112329190615b98565b93505050505b92915050565b6112466137c8565b61124e6137f2565b80806000036112705760405163162908e360e11b815260040160405180910390fd5b61127a8383613873565b5061128460018055565b5050565b630a85bd0160e11b5b949350505050565b6112a16137c8565b6014546001600160a01b03166112ca57604051632506892760e01b815260040160405180910390fd5b806000036112eb5760405163162908e360e11b815260040160405180910390fd5b601454611303906001600160a01b0316333084613ab4565b61130c81613b14565b60405181815233907fe79ffd9a88f13c8c49fb545410401d9877ab90d9dcf7b15d4dc0601993a0d9139060200160405180910390a26110ff60018055565b6001600160a01b0382166000908152601260209081526040808320848452825291829020825160c0810184528154808252600183015460ff908116151594830194909452600283015494820194909452600382015460608201526004820154909216151560808301526005015460a09091015292915050565b6113cb6156ab565b6113d36156ab565b6001600160a01b0384166000908152601260209081526040808320868452825291829020825160c0808201855282548252600183015460ff90811615159483018590526002840154958301958652600384015460608085019190915260048501549091161515608080850191825260059095015460a085015290870194909452935191850191909152805184529051151591830191909152611475858561250c565b602083015261148485856111c2565b60408301526060015160a08201529392505050565b6114a56003600a613816565b565b6000806114b3836114cc565b905060006114c084612f63565b90506112918183615bba565b600354604051630481930d60e21b81526001600160a01b03838116600483015260009216906312064c3490602401602060405180830381865afa158015611517573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112389190615bcd565b611543613820565b600082600781111561155757611557615be6565b03611602576127108111156115b35760405162461bcd60e51b815260206004820152601d60248201527f496e76616c6964206c69717569646174696f6e207468726573686f6c6400000060448201526064015b60405180910390fd5b60268190556027546028546040805184815260208101939093528201527fafabe1c7d6c2e86cbfc67a8ba53d25a7f8ef59b97d972dd4bf7d7525ba7fdddf906060015b60405180910390a15050565b600182600781111561161657611616615be6565b0361166157602781905560265460285460408051928352602083018490528201527fafabe1c7d6c2e86cbfc67a8ba53d25a7f8ef59b97d972dd4bf7d7525ba7fdddf906060016115f6565b600282600781111561167557611675615be6565b0361171c57620151808110158015611690575062093a808111155b6116d35760405162461bcd60e51b8152602060048201526014602482015273125b9d985b1a590819dc9858d9481c195c9a5bd960621b60448201526064016115aa565b602881905560265460275460408051928352602083019190915281018290527fafabe1c7d6c2e86cbfc67a8ba53d25a7f8ef59b97d972dd4bf7d7525ba7fdddf906060016115f6565b600382600781111561173057611730615be6565b036117ce576127108111156117875760405162461bcd60e51b815260206004820152601860248201527f526174696f2063616e6e6f74206578636565642031303025000000000000000060448201526064016115aa565b602b80549082905560408051828152602081018490527fab45a8374e3d1f623df0e88a957317731ccc02ed377e5b0213661f85bf60b73191015b60405180910390a1505050565b60048260078111156117e2576117e2615be6565b036118785760018111156118305760405162461bcd60e51b8152602060048201526015602482015274496e76616c696420626f6f6c65616e2076616c756560581b60448201526064016115aa565b602c805460ff19166001831490811790915560405160ff909116151581527f0565da69314136ea081c6239b9813f6ef6d213f57210dfef1d470af55b0235f3906020016115f6565b600582600781111561188c5761188c615be6565b036119305760018111156118da5760405162461bcd60e51b8152602060048201526015602482015274496e76616c696420626f6f6c65616e2076616c756560581b60448201526064016115aa565b601e8054600160a01b60018414810260ff60a01b199092169190911791829055604051910460ff16151581527f932a526fd95bf1b5aab775a957e284733f02db3a9824802cbcbb4fbca239cbe1906020016115f6565b600682600781111561194457611944615be6565b036119d1576127108111156119935760405162461bcd60e51b8152602060048201526015602482015274496e76616c696420696e737572616e63652066656560581b60448201526064016115aa565b602980549082905560408051828152602081018490527f87c461d1c2c7c5cd98495e5517aa11d9df56d0819cc4e8e53d9664c4b18f6db191016117c1565b60078260078111156119e5576119e5615be6565b03611a2857601180549082905560408051828152602081018490527f1d830358c94d390366ad7162b72e731448e195f3576e63b1f57f5e43c719c5aa91016117c1565b604051630309cb8760e51b815260040160405180910390fd5b611a496137c8565b611a516137f2565b8080600003611a735760405163162908e360e11b815260040160405180910390fd5b602c5460ff1615611a97576040516370a7336d60e11b815260040160405180910390fd5b611aa033613b97565b611aac6003600a613816565b611ab582613c3e565b6000806000611ac86003600a8733613f67565b925092509250611ad661408f565b60405183815233907f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243649060200160405180910390a2505050506110ff60018055565b611b556040518060c00160405280600081526020016000151581526020016000815260200160008152602001600015158152602001600081525090565b506001600160a01b0382166000908152601260209081526040808320848452825291829020825160c08101845281548152600182015460ff908116151593820193909352600282015493810193909352600381015460608401526004810154909116151560808301526005015460a082015292915050565b611bd5613820565b6114a5614245565b6014546000906001600160a01b0316611bf857506000919050565b6000611c03836114a7565b905080600003611c165750600092915050565b6001600160a01b038316600090815260176020526040812054601554670de0b6b3a764000091611c4591615b1b565b611c4f9084615b81565b611c599190615b98565b6001600160a01b0385166000908152601860205260409020549091506112919082615bba565b611c87613820565b602a546001600160a01b03828116911614801590611caf5750602a546001600160a01b031615155b15611e1357602a5460405163ce96cb7760e01b81523060048201526001600160a01b039091169063ce96cb7790602401602060405180830381865afa925050508015611d18575060408051601f3d908101601f19168201909252611d1591810190615bcd565b60015b611e0857611d24615bfc565b806308c379a003611d815750611d38615c17565b80611d435750611d9a565b602a546040516001600160a01b03909116907fc4cede9b2b63ba72d39d2f630b4b742e1cada59d7a073ac4e10da9ac7b2eb10590600090a250611e13565b634e487b7103611d9a57611d93615ca1565b90611d4357505b3d808015611dc4576040519150601f19603f3d011682016040523d82523d6000602084013e611dc9565b606091505b50602a546040516001600160a01b03909116907fc4cede9b2b63ba72d39d2f630b4b742e1cada59d7a073ac4e10da9ac7b2eb10590600090a250611e13565b611e1181614297565b505b602a80546001600160a01b031981166001600160a01b0384811691821790935560048054604080516338d52e0f60e01b815290519486169591909116936338d52e0f928281019260209291908290030181865afa158015611e78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e9c9190615cc1565b6001600160a01b031614158015611ebb57506001600160a01b03821615155b15611ed957604051631b3b488360e11b815260040160405180910390fd5b816001600160a01b0316816001600160a01b03167f483bdedaaf23706a9800ac1af0d852b34927780d79f9d6ba60a80c7cad75ea3960405160405180910390a35050565b611f25613820565b6114a56000614456565b600080805b6001600160a01b0384166000908152601360205260409020548111611faf576001600160a01b038416600090815260136020908152604080832084845260020190915290205460ff1615611f9d576000611f8d826122c2565b9050611f998184615bba565b9250505b80611fa781615b44565b915050611f34565b5092915050565b611fbe613820565b611fca6003600a613816565b6001600160a01b0382166120365760405162461bcd60e51b815260206004820152602d60248201527f4c656e64696e67506f6f6c3a20526563697069656e742063616e6e6f7420626560448201526c207a65726f206164647265737360981b60648201526084016115aa565b60035460405163768bab4560e01b81526001600160a01b038481166004830152602482018490529091169063768bab4590604401600060405180830381600087803b15801561208457600080fd5b505af1158015612098573d6000803e3d6000fd5b505050505050565b6001600160a01b03821660009081526012602090815260408083208484529091528120600581015481546112919190615b1b565b6120dc613820565b6114a56144a6565b6120ec6137c8565b6120f46137f2565b3360008181526012602090815260408083208584529091529020600181015460ff166121335760405163013e5dc360e61b815260040160405180910390fd5b6001600160a01b038216600090815260136020908152604080832086845260020190915290205460ff1661217a5760405163346fad7360e01b815260040160405180910390fd5b602854816002015461218c9190615bba565b4211156121ac57604051634b3c322760e11b815260040160405180910390fd5b600481015460ff166121d157604051632d1118e960e21b815260040160405180910390fd5b6121dd6003600a613816565b60006121e9838561250c565b9050801561220a576040516312bf4cab60e01b815260040160405180910390fd5b60018201805460ff1990811690915560006002840181905560048401805490921690915560405185916001600160a01b038616917fd66fca94ddede030b58f223f22d6b43407a443bd68e2e73d38ab7675cf480acc9190a35050506110ff60018055565b612276613820565b6014546001600160a01b0316156122a05760405163b6de9a7160e01b815260040160405180910390fd5b601480546001600160a01b0319166001600160a01b0392909216919091179055565b60195460405163b94fe91760e01b815260048101839052600091829182916001600160a01b03169063b94fe917906024016040805180830381865afa15801561230f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123339190615cde565b9150915081600003611faf57604051633b0c4c3160e11b815260040160405180910390fd5b612360613820565b6001600160a01b038116612387576040516303988b8160e61b815260040160405180910390fd5b601e546001600160a01b03908116908216036123b65760405163aba916dd60e01b815260040160405180910390fd5b601e80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f593eaf5e0e1afc1c041a664a437fdae719a628836785d06572b008e6ca5c189d90600090a35050565b600080805b6001600160a01b038416600090815260136020526040902054811015611faf576001600160a01b0384166000908152601360205260409020805461246d9186918490811061245d5761245d615b2e565b906000526020600020015461250c565b6124779083615bba565b91508061248381615b44565b91505061240d565b612493613820565b6001600160a01b0381166124ba576040516303988b8160e61b815260040160405180910390fd5b601f80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f5d16ad41baeb009cd23eb8f6c7cde5c2e0cd5acf4a33926ab488875c37c37f3890600090a35050565b6001600160a01b03821660009081526012602090815260408083208484528252808320815160c08101835281548152600182015460ff9081161515948201949094526002820154928101929092526003810154606083018190526004820154909316151560808301526005015460a082015260085490916125a9916125a19190600160801b90046001600160801b0316615b1b565b8251906144e3565b81516112919190615bba565b6125bd6137c8565b6125c56137f2565b81806000036125e75760405163162908e360e11b815260040160405180910390fd5b601e54600160a01b900460ff16612611576040516312cefcd560e31b815260040160405180910390fd5b6001600160a01b038216612638576040516303988b8160e61b815260040160405180910390fd5b612643848484614526565b5061264d60018055565b505050565b601f546000906001600160a01b0316331461267f576040516282b42960e81b815260040160405180910390fd5b602a546001600160a01b03166126c65760405162461bcd60e51b815260206004820152600c60248201526b139bc81d985d5b1d081cd95d60a21b60448201526064016115aa565b60045460218054426022556000909155601f546001600160a01b03928316926126f29184911683614824565b6040518181527f7edfb0d5d58c6a3d398df94a9bdfa2b33f3fa42ae40d72ebdc717d2db3953ee59060200160405180910390a19150505b90565b6127346137c8565b61273c6137f2565b808060000361275e5760405163162908e360e11b815260040160405180910390fd5b61276733613b97565b6127736003600a613816565b60006127836003600a8533614855565b33600090815260136020526040812060010154919250036127b8573360009081526013602052604090206001018390556127e0565b33600090815260136020526040812060010180548592906127da908490615bba565b90915550505b6127e861408f565b604080518481526020810183905233917f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a15910160405180910390a250506110ff60018055565b60006128386137c8565b61284133613b97565b50600161272960018055565b6128556137c8565b601e546001600160a01b0316331461287f576040516282b42960e81b815260040160405180910390fd5b6001600160a01b03821660009081526012602090815260408083208484529091529020600181015460ff166128c75760405163013e5dc360e61b815260040160405180910390fd5b6001600160a01b038316600090815260136020908152604080832085845260020190915290205460ff1661290e5760405163346fad7360e01b815260040160405180910390fd5b61291a6003600a613816565b600481015460ff16801561293f5750602854816002015461293b9190615bba565b4211155b1561295d576040516363e5f12d60e11b815260040160405180910390fd5b6000612969848461250c565b60018301805460ff199081169091556000600280860182905560048087018054851690556001600160a01b03808a1684526013602090815260408086208b87529094019052928290208054909416909355601e5490516323b872dd60e01b81529394507f00000000000000000000000000000000000000000000000000000000000000008216936323b872dd93612a069330931691899101615b5d565b600060405180830381600087803b158015612a2057600080fd5b505af1158015612a34573d6000803e3d6000fd5b5050506000848152602d602052604080822080546001600160a01b03191690556005546008549151636f3df85160e11b81529293508392839283926001600160a01b03169163de7bf0a291612aa3918c918a91600160801b9091046001600160801b0316908d90600401615d02565b6080604051808303816000875af1158015612ac2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ae69190615d31565b600854600160801b90046001600160801b031660038b810191909155546004549498509296509094509250612b2a916001600160a01b039081169133911687613ab4565b6000808755600587018190556007849055612b4c90600390600a908790614999565b601e5487906001600160a01b03808b1691167f3f2ad1b98f8838e6f90c126ac5f8a9875c7acf2a56aeb8a630c0fa475b07056a88612b89856122c2565b6040805192835260208301919091520160405180910390a450505050505061128460018055565b612bdb6040518060800160405280606081526020016000815260200160008152602001606081525090565b6001600160a01b0382166000908152601360209081526040808320815160808101835260608082529381018590529182019390935281810191909152815460408051602080840282018101909252828152918491830182828015612c5e57602002820191906000526020600020905b815481526020019060010190808311612c4a575b5050509183525050815467ffffffffffffffff811115612c8057612c8061579a565b604051908082528060200260200182016040528015612cb957816020015b612ca66156ab565b815260200190600190039081612c9e5790505b506060820152600060208201819052604082018190525b8254811015612e1c57306001600160a01b0316631d00ac3a86856000018481548110612cfe57612cfe615b2e565b6000918252602090912001546040516001600160e01b031960e085901b1681526001600160a01b039092166004830152602482015260440160e060405180830381865afa158015612d53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d779190615d7c565b82606001518281518110612d8d57612d8d615b2e565b602002602001018190525081606001518181518110612dae57612dae615b2e565b60200260200101516020015182602001818151612dcb9190615bba565b9052508254612df690849083908110612de657612de6615b2e565b90600052602060002001546122c2565b82604001818151612e079190615bba565b90525080612e1481615b44565b915050612cd0565b509392505050565b601a546001600160a01b03163314612e4e576040516282b42960e81b815260040160405180910390fd5b6110ff6003600a83614aeb565b6003546001600160a01b03163314612eb55760405162461bcd60e51b815260206004820152601e60248201527f4f6e6c792052546f6b656e2063616e207570646174652072657761726473000060448201526064016115aa565b6000612ec0826114a7565b90508015612f43576001600160a01b038216600090815260176020526040812054601554670de0b6b3a764000091612ef791615b1b565b612f019084615b81565b612f0b9190615b98565b90508015612f41576001600160a01b03831660009081526018602052604081208054839290612f3b908490615bba565b90915550505b505b506015546001600160a01b03909116600090815260176020526040902055565b601e546000906001600160a01b0316612f7e57506000919050565b601e546040516001600160a01b038481166024830152600092839291169060440160408051601f198184030181529181526020820180516001600160e01b031663c084b10b60e01b17905251612fd49190615e0b565b600060405180830381855afa9150503d806000811461300f576040519150601f19603f3d011682016040523d82523d6000602084013e613014565b606091505b5091509150808060200190518101906112919190615bcd565b6130356137c8565b61303d6137f2565b33600081815260126020908152604080832086845290915281209161306290856120a0565b90506000613071338686613661565b601b54601f54604051636eb1769f60e11b81523360048201526001600160a01b039182166024820152929350839291169063dd62ed3e90604401602060405180830381865afa1580156130c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130ec9190615bcd565b101561310b576040516339e067d560e21b815260040160405180910390fd5b601b546040516370a0823160e01b815233600482015282916001600160a01b0316906370a0823190602401602060405180830381865afa158015613153573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131779190615bcd565b101561319657604051631e9acf1760e31b815260040160405180910390fd5b6131a08585613873565b6131a981614bc4565b60048301805460ff191660011790556131c28483615bba565b8360050160008282546131d59190615bba565b909155505060405182815285907fd5c2dc3f0ec76ece0185d374bca424347955bce9b5e7b08757bb8e1bb8d9c0a99060200160405180910390a250505061128460018055565b6132236137c8565b61322b6137f2565b808060000361324d5760405163162908e360e11b815260040160405180910390fd5b61127a838333614526565b613260613820565b6003546001600160a01b03908116908416036132b55760405162461bcd60e51b815260206004820152601460248201527321b0b73737ba103932b9b1bab290292a37b5b2b760611b60448201526064016115aa565b61264d6001600160a01b0384168383614824565b600080805b6001600160a01b038416600090815260136020526040902054811015611faf576001600160a01b038416600090815260136020908152604080832084845260020190915290205460ff161561333457613327848261250c565b6133319083615bba565b91505b8061333e81615b44565b9150506132ce565b61334e6137c8565b6133566137f2565b6133626003600a613816565b6040516331a9108f60e11b81526004810182905233906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa1580156133c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133ed9190615cc1565b6001600160a01b031614613414576040516384b359d160e01b815260040160405180910390fd5b336000908152601360209081526040808320848452600281019092529091205460ff16156134555760405163e8edca8360e01b815260040160405180910390fd5b60008281526002820160209081526040808320805460ff191660019081179091558454908101855584845282842001859055848352602d9091529081902080546001600160a01b031916339081179091559051632142170760e11b81527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316916342842e0e916134f4919030908790600401615b5d565b600060405180830381600087803b15801561350e57600080fd5b505af1158015613522573d6000803e3d6000fd5b50506040518481523392507f1c4b8380f61aea3d5d98cbadaf2e6b2e4f3d8ca8c0fce1290b26ac267158745f915060200160405180910390a2506110ff60018055565b6000818152602d60205260408120546001600160a01b031661360a576040516331a9108f60e11b8152600481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa1580156135e6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112389190615cc1565b506000908152602d60205260409020546001600160a01b031690565b61362e613820565b6001600160a01b03811661365857604051631e4fbdf760e01b8152600060048201526024016115aa565b6110ff81614456565b60008061366e85856120a0565b905061368860295484836136829190615bba565b9061384d565b9150505b9392505050565b61369b6137c8565b6136a36137f2565b6001600160a01b03821660009081526012602090815260408083208484529091529020600181015460ff16156136ec5760405163b84f7eb560e01b815260040160405180910390fd5b6001600160a01b038316600090815260136020908152604080832085845260020190915290205460ff166137335760405163346fad7360e01b815260040160405180910390fd5b61373f6003600a613816565b600061374b84846111c2565b9050602754811061376f5760405163317416e560e11b815260040160405180910390fd5b6001828101805460ff1916909117905542600283015560405183906001600160a01b0386169033907f4601ff28b457321206747d0540f02cfb8a9d6bf3021146378e8544e1817e20e790600090a4505061128460018055565b6002600154036137eb57604051633ee5aeb560e01b815260040160405180910390fd5b6002600155565b60025460ff16156114a55760405163d93c066560e01b815260040160405180910390fd5b6112848282614cb7565b6000546001600160a01b031633146114a55760405163118cdaa760e01b81523360048201526024016115aa565b60008115611388198390048411151761386557600080fd5b506127109102611388010490565b3360009081526012602090815260408083208584529091529020600181015460ff16156138b357604051630bff073160e31b815260040160405180910390fd5b336000908152601360209081526040808320868452600281019092529091205460ff166138f35760405163346fad7360e01b815260040160405180910390fd5b6138fd8484614de9565b6139096003600a613816565b61391283613c3e565b600554600854600384015460405163f05fb60960e01b81523360048201819052602482015260448101879052600160801b9092046001600160801b03166064830152608482015260a48101869052600091829182916001600160a01b03169063f05fb6099060c4016060604051808303816000875af1158015613999573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139bd9190615e3a565b600854600160801b90046001600160801b031660038981019190915554604051635c921eb960e01b8152336004820152602481018b905293965091945092506001600160a01b031690635c921eb990604401600060405180830381600087803b158015613a2957600080fd5b505af1158015613a3d573d6000803e3d6000fd5b5050505081856000016000828254613a559190615bba565b90915550506007819055613a6e6003600a600089614999565b613a7661408f565b60405186815233907fcbc04eca7e9da35cb1393a6135a199ca52e450d5e9251cbd99f7847d33a367509060200160405180910390a250505050505050565b613b0e84856001600160a01b03166323b872dd868686604051602401613adc93929190615b5d565b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050614e65565b50505050565b6014546001600160a01b0316613b3d57604051632506892760e01b815260040160405180910390fd5b6006546000819003613b4d575050565b811561128457600081613b6884670de0b6b3a7640000615b81565b613b729190615b98565b90508060146001016000828254613b899190615bba565b909155505042601655505050565b6014546001600160a01b0316613baa5750565b6000613bb582611bdd565b90508015611284576001600160a01b038083166000908152601860209081526040808320839055601554601790925290912055601454613bf791168383614824565b816001600160a01b03167fe34918ff1c7084970068b53fd71ad6d8b04e9f15d3886cbf006443e6cdc52ea682604051613c3291815260200190565b60405180910390a25050565b602a546001600160a01b0316613c515750565b600480546003546040516370a0823160e01b81526001600160a01b03918216938101939093526000929116906370a0823190602401602060405180830381865afa158015613ca3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cc79190615bcd565b905081811015611284576000613cdd8284615b1b565b602a5460405163ce96cb7760e01b81523060048201529192506000916001600160a01b039091169063ce96cb7790602401602060405180830381865afa158015613d2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d4f9190615bcd565b90506000613d5d8285615bba565b905082811015613dc65760405162461bcd60e51b815260206004820152602e60248201527f4e6f7420656e6f756768206c697175696469747920746f2066756c66696c6c2060448201526d1d1a19481dda5d1a191c985dd85b60921b60648201526084016115aa565b6006546000613dd58783615b1b565b905060008115613df057602b54613ded90839061384d565b90505b8585811115613dfc5750845b8015613e0b57613e0b81614297565b600480546040516370a0823160e01b815230928101929092526001600160a01b0316906370a0823190602401602060405180830381865afa158015613e54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e789190615bcd565b600480546003546040516370a0823160e01b81526001600160a01b039182169381019390935216906370a0823190602401602060405180830381865afa158015613ec6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613eea9190615bcd565b613ef49190615bba565b975088881015613f5c5760405162461bcd60e51b815260206004820152602d60248201527f496e73756666696369656e74206c69717569646974792061667465722076617560448201526c1b1d081dda5d1a191c985dd85b609a1b60648201526084016115aa565b505050505050505050565b60008060006001851015613f8e5760405163162908e360e11b815260040160405180910390fd5b613f988787614cb7565b86546005880154604051636b81068560e11b8152600092839283926001600160a01b039092169163d7020d0a91613fe1918b9182918e916001600160801b031690600401615e6f565b6060604051808303816000875af1158015614000573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140249190615ea0565b92509250925082955061403a8a8a600084614999565b60408051828152602081018590526001600160a01b038916917ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b568910160405180910390a2999198508997509095505050505050565b602a546001600160a01b03166140a157565b600654602b546000906140b590839061384d565b600480546003546040516370a0823160e01b81526001600160a01b039182169381019390935292935060009216906370a0823190602401602060405180830381865afa158015614109573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061412d9190615bcd565b9050818111156141545760006141438383615b1b565b905061414e81614ec8565b5061420b565b8181101561420b5760006141688284615b1b565b90506000602a60009054906101000a90046001600160a01b03166001600160a01b03166301e1d1146040518163ffffffff1660e01b8152600401602060405180830381865afa1580156141bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141e39190615bcd565b905060008183116141f457826141f6565b815b905080156142075761420781614297565b5050505b6020805460408051848152928301919091527f8f9497c27f572ff1a65e8b2c7a0706d466466ae0b5efc78462b5f0021da6695691016117c1565b61424d6150fe565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b602a546040516328c0620360e01b8152600160048201526000916001600160a01b0316906328c0620390602401602060405180830381865afa1580156142e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143059190615bcd565b602a54604051632d182be560e21b815260048101859052306024820181905260448201529192506000916001600160a01b039091169063b460af94906064016020604051808303816000875af1158015614363573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143879190615bcd565b905060006020600301548311156143ea576023546000906143a89085615b1b565b9050670de0b6b3a76400006143bd8285615b81565b6143c79190615b98565b915081602060010160008282546143de9190615bba565b909155506143ee915050565b5060005b60006143fa8286615b1b565b60035460045491925061441a916001600160a01b03908116911683614824565b60205485111561442e576000602055614449565b84602060000160008282546144439190615b1b565b90915550505b5050506023555042602455565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6144ae6137f2565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861427a3390565b600081156b019d971e4fe8401e74000000198390048411151761450557600080fd5b50676765c793fa10079d601b1b91026b019d971e4fe8401e74000000010490565b816000036145475760405163162908e360e11b815260040160405180910390fd5b6001600160a01b03811661456e576040516303988b8160e61b815260040160405180910390fd5b6001600160a01b0381166000908152601360209081526040808320868452600281019092529091205460ff166145b75760405163346fad7360e01b815260040160405180910390fd5b6145c36003600a613816565b6001600160a01b03821660009081526012602090815260408083208784529091529020600181015460ff1680156145ff5750600481015460ff16155b1561461d5760405163224aae4f60e21b815260040160405180910390fd5b600181015460ff1680156146415750602854816002015461463e9190615bba565b42115b1561465f57604051634b3c322760e11b815260040160405180910390fd5b600061466b848761250c565b9050600081861161467c578561467e565b815b9050600080600080600360020160009054906101000a90046001600160a01b03166001600160a01b031663de7bf0a28a87600360050160109054906101000a90046001600160801b03168f6040518563ffffffff1660e01b81526004016146e89493929190615d02565b6080604051808303816000875af1158015614707573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061472b9190615d31565b600854600160801b90046001600160801b031660038c81019190915554600454949850929650909450925061476f916001600160a01b039081169133911688613ab4565b60078390558015614794578087600001600082825461478e9190615bba565b90915550505b86546147a1908390615b1b565b808855600588015411156147b757865460058801555b86546000036147c857600060058801555b6147d76003600a876000614999565b6040518581526001600160a01b038a169033907f05f2eeda0e08e4b437f487c8d7d29b14537d15e3488170dc3de5dbdf8dac46849060200160405180910390a35050505050505050505050565b6040516001600160a01b0383811660248301526044820183905261264d91859182169063a9059cbb90606401613adc565b600060018310156148795760405163162908e360e11b815260040160405180910390fd5b6148838585614cb7565b845460018601546148a3916001600160a01b039182169133911686613ab4565b8454600586015460405163b3f1c93d60e01b81526000928392839283926001600160a01b03169163b3f1c93d916148ee9130918b918d916001600160801b0390911690600401615e6f565b6080604051808303816000875af115801561490d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906149319190615ece565b93509350935093508294506149498989896000614999565b60408051888152602081018790526001600160a01b038816917f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a15910160405180910390a250505050949350505050565b81156149c6576149a882615121565b6001600160801b031684600301546149c09190615bba565b60038501555b8015614a185780846003015410156149f15760405163bb55fd2760e01b815260040160405180910390fd5b6149fa81615121565b6001600160801b03168460030154614a129190615b1b565b60038501555b600384015460048501546000614a2e8787615159565b90506000614a3c88886151ba565b90506000614a5289600301548a60040154615215565b9050614a76886002015489600301548a600401548b600501548c6006015486615261565b600189018190556007890154614a8e9183918761534b565b8855614a9a8989614cb7565b875460018901546040517f48f4f83c2f1843e8fd7ef13ffcff40fca5055dc1b9b074cd9dd0f9a8a8e09dd992614ad892908252602082015260400190565b60405180910390a1505050505050505050565b6001811015614b0d5760405163824c180760e01b815260040160405180910390fd5b60028201548015614b70576000614b26826101f461384d565b90506000828411614b4057614b3b8484615b1b565b614b4a565b614b4a8385615b1b565b905081811115614b6d57604051631a8b543360e21b815260040160405180910390fd5b50505b60028301829055614b848484600080614999565b60408051828152602081018490527fd45d1eb66419c036e2fa401916c7db417696f889cf4ab8ca92272327e8e1c83e91015b60405180910390a150505050565b601f546001600160a01b0316614bed576040516303988b8160e61b815260040160405180910390fd5b80600003614c0e5760405163162908e360e11b815260040160405180910390fd5b601f5460048054604051636033e31560e01b81526001600160a01b0391821692810192909252336024830152604482018490527f65991ea5d80f7b6dc8c32648f59c5a653beb10caddae8fefad6966b35a0a65f1606483015290911690636033e315906084016020604051808303816000875af1158015614c93573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112849190615f0b565b6006820154600090614cd09064ffffffffff1642615b1b565b90506001811015614ce057505050565b60058301546001600160801b03166001811015614d1057604051630a1cf3ed60e21b815260040160405180910390fd5b82546005850154614d2c919084906001600160801b0316615392565b6005850180546fffffffffffffffffffffffffffffffff19166001600160801b0392831617908190556001850154614d709290918591600160801b909104166153af565b6005850180546001600160801b03908116600160801b93821684028181179384905560068901805464ffffffffff19164264ffffffffff16179055604080519184169092178152939092041660208301527ff92a3abee06d57c996e7e19eb34560241fdc1fe67e9ebd503177710bf9fd82049101614bb6565b6000614df4836122c2565b905080600003614e1757604051638dc8d9b360e01b815260040160405180910390fd5b6000614e2e6026548361384d90919063ffffffff16565b905082614e3b338661134a565b614e459190615bba565b811015613b0e57604051630369fbd160e51b815260040160405180910390fd5b6000614e7a6001600160a01b038416836153cb565b90508051600014158015614e9f575080806020019051810190614e9d9190615f0b565b155b1561264d57604051635274afe760e01b81526001600160a01b03841660048201526024016115aa565b600354604051635c921eb960e01b8152306004820152602481018390526001600160a01b0390911690635c921eb990604401600060405180830381600087803b158015614f1457600080fd5b505af1158015614f28573d6000803e3d6000fd5b505060048054602a5460405163095ea7b360e01b81526001600160a01b03918216938101939093526024830186905216925063095ea7b391506044016020604051808303816000875af1158015614f83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614fa79190615f0b565b50602a54604051636e553f6560e01b8152600481018390523060248201526000916001600160a01b031690636e553f65906044016020604051808303816000875af1158015614ffa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061501e9190615bcd565b602a546040516328c0620360e01b81526000600482018190529293506001600160a01b03909116906328c0620390602401602060405180830381865afa15801561506c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906150909190615bcd565b9050600082116150d95760405162461bcd60e51b815260206004820152601460248201527315985d5b1d0819195c1bdcda5d0819985a5b195960621b60448201526064016115aa565b82602060000160008282546150ee9190615bba565b9091555050602355505042602555565b60025460ff166114a557604051638dfc202b60e01b815260040160405180910390fd5b60006001600160801b03821115615155576040516306dfcc6560e41b815260806004820152602481018390526044016115aa565b5090565b600682015460009081906151749064ffffffffff1642615b1b565b9050600181101561518b5750506004820154611238565b6005840154600184015461129191600160801b90046001600160801b0316906151b490846153d9565b906144e3565b600682015460009081906151d59064ffffffffff1642615b1b565b905060018110156151f557505060058201546001600160801b0316611238565b60058401548354611291916001600160801b0316906151b4908483615428565b600060018310156152325750676765c793fa10079d601b1b611238565b600061525061524b6152448587615bba565b859061545c565b615121565b6001600160801b0316949350505050565b600085871115806152725750838710155b8061527d5750858511155b806152885750838510155b156152a65760405163abc83fed60e01b815260040160405180910390fd5b60008383116152e85760006152bb888a615b1b565b905060006152d3866152cd87856144e3565b9061545c565b90506152df818a615bba565b92505050615340565b60006152f48585615b1b565b9050600061530d86676765c793fa10079d601b1b615b1b565b9050600061531b8b89615b1b565b9050600061532d836152cd86856144e3565b9050615339818d615bba565b9450505050505b979650505050505050565b6000600182101561535e57506000611291565b600061536a86866144e3565b9050600061537882866144e3565b905060006153868284615b1b565b98975050505050505050565b6000806153a0858585615428565b905061368861524b82856144e3565b6000806153bc85856153d9565b905061368861524b84836144e3565b606061368c83836000615499565b600060018210156153f65750676765c793fa10079d601b1b611238565b6000615406846301e1338061545c565b9050600061541482856144e3565b905061541f81615536565b95945050505050565b6000806154358486615b81565b90506154456301e1338082615b98565b905061368881676765c793fa10079d601b1b615bba565b60008115676765c793fa10079d601b1b6002840419048411171561547f57600080fd5b50676765c793fa10079d601b1b9190910260028204010490565b6060814710156154be5760405163cd78605960e01b81523060048201526024016115aa565b600080856001600160a01b031684866040516154da9190615e0b565b60006040518083038185875af1925050503d8060008114615517576040519150601f19603f3d011682016040523d82523d6000602084013e61551c565b606091505b509150915061552c8683836155df565b9695505050505050565b6000816000036155525750676765c793fa10079d601b1b919050565b506b169e43a85eb381aa580000006b1363156bbee3016d700000006b1027e72f1f128130880000006b0cecb8f27f4200f3a00000006b09b18ab5df7180b6b80000006b06765c793fa10079d000000086800204808702919091048087029290920480870293909304808702949094048087029590950495010101010101676765c793fa10079d601b1b0190565b6060826155f4576155ef8261563b565b61368c565b815115801561560b57506001600160a01b0384163b155b1561563457604051639996b31560e01b81526001600160a01b03851660048201526024016115aa565b508061368c565b80511561564b5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b82805482825590600052602060002090810192821561569f579160200282015b8281111561569f578251825591602001919060010190615684565b506151559291506156ec565b6040518060e0016040528060008152602001600081526020016000815260200160001515815260200160008152602001600081526020016000151581525090565b5b8082111561515557600081556001016156ed565b60006020828403121561571357600080fd5b5035919050565b6001600160a01b03811681146110ff57600080fd5b60006020828403121561574157600080fd5b813561368c8161571a565b6000806040838503121561575f57600080fd5b823561576a8161571a565b946020939093013593505050565b6000806040838503121561578b57600080fd5b50508035926020909101359150565b634e487b7160e01b600052604160045260246000fd5b601f8201601f1916810167ffffffffffffffff811182821017156157d6576157d661579a565b6040525050565b600080600080608085870312156157f357600080fd5b84356157fe8161571a565b935060208581013561580f8161571a565b935060408601359250606086013567ffffffffffffffff8082111561583357600080fd5b818801915088601f83011261584757600080fd5b8135818111156158595761585961579a565b6040519150615871601f8201601f19168501836157b0565b808252898482850101111561588557600080fd5b808484018584013760008482840101525080935050505092959194509250565b8051825260208101516020830152604081015160408301526060810151151560608301526080810151608083015260a081015160a083015260c0810151151560c08301525050565b60e0810161123882846158a5565b6000806040838503121561590e57600080fd5b82356008811061576a57600080fd5b60008060006060848603121561593257600080fd5b8335925060208401359150604084013561594b8161571a565b809150509250925092565b600081518084526020808501945080840160005b838110156159905761597d8783516158a5565b60e096909601959082019060010161596a565b509495945050505050565b60208082528251608083830152805160a0840181905260009291820190839060c08601905b808310156159e057835182529284019260019290920191908401906159c0565b508387015160408701526040870151606087015260608701519350601f198682030160808701526153408185615956565b600080600060608486031215615a2657600080fd5b8335615a318161571a565b92506020840135615a418161571a565b929592945050506040919091013590565b60006101008201905060018060a01b0380845116835280602085015116602084015280604085015116604084015250606083015160608301526080830151608083015260a08301516001600160801b0380821660a08501528060c08601511660c0850152505060e0830151611faf60e084018264ffffffffff169052565b600080600060608486031215615ae557600080fd5b8335615af08161571a565b95602085013595506040909401359392505050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561123857611238615b05565b634e487b7160e01b600052603260045260246000fd5b600060018201615b5657615b56615b05565b5060010190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b808202811582820484141761123857611238615b05565b600082615bb557634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111561123857611238615b05565b600060208284031215615bdf57600080fd5b5051919050565b634e487b7160e01b600052602160045260246000fd5b600060033d11156127295760046000803e5060005160e01c90565b600060443d1015615c255790565b6040516003193d81016004833e81513d67ffffffffffffffff8160248401118184111715615c5557505050505090565b8285019150815181811115615c6d5750505050505090565b843d8701016020828501011115615c875750505050505090565b615c96602082860101876157b0565b509095945050505050565b60008060233d1115615cbd576020600460003e50506000516001905b9091565b600060208284031215615cd357600080fd5b815161368c8161571a565b60008060408385031215615cf157600080fd5b505080516020909101519092909150565b6001600160a01b0394909416845260208401929092526001600160801b03166040830152606082015260800190565b60008060008060808587031215615d4757600080fd5b505082516020840151604085015160609095015191969095509092509050565b80518015158114615d7757600080fd5b919050565b600060e08284031215615d8e57600080fd5b60405160e0810181811067ffffffffffffffff82111715615db157615db161579a565b8060405250825181526020830151602082015260408301516040820152615dda60608401615d67565b60608201526080830151608082015260a083015160a0820152615dff60c08401615d67565b60c08201529392505050565b6000825160005b81811015615e2c5760208186018101518583015201615e12565b506000920191825250919050565b600080600060608486031215615e4f57600080fd5b615e5884615d67565b925060208401519150604084015190509250925092565b6001600160a01b03948516815292909316602083015260408201526001600160801b03909116606082015260800190565b600080600060608486031215615eb557600080fd5b8351925060208401519150604084015190509250925092565b60008060008060808587031215615ee457600080fd5b615eed85615d67565b60208601516040870151606090970151919890975090945092505050565b600060208284031215615f1d57600080fd5b61368c82615d6756fea264697066735822122004a483d6cde9880a2e0d08c71aef252e87954885213c8d3cf9b752dc7654fcb864736f6c63430008140033",
2757
- "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106104965760003560e01c80638aabb2d111610262578063c4f8911c11610151578063e91a7ca6116100ce578063f2fde38b11610092578063f2fde38b14610ddd578063f5b3b9e714610df0578063f8d8989814610e03578063f91c3b0d14610e16578063fbf4a61214610e29578063fbfa77cf14610e3857600080fd5b8063e91a7ca614610c84578063e9f2838e14610c97578063ec915ee614610ca4578063ef5bac2514610d05578063f1caf09f14610dca57600080fd5b8063d5db7d5d11610115578063d5db7d5d14610c25578063d81a698614610c38578063d8aed14514610c4b578063e5711e8b14610c5e578063e65896c914610c7157600080fd5b8063c4f8911c14610b1f578063c6d6916c14610b32578063c891091314610b45578063cd3293de14610b68578063d17e988314610c1257600080fd5b8063a8de4834116101df578063b88a802f116101a3578063b88a802f14610a4d578063bf4eccdf14610a55578063bfd91c2314610a68578063c1be667714610a88578063c415b95c14610b0c57600080fd5b8063a8de4834146109e5578063a90d728f146109f8578063a9bf805c14610a00578063ac919fd414610a13578063b6b55f2514610a3a57600080fd5b806397c4fac71161022657806397c4fac71461099057806398d721e0146109995780639daa54b4146109ac578063a42dce80146109bf578063a5b350c9146109d257600080fd5b80638aabb2d1146109205780638aee8127146109335780638bc2ff5b146109465780638da5cb5b1461096c578063929761791461097d57600080fd5b80632a5bf6d2116103895780635c975abb11610306578063768bab45116102ca578063768bab451461088e5780637bc7780b146108a157806383ba103f146108a95780638429d51f146108bc5780638456cb5914610907578063883c6b241461090f57600080fd5b80635c975abb146108155780636061ffc3146108205780636817031b14610860578063715018a61461087357806375417da61461087b57600080fd5b80633f4ba83a1161034d5780633f4ba83a1461073e5780634031234c1461074657806340c65f721461074f5780634df9d6ba14610762578063523a19ac1461077557600080fd5b80632a5bf6d21461067e5780632ab414fc146106915780632e1a7d4d146106a45780633adbb5af146106b75780633e20bf141461071a57600080fd5b8063150b7a02116104175780631d00ac3a116103db5780631d00ac3a146106285780631d4bf4a0146106485780631d8557d7146106505780632630c12f1461065857806327156a681461066b57600080fd5b8063150b7a02146105c457806316a6c4c5146105f057806316c621e0146105f95780631705ffad1461060c57806319c2d37e1461061557600080fd5b80630c34b9141161045e5780630c34b914146105195780630c42dcaf146105825780630c679a7b1461058b5780630d4085121461059e5780630ecbcdab146105b157600080fd5b8063023245d71461049b578063048c661d146104b0578063057e9b7b146104e057806309bf1e73146104f75780630ab30d8a14610501575b600080fd5b6104ae6104a9366004615701565b610e4b565b005b601e546104c3906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6104e960275481565b6040519081526020016104d7565b6104e96203f48081565b600854600160801b90046001600160801b03166104e9565b610521611102565b6040516104d79190600061010082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015160e083015292915050565b6104e9611f4081565b6104ae61059936600461572f565b611198565b6104e96105ac36600461574c565b6111c2565b6104ae6105bf366004615778565b61123e565b6105d76105d23660046157dd565b611288565b6040516001600160e01b031990911681526020016104d7565b6104e960285481565b6104ae610607366004615701565b611299565b6104e9602b5481565b6104e961062336600461574c565b61134a565b61063b61063636600461574c565b6113c3565b6040516104d791906158ed565b6021546104e9565b6104ae611499565b6019546104c3906001600160a01b031681565b6104e961067936600461572f565b6114a7565b6104e961068c36600461572f565b6114cc565b6104ae61069f3660046158fb565b61153b565b6104ae6106b2366004615701565b611a41565b6106ca6106c536600461574c565b611b18565b6040516104d79190600060c08201905082518252602083015115156020830152604083015160408301526060830151606083015260808301511515608083015260a083015160a083015292915050565b601e5461072e90600160a01b900460ff1681565b60405190151581526020016104d7565b6104ae611bcd565b6104e960265481565b601c546104c3906001600160a01b031681565b6104e961077036600461572f565b611bdd565b61080061078336600461574c565b6001600160a01b0391909116600090815260126020908152604080832093835292815290829020825160c0810184528154808252600183015460ff90811615159483019490945260028301549482019490945260038201546060820181905260048301549093161515608082015260059091015460a09091015291565b604080519283526020830191909152016104d7565b60025460ff1661072e565b60145460155460165461083b926001600160a01b0316919083565b604080516001600160a01b0390941684526020840192909252908201526060016104d7565b6104ae61086e36600461572f565b611c7f565b6104ae611f1d565b6104e961088936600461572f565b611f2f565b6104ae61089c36600461574c565b611fb6565b600c546104e9565b6104e96108b736600461574c565b6120a0565b6020546021546022546023546024546025546108da95949392919086565b604080519687526020870195909552938501929092526060840152608083015260a082015260c0016104d7565b6104ae6120d4565b6008546001600160801b03166104e9565b6104ae61092e366004615701565b6120e4565b6104ae61094136600461572f565b61226e565b7f00000000000000000000000000000000000000000000000000000000000000006104c3565b6000546001600160a01b03166104c3565b6104e961098b366004615701565b6122c2565b6104e960295481565b6104ae6109a736600461572f565b612358565b6104e96109ba36600461572f565b612408565b6104ae6109cd36600461572f565b61248b565b6104e96109e036600461574c565b61250c565b6104ae6109f336600461591d565b6125b5565b6104e9612652565b601a546104c3906001600160a01b031681565b6104c37f000000000000000000000000000000000000000000000000000000000000000081565b6104ae610a48366004615701565b61272c565b61072e61282e565b6104ae610a6336600461574c565b61284d565b610a7b610a7636600461572f565b612bb0565b6040516104d7919061599b565b610add610a9636600461574c565b6012602090815260009283526040808420909152908252902080546001820154600283015460038401546004850154600590950154939460ff938416949293919291169086565b6040805196875294151560208701529385019290925260608401521515608083015260a082015260c0016104d7565b601f546104c3906001600160a01b031681565b6104ae610b2d366004615701565b612e24565b6104ae610b4036600461572f565b612e5b565b6104e9610b5336600461572f565b60136020526000908152604090206001015481565b600354600454600554600654600754600854600954610bb4966001600160a01b0390811696811695169392916001600160801b0380821692600160801b909204169064ffffffffff1688565b604080516001600160a01b03998a16815297891660208901529590971694860194909452606085019290925260808401526001600160801b0390811660a08401521660c082015264ffffffffff90911660e0820152610100016104d7565b6104e9610c2036600461572f565b612f63565b601b546104c3906001600160a01b031681565b6104ae610c46366004615778565b61302d565b6104ae610c59366004615778565b61321b565b6104ae610c6c366004615a11565b613258565b6104e9610c7f36600461572f565b6132c9565b6104ae610c92366004615701565b613346565b602c5461072e9060ff1681565b600a54600b54600c54600d54600e54600f54601054601154610cca979695949392919088565b604080519889526020890197909752958701949094526060860192909252608085015260a084015260c083015260e0820152610100016104d7565b610dbd6040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101919091525060408051610100810182526003546001600160a01b039081168252600454811660208301526005541691810191909152600654606082015260075460808201526008546001600160801b0380821660a0840152600160801b9091041660c082015260095464ffffffffff1660e082015290565b6040516104d79190615a52565b6104c3610dd8366004615701565b613565565b6104ae610deb36600461572f565b613626565b6104e9610dfe366004615ad0565b613661565b601d546104c3906001600160a01b031681565b6104ae610e2436600461574c565b613693565b6104e9670de0b6b3a764000081565b602a546104c3906001600160a01b031681565b610e536137c8565b610e5b6137f2565b3360009081526012602090815260408083208484529091529020600181015460ff1615610e9b576040516367c11db560e01b815260040160405180910390fd5b336000908152601360209081526040808320858452600281019092529091205460ff16610edb5760405163346fad7360e01b815260040160405180910390fd5b610ee76003600a613816565b6000610ef3338561134a565b90508015610f14576040516302c9375f60e21b815260040160405180910390fd5b60008481526002830160209081526040808320805460ff19169055602d909152812080546001600160a01b03191690558254610f5290600190615b1b565b67ffffffffffffffff811115610f6a57610f6a61579a565b604051908082528060200260200182016040528015610f93578160200160208202803683370190505b5090506000805b84548110156110265786856000018281548110610fb957610fb9615b2e565b90600052602060002001541461101457846000018181548110610fde57610fde615b2e565b9060005260206000200154838381518110610ffb57610ffb615b2e565b60209081029190910101528161101081615b44565b9250505b8061101e81615b44565b915050610f9a565b5081516110399085906020850190615664565b50604051632142170760e11b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906342842e0e9061108a90309033908b90600401615b5d565b600060405180830381600087803b1580156110a457600080fd5b505af11580156110b8573d6000803e3d6000fd5b50506040518881523392507f2aa1b4c95f3b2da9c955947fca584743ea0d457708fadf209c093061e98c4ccb915060200160405180910390a250505050506110ff60018055565b50565b61114a60405180610100016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b506040805161010081018252600a548152600b546020820152600c5491810191909152600d546060820152600e546080820152600f5460a082015260105460c082015260115460e082015290565b6111a0613820565b601a80546001600160a01b0319166001600160a01b0392909216919091179055565b6000806111ce836122c2565b905060006111dc858561250c565b905060018110156111fc57676765c793fa10079d601b1b92505050611238565b60006112136026548461384d90919063ffffffff16565b90508161122882670de0b6b3a7640000615b81565b6112329190615b98565b93505050505b92915050565b6112466137c8565b61124e6137f2565b80806000036112705760405163162908e360e11b815260040160405180910390fd5b61127a8383613873565b5061128460018055565b5050565b630a85bd0160e11b5b949350505050565b6112a16137c8565b6014546001600160a01b03166112ca57604051632506892760e01b815260040160405180910390fd5b806000036112eb5760405163162908e360e11b815260040160405180910390fd5b601454611303906001600160a01b0316333084613ab4565b61130c81613b14565b60405181815233907fe79ffd9a88f13c8c49fb545410401d9877ab90d9dcf7b15d4dc0601993a0d9139060200160405180910390a26110ff60018055565b6001600160a01b0382166000908152601260209081526040808320848452825291829020825160c0810184528154808252600183015460ff908116151594830194909452600283015494820194909452600382015460608201526004820154909216151560808301526005015460a09091015292915050565b6113cb6156ab565b6113d36156ab565b6001600160a01b0384166000908152601260209081526040808320868452825291829020825160c0808201855282548252600183015460ff90811615159483018590526002840154958301958652600384015460608085019190915260048501549091161515608080850191825260059095015460a085015290870194909452935191850191909152805184529051151591830191909152611475858561250c565b602083015261148485856111c2565b60408301526060015160a08201529392505050565b6114a56003600a613816565b565b6000806114b3836114cc565b905060006114c084612f63565b90506112918183615bba565b600354604051630481930d60e21b81526001600160a01b03838116600483015260009216906312064c3490602401602060405180830381865afa158015611517573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112389190615bcd565b611543613820565b600082600781111561155757611557615be6565b03611602576127108111156115b35760405162461bcd60e51b815260206004820152601d60248201527f496e76616c6964206c69717569646174696f6e207468726573686f6c6400000060448201526064015b60405180910390fd5b60268190556027546028546040805184815260208101939093528201527fafabe1c7d6c2e86cbfc67a8ba53d25a7f8ef59b97d972dd4bf7d7525ba7fdddf906060015b60405180910390a15050565b600182600781111561161657611616615be6565b0361166157602781905560265460285460408051928352602083018490528201527fafabe1c7d6c2e86cbfc67a8ba53d25a7f8ef59b97d972dd4bf7d7525ba7fdddf906060016115f6565b600282600781111561167557611675615be6565b0361171c57620151808110158015611690575062093a808111155b6116d35760405162461bcd60e51b8152602060048201526014602482015273125b9d985b1a590819dc9858d9481c195c9a5bd960621b60448201526064016115aa565b602881905560265460275460408051928352602083019190915281018290527fafabe1c7d6c2e86cbfc67a8ba53d25a7f8ef59b97d972dd4bf7d7525ba7fdddf906060016115f6565b600382600781111561173057611730615be6565b036117ce576127108111156117875760405162461bcd60e51b815260206004820152601860248201527f526174696f2063616e6e6f74206578636565642031303025000000000000000060448201526064016115aa565b602b80549082905560408051828152602081018490527fab45a8374e3d1f623df0e88a957317731ccc02ed377e5b0213661f85bf60b73191015b60405180910390a1505050565b60048260078111156117e2576117e2615be6565b036118785760018111156118305760405162461bcd60e51b8152602060048201526015602482015274496e76616c696420626f6f6c65616e2076616c756560581b60448201526064016115aa565b602c805460ff19166001831490811790915560405160ff909116151581527f0565da69314136ea081c6239b9813f6ef6d213f57210dfef1d470af55b0235f3906020016115f6565b600582600781111561188c5761188c615be6565b036119305760018111156118da5760405162461bcd60e51b8152602060048201526015602482015274496e76616c696420626f6f6c65616e2076616c756560581b60448201526064016115aa565b601e8054600160a01b60018414810260ff60a01b199092169190911791829055604051910460ff16151581527f932a526fd95bf1b5aab775a957e284733f02db3a9824802cbcbb4fbca239cbe1906020016115f6565b600682600781111561194457611944615be6565b036119d1576127108111156119935760405162461bcd60e51b8152602060048201526015602482015274496e76616c696420696e737572616e63652066656560581b60448201526064016115aa565b602980549082905560408051828152602081018490527f87c461d1c2c7c5cd98495e5517aa11d9df56d0819cc4e8e53d9664c4b18f6db191016117c1565b60078260078111156119e5576119e5615be6565b03611a2857601180549082905560408051828152602081018490527f1d830358c94d390366ad7162b72e731448e195f3576e63b1f57f5e43c719c5aa91016117c1565b604051630309cb8760e51b815260040160405180910390fd5b611a496137c8565b611a516137f2565b8080600003611a735760405163162908e360e11b815260040160405180910390fd5b602c5460ff1615611a97576040516370a7336d60e11b815260040160405180910390fd5b611aa033613b97565b611aac6003600a613816565b611ab582613c3e565b6000806000611ac86003600a8733613f67565b925092509250611ad661408f565b60405183815233907f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243649060200160405180910390a2505050506110ff60018055565b611b556040518060c00160405280600081526020016000151581526020016000815260200160008152602001600015158152602001600081525090565b506001600160a01b0382166000908152601260209081526040808320848452825291829020825160c08101845281548152600182015460ff908116151593820193909352600282015493810193909352600381015460608401526004810154909116151560808301526005015460a082015292915050565b611bd5613820565b6114a5614245565b6014546000906001600160a01b0316611bf857506000919050565b6000611c03836114a7565b905080600003611c165750600092915050565b6001600160a01b038316600090815260176020526040812054601554670de0b6b3a764000091611c4591615b1b565b611c4f9084615b81565b611c599190615b98565b6001600160a01b0385166000908152601860205260409020549091506112919082615bba565b611c87613820565b602a546001600160a01b03828116911614801590611caf5750602a546001600160a01b031615155b15611e1357602a5460405163ce96cb7760e01b81523060048201526001600160a01b039091169063ce96cb7790602401602060405180830381865afa925050508015611d18575060408051601f3d908101601f19168201909252611d1591810190615bcd565b60015b611e0857611d24615bfc565b806308c379a003611d815750611d38615c17565b80611d435750611d9a565b602a546040516001600160a01b03909116907fc4cede9b2b63ba72d39d2f630b4b742e1cada59d7a073ac4e10da9ac7b2eb10590600090a250611e13565b634e487b7103611d9a57611d93615ca1565b90611d4357505b3d808015611dc4576040519150601f19603f3d011682016040523d82523d6000602084013e611dc9565b606091505b50602a546040516001600160a01b03909116907fc4cede9b2b63ba72d39d2f630b4b742e1cada59d7a073ac4e10da9ac7b2eb10590600090a250611e13565b611e1181614297565b505b602a80546001600160a01b031981166001600160a01b0384811691821790935560048054604080516338d52e0f60e01b815290519486169591909116936338d52e0f928281019260209291908290030181865afa158015611e78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e9c9190615cc1565b6001600160a01b031614158015611ebb57506001600160a01b03821615155b15611ed957604051631b3b488360e11b815260040160405180910390fd5b816001600160a01b0316816001600160a01b03167f483bdedaaf23706a9800ac1af0d852b34927780d79f9d6ba60a80c7cad75ea3960405160405180910390a35050565b611f25613820565b6114a56000614456565b600080805b6001600160a01b0384166000908152601360205260409020548111611faf576001600160a01b038416600090815260136020908152604080832084845260020190915290205460ff1615611f9d576000611f8d826122c2565b9050611f998184615bba565b9250505b80611fa781615b44565b915050611f34565b5092915050565b611fbe613820565b611fca6003600a613816565b6001600160a01b0382166120365760405162461bcd60e51b815260206004820152602d60248201527f4c656e64696e67506f6f6c3a20526563697069656e742063616e6e6f7420626560448201526c207a65726f206164647265737360981b60648201526084016115aa565b60035460405163768bab4560e01b81526001600160a01b038481166004830152602482018490529091169063768bab4590604401600060405180830381600087803b15801561208457600080fd5b505af1158015612098573d6000803e3d6000fd5b505050505050565b6001600160a01b03821660009081526012602090815260408083208484529091528120600581015481546112919190615b1b565b6120dc613820565b6114a56144a6565b6120ec6137c8565b6120f46137f2565b3360008181526012602090815260408083208584529091529020600181015460ff166121335760405163013e5dc360e61b815260040160405180910390fd5b6001600160a01b038216600090815260136020908152604080832086845260020190915290205460ff1661217a5760405163346fad7360e01b815260040160405180910390fd5b602854816002015461218c9190615bba565b4211156121ac57604051634b3c322760e11b815260040160405180910390fd5b600481015460ff166121d157604051632d1118e960e21b815260040160405180910390fd5b6121dd6003600a613816565b60006121e9838561250c565b9050801561220a576040516312bf4cab60e01b815260040160405180910390fd5b60018201805460ff1990811690915560006002840181905560048401805490921690915560405185916001600160a01b038616917fd66fca94ddede030b58f223f22d6b43407a443bd68e2e73d38ab7675cf480acc9190a35050506110ff60018055565b612276613820565b6014546001600160a01b0316156122a05760405163b6de9a7160e01b815260040160405180910390fd5b601480546001600160a01b0319166001600160a01b0392909216919091179055565b60195460405163b94fe91760e01b815260048101839052600091829182916001600160a01b03169063b94fe917906024016040805180830381865afa15801561230f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123339190615cde565b9150915081600003611faf57604051633b0c4c3160e11b815260040160405180910390fd5b612360613820565b6001600160a01b038116612387576040516303988b8160e61b815260040160405180910390fd5b601e546001600160a01b03908116908216036123b65760405163aba916dd60e01b815260040160405180910390fd5b601e80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f593eaf5e0e1afc1c041a664a437fdae719a628836785d06572b008e6ca5c189d90600090a35050565b600080805b6001600160a01b038416600090815260136020526040902054811015611faf576001600160a01b0384166000908152601360205260409020805461246d9186918490811061245d5761245d615b2e565b906000526020600020015461250c565b6124779083615bba565b91508061248381615b44565b91505061240d565b612493613820565b6001600160a01b0381166124ba576040516303988b8160e61b815260040160405180910390fd5b601f80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f5d16ad41baeb009cd23eb8f6c7cde5c2e0cd5acf4a33926ab488875c37c37f3890600090a35050565b6001600160a01b03821660009081526012602090815260408083208484528252808320815160c08101835281548152600182015460ff9081161515948201949094526002820154928101929092526003810154606083018190526004820154909316151560808301526005015460a082015260085490916125a9916125a19190600160801b90046001600160801b0316615b1b565b8251906144e3565b81516112919190615bba565b6125bd6137c8565b6125c56137f2565b81806000036125e75760405163162908e360e11b815260040160405180910390fd5b601e54600160a01b900460ff16612611576040516312cefcd560e31b815260040160405180910390fd5b6001600160a01b038216612638576040516303988b8160e61b815260040160405180910390fd5b612643848484614526565b5061264d60018055565b505050565b601f546000906001600160a01b0316331461267f576040516282b42960e81b815260040160405180910390fd5b602a546001600160a01b03166126c65760405162461bcd60e51b815260206004820152600c60248201526b139bc81d985d5b1d081cd95d60a21b60448201526064016115aa565b60045460218054426022556000909155601f546001600160a01b03928316926126f29184911683614824565b6040518181527f7edfb0d5d58c6a3d398df94a9bdfa2b33f3fa42ae40d72ebdc717d2db3953ee59060200160405180910390a19150505b90565b6127346137c8565b61273c6137f2565b808060000361275e5760405163162908e360e11b815260040160405180910390fd5b61276733613b97565b6127736003600a613816565b60006127836003600a8533614855565b33600090815260136020526040812060010154919250036127b8573360009081526013602052604090206001018390556127e0565b33600090815260136020526040812060010180548592906127da908490615bba565b90915550505b6127e861408f565b604080518481526020810183905233917f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a15910160405180910390a250506110ff60018055565b60006128386137c8565b61284133613b97565b50600161272960018055565b6128556137c8565b601e546001600160a01b0316331461287f576040516282b42960e81b815260040160405180910390fd5b6001600160a01b03821660009081526012602090815260408083208484529091529020600181015460ff166128c75760405163013e5dc360e61b815260040160405180910390fd5b6001600160a01b038316600090815260136020908152604080832085845260020190915290205460ff1661290e5760405163346fad7360e01b815260040160405180910390fd5b61291a6003600a613816565b600481015460ff16801561293f5750602854816002015461293b9190615bba565b4211155b1561295d576040516363e5f12d60e11b815260040160405180910390fd5b6000612969848461250c565b60018301805460ff199081169091556000600280860182905560048087018054851690556001600160a01b03808a1684526013602090815260408086208b87529094019052928290208054909416909355601e5490516323b872dd60e01b81529394507f00000000000000000000000000000000000000000000000000000000000000008216936323b872dd93612a069330931691899101615b5d565b600060405180830381600087803b158015612a2057600080fd5b505af1158015612a34573d6000803e3d6000fd5b5050506000848152602d602052604080822080546001600160a01b03191690556005546008549151636f3df85160e11b81529293508392839283926001600160a01b03169163de7bf0a291612aa3918c918a91600160801b9091046001600160801b0316908d90600401615d02565b6080604051808303816000875af1158015612ac2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ae69190615d31565b600854600160801b90046001600160801b031660038b810191909155546004549498509296509094509250612b2a916001600160a01b039081169133911687613ab4565b6000808755600587018190556007849055612b4c90600390600a908790614999565b601e5487906001600160a01b03808b1691167f3f2ad1b98f8838e6f90c126ac5f8a9875c7acf2a56aeb8a630c0fa475b07056a88612b89856122c2565b6040805192835260208301919091520160405180910390a450505050505061128460018055565b612bdb6040518060800160405280606081526020016000815260200160008152602001606081525090565b6001600160a01b0382166000908152601360209081526040808320815160808101835260608082529381018590529182019390935281810191909152815460408051602080840282018101909252828152918491830182828015612c5e57602002820191906000526020600020905b815481526020019060010190808311612c4a575b5050509183525050815467ffffffffffffffff811115612c8057612c8061579a565b604051908082528060200260200182016040528015612cb957816020015b612ca66156ab565b815260200190600190039081612c9e5790505b506060820152600060208201819052604082018190525b8254811015612e1c57306001600160a01b0316631d00ac3a86856000018481548110612cfe57612cfe615b2e565b6000918252602090912001546040516001600160e01b031960e085901b1681526001600160a01b039092166004830152602482015260440160e060405180830381865afa158015612d53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d779190615d7c565b82606001518281518110612d8d57612d8d615b2e565b602002602001018190525081606001518181518110612dae57612dae615b2e565b60200260200101516020015182602001818151612dcb9190615bba565b9052508254612df690849083908110612de657612de6615b2e565b90600052602060002001546122c2565b82604001818151612e079190615bba565b90525080612e1481615b44565b915050612cd0565b509392505050565b601a546001600160a01b03163314612e4e576040516282b42960e81b815260040160405180910390fd5b6110ff6003600a83614aeb565b6003546001600160a01b03163314612eb55760405162461bcd60e51b815260206004820152601e60248201527f4f6e6c792052546f6b656e2063616e207570646174652072657761726473000060448201526064016115aa565b6000612ec0826114a7565b90508015612f43576001600160a01b038216600090815260176020526040812054601554670de0b6b3a764000091612ef791615b1b565b612f019084615b81565b612f0b9190615b98565b90508015612f41576001600160a01b03831660009081526018602052604081208054839290612f3b908490615bba565b90915550505b505b506015546001600160a01b03909116600090815260176020526040902055565b601e546000906001600160a01b0316612f7e57506000919050565b601e546040516001600160a01b038481166024830152600092839291169060440160408051601f198184030181529181526020820180516001600160e01b031663c084b10b60e01b17905251612fd49190615e0b565b600060405180830381855afa9150503d806000811461300f576040519150601f19603f3d011682016040523d82523d6000602084013e613014565b606091505b5091509150808060200190518101906112919190615bcd565b6130356137c8565b61303d6137f2565b33600081815260126020908152604080832086845290915281209161306290856120a0565b90506000613071338686613661565b601b54601f54604051636eb1769f60e11b81523360048201526001600160a01b039182166024820152929350839291169063dd62ed3e90604401602060405180830381865afa1580156130c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130ec9190615bcd565b101561310b576040516339e067d560e21b815260040160405180910390fd5b601b546040516370a0823160e01b815233600482015282916001600160a01b0316906370a0823190602401602060405180830381865afa158015613153573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131779190615bcd565b101561319657604051631e9acf1760e31b815260040160405180910390fd5b6131a08585613873565b6131a981614bc4565b60048301805460ff191660011790556131c28483615bba565b8360050160008282546131d59190615bba565b909155505060405182815285907fd5c2dc3f0ec76ece0185d374bca424347955bce9b5e7b08757bb8e1bb8d9c0a99060200160405180910390a250505061128460018055565b6132236137c8565b61322b6137f2565b808060000361324d5760405163162908e360e11b815260040160405180910390fd5b61127a838333614526565b613260613820565b6003546001600160a01b03908116908416036132b55760405162461bcd60e51b815260206004820152601460248201527321b0b73737ba103932b9b1bab290292a37b5b2b760611b60448201526064016115aa565b61264d6001600160a01b0384168383614824565b600080805b6001600160a01b038416600090815260136020526040902054811015611faf576001600160a01b038416600090815260136020908152604080832084845260020190915290205460ff161561333457613327848261250c565b6133319083615bba565b91505b8061333e81615b44565b9150506132ce565b61334e6137c8565b6133566137f2565b6133626003600a613816565b6040516331a9108f60e11b81526004810182905233906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa1580156133c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133ed9190615cc1565b6001600160a01b031614613414576040516384b359d160e01b815260040160405180910390fd5b336000908152601360209081526040808320848452600281019092529091205460ff16156134555760405163e8edca8360e01b815260040160405180910390fd5b60008281526002820160209081526040808320805460ff191660019081179091558454908101855584845282842001859055848352602d9091529081902080546001600160a01b031916339081179091559051632142170760e11b81527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316916342842e0e916134f4919030908790600401615b5d565b600060405180830381600087803b15801561350e57600080fd5b505af1158015613522573d6000803e3d6000fd5b50506040518481523392507f1c4b8380f61aea3d5d98cbadaf2e6b2e4f3d8ca8c0fce1290b26ac267158745f915060200160405180910390a2506110ff60018055565b6000818152602d60205260408120546001600160a01b031661360a576040516331a9108f60e11b8152600481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa1580156135e6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112389190615cc1565b506000908152602d60205260409020546001600160a01b031690565b61362e613820565b6001600160a01b03811661365857604051631e4fbdf760e01b8152600060048201526024016115aa565b6110ff81614456565b60008061366e85856120a0565b905061368860295484836136829190615bba565b9061384d565b9150505b9392505050565b61369b6137c8565b6136a36137f2565b6001600160a01b03821660009081526012602090815260408083208484529091529020600181015460ff16156136ec5760405163b84f7eb560e01b815260040160405180910390fd5b6001600160a01b038316600090815260136020908152604080832085845260020190915290205460ff166137335760405163346fad7360e01b815260040160405180910390fd5b61373f6003600a613816565b600061374b84846111c2565b9050602754811061376f5760405163317416e560e11b815260040160405180910390fd5b6001828101805460ff1916909117905542600283015560405183906001600160a01b0386169033907f4601ff28b457321206747d0540f02cfb8a9d6bf3021146378e8544e1817e20e790600090a4505061128460018055565b6002600154036137eb57604051633ee5aeb560e01b815260040160405180910390fd5b6002600155565b60025460ff16156114a55760405163d93c066560e01b815260040160405180910390fd5b6112848282614cb7565b6000546001600160a01b031633146114a55760405163118cdaa760e01b81523360048201526024016115aa565b60008115611388198390048411151761386557600080fd5b506127109102611388010490565b3360009081526012602090815260408083208584529091529020600181015460ff16156138b357604051630bff073160e31b815260040160405180910390fd5b336000908152601360209081526040808320868452600281019092529091205460ff166138f35760405163346fad7360e01b815260040160405180910390fd5b6138fd8484614de9565b6139096003600a613816565b61391283613c3e565b600554600854600384015460405163f05fb60960e01b81523360048201819052602482015260448101879052600160801b9092046001600160801b03166064830152608482015260a48101869052600091829182916001600160a01b03169063f05fb6099060c4016060604051808303816000875af1158015613999573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139bd9190615e3a565b600854600160801b90046001600160801b031660038981019190915554604051635c921eb960e01b8152336004820152602481018b905293965091945092506001600160a01b031690635c921eb990604401600060405180830381600087803b158015613a2957600080fd5b505af1158015613a3d573d6000803e3d6000fd5b5050505081856000016000828254613a559190615bba565b90915550506007819055613a6e6003600a600089614999565b613a7661408f565b60405186815233907fcbc04eca7e9da35cb1393a6135a199ca52e450d5e9251cbd99f7847d33a367509060200160405180910390a250505050505050565b613b0e84856001600160a01b03166323b872dd868686604051602401613adc93929190615b5d565b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050614e65565b50505050565b6014546001600160a01b0316613b3d57604051632506892760e01b815260040160405180910390fd5b6006546000819003613b4d575050565b811561128457600081613b6884670de0b6b3a7640000615b81565b613b729190615b98565b90508060146001016000828254613b899190615bba565b909155505042601655505050565b6014546001600160a01b0316613baa5750565b6000613bb582611bdd565b90508015611284576001600160a01b038083166000908152601860209081526040808320839055601554601790925290912055601454613bf791168383614824565b816001600160a01b03167fe34918ff1c7084970068b53fd71ad6d8b04e9f15d3886cbf006443e6cdc52ea682604051613c3291815260200190565b60405180910390a25050565b602a546001600160a01b0316613c515750565b600480546003546040516370a0823160e01b81526001600160a01b03918216938101939093526000929116906370a0823190602401602060405180830381865afa158015613ca3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cc79190615bcd565b905081811015611284576000613cdd8284615b1b565b602a5460405163ce96cb7760e01b81523060048201529192506000916001600160a01b039091169063ce96cb7790602401602060405180830381865afa158015613d2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d4f9190615bcd565b90506000613d5d8285615bba565b905082811015613dc65760405162461bcd60e51b815260206004820152602e60248201527f4e6f7420656e6f756768206c697175696469747920746f2066756c66696c6c2060448201526d1d1a19481dda5d1a191c985dd85b60921b60648201526084016115aa565b6006546000613dd58783615b1b565b905060008115613df057602b54613ded90839061384d565b90505b8585811115613dfc5750845b8015613e0b57613e0b81614297565b600480546040516370a0823160e01b815230928101929092526001600160a01b0316906370a0823190602401602060405180830381865afa158015613e54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e789190615bcd565b600480546003546040516370a0823160e01b81526001600160a01b039182169381019390935216906370a0823190602401602060405180830381865afa158015613ec6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613eea9190615bcd565b613ef49190615bba565b975088881015613f5c5760405162461bcd60e51b815260206004820152602d60248201527f496e73756666696369656e74206c69717569646974792061667465722076617560448201526c1b1d081dda5d1a191c985dd85b609a1b60648201526084016115aa565b505050505050505050565b60008060006001851015613f8e5760405163162908e360e11b815260040160405180910390fd5b613f988787614cb7565b86546005880154604051636b81068560e11b8152600092839283926001600160a01b039092169163d7020d0a91613fe1918b9182918e916001600160801b031690600401615e6f565b6060604051808303816000875af1158015614000573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140249190615ea0565b92509250925082955061403a8a8a600084614999565b60408051828152602081018590526001600160a01b038916917ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b568910160405180910390a2999198508997509095505050505050565b602a546001600160a01b03166140a157565b600654602b546000906140b590839061384d565b600480546003546040516370a0823160e01b81526001600160a01b039182169381019390935292935060009216906370a0823190602401602060405180830381865afa158015614109573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061412d9190615bcd565b9050818111156141545760006141438383615b1b565b905061414e81614ec8565b5061420b565b8181101561420b5760006141688284615b1b565b90506000602a60009054906101000a90046001600160a01b03166001600160a01b03166301e1d1146040518163ffffffff1660e01b8152600401602060405180830381865afa1580156141bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141e39190615bcd565b905060008183116141f457826141f6565b815b905080156142075761420781614297565b5050505b6020805460408051848152928301919091527f8f9497c27f572ff1a65e8b2c7a0706d466466ae0b5efc78462b5f0021da6695691016117c1565b61424d6150fe565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b602a546040516328c0620360e01b8152600160048201526000916001600160a01b0316906328c0620390602401602060405180830381865afa1580156142e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143059190615bcd565b602a54604051632d182be560e21b815260048101859052306024820181905260448201529192506000916001600160a01b039091169063b460af94906064016020604051808303816000875af1158015614363573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143879190615bcd565b905060006020600301548311156143ea576023546000906143a89085615b1b565b9050670de0b6b3a76400006143bd8285615b81565b6143c79190615b98565b915081602060010160008282546143de9190615bba565b909155506143ee915050565b5060005b60006143fa8286615b1b565b60035460045491925061441a916001600160a01b03908116911683614824565b60205485111561442e576000602055614449565b84602060000160008282546144439190615b1b565b90915550505b5050506023555042602455565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6144ae6137f2565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861427a3390565b600081156b019d971e4fe8401e74000000198390048411151761450557600080fd5b50676765c793fa10079d601b1b91026b019d971e4fe8401e74000000010490565b816000036145475760405163162908e360e11b815260040160405180910390fd5b6001600160a01b03811661456e576040516303988b8160e61b815260040160405180910390fd5b6001600160a01b0381166000908152601360209081526040808320868452600281019092529091205460ff166145b75760405163346fad7360e01b815260040160405180910390fd5b6145c36003600a613816565b6001600160a01b03821660009081526012602090815260408083208784529091529020600181015460ff1680156145ff5750600481015460ff16155b1561461d5760405163224aae4f60e21b815260040160405180910390fd5b600181015460ff1680156146415750602854816002015461463e9190615bba565b42115b1561465f57604051634b3c322760e11b815260040160405180910390fd5b600061466b848761250c565b9050600081861161467c578561467e565b815b9050600080600080600360020160009054906101000a90046001600160a01b03166001600160a01b031663de7bf0a28a87600360050160109054906101000a90046001600160801b03168f6040518563ffffffff1660e01b81526004016146e89493929190615d02565b6080604051808303816000875af1158015614707573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061472b9190615d31565b600854600160801b90046001600160801b031660038c81019190915554600454949850929650909450925061476f916001600160a01b039081169133911688613ab4565b60078390558015614794578087600001600082825461478e9190615bba565b90915550505b86546147a1908390615b1b565b808855600588015411156147b757865460058801555b86546000036147c857600060058801555b6147d76003600a876000614999565b6040518581526001600160a01b038a169033907f05f2eeda0e08e4b437f487c8d7d29b14537d15e3488170dc3de5dbdf8dac46849060200160405180910390a35050505050505050505050565b6040516001600160a01b0383811660248301526044820183905261264d91859182169063a9059cbb90606401613adc565b600060018310156148795760405163162908e360e11b815260040160405180910390fd5b6148838585614cb7565b845460018601546148a3916001600160a01b039182169133911686613ab4565b8454600586015460405163b3f1c93d60e01b81526000928392839283926001600160a01b03169163b3f1c93d916148ee9130918b918d916001600160801b0390911690600401615e6f565b6080604051808303816000875af115801561490d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906149319190615ece565b93509350935093508294506149498989896000614999565b60408051888152602081018790526001600160a01b038816917f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a15910160405180910390a250505050949350505050565b81156149c6576149a882615121565b6001600160801b031684600301546149c09190615bba565b60038501555b8015614a185780846003015410156149f15760405163bb55fd2760e01b815260040160405180910390fd5b6149fa81615121565b6001600160801b03168460030154614a129190615b1b565b60038501555b600384015460048501546000614a2e8787615159565b90506000614a3c88886151ba565b90506000614a5289600301548a60040154615215565b9050614a76886002015489600301548a600401548b600501548c6006015486615261565b600189018190556007890154614a8e9183918761534b565b8855614a9a8989614cb7565b875460018901546040517f48f4f83c2f1843e8fd7ef13ffcff40fca5055dc1b9b074cd9dd0f9a8a8e09dd992614ad892908252602082015260400190565b60405180910390a1505050505050505050565b6001811015614b0d5760405163824c180760e01b815260040160405180910390fd5b60028201548015614b70576000614b26826101f461384d565b90506000828411614b4057614b3b8484615b1b565b614b4a565b614b4a8385615b1b565b905081811115614b6d57604051631a8b543360e21b815260040160405180910390fd5b50505b60028301829055614b848484600080614999565b60408051828152602081018490527fd45d1eb66419c036e2fa401916c7db417696f889cf4ab8ca92272327e8e1c83e91015b60405180910390a150505050565b601f546001600160a01b0316614bed576040516303988b8160e61b815260040160405180910390fd5b80600003614c0e5760405163162908e360e11b815260040160405180910390fd5b601f5460048054604051636033e31560e01b81526001600160a01b0391821692810192909252336024830152604482018490527f65991ea5d80f7b6dc8c32648f59c5a653beb10caddae8fefad6966b35a0a65f1606483015290911690636033e315906084016020604051808303816000875af1158015614c93573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112849190615f0b565b6006820154600090614cd09064ffffffffff1642615b1b565b90506001811015614ce057505050565b60058301546001600160801b03166001811015614d1057604051630a1cf3ed60e21b815260040160405180910390fd5b82546005850154614d2c919084906001600160801b0316615392565b6005850180546fffffffffffffffffffffffffffffffff19166001600160801b0392831617908190556001850154614d709290918591600160801b909104166153af565b6005850180546001600160801b03908116600160801b93821684028181179384905560068901805464ffffffffff19164264ffffffffff16179055604080519184169092178152939092041660208301527ff92a3abee06d57c996e7e19eb34560241fdc1fe67e9ebd503177710bf9fd82049101614bb6565b6000614df4836122c2565b905080600003614e1757604051638dc8d9b360e01b815260040160405180910390fd5b6000614e2e6026548361384d90919063ffffffff16565b905082614e3b338661134a565b614e459190615bba565b811015613b0e57604051630369fbd160e51b815260040160405180910390fd5b6000614e7a6001600160a01b038416836153cb565b90508051600014158015614e9f575080806020019051810190614e9d9190615f0b565b155b1561264d57604051635274afe760e01b81526001600160a01b03841660048201526024016115aa565b600354604051635c921eb960e01b8152306004820152602481018390526001600160a01b0390911690635c921eb990604401600060405180830381600087803b158015614f1457600080fd5b505af1158015614f28573d6000803e3d6000fd5b505060048054602a5460405163095ea7b360e01b81526001600160a01b03918216938101939093526024830186905216925063095ea7b391506044016020604051808303816000875af1158015614f83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614fa79190615f0b565b50602a54604051636e553f6560e01b8152600481018390523060248201526000916001600160a01b031690636e553f65906044016020604051808303816000875af1158015614ffa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061501e9190615bcd565b602a546040516328c0620360e01b81526000600482018190529293506001600160a01b03909116906328c0620390602401602060405180830381865afa15801561506c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906150909190615bcd565b9050600082116150d95760405162461bcd60e51b815260206004820152601460248201527315985d5b1d0819195c1bdcda5d0819985a5b195960621b60448201526064016115aa565b82602060000160008282546150ee9190615bba565b9091555050602355505042602555565b60025460ff166114a557604051638dfc202b60e01b815260040160405180910390fd5b60006001600160801b03821115615155576040516306dfcc6560e41b815260806004820152602481018390526044016115aa565b5090565b600682015460009081906151749064ffffffffff1642615b1b565b9050600181101561518b5750506004820154611238565b6005840154600184015461129191600160801b90046001600160801b0316906151b490846153d9565b906144e3565b600682015460009081906151d59064ffffffffff1642615b1b565b905060018110156151f557505060058201546001600160801b0316611238565b60058401548354611291916001600160801b0316906151b4908483615428565b600060018310156152325750676765c793fa10079d601b1b611238565b600061525061524b6152448587615bba565b859061545c565b615121565b6001600160801b0316949350505050565b600085871115806152725750838710155b8061527d5750858511155b806152885750838510155b156152a65760405163abc83fed60e01b815260040160405180910390fd5b60008383116152e85760006152bb888a615b1b565b905060006152d3866152cd87856144e3565b9061545c565b90506152df818a615bba565b92505050615340565b60006152f48585615b1b565b9050600061530d86676765c793fa10079d601b1b615b1b565b9050600061531b8b89615b1b565b9050600061532d836152cd86856144e3565b9050615339818d615bba565b9450505050505b979650505050505050565b6000600182101561535e57506000611291565b600061536a86866144e3565b9050600061537882866144e3565b905060006153868284615b1b565b98975050505050505050565b6000806153a0858585615428565b905061368861524b82856144e3565b6000806153bc85856153d9565b905061368861524b84836144e3565b606061368c83836000615499565b600060018210156153f65750676765c793fa10079d601b1b611238565b6000615406846301e1338061545c565b9050600061541482856144e3565b905061541f81615536565b95945050505050565b6000806154358486615b81565b90506154456301e1338082615b98565b905061368881676765c793fa10079d601b1b615bba565b60008115676765c793fa10079d601b1b6002840419048411171561547f57600080fd5b50676765c793fa10079d601b1b9190910260028204010490565b6060814710156154be5760405163cd78605960e01b81523060048201526024016115aa565b600080856001600160a01b031684866040516154da9190615e0b565b60006040518083038185875af1925050503d8060008114615517576040519150601f19603f3d011682016040523d82523d6000602084013e61551c565b606091505b509150915061552c8683836155df565b9695505050505050565b6000816000036155525750676765c793fa10079d601b1b919050565b506b169e43a85eb381aa580000006b1363156bbee3016d700000006b1027e72f1f128130880000006b0cecb8f27f4200f3a00000006b09b18ab5df7180b6b80000006b06765c793fa10079d000000086800204808702919091048087029290920480870293909304808702949094048087029590950495010101010101676765c793fa10079d601b1b0190565b6060826155f4576155ef8261563b565b61368c565b815115801561560b57506001600160a01b0384163b155b1561563457604051639996b31560e01b81526001600160a01b03851660048201526024016115aa565b508061368c565b80511561564b5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b82805482825590600052602060002090810192821561569f579160200282015b8281111561569f578251825591602001919060010190615684565b506151559291506156ec565b6040518060e0016040528060008152602001600081526020016000815260200160001515815260200160008152602001600081526020016000151581525090565b5b8082111561515557600081556001016156ed565b60006020828403121561571357600080fd5b5035919050565b6001600160a01b03811681146110ff57600080fd5b60006020828403121561574157600080fd5b813561368c8161571a565b6000806040838503121561575f57600080fd5b823561576a8161571a565b946020939093013593505050565b6000806040838503121561578b57600080fd5b50508035926020909101359150565b634e487b7160e01b600052604160045260246000fd5b601f8201601f1916810167ffffffffffffffff811182821017156157d6576157d661579a565b6040525050565b600080600080608085870312156157f357600080fd5b84356157fe8161571a565b935060208581013561580f8161571a565b935060408601359250606086013567ffffffffffffffff8082111561583357600080fd5b818801915088601f83011261584757600080fd5b8135818111156158595761585961579a565b6040519150615871601f8201601f19168501836157b0565b808252898482850101111561588557600080fd5b808484018584013760008482840101525080935050505092959194509250565b8051825260208101516020830152604081015160408301526060810151151560608301526080810151608083015260a081015160a083015260c0810151151560c08301525050565b60e0810161123882846158a5565b6000806040838503121561590e57600080fd5b82356008811061576a57600080fd5b60008060006060848603121561593257600080fd5b8335925060208401359150604084013561594b8161571a565b809150509250925092565b600081518084526020808501945080840160005b838110156159905761597d8783516158a5565b60e096909601959082019060010161596a565b509495945050505050565b60208082528251608083830152805160a0840181905260009291820190839060c08601905b808310156159e057835182529284019260019290920191908401906159c0565b508387015160408701526040870151606087015260608701519350601f198682030160808701526153408185615956565b600080600060608486031215615a2657600080fd5b8335615a318161571a565b92506020840135615a418161571a565b929592945050506040919091013590565b60006101008201905060018060a01b0380845116835280602085015116602084015280604085015116604084015250606083015160608301526080830151608083015260a08301516001600160801b0380821660a08501528060c08601511660c0850152505060e0830151611faf60e084018264ffffffffff169052565b600080600060608486031215615ae557600080fd5b8335615af08161571a565b95602085013595506040909401359392505050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561123857611238615b05565b634e487b7160e01b600052603260045260246000fd5b600060018201615b5657615b56615b05565b5060010190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b808202811582820484141761123857611238615b05565b600082615bb557634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111561123857611238615b05565b600060208284031215615bdf57600080fd5b5051919050565b634e487b7160e01b600052602160045260246000fd5b600060033d11156127295760046000803e5060005160e01c90565b600060443d1015615c255790565b6040516003193d81016004833e81513d67ffffffffffffffff8160248401118184111715615c5557505050505090565b8285019150815181811115615c6d5750505050505090565b843d8701016020828501011115615c875750505050505090565b615c96602082860101876157b0565b509095945050505050565b60008060233d1115615cbd576020600460003e50506000516001905b9091565b600060208284031215615cd357600080fd5b815161368c8161571a565b60008060408385031215615cf157600080fd5b505080516020909101519092909150565b6001600160a01b0394909416845260208401929092526001600160801b03166040830152606082015260800190565b60008060008060808587031215615d4757600080fd5b505082516020840151604085015160609095015191969095509092509050565b80518015158114615d7757600080fd5b919050565b600060e08284031215615d8e57600080fd5b60405160e0810181811067ffffffffffffffff82111715615db157615db161579a565b8060405250825181526020830151602082015260408301516040820152615dda60608401615d67565b60608201526080830151608082015260a083015160a0820152615dff60c08401615d67565b60c08201529392505050565b6000825160005b81811015615e2c5760208186018101518583015201615e12565b506000920191825250919050565b600080600060608486031215615e4f57600080fd5b615e5884615d67565b925060208401519150604084015190509250925092565b6001600160a01b03948516815292909316602083015260408201526001600160801b03909116606082015260800190565b600080600060608486031215615eb557600080fd5b8351925060208401519150604084015190509250925092565b60008060008060808587031215615ee457600080fd5b615eed85615d67565b60208601516040870151606090970151919890975090945092505050565b600060208284031215615f1d57600080fd5b61368c82615d6756fea264697066735822122004a483d6cde9880a2e0d08c71aef252e87954885213c8d3cf9b752dc7654fcb864736f6c63430008140033",
3484
+ "bytecode": "0x34620000e857620066e53881900360a0601f8201601f19168101906001600160401b03821190821017620000ed5761010092829160405260a03912620000e857620000976200004d62000103565b620000576200011a565b6200006162000131565b6200006b62000148565b6200007562000160565b906200008062000178565b9261016051946200009062000190565b96620001a8565b604051615fe59081620006e08239608051818181610b1d01528181610f1a0152818161256e0152818161266d0152818161272801528181612a2001528181612d3f0152818161325201526133ee0152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b60a051906001600160a01b0382168203620000e857565b60c051906001600160a01b0382168203620000e857565b60e051906001600160a01b0382168203620000e857565b61010051906001600160a01b0382168203620000e857565b61012051906001600160a01b0382168203620000e857565b61014051906001600160a01b0382168203620000e857565b61018051906001600160a01b0382168203620000e857565b969593909433156200047b57602f8054336001600160a01b0319821681179092556001600160a01b0392919083167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a36001603055169687156200044657620002c16200030a9662000268620002e394620002466200030598620004439d60805260018060a01b031660018060a01b03196033541617603355565b603480546001600160a01b0319166001600160a01b0392909216919091179055565b7b033b2e3c9fd0803ce800000000000000033b2e3c9fd0803ce80000006005556006805464ffffffffff19164264ffffffffff16179055600080546001600160a01b0319166001600160a01b0392909216919091179055565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b600955565b620003206200031b6009546200063b565b600a55565b620003366200033160095462000672565b600b55565b6200034c62000347600954620006a8565b600c55565b620003626b0295be96e640669720000000600d55565b6200036d6000600e55565b620003836b033b2e3c9fd0803ce8000000600755565b620003996b033b2e3c9fd0803ce8000000600855565b620003a5611f40602555565b620003b7670de0b6b3a7640000602655565b620003c46203f480602755565b620003d96a084595161401484a000000602b55565b620003ee6a084595161401484a000000602c55565b620003fa6107d0602a55565b6200040661012c602855565b62000419600160ff196024541617602455565b62000425610708602d55565b6200043081620004ab565b506200043c8162000534565b50620005e1565b50565b60405162461bcd60e51b815260206004820152600d60248201526c5a65726f20726567697374727960981b6044820152606490fd5b604051631e4fbdf760e01b815260006004820152602490fd5b9060018060a01b0316600052602052604060002090565b6000808052603260205260ff620004e2837ebcd6ff29ae71d399fb597d99792fa72d0863bd723b9ab11f79d0b8d8ac5bc862000494565b54166200052f57808052603260205262000500826040832062000494565b805460ff1916600117905533916001600160a01b031690600080516020620066c58339815191528180a4600190565b905090565b7f71840dc4906352362b0cdaf79870196c8e42acafade72d5d5a6d59291253ceb1600081815260326020529060ff6200058e847f08ae08a1778cb01871246af592e3e907ec9ba7bc1cc0b308a58e75fd2ee1dfba62000494565b5416620005db578082526032602052620005ac836040842062000494565b805460ff1916600117905533926001600160a01b031691600080516020620066c58339815191529080a4600190565b50905090565b7fba279271fb7bbf76a6f3df3cc57bf80647fcafdea60ec3383d90f459de74e7c0600081815260326020529060ff6200058e847f4be98a500fedc87dbf83b0f2e386ce313ece8458dab0590898ef9a4135d1921462000494565b7e1a36e2eb1c432ca57a786c226809d495182a9930be0ded288ce703afb7e90d8111620000e8576113886109c46127109202010490565b7e0d1b71758e219652bd3c36113404ea4a8c154c985f06f694467381d7dbf4868111620000e85761271090611388809102010490565b7e01a36e2eb1c432ca57a786c226809d495182a9930be0ded288ce703afb7e908111620000e857611388619c40612710920201049056fe6080604052600436101561001257600080fd5b60003560e01c806301ffc9a7146105bd57806302768de4146105b8578063048c661d146105b3578063086c33e1146105ae57806309bf1e73146105a95780630ab30d8a146105a45780630c34b9141461059f5780630c42dcaf1461059a5780630c679a7b14610595578063150b7a0214610590578063152f15841461058b57806316c621e0146105865780631a7fd200146105815780631d4bf4a01461057c5780631d8557d71461057757806322f2caf1146105725780632445eee51461056d578063248a9ca31461056857806327156a68146105635780632a5bf6d21461055e5780632a7e7849146105595780632ab414fc146105545780632e1a7d4d1461054f5780632f17682b146104be5780632f2ff15d1461054a57806332128b031461054557806334176a6d1461054057806336568abe1461053b5780633f4ba83a146105365780634df9d6ba146105315780634ef501ac1461052c57806353f35770146105275780635c975abb146105225780636061ffc31461051d578063618295df14610518578063640bc491146105135780636817031b1461050e578063715018a614610509578063745400c91461050457806375417da6146104ff578063768bab45146104fa5780637bc7780b146104f55780638429d51f146104f05780638456cb59146104eb578063883c6b24146104e657806389035730146104e1578063893a5372146104dc5780638ad7cacc146104d75780638aee8127146104d25780638d7081e4146104cd5780638da5cb5b146104c85780638def3ec2146104c35780638f7e8498146104be57806391d14854146104b95780639632b92a146104b457806398c2b108146104af57806398d721e0146104aa5780639daa54b41461042d578063a013f9c6146104a5578063a217fddf146104a0578063a42dce801461049b578063a51e896314610496578063a90d728f14610491578063a9bf805c1461048c578063aaf6379914610487578063b21cfc7114610482578063b6b55f251461047d578063b82e16e314610478578063b88a802f14610473578063ba7466941461046e578063c415b95c14610469578063c4f8911c14610464578063c6d6916c1461045f578063c89109131461045a578063c939ad6114610455578063cac89c5c14610450578063cd3293de1461044b578063d017e97814610446578063d17e988314610441578063d547741f1461043c578063de597d5b14610437578063e5711e8b14610432578063e65896c91461042d578063ec915ee614610428578063ef16b0e014610423578063ef5bac251461041e578063f2fde38b14610419578063f36c8f5c14610414578063fbf4a6121461040f578063fbfa77cf1461040a5763fe64cc0b1461040557600080fd5b6137b9565b613790565b61376d565b613744565b6136ca565b613606565b613536565b6134dc565b6127f8565b61344b565b61338a565b613348565b613321565b613305565b61328d565b61323c565b61319a565b61315a565b613074565b612fa5565b612f7c565b612e7f565b612e4d565b612da4565b612cfa565b612c0e565b612b98565b612b6f565b612a83565b6129f3565b612980565b612964565b61291b565b612785565b6126ca565b61260f565b6125cb565b6115cb565b612510565b6124e7565b6124cb565b61246c565b612330565b612286565b6121fc565b6121d3565b612179565b612131565b612113565b612017565b611f57565b611f33565b611ee4565b611c80565b611c57565b611b3b565b611b04565b611ae1565b611a87565b6119fe565b6119a1565b611937565b6118ec565b61185c565b61164e565b61160c565b6114e7565b610f89565b610ebc565b610e5d565b610e36565b610e07565b610d23565b610c73565b610c5a565b610c3c565b610bb7565b610ae9565b610aa7565b610963565b61085a565b61083d565b61077d565b61075c565b61073e565b61071a565b61066b565b610623565b346106135760203660031901126106135760043563ffffffff60e01b811680910361061357602090637965db0b60e01b8114908115610602575b506040519015158152f35b6301ffc9a760e01b149050386105f7565b600080fd5b600091031261061357565b34610613576000366003190112610613576020604051600080516020615f708339815191528152f35b6001600160a01b031690565b6001600160a01b03909116815260200190565b34610613576000366003190112610613576017546040516001600160a01b039091168152602090f35b6001600160a01b0381160361061357565b9181601f84011215610613578235916001600160401b038311610613576020838186019501011161061357565b6060600319820112610613576004356106ea81610694565b916024356106f781610694565b91604435906001600160401b03821161061357610716916004016106a5565b9091565b3461061357602061073661072d366106d2565b92919091614bc7565b604051908152f35b346106135760003660031901126106135760206040516203f4808152f35b3461061357600036600319011261061357602060055460801c604051908152f35b3461061357600036600319011261061357610796614ee2565b506108396107a2610928565b600754815260085460208201526009546040820152600a546060820152600b546080820152600c5460a0820152600d5460c0820152600e5460e08201526040519182918291909160e080610100830194805184526020810151602085015260408101516040850152606081015160608501526080810151608085015260a081015160a085015260c081015160c08501520151910152565b0390f35b34610613576000366003190112610613576020604051611f408152f35b346106135760203660031901126106135760043561087781610694565b61087f613904565b601680546001600160a01b0319166001600160a01b0392909216919091179055005b634e487b7160e01b600052604160045260246000fd5b6001600160401b0381116108ca57604052565b6108a1565b60c081019081106001600160401b038211176108ca57604052565b606081019081106001600160401b038211176108ca57604052565b601f909101601f19168101906001600160401b038211908210176108ca57604052565b6040519061010082016001600160401b038111838210176108ca57604052565b6001600160401b0381116108ca57601f01601f191660200190565b346106135760803660031901126106135761097f600435610694565b61098a602435610694565b6064356001600160401b0381116106135736602382011215610613578060040135906109b582610948565b916109c36040519384610905565b8083523660248284010111610613576000928160246020940184830137010152604051630a85bd0160e11b8152602090f35b6001600160a01b03166000908152602080526040902090565b6001600160a01b0316600090815260146020526040902090565b6001600160a01b0316600090815260156020526040902090565b6001600160a01b0316600090815260106020526040902090565b6001600160a01b0316600090815260226020526040902090565b6001600160a01b03166000908152600f6020526040902090565b9060018060a01b0316600052602052604060002090565b3461061357602036600319011261061357600435610ac481610694565b60018060a01b03166000526023602052602060ff604060002054166040519015158152f35b3461061357602036600319011261061357610b02613bcd565b60405163fe575a8760e01b81523360048201526020816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa908115610bb257600091610b84575b50610b7257610b6660043561490c565b610b706001603055565b005b604051632652747360e21b8152600490fd5b610ba5915060203d8111610bab575b610b9d8183610905565b810190613a6b565b38610b56565b503d610b93565b613a82565b3461061357602036600319011261061357600435610bd481610694565b610bdc613904565b6001600160a01b03908116908115610c2a57603380546001600160a01b031981168417909155167f748f1f5793b18b83e17ec58dd942771a149a2da21e05fe50ced8c278143c6d71600080a3005b6040516303988b8160e61b8152600490fd5b34610613576000366003190112610613576020601a54604051908152f35b3461061357600036600319011261061357610b7061582c565b3461061357602036600319011261061357600435610c9081610694565b610c98613904565b6001600160a01b03811660008181526020805260408120549092919060ff16610d115782526020805260408220805460ff191660011790557fa77e7c594c11a0d5d9d8e6a9132ac0db912dc0f34f5fb7d94860fe38d16410bd90610d0b90610cff8161396e565b60405191829182610658565b0390a180f35b60405163dc37823360e01b8152600490fd5b346106135760803660031901126106135760048035610d4181610694565b6024356001600160401b03811161061357610d5f90369084016106a5565b6044359160643593610d7085610694565b610d78613bcd565b610d80613baf565b8315610df6576001600160a01b03818116600090815260208052604090205460ff1615610de55760ff6024541615610dd457851615610dc357610b6695506145cd565b6040516303988b8160e61b81528690fd5b6040516312cefcd560e31b81528790fd5b604051630867d69960e11b81528790fd5b60405163162908e360e11b81528690fd5b346106135760203660031901126106135760043560005260326020526020600160406000200154604051908152f35b34610613576020366003190112610613576020610736600435610e5881610694565b614ba9565b34610613576020366003190112610613576020610736600435610e7f81610694565b614af3565b90604060031983011261061357600435610e9d81610694565b91602435906001600160401b03821161061357610716916004016106a5565b3461061357610eca36610e84565b90610ed3613bcd565b610edb613baf565b6001600160a01b03838116600090815260208052604090205460ff1615610f775760206024916040519283809263fe575a8760e01b82523360048301527f0000000000000000000000000000000000000000000000000000000000000000165afa908115610bb257600091610f59575b50610b7257610b6692613e08565b610f71915060203d8111610bab57610b9d8183610905565b38610f4b565b604051630867d69960e11b8152600490fd5b3461061357604080600319360112610613576004908135600d8110156106135760243592610fb682613930565b600a8214908180156114d4575b80156114c3575b80156114b0575b801561149d575b801561148a575b8015611478575b8015611465575b8015611452575b610ffd84613930565b600684148091811561143d575b8115611428575b8115611413575b156113a45750600080516020615f70833981519152600052603260205261107061106c611065337f4be98a500fedc87dbf83b0f2e386ce313ece8458dab0590898ef9a4135d19214610a90565b5460ff1690565b1590565b611395575b60009261108185613930565b156110e45750905083156110d657602b5484116110c857506110c3600080516020615f1083398151915293602c54936110b982602c55565b5193849384613950565b0390a1005b8251635bf62a1160e01b8152fd5b8251635b9ad34160e11b8152fd5b6110ed84613930565b600984036111245750905083156110d657506110c3600080516020615f1083398151915293602b549361111f82602b55565b6110b9565b61112d84613930565b83611155575050506110c3600080516020615f10833981519152936025549361111f82602555565b61115e84613930565b60018403611189575050506110c3600080516020615f10833981519152936026549361111f82602655565b61119284613930565b600284036111e95750905062015180841080156111dd575b6111cf57506110c3600080516020615f10833981519152936027549361111f82602755565b825163d7c43e0f60e01b8152fd5b5062093a8084116111aa565b6111f284613930565b6003840361121d575050506110c3600080516020615f1083398151915293602a549361111f82602a55565b61122984959395613930565b83820361127857506001851161126a57506024805461ff0019166001861460081b61ff0016179055600080516020615f10833981519152936110c3916110b9565b905163af979eb560e01b8152fd5b61128184613930565b600584036112c057506001851161126a5750836110c39161111f6001600080516020615f10833981519152971460ff8019602454169115151617602455565b600080516020615f1083398151915295929491506112dd84613930565b156112f457506110c3906028549361111f82602855565b6112fd83613930565b6007830361131757506110c390600e549361111f82600e55565b61132083613930565b6008830361133a57506110c3906029549361111f82602955565b61134383613930565b600b830361135d57506110c390602d549361111f82602d55565b9261136783613930565b600c831461137a575b906110c3916110b9565b92506110c390602e549361138d82602e55565b909150611370565b508351634ca8886760e01b8152fd5b1561140457600080516020615ed083398151915260005260326020526113f061106c611065337f08ae08a1778cb01871246af592e3e907ec9ba7bc1cc0b308a58e75fd2ee1dfba610a90565b1561107557508351634ca8886760e01b8152fd5b508351630309cb8760e51b8152fd5b905061141e85613930565b600c851490611018565b905061143385613930565b6008851490611011565b905061144885613930565b600785149061100a565b5061145c83613930565b600b8314610ff4565b5061146f83613930565b60058314610fed565b5061148283613930565b808314610fe6565b5061149483613930565b60038314610fdf565b506114a783613930565b60028314610fd8565b506114ba83613930565b60018314610fd1565b506114cd83613930565b8215610fca565b506114de83613930565b60098314610fc3565b3461061357602036600319011261061357600435611503613bcd565b61150b613baf565b80156115b95760ff60245460081c166115a7576115569061152b3361526e565b6017546001600160a01b03163303611598575b61154661582c565b61154f81615237565b3390615d3a565b50506115606153ea565b60405190815233907f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a942436490602090a2610b706001603055565b6115a28133613d4e565b61153e565b6040516370a7336d60e11b8152600490fd5b60405163162908e360e11b8152600490fd5b34610613576020366003190112610613576004356115e881610694565b60018060a01b031660005260208052602060ff604060002054166040519015158152f35b3461061357604036600319011261061357610b7060243560043561162f82610694565b8060005260326020526116496001604060002001546137d5565b613816565b346106135761165c36610e84565b611667929192613bcd565b61166f613baf565b60018060a01b038216600093818552602080805260409460ff86882054161561183c5761169a614f40565b506116b2826116ab87863386614f72565b0151151590565b61182b57906116d0858489979695946116c961582c565b3390614ca2565b80611739575b5050813b1561173557836116ff95518096819582946312ede2c560e21b84523360048501613de6565b03925af18015610bb25761171c575b506117196001603055565b80f35b8061172961172f926108b7565b80610618565b3861170e565b8380fd5b865163d57dfa1560e01b8152949550929391929080838061175f89883360048501613de6565b0381885afa928315610bb257889361180c575b508651633de6b58d60e21b8152928184806117928a893360048501613de6565b0381895afa908115610bb2576117b9946117b4938b936117dd575b50506139f9565b614c58565b602654116117cc579084929138806116d6565b83516302c9375f60e21b8152600490fd5b6117fd929350803d10611805575b6117f58183610905565b810190613bf0565b9038806117ad565b503d6117eb565b816118249294503d8511611805576117f58183610905565b9138611772565b85516367c11db560e01b8152600490fd5b8551630867d69960e11b8152600490fd5b90600052602052604060002090565b346106135760403660031901126106135760043561187981610694565b6001600160a01b03166000908152600f60209081526040808320602435845282529182902080546001820154600283015460038401546004850154600590950154875194855260ff93841615159685019690965295830152606082019490945292161515608083015260a082015260c090f35b346106135760403660031901126106135760243561190981610694565b336001600160a01b0382160361192557610b7090600435613891565b60405163334bd91960e11b8152600490fd5b3461061357600036600319011261061357611950613904565b60315460ff81161561198f5760ff19166031557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6020604051338152a1005b604051638dfc202b60e01b8152600490fd5b346106135760203660031901126106135760206107366004356119c381610694565b6149ae565b634e487b7160e01b600052603260045260246000fd5b6021548110156119f957602160005260206000200190600090565b6119c8565b3461061357602036600319011261061357600435602154811015610613576021600052600080516020615f5083398151915201546040516001600160a01b039091168152602090f35b90606060031983011261061357600435611a6081610694565b91602435906001600160401b03821161061357611a7f916004016106a5565b909160443590565b3461061357611a9536611a47565b90611aa1939293613bcd565b611aa9613baf565b81156115b9576001600160a01b038316600090815260208052604090205460ff1615610f7757611ada9333936145cd565b6001603055005b3461061357600036600319011261061357602060ff603154166040519015158152f35b3461061357600036600319011261061357606060018060a01b03601154166012546013549060405192835260208301526040820152f35b3461061357602036600319011261061357600435611b5881610694565b611b60613904565b611b6f61106c611065836109f5565b610f7757611b89611b7f826109f5565b805460ff19169055565b6001600160a01b03908082169060005b60215480821015611c3a578385611bc7611bb2856119de565b905460039190911b1c6001600160a01b031690565b1614611bdc5750611bd7906139d6565b611b99565b600080516020615ef083398151915294506110c3935090611c13611c0d611bb2611c08611c32956139ea565b6119de565b916119de565b90919082549060031b9160018060a01b03809116831b921b1916179055565b610cff613a06565b5050600080516020615ef083398151915292506110c39150610cff565b34610613576000366003190112610613576033546040516001600160a01b039091168152602090f35b346106135760208060031936011261061357600435611c9e81610694565b611ca6613904565b601f611cba611cb5825461064c565b61064c565b6001600160a01b039283169390838116808614159081611eda575b50611dc6575b50600481611d14611cb5611cf2611cb5875461064c565b601f80546001600160a01b0319166001600160a01b038b16179055955461064c565b6040516338d52e0f60e01b815292839182905afa918215610bb257600092611d99575b505082611d48611cb560015461064c565b9116141580611d90575b611d7e57167f483bdedaaf23706a9800ac1af0d852b34927780d79f9d6ba60a80c7cad75ea39600080a3005b604051631b3b488360e11b8152600490fd5b50821515611d52565b611db89250803d10611dbf575b611db08183610905565b81019061422f565b3880611d37565b503d611da6565b81604051809263ce96cb7760e01b82528180611de53060048301610658565b03915afa60009181611ebb575b50611ead57506001611e026152f1565b806308c379a014611e8c57634e487b7114611e54575b611e23575b38611cdb565b611e2b614a50565b50611e3c611cb5611cb5845461064c565b600080516020615f30833981519152600080a2611e1d565b611e5c61537d565b5015611e1857506000611e75611cb5611cb5855461064c565b600080516020615f308339815191528280a2611e18565b50611e9561530f565b15611e1857506000611e75611cb5611cb5855461064c565b611eb6906153b3565b611e1d565b611ed3919250833d8511611805576117f58183610905565b9038611df2565b9050151538611cd5565b3461061357600080600319360112611f3057611efe613904565b602f80546001600160a01b0319811690915581906001600160a01b0316600080516020615f908339815191528280a380f35b80fd5b3461061357602036600319011261061357611f4c613baf565b610b70600435613c7b565b346106135760208060031936011261061357600490813591611f7883610694565b6000918293602154925b838610611f9457604051858152602090f35b90919293611faa611cb5611cb5611bb2896119de565b84604051809263572bf25760e01b82528180611fc889898301610658565b03915afa8015610bb257611fee92611fe892600092611ff8575b50613a8e565b956139d6565b9493929190611f82565b612010919250873d8911611805576117f58183610905565b9038611fe2565b346106135760403660031901126106135760043561203481610694565b61203c613904565b61204461582c565b6001600160a01b038116156120b85760008091612067611cb5611cb5845461064c565b90813b156120b45782916120959160405194858094819363768bab4560e01b83526024359060048401613e8e565b03925af18015610bb2576120a7575080f35b80611729611719926108b7565b5050fd5b60405162461bcd60e51b815260206004820152602d60248201527f4c656e64696e67506f6f6c3a20526563697069656e742063616e6e6f7420626560448201526c207a65726f206164647265737360981b6064820152608490fd5b34610613576000366003190112610613576020600954604051908152f35b346106135760003660031901126106135760c0601954601a54601b54601c54601d5491601e5493604051958652602086015260408501526060840152608083015260a0820152f35b3461061357600036600319011261061357612192613904565b61219a613baf565b600160ff1960315416176031557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586020604051338152a1005b34610613576000366003190112610613576005546040516001600160801b039091168152602090f35b3461061357600036600319011261061357610180602454602554602654602754602854602954602a5490602b5492602c5494602d5496602e549860ff6040519b81811615158d5260081c16151560208c015260408b015260608a0152608089015260a088015260c087015260e0860152610100850152610120840152610140830152610160820152f35b34610613576000366003190112610613576034546040516001600160a01b039091168152602090f35b61232e909291926101208101938051825260208101516020830152604081015160408301526060810151151560608301526080810151608083015260a081015160a083015260c0810151151560c083015261231960e082015160e084019060018060a01b03169052565b610100908101516001600160a01b0316910152565b565b34610613576004612340366106d2565b91909261234b614fea565b5060018060a01b038116908160005260209283805260409460ff8660002054161561245c57916060612400926123ec879695612385614fea565b9a61238e614f40565b5061239b82828689614f72565b936123b48d876123ad8d890151151590565b1515910152565b8c60808d87015191015284518d526123d58d60c06123ad6080890151151590565b8c8a6123e38585858c614d4a565b91015286614bc7565b888a0152015160a088015260e08701614f31565b835163f8eef10f60e01b815295869182905afa8015610bb257610839946124359260009261243f575b50506101008401614f31565b51918291826122af565b6124559250803d10611dbf57611db08183610905565b3880612429565b8551630867d69960e11b81528890fd5b346106135760203660031901126106135760043561248981610694565b612491613904565b601154906001600160a01b03908183166124b9576001600160a01b0319909216911617601155005b60405163b6de9a7160e01b8152600490fd5b346106135760206107366124de366106d2565b929190916144bb565b3461061357600036600319011261061357602f546040516001600160a01b039091168152602090f35b346106135761251e36611a47565b91612527613bcd565b61252f613baf565b6001600160a01b03848116600090815260208052604090205460ff1615610f775760206024916040519283809263fe575a8760e01b82523360048301527f0000000000000000000000000000000000000000000000000000000000000000165afa908115610bb2576000916125ad575b50610b7257610b669361426f565b6125c5915060203d8111610bab57610b9d8183610905565b3861259f565b3461061357604036600319011261061357602060ff6126036024356125ef81610694565b600435600052603284526040600020610a90565b54166040519015158152f35b346106135761261d36610e84565b90612626613bcd565b61262e613baf565b6001600160a01b03838116600090815260208052604090205460ff1615610f775760206024916040519283809263fe575a8760e01b82523360048301527f0000000000000000000000000000000000000000000000000000000000000000165afa908115610bb2576000916126ac575b50610b7257610b6692614aba565b6126c4915060203d8111610bab57610b9d8183610905565b3861269e565b34610613576126d8366106d2565b916126e1613bcd565b6126e9613baf565b6001600160a01b03848116600090815260208052604090205460ff1615610f775760206024916040519283809263fe575a8760e01b82523360048301527f0000000000000000000000000000000000000000000000000000000000000000165afa908115610bb257600091612767575b50610b7257610b6693614a80565b61277f915060203d8111610bab57610b9d8183610905565b38612759565b34610613576020366003190112610613576004356127a281610694565b6127aa613904565b6001600160a01b03908116908115610c2a57601780546001600160a01b031981168417909155167f593eaf5e0e1afc1c041a664a437fdae719a628836785d06572b008e6ca5c189d600080a3005b34610613576020366003190112610613576004803561281681610694565b6000908190602154905b81831061283257602084604051908152f35b909192612847611cb5611cb5611bb2876119de565b92600060405180956371e078ab60e01b82528180612867888c8301610658565b03915afa938415610bb2576000946128e7575b506000915b84518310156128ce576128c26128c8916128bc6128b76128b26128a189610a76565b6128ab898c614e7e565b519061184d565b614e92565b614de2565b90613a8e565b926139d6565b9161287f565b95929350936128dd91506139d6565b9193929093612820565b61290391943d8091833e6128fb8183610905565b810190614e03565b923861287a565b908152602081019190915260400190565b346106135760203660031901126106135760043561293881610694565b60018060a01b03166000526022602052604060002060018154910154906108396040519283928361290a565b3461061357600036600319011261061357602060405160008152f35b346106135760203660031901126106135760043561299d81610694565b6129a5613904565b6001600160a01b03908116908115610c2a57601880546001600160a01b031981168417909155167f5d16ad41baeb009cd23eb8f6c7cde5c2e0cd5acf4a33926ab488875c37c37f38600080a3005b3461061357600080600319360112611f305760405163fe575a8760e01b81523360048201526020816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa908115610bb2578291612a65575b50610b7257611719613ea9565b612a7d915060203d8111610bab57610b9d8183610905565b38612a58565b34610613576000366003190112610613576018546001600160a01b039081163303612b5e57601f541615612b2a57610839612ac2611cb560015461064c565b612aee601a548092612ad342601b55565b612add6000601a55565b612ae860185461064c565b90615040565b6040518181527f7edfb0d5d58c6a3d398df94a9bdfa2b33f3fa42ae40d72ebdc717d2db3953ee590602090a16040519081529081906020820190565b60405162461bcd60e51b815260206004820152600c60248201526b139bc81d985d5b1d081cd95d60a21b6044820152606490fd5b6040516282b42960e81b8152600490fd5b34610613576000366003190112610613576016546040516001600160a01b039091168152602090f35b3461061357612bca6020612bab366106d2565b60405163d57dfa1560e01b815295869493859384939160048501613de6565b03916001600160a01b03165afa8015610bb257602091600091612bf1575b50604051908152f35b612c089150823d8111611805576117f58183610905565b38612be8565b3461061357612c1c366106d2565b6001600160a01b03938416600081815260208080526040808320549097919692959493929060ff1615612ce957612c51614f40565b5082865286805260ff888720541615612ce957168452600f8552858420865163a646a19360e01b81529493909286928692909183918291612c959160048401613f41565b03915afa938415610bb257612cb79486948491612ccc575b5083525220614e92565b6108396060820151915192519283928361290a565b612ce39150823d8411611805576117f58183610905565b38612cad565b8751630867d69960e11b8152600490fd5b3461061357602036600319011261061357600435612d16613bcd565b612d1e613baf565b80156115b95760405163fe575a8760e01b81523360048201526020816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa908115610bb257600091612d86575b50610b7257610b6690613a9b565b612d9e915060203d8111610bab57610b9d8183610905565b38612d78565b3461061357600080600319360112611f3057604051809160215490818352602080930180926021835284832090835b818110612e305750505084612de9910385610905565b60405193838594850191818652518092526040850193925b828110612e1057505050500390f35b83516001600160a01b031685528695509381019392810192600101612e01565b82546001600160a01b031684529286019260019283019201612dd3565b3461061357600036600319011261061357612e66613bcd565b612e6f3361526e565b6001603055602060405160018152f35b3461061357612e8d366106d2565b9291612e97614f40565b5060018060a01b038093169360009480865260209485805260409360ff858920541615612f6b5791612eec93918793168852600f835284882095855180958194829363a646a19360e01b845260048401613f41565b03915afa908115610bb2578560a094612f1593859360c09991612f4e575b508252865220614e92565b908051938251855280830151151590850152808201519084015260608101516060840152608081015115156080840152015160a0820152f35b612f659150883d8a11611805576117f58183610905565b38612f0a565b8451630867d69960e11b8152600490fd5b34610613576000366003190112610613576018546040516001600160a01b039091168152602090f35b3461061357602036600319011261061357601654600435906001600160a01b03163303612b5e5760018110613062576009549081613020575b7fd45d1eb66419c036e2fa401916c7db417696f889cf4ab8ca92272327e8e1c83e9161300982600955565b6130116156fa565b6110c36040519283928361290a565b6130298261566c565b828211156130535761303b83836139f9565b1115612fde57604051631a8b543360e21b8152600490fd5b61305d82846139f9565b61303b565b60405163824c180760e01b8152600490fd5b346106135760203660031901126106135760043561309181610694565b6000546001600160a01b03163303613115576130ac81614ba9565b806130c2575b506130bf60125491610a0e565b55005b6130e56130f3916130df6012546130d886610a0e565b54906139f9565b9061497b565b670de0b6b3a7640000900490565b80156130b25761310d61310583610a28565b918254613a8e565b9055386130b2565b60405162461bcd60e51b815260206004820152601e60248201527f4f6e6c792052546f6b656e2063616e20757064617465207265776172647300006044820152606490fd5b346106135760203660031901126106135760043561317781610694565b60018060a01b031660005260106020526020600160406000200154604051908152f35b34610613576131a8366106d2565b90916131b2613bcd565b6017546001600160a01b03929083163303612b5e5760009483811686526020805260ff60408720541615610f77576132329461322087959461321287966033541695604051948593602085019763c939ad6160e01b895260248601614a27565b03601f198101835282610905565b51915af461322c614a50565b9061539d565b6117196001603055565b34610613576000366003190112610613576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b6001600160801b031690565b346106135760003660031901126106135761010060018060a01b0380600054169080600154169060025416600354600454906005549264ffffffffff6006541694604051968752602087015260408601526060850152608084015260018060801b03811660a084015260801c60c083015260e0820152f35b34610613576020610736613318366106d2565b92919091614d4a565b3461061357602036600319011261061357602061073660043561334381610694565b614b4b565b3461061357604036600319011261061357610b7060243560043561336b82610694565b8060005260326020526133856001604060002001546137d5565b613891565b346106135761339836611a47565b916133a1613bcd565b6133a9613baf565b82156115b9576001600160a01b03848116600090815260208052604090205460ff1615610f775760206024916040519283809263fe575a8760e01b82523360048301527f0000000000000000000000000000000000000000000000000000000000000000165afa908115610bb25760009161342d575b50610b7257610b6693613ff5565b613445915060203d8111610bab57610b9d8183610905565b3861341f565b346106135760603660031901126106135760043561346881610694565b6024359061347582610694565b61347d613904565b6000546001600160a01b03918216911681146134a057610b709160443591615040565b60405162461bcd60e51b815260206004820152601460248201527321b0b73737ba103932b9b1bab290292a37b5b2b760611b6044820152606490fd5b3461061357600036600319011261061357610100600754600854600954600a54600b54600c5491600d5493600e5495604051978852602088015260408701526060860152608085015260a084015260c083015260e0820152f35b346106135760803660031901126106135760043561355381610694565b6024359061356082610694565b604435906001600160401b038211610613576020926135866107369336906004016106a5565b916064359361454f565b61232e9092919260e08061010083019560018060a01b038082511685528060208301511660208601526040820151166040850152606081015160608501526080810151608085015260018060801b038060a08301511660a086015260c08201511660c0850152015191019064ffffffffff169052565b346106135760003660031901126106135761361f614ee2565b5061083961362b610928565b61363f61363960005461064c565b82614f31565b61365661364d60015461064c565b60208301614f31565b61366d61366460025461064c565b60408301614f31565b600354606082015260045460808201526005546001600160801b03811660a083015261369d9060801c60c0830152565b6136be6136b060065464ffffffffff1690565b64ffffffffff1660e0830152565b60405191829182613590565b34610613576020366003190112610613576004356136e781610694565b6136ef613904565b6001600160a01b0390811690811561372b57602f80546001600160a01b03198116841790915516600080516020615f90833981519152600080a3005b604051631e4fbdf760e01b815260006004820152602490fd5b34610613576000366003190112610613576020604051600080516020615ed08339815191528152f35b34610613576000366003190112610613576020604051670de0b6b3a76400008152f35b3461061357600036600319011261061357601f546040516001600160a01b039091168152602090f35b346106135760206107366137cc366106d2565b92919091614ca2565b80600052603260205260ff6137ee336040600020610a90565b5416156137f85750565b6044906040519063e2517d3f60e01b82523360048301526024820152fd5b600090808252603260205260ff6138308460408520610a90565b541661388b57808252603260205261384b8360408420610a90565b805460ff1916600117905533926001600160a01b0316917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9080a4600190565b50905090565b600090808252603260205260ff6138ab8460408520610a90565b54161561388b5780825260326020526138c78360408420610a90565b805460ff1916905533926001600160a01b0316917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9080a4600190565b602f546001600160a01b0316330361391857565b60405163118cdaa760e01b8152336004820152602490fd5b600d111561393a57565b634e487b7160e01b600052602160045260246000fd5b60608101949392600d83101561393a57604092825260208201520152565b602154600160401b8110156108ca5760018101806021558110156119f9576021600052600080516020615f508339815191520180546001600160a01b0319166001600160a01b03909216919091179055565b634e487b7160e01b600052601160045260246000fd5b60001981146139e55760010190565b6139c0565b6000198101919082116139e557565b919082039182116139e557565b6021548015613a485760001981810191808310156119f957602160008190529101600080516020615f508339815191520180546001600160a01b031916905555565b634e487b7160e01b600052603160045260246000fd5b5190811515820361061357565b9081602091031261061357613a7f90613a5e565b90565b6040513d6000823e3d90fd5b919082018092116139e557565b613aa43361526e565b613aac61582c565b6018546001600160a01b0390613ac19061064c565b16158015613b99575b15613b7157600080516020615eb0833981519152613b3f613aed600080946139f9565b92613af784613bff565b613b013385615c21565b906001613b0d33610a42565b0154613b5357846001613b1f33610a42565b01555b613b2a6153ea565b80613b44575b5060405191829133958361290a565b0390a2565b613b4d90615500565b38613b30565b6001613b5e33610a42565b01613b6a868254613a8e565b9055613b22565b600080516020615eb0833981519152613b3f613aed613b92602954856156a2565b80946139f9565b50613ba8611cb560175461064c565b3314613aca565b60ff60315416613bbb57565b60405163d93c066560e01b8152600490fd5b600260305414613bde576002603055565b604051633ee5aeb560e01b8152600490fd5b90816020910312610613575190565b6000546040516318160ddd60e01b81529190602090839060049082906001600160a01b03165afa918215610bb257600092613c5b575b5081018091116139e557602b5410613c4957565b6040516354db2d5d60e11b8152600490fd5b613c7491925060203d8111611805576117f58183610905565b9038613c35565b60245460081c60ff166115a757602d5415613d3c57613c9933610a5c565b8115613cfa57613b3f600182847f2816dbba0837d8d68f7bcead98695dd98db2cc1cb4066694ead56a12e795c4889455613ce7613cdb613cdb602d5442613a8e565b6001600160401b031690565b918291015560405191829133958361290a565b5050613d14613d0833610a5c565b60016000918281550155565b337f8b775bb80a5d4addc5ea2601b2378ae89a1bb9010227157ac02aa71498e799c4600080a2565b60405163410dc88360e11b8152600490fd5b90602d5415613dc157613d6082610a5c565b60018101548015613daf574210613d9d575403613d8b576001613d84600092610a5c565b8281550155565b604051635a4fecf360e11b8152600490fd5b60405163621e25c360e01b8152600490fd5b604051637b7e3ed560e11b8152600490fd5b5050565b908060209392818452848401376000828201840152601f01601f1916010190565b6001600160a01b039091168152604060208201819052613a7f93910191613dc5565b909291600091338352602360205260ff60408420541615613e7c57613e2b61582c565b6001600160a01b0316803b15613e7857613e5e93948360405180968195829463cf2c52cb60e01b84523360048501613de6565b03925af18015610bb257613e6f5750565b61232e906108b7565b8280fd5b6040516361803dfb60e11b8152600490fd5b6001600160a01b039091168152602081019190915260400190565b33600052602360205260ff60406000205416613f2f57336000526023602052613edd6040600020600160ff19825416179055565b602e5480613f20575b507fd5acd12fd21128fb0a61c90d812321cb1423b1948052a3e93786c482bbef6608613f1b602e546040519182913383613e8e565b0390a1565b613f2990615500565b38613ee6565b60405163992c89a960e01b8152600490fd5b916020613a7f938181520191613dc5565b9081606091031261061357613f6681613a5e565b916040602083015192015190565b919082519283825260005b848110613fa0575050826000602080949584010152601f8019910116010190565b602081830181015184830182015201613f7f565b6001600160a01b0391821681529116602082015260408101919091526001600160801b03909116606082015260a060808201819052613a7f92910190613f74565b919061400033610a76565b6040805163a646a19360e01b815290949160208280614023888860048401613f41565b03816001600160a01b0387165afa908115610bb25761404a9260009261420f575b5061184d565b92614059600185015460ff1690565b6141fe57918183614073886140e598979685606097615117565b61407b61582c565b61408488615237565b6140c5614098611cb5611cb560025461064c565b926140b76140a860055460801c90565b93895196879360208501613de6565b03601f198101855284610905565b6000865180988195829463292aab8160e11b84528c333360048701613fb4565b03925af18015610bb25760009384916141c9575b5061410e61410960055460801c90565b613281565b6003830155614124611cb5611cb560005461064c565b91823b1561061357600084518094635c921eb960e01b825281838161414d8c3360048401613e8e565b03925af18015610bb2577fcbc04eca7e9da35cb1393a6135a199ca52e450d5e9251cbd99f7847d33a36750956141959461418e926141b6575b508254613a8e565b9055600455565b61419e83615787565b6141a66153ea565b5191825233918060208101613b3f565b806117296141c3926108b7565b38614186565b90506141ed91935060603d81116141f7575b6141e58183610905565b810190613f52565b93915092386140f9565b503d6141db565b8451630bff073160e31b8152600490fd5b61422891925060203d8111611805576117f58183610905565b9038614044565b908160209103126106135751613a7f81610694565b9493929160409261426a9260018060a01b03168752606060208801526060870191613dc5565b930152565b9190928361427c33610a76565b9360018060a01b0393848216604094855163a646a19360e01b81526020988982806142ac8860049b8c8401613f41565b0381875afa908115610bb2576142c9926000926144a3575061184d565b906142d6848b33886144bb565b946142e482868d338561454f565b906142f6611cb5611cb560015461064c565b6143358c61430560185461064c565b8c51636eb1769f60e11b815233818e019081526001600160a01b0390921660208301529283918291604090910190565b0381855afa8015610bb25784918e600092614486575b505010614476578b89614372928c5180809581946370a0823160e01b835233908301610658565b03915afa8015610bb2578391600091614459575b5010614449576143c2836143ae6143cc948f8f9998978b6143a992600598613ff5565b61543d565b848a01805460ff1916600117905588613a8e565b9201918254613a8e565b9055855163f8eef10f60e01b815294859182905afa928315610bb2577f2386b33461472749e636e4d07c6e2b5e114398809469e25100c5ef910a663f6496600094614426575b5050613b3f92935194859416963385614244565b613b3f9450908161444292903d10611dbf57611db08183610905565b9238614412565b8851631e9acf1760e31b81528890fd5b61447091508d803d10611805576117f58183610905565b38614386565b89516339e067d560e21b81528990fd5b61449c9250803d10611805576117f58183610905565b388e61434b565b6142289192508b3d8d11611805576117f58183610905565b919290926144c7614f40565b5060018060a01b038093169360009285845260209586805260ff60408620541615610f775761451a958793168552600f8352604085209360405180978194829363a646a19360e01b845260048401613f41565b03915afa938415610bb25761453c946040948491612ccc575083525220614e92565b60a0815191015181039081116139e55790565b9061455b9392916144bb565b9081018091116139e557602854613a7f916156a2565b9190826080910312610613578151916020810151916060604083015192015190565b6001600160a01b03909116815260208101919091526001600160801b039091166040820152608060608201819052613a7f92910190613f74565b909194939280156115b9576001600160a01b03848116949092908515610c2a576145f561582c565b61462261460182610a76565b60208a6040978851808096819463a646a19360e01b83528d60048401613f41565b039188165afa908115610bb2576146409260009261420f575061184d565b9261464f600185015460ff1690565b8080614845575b614834578061481b575b61480a57918160809361467a8b8960009b9c9d9686614d4a565b908181118a1461480057509788915b6146ca61469d611cb5611cb560025461064c565b946146bc6146ad60055460801c90565b978b519c8d9360208501613de6565b03601f1981018b528a610905565b6146e98851998a9687958694638a94b05f60e01b865260048601614593565b03925af1928315610bb2576147776005917f05f2eeda0e08e4b437f487c8d7d29b14537d15e3488170dc3de5dbdf8dac4684956000809281926147c7575b506147699061473a614109875460801c90565b60038801556147648a614751611cb560015461064c565b61475c60005461064c565b90339061485c565b600455565b806147b4575b5083546139f9565b918281550190808254116147ac575b156147a2575b50614796836157d6565b519182523391602090a3565b600090553861478c565b808255614786565b6147bf908554613a8e565b84553861476f565b905061476992506147ef915060803d81116147f9575b6147e78183610905565b810190614571565b9093909250614727565b503d6147dd565b9050978891614689565b8451634b3c322760e11b8152600490fd5b5061482d600285015460275490613a8e565b4211614660565b855163224aae4f60e21b8152600490fd5b5061485761106c600487015460ff1690565b614656565b6040516323b872dd60e01b60208201526001600160a01b03928316602482015292909116604483015260648083019390935291815260a08101918183106001600160401b038411176108ca5761232e926040525b906000602091828151910182855af115613a82576000513d61490357506001600160a01b0381163b155b6148e15750565b604051635274afe760e01b81526001600160a01b039091166004820152602490fd5b600114156148da565b6011546001600160a01b031680156149695781156115b95781614932913090339061485c565b61493b8161507a565b6040519081527fe79ffd9a88f13c8c49fb545410401d9877ab90d9dcf7b15d4dc0601993a0d91360203392a2565b604051632506892760e01b8152600490fd5b818102929181159184041417156139e557565b8115614998570490565b634e487b7160e01b600052601260045260246000fd5b6011546001600160a01b0390811615614a20576149ca82614ba9565b908115614a1857601254908316600052601460205260406000205481039081116139e557614a04670de0b6b3a764000091614a0b9361497b565b0491610a28565b5481018091116139e55790565b505050600090565b5050600090565b6001600160a01b03918216815291166020820152606060408201819052613a7f93910191613dc5565b3d15614a7b573d90614a6182610948565b91614a6f6040519384610905565b82523d6000602084013e565b606090565b9261232e93600093613220859461321260018060a01b0360335416956040519485936020850197631318562160e31b895260248601614a27565b600091829161232e9461322060018060a01b0360335416936132126040519384926020840196634b195c9560e11b885260248501613de6565b600054604051630481930d60e21b81526001600160a01b0392831660048201529160209183916024918391165afa908115610bb257600091614b33575090565b613a7f915060203d8111611805576117f58183610905565b6017546001600160a01b039081168015614a1857600092839260405190602082019263c084b10b60e01b845216602482015260248152614b8a816108ea565b51915afa50613a7f614b9a614a50565b60208082518301019101613bf0565b614bbb614bb582614af3565b91614b4b565b81018091116139e55790565b6001600160a01b0381166000818152602080526040902054909491939060ff1615610f77576020604051809663d57dfa1560e01b82528180614c0e87878a60048501613de6565b03915afa928315610bb257613a7f95600094614c36575b50614c309394614d4a565b90614c58565b614c309450614c529060203d8111611805576117f58183610905565b93614c25565b60018210614c9057602554614c6c916156a2565b90670de0b6b3a7640000918281029281840414901517156139e557613a7f9161498e565b50676765c793fa10079d601b1b919050565b909193929360018060a01b038092169160009280845260209182805260409560ff878720541615614d3957614cd5614f40565b5082865283805260ff878720541615614d395791614d179798918493168652600f835286862094875180998194829363a646a19360e01b845260048401613f41565b03915afa8015610bb257614d35958491612ccc575083525220614e92565b5190565b8651630867d69960e11b8152600490fd5b9193929360018060a01b038093169060009180835260209485805260409460ff86862054161561183c57614d7c614f40565b5082855286805260ff86862054161561183c579186979891614dbf9793168552600f835285852093865180988194829363a646a19360e01b845260048401613f41565b03915afa948515610bb257613a7f956128b7958491612ccc575083525220614e92565b805190606060055460801c91015181039081116139e557614bbb90826156c0565b9060209081838203126106135782516001600160401b0393848211610613570181601f820112156106135780519384116108ca578360051b9060405194614e4c85840187610905565b85528380860192820101928311610613578301905b828210614e6f575050505090565b81518152908301908301614e61565b80518210156119f95760209160051b010190565b90604051614e9f816108cf565b60a0600582948054845260ff60018201541615156020850152600281015460408501526003810154606085015260ff600482015416151560808501520154910152565b6040519061010082016001600160401b038111838210176108ca576040528160e06000918281528260208201528260408201528260608201528260808201528260a08201528260c08201520152565b6001600160a01b039091169052565b60405190614f4d826108cf565b8160a06000918281528260208201528260408201528260608201528260808201520152565b9192909260018060a01b038093169360009285845260209586805260ff60408620541615610f7757614fc8958793168552600f8352604085209360405180978194829363a646a19360e01b845260048401613f41565b03915afa938415610bb257613a7f946040948491612ccc575083525220614e92565b6040519061012082016001600160401b038111838210176108ca57604052816101006000918281528260208201528260408201528260608201528260808201528260a08201528260c08201528260e08201520152565b61507561232e939261506760405194859263a9059cbb60e01b602085015260248401613e8e565b03601f198101845283610905565b6148b0565b6011546001600160a01b031615614969576003548015613dc157811580156150a157505050565b670de0b6b3a76400008084029384041417156139e5576150c09161498e565b6012549081018091116139e55760125542601355565b156150dd57565b60405162461bcd60e51b8152602060048201526012602482015271189bdc9c9bddc818d85c081c995858da195960721b6044820152606490fd5b92909161512b611cb5611cb560025461064c565b9060405180926318160ddd60e01b825281600460209586935afa8015610bb257846151619161516b9360009161521a5750613a8e565b602c5410156150d6565b60405163d57dfa1560e01b815282818061518a85893360048501613de6565b03816001600160a01b038a165afa928315610bb2576000936151fb575b505081156151e9576151d0936151c36151cb93602554906156a2565b953390614ca2565b613a8e565b116151d757565b604051630369fbd160e51b8152600490fd5b604051638dc8d9b360e01b8152600490fd5b615212929350803d10611805576117f58183610905565b9038806151a7565b6152319150863d8811611805576117f58183610905565b38611fe2565b60008061232e9260018060a01b036034541690604051602081019163489493f160e11b8352602482015260248152613220816108ea565b6011546001600160a01b039190821615613dc15761528b816149ae565b908161529657505050565b816152e87fe34918ff1c7084970068b53fd71ad6d8b04e9f15d3886cbf006443e6cdc52ea693838660209516968760005260158652600060408120556012546152de83610a0e565b5560115416615040565b604051908152a2565b60009060033d116152fe57565b905060046000803e60005160e01c90565b600060443d10613a7f57604051600319913d83016004833e81516001600160401b03918282113d60248401111761536c57818401948551938411615374573d8501016020848701011161536c5750613a7f92910160200190610905565b949350505050565b50949350505050565b6000809160233d1161538b57565b9150506020600460003e600051600191565b156153a55750565b805190811561061357602001fd5b60008061232e9260018060a01b036034541690604051602081019163076d081560e01b8352602482015260248152613220816108ea565b60345460408051633fa5758d60e11b60208201908152600482529290918201906001600160a01b03166001600160401b038211838310176108ca5761232e93600093849360405251915af461322c614a50565b6018546001600160a01b03906154529061064c565b168015610c2a5781156115b9576154d59160209161547160015461064c565b604051636033e31560e01b81526001600160a01b03909116600482015233602482015260448101929092527f65991ea5d80f7b6dc8c32648f59c5a653beb10caddae8fefad6966b35a0a65f160648301529092839190829060009082906084820190565b03925af18015610bb2576154e65750565b6154fd9060203d8111610bab57610b9d8183610905565b50565b6018546001600160a01b03906155159061064c565b1615610c2a576155368161552d611cb560015461064c565b3090339061485c565b80615548611cb5611cb560015461064c565b61555360185461064c565b604051809263095ea7b360e01b8252816000816155776020998a9760048401613e8e565b03925af1908115610bb25760009161564f575b501561563d5781615615916155a6611cb5611cb560185461064c565b6155b160015461064c565b604051636033e31560e01b81526001600160a01b03909116600482015230602482015260448101929092527f42fd249bdce4c4255579b56a79389d6d679ba17c7b7c848ee5c0a2ffcf354cf160648301529092839190829060009082906084820190565b03925af18015610bb257615627575050565b816154fd92903d10610bab57610b9d8183610905565b6040516340b27c2160e11b8152600490fd5b6156669150833d8511610bab57610b9d8183610905565b3861558a565b7e83126e978d4fdf3b645a1cac083126e978d4fdf3b645a1cac083126e978d458111610613576113886101f46127109202010490565b81611388190481111582151715610613576127109102611388010490565b8115676765c793fa10079d601a1b19839004821115171561061357676765c793fa10079d601b1b9102676765c793fa10079d601a1b010490565b615745600454615708615e72565b50615711615e2b565b5061571e81600354615b9a565b61573881600954600a54600b54600c5491600d5493615ae7565b80600855600e5491615abd565b60075561575061582c565b7f48f4f83c2f1843e8fd7ef13ffcff40fca5055dc1b9b074cd9dd0f9a8a8e09dd960075460085490613f1b6040519283928361290a565b8061579c575b50615745600454615708615e72565b6003548181106157c4576157b56141096157bb936157f9565b906139f9565b6003553861578d565b60405163bb55fd2760e01b8152600490fd5b806157ea5750615745600454615708615e72565b6157bb906128bc614109600354925b6001600160801b039081811161580d571690565b604490604051906306dfcc6560e41b8252608060048301526024820152fd5b61585261584c61584260065464ffffffffff1690565b64ffffffffff1690565b426139f9565b600181106154fd57615868614109600554613281565b6001811061594857816158a96158876158c2936158e79560075461595a565b600580546001600160801b0319166001600160801b0392909216919091179055565b600854906158bc61410960055460801c90565b9161599e565b600580546001600160801b031660809290921b6001600160801b031916919091179055565b6006805464ffffffffff19164264ffffffffff16179055600554604080516001600160801b038316815260809290921c60208301527ff92a3abee06d57c996e7e19eb34560241fdc1fe67e9ebd503177710bf9fd8204919081908101613f1b565b604051630a1cf3ed60e21b8152600490fd5b9161596b61597092613a7f94615975565b6156c0565b6157f9565b6301e13380916159849161497b565b04676765c793fa10079d601b1b9081018091116139e55790565b916159af61597092613a7f946159b5565b906156c0565b60018210614c9057744f3a68dbc8f03f243baf513267aa9a3ee524f8e028811161061357613a7f916301e1338062f099c06159fe93676765c793fa10079d601b1b0201046156c0565b615a28565b8160011c90676765c793fa10079d601b1b908183190481118415176106135702010490565b8015615aad57676765c793fa10079d601c1b81800204906b09b18ab5df7180b6b800000082820204676765c793fa10079d601d1b818302046b1027e72f1f1281308800000081840204906b1363156bbee3016d700000008285020492676765c793fa10079d601b1b956b169e43a85eb381aa5800000085870204950101010101010190565b50676765c793fa10079d601b1b90565b909192600111614a1857615adb91615ad4916156c0565b91826156c0565b81039081116139e55790565b91949290948186841191821592615b8f575b8215615b84575b8215615b79575b5050615b6757838311615b30575091615b2b6128bc926159af86613a7f97966139f9565b615a03565b9350918082039182116139e557676765c793fa10079d601b1b9081039081116139e557615b2b6128bc926159af85613a7f976139f9565b60405163abc83fed60e01b8152600490fd5b101590508138615b07565b878111159250615b00565b818510159250615af9565b60018110614c90578181018091116139e5576001600160801b0391615bc29161597091615a03565b1690565b919082608091031261061357615bdb82613a5e565b916020810151916060604083015192015190565b6001600160a01b0391821681529116602082015260408101919091526001600160801b03909116606082015260800190565b600181106115b957600091615c3461582c565b615c5082615c46611cb560015461064c565b61475c865461064c565b6080615c8f615c65611cb5611cb5875461064c565b615c70600554613281565b60405196878094819363b3f1c93d60e01b835289893060048601615bef565b03925af1928315610bb257600093615cdb575b5082600080516020615eb083398151915291615cbd846157d6565b615cd560405192839260018060a01b0316958361290a565b0390a290565b600080516020615eb0833981519152919350615d0d9060803d8111615d18575b615d058183610905565b810190615bc6565b505090509290615ca2565b503d615cfb565b90816060910312610613578051916040602083015192015190565b91600183106115b9576060615d8e93615d5161582c565b615d62611cb5611cb560005461064c565b615d6d600554613281565b916000604051809881958294636b81068560e11b84528a8060048601615bef565b03925af1918215610bb2576000938493615df3575b50615dad83615787565b6040516001600160a01b03909116907ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b5689080615dea87878361290a565b0390a281929190565b909250615e1891935060603d8111615e24575b615e108183610905565b810190615d1f565b93919050929138615da3565b503d615e06565b64ffffffffff6006541642034281116139e55760018110615e6257613a7f9061596b6007549160018060801b036005541692615975565b506005546001600160801b031690565b64ffffffffff6006541642034281116139e55760018110615ea857615e9c613a7f916008546159b5565b60055460801c906156c0565b506004549056fe90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a1571840dc4906352362b0cdaf79870196c8e42acafade72d5d5a6d59291253ceb1df980d21d8c7bb34800e668dbe003299093bac8e693614151d3c57f73f98a93d063386e75a280368ce68f5e39db7d7a3f09737ca4d289d9345a5f4968ff76955c4cede9b2b63ba72d39d2f630b4b742e1cada59d7a073ac4e10da9ac7b2eb1053a6357012c1a3ae0a17d304c9920310382d968ebcc4b1771f41c6b304205b570ba279271fb7bbf76a6f3df3cc57bf80647fcafdea60ec3383d90f459de74e7c08be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0a2646970667358221220a4c79e496b929859813f285292141f0777525deaf07047a598c9d91d6af9030064736f6c634300081400332f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d",
3485
+ "deployedBytecode": "0x6080604052600436101561001257600080fd5b60003560e01c806301ffc9a7146105bd57806302768de4146105b8578063048c661d146105b3578063086c33e1146105ae57806309bf1e73146105a95780630ab30d8a146105a45780630c34b9141461059f5780630c42dcaf1461059a5780630c679a7b14610595578063150b7a0214610590578063152f15841461058b57806316c621e0146105865780631a7fd200146105815780631d4bf4a01461057c5780631d8557d71461057757806322f2caf1146105725780632445eee51461056d578063248a9ca31461056857806327156a68146105635780632a5bf6d21461055e5780632a7e7849146105595780632ab414fc146105545780632e1a7d4d1461054f5780632f17682b146104be5780632f2ff15d1461054a57806332128b031461054557806334176a6d1461054057806336568abe1461053b5780633f4ba83a146105365780634df9d6ba146105315780634ef501ac1461052c57806353f35770146105275780635c975abb146105225780636061ffc31461051d578063618295df14610518578063640bc491146105135780636817031b1461050e578063715018a614610509578063745400c91461050457806375417da6146104ff578063768bab45146104fa5780637bc7780b146104f55780638429d51f146104f05780638456cb59146104eb578063883c6b24146104e657806389035730146104e1578063893a5372146104dc5780638ad7cacc146104d75780638aee8127146104d25780638d7081e4146104cd5780638da5cb5b146104c85780638def3ec2146104c35780638f7e8498146104be57806391d14854146104b95780639632b92a146104b457806398c2b108146104af57806398d721e0146104aa5780639daa54b41461042d578063a013f9c6146104a5578063a217fddf146104a0578063a42dce801461049b578063a51e896314610496578063a90d728f14610491578063a9bf805c1461048c578063aaf6379914610487578063b21cfc7114610482578063b6b55f251461047d578063b82e16e314610478578063b88a802f14610473578063ba7466941461046e578063c415b95c14610469578063c4f8911c14610464578063c6d6916c1461045f578063c89109131461045a578063c939ad6114610455578063cac89c5c14610450578063cd3293de1461044b578063d017e97814610446578063d17e988314610441578063d547741f1461043c578063de597d5b14610437578063e5711e8b14610432578063e65896c91461042d578063ec915ee614610428578063ef16b0e014610423578063ef5bac251461041e578063f2fde38b14610419578063f36c8f5c14610414578063fbf4a6121461040f578063fbfa77cf1461040a5763fe64cc0b1461040557600080fd5b6137b9565b613790565b61376d565b613744565b6136ca565b613606565b613536565b6134dc565b6127f8565b61344b565b61338a565b613348565b613321565b613305565b61328d565b61323c565b61319a565b61315a565b613074565b612fa5565b612f7c565b612e7f565b612e4d565b612da4565b612cfa565b612c0e565b612b98565b612b6f565b612a83565b6129f3565b612980565b612964565b61291b565b612785565b6126ca565b61260f565b6125cb565b6115cb565b612510565b6124e7565b6124cb565b61246c565b612330565b612286565b6121fc565b6121d3565b612179565b612131565b612113565b612017565b611f57565b611f33565b611ee4565b611c80565b611c57565b611b3b565b611b04565b611ae1565b611a87565b6119fe565b6119a1565b611937565b6118ec565b61185c565b61164e565b61160c565b6114e7565b610f89565b610ebc565b610e5d565b610e36565b610e07565b610d23565b610c73565b610c5a565b610c3c565b610bb7565b610ae9565b610aa7565b610963565b61085a565b61083d565b61077d565b61075c565b61073e565b61071a565b61066b565b610623565b346106135760203660031901126106135760043563ffffffff60e01b811680910361061357602090637965db0b60e01b8114908115610602575b506040519015158152f35b6301ffc9a760e01b149050386105f7565b600080fd5b600091031261061357565b34610613576000366003190112610613576020604051600080516020615f708339815191528152f35b6001600160a01b031690565b6001600160a01b03909116815260200190565b34610613576000366003190112610613576017546040516001600160a01b039091168152602090f35b6001600160a01b0381160361061357565b9181601f84011215610613578235916001600160401b038311610613576020838186019501011161061357565b6060600319820112610613576004356106ea81610694565b916024356106f781610694565b91604435906001600160401b03821161061357610716916004016106a5565b9091565b3461061357602061073661072d366106d2565b92919091614bc7565b604051908152f35b346106135760003660031901126106135760206040516203f4808152f35b3461061357600036600319011261061357602060055460801c604051908152f35b3461061357600036600319011261061357610796614ee2565b506108396107a2610928565b600754815260085460208201526009546040820152600a546060820152600b546080820152600c5460a0820152600d5460c0820152600e5460e08201526040519182918291909160e080610100830194805184526020810151602085015260408101516040850152606081015160608501526080810151608085015260a081015160a085015260c081015160c08501520151910152565b0390f35b34610613576000366003190112610613576020604051611f408152f35b346106135760203660031901126106135760043561087781610694565b61087f613904565b601680546001600160a01b0319166001600160a01b0392909216919091179055005b634e487b7160e01b600052604160045260246000fd5b6001600160401b0381116108ca57604052565b6108a1565b60c081019081106001600160401b038211176108ca57604052565b606081019081106001600160401b038211176108ca57604052565b601f909101601f19168101906001600160401b038211908210176108ca57604052565b6040519061010082016001600160401b038111838210176108ca57604052565b6001600160401b0381116108ca57601f01601f191660200190565b346106135760803660031901126106135761097f600435610694565b61098a602435610694565b6064356001600160401b0381116106135736602382011215610613578060040135906109b582610948565b916109c36040519384610905565b8083523660248284010111610613576000928160246020940184830137010152604051630a85bd0160e11b8152602090f35b6001600160a01b03166000908152602080526040902090565b6001600160a01b0316600090815260146020526040902090565b6001600160a01b0316600090815260156020526040902090565b6001600160a01b0316600090815260106020526040902090565b6001600160a01b0316600090815260226020526040902090565b6001600160a01b03166000908152600f6020526040902090565b9060018060a01b0316600052602052604060002090565b3461061357602036600319011261061357600435610ac481610694565b60018060a01b03166000526023602052602060ff604060002054166040519015158152f35b3461061357602036600319011261061357610b02613bcd565b60405163fe575a8760e01b81523360048201526020816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa908115610bb257600091610b84575b50610b7257610b6660043561490c565b610b706001603055565b005b604051632652747360e21b8152600490fd5b610ba5915060203d8111610bab575b610b9d8183610905565b810190613a6b565b38610b56565b503d610b93565b613a82565b3461061357602036600319011261061357600435610bd481610694565b610bdc613904565b6001600160a01b03908116908115610c2a57603380546001600160a01b031981168417909155167f748f1f5793b18b83e17ec58dd942771a149a2da21e05fe50ced8c278143c6d71600080a3005b6040516303988b8160e61b8152600490fd5b34610613576000366003190112610613576020601a54604051908152f35b3461061357600036600319011261061357610b7061582c565b3461061357602036600319011261061357600435610c9081610694565b610c98613904565b6001600160a01b03811660008181526020805260408120549092919060ff16610d115782526020805260408220805460ff191660011790557fa77e7c594c11a0d5d9d8e6a9132ac0db912dc0f34f5fb7d94860fe38d16410bd90610d0b90610cff8161396e565b60405191829182610658565b0390a180f35b60405163dc37823360e01b8152600490fd5b346106135760803660031901126106135760048035610d4181610694565b6024356001600160401b03811161061357610d5f90369084016106a5565b6044359160643593610d7085610694565b610d78613bcd565b610d80613baf565b8315610df6576001600160a01b03818116600090815260208052604090205460ff1615610de55760ff6024541615610dd457851615610dc357610b6695506145cd565b6040516303988b8160e61b81528690fd5b6040516312cefcd560e31b81528790fd5b604051630867d69960e11b81528790fd5b60405163162908e360e11b81528690fd5b346106135760203660031901126106135760043560005260326020526020600160406000200154604051908152f35b34610613576020366003190112610613576020610736600435610e5881610694565b614ba9565b34610613576020366003190112610613576020610736600435610e7f81610694565b614af3565b90604060031983011261061357600435610e9d81610694565b91602435906001600160401b03821161061357610716916004016106a5565b3461061357610eca36610e84565b90610ed3613bcd565b610edb613baf565b6001600160a01b03838116600090815260208052604090205460ff1615610f775760206024916040519283809263fe575a8760e01b82523360048301527f0000000000000000000000000000000000000000000000000000000000000000165afa908115610bb257600091610f59575b50610b7257610b6692613e08565b610f71915060203d8111610bab57610b9d8183610905565b38610f4b565b604051630867d69960e11b8152600490fd5b3461061357604080600319360112610613576004908135600d8110156106135760243592610fb682613930565b600a8214908180156114d4575b80156114c3575b80156114b0575b801561149d575b801561148a575b8015611478575b8015611465575b8015611452575b610ffd84613930565b600684148091811561143d575b8115611428575b8115611413575b156113a45750600080516020615f70833981519152600052603260205261107061106c611065337f4be98a500fedc87dbf83b0f2e386ce313ece8458dab0590898ef9a4135d19214610a90565b5460ff1690565b1590565b611395575b60009261108185613930565b156110e45750905083156110d657602b5484116110c857506110c3600080516020615f1083398151915293602c54936110b982602c55565b5193849384613950565b0390a1005b8251635bf62a1160e01b8152fd5b8251635b9ad34160e11b8152fd5b6110ed84613930565b600984036111245750905083156110d657506110c3600080516020615f1083398151915293602b549361111f82602b55565b6110b9565b61112d84613930565b83611155575050506110c3600080516020615f10833981519152936025549361111f82602555565b61115e84613930565b60018403611189575050506110c3600080516020615f10833981519152936026549361111f82602655565b61119284613930565b600284036111e95750905062015180841080156111dd575b6111cf57506110c3600080516020615f10833981519152936027549361111f82602755565b825163d7c43e0f60e01b8152fd5b5062093a8084116111aa565b6111f284613930565b6003840361121d575050506110c3600080516020615f1083398151915293602a549361111f82602a55565b61122984959395613930565b83820361127857506001851161126a57506024805461ff0019166001861460081b61ff0016179055600080516020615f10833981519152936110c3916110b9565b905163af979eb560e01b8152fd5b61128184613930565b600584036112c057506001851161126a5750836110c39161111f6001600080516020615f10833981519152971460ff8019602454169115151617602455565b600080516020615f1083398151915295929491506112dd84613930565b156112f457506110c3906028549361111f82602855565b6112fd83613930565b6007830361131757506110c390600e549361111f82600e55565b61132083613930565b6008830361133a57506110c3906029549361111f82602955565b61134383613930565b600b830361135d57506110c390602d549361111f82602d55565b9261136783613930565b600c831461137a575b906110c3916110b9565b92506110c390602e549361138d82602e55565b909150611370565b508351634ca8886760e01b8152fd5b1561140457600080516020615ed083398151915260005260326020526113f061106c611065337f08ae08a1778cb01871246af592e3e907ec9ba7bc1cc0b308a58e75fd2ee1dfba610a90565b1561107557508351634ca8886760e01b8152fd5b508351630309cb8760e51b8152fd5b905061141e85613930565b600c851490611018565b905061143385613930565b6008851490611011565b905061144885613930565b600785149061100a565b5061145c83613930565b600b8314610ff4565b5061146f83613930565b60058314610fed565b5061148283613930565b808314610fe6565b5061149483613930565b60038314610fdf565b506114a783613930565b60028314610fd8565b506114ba83613930565b60018314610fd1565b506114cd83613930565b8215610fca565b506114de83613930565b60098314610fc3565b3461061357602036600319011261061357600435611503613bcd565b61150b613baf565b80156115b95760ff60245460081c166115a7576115569061152b3361526e565b6017546001600160a01b03163303611598575b61154661582c565b61154f81615237565b3390615d3a565b50506115606153ea565b60405190815233907f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a942436490602090a2610b706001603055565b6115a28133613d4e565b61153e565b6040516370a7336d60e11b8152600490fd5b60405163162908e360e11b8152600490fd5b34610613576020366003190112610613576004356115e881610694565b60018060a01b031660005260208052602060ff604060002054166040519015158152f35b3461061357604036600319011261061357610b7060243560043561162f82610694565b8060005260326020526116496001604060002001546137d5565b613816565b346106135761165c36610e84565b611667929192613bcd565b61166f613baf565b60018060a01b038216600093818552602080805260409460ff86882054161561183c5761169a614f40565b506116b2826116ab87863386614f72565b0151151590565b61182b57906116d0858489979695946116c961582c565b3390614ca2565b80611739575b5050813b1561173557836116ff95518096819582946312ede2c560e21b84523360048501613de6565b03925af18015610bb25761171c575b506117196001603055565b80f35b8061172961172f926108b7565b80610618565b3861170e565b8380fd5b865163d57dfa1560e01b8152949550929391929080838061175f89883360048501613de6565b0381885afa928315610bb257889361180c575b508651633de6b58d60e21b8152928184806117928a893360048501613de6565b0381895afa908115610bb2576117b9946117b4938b936117dd575b50506139f9565b614c58565b602654116117cc579084929138806116d6565b83516302c9375f60e21b8152600490fd5b6117fd929350803d10611805575b6117f58183610905565b810190613bf0565b9038806117ad565b503d6117eb565b816118249294503d8511611805576117f58183610905565b9138611772565b85516367c11db560e01b8152600490fd5b8551630867d69960e11b8152600490fd5b90600052602052604060002090565b346106135760403660031901126106135760043561187981610694565b6001600160a01b03166000908152600f60209081526040808320602435845282529182902080546001820154600283015460038401546004850154600590950154875194855260ff93841615159685019690965295830152606082019490945292161515608083015260a082015260c090f35b346106135760403660031901126106135760243561190981610694565b336001600160a01b0382160361192557610b7090600435613891565b60405163334bd91960e11b8152600490fd5b3461061357600036600319011261061357611950613904565b60315460ff81161561198f5760ff19166031557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6020604051338152a1005b604051638dfc202b60e01b8152600490fd5b346106135760203660031901126106135760206107366004356119c381610694565b6149ae565b634e487b7160e01b600052603260045260246000fd5b6021548110156119f957602160005260206000200190600090565b6119c8565b3461061357602036600319011261061357600435602154811015610613576021600052600080516020615f5083398151915201546040516001600160a01b039091168152602090f35b90606060031983011261061357600435611a6081610694565b91602435906001600160401b03821161061357611a7f916004016106a5565b909160443590565b3461061357611a9536611a47565b90611aa1939293613bcd565b611aa9613baf565b81156115b9576001600160a01b038316600090815260208052604090205460ff1615610f7757611ada9333936145cd565b6001603055005b3461061357600036600319011261061357602060ff603154166040519015158152f35b3461061357600036600319011261061357606060018060a01b03601154166012546013549060405192835260208301526040820152f35b3461061357602036600319011261061357600435611b5881610694565b611b60613904565b611b6f61106c611065836109f5565b610f7757611b89611b7f826109f5565b805460ff19169055565b6001600160a01b03908082169060005b60215480821015611c3a578385611bc7611bb2856119de565b905460039190911b1c6001600160a01b031690565b1614611bdc5750611bd7906139d6565b611b99565b600080516020615ef083398151915294506110c3935090611c13611c0d611bb2611c08611c32956139ea565b6119de565b916119de565b90919082549060031b9160018060a01b03809116831b921b1916179055565b610cff613a06565b5050600080516020615ef083398151915292506110c39150610cff565b34610613576000366003190112610613576033546040516001600160a01b039091168152602090f35b346106135760208060031936011261061357600435611c9e81610694565b611ca6613904565b601f611cba611cb5825461064c565b61064c565b6001600160a01b039283169390838116808614159081611eda575b50611dc6575b50600481611d14611cb5611cf2611cb5875461064c565b601f80546001600160a01b0319166001600160a01b038b16179055955461064c565b6040516338d52e0f60e01b815292839182905afa918215610bb257600092611d99575b505082611d48611cb560015461064c565b9116141580611d90575b611d7e57167f483bdedaaf23706a9800ac1af0d852b34927780d79f9d6ba60a80c7cad75ea39600080a3005b604051631b3b488360e11b8152600490fd5b50821515611d52565b611db89250803d10611dbf575b611db08183610905565b81019061422f565b3880611d37565b503d611da6565b81604051809263ce96cb7760e01b82528180611de53060048301610658565b03915afa60009181611ebb575b50611ead57506001611e026152f1565b806308c379a014611e8c57634e487b7114611e54575b611e23575b38611cdb565b611e2b614a50565b50611e3c611cb5611cb5845461064c565b600080516020615f30833981519152600080a2611e1d565b611e5c61537d565b5015611e1857506000611e75611cb5611cb5855461064c565b600080516020615f308339815191528280a2611e18565b50611e9561530f565b15611e1857506000611e75611cb5611cb5855461064c565b611eb6906153b3565b611e1d565b611ed3919250833d8511611805576117f58183610905565b9038611df2565b9050151538611cd5565b3461061357600080600319360112611f3057611efe613904565b602f80546001600160a01b0319811690915581906001600160a01b0316600080516020615f908339815191528280a380f35b80fd5b3461061357602036600319011261061357611f4c613baf565b610b70600435613c7b565b346106135760208060031936011261061357600490813591611f7883610694565b6000918293602154925b838610611f9457604051858152602090f35b90919293611faa611cb5611cb5611bb2896119de565b84604051809263572bf25760e01b82528180611fc889898301610658565b03915afa8015610bb257611fee92611fe892600092611ff8575b50613a8e565b956139d6565b9493929190611f82565b612010919250873d8911611805576117f58183610905565b9038611fe2565b346106135760403660031901126106135760043561203481610694565b61203c613904565b61204461582c565b6001600160a01b038116156120b85760008091612067611cb5611cb5845461064c565b90813b156120b45782916120959160405194858094819363768bab4560e01b83526024359060048401613e8e565b03925af18015610bb2576120a7575080f35b80611729611719926108b7565b5050fd5b60405162461bcd60e51b815260206004820152602d60248201527f4c656e64696e67506f6f6c3a20526563697069656e742063616e6e6f7420626560448201526c207a65726f206164647265737360981b6064820152608490fd5b34610613576000366003190112610613576020600954604051908152f35b346106135760003660031901126106135760c0601954601a54601b54601c54601d5491601e5493604051958652602086015260408501526060840152608083015260a0820152f35b3461061357600036600319011261061357612192613904565b61219a613baf565b600160ff1960315416176031557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586020604051338152a1005b34610613576000366003190112610613576005546040516001600160801b039091168152602090f35b3461061357600036600319011261061357610180602454602554602654602754602854602954602a5490602b5492602c5494602d5496602e549860ff6040519b81811615158d5260081c16151560208c015260408b015260608a0152608089015260a088015260c087015260e0860152610100850152610120840152610140830152610160820152f35b34610613576000366003190112610613576034546040516001600160a01b039091168152602090f35b61232e909291926101208101938051825260208101516020830152604081015160408301526060810151151560608301526080810151608083015260a081015160a083015260c0810151151560c083015261231960e082015160e084019060018060a01b03169052565b610100908101516001600160a01b0316910152565b565b34610613576004612340366106d2565b91909261234b614fea565b5060018060a01b038116908160005260209283805260409460ff8660002054161561245c57916060612400926123ec879695612385614fea565b9a61238e614f40565b5061239b82828689614f72565b936123b48d876123ad8d890151151590565b1515910152565b8c60808d87015191015284518d526123d58d60c06123ad6080890151151590565b8c8a6123e38585858c614d4a565b91015286614bc7565b888a0152015160a088015260e08701614f31565b835163f8eef10f60e01b815295869182905afa8015610bb257610839946124359260009261243f575b50506101008401614f31565b51918291826122af565b6124559250803d10611dbf57611db08183610905565b3880612429565b8551630867d69960e11b81528890fd5b346106135760203660031901126106135760043561248981610694565b612491613904565b601154906001600160a01b03908183166124b9576001600160a01b0319909216911617601155005b60405163b6de9a7160e01b8152600490fd5b346106135760206107366124de366106d2565b929190916144bb565b3461061357600036600319011261061357602f546040516001600160a01b039091168152602090f35b346106135761251e36611a47565b91612527613bcd565b61252f613baf565b6001600160a01b03848116600090815260208052604090205460ff1615610f775760206024916040519283809263fe575a8760e01b82523360048301527f0000000000000000000000000000000000000000000000000000000000000000165afa908115610bb2576000916125ad575b50610b7257610b669361426f565b6125c5915060203d8111610bab57610b9d8183610905565b3861259f565b3461061357604036600319011261061357602060ff6126036024356125ef81610694565b600435600052603284526040600020610a90565b54166040519015158152f35b346106135761261d36610e84565b90612626613bcd565b61262e613baf565b6001600160a01b03838116600090815260208052604090205460ff1615610f775760206024916040519283809263fe575a8760e01b82523360048301527f0000000000000000000000000000000000000000000000000000000000000000165afa908115610bb2576000916126ac575b50610b7257610b6692614aba565b6126c4915060203d8111610bab57610b9d8183610905565b3861269e565b34610613576126d8366106d2565b916126e1613bcd565b6126e9613baf565b6001600160a01b03848116600090815260208052604090205460ff1615610f775760206024916040519283809263fe575a8760e01b82523360048301527f0000000000000000000000000000000000000000000000000000000000000000165afa908115610bb257600091612767575b50610b7257610b6693614a80565b61277f915060203d8111610bab57610b9d8183610905565b38612759565b34610613576020366003190112610613576004356127a281610694565b6127aa613904565b6001600160a01b03908116908115610c2a57601780546001600160a01b031981168417909155167f593eaf5e0e1afc1c041a664a437fdae719a628836785d06572b008e6ca5c189d600080a3005b34610613576020366003190112610613576004803561281681610694565b6000908190602154905b81831061283257602084604051908152f35b909192612847611cb5611cb5611bb2876119de565b92600060405180956371e078ab60e01b82528180612867888c8301610658565b03915afa938415610bb2576000946128e7575b506000915b84518310156128ce576128c26128c8916128bc6128b76128b26128a189610a76565b6128ab898c614e7e565b519061184d565b614e92565b614de2565b90613a8e565b926139d6565b9161287f565b95929350936128dd91506139d6565b9193929093612820565b61290391943d8091833e6128fb8183610905565b810190614e03565b923861287a565b908152602081019190915260400190565b346106135760203660031901126106135760043561293881610694565b60018060a01b03166000526022602052604060002060018154910154906108396040519283928361290a565b3461061357600036600319011261061357602060405160008152f35b346106135760203660031901126106135760043561299d81610694565b6129a5613904565b6001600160a01b03908116908115610c2a57601880546001600160a01b031981168417909155167f5d16ad41baeb009cd23eb8f6c7cde5c2e0cd5acf4a33926ab488875c37c37f38600080a3005b3461061357600080600319360112611f305760405163fe575a8760e01b81523360048201526020816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa908115610bb2578291612a65575b50610b7257611719613ea9565b612a7d915060203d8111610bab57610b9d8183610905565b38612a58565b34610613576000366003190112610613576018546001600160a01b039081163303612b5e57601f541615612b2a57610839612ac2611cb560015461064c565b612aee601a548092612ad342601b55565b612add6000601a55565b612ae860185461064c565b90615040565b6040518181527f7edfb0d5d58c6a3d398df94a9bdfa2b33f3fa42ae40d72ebdc717d2db3953ee590602090a16040519081529081906020820190565b60405162461bcd60e51b815260206004820152600c60248201526b139bc81d985d5b1d081cd95d60a21b6044820152606490fd5b6040516282b42960e81b8152600490fd5b34610613576000366003190112610613576016546040516001600160a01b039091168152602090f35b3461061357612bca6020612bab366106d2565b60405163d57dfa1560e01b815295869493859384939160048501613de6565b03916001600160a01b03165afa8015610bb257602091600091612bf1575b50604051908152f35b612c089150823d8111611805576117f58183610905565b38612be8565b3461061357612c1c366106d2565b6001600160a01b03938416600081815260208080526040808320549097919692959493929060ff1615612ce957612c51614f40565b5082865286805260ff888720541615612ce957168452600f8552858420865163a646a19360e01b81529493909286928692909183918291612c959160048401613f41565b03915afa938415610bb257612cb79486948491612ccc575b5083525220614e92565b6108396060820151915192519283928361290a565b612ce39150823d8411611805576117f58183610905565b38612cad565b8751630867d69960e11b8152600490fd5b3461061357602036600319011261061357600435612d16613bcd565b612d1e613baf565b80156115b95760405163fe575a8760e01b81523360048201526020816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa908115610bb257600091612d86575b50610b7257610b6690613a9b565b612d9e915060203d8111610bab57610b9d8183610905565b38612d78565b3461061357600080600319360112611f3057604051809160215490818352602080930180926021835284832090835b818110612e305750505084612de9910385610905565b60405193838594850191818652518092526040850193925b828110612e1057505050500390f35b83516001600160a01b031685528695509381019392810192600101612e01565b82546001600160a01b031684529286019260019283019201612dd3565b3461061357600036600319011261061357612e66613bcd565b612e6f3361526e565b6001603055602060405160018152f35b3461061357612e8d366106d2565b9291612e97614f40565b5060018060a01b038093169360009480865260209485805260409360ff858920541615612f6b5791612eec93918793168852600f835284882095855180958194829363a646a19360e01b845260048401613f41565b03915afa908115610bb2578560a094612f1593859360c09991612f4e575b508252865220614e92565b908051938251855280830151151590850152808201519084015260608101516060840152608081015115156080840152015160a0820152f35b612f659150883d8a11611805576117f58183610905565b38612f0a565b8451630867d69960e11b8152600490fd5b34610613576000366003190112610613576018546040516001600160a01b039091168152602090f35b3461061357602036600319011261061357601654600435906001600160a01b03163303612b5e5760018110613062576009549081613020575b7fd45d1eb66419c036e2fa401916c7db417696f889cf4ab8ca92272327e8e1c83e9161300982600955565b6130116156fa565b6110c36040519283928361290a565b6130298261566c565b828211156130535761303b83836139f9565b1115612fde57604051631a8b543360e21b8152600490fd5b61305d82846139f9565b61303b565b60405163824c180760e01b8152600490fd5b346106135760203660031901126106135760043561309181610694565b6000546001600160a01b03163303613115576130ac81614ba9565b806130c2575b506130bf60125491610a0e565b55005b6130e56130f3916130df6012546130d886610a0e565b54906139f9565b9061497b565b670de0b6b3a7640000900490565b80156130b25761310d61310583610a28565b918254613a8e565b9055386130b2565b60405162461bcd60e51b815260206004820152601e60248201527f4f6e6c792052546f6b656e2063616e20757064617465207265776172647300006044820152606490fd5b346106135760203660031901126106135760043561317781610694565b60018060a01b031660005260106020526020600160406000200154604051908152f35b34610613576131a8366106d2565b90916131b2613bcd565b6017546001600160a01b03929083163303612b5e5760009483811686526020805260ff60408720541615610f77576132329461322087959461321287966033541695604051948593602085019763c939ad6160e01b895260248601614a27565b03601f198101835282610905565b51915af461322c614a50565b9061539d565b6117196001603055565b34610613576000366003190112610613576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b6001600160801b031690565b346106135760003660031901126106135761010060018060a01b0380600054169080600154169060025416600354600454906005549264ffffffffff6006541694604051968752602087015260408601526060850152608084015260018060801b03811660a084015260801c60c083015260e0820152f35b34610613576020610736613318366106d2565b92919091614d4a565b3461061357602036600319011261061357602061073660043561334381610694565b614b4b565b3461061357604036600319011261061357610b7060243560043561336b82610694565b8060005260326020526133856001604060002001546137d5565b613891565b346106135761339836611a47565b916133a1613bcd565b6133a9613baf565b82156115b9576001600160a01b03848116600090815260208052604090205460ff1615610f775760206024916040519283809263fe575a8760e01b82523360048301527f0000000000000000000000000000000000000000000000000000000000000000165afa908115610bb25760009161342d575b50610b7257610b6693613ff5565b613445915060203d8111610bab57610b9d8183610905565b3861341f565b346106135760603660031901126106135760043561346881610694565b6024359061347582610694565b61347d613904565b6000546001600160a01b03918216911681146134a057610b709160443591615040565b60405162461bcd60e51b815260206004820152601460248201527321b0b73737ba103932b9b1bab290292a37b5b2b760611b6044820152606490fd5b3461061357600036600319011261061357610100600754600854600954600a54600b54600c5491600d5493600e5495604051978852602088015260408701526060860152608085015260a084015260c083015260e0820152f35b346106135760803660031901126106135760043561355381610694565b6024359061356082610694565b604435906001600160401b038211610613576020926135866107369336906004016106a5565b916064359361454f565b61232e9092919260e08061010083019560018060a01b038082511685528060208301511660208601526040820151166040850152606081015160608501526080810151608085015260018060801b038060a08301511660a086015260c08201511660c0850152015191019064ffffffffff169052565b346106135760003660031901126106135761361f614ee2565b5061083961362b610928565b61363f61363960005461064c565b82614f31565b61365661364d60015461064c565b60208301614f31565b61366d61366460025461064c565b60408301614f31565b600354606082015260045460808201526005546001600160801b03811660a083015261369d9060801c60c0830152565b6136be6136b060065464ffffffffff1690565b64ffffffffff1660e0830152565b60405191829182613590565b34610613576020366003190112610613576004356136e781610694565b6136ef613904565b6001600160a01b0390811690811561372b57602f80546001600160a01b03198116841790915516600080516020615f90833981519152600080a3005b604051631e4fbdf760e01b815260006004820152602490fd5b34610613576000366003190112610613576020604051600080516020615ed08339815191528152f35b34610613576000366003190112610613576020604051670de0b6b3a76400008152f35b3461061357600036600319011261061357601f546040516001600160a01b039091168152602090f35b346106135760206107366137cc366106d2565b92919091614ca2565b80600052603260205260ff6137ee336040600020610a90565b5416156137f85750565b6044906040519063e2517d3f60e01b82523360048301526024820152fd5b600090808252603260205260ff6138308460408520610a90565b541661388b57808252603260205261384b8360408420610a90565b805460ff1916600117905533926001600160a01b0316917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9080a4600190565b50905090565b600090808252603260205260ff6138ab8460408520610a90565b54161561388b5780825260326020526138c78360408420610a90565b805460ff1916905533926001600160a01b0316917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9080a4600190565b602f546001600160a01b0316330361391857565b60405163118cdaa760e01b8152336004820152602490fd5b600d111561393a57565b634e487b7160e01b600052602160045260246000fd5b60608101949392600d83101561393a57604092825260208201520152565b602154600160401b8110156108ca5760018101806021558110156119f9576021600052600080516020615f508339815191520180546001600160a01b0319166001600160a01b03909216919091179055565b634e487b7160e01b600052601160045260246000fd5b60001981146139e55760010190565b6139c0565b6000198101919082116139e557565b919082039182116139e557565b6021548015613a485760001981810191808310156119f957602160008190529101600080516020615f508339815191520180546001600160a01b031916905555565b634e487b7160e01b600052603160045260246000fd5b5190811515820361061357565b9081602091031261061357613a7f90613a5e565b90565b6040513d6000823e3d90fd5b919082018092116139e557565b613aa43361526e565b613aac61582c565b6018546001600160a01b0390613ac19061064c565b16158015613b99575b15613b7157600080516020615eb0833981519152613b3f613aed600080946139f9565b92613af784613bff565b613b013385615c21565b906001613b0d33610a42565b0154613b5357846001613b1f33610a42565b01555b613b2a6153ea565b80613b44575b5060405191829133958361290a565b0390a2565b613b4d90615500565b38613b30565b6001613b5e33610a42565b01613b6a868254613a8e565b9055613b22565b600080516020615eb0833981519152613b3f613aed613b92602954856156a2565b80946139f9565b50613ba8611cb560175461064c565b3314613aca565b60ff60315416613bbb57565b60405163d93c066560e01b8152600490fd5b600260305414613bde576002603055565b604051633ee5aeb560e01b8152600490fd5b90816020910312610613575190565b6000546040516318160ddd60e01b81529190602090839060049082906001600160a01b03165afa918215610bb257600092613c5b575b5081018091116139e557602b5410613c4957565b6040516354db2d5d60e11b8152600490fd5b613c7491925060203d8111611805576117f58183610905565b9038613c35565b60245460081c60ff166115a757602d5415613d3c57613c9933610a5c565b8115613cfa57613b3f600182847f2816dbba0837d8d68f7bcead98695dd98db2cc1cb4066694ead56a12e795c4889455613ce7613cdb613cdb602d5442613a8e565b6001600160401b031690565b918291015560405191829133958361290a565b5050613d14613d0833610a5c565b60016000918281550155565b337f8b775bb80a5d4addc5ea2601b2378ae89a1bb9010227157ac02aa71498e799c4600080a2565b60405163410dc88360e11b8152600490fd5b90602d5415613dc157613d6082610a5c565b60018101548015613daf574210613d9d575403613d8b576001613d84600092610a5c565b8281550155565b604051635a4fecf360e11b8152600490fd5b60405163621e25c360e01b8152600490fd5b604051637b7e3ed560e11b8152600490fd5b5050565b908060209392818452848401376000828201840152601f01601f1916010190565b6001600160a01b039091168152604060208201819052613a7f93910191613dc5565b909291600091338352602360205260ff60408420541615613e7c57613e2b61582c565b6001600160a01b0316803b15613e7857613e5e93948360405180968195829463cf2c52cb60e01b84523360048501613de6565b03925af18015610bb257613e6f5750565b61232e906108b7565b8280fd5b6040516361803dfb60e11b8152600490fd5b6001600160a01b039091168152602081019190915260400190565b33600052602360205260ff60406000205416613f2f57336000526023602052613edd6040600020600160ff19825416179055565b602e5480613f20575b507fd5acd12fd21128fb0a61c90d812321cb1423b1948052a3e93786c482bbef6608613f1b602e546040519182913383613e8e565b0390a1565b613f2990615500565b38613ee6565b60405163992c89a960e01b8152600490fd5b916020613a7f938181520191613dc5565b9081606091031261061357613f6681613a5e565b916040602083015192015190565b919082519283825260005b848110613fa0575050826000602080949584010152601f8019910116010190565b602081830181015184830182015201613f7f565b6001600160a01b0391821681529116602082015260408101919091526001600160801b03909116606082015260a060808201819052613a7f92910190613f74565b919061400033610a76565b6040805163a646a19360e01b815290949160208280614023888860048401613f41565b03816001600160a01b0387165afa908115610bb25761404a9260009261420f575b5061184d565b92614059600185015460ff1690565b6141fe57918183614073886140e598979685606097615117565b61407b61582c565b61408488615237565b6140c5614098611cb5611cb560025461064c565b926140b76140a860055460801c90565b93895196879360208501613de6565b03601f198101855284610905565b6000865180988195829463292aab8160e11b84528c333360048701613fb4565b03925af18015610bb25760009384916141c9575b5061410e61410960055460801c90565b613281565b6003830155614124611cb5611cb560005461064c565b91823b1561061357600084518094635c921eb960e01b825281838161414d8c3360048401613e8e565b03925af18015610bb2577fcbc04eca7e9da35cb1393a6135a199ca52e450d5e9251cbd99f7847d33a36750956141959461418e926141b6575b508254613a8e565b9055600455565b61419e83615787565b6141a66153ea565b5191825233918060208101613b3f565b806117296141c3926108b7565b38614186565b90506141ed91935060603d81116141f7575b6141e58183610905565b810190613f52565b93915092386140f9565b503d6141db565b8451630bff073160e31b8152600490fd5b61422891925060203d8111611805576117f58183610905565b9038614044565b908160209103126106135751613a7f81610694565b9493929160409261426a9260018060a01b03168752606060208801526060870191613dc5565b930152565b9190928361427c33610a76565b9360018060a01b0393848216604094855163a646a19360e01b81526020988982806142ac8860049b8c8401613f41565b0381875afa908115610bb2576142c9926000926144a3575061184d565b906142d6848b33886144bb565b946142e482868d338561454f565b906142f6611cb5611cb560015461064c565b6143358c61430560185461064c565b8c51636eb1769f60e11b815233818e019081526001600160a01b0390921660208301529283918291604090910190565b0381855afa8015610bb25784918e600092614486575b505010614476578b89614372928c5180809581946370a0823160e01b835233908301610658565b03915afa8015610bb2578391600091614459575b5010614449576143c2836143ae6143cc948f8f9998978b6143a992600598613ff5565b61543d565b848a01805460ff1916600117905588613a8e565b9201918254613a8e565b9055855163f8eef10f60e01b815294859182905afa928315610bb2577f2386b33461472749e636e4d07c6e2b5e114398809469e25100c5ef910a663f6496600094614426575b5050613b3f92935194859416963385614244565b613b3f9450908161444292903d10611dbf57611db08183610905565b9238614412565b8851631e9acf1760e31b81528890fd5b61447091508d803d10611805576117f58183610905565b38614386565b89516339e067d560e21b81528990fd5b61449c9250803d10611805576117f58183610905565b388e61434b565b6142289192508b3d8d11611805576117f58183610905565b919290926144c7614f40565b5060018060a01b038093169360009285845260209586805260ff60408620541615610f775761451a958793168552600f8352604085209360405180978194829363a646a19360e01b845260048401613f41565b03915afa938415610bb25761453c946040948491612ccc575083525220614e92565b60a0815191015181039081116139e55790565b9061455b9392916144bb565b9081018091116139e557602854613a7f916156a2565b9190826080910312610613578151916020810151916060604083015192015190565b6001600160a01b03909116815260208101919091526001600160801b039091166040820152608060608201819052613a7f92910190613f74565b909194939280156115b9576001600160a01b03848116949092908515610c2a576145f561582c565b61462261460182610a76565b60208a6040978851808096819463a646a19360e01b83528d60048401613f41565b039188165afa908115610bb2576146409260009261420f575061184d565b9261464f600185015460ff1690565b8080614845575b614834578061481b575b61480a57918160809361467a8b8960009b9c9d9686614d4a565b908181118a1461480057509788915b6146ca61469d611cb5611cb560025461064c565b946146bc6146ad60055460801c90565b978b519c8d9360208501613de6565b03601f1981018b528a610905565b6146e98851998a9687958694638a94b05f60e01b865260048601614593565b03925af1928315610bb2576147776005917f05f2eeda0e08e4b437f487c8d7d29b14537d15e3488170dc3de5dbdf8dac4684956000809281926147c7575b506147699061473a614109875460801c90565b60038801556147648a614751611cb560015461064c565b61475c60005461064c565b90339061485c565b600455565b806147b4575b5083546139f9565b918281550190808254116147ac575b156147a2575b50614796836157d6565b519182523391602090a3565b600090553861478c565b808255614786565b6147bf908554613a8e565b84553861476f565b905061476992506147ef915060803d81116147f9575b6147e78183610905565b810190614571565b9093909250614727565b503d6147dd565b9050978891614689565b8451634b3c322760e11b8152600490fd5b5061482d600285015460275490613a8e565b4211614660565b855163224aae4f60e21b8152600490fd5b5061485761106c600487015460ff1690565b614656565b6040516323b872dd60e01b60208201526001600160a01b03928316602482015292909116604483015260648083019390935291815260a08101918183106001600160401b038411176108ca5761232e926040525b906000602091828151910182855af115613a82576000513d61490357506001600160a01b0381163b155b6148e15750565b604051635274afe760e01b81526001600160a01b039091166004820152602490fd5b600114156148da565b6011546001600160a01b031680156149695781156115b95781614932913090339061485c565b61493b8161507a565b6040519081527fe79ffd9a88f13c8c49fb545410401d9877ab90d9dcf7b15d4dc0601993a0d91360203392a2565b604051632506892760e01b8152600490fd5b818102929181159184041417156139e557565b8115614998570490565b634e487b7160e01b600052601260045260246000fd5b6011546001600160a01b0390811615614a20576149ca82614ba9565b908115614a1857601254908316600052601460205260406000205481039081116139e557614a04670de0b6b3a764000091614a0b9361497b565b0491610a28565b5481018091116139e55790565b505050600090565b5050600090565b6001600160a01b03918216815291166020820152606060408201819052613a7f93910191613dc5565b3d15614a7b573d90614a6182610948565b91614a6f6040519384610905565b82523d6000602084013e565b606090565b9261232e93600093613220859461321260018060a01b0360335416956040519485936020850197631318562160e31b895260248601614a27565b600091829161232e9461322060018060a01b0360335416936132126040519384926020840196634b195c9560e11b885260248501613de6565b600054604051630481930d60e21b81526001600160a01b0392831660048201529160209183916024918391165afa908115610bb257600091614b33575090565b613a7f915060203d8111611805576117f58183610905565b6017546001600160a01b039081168015614a1857600092839260405190602082019263c084b10b60e01b845216602482015260248152614b8a816108ea565b51915afa50613a7f614b9a614a50565b60208082518301019101613bf0565b614bbb614bb582614af3565b91614b4b565b81018091116139e55790565b6001600160a01b0381166000818152602080526040902054909491939060ff1615610f77576020604051809663d57dfa1560e01b82528180614c0e87878a60048501613de6565b03915afa928315610bb257613a7f95600094614c36575b50614c309394614d4a565b90614c58565b614c309450614c529060203d8111611805576117f58183610905565b93614c25565b60018210614c9057602554614c6c916156a2565b90670de0b6b3a7640000918281029281840414901517156139e557613a7f9161498e565b50676765c793fa10079d601b1b919050565b909193929360018060a01b038092169160009280845260209182805260409560ff878720541615614d3957614cd5614f40565b5082865283805260ff878720541615614d395791614d179798918493168652600f835286862094875180998194829363a646a19360e01b845260048401613f41565b03915afa8015610bb257614d35958491612ccc575083525220614e92565b5190565b8651630867d69960e11b8152600490fd5b9193929360018060a01b038093169060009180835260209485805260409460ff86862054161561183c57614d7c614f40565b5082855286805260ff86862054161561183c579186979891614dbf9793168552600f835285852093865180988194829363a646a19360e01b845260048401613f41565b03915afa948515610bb257613a7f956128b7958491612ccc575083525220614e92565b805190606060055460801c91015181039081116139e557614bbb90826156c0565b9060209081838203126106135782516001600160401b0393848211610613570181601f820112156106135780519384116108ca578360051b9060405194614e4c85840187610905565b85528380860192820101928311610613578301905b828210614e6f575050505090565b81518152908301908301614e61565b80518210156119f95760209160051b010190565b90604051614e9f816108cf565b60a0600582948054845260ff60018201541615156020850152600281015460408501526003810154606085015260ff600482015416151560808501520154910152565b6040519061010082016001600160401b038111838210176108ca576040528160e06000918281528260208201528260408201528260608201528260808201528260a08201528260c08201520152565b6001600160a01b039091169052565b60405190614f4d826108cf565b8160a06000918281528260208201528260408201528260608201528260808201520152565b9192909260018060a01b038093169360009285845260209586805260ff60408620541615610f7757614fc8958793168552600f8352604085209360405180978194829363a646a19360e01b845260048401613f41565b03915afa938415610bb257613a7f946040948491612ccc575083525220614e92565b6040519061012082016001600160401b038111838210176108ca57604052816101006000918281528260208201528260408201528260608201528260808201528260a08201528260c08201528260e08201520152565b61507561232e939261506760405194859263a9059cbb60e01b602085015260248401613e8e565b03601f198101845283610905565b6148b0565b6011546001600160a01b031615614969576003548015613dc157811580156150a157505050565b670de0b6b3a76400008084029384041417156139e5576150c09161498e565b6012549081018091116139e55760125542601355565b156150dd57565b60405162461bcd60e51b8152602060048201526012602482015271189bdc9c9bddc818d85c081c995858da195960721b6044820152606490fd5b92909161512b611cb5611cb560025461064c565b9060405180926318160ddd60e01b825281600460209586935afa8015610bb257846151619161516b9360009161521a5750613a8e565b602c5410156150d6565b60405163d57dfa1560e01b815282818061518a85893360048501613de6565b03816001600160a01b038a165afa928315610bb2576000936151fb575b505081156151e9576151d0936151c36151cb93602554906156a2565b953390614ca2565b613a8e565b116151d757565b604051630369fbd160e51b8152600490fd5b604051638dc8d9b360e01b8152600490fd5b615212929350803d10611805576117f58183610905565b9038806151a7565b6152319150863d8811611805576117f58183610905565b38611fe2565b60008061232e9260018060a01b036034541690604051602081019163489493f160e11b8352602482015260248152613220816108ea565b6011546001600160a01b039190821615613dc15761528b816149ae565b908161529657505050565b816152e87fe34918ff1c7084970068b53fd71ad6d8b04e9f15d3886cbf006443e6cdc52ea693838660209516968760005260158652600060408120556012546152de83610a0e565b5560115416615040565b604051908152a2565b60009060033d116152fe57565b905060046000803e60005160e01c90565b600060443d10613a7f57604051600319913d83016004833e81516001600160401b03918282113d60248401111761536c57818401948551938411615374573d8501016020848701011161536c5750613a7f92910160200190610905565b949350505050565b50949350505050565b6000809160233d1161538b57565b9150506020600460003e600051600191565b156153a55750565b805190811561061357602001fd5b60008061232e9260018060a01b036034541690604051602081019163076d081560e01b8352602482015260248152613220816108ea565b60345460408051633fa5758d60e11b60208201908152600482529290918201906001600160a01b03166001600160401b038211838310176108ca5761232e93600093849360405251915af461322c614a50565b6018546001600160a01b03906154529061064c565b168015610c2a5781156115b9576154d59160209161547160015461064c565b604051636033e31560e01b81526001600160a01b03909116600482015233602482015260448101929092527f65991ea5d80f7b6dc8c32648f59c5a653beb10caddae8fefad6966b35a0a65f160648301529092839190829060009082906084820190565b03925af18015610bb2576154e65750565b6154fd9060203d8111610bab57610b9d8183610905565b50565b6018546001600160a01b03906155159061064c565b1615610c2a576155368161552d611cb560015461064c565b3090339061485c565b80615548611cb5611cb560015461064c565b61555360185461064c565b604051809263095ea7b360e01b8252816000816155776020998a9760048401613e8e565b03925af1908115610bb25760009161564f575b501561563d5781615615916155a6611cb5611cb560185461064c565b6155b160015461064c565b604051636033e31560e01b81526001600160a01b03909116600482015230602482015260448101929092527f42fd249bdce4c4255579b56a79389d6d679ba17c7b7c848ee5c0a2ffcf354cf160648301529092839190829060009082906084820190565b03925af18015610bb257615627575050565b816154fd92903d10610bab57610b9d8183610905565b6040516340b27c2160e11b8152600490fd5b6156669150833d8511610bab57610b9d8183610905565b3861558a565b7e83126e978d4fdf3b645a1cac083126e978d4fdf3b645a1cac083126e978d458111610613576113886101f46127109202010490565b81611388190481111582151715610613576127109102611388010490565b8115676765c793fa10079d601a1b19839004821115171561061357676765c793fa10079d601b1b9102676765c793fa10079d601a1b010490565b615745600454615708615e72565b50615711615e2b565b5061571e81600354615b9a565b61573881600954600a54600b54600c5491600d5493615ae7565b80600855600e5491615abd565b60075561575061582c565b7f48f4f83c2f1843e8fd7ef13ffcff40fca5055dc1b9b074cd9dd0f9a8a8e09dd960075460085490613f1b6040519283928361290a565b8061579c575b50615745600454615708615e72565b6003548181106157c4576157b56141096157bb936157f9565b906139f9565b6003553861578d565b60405163bb55fd2760e01b8152600490fd5b806157ea5750615745600454615708615e72565b6157bb906128bc614109600354925b6001600160801b039081811161580d571690565b604490604051906306dfcc6560e41b8252608060048301526024820152fd5b61585261584c61584260065464ffffffffff1690565b64ffffffffff1690565b426139f9565b600181106154fd57615868614109600554613281565b6001811061594857816158a96158876158c2936158e79560075461595a565b600580546001600160801b0319166001600160801b0392909216919091179055565b600854906158bc61410960055460801c90565b9161599e565b600580546001600160801b031660809290921b6001600160801b031916919091179055565b6006805464ffffffffff19164264ffffffffff16179055600554604080516001600160801b038316815260809290921c60208301527ff92a3abee06d57c996e7e19eb34560241fdc1fe67e9ebd503177710bf9fd8204919081908101613f1b565b604051630a1cf3ed60e21b8152600490fd5b9161596b61597092613a7f94615975565b6156c0565b6157f9565b6301e13380916159849161497b565b04676765c793fa10079d601b1b9081018091116139e55790565b916159af61597092613a7f946159b5565b906156c0565b60018210614c9057744f3a68dbc8f03f243baf513267aa9a3ee524f8e028811161061357613a7f916301e1338062f099c06159fe93676765c793fa10079d601b1b0201046156c0565b615a28565b8160011c90676765c793fa10079d601b1b908183190481118415176106135702010490565b8015615aad57676765c793fa10079d601c1b81800204906b09b18ab5df7180b6b800000082820204676765c793fa10079d601d1b818302046b1027e72f1f1281308800000081840204906b1363156bbee3016d700000008285020492676765c793fa10079d601b1b956b169e43a85eb381aa5800000085870204950101010101010190565b50676765c793fa10079d601b1b90565b909192600111614a1857615adb91615ad4916156c0565b91826156c0565b81039081116139e55790565b91949290948186841191821592615b8f575b8215615b84575b8215615b79575b5050615b6757838311615b30575091615b2b6128bc926159af86613a7f97966139f9565b615a03565b9350918082039182116139e557676765c793fa10079d601b1b9081039081116139e557615b2b6128bc926159af85613a7f976139f9565b60405163abc83fed60e01b8152600490fd5b101590508138615b07565b878111159250615b00565b818510159250615af9565b60018110614c90578181018091116139e5576001600160801b0391615bc29161597091615a03565b1690565b919082608091031261061357615bdb82613a5e565b916020810151916060604083015192015190565b6001600160a01b0391821681529116602082015260408101919091526001600160801b03909116606082015260800190565b600181106115b957600091615c3461582c565b615c5082615c46611cb560015461064c565b61475c865461064c565b6080615c8f615c65611cb5611cb5875461064c565b615c70600554613281565b60405196878094819363b3f1c93d60e01b835289893060048601615bef565b03925af1928315610bb257600093615cdb575b5082600080516020615eb083398151915291615cbd846157d6565b615cd560405192839260018060a01b0316958361290a565b0390a290565b600080516020615eb0833981519152919350615d0d9060803d8111615d18575b615d058183610905565b810190615bc6565b505090509290615ca2565b503d615cfb565b90816060910312610613578051916040602083015192015190565b91600183106115b9576060615d8e93615d5161582c565b615d62611cb5611cb560005461064c565b615d6d600554613281565b916000604051809881958294636b81068560e11b84528a8060048601615bef565b03925af1918215610bb2576000938493615df3575b50615dad83615787565b6040516001600160a01b03909116907ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b5689080615dea87878361290a565b0390a281929190565b909250615e1891935060603d8111615e24575b615e108183610905565b810190615d1f565b93919050929138615da3565b503d615e06565b64ffffffffff6006541642034281116139e55760018110615e6257613a7f9061596b6007549160018060801b036005541692615975565b506005546001600160801b031690565b64ffffffffff6006541642034281116139e55760018110615ea857615e9c613a7f916008546159b5565b60055460801c906156c0565b506004549056fe90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a1571840dc4906352362b0cdaf79870196c8e42acafade72d5d5a6d59291253ceb1df980d21d8c7bb34800e668dbe003299093bac8e693614151d3c57f73f98a93d063386e75a280368ce68f5e39db7d7a3f09737ca4d289d9345a5f4968ff76955c4cede9b2b63ba72d39d2f630b4b742e1cada59d7a073ac4e10da9ac7b2eb1053a6357012c1a3ae0a17d304c9920310382d968ebcc4b1771f41c6b304205b570ba279271fb7bbf76a6f3df3cc57bf80647fcafdea60ec3383d90f459de74e7c08be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0a2646970667358221220a4c79e496b929859813f285292141f0777525deaf07047a598c9d91d6af9030064736f6c63430008140033",
2758
3486
  "linkReferences": {},
2759
3487
  "deployedLinkReferences": {}
2760
3488
  }