111 txs
796 calls
constructor
constructor(address _gradientRegistry)
functions
currentETHEpochs
viewfunction currentETHEpochs(address) view returns (uint256)
currentTokenEpochs
viewfunction currentTokenEpochs(address) view returns (uint256)
epochCooldownPeriod
viewfunction epochCooldownPeriod() view returns (uint256)
ethPools
viewfunction ethPools(address, uint256) view returns (uint256 accountedEth, uint256 totalETH, uint256 totalLPShares, uint256 accRewardPerShare, uint256 rewardBalance, uint256 accTokenRewardPerShare, uint256 tokenRewardBalance, address uniswapPair, bool finalized)
ethProviders
viewfunction ethProviders(address, address, uint256) view returns (uint256 ethAmount, uint256 lpShares, uint256 rewardDebt, uint256 pendingReward, uint256 tokenRewardDebt, uint256 pendingTokenReward)
GAS_BUFFER
viewfunction GAS_BUFFER() view returns (uint256)
GAS_LIMIT_PER_ITEM
viewfunction GAS_LIMIT_PER_ITEM() view returns (uint256)
getPairAddress
viewfunction getPairAddress(address token) view returns (address pairAddress)
getReserves
viewfunction getReserves(address token) view returns (uint256 reserveETH, uint256 reserveToken)
getUserParticipatedETHEpochs
viewfunction getUserParticipatedETHEpochs(address token, address user) view returns (uint256[])
getUserParticipatedTokenEpochs
viewfunction getUserParticipatedTokenEpochs(address token, address user) view returns (uint256[])
gradientRegistry
viewfunction gradientRegistry() view returns (address)
lastETHEpochIncrementTime
viewfunction lastETHEpochIncrementTime(address) view returns (uint256)
lastTokenEpochIncrementTime
viewfunction lastTokenEpochIncrementTime(address) view returns (uint256)
MAX_BATCH_SIZE
viewfunction MAX_BATCH_SIZE() view returns (uint256)
minLiquidity
viewfunction minLiquidity() view returns (uint256)
minLiquidityForEpochProgression
viewfunction minLiquidityForEpochProgression() view returns (uint256)
minTokenLiquidity
viewfunction minTokenLiquidity() view returns (uint256)
owner
viewfunction owner() view returns (address)
SCALE
viewfunction SCALE() view returns (uint256)
tokenPools
viewfunction tokenPools(address, uint256) view returns (uint256 accountedToken, uint256 totalTokens, uint256 totalLPShares, uint256 accRewardPerShare, uint256 rewardBalance, uint256 accETHRewardPerShare, uint256 ethRewardBalance, address uniswapPair, bool finalized)
tokenProviders
viewfunction tokenProviders(address, address, uint256) view returns (uint256 tokenAmount, uint256 lpShares, uint256 rewardDebt, uint256 pendingReward, uint256 ethRewardDebt, uint256 pendingETHReward)
totalEthAdded
viewfunction totalEthAdded() view returns (uint256)
totalEthRemoved
viewfunction totalEthRemoved() view returns (uint256)
totalTokensAdded
viewfunction totalTokensAdded(address) view returns (uint256)
totalTokensRemoved
viewfunction totalTokensRemoved(address) view returns (uint256)
userParticipatedETHEpochs
viewfunction userParticipatedETHEpochs(address, address, uint256) view returns (uint256)
userParticipatedTokenEpochs
viewfunction userParticipatedTokenEpochs(address, address, uint256) view returns (uint256)
addETHLiquidity
payablefunction addETHLiquidity(address token) payable
addLiquidity
payablefunction addLiquidity(address token, uint256 tokenAmount) payable
addTokenLiquidity
nonpayablefunction addTokenLiquidity(address token, uint256 tokenAmount)
claimAllEpochsPoolFee
nonpayablefunction claimAllEpochsPoolFee(address token, uint256[] epochs, bool isETHPool)
claimEthFeeFromTokenPool
nonpayablefunction claimEthFeeFromTokenPool(address token, uint256 epoch)
claimEthPoolFee
nonpayablefunction claimEthPoolFee(address token, uint256 epoch)
distributePoolFee
payablefunction distributePoolFee(address token, uint256 epoch, bool isETHPool) payable
emergencyWithdrawETHAmount
nonpayablefunction emergencyWithdrawETHAmount(address recipient, uint256 amount)
emergencyWithdrawMultipleTokens
nonpayablefunction emergencyWithdrawMultipleTokens(address[] tokens, address recipient)
emergencyWithdrawTokenAmount
nonpayablefunction emergencyWithdrawTokenAmount(address token, address recipient, uint256 amount)
executeBuyOrder
payablefunction executeBuyOrder(address token, uint256 ethAmount, uint256 tokenAmount) payable
executeSellOrder
nonpayablefunction executeSellOrder(address token, uint256 ethAmount, uint256 tokenAmount)
removeAllEpochsLiquidity
nonpayablefunction removeAllEpochsLiquidity(address token, uint256[] ethEpochs, uint256[] tokenEpochs, uint256[] ethShares, uint256[] tokenShares, uint256[] minEthAmounts, uint256[] minTokenAmounts)
removeAllETHLiquidity
nonpayablefunction removeAllETHLiquidity(address token, uint256[] epochs, uint256[] shares, uint256[] minEthAmounts)
removeAllTokenLiquidity
nonpayablefunction removeAllTokenLiquidity(address token, uint256[] epochs, uint256[] shares, uint256[] minTokenAmounts)
removeETHLiquidity
nonpayablefunction removeETHLiquidity(address token, uint256 shares, uint256 minEthAmount, uint256 epoch)
removeLiquidity
nonpayablefunction removeLiquidity(address token, uint256 shares, uint256 minEthAmount, uint256 minTokenAmount, uint256 currentETHEpoch, uint256 currentTokenEpoch)
removeTokenLiquidity
nonpayablefunction removeTokenLiquidity(address token, uint256 shares, uint256 minTokenAmount, uint256 epoch)
renounceOwnership
nonpayablefunction renounceOwnership()
setEpochCooldownPeriod
nonpayablefunction setEpochCooldownPeriod(uint256 _epochCooldownPeriod)
setMinLiquidity
nonpayablefunction setMinLiquidity(uint256 _minLiquidity)
setMinLiquidityForEpochProgression
nonpayablefunction setMinLiquidityForEpochProgression(uint256 _minLiquidityForEpochProgression)
setMinTokenLiquidity
nonpayablefunction setMinTokenLiquidity(uint256 _minTokenLiquidity)
setRegistry
nonpayablefunction setRegistry(address _gradientRegistry)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
withdrawExcessiveFunds
nonpayablefunction withdrawExcessiveFunds(address token)
events
BatchRemovalCompleted
event BatchRemovalCompleted(address indexed user, address indexed token, uint256 totalProcessed)
EmergencyWithdrawETH
event EmergencyWithdrawETH(address indexed recipient, uint256 amount)
EmergencyWithdrawToken
event EmergencyWithdrawToken(address indexed token, address indexed recipient, uint256 amount)
EpochCooldownPeriodUpdated
event EpochCooldownPeriodUpdated(uint256 newCooldownPeriod)
EpochFinalized
event EpochFinalized(address indexed token, uint256 epoch, bool isETHPool)
EpochIncremented
event EpochIncremented(address indexed token, uint256 newEpoch)
EthFeeClaimedFromTokenPool
event EthFeeClaimedFromTokenPool(address indexed user, uint256 amount, address token, uint256 epoch)
ETHLiquidityDeposited
event ETHLiquidityDeposited(address indexed user, address token, uint256 ethAmount, uint256 lpSharesMinted)
ETHLiquidityWithdrawn
event ETHLiquidityWithdrawn(address indexed user, address token, uint256 epoch, uint256 ethAmount, uint256 lpSharesBurned)
ExcessiveFundsWithdrawn
event ExcessiveFundsWithdrawn(address indexed owner, address indexed token, uint256 amount, string reason)
FeeClaimedFromEthPool
event FeeClaimedFromEthPool(address indexed user, uint256 amount, address token, uint256 epoch)
MinLiquidityForEpochProgressionUpdated
event MinLiquidityForEpochProgressionUpdated(uint256 newMinLiquidity)
MinLiquidityUpdated
event MinLiquidityUpdated(uint256 newMinLiquidity)
MinTokenLiquidityForEpochProgressionUpdated
event MinTokenLiquidityForEpochProgressionUpdated(uint256 newMinTokenLiquidity)
MinTokenLiquidityUpdated
event MinTokenLiquidityUpdated(uint256 newMinTokenLiquidity)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
PoolBalanceUpdated
event PoolBalanceUpdated(address indexed token, uint256 newTotalEth, uint256 newTotalTokens, uint256 newTotalETHLPShares, uint256 newTotalTokenLPShares, uint256 epoch)
PoolFeeDistributed
event PoolFeeDistributed(address indexed from, uint256 amount, address token, uint256 epoch, bool isETH)
PoolSharesClaimed
event PoolSharesClaimed(address indexed user, uint256 amount, address token, uint256 epoch, bool isETH)
RegistryUpdated
event RegistryUpdated(address oldRegistry, address newRegistry)
TokenLiquidityDeposited
event TokenLiquidityDeposited(address indexed user, address token, uint256 tokenAmount, uint256 lpSharesMinted)
TokenLiquidityWithdrawn
event TokenLiquidityWithdrawn(address indexed user, address token, uint256 epoch, uint256 tokenAmount, uint256 lpSharesBurned)
errors
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
creation bytecode
0x6080346100fd57601f614f0138819003918201601f19168301916001600160401b03831184841017610102578084926020946040528339810103126100fd57516001600160a01b038116908190036100fd5733156100e75760008054336001600160a01b0319821681178355604051939290916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a36001805566038d7ea4c68000600b5566038d7ea4c68000600c55610e10601355662386f26fc1000060145560018060a01b03196002541617600255614de890816101198239f35b631e4fbdf760e01b600052600060045260246000fd5b600080fd5b634e487b7160e01b600052604160045260246000fdfe608080604052600436101561001d575b50361561001b57600080fd5b005b60003560e01c90816314fe72aa146125a2575080631bad07761461251a5780631e489b12146124fc5780631e4cdf611461246f5780631f400467146122155780632366a9bb146121f8578063246a7181146121cb578063252cf2d2146121ad5780632b62a95a1461218f5780633e99c1e41461216057806341d50ae414612126578063517b14e614611fcb57806354349f7714611f465780635668870014611ea8578063585ddbc714611e8a57806359085e7514611df75780635c4c474914611da05780635fbc13ef14611a9d5780636bca292414611a635780636f2236fe14611a2957806370c6ee3314611987578063715018a61461192e5780637601f9fe146115f5578063761f030c146114ec578063762a87d7146113315780637b431b7d146112c9578063830562bc146112a057806385e694b61461126b57806387d11e61146110595780638da18bab1461100c5780638da5cb5b14610fe3578063a5a9703f14610fb6578063a91ee0dc14610eee578063ad7c37a014610e69578063b09273be14610dba578063b1241a7014610d9c578063b8358dc314610cc2578063b93988c214610c91578063bf0df0f914610c73578063c32fee3014610beb578063c3aae28214610bb1578063c5a1807d14610b0e578063c7e6736014610af0578063cac4e7ff14610a99578063cc25498414610a5f578063cfdbf25414610a43578063d5903abe14610a09578063e86d5a2914610978578063eab9a96e14610592578063eced55261461056f578063ed398f1714610513578063f147d1d814610448578063f2fde38b146103bf5763f2fff7db1461027c573861000f565b346103a65761028a366127b6565b9091610294614782565b6001600160a01b0316906102a9821515612953565b6001600160a01b038316926102bf841515613064565b6102ca8215156130a4565b6040516370a0823160e01b8152306004820152602081602481875afa80156103b3578391600091610379575b5010610334578161032b7fda0612d7ca9ff90ca7143a6021ba8938994f8d045b2834ae585fd07b27ea697c93602093866149d9565b604051908152a3005b60405162461bcd60e51b815260206004820152601a60248201527f496e73756666696369656e7420746f6b656e2062616c616e63650000000000006044820152606490fd5b9150506020813d6020116103ab575b8161039560209383612698565b810103126103a657829051386102f6565b600080fd5b3d9150610388565b6040513d6000823e3d90fd5b346103a65760203660031901126103a6576103d8612615565b6103e0614782565b6001600160a01b0316801561043257600080546001600160a01b03198116831782556001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a3005b631e4fbdf760e01b600052600060045260246000fd5b346103a65761045636612854565b600254604051630736b32b60e31b81526001600160a01b038681166004830181905291969395939260209188916024918391165afa9081156103b3576104ac6104cd926104d2986000916104e4575b50156128c8565b6104b46133d5565b831515806104d8575b6104c690612997565b1515612953565b613d02565b60018055005b506127108411156104bd565b610506915060203d60201161050c575b6104fe8183612698565b8101906128b0565b896104a5565b503d6104f4565b346103a657610521366127b6565b9160018060a01b0316600052600a60205260406000209060018060a01b0316600052602052604060002080548210156103a65760209161056091612882565b90549060031b1c604051908152f35b346103a65760003660031901126103a6576020604051670de0b6b3a76400008152f35b346103a65760e03660031901126103a6576105ab612615565b6024356001600160401b0381116103a6576105ca9036906004016126cf565b6044356001600160401b0381116103a6576105e99036906004016126cf565b916064356001600160401b0381116103a6576106099036906004016126cf565b916084356001600160401b0381116103a6576106299036906004016126cf565b9260a4356001600160401b0381116103a6576106499036906004016126cf565b9060c4356001600160401b0381116103a6576106699036906004016126cf565b600254604051630736b32b60e31b81526001600160a01b0387811660048301819052999260209183916024918391165afa80156103b3576106b2916000916109595750156128c8565b6106ba6133d5565b6106c5881515612953565b845183518114908161094e575b50156109095780518751811490816108fe575b50156108b9576106f885518251906129e3565b916107066014841115612bcb565b61c350830283810461c35014841517156108a357620186a081018091116108a357610733905a1015612c21565b60005b86518110156107ce578061074c60019287612c79565b511515806107b3575b61075e90612997565b61078261076b828a612c79565b518c60005260036020526040600020541015612c8d565b6107ad61078f8288612c79565b5161079a838a612c79565b516107a5848c612c79565b51918c61391d565b01610736565b5061075e6127106107c48389612c79565b5111159050610755565b89848985858d60005b835181101561086f57806107ed60019284612c79565b51151580610854575b6107ff90612997565b61082361080c8287612c79565b518960005260046020526040600020541015612c8d565b61084e6108308285612c79565b5161083b8387612c79565b516108468489612c79565b519189613d02565b016107d7565b506107ff6127106108658386612c79565b51111590506107f6565b86866040519081527f25ee1dd8780d57b06d0f1ef06be94d3d7288c0b5024f8adc33074aaa2bca518d60203392a360018055005b634e487b7160e01b600052601160045260246000fd5b60405162461bcd60e51b815260206004820152601b60248201527f496e76616c696420746f6b656e2065706f636873206c656e67746800000000006044820152606490fd5b9050825114896106e5565b60405162461bcd60e51b815260206004820152601960248201527f496e76616c6964204554482065706f636873206c656e677468000000000000006044820152606490fd5b9050845114896106d2565b610972915060203d60201161050c576104fe8183612698565b8a6104a5565b346103a65760603660031901126103a657610991612615565b6024356001600160401b0381116103a6576109b09036906004016126cf565b906109b9612689565b6109c16133d5565b60005b83518110156104d25760019082156109f0576109ea6109e38287612c79565b51856142d4565b016109c4565b610a046109fd8287612c79565b5185614a14565b6109ea565b346103a65760203660031901126103a6576001600160a01b03610a2a612615565b1660005260126020526020604060002054604051908152f35b346103a65760003660031901126103a657602060405160148152f35b346103a65760203660031901126103a6576001600160a01b03610a80612615565b16600052600f6020526020604060002054604051908152f35b346103a65760203660031901126103a6577f59123a0549dcb31253d47aaf8754e736157ec49a903eea378b566c40cccd255e6020600435610ad8614782565b610ae3811515612d15565b80601455604051908152a1005b346103a65760003660031901126103a6576020604051620186a08152f35b346103a65760403660031901126103a657610b27612615565b610b2f61262b565b9060018060a01b0316600052600a60205260406000209060018060a01b0316600052602052604060002060405190816020825491828152019160005260206000209060005b818110610b9b57610b9785610b8b81870382612698565b604051918291826127f0565b0390f35b8254845260209093019260019283019201610b74565b346103a65760203660031901126103a6576001600160a01b03610bd2612615565b1660005260116020526020604060002054604051908152f35b346103a65760403660031901126103a6576001600160a01b03610c0c612615565b16600052600560205260406000206024356000526020526040600020805490610b976001820154916002810154936003820154916004810154600582015490600760068401549301549460405198899860ff8860a01c169760018060a01b0316968a612641565b346103a65760003660031901126103a6576020600e54604051908152f35b346103a65760203660031901126103a6576104d2610cad612615565b610cb5614782565b610cbd6133d5565b613134565b346103a65760403660031901126103a6576004356001600160a01b038116908190036103a657602435610cf3614782565b610cfe821515613064565b610d098115156130a4565b804710610d5757602081610d4e60008080807f20f907b58305c7b76035bc03b26f32b1c4f6560f96be6f3bb54c5c848a2d4ddd97895af1610d48612e87565b506130f0565b604051908152a2005b60405162461bcd60e51b815260206004820152601860248201527f496e73756666696369656e74204554482062616c616e636500000000000000006044820152606490fd5b346103a65760003660031901126103a6576020601454604051908152f35b346103a65760203660031901126103a657600435610dd6614782565b8015610e0d576020817f554ff81f8d029070b26b416ba425c7e95c46f196538825a375116221b489351192600c55604051908152a1005b60405162461bcd60e51b815260206004820152602e60248201527f4d696e696d756d20746f6b656e206c6971756964697479206d7573742062652060448201526d067726561746572207468616e20360941b6064820152608490fd5b346103a657610e77366127b6565b6001600160a01b03928316600090815260086020908152604080832094909516825292835283812091815290825282902080546001820154600283015460038401546004850154600590950154875194855295840192909252948201949094526060810193909352608083015260a082015260c090f35b346103a65760203660031901126103a6576004356001600160a01b038116908190036103a657610f1c614782565b8015610f7157600254604080516001600160a01b038084168252841660208201527f482b97c53e48ffa324a976e2738053e9aff6eee04d8aac63b10e19411d869b829190a16001600160a01b03191617600255005b60405162461bcd60e51b815260206004820152601960248201527f496e76616c6964206772616469656e74207265676973747279000000000000006044820152606490fd5b346103a65760403660031901126103a6576104d2610fd2612615565b610fda6133d5565b60243590614a14565b346103a65760003660031901126103a6576000546040516001600160a01b039091168152602090f35b346103a65761101a366127b6565b9160018060a01b0316600052600960205260406000209060018060a01b0316600052602052604060002080548210156103a65760209161056091612882565b346103a65760403660031901126103a6576004356001600160401b0381116103a657366023820112156103a65780600401356001600160401b0381116103a6573660248260051b840101116103a6576110b061262b565b6110b8614782565b6001600160a01b038116906110ce821515613064565b821561123057601483116111df5760005b8381101561001b576000906024600582901b870101356001600160a01b038116908190036111db57611112811515612953565b6040516370a0823160e01b8152306004820152602081602481855afa9081156111d057908692918591611192575b506001945080611154575b505050016110df565b6020816111837fda0612d7ca9ff90ca7143a6021ba8938994f8d045b2834ae585fd07b27ea697c9389866149d9565b604051908152a383878061114b565b92505091926020823d82116111c8575b816111af60209383612698565b810103126111c557506001929185915189611140565b80fd5b3d91506111a2565b6040513d86823e3d90fd5b8280fd5b60405162461bcd60e51b815260206004820152602360248201527f546f6f206d616e7920746f6b656e7320746f207769746864726177206174206f6044820152626e636560e81b6064820152608490fd5b60405162461bcd60e51b8152602060048201526013602482015272139bc81d1bdad95b9cc81cdc1958da599a5959606a1b6044820152606490fd5b346103a65760203660031901126103a657602061128e611289612615565b612ec6565b6040516001600160a01b039091168152f35b346103a65760003660031901126103a6576002546040516001600160a01b039091168152602090f35b346103a6576112d736612854565b600254604051630736b32b60e31b81526001600160a01b038681166004830181905291969395939260209188916024918391165afa9081156103b3576104ac61132c926104d2986000916104e45750156128c8565b61391d565b346103a65761133f36612736565b600254604051630736b32b60e31b81526001600160a01b0380871660048301819052969495939260209183916024918391165afa80156103b35761138b916000916114cd5750156128c8565b6113936133d5565b61139e851515612953565b6113b482518551811490816114c2575b50612b87565b6113c2601483511115612bcb565b815161c35081029080820461c35014901517156108a357620186a081018091116108a3576113f2905a1015612c21565b60005b825181101561148d578061140b60019287612c79565b51151580611472575b61141d90612997565b61144161142a8286612c79565b518860005260036020526040600020541015612c8d565b61146c61144e8288612c79565b516114598386612c79565b516114648488612c79565b51918861391d565b016113f5565b5061141d6127106114838389612c79565b5111159050611414565b8583516040519081527f25ee1dd8780d57b06d0f1ef06be94d3d7288c0b5024f8adc33074aaa2bca518d60203392a360018055005b9050825114876113ae565b6114e6915060203d60201161050c576104fe8183612698565b876104a5565b346103a65760203660031901126103a657600435611508614782565b610e1081106115a05762015180811161154c576020817f4d9177a92bf8f4c4299e526eada32648186ef10e4e4a1e90a5949d583a78d74e92601355604051908152a1005b60405162461bcd60e51b815260206004820152602660248201527f436f6f6c646f776e20706572696f642063616e6e6f742065786365656420323460448201526520686f75727360d01b6064820152608490fd5b60405162461bcd60e51b815260206004820152602760248201527f436f6f6c646f776e20706572696f64206d757374206265206174206c656173746044820152661018903437bab960c91b6064820152608490fd5b6115fe3661282a565b600254604051630736b32b60e31b81526001600160a01b038086166004830181905295949216602082602481845afa9081156103b35761164b6020926004946000916119175750156128c8565b6040516360c58eaf60e11b815292839182905afa80156103b357611682916000916118e8575b506001600160a01b03163314612d72565b61168d811515612dcc565b8115159161169a83612e22565b8134036118ad5784600052600660205260406000208560005260046020526040600020546000526020526040600020926001840192835490838210611868577fea2e0099b8cdd36ab886cecd4c54a52ab64930111ba7d00bc688f47b9ffa5b19966117088561173994612e7a565b865561171634600d546129e3565b600d5588600052601060205260406000206117328682546129e3565b90556148e8565b611857575b508360005260066020526040600020846000526004602052604060002054600052602052604060002060018101541580611845575b6117dc575b506000848152600560209081526040808320600380845282852054808652918452828520600181015496546002918201549190980154958a9052908452825195865292850195909552830152606082015260808101919091528060a081015b0390a2005b600701600160a01b60ff60a01b1982541617905583600052601260205242604060002055836000526004602052837f8ff77bfefa44876d0f26b8c0c1ee7102902564730e3ab6bac80bfaaec94c33bb60408060002054815190815260006020820152a284611778565b5060ff600782015460a01c1615611773565b6118629033866149d9565b8461173e565b60405162461bcd60e51b815260206004820152601c60248201527f496e73756666696369656e7420746f6b656e206c6971756964697479000000006044820152606490fd5b60405162461bcd60e51b815260206004820152601360248201527208aa89040c2dadeeadce840dad2e6dac2e8c6d606b1b6044820152606490fd5b61190a915060203d602011611910575b6119028183612698565b810190612a46565b86611671565b503d6118f8565b6105069150843d861161050c576104fe8183612698565b346103a65760003660031901126103a657611947614782565b600080546001600160a01b0319811682556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b60203660031901126103a65761199b612615565b600254604051630736b32b60e31b81526001600160a01b038381166004830181905291939260209185916024918391165afa9081156103b3576119ed611a03926104d295600091611a0a5750156128c8565b6119f56133d5565b6104c6600b54341015612cc9565b34906143ff565b611a23915060203d60201161050c576104fe8183612698565b866104a5565b346103a65760203660031901126103a6576001600160a01b03611a4a612615565b1660005260106020526020604060002054604051908152f35b346103a65760203660031901126103a6576001600160a01b03611a84612615565b1660005260036020526020604060002054604051908152f35b346103a657611aab3661282a565b600254604051630736b32b60e31b81526001600160a01b03808616600483018190529594939216602082602481845afa9081156103b357611af96020926004946000916119175750156128c8565b6040516360c58eaf60e11b815292839182905afa80156103b357611b2f916000916118e857506001600160a01b03163314612d72565b611b3a821515612dcc565b611b45811515612e22565b8360005260056020526040600020846000526003602052604060002054600052602052604060002091600183019381855410611d5b57600092839283928392611bce91611b948230338e6147ab565b611b9f848b54612e7a565b8a55611bad84600e546129e3565b600e558a8552600f60205260408520611bc78382546129e3565b90556147f6565b335af1611bd9612e87565b5015611d17577fea2e0099b8cdd36ab886cecd4c54a52ab64930111ba7d00bc688f47b9ffa5b19918360005260056020526040600020846000526003602052604060002054600052602052604060002060018101541580611d05575b611c9c575b5054600084815260066020908152604080832060048084528285205480865291845282852060018101546002988901549190980154958a9052908452825195865292850195909552830152606082015260808101919091528060a081016117d7565b600701600160a01b60ff60a01b1982541617905583600052601160205242604060002055836000526003602052837f8ff77bfefa44876d0f26b8c0c1ee7102902564730e3ab6bac80bfaaec94c33bb60408060002054815190815260016020820152a284611c3a565b5060ff600782015460a01c1615611c35565b606460405162461bcd60e51b815260206004820152602060248201527f455448207472616e7366657220746f206f72646572626f6f6b206661696c65646044820152fd5b60405162461bcd60e51b815260206004820152601a60248201527f496e73756666696369656e7420455448206c69717569646974790000000000006044820152606490fd5b346103a65760203660031901126103a6577fb2ee55c75b3383382e754fd3eff2d543c0e990be639421a4e2d8f2a42c5b8fdb6020600435611ddf614782565b611dea811515612d15565b80600b55604051908152a1005b346103a65760403660031901126103a657611e10612615565b611e1861262b565b9060018060a01b0316600052600960205260406000209060018060a01b0316600052602052604060002060405190816020825491828152019160005260206000209060005b818110611e7457610b9785610b8b81870382612698565b8254845260209093019260019283019201611e5d565b346103a65760003660031901126103a6576020601354604051908152f35b60403660031901126103a657611ebc612615565b600254604051630736b32b60e31b81526001600160a01b0383811660048301819052919360248035949193926020928792918391165afa9081156103b357611f13611f37926104d2966000916114cd5750156128c8565b611f1b6133d5565b611f29600b54341015612cc9565b6104c6600c54851015612907565b611f4134826143ff565b613426565b346103a657611f54366127b6565b6001600160a01b03928316600090815260076020908152604080832094909516825292835283812091815290825282902080546001820154600283015460038401546004850154600590950154875194855295840192909252948201949094526060810193909352608083015260a082015260c090f35b346103a657611fd936612736565b600254604051630736b32b60e31b81526001600160a01b0380871660048301819052969495939260209183916024918391165afa80156103b357612025916000916114cd5750156128c8565b61202d6133d5565b612038851515612953565b61204d82518551811490816114c25750612b87565b61205b601483511115612bcb565b815161c35081029080820461c35014901517156108a357620186a081018091116108a35761208b905a1015612c21565b60005b825181101561148d57806120a460019287612c79565b5115158061210b575b6120b690612997565b6120da6120c38286612c79565b518860005260046020526040600020541015612c8d565b6121056120e78288612c79565b516120f28386612c79565b516120fd8488612c79565b519188613d02565b0161208e565b506120b661271061211c8389612c79565b51111590506120ad565b346103a65760203660031901126103a6576001600160a01b03612147612615565b1660005260046020526020604060002054604051908152f35b346103a65760203660031901126103a657604061218361217e612615565b612a65565b82519182526020820152f35b346103a65760003660031901126103a6576020600c54604051908152f35b346103a65760003660031901126103a6576020600b54604051908152f35b346103a65760403660031901126103a6576104d26121e7612615565b6121ef6133d5565b602435906142d4565b346103a65760003660031901126103a657602060405161c3508152f35b60603660031901126103a657612229612615565b602435612234612689565b6002546040516316ed852560e01b815233600482015291929190602090829060249082906001600160a01b03165afa9081156103b357600091612450575b50156123f45734156123c15761228a34600d546129e3565b600d55811561234c5760018060a01b038316600052600560205260406000208160005260205260026040600020015415612314576122c93482856141cd565b604080513481526001600160a01b0390941660208501528301521515606082015233907ffe768c9e0e173d1e33c312280eec1c38df0e38493222f68bb0e07c7e5ec9215390608090a2005b60405162461bcd60e51b815260206004820152601060248201526f4e6f20455448206c697175696469747960801b6044820152606490fd5b60018060a01b03831660005260066020526040600020816000526020526002604060002001541561238757612382348285614128565b6122c9565b60405162461bcd60e51b81526020600482015260126024820152714e6f20746f6b656e206c697175696469747960701b6044820152606490fd5b60405162461bcd60e51b815260206004820152600b60248201526a139bc8115512081cd95b9d60aa1b6044820152606490fd5b60405162461bcd60e51b815260206004820152602e60248201527f4f6e6c7920726577617264206469737472696275746f722063616e2063616c6c60448201526d103a3434b990333ab731ba34b7b760911b6064820152608490fd5b612469915060203d60201161050c576104fe8183612698565b84612272565b346103a65760c03660031901126103a657612488612615565b600254604051630736b32b60e31b81526001600160a01b0383811660048301819052919360248035949193926020928792918391165afa9081156103b3576104ac6124df926104d2966000916114cd5750156128c8565b6124ef608435604435848461391d565b60a4359160643591613d02565b346103a65760003660031901126103a6576020600d54604051908152f35b346103a65760403660031901126103a6576001600160a01b0361253b612615565b16600052600660205260406000206024356000526020526040600020805490610b976001820154916002810154936003820154916004810154600582015490600760068401549301549460405198899860ff8860a01c169760018060a01b0316968a612641565b346103a65760403660031901126103a6576125bb612615565b600254630736b32b60e31b83526001600160a01b038083166004850181905260248035949391926020928792918391165afa9081156103b35761260d611f41926104d2966000916114cd5750156128c8565b611f296133d5565b600435906001600160a01b03821682036103a657565b602435906001600160a01b03821682036103a657565b979491926101009794919a9996936101208a019b8a5260208a015260408901526060880152608087015260a086015260c085015260018060a01b031660e08401521515910152565b6044359081151582036103a657565b90601f801991011681019081106001600160401b038211176126b957604052565b634e487b7160e01b600052604160045260246000fd5b9080601f830112156103a6578135916001600160401b0383116126b9578260051b90604051936127026020840186612698565b84526020808501928201019283116103a657602001905b8282106127265750505090565b8135815260209182019101612719565b9060806003198301126103a6576004356001600160a01b03811681036103a657916024356001600160401b0381116103a65781612775916004016126cf565b916044356001600160401b0381116103a65782612794916004016126cf565b91606435906001600160401b0382116103a6576127b3916004016126cf565b90565b60609060031901126103a6576004356001600160a01b03811681036103a657906024356001600160a01b03811681036103a6579060443590565b602060408183019282815284518094520192019060005b8181106128145750505090565b8251845260209384019390920191600101612807565b60609060031901126103a6576004356001600160a01b03811681036103a657906024359060443590565b60809060031901126103a6576004356001600160a01b03811681036103a65790602435906044359060643590565b805482101561289a5760005260206000200190600090565b634e487b7160e01b600052603260045260246000fd5b908160209103126103a6575180151581036103a65790565b156128cf57565b60405162461bcd60e51b815260206004820152601060248201526f151bdad95b881a5cc8189b1bd8dad95960821b6044820152606490fd5b1561290e57565b60405162461bcd60e51b815260206004820152601a60248201527f546f6b656e20616d6f756e742062656c6f77206d696e696d756d0000000000006044820152606490fd5b1561295a57565b60405162461bcd60e51b8152602060048201526015602482015274496e76616c696420746f6b656e206164647265737360581b6044820152606490fd5b1561299e57565b60405162461bcd60e51b815260206004820152601960248201527f496e76616c6964207368617265732070657263656e74616765000000000000006044820152606490fd5b919082018092116108a357565b156129f757565b60405162461bcd60e51b815260206004820152601360248201527214185a5c88191bd95cc81b9bdd08195e1a5cdd606a1b6044820152606490fd5b51906001600160701b03821682036103a657565b908160209103126103a657516001600160a01b03811681036103a65790565b6001600160a01b03612a7682612ec6565b16612a828115156129f0565b604051630240bc6b60e21b815291606083600481855afa9182156103b3576000938493612b29575b5090602060049260405193848092630dfe168160e01b82525afa9182156103b357600092612b08575b506001600160a01b03918216911603612af8576001600160701b038091925b16911691565b6001600160701b03908190612af2565b612b2291925060203d602011611910576119028183612698565b9038612ad3565b939092506060843d606011612b7f575b81612b4660609383612698565b810103126111c557612b5784612a32565b906040612b6660208701612a32565b95015163ffffffff8116036111c5575092916020612aaa565b3d9150612b39565b15612b8e57565b60405162461bcd60e51b8152602060048201526015602482015274092dcecc2d8d2c840cae0dec6d0e640d8cadccee8d605b1b6044820152606490fd5b15612bd257565b60405162461bcd60e51b815260206004820152601460248201527342617463682073697a6520746f6f206c6172676560601b6044820152606490fd5b818102929181159184041417156108a357565b15612c2857565b60405162461bcd60e51b8152602060048201526024808201527f496e73756666696369656e742067617320666f72206261746368206f706572616044820152633a34b7b760e11b6064820152608490fd5b805182101561289a5760209160051b010190565b15612c9457565b60405162461bcd60e51b815260206004820152600d60248201526c092dcecc2d8d2c840cae0dec6d609b1b6044820152606490fd5b15612cd057565b60405162461bcd60e51b815260206004820152601860248201527f45544820616d6f756e742062656c6f77206d696e696d756d00000000000000006044820152606490fd5b15612d1c57565b60405162461bcd60e51b815260206004820152602860248201527f4d696e696d756d206c6971756964697479206d75737420626520677265617465604482015267072207468616e20360c41b6064820152608490fd5b15612d7957565b60405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f72646572626f6f6b2063616e2063616c6c20746869732066756e60448201526431ba34b7b760d91b6064820152608490fd5b15612dd357565b60405162461bcd60e51b815260206004820152602160248201527f45544820616d6f756e74206d7573742062652067726561746572207468616e206044820152600360fc1b6064820152608490fd5b15612e2957565b60405162461bcd60e51b815260206004820152602360248201527f546f6b656e20616d6f756e74206d75737420626520677265617465722074686160448201526206e20360ec1b6064820152608490fd5b919082039182116108a357565b3d15612ec1573d906001600160401b0382116126b95760405191612eb5601f8201601f191660200184612698565b82523d6000602084013e565b606090565b6002546040516303e21fa960e61b815290602090829060049082906001600160a01b03165afa9081156103b357600091613045575b506001600160a01b0316801561300f5760405163c45a015560e01b815290602082600481845afa9081156103b357600492600092612fed575b50602090604051938480926315ab88c960e31b82525afa9081156103b357612f9693602093600093612fce575b5060405163e6a4390560e01b81526001600160a01b039182166004820152921660248301529092839190829081906044820190565b03916001600160a01b03165afa9081156103b357600091612fb5575090565b6127b3915060203d602011611910576119028183612698565b612fe6919350843d8611611910576119028183612698565b9138612f61565b602091925061300890823d8411611910576119028183612698565b9190612f34565b60405162461bcd60e51b815260206004820152600e60248201526d149bdd5d195c881b9bdd081cd95d60921b6044820152606490fd5b61305e915060203d602011611910576119028183612698565b38612efb565b1561306b57565b60405162461bcd60e51b8152602060048201526011602482015270125b9d985b1a59081c9958da5c1a595b9d607a1b6044820152606490fd5b156130ab57565b60405162461bcd60e51b815260206004820152601d60248201527f416d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606490fd5b156130f757565b60405162461bcd60e51b8152602060048201526015602482015274115512081dda5d1a191c985dd85b0819985a5b1959605a1b6044820152606490fd5b47613144600d54600e5490612e7a565b6000918181116133c4575b505080159182159182613346575b506001600160a01b03169081156132f9576040516370a0823160e01b815230600482015291602083602481845afa9283156103b3576000936132c5575b5080600052600f6020526131c260406000205482600052601060205260406000205490612e7a565b6000938181116132b2575b50508215159283613236575b50509161322e575b50156131e957565b60405162461bcd60e51b815260206004820152601e60248201527f4e6f206578636573736976652066756e647320746f20776974686472617700006044820152606490fd5b9050386131e1565b60005461324e9082906001600160a01b0316846149d9565b7fdfd9f8c3a5c5053800e06b62919c8c2d37e622f66afc4e1ebcf7306cc637a0fd608060018060a01b03600054169260405190815260406020820152601060408201526f45786365737369766520746f6b656e7360801b6060820152a338806131d9565b6132bd929450612e7a565b9138806131cd565b90926020823d6020116132f1575b816132e060209383612698565b810103126111c5575051913861319a565b3d91506132d3565b505061330157565b60405162461bcd60e51b815260206004820152601c60248201527f4e6f206578636573736976652045544820746f207769746864726177000000006044820152606490fd5b806133656000808080809660018060a01b038254165af1610d48612e87565b7fdfd9f8c3a5c5053800e06b62919c8c2d37e622f66afc4e1ebcf7306cc637a0fd608060018060a01b038454169260405190815260406020820152600d60408201526c08af0c6cae6e6d2ecca408aa89609b1b6060820152a33861315d565b6133ce9250612e7a565b388061314f565b6002600154146133e6576002600155565b633ee5aeb560e01b60005260046000fd5b60001981146108a35760010190565b8115613410570490565b634e487b7160e01b600052601260045260246000fd5b6001600160a01b038116600081815260066020908152604080832060048352818420548452909152902060078101549293909260a01c60ff16613729575b60078301805461348f91906001600160a01b031615613702575b546001600160a01b031615156129f0565b6000828152600860209081526040808320338085529083528184208685526004845282852054808652908452828520878652600a855283862092865291909352908320805492969195939192909190815b8181106136d7575b505015613673575b507f4e454f01a53c7bed07081706a3ead05bd1bfa0c411a0ee8db5304398f87a97be94506135d7918391600186019081549687613600575b6004670de0b6b3a764000061358484549561355461354d60028801988954908c614bc8565b809d6129e3565b8091556135628986546129e3565b855582613573600388015483612c0e565b046002860155600586015490612c0e565b04910155600181016135978582546129e3565b90556135a48482546129e3565b90556135b18682546129e3565b905580600052600f60205260406000206135cc8382546129e3565b9055309033906147ab565b604080516001600160a01b0390951685526020850191909152830152339180606081015b0390a2565b613626670de0b6b3a764000061361a60038501548b612c0e565b04600283015490612e7a565b613635600383019182546129e3565b905561365d670de0b6b3a764000061365160058501548b612c0e565b04600483015490612e7a565b61366c600583019182546129e3565b9055613528565b91825491600160401b8310156126b9577f4e454f01a53c7bed07081706a3ead05bd1bfa0c411a0ee8db5304398f87a97be966136b9846135d79660018997018155612882565b819291549060031b91821b91600019901b19161790559150916134f0565b886136e28286612882565b90549060031b1c146136f6576001016134e0565b505050600138806134e8565b6001600160a01b0361371387612ec6565b82546001600160a01b031916911617815561347e565b9150806000526012602052613746604060002054601354906129e3565b42106137fe576137568284614abf565b601454116137a657806000526004602052604060002061377681546133f7565b90558060005260066020526040600020816000526004602052604060002054600052602052604060002091613464565b60405162461bcd60e51b815260206004820152602a60248201527f496e73756666696369656e7420746f6b656e206c697175696469747920666f72604482015269040dccaee40cae0dec6d60b31b6064820152608490fd5b60405162461bcd60e51b815260206004820152602360248201527f546f6b656e2065706f636820636f6f6c646f776e20706572696f64206e6f74206044820152621b595d60ea1b6064820152608490fd5b1561385657565b60405162461bcd60e51b815260206004820152601160248201527027379039b430b932b9903a3790313ab93760791b6044820152606490fd5b1561389657565b60405162461bcd60e51b815260206004820152601b60248201527f496e73756666696369656e742073686172657320746f206275726e00000000006044820152606490fd5b156138e257565b60405162461bcd60e51b8152602060048201526013602482015272115512081d1c985b9cd9995c8819985a5b1959606a1b6044820152606490fd5b6001600160a01b0381166000818152600560209081526040808320888452825280832093835260078252808320338452825280832088845290915290206002820154929591949093919215613cbd578354938415613c78576001810154956139a1670de0b6b3a764000061399560038401548a612c0e565b04600284015490612e7a565b6139b0600384019182546129e3565b90556127106139f66139de670de0b6b3a76400006139d260058601548c612c0e565b04600486015490612e7a565b956139ee600586019788546129e3565b875589612c0e565b0496613a0388151561384f565b613a0f8189111561388f565b600182015496613a246002840154898b614c3a565b978811613c3357600492613a508a670de0b6b3a764000094613a498c613ac196612e7a565b8855612e7a565b6001860155613a9a898254613a908d613a698184612c0e565b613a86613a7b60028901548093613406565b956001890154612e7a565b6001880155612e7a565b6002850155612e7a565b8155600560018601549184613ab3600383015485612c0e565b046002880155015490612c0e565b049101558310613bee577f0cefddbb83fdab6e373960a82f3f71f90425e6db040cdced3b6281e98a531ac6936135fb91613b0b600080808089335af1613b05612e87565b506138db565b8054908115159081613b57575b505050613b2784600e546129e3565b600e5560405193849333978590949392606092608083019660018060a01b03168352602083015260408201520152565b6000905560018060a01b03881660005260106020526040600020613b7c8382546129e3565b9055613bd5575b604080519182526001600160a01b038816602083015281018490526000606082015233907fbd69d0a1994373bdcbe4508591ab6273312f8b47c858d8fa192f9883db5fad5490608090a2388080613b18565b613be981336001600160a01b038a166149d9565b613b83565b60405162461bcd60e51b815260206004820152601a60248201527f496e73756666696369656e74204554482077697468647261776e0000000000006044820152606490fd5b60405162461bcd60e51b815260206004820152601860248201527f496e73756666696369656e742045544820696e20706f6f6c00000000000000006044820152606490fd5b60405162461bcd60e51b815260206004820152601c60248201527f4e6f20455448206c697175696469747920746f207769746864726177000000006044820152606490fd5b60405162461bcd60e51b815260206004820152601860248201527f4e6f20455448206c697175696469747920696e20706f6f6c00000000000000006044820152606490fd5b6001600160a01b03811660008181526006602090815260408083208884528252808320848452600883528184203385528352818420898552909252909120600282015493969295919492939091901561409757815492831561405257612710613ddf600185015492613d90670de0b6b3a7640000613d8460038c015487612c0e565b04600288015490612e7a565b613d9f600388019182546129e3565b9055613dd4613dca670de0b6b3a7640000613dbe60058d015488612c0e565b04600489015490612e7a565b60058801546129e3565b600587015583612c0e565b0493613dec85151561384f565b613df88286111561388f565b600187015496613e0d60028201548988614c3a565b97881161400d57613e2f86670de0b6b3a764000094613a498b613e4896612e7a565b6001860155613a9a888254613a9089613a698184612c0e565b0460048301558410613fc85783613fb8575b60058101549081613ed5575b50506135fb907fa1303cdb626ce003a010bacabb6b89278f16b4b2b93ea5981b06927e1386a6be9460005260106020526040600020613ea68582546129e3565b905560405193849333978590949392606092608083019660018060a01b03168352602083015260408201520152565b60056000919392930155613eeb82600e546129e3565b600e55600080808085335af1613eff612e87565b5015613f73577fa1303cdb626ce003a010bacabb6b89278f16b4b2b93ea5981b06927e1386a6be946135fb92604051908152816020820152846040820152600160608201527fbd69d0a1994373bdcbe4508591ab6273312f8b47c858d8fa192f9883db5fad5460803392a294819250613e66565b60405162461bcd60e51b815260206004820152601a60248201527f45544820726577617264207472616e73666572206661696c65640000000000006044820152606490fd5b613fc38433876149d9565b613e5a565b60405162461bcd60e51b815260206004820152601c60248201527f496e73756666696369656e7420746f6b656e2077697468647261776e000000006044820152606490fd5b60405162461bcd60e51b815260206004820152601b60248201527f496e73756666696369656e7420746f6b656e7320696e20706f6f6c00000000006044820152606490fd5b60405162461bcd60e51b815260206004820152601e60248201527f4e6f20746f6b656e206c697175696469747920746f20776974686472617700006044820152606490fd5b60405162461bcd60e51b815260206004820152601a60248201527f4e6f20746f6b656e206c697175696469747920696e20706f6f6c0000000000006044820152606490fd5b156140e357565b60405162461bcd60e51b815260206004820152601e60248201527f4f766572666c6f7720696e207265776172642063616c63756c6174696f6e00006044820152606490fd5b908215916141368315612dcc565b6001600160a01b031661414a811515612953565b6000526006602052604060002090600052602052604060002060028101549081156141c75760038101805490670de0b6b3a7640000860294868604670de0b6b3a76400001417156108a3576141b96141b06141aa6004966141c398613406565b846129e3565b928310156140dc565b55019182546129e3565b9055565b50505050565b908215916141db8315612dcc565b6001600160a01b03166141ef811515612953565b6000526005602052604060002090600052602052604060002060028101549081156141c75760038101805490670de0b6b3a7640000860294868604670de0b6b3a76400001417156108a3576141b96141b06141aa6004966141c398613406565b1561425657565b60405162461bcd60e51b815260206004820152601760248201527f4e6f206c6971756964697479206f7220726577617264730000000000000000006044820152606490fd5b156142a257565b60405162461bcd60e51b815260206004820152600a6024820152694e6f207265776172647360b01b6044820152606490fd5b907f1d45e83204ae8ac3c983279e1702fedb359cbdf2864fe2424036661462f51bb59060018060a01b038316928360005260056020526040600020826000526020526040600020936000526007602052604060002060018060a01b0333166000526020526040600020826000526020526000670de0b6b3a764000061437a6040832096600360018901549182158015906143f3575b6143729061424f565b015490612c0e565b0494600281019561439c6003614391895484612e7a565b9301928354906129e3565b966143a888151561429b565b55556143b684600e546129e3565b600e556143cd600080808088335af1613b05612e87565b604080519485526001600160a01b039091166020850152830152339180606081016135fb565b50898201541515614369565b6001600160a01b0381166000818152600560209081526040808320600383528184205484529091529020600701549192909160a01c60ff16614699575b816000526005602052604060002082600052600360205260406000205460005260205260406000209061448c6007830160018060a01b038154161561370257546001600160a01b031615156129f0565b6000838152600760209081526040808320338085529083528184208785526003845282852054808652908452828520978552600984528285209185529252822080549095949290815b81811061466e575b505015614612575b507fc1405abcead391364eb128c74abfd38ebed1c7984fc9f8a96764b0dd35076d6093506001830190815493846145b7575b6004670de0b6b3a764000061455184549561454361453c60028801988954908b614bc8565b809a6129e3565b8091556135628886546129e3565b04910155600181016145648482546129e3565b90556145718382546129e3565b905561457e8382546129e3565b905561458c81600d546129e3565b600d55604080516001600160a01b0390951685526020850191909152830152339180606081016135fb565b6145d1670de0b6b3a764000061361a600385015488612c0e565b6145e0600383019182546129e3565b90556145fc670de0b6b3a7640000613651600585015488612c0e565b61460b600583019182546129e3565b9055614517565b845494600160401b8610156126b957856146529160017fc1405abcead391364eb128c74abfd38ebed1c7984fc9f8a96764b0dd35076d6098018155612882565b819291549060031b91821b91600019901b1916179055386144e5565b83614679828a612882565b90549060031b1c1461468d576001016144d5565b505050600138806144dd565b8160005260116020526146b4604060002054601354906129e3565b42106147335760145481106146e25781600052600360205260406000206146db81546133f7565b905561443c565b60405162461bcd60e51b8152602060048201526024808201527f496e73756666696369656e74206c697175696469747920666f72206e657720656044820152630e0dec6d60e31b6064820152608490fd5b60405162461bcd60e51b815260206004820152602160248201527f4554482065706f636820636f6f6c646f776e20706572696f64206e6f74206d656044820152601d60fa1b6064820152608490fd5b6000546001600160a01b0316330361479657565b63118cdaa760e01b6000523360045260246000fd5b6040516323b872dd60e01b60208201526001600160a01b0392831660248201529290911660448301526064808301939093529181526147f4916147ef608483612698565b614d57565b565b8115906148038215612e22565b6001600160a01b0316614817811515612953565b8060005260056020526040600020906000526003602052604060002054600052602052604060002060028101549081156141c7576005810191825493670de0b6b3a7640000860290868204670de0b6b3a76400001417156108a35761487f916141aa91613406565b928310614897576141c39260069255019182546129e3565b60405162461bcd60e51b8152602060048201526024808201527f4f766572666c6f7720696e20746f6b656e207265776172642063616c63756c616044820152633a34b7b760e11b6064820152608490fd5b8115906148f58215612dcc565b6001600160a01b0316614909811515612953565b8060005260066020526040600020906000526004602052604060002054600052602052604060002060028101549081156141c7576005810191825493670de0b6b3a7640000860290868204670de0b6b3a76400001417156108a357614971916141aa91613406565b928310614989576141c39260069255019182546129e3565b60405162461bcd60e51b815260206004820152602260248201527f4f766572666c6f7720696e20455448207265776172642063616c63756c61746960448201526137b760f11b6064820152608490fd5b60405163a9059cbb60e01b60208201526001600160a01b0390921660248301526044808301939093529181526147f4916147ef606483612698565b907fc2fb15ddd811ac75ca2d2b41c73d6a65b7f6be463edc76bae909715e6ad296439060018060a01b038316928360005260066020526040600020826000526020526040600020936000526008602052604060002060018060a01b0333166000526020526040600020826000526020526000670de0b6b3a764000061437a6040832096600360018901549182158015906143f3576143729061424f565b604d81116108a357600a0a90565b90614ac982612a65565b9190928215614bbe5760405163313ce56760e01b815290602090829060049082906001600160a01b03165afa9081156103b357600091614b7d575b5060ff166012811015614b405760120392601284116108a357614b36614b3b92614b306127b396614ab1565b90612c0e565b612c0e565b613406565b926012841115614b6f5760111984019384116108a357614b36614b3b92614b696127b396614ab1565b90613406565b6127b39350614b3b91612c0e565b6020813d602011614bb6575b81614b9660209383612698565b81010312614bb257519060ff821682036111c5575060ff614b04565b5080fd5b3d9150614b89565b5050505060145490565b91614bd48315156130a4565b8015614c3557614b3b90614be793612c0e565b8015614bf05790565b60405162461bcd60e51b815260206004820152601b60248201527f496e73756666696369656e742073686172657320746f206d696e7400000000006044820152606490fd5b505090565b90918115614d04578015614cb357614b3b83614c5593612c0e565b908111614c5f5790565b60405162461bcd60e51b815260206004820152602660248201527f5769746864726177616c20616d6f756e74206578636565647320706f6f6c2062604482015265616c616e636560d01b6064820152608490fd5b60405162461bcd60e51b815260206004820152602360248201527f546f74616c20736861726573206d75737420626520677265617465722074686160448201526206e20360ec1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602560248201527f53686172657320746f206275726e206d75737420626520677265617465722074604482015264068616e20360dc1b6064820152608490fd5b906000602091828151910182855af1156103b3576000513d614da957506001600160a01b0381163b155b614d885750565b635274afe760e01b60009081526001600160a01b0391909116600452602490fd5b60011415614d8156fea2646970667358221220a38ed85a1a4f4080adcc48a8fb0487008c2e041006cb44a478259dda3e4f7a8464736f6c634300081a0033000000000000000000000000604d5cbe788cba5115ffd3e2407bd4c4b7f81a1e