2 txs
15 calls
constructor
constructor(address[] admins, address[] operators, address teaToken_, address treasury_, uint256 unstakeCooldownDuration_, uint256 rewardCooldownDuration_, uint256 totalAllocation_, address permit2_, address trustedForwarder_)
functions
ADMIN_ROLE
viewfunction ADMIN_ROLE() view returns (bytes32)
COLLECT_REWARD_TYPEHASH
viewfunction COLLECT_REWARD_TYPEHASH() view returns (bytes32)
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
eip712Domain
viewfunction eip712Domain() view returns (bytes1 fields, string name, string version, uint256 chainId, address verifyingContract, bytes32 salt, uint256[] extensions)
getPoolInfo
viewfunction getPoolInfo(uint64 poolId) view returns (tuple)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
getStakerInfo
viewfunction getStakerInfo(address staker) view returns (tuple)
getTotalStakedByStakerByPool
viewfunction getTotalStakedByStakerByPool(address staker, uint64 poolId) view returns (uint256)
getWithdrawableRewardIds
viewfunction getWithdrawableRewardIds(address staker) view returns (tuple[] ids)
getWithdrawableStakeIds
viewfunction getWithdrawableStakeIds(address staker) view returns (tuple[] ids)
hashTypedDataV4
viewfunction hashTypedDataV4(bytes32 structHash) view returns (bytes32)
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
isTrustedForwarder
viewfunction isTrustedForwarder(address forwarder) view returns (bool)
OPERATOR_ROLE
viewfunction OPERATOR_ROLE() view returns (bytes32)
operatorUserNonces
viewfunction operatorUserNonces(address, address) view returns (uint256)
permit2
viewfunction permit2() view returns (address)
poolCounter
viewfunction poolCounter() view returns (uint64)
rewardCooldownDuration
viewfunction rewardCooldownDuration() view returns (uint256)
rewardCounter
viewfunction rewardCounter() view returns (uint64)
rewardRecords
viewfunction rewardRecords(uint256) view returns (address recipient, uint256 rewardAmount, uint256 endCooldownTimestamp)
stakeCounter
viewfunction stakeCounter() view returns (uint64)
stakeRecords
viewfunction stakeRecords(uint256) view returns (address staker, uint64 poolId, uint256 stakedAmount)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
teaToken
viewfunction teaToken() view returns (address)
totalAllocation
viewfunction totalAllocation() view returns (uint256)
transferredTokens
viewfunction transferredTokens(address) view returns (uint256)
treasury
viewfunction treasury() view returns (address)
trustedForwarder
viewfunction trustedForwarder() view returns (address)
unstakeCooldownDuration
viewfunction unstakeCooldownDuration() view returns (uint256)
unstakeCounter
viewfunction unstakeCounter() view returns (uint64)
unstakeRecords
viewfunction unstakeRecords(uint256) view returns (uint64 stakeId, address staker, address synthToken, uint256 unstakedAmount, uint256 endCooldownTimestamp)
collectReward
nonpayablefunction collectReward(tuple param)
createPool
nonpayablefunction createPool(address synthToken_)
emergencyWithdrawErc20
nonpayablefunction emergencyWithdrawErc20(address[] tokens, address recipient)
emergencyWithdrawEth
nonpayablefunction emergencyWithdrawEth(address recipient)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
multicall
nonpayablefunction multicall(bytes[] data) returns (bytes[] results)
renounceRole
nonpayablefunction renounceRole(bytes32 role, address callerConfirmation)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
setRewardCooldownDuration
nonpayablefunction setRewardCooldownDuration(uint256 duration)
setTotalAllocation
nonpayablefunction setTotalAllocation(uint256 totalAllocation_)
setTreasury
nonpayablefunction setTreasury(address treasury_)
setUnstakeCooldownDuration
nonpayablefunction setUnstakeCooldownDuration(uint256 duration)
stake
nonpayablefunction stake(uint64 poolId, uint256 amount, tuple permitSingleStruct, bytes permitSingleSignature, tuple tokenPermitSignatureDetails)
stake
nonpayablefunction stake(uint64 poolId, uint256 amount, tuple permitSingleStruct, bytes permitSingleSignature)
stake
nonpayablefunction stake(uint64 poolId, uint256 amount)
unstake
nonpayablefunction unstake(uint64 stakeId, uint256 amount)
withdrawReward
nonpayablefunction withdrawReward(uint64 rewardId)
withdrawStake
nonpayablefunction withdrawStake(uint64 unstakeId)
events
CollectedReward
event CollectedReward(uint64 indexed rewardId, address indexed staker, uint256 amount, uint256 endCooldownTimestamp)
CreatedPool
event CreatedPool(uint256 indexed poolId, address indexed token)
EIP712DomainChanged
event EIP712DomainChanged()
EmergencyWithdrawErc20
event EmergencyWithdrawErc20(address recipient, address[] tokens)
EmergencyWithdrawEth
event EmergencyWithdrawEth(address recipient, uint256 amount)
RoleAdminChanged
event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole)
RoleGranted
event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender)
RoleRevoked
event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender)
SetRewardCooldownDuration
event SetRewardCooldownDuration(uint256 oldDuration, uint256 newDuration)
SetTotalAllocation
event SetTotalAllocation(uint256 oldAllocation, uint256 newAllocation)
SetTreasury
event SetTreasury(address oldTreasury, address newTreasury)
SetUnstakeCooldownDuration
event SetUnstakeCooldownDuration(uint256 oldDuration, uint256 newDuration)
Staked
event Staked(uint64 indexed stakeId, address indexed token, address indexed staker, uint256 amount)
Unstaked
event Unstaked(uint64 indexed unstakeId, uint64 indexed stakeId, address indexed staker, uint256 amount, uint256 endCooldownTimestamp)
WithdrewReward
event WithdrewReward(uint64 indexed rewardId, address indexed staker, uint256 amount)
WithdrewStake
event WithdrewStake(uint64 indexed unstakeId, address indexed staker, address indexed token, uint256 amount)
errors
AccessControlBadConfirmation
error AccessControlBadConfirmation()
AccessControlUnauthorizedAccount
error AccessControlUnauthorizedAccount(address account, bytes32 neededRole)
AddressEmptyCode
error AddressEmptyCode(address target)
ECDSAInvalidSignature
error ECDSAInvalidSignature()
ECDSAInvalidSignatureLength
error ECDSAInvalidSignatureLength(uint256 length)
ECDSAInvalidSignatureS
error ECDSAInvalidSignatureS(bytes32 s)
EmptyArray
error EmptyArray()
EthRefundFailed
error EthRefundFailed()
FailedCall
error FailedCall()
InvalidCaller
error InvalidCaller(address caller)
InvalidCollectRewardSignature
error InvalidCollectRewardSignature(string errorReason)
InvalidPoolId
error InvalidPoolId(uint256 poolId)
InvalidShortString
error InvalidShortString()
InvalidTransferredAmount
error InvalidTransferredAmount(uint256 amount)
InvalidUnstakeAmount
error InvalidUnstakeAmount(uint256 amount)
NotStakedYet
error NotStakedYet(address caller)
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
RewardCooldownNotEnded
error RewardCooldownNotEnded(uint256 rewardId)
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
StringTooLong
error StringTooLong(string str)
UnstakeCooldownNotEnded
error UnstakeCooldownNotEnded(uint256 unstakeId)
ZeroAddress
error ZeroAddress()
ZeroUint256
error ZeroUint256()
creation bytecode
0x6101c060405234801561001157600080fd5b50604051614b91380380614b9183398101604081905261003091610777565b604080518082018252600c81526b53796e74685374616b696e6760a01b602080830191909152825180840190935260038352620312e360ec1b908301528291848c8c8c8c8c8c8c846001600160a01b03811661009f5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0386166080526100b6888861020e565b6100bf85610302565b6100c884610394565b6100d1836103f8565b6100da8261045c565b5050506001600160a01b038616945061010b93505050505760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b031660a0526001600c5561012782600d6104c0565b6101605261013681600e6104c0565b61018052815160208084019190912061012052815190820120610140524660e0526101c56101205161014051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60c052505030610100526001600160a01b039081166101a052819081166101ff5760405163d92e233d60e01b815260040160405180910390fd5b50505050505050505050610a94565b8151158061021b57508051155b156102395760405163521299a960e01b815260040160405180910390fd5b61024b60006102466104f3565b610502565b815160005b818110156102ac576102a47fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177560001b85838151811061029157610291610842565b602002602001015161050260201b60201c565b600101610250565b5050805160005b818110156102fc576102f47f20296b01d0b6bd176f0c1e29644934c0047abf080dae43609a1bbc09e39bafdb60001b84838151811061029157610291610842565b6001016102b3565b50505050565b806001600160a01b03811661032a5760405163d92e233d60e01b815260040160405180910390fd5b600154604080516001600160a01b03928316815291841660208301527f190c262dc6f09322c68a13bf67c9659e58367755ba6190fa7ce5ca8aa45a877d910160405180910390a150600180546001600160a01b0319166001600160a01b0392909216919091179055565b80806000036103b6576040516352036b1b60e11b815260040160405180910390fd5b60035460408051918252602082018490527f2be251d6fc5becaacca7b92a211301eb1556882ed254f8872218f4a6bbe17bdb910160405180910390a150600355565b808060000361041a576040516352036b1b60e11b815260040160405180910390fd5b60045460408051918252602082018490527f3f9b76dbea25aaf9baa305c55ce1afcf3b359112b56768ec5e80a14a8f23d5f8910160405180910390a150600455565b808060000361047e576040516352036b1b60e11b815260040160405180910390fd5b60055460408051918252602082018490527f2baaa52b6e7a576ccc4b906abbc5d972c681024c2f38c262d892ca7ccfe82e95910160405180910390a150600555565b60006020835110156104dc576104d583610534565b90506104ed565b816104e784826108e1565b5060ff90505b92915050565b60006104fd61057b565b905090565b806001600160a01b03811661052a5760405163d92e233d60e01b815260040160405180910390fd5b6102fc83836105cd565b600080829050601f81511115610568578260405163305a27a960e01b815260040161055f919061099f565b60405180910390fd5b8051610573826109ed565b179392505050565b600036601461058933610678565b80156105955750808210155b156105c5576000366105a78385610a11565b6105b2928290610a32565b6105bb91610a5c565b60601c9250505090565b339250505090565b6000828152602081815260408083206001600160a01b038516845290915281205460ff16610670576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556106286104f3565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016104ed565b5060006104ed565b60006106846101a05190565b6001600160a01b0316826001600160a01b0316149050919050565b634e487b7160e01b600052604160045260246000fd5b80516001600160a01b03811681146106cc57600080fd5b919050565b600082601f8301126106e257600080fd5b81516001600160401b038111156106fb576106fb61069f565b604051600582901b90603f8201601f191681016001600160401b03811182821017156107295761072961069f565b60405291825260208185018101929081018684111561074757600080fd5b6020860192505b8383101561076d5761075f836106b5565b81526020928301920161074e565b5095945050505050565b60008060008060008060008060006101208a8c03121561079657600080fd5b89516001600160401b038111156107ac57600080fd5b6107b88c828d016106d1565b60208c0151909a5090506001600160401b038111156107d657600080fd5b6107e28c828d016106d1565b9850506107f160408b016106b5565b96506107ff60608b016106b5565b60808b015160a08c015160c08d01519298509096509450925061082460e08b016106b5565b91506108336101008b016106b5565b90509295985092959850929598565b634e487b7160e01b600052603260045260246000fd5b600181811c9082168061086c57607f821691505b60208210810361088c57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156108dc57806000526020600020601f840160051c810160208510156108b95750805b601f840160051c820191505b818110156108d957600081556001016108c5565b50505b505050565b81516001600160401b038111156108fa576108fa61069f565b61090e816109088454610858565b84610892565b6020601f821160018114610942576000831561092a5750848201515b600019600385901b1c1916600184901b1784556108d9565b600084815260208120601f198516915b828110156109725787850151825560209485019460019092019101610952565b50848210156109905786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b602081526000825180602084015260005b818110156109cd57602081860181015160408684010152016109b0565b506000604082850101526040601f19601f83011684010191505092915050565b8051602080830151919081101561088c5760001960209190910360031b1b16919050565b818103818111156104ed57634e487b7160e01b600052601160045260246000fd5b60008085851115610a4257600080fd5b83861115610a4f57600080fd5b5050820193919092039150565b80356001600160601b03198116906014841015610a8d576001600160601b0319601485900360031b81901b82161691505b5092915050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a051614043610b4e600039600081816104a30152818161059e015261292c015260006120a30152600061207601526000612b6501526000612b3d01526000612a9801526000612ac201526000612aec01526000818161035c015281816122f50152818161238201528181612bbb01528181612cbd01526133440152600081816106160152818161215e01526121e601526140436000f3fe608060405234801561001057600080fd5b50600436106102ba5760003560e01c806384b0196e11610182578063bd37b4eb116100e9578063ee535291116100a2578063f23473661161007c578063f2347366146108a7578063f3394a00146108c7578063f5b541a6146108d0578063f7b17d10146108f757600080fd5b8063ee5352911461085a578063ef786e261461086d578063f0f442601461089457600080fd5b8063bd37b4eb14610768578063bec2b7721461077b578063bf0a733a1461078e578063d0cc7fae14610821578063d547741f14610834578063ed6d23111461084757600080fd5b80639a64ab041161013b5780639a64ab04146106bc5780639e3079cb146106cf578063a16d68ab146106e9578063a217fddf1461072d578063ac9650d814610735578063b2c35c251461075557600080fd5b806384b0196e146105ed57806387cf6eaf146106085780638933b6fd146106115780638fe033fc146106385780639049f9d21461069657806391d14854146106a957600080fd5b80634c6423e111610226578063751c7ff1116101df578063751c7ff11461053957806375b238fc1461055957806379203dc4146105805780637c9a7853146105895780637da0a8771461059c578063841ec13a146105c257600080fd5b80634c6423e114610461578063572b6c051461049357806361d027b3146104d35780636e3251e2146104e657806372d598fa146104f9578063733bdef01461051957600080fd5b80632ce7777f116102785780632ce7777f146103ef5780632f2ff15d1461040257806336568abe1461041557806347c3c6b4146104285780634980f2881461043b5780634a5a48091461044e57600080fd5b80623ca4dc146102bf57806301ffc9a71461033457806312261ee7146103575780631abcda8e1461039657806322e907c4146103ab578063248a9ca3146103be575b600080fd5b6103026102cd3660046135c4565b600760205260009081526040902080546001909101546001600160a01b03821691600160a01b90046001600160401b03169083565b604080516001600160a01b0390941684526001600160401b039092166020840152908201526060015b60405180910390f35b6103476103423660046135dd565b610911565b604051901515815260200161032b565b61037e7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161032b565b6103a96103a4366004613642565b610948565b005b6103a96103b93660046135c4565b610ae2565b6103e16103cc3660046135c4565b60009081526020819052604090206001015490565b60405190815260200161032b565b6103a96103fd366004613738565b610afa565b6103a9610410366004613753565b610cd7565b6103a9610423366004613753565b610d02565b6103a96104363660046135c4565b610d4a565b6103e16104493660046135c4565b610d5e565b6103a961045c3660046135c4565b610d69565b60025461047b90600160801b90046001600160401b031681565b6040516001600160401b03909116815260200161032b565b6103476104a1366004613783565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0390811691161490565b60015461037e906001600160a01b031681565b6103a96104f43660046137f9565b610d7d565b61050c610507366004613783565b610d91565b60405161032b919061386a565b61052c610527366004613783565b610ea9565b60405161032b91906138f7565b6103e1610547366004613783565b600b6020526000908152604090205481565b6103e17fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b6103e160055481565b6103a9610597366004613783565b610f6c565b7f000000000000000000000000000000000000000000000000000000000000000061037e565b6103e16105d036600461394e565b600f60209081526000928352604080842090915290825290205481565b6105f5611059565b60405161032b97969594939291906139cc565b6103e160035481565b61037e7f000000000000000000000000000000000000000000000000000000000000000081565b6106716106463660046135c4565b6009602052600090815260409020805460018201546002909201546001600160a01b03909116919083565b604080516001600160a01b03909416845260208401929092529082015260600161032b565b6103a96106a4366004613783565b61109f565b6103476106b7366004613753565b611186565b60025461047b906001600160401b031681565b60025461047b90600160401b90046001600160401b031681565b6103e16106f7366004613a3c565b6001600160a01b0382166000908152600a602090815260408083206001600160401b038516845260060190915290205492915050565b6103e1600081565b610748610743366004613a68565b6111af565b60405161032b9190613add565b6103a9610763366004613738565b61130d565b61050c610776366004613783565b61149f565b6103a9610789366004613b42565b6115b0565b6107e261079c3660046135c4565b60086020526000908152604090208054600182015460028301546003909301546001600160401b03831693600160401b9093046001600160a01b03908116939216919085565b604080516001600160401b039690961686526001600160a01b03948516602087015292909316918401919091526060830152608082015260a00161032b565b6103a961082f366004613bcf565b6115db565b6103a9610842366004613753565b6119a3565b6103a9610855366004613bf9565b6119c8565b6103a9610868366004613bcf565b611b40565b6103e17f054bb8d04b5347ea0821022a1aee150e0a1e030cfa6285be1d4083121b48d31d81565b6103a96108a2366004613783565b611b4a565b6108ba6108b5366004613738565b611b5e565b60405161032b9190613c15565b6103e160045481565b6103e17f20296b01d0b6bd176f0c1e29644934c0047abf080dae43609a1bbc09e39bafdb81565b60015461047b90600160a01b90046001600160401b031681565b60006001600160e01b03198216637965db0b60e01b148061094257506301ffc9a760e01b6001600160e01b03198316145b92915050565b806001600160a01b0381166109705760405163d92e233d60e01b815260040160405180910390fd5b600061097b81611bfe565b835160005b81811015610aa157600086828151811061099c5761099c613c59565b6020908102919091018101516040805130602480830191909152825180830390910181526044909101825292830180516001600160e01b03166370a0823160e01b179052519092506000916001600160a01b038416916109fc9190613c6f565b600060405180830381855afa9150503d8060008114610a37576040519150601f19603f3d011682016040523d82523d6000602084013e610a3c565b606091505b50915050600081806020019051810190610a569190613c8b565b6001600160a01b0384166000908152600b6020526040902054909150610a93908990610a829084613cba565b6001600160a01b0386169190611c12565b505050806001019050610980565b507f04372e3a0daa683680b6a3c23954a5f06b7dd78975050c324cfd62ad4a7b3a698486604051610ad3929190613ccd565b60405180910390a15050505050565b6000610aed81611bfe565b610af682611c71565b5050565b6001600160401b038116600090815260086020526040812054600160401b90046001600160a01b031690610b2c611cd5565b9050816001600160a01b0316816001600160a01b031614610b705760405163065ece9760e51b81526001600160a01b03821660048201526024015b60405180910390fd5b6001600160401b038316600090815260086020526040902060038101544211610bb757604051631ced39bb60e11b81526001600160401b0385166004820152602401610b67565b6000610bc1611cd5565b6001600160a01b0381166000908152600a60205260409020909150610bf2906002016001600160401b038716611ce4565b50600282015460018301546001600160a01b03166000818152600b602052604081208054849290610c24908490613cba565b90915550506001600160401b038716600090815260086020526040812080546001600160e01b03191681556001810180546001600160a01b03191690556002810182905560030155610c77818484611cf7565b806001600160a01b0316836001600160a01b0316886001600160401b03167f29e0cf83549c49b9d2d84fc4a16bc39e7ca3f9c8fdf53f9478de5601dd255f6f85604051610cc691815260200190565b60405180910390a450505050505050565b600082815260208190526040902060010154610cf281611bfe565b610cfc8383611e26565b50505050565b610d0a611cd5565b6001600160a01b0316816001600160a01b031614610d3b5760405163334bd91960e11b815260040160405180910390fd5b610d458282611eb9565b505050565b6000610d5581611bfe565b610af682611f42565b600061094282611fa6565b6000610d7481611bfe565b610af682611fd3565b610d8a8585858585612037565b5050505050565b6001600160a01b0381166000908152600a6020526040812060609190610db99060040161204c565b9050806001600160401b03811115610dd357610dd3613607565b604051908082528060200260200182016040528015610e1857816020015b6040805180820190915260008082526020820152815260200190600190039081610df15790505b50915060005b81811015610ea2576001600160a01b0384166000908152600a60205260408120610e4b9060040183612056565b90506040518060400160405280828152602001600960008481526020019081526020016000206002015442111515815250848381518110610e8e57610e8e613c59565b602090810291909101015250600101610e1e565b5050919050565b610ecd60405180606001604052806060815260200160608152602001606081525090565b604080516060810182526001600160a01b0384166000908152600a602052919091208190610efa90612062565b8152602001610f2f600a6000866001600160a01b03166001600160a01b03168152602001908152602001600020600201612062565b8152602001610f64600a6000866001600160a01b03166001600160a01b03168152602001908152602001600020600401612062565b905292915050565b806001600160a01b038116610f945760405163d92e233d60e01b815260040160405180910390fd5b6000610f9f81611bfe565b478015610cfc576000846001600160a01b03168260405160006040518083038185875af1925050503d8060008114610ff3576040519150601f19603f3d011682016040523d82523d6000602084013e610ff8565b606091505b505090508061101a57604051631453fe1760e21b815260040160405180910390fd5b604080516001600160a01b0387168152602081018490527f596d18fa1eb398a524b655c673ed625f71cf12d2224681c8832413ed0b373b4c9101610ad3565b60006060806000806000606061106d61206f565b61107561209c565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217756110c981611bfe565b816001600160a01b0381166110f15760405163d92e233d60e01b815260040160405180910390fd5b600280546fffffffffffffffff0000000000000000198116600160401b918290046001600160401b03908116600181019091169092021790915560008181526006602052604080822080546001600160a01b0319166001600160a01b0388169081179091559051909183917f7524dce055c8ea88a4f9e9f8a72187c08f9d0d94834cd442b57c9bfc19b1022b9190a350505050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b606060006111bb611cd5565b6001600160a01b0316336001600160a01b031614611226576000366111e1601482613cba565b6111ec928290613d20565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061123692505050565b6040805160008152602081019091525b9050826001600160401b0381111561125057611250613607565b60405190808252806020026020018201604052801561128357816020015b606081526020019060019003908161126e5790505b50915060005b83811015611305576112e0308686848181106112a7576112a7613c59565b90506020028101906112b99190613d4a565b856040516020016112cc93929190613d90565b6040516020818303038152906040526120c9565b8382815181106112f2576112f2613c59565b6020908102919091010152600101611289565b505092915050565b6001600160401b0381166000908152600960205260408120546001600160a01b031690611338611cd5565b9050816001600160a01b0316816001600160a01b0316146113775760405163065ece9760e51b81526001600160a01b0382166004820152602401610b67565b6001600160401b03831660009081526009602052604090206002015442116113bd5760405163e73da34160e01b81526001600160401b0384166004820152602401610b67565b60006113c7611cd5565b6001600160401b038516600081815260096020908152604080832060018101546001600160a01b0387168552600a90935292209394509092909161140e9160040190611ce4565b506001600160401b038616600090815260096020526040812080546001600160a01b0319168155600181018290556002015561144a838261213f565b826001600160a01b0316866001600160401b03167ff7dd3984698e59497a2594a07917f18dd6bb187b9206fbf6cda6238a54116dab8360405161148f91815260200190565b60405180910390a3505050505050565b6001600160a01b0381166000908152600a60205260408120606091906114c79060020161204c565b9050806001600160401b038111156114e1576114e1613607565b60405190808252806020026020018201604052801561152657816020015b60408051808201909152600080825260208201528152602001906001900390816114ff5790505b50915060005b81811015610ea2576001600160a01b0384166000908152600a602052604081206115599060020183612056565b9050604051806040016040528082815260200160086000848152602001908152602001600020600301544211151581525084838151811061159c5761159c613c59565b60209081029190910101525060010161152c565b6115c66115c06020860186613783565b826122b5565b6115d38686868686612037565b505050505050565b6001600160401b0382166000908152600760205260408120546001600160a01b031690611606611cd5565b9050816001600160a01b0316816001600160a01b0316146116455760405163065ece9760e51b81526001600160a01b0382166004820152602401610b67565b8280600003611667576040516352036b1b60e11b815260040160405180910390fd5b6001600160401b0385166000908152600760205260409020600101548411156116a65760405163667e6c1d60e01b815260048101859052602401610b67565b60006116b0611cd5565b6001600160401b0380881660009081526007602090815260408083206001600160a01b0386168452600a83528184208154600160a01b900490951680855260069093529083206001820180549697509195929390928b929190611714908490613cba565b90915550506001600160401b0382166000908152600684016020526040812080548b9290611743908490613cba565b925050819055508881600301600082825461175e9190613cba565b909155505060018401546000036117d1576001600160401b038a16600081815260076020526040812080546001600160e01b0319168155600101556117a4908490611ce4565b506001600160401b0382811660009081526006602052604090206117cf916001909101908c16611ce4565b505b6002546003546001600160401b03909116906000906117f09042613db7565b90506040518060a001604052808d6001600160401b03168152602001886001600160a01b031681526020018460000160009054906101000a90046001600160a01b03166001600160a01b031681526020018c81526020018281525060086000846001600160401b0316815260200190815260200160002060008201518160000160006101000a8154816001600160401b0302191690836001600160401b0316021790555060208201518160000160086101000a8154816001600160a01b0302191690836001600160a01b0316021790555060408201518160010160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506060820151816002015560808201518160030155905050611924826001600160401b03168660020161243c90919063ffffffff16565b506002805467ffffffffffffffff19811660016001600160401b0392831601821617909155604080518d8152602081018490526001600160a01b038a16928f811692908616917f73c7c3fa41e7e6245b6e9afa78658ce065bb1044e8152519ceabf7536bdcd42b910160405180910390a4505050505050505050505050565b6000828152602081905260409020600101546119be81611bfe565b610cfc8383611eb9565b6119d181612448565b6000600454426119e19190613db7565b6002546040805160608101909152919250600160801b90046001600160401b03169080611a116020860186613783565b6001600160a01b039081168252602086810180358285015260409384018790526001600160401b03868116600081815260098552868120885181546001600160a01b0319169716969096178655938701516001808701919091559690950151600294850155835467ffffffffffffffff60801b198116600160801b9182900483169097019091160294909417909155611ad492600a9190611ab29088613783565b6001600160a01b0316815260208101919091526040016000206004019061243c565b50611ae26020840184613783565b6001600160a01b0316816001600160401b03167f9ae54e79acbe8f4f04b68fb368abc9a10502aa4bc8a330d2e5790db9ba07e77e856020013585604051611b33929190918252602082015260400190565b60405180910390a3505050565b610af68282612581565b6000611b5581611bfe565b610af6826127e0565b611b8b604051806060016040528060006001600160a01b0316815260200160608152602001600081525090565b604080516060810182526001600160401b03841660008181526006602081815294822080546001600160a01b031685529290915283529091820190611bd290600101612062565b81526001600160401b039093166000908152600660209081526040909120600301549301929092525090565b611c0f81611c0a611cd5565b612872565b50565b6040516001600160a01b03838116602483015260448201839052610d4591859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b0383818316178352505050506128ab565b8080600003611c93576040516352036b1b60e11b815260040160405180910390fd5b60035460408051918252602082018490527f2be251d6fc5becaacca7b92a211301eb1556882ed254f8872218f4a6bbe17bdb910160405180910390a150600355565b6000611cdf61291c565b905090565b6000611cf08383612991565b9392505050565b6040516370a0823160e01b81526001600160a01b0380841660048301528491849184916000918516906370a0823190602401602060405180830381865afa158015611d46573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d6a9190613c8b565b9050611d806001600160a01b0388168787611c12565b6040516370a0823160e01b81526001600160a01b038481166004830152600091908616906370a0823190602401602060405180830381865afa158015611dca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dee9190613c8b565b905082611dfb8383613cba565b14611e1c57604051632a8c415560e01b815260048101849052602401610b67565b5050505050505050565b6000611e328383611186565b611eb1576000838152602081815260408083206001600160a01b03861684529091529020805460ff19166001179055611e69611cd5565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610942565b506000610942565b6000611ec58383611186565b15611eb1576000838152602081815260408083206001600160a01b03861684529091529020805460ff19169055611efa611cd5565b6001600160a01b0316826001600160a01b0316847ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a4506001610942565b8080600003611f64576040516352036b1b60e11b815260040160405180910390fd5b60055460408051918252602082018490527f2baaa52b6e7a576ccc4b906abbc5d972c681024c2f38c262d892ca7ccfe82e95910160405180910390a150600555565b6000610942611fb3612a8b565b8360405161190160f01b8152600281019290925260228201526042902090565b8080600003611ff5576040516352036b1b60e11b815260040160405180910390fd5b60045460408051918252602082018490527f3f9b76dbea25aaf9baa305c55ce1afcf3b359112b56768ec5e80a14a8f23d5f8910160405180910390a150600455565b612042838383612bb6565b610d8a8585612581565b6000610942825490565b6000611cf08383612d4d565b60606000611cf083612d77565b6060611cdf7f0000000000000000000000000000000000000000000000000000000000000000600d612dd3565b6060611cdf7f0000000000000000000000000000000000000000000000000000000000000000600e612dd3565b6060600080846001600160a01b0316846040516120e69190613c6f565b600060405180830381855af49150503d8060008114612121576040519150601f19603f3d011682016040523d82523d6000602084013e612126565b606091505b5091509150612136858383612e7e565b95945050505050565b6040516370a0823160e01b81526001600160a01b0380841660048301527f000000000000000000000000000000000000000000000000000000000000000091849184916000918516906370a0823190602401602060405180830381865afa1580156121ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121d29190613c8b565b600154909150612210906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811691168888612ed3565b6040516370a0823160e01b81526001600160a01b038481166004830152600091908616906370a0823190602401602060405180830381865afa15801561225a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061227e9190613c8b565b90508261228b8383613cba565b146122ac57604051632a8c415560e01b815260048101849052602401610b67565b50505050505050565b600019826001600160a01b031663dd62ed3e6122cf611cd5565b60405160e083901b6001600160e01b03191681526001600160a01b0391821660048201527f00000000000000000000000000000000000000000000000000000000000000009091166024820152604401602060405180830381865afa15801561233c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123609190613c8b565b03612369575050565b816001600160a01b031663d505accf612380611cd5565b7f000000000000000000000000000000000000000000000000000000000000000060001985356123b66040880160208901613dca565b604080516001600160e01b031960e089901b1681526001600160a01b0396871660048201529590941660248601526044850192909252606484015260ff16608483015284013560a4820152606084013560c482015260e401600060405180830381600087803b15801561242857600080fd5b505af11580156115d3573d6000803e3d6000fd5b6000611cf08383612f0c565b6124556020820182613783565b6001600160a01b03811661247c5760405163d92e233d60e01b815260040160405180910390fd5b8160200135806000036124a2576040516352036b1b60e11b815260040160405180910390fd5b6124af6020840184613783565b60006124b9611cd5565b9050816001600160a01b0316816001600160a01b0316146124f85760405163065ece9760e51b81526001600160a01b0382166004820152602401610b67565b6000612502611cd5565b90506000806125118389612f53565b91509150816125355780604051635c6d462d60e01b8152600401610b679190613ded565b6001600160a01b0383166000908152600a602052604090206125569061204c565b600003611e1c576040516368d7b96d60e11b81526001600160a01b0384166004820152602401610b67565b80806000036125a3576040516352036b1b60e11b815260040160405180910390fd5b6125ab613025565b6002546001600160401b03600160401b9091048116908416106125ec5760405163d531737d60e01b81526001600160401b0384166004820152602401610b67565b6001600160401b0383166000908152600660205260409020546001600160a01b0316612618818461304f565b6000612622611cd5565b60018054604080516060810182526001600160a01b0385811682526001600160401b038b811660208085018281528587018e8152600160a01b98899004851660008181526007855289812098518954945198166001600160e01b0319909416939093179686168a029690961787555195890195909555875467ffffffffffffffff60a01b1981169088900484168901909316909602919091178655825260069093522092935091906126d69082018361243c565b50858160030160008282546126eb9190613db7565b90915550506001600160a01b0383166000908152600a6020526040902061271b816001600160401b03851661243c565b506001600160401b038816600090815260068201602052604081208054899290612746908490613db7565b90915550506001600160a01b0385166000908152600b602052604081208054899290612773908490613db7565b92505081905550836001600160a01b0316856001600160a01b0316846001600160401b03167fb018e252bb021553275dadb009c950b8d3e61c0a40a8b4ef99342efe031633768a6040516127c991815260200190565b60405180910390a45050505050610d456001600c55565b806001600160a01b0381166128085760405163d92e233d60e01b815260040160405180910390fd5b600154604080516001600160a01b03928316815291841660208301527f190c262dc6f09322c68a13bf67c9659e58367755ba6190fa7ce5ca8aa45a877d910160405180910390a150600180546001600160a01b0319166001600160a01b0392909216919091179055565b61287c8282611186565b610af65760405163e2517d3f60e01b81526001600160a01b038216600482015260248101839052604401610b67565b600080602060008451602086016000885af1806128ce576040513d6000823e3d81fd5b50506000513d915081156128e65780600114156128f3565b6001600160a01b0384163b155b15610cfc57604051635274afe760e01b81526001600160a01b0385166004820152602401610b67565b6000366014336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480156129595750808210155b156129895760003661296b8385613cba565b612976928290613d20565b61297f91613e00565b60601c9250505090565b339250505090565b60008181526001830160205260408120548015612a7a5760006129b5600183613cba565b85549091506000906129c990600190613cba565b9050808214612a2e5760008660000182815481106129e9576129e9613c59565b9060005260206000200154905080876000018481548110612a0c57612a0c613c59565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080612a3f57612a3f613e40565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610942565b6000915050610942565b5092915050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015612ae457507f000000000000000000000000000000000000000000000000000000000000000046145b15612b0e57507f000000000000000000000000000000000000000000000000000000000000000090565b611cdf604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663927da105612bf0611cd5565b612bfd6020890189613783565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152306044820152606401606060405180830381865afa158015612c4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c729190613e6a565b509092509050612c886040860160208701613783565b6001600160a01b0316826001600160a01b0316148015612caf5750428165ffffffffffff16115b15612cbb575050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632b67b570612cf2611cd5565b8787876040518563ffffffff1660e01b8152600401612d149493929190613ee0565b600060405180830381600087803b158015612d2e57600080fd5b505af1158015612d42573d6000803e3d6000fd5b505050505050505050565b6000826000018281548110612d6457612d64613c59565b9060005260206000200154905092915050565b606081600001805480602002602001604051908101604052809291908181526020018280548015612dc757602002820191906000526020600020905b815481526020019060010190808311612db3575b50505050509050919050565b606060ff8314612ded57612de6836130cd565b9050610942565b818054612df990613faa565b80601f0160208091040260200160405190810160405280929190818152602001828054612e2590613faa565b8015612e725780601f10612e4757610100808354040283529160200191612e72565b820191906000526020600020905b815481529060010190602001808311612e5557829003601f168201915b50505050509050610942565b606082612e9357612e8e8261310c565b611cf0565b8151158015612eaa57506001600160a01b0384163b155b15612a8457604051639996b31560e01b81526001600160a01b0385166004820152602401610b67565b6040516001600160a01b038481166024830152838116604483015260648201839052610cfc9186918216906323b872dd90608401611c3f565b6000818152600183016020526040812054611eb157508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610942565b60006060817f054bb8d04b5347ea0821022a1aee150e0a1e030cfa6285be1d4083121b48d31d612f866020860186613783565b604080516020818101949094526001600160a01b03909216908201529085013560608281019190915285013560808281019190915285013560a082015260c00160405160208183030381529060405290506130188186866040016020810190612fef9190613783565b6060880135608089013561300960c08b0160a08c01613dca565b8a60c001358b60e00135613135565b92509250505b9250929050565b6002600c540361304857604051633ee5aeb560e01b815260040160405180910390fd5b6002600c55565b6040516370a0823160e01b81523060048201819052839183906000906001600160a01b038516906370a0823190602401602060405180830381865afa15801561309c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130c09190613c8b565b905061221086308761333c565b606060006130da836133e6565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b80511561311c5780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b600060606001600160a01b03881661317e5750506040805180820190915260168152752aa720aaaa2427a924ad22a22fa7a822a920aa24a7a760511b602082015260009061332f565b428610156131b857505060408051808201909152601181527014d251d3905515549157d1561412549151607a1b602082015260009061332f565b6001600160a01b038089166000908152600f60209081526040808320938d1683529290529081208054916131eb83613fde565b9190505587146132285750506040805180820190915260128152714d49534d41544348494e475f4e4f4e43455360701b602082015260009061332f565b600061323a8b80519060200120611fa6565b9050600061324a8288888861340e565b90506001600160a01b03811615806132745750896001600160a01b0316816001600160a01b031614155b156132b057600060405180604001604052806011815260200170494e56414c49445f5349474e415455524560781b81525093509350505061332f565b6132da7f20296b01d0b6bd176f0c1e29644934c0047abf080dae43609a1bbc09e39bafdb82611186565b6133165760006040518060400160405280601281526020017127a822a920aa27a92fa327a92124a22222a760711b81525093509350505061332f565b6001604051806020016040528060008152509350935050505b9850989650505050505050565b8015610d45577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166336c78516613379611cd5565b6040516001600160e01b031960e084901b1681526001600160a01b039182166004820152818616602482015281851660448201529086166064820152608401600060405180830381600087803b1580156133d257600080fd5b505af11580156122ac573d6000803e3d6000fd5b600060ff8216601f81111561094257604051632cd44ac360e21b815260040160405180910390fd5b6000806000806134208888888861343c565b925092509250613430828261350b565b50909695505050505050565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411156134775750600091506003905082613501565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa1580156134cb573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166134f757506000925060019150829050613501565b9250600091508190505b9450945094915050565b600082600381111561351f5761351f613ff7565b03613528575050565b600182600381111561353c5761353c613ff7565b0361355a5760405163f645eedf60e01b815260040160405180910390fd5b600282600381111561356e5761356e613ff7565b0361358f5760405163fce698f760e01b815260048101829052602401610b67565b60038260038111156135a3576135a3613ff7565b03610af6576040516335e2f38360e21b815260048101829052602401610b67565b6000602082840312156135d657600080fd5b5035919050565b6000602082840312156135ef57600080fd5b81356001600160e01b031981168114611cf057600080fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114611c0f57600080fd5b803561363d8161361d565b919050565b6000806040838503121561365557600080fd5b82356001600160401b0381111561366b57600080fd5b8301601f8101851361367c57600080fd5b80356001600160401b0381111561369557613695613607565b8060051b604051601f19603f83011681018181106001600160401b03821117156136c1576136c1613607565b6040529182526020818401810192908101888411156136df57600080fd5b6020850194505b83851015613705576136f785613632565b8152602094850194016136e6565b5094506137189250505060208401613632565b90509250929050565b80356001600160401b038116811461363d57600080fd5b60006020828403121561374a57600080fd5b611cf082613721565b6000806040838503121561376657600080fd5b8235915060208301356137788161361d565b809150509250929050565b60006020828403121561379557600080fd5b8135611cf08161361d565b600060c082840312156137b257600080fd5b50919050565b60008083601f8401126137ca57600080fd5b5081356001600160401b038111156137e157600080fd5b60208301915083602082850101111561301e57600080fd5b6000806000806000610120868803121561381257600080fd5b61381b86613721565b94506020860135935061383187604088016137a0565b92506101008601356001600160401b0381111561384d57600080fd5b613859888289016137b8565b969995985093965092949392505050565b602080825282518282018190526000918401906040840190835b818110156138b05783518051845260209081015115158185015290930192604090920191600101613884565b509095945050505050565b600081518084526020840193506020830160005b828110156138ed5781518652602095860195909101906001016138cf565b5093949350505050565b60208152600082516060602084015261391360808401826138bb565b90506020840151601f1984830301604085015261393082826138bb565b9150506040840151601f1984830301606085015261213682826138bb565b6000806040838503121561396157600080fd5b823561396c8161361d565b915060208301356137788161361d565b60005b8381101561399757818101518382015260200161397f565b50506000910152565b600081518084526139b881602086016020860161397c565b601f01601f19169290920160200192915050565b60ff60f81b8816815260e0602082015260006139eb60e08301896139a0565b82810360408401526139fd81896139a0565b606084018890526001600160a01b038716608085015260a0840186905283810360c08501529050613a2e81856138bb565b9a9950505050505050505050565b60008060408385031215613a4f57600080fd5b8235613a5a8161361d565b915061371860208401613721565b60008060208385031215613a7b57600080fd5b82356001600160401b03811115613a9157600080fd5b8301601f81018513613aa257600080fd5b80356001600160401b03811115613ab857600080fd5b8560208260051b8401011115613acd57600080fd5b6020919091019590945092505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015613b3657603f19878603018452613b218583516139a0565b94506020938401939190910190600101613b05565b50929695505050505050565b6000806000806000808688036101a0811215613b5d57600080fd5b613b6688613721565b965060208801359550613b7c8960408a016137a0565b94506101008801356001600160401b03811115613b9857600080fd5b613ba48a828b016137b8565b909550935050608061011f1982011215613bbd57600080fd5b50610120870190509295509295509295565b60008060408385031215613be257600080fd5b613beb83613721565b946020939093013593505050565b6000610100828403128015613c0d57600080fd5b509092915050565b602080825282516001600160a01b03168282015282015160606040830152600090613c4360808401826138bb565b9050604084015160608401528091505092915050565b634e487b7160e01b600052603260045260246000fd5b60008251613c8181846020870161397c565b9190910192915050565b600060208284031215613c9d57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561094257610942613ca4565b6001600160a01b0383168152604060208083018290528351918301829052600091908401906060840190835b818110156134305783516001600160a01b0316835260209384019390920191600101613cf9565b60008085851115613d3057600080fd5b83861115613d3d57600080fd5b5050820193919092039150565b6000808335601e19843603018112613d6157600080fd5b8301803591506001600160401b03821115613d7b57600080fd5b60200191503681900382131561301e57600080fd5b828482376000838201600081528351613dad81836020880161397c565b0195945050505050565b8082018082111561094257610942613ca4565b600060208284031215613ddc57600080fd5b813560ff81168114611cf057600080fd5b602081526000611cf060208301846139a0565b80356bffffffffffffffffffffffff198116906014841015612a84576bffffffffffffffffffffffff1960149490940360031b84901b1690921692915050565b634e487b7160e01b600052603160045260246000fd5b65ffffffffffff81168114611c0f57600080fd5b600080600060608486031215613e7f57600080fd5b8351613e8a8161361d565b6020850151909350613e9b81613e56565b6040850151909250613eac81613e56565b809150509250925092565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b038516815260008435613ef98161361d565b6001600160a01b0316602083810191909152850135613f178161361d565b6001600160a01b0316604083810191909152850135613f3581613e56565b65ffffffffffff81166060840152506060850135613f5281613e56565b65ffffffffffff81166080840152506080850135613f6f8161361d565b6001600160a01b031660a08381019190915285013560c083015261010060e08301819052613fa09083018486613eb7565b9695505050505050565b600181811c90821680613fbe57607f821691505b6020821081036137b257634e487b7160e01b600052602260045260246000fd5b600060018201613ff057613ff0613ca4565b5060010190565b634e487b7160e01b600052602160045260246000fdfea2646970667358221220903c9a5daec29dc0d18d1fe0cdda24c11413364a8e7e8ac58ce130c8db95151f64736f6c634300081b003300000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000160000000000000000000000000a2b835e77cbff1b1fdb853b5e63a8ac25c3f57740000000000000000000000004722a337b03f5252ab3c53b5c5399f489e4678960000000000000000000000000000000000000000000000000000000000127500000000000000000000000000000000000000000000000000000000000001518000000000000000000000000000000000000000000006342fd08f00f637800000000000000000000000000000000000000022d473030f116ddee9f6b43ac78ba3000000000000000000000000997f38e2ffc1d5fbaece8765f315f2c39f2da31f0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000a8525dfce71bd5ccd280ea4d63c0334fb498ab5f0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000a8525dfce71bd5ccd280ea4d63c0334fb498ab5f