0 txs
1 call
constructor
constructor()
functions
balanceOf
viewfunction balanceOf(address owner) view returns (uint256)
CLOCK_MODE
purefunction CLOCK_MODE() pure returns (string)
clock
viewfunction clock() view returns (uint48)
convertToEscrowedAmount
viewfunction convertToEscrowedAmount(uint256 votingUnits_, uint256 lockSeconds_) view returns (uint256 escrowedAmount_)
convertToVotingUnits
viewfunction convertToVotingUnits(uint256 escrowedAmount_, uint256 lockSeconds_) view returns (uint256 votingUnits_)
currentTokenId
viewfunction currentTokenId() view returns (uint256)
delegates
viewfunction delegates(address account) view returns (address)
eip712Domain
viewfunction eip712Domain() view returns (bytes1 fields, string name, string version, uint256 chainId, address verifyingContract, bytes32 salt, uint256[] extensions)
escrowedToken
viewfunction escrowedToken() view returns (address)
getApproved
viewfunction getApproved(uint256 tokenId) view returns (address)
getEscrowedAmount
viewfunction getEscrowedAmount(address account_) view returns (uint256)
getPastEscrowedAmount
viewfunction getPastEscrowedAmount(address account_, uint256 timepoint_) view returns (uint256)
getPastTotalEscrowedAmount
viewfunction getPastTotalEscrowedAmount(uint256 timepoint_) view returns (uint256)
getPastTotalSupply
viewfunction getPastTotalSupply(uint256 timepoint) view returns (uint256)
getPastVotes
viewfunction getPastVotes(address account, uint256 timepoint) view returns (uint256)
getPastVotingUnits
viewfunction getPastVotingUnits(address account_, uint256 timepoint_) view returns (uint256)
getRatios
viewfunction getRatios() view returns (uint256 minRatio, uint256 maxRatio, uint256 minDuration, uint256 maxDuration)
getTotalEscrowedAmount
viewfunction getTotalEscrowedAmount() view returns (uint256)
getTotalVotingUnits
viewfunction getTotalVotingUnits() view returns (uint256)
getVotes
viewfunction getVotes(address account) view returns (uint256)
getVotingUnits
viewfunction getVotingUnits(address account_) view returns (uint256)
isApprovedForAll
viewfunction isApprovedForAll(address owner, address operator) view returns (bool)
name
viewfunction name() view returns (string)
nonces
viewfunction nonces(address owner) view returns (uint256)
owner
viewfunction owner() view returns (address)
ownerOf
viewfunction ownerOf(uint256 tokenId) view returns (address)
pendingOwner
viewfunction pendingOwner() view returns (address)
proxiableUUID
viewfunction proxiableUUID() view returns (bytes32)
ratio
viewfunction ratio(uint256 lockSeconds_) view returns (uint256)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
symbol
viewfunction symbol() view returns (string)
tokenInfo
viewfunction tokenInfo(uint256 tokenId) view returns (tuple)
tokenURI
viewfunction tokenURI(uint256 tokenId) view returns (string)
UPGRADE_INTERFACE_VERSION
viewfunction UPGRADE_INTERFACE_VERSION() view returns (string)
acceptOwnership
nonpayablefunction acceptOwnership()
approve
nonpayablefunction approve(address to, uint256 tokenId)
burn
nonpayablefunction burn(uint256 tokenId_)
burnBatch
nonpayablefunction burnBatch(uint256[] tokenIds_)
delegate
nonpayablefunction delegate(address delegatee)
delegateBySig
nonpayablefunction delegateBySig(address delegatee, uint256 nonce, uint256 expiry, uint8 v, bytes32 r, bytes32 s)
deposit
nonpayablefunction deposit(uint256 escrowedAmount_, uint256 lockSeconds_) returns (uint256 tokenId)
initialize
nonpayablefunction initialize(address owner_, address escrowedToken_, uint256 minRatio_, uint256 maxRatio_, uint256 minDuration_, uint256 maxDuration_)
mint
nonpayablefunction mint(uint256 votingUnits_, uint256 lockSeconds_) returns (uint256 tokenId)
redeem
nonpayablefunction redeem(uint256 tokenId_, uint256 votingUnitsToRedeem_) returns (uint256 tokenIdLeft)
renounceOwnership
nonpayablefunction renounceOwnership()
safeTransferFrom
nonpayablefunction safeTransferFrom(address from, address to, uint256 tokenId, bytes data)
safeTransferFrom
nonpayablefunction safeTransferFrom(address from, address to, uint256 tokenId)
setApprovalForAll
nonpayablefunction setApprovalForAll(address operator, bool approved)
setEscrowedToken
nonpayablefunction setEscrowedToken(address escrowedToken_)
setRatios
nonpayablefunction setRatios(uint256 minRatio_, uint256 maxRatio_, uint256 minDuration_, uint256 maxDuration_)
splitByEscrowedAmount
nonpayablefunction splitByEscrowedAmount(uint256 tokenId_, uint256 escrowedAmountToSplit_) returns (uint256 tokenId1, uint256 tokenId2)
splitByVotingUnits
nonpayablefunction splitByVotingUnits(uint256 tokenId_, uint256 votingUnitsToSplit_) returns (uint256 tokenId1, uint256 tokenId2)
transferFrom
nonpayablefunction transferFrom(address from, address to, uint256 tokenId)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
upgradeToAndCall
payablefunction upgradeToAndCall(address newImplementation, bytes data) payable
withdraw
nonpayablefunction withdraw(uint256 tokenId_, uint256 escrowedAmountToWithdraw_) returns (uint256 tokenIdLeft)
events
AccountEscrowedAmountChanged
event AccountEscrowedAmountChanged(address indexed account, uint256 oldEscrowedAmount, uint256 newEscrowedAmount)
AccountVotingUnitsChanged
event AccountVotingUnitsChanged(address indexed account, uint256 oldVotingUnits, uint256 newVotingUnits)
Approval
event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId)
ApprovalForAll
event ApprovalForAll(address indexed owner, address indexed operator, bool approved)
DelegateChanged
event DelegateChanged(address indexed delegator, address indexed fromDelegate, address indexed toDelegate)
DelegateVotesChanged
event DelegateVotesChanged(address indexed delegate, uint256 previousVotes, uint256 newVotes)
EIP712DomainChanged
event EIP712DomainChanged()
Initialized
event Initialized(uint64 version)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
OwnershipTransferStarted
event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner)
SetEscrowedToken
event SetEscrowedToken(address indexed escrowedToken)
SetRatios
event SetRatios(uint256 minRatio, uint256 maxRatio, uint256 minDuration, uint256 maxDuration)
Transfer
event Transfer(address indexed from, address indexed to, uint256 indexed tokenId)
Update
event Update(address indexed from, address indexed to, uint256 indexed tokenId, uint256 votingUnits, uint256 escrowedAmount, uint256 startDate, uint256 endDate)
Upgraded
event Upgraded(address indexed implementation)
errors
AddressEmptyCode
error AddressEmptyCode(address target)
AddressInsufficientBalance
error AddressInsufficientBalance(address account)
CheckpointUnorderedInsertion
error CheckpointUnorderedInsertion()
ECDSAInvalidSignature
error ECDSAInvalidSignature()
ECDSAInvalidSignatureLength
error ECDSAInvalidSignatureLength(uint256 length)
ECDSAInvalidSignatureS
error ECDSAInvalidSignatureS(bytes32 s)
ERC1967InvalidImplementation
error ERC1967InvalidImplementation(address implementation)
ERC1967NonPayable
error ERC1967NonPayable()
ERC5805FutureLookup
error ERC5805FutureLookup(uint256 timepoint, uint48 clock)
ERC6372InconsistentClock
error ERC6372InconsistentClock()
ERC721IncorrectOwner
error ERC721IncorrectOwner(address sender, uint256 tokenId, address owner)
ERC721InsufficientApproval
error ERC721InsufficientApproval(address operator, uint256 tokenId)
ERC721InvalidApprover
error ERC721InvalidApprover(address approver)
ERC721InvalidOperator
error ERC721InvalidOperator(address operator)
ERC721InvalidOwner
error ERC721InvalidOwner(address owner)
ERC721InvalidReceiver
error ERC721InvalidReceiver(address receiver)
ERC721InvalidSender
error ERC721InvalidSender(address sender)
ERC721NonexistentToken
error ERC721NonexistentToken(uint256 tokenId)
FailedInnerCall
error FailedInnerCall()
InvalidAccountNonce
error InvalidAccountNonce(address account, uint256 currentNonce)
InvalidInitialization
error InvalidInitialization()
NotInitializing
error NotInitializing()
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
SafeCastOverflowedUintDowncast
error SafeCastOverflowedUintDowncast(uint8 bits, uint256 value)
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
Staking721_DepositZero
error Staking721_DepositZero()
Staking721_IncoherentDurations
error Staking721_IncoherentDurations()
Staking721_IncoherentRatios
error Staking721_IncoherentRatios()
Staking721_InsufficientAmount
error Staking721_InsufficientAmount(uint256 tokenId, uint256 balance, uint256 needed)
Staking721_LockLimits
error Staking721_LockLimits(uint256 min, uint256 max, uint256 lockSeconds)
Staking721_MaxRatio
error Staking721_MaxRatio()
Staking721_MintZero
error Staking721_MintZero()
Staking721_NotEndDate
error Staking721_NotEndDate(uint256 endDate, uint256 currentTimestamp)
Staking721_Unauthorized
error Staking721_Unauthorized(uint256 tokenId, address owner, address sender)
UUPSUnauthorizedCallContext
error UUPSUnauthorizedCallContext()
UUPSUnsupportedProxiableUUID
error UUPSUnsupportedProxiableUUID(bytes32 slot)
VotesExpiredSignature
error VotesExpiredSignature(uint256 expiry)
creation bytecode
0x60a0604052306080523480156200001557600080fd5b506200002062000030565b6200002a62000030565b620000e4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff1615620000815760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b0390811614620000e15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6080516144d46200010e60003960008181611fb601528181611fdf015261212001526144d46000f3fe6080604052600436106103695760003560e01c80637ab982f1116101c6578063abd050a6116100f7578063cc33c87511610095578063e4623c1b1161006f578063e4623c1b14610a98578063e985e9c514610ab8578063f2fde38b14610ad8578063f603e11314610af857600080fd5b8063cc33c87514610a10578063e2bbb15814610a63578063e30c397814610a8357600080fd5b8063b88d4fde116100d1578063b88d4fde14610990578063c2baa012146109b0578063c3cda520146109d0578063c87b56dd146109f057600080fd5b8063abd050a614610906578063ad3cb1cc14610926578063b13c86a31461095757600080fd5b80638da5cb5b1161016457806395d89b411161013e57806395d89b411461089157806397504a6f146108a65780639ab24eb0146108c6578063a22cb465146108e657600080fd5b80638da5cb5b146108305780638e539e8c1461084557806391ddadf41461086557600080fd5b80637ecebe00116101a05780637ecebe001461077e57806384b0196e146107d357806386489ba9146107fb5780638805fa4d1461081b57600080fd5b80637ab982f11461071e5780637c3d90b81461073e5780637cbc23731461075e57600080fd5b806342842e0e116102a05780635b4e8c361161023e57806370a082311161021857806370a08231146106b4578063715018a6146106d457806379698f75146106e957806379ba50971461070957600080fd5b80635b4e8c36146106545780635c19a95c146106745780636352211e1461069457600080fd5b80634bf5d7e91161027a5780634bf5d7e9146105d55780634f1ef2861461060c57806352d1902d1461061f578063587cde1e1461063457600080fd5b806342842e0e1461057557806342966c6814610595578063441a3e70146105b557600080fd5b806312acb6781161030d57806323b872dd116102e757806323b872dd146104e05780632c5550f4146105005780633a46b1a8146105355780633fd9d6ff1461055557600080fd5b806312acb678146104805780631793fe4e146104a05780631b2ef1ca146104c057600080fd5b806306fdde031161034957806306fdde03146103e6578063081812fc14610408578063095ea7b3146104405780630adef33a1461046257600080fd5b80628df4541461036e5780629a9b7b146103a157806301ffc9a7146103b6575b600080fd5b34801561037a57600080fd5b5061038e610389366004613b67565b610b0d565b6040519081526020015b60405180910390f35b3480156103ad57600080fd5b5060015461038e565b3480156103c257600080fd5b506103d66103d1366004613b96565b610b1e565b6040519015158152602001610398565b3480156103f257600080fd5b506103fb610b6e565b6040516103989190613c03565b34801561041457600080fd5b50610428610423366004613b67565b610c12565b6040516001600160a01b039091168152602001610398565b34801561044c57600080fd5b5061046061045b366004613c32565b610c27565b005b34801561046e57600080fd5b506000546001600160a01b0316610428565b34801561048c57600080fd5b5061038e61049b366004613b67565b610c36565b3480156104ac57600080fd5b506104606104bb366004613c5c565b610ca5565b3480156104cc57600080fd5b5061038e6104db366004613c8e565b610cc3565b3480156104ec57600080fd5b506104606104fb366004613cb0565b610d08565b34801561050c57600080fd5b5061052061051b366004613c8e565b610d8d565b60408051928352602083019190915201610398565b34801561054157600080fd5b5061038e610550366004613c32565b610ed2565b34801561056157600080fd5b5061038e610570366004613cec565b610f65565b34801561058157600080fd5b50610460610590366004613cb0565b610f70565b3480156105a157600080fd5b506104606105b0366004613b67565b610f90565b3480156105c157600080fd5b5061038e6105d0366004613c8e565b61104e565b3480156105e157600080fd5b5060408051808201909152600e81526d06d6f64653d74696d657374616d760941b60208201526103fb565b61046061061a366004613daa565b61106f565b34801561062b57600080fd5b5061038e61108a565b34801561064057600080fd5b5061042861064f366004613cec565b6110a7565b34801561066057600080fd5b5061038e61066f366004613c32565b6110d2565b34801561068057600080fd5b5061046061068f366004613cec565b611153565b3480156106a057600080fd5b506104286106af366004613b67565b61115e565b3480156106c057600080fd5b5061038e6106cf366004613cec565b611169565b3480156106e057600080fd5b506104606111c5565b3480156106f557600080fd5b50610460610704366004613cec565b6111d9565b34801561071557600080fd5b506104606111ee565b34801561072a57600080fd5b5061038e610739366004613c8e565b611233565b34801561074a57600080fd5b50610520610759366004613c8e565b61125b565b34801561076a57600080fd5b5061038e610779366004613c8e565b6112be565b34801561078a57600080fd5b5061038e610799366004613cec565b6001600160a01b031660009081527f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb00602052604090205490565b3480156107df57600080fd5b506107e86112cb565b6040516103989796959493929190613df8565b34801561080757600080fd5b50610460610816366004613e8e565b611377565b34801561082757600080fd5b5061038e6114ea565b34801561083c57600080fd5b50610428611504565b34801561085157600080fd5b5061038e610860366004613b67565b611539565b34801561087157600080fd5b5061087a6115a4565b60405165ffffffffffff9091168152602001610398565b34801561089d57600080fd5b506103fb6115b3565b3480156108b257600080fd5b5061038e6108c1366004613c32565b6115f2565b3480156108d257600080fd5b5061038e6108e1366004613cec565b611662565b3480156108f257600080fd5b50610460610901366004613ef1565b6116b2565b34801561091257600080fd5b5061038e610921366004613cec565b6116bd565b34801561093257600080fd5b506103fb604051806040016040528060058152602001640352e302e360dc1b81525081565b34801561096357600080fd5b50600254600354600454600554604080519485526020850193909352918301526060820152608001610398565b34801561099c57600080fd5b506104606109ab366004613f28565b6116c8565b3480156109bc57600080fd5b5061038e6109cb366004613c8e565b6116df565b3480156109dc57600080fd5b506104606109eb366004613f90565b6116f7565b3480156109fc57600080fd5b506103fb610a0b366004613b67565b6117b4565b348015610a1c57600080fd5b50610a30610a2b366004613b67565b61181b565b60405161039891908151815260208083015190820152604080830151908201526060918201519181019190915260800190565b348015610a6f57600080fd5b5061038e610a7e366004613c8e565b61188b565b348015610a8f57600080fd5b506104286118c8565b348015610aa457600080fd5b50610460610ab3366004613ff0565b6118f1565b348015610ac457600080fd5b506103d6610ad3366004614065565b61192e565b348015610ae457600080fd5b50610460610af3366004613cec565b61197b565b348015610b0457600080fd5b5061038e611a00565b6000610b1882611a0a565b92915050565b60006001600160e01b031982166380ac58cd60e01b1480610b4f57506001600160e01b03198216635b5e139f60e01b145b80610b1857506301ffc9a760e01b6001600160e01b0319831614610b18565b60008051602061443f8339815191528054606091908190610b8e90614098565b80601f0160208091040260200160405190810160405280929190818152602001828054610bba90614098565b8015610c075780601f10610bdc57610100808354040283529160200191610c07565b820191906000526020600020905b815481529060010190602001808311610bea57829003601f168201915b505050505091505090565b6000610c1d82611a9f565b50610b1882611ad7565b610c32828233611b11565b5050565b600080610c416115a4565b90508065ffffffffffff168310610c8157604051637669fc0f60e11b81526004810184905265ffffffffffff821660248201526044015b60405180910390fd5b610c95610c8d84611b1e565b600690611b55565b6001600160d01b03169392505050565b610cb184848484611c0b565b610cbd84848484611c13565b50505050565b600082600003610ce657604051632884878160e21b815260040160405180910390fd5b6000610cf28484611233565b9050610d0033828686611cda565b949350505050565b6001600160a01b038216610d3257604051633250574960e11b815260006004820152602401610c78565b6000610d3f838333611d12565b9050836001600160a01b0316816001600160a01b031614610cbd576040516364283d7b60e01b81526001600160a01b0380861660048301526024820184905282166044820152606401610c78565b6000806000610d9b85611dfa565b9050610da8813387611e34565b610de3578481335b6040516325e3921f60e01b815260048101939093526001600160a01b039182166024840152166044820152606401610c78565b60008581526007602090815260409182902082516080810184528154815260018201549281018390526002820154938101939093526003015460608301528510610e575760208101516040516302b0d3ed60e31b815260048101889052602481019190915260448101869052606401610c78565b610e6086611e99565b6000610e7a86836040015184606001516109cb91906140e8565b6020830151835191925087900390600090610e969084906140e8565b9050610ead85898587604001518860600151611ec7565b9650610ec485838387604001518860600151611ec7565b955050505050509250929050565b600060008051602061441f83398151915281610eec6115a4565b90508065ffffffffffff168410610f2757604051637669fc0f60e11b81526004810185905265ffffffffffff82166024820152604401610c78565b610f53610f3385611b1e565b6001600160a01b0387166000908152600185016020526040902090611b55565b6001600160d01b031695945050505050565b6000610b1882611f1c565b610f8b838383604051806020016040528060008152506116c8565b505050565b6000610f9b82611dfa565b9050610fa8813384611e34565b610fb457818133610db0565b60008281526007602090815260409182902082516080810184528154815260018201549281019290925260028101549282019290925260039091015460608201819052421015611026576060810151604051636f59233d60e11b81526004810191909152426024820152604401610c78565b61102f83611e99565b6020810151600054610f8b916001600160a01b03909116908490611f4c565b60008061105b8484610d8d565b9250905061106881610f90565b5092915050565b611077611fab565b61108082612050565b610c328282612058565b6000611094612115565b5060008051602061447f83398151915290565b6001600160a01b03908116600090815260008051602061441f83398151915260205260409020541690565b6000806110dd6115a4565b90508065ffffffffffff16831061111857604051637669fc0f60e11b81526004810184905265ffffffffffff82166024820152604401610c78565b61114261112484611b1e565b6001600160a01b038616600090815260086020526040902090611b55565b6001600160d01b0316949350505050565b33610c32818361215e565b6000610b1882611a9f565b600060008051602061443f8339815191526001600160a01b0383166111a4576040516322718ad960e21b815260006004820152602401610c78565b6001600160a01b039092166000908152600390920160205250604090205490565b6111cd6121e8565b6111d7600061221a565b565b6111e281612050565b6111eb81612252565b50565b33806111f86118c8565b6001600160a01b03161461122a5760405163118cdaa760e01b81526001600160a01b0382166004820152602401610c78565b6111eb8161221a565b600061123e82611a0a565b61124a846127106140fb565b6112549190614128565b9392505050565b6000828152600760209081526040808320815160808101835281548152600182015493810193909352600281015491830182905260030154606083018190528392916112b291879161051b918891610739916140e8565b92509250509250929050565b60008061105b848461125b565b6000606080828080838160008051602061445f83398151915280549091501580156112f857506001810154155b61133c5760405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b6044820152606401610c78565b61134461229a565b61134c6122d9565b60408051600080825260208201909252600f60f81b9c939b5091995046985030975095509350915050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff166000811580156113bd5750825b905060008267ffffffffffffffff1660011480156113da5750303b155b9050811580156113e8575080155b156114065760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561143057845460ff60401b1916600160401b1785555b6114398b612318565b611441612329565b611449612329565b6114976040518060400160405280600b81526020016a5a4854205374616b696e6760a81b815250604051806040016040528060048152602001631e16921560e21b8152508c8c8c8c8c612331565b83156114dd57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050505050565b60006114f66006612360565b6001600160d01b0316905090565b6000807f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005b546001600160a01b031692915050565b600060008051602061441f833981519152816115536115a4565b90508065ffffffffffff16841061158e57604051637669fc0f60e11b81526004810185905265ffffffffffff82166024820152604401610c78565b61114261159a85611b1e565b6002840190611b55565b60006115ae612399565b905090565b7f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab0079301805460609160008051602061443f83398151915291610b8e90614098565b6000806115fd6115a4565b90508065ffffffffffff16831061163857604051637669fc0f60e11b81526004810184905265ffffffffffff82166024820152604401610c78565b61114261164484611b1e565b6001600160a01b038616600090815260096020526040902090611b55565b6001600160a01b03811660009081527fe8b26c30fad74198956032a3533d903385d56dd795af560196f9c78d4af40d016020526040812060008051602061441f83398151915290610c9590612360565b610c323383836123a4565b6000610b1882612455565b6116d3848484610d08565b610cbd84848484612476565b60006127106116ed83611a0a565b61124a90856140fb565b8342111561171b57604051632341d78760e11b815260048101859052602401610c78565b604080517fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60208201526001600160a01b0388169181019190915260608101869052608081018590526000906117959061178d9060a0016040516020818303038152906040528051906020012061259f565b8585856125cc565b90506117a181876125fa565b6117ab818861215e565b50505050505050565b60606117bf82611a9f565b5060006117ca61266c565b905060008151116117ea5760405180602001604052806000815250611254565b806117f48461268c565b60405160200161180592919061414a565b6040516020818303038152906040529392505050565b6118466040518060800160405280600081526020016000815260200160008152602001600081525090565b50600090815260076020908152604091829020825160808101845281548152600182015492810192909252600281015492820192909252600390910154606082015290565b6000826000036118ae5760405163352a817960e21b815260040160405180910390fd5b60006118ba84846116df565b9050610d0033858386611cda565b6000807f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c00611529565b8060005b81811015610cbd5761191e84848381811061191257611912614179565b90506020020135610f90565b6119278161418f565b90506118f5565b6001600160a01b0391821660009081527f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab00793056020908152604080832093909416825291909152205460ff1690565b6119836121e8565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0080546001600160a01b0319166001600160a01b03831690811782556119c7611504565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a35050565b60006115ae61271f565b6000600454821080611a1d575060055482115b15611a515760048054600554604051638b9ac24d60e01b815292830191909152602482015260448101839052606401610c78565b600454600554611a6191906140e8565b600454611a6e90846140e8565b600254600354611a7e91906140e8565b611a8891906140fb565b611a929190614128565b600254610b1891906141a8565b600080611aab83611dfa565b90506001600160a01b038116610b1857604051637e27328960e01b815260048101849052602401610c78565b60009081527f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab007930460205260409020546001600160a01b031690565b610f8b8383836001612768565b600065ffffffffffff821115611b51576040516306dfcc6560e41b81526030600482015260248101839052604401610c78565b5090565b815460009081816005811115611bb4576000611b708461287e565b611b7a90856140e8565b60008881526020902090915081015465ffffffffffff9081169087161015611ba457809150611bb2565b611baf8160016141a8565b92505b505b6000611bc287878585612966565b90508015611bfd57611be787611bd96001846140e8565b600091825260209091200190565b54600160301b90046001600160d01b0316611c00565b60005b979650505050505050565b610cbd6121e8565b82841115611c3457604051637f1055a760e11b815260040160405180910390fd5b612710831115611c5757604051630c1b59f360e01b815260040160405180910390fd5b80821115611c785760405163653a245160e01b815260040160405180910390fd5b60028490556003839055600482905560058190556040805185815260208101859052908101839052606081018290527f9644b6174df1bd5bad31e571d2506445b44f89a0ec9f80f86ad150284c317b5a9060800160405180910390a150505050565b60008054611cf3906001600160a01b03168630876129c8565b611d0985858542611d0487826141a8565b611ec7565b95945050505050565b600082815260076020908152604080832081516080810183528154815260018201549381019390935260028101549183019190915260030154606082015281611d5c868686612a01565b9050611d6d81878460000151612b0b565b611d7c81878460000151612b82565b611d8b81878460200151612ce9565b81516020808401516040808601516060808801518351968752948601939093529084015282015285906001600160a01b0380891691908416907f63f9610c426f2ff7ca95f3998ef0bbc96ef58296aa76c3848820f80f705673a19060800160405180910390a495945050505050565b60009081527f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab007930260205260409020546001600160a01b031690565b60006001600160a01b03831615801590610d005750826001600160a01b0316846001600160a01b03161480611e6e5750611e6e848461192e565b80610d005750826001600160a01b0316611e8783611ad7565b6001600160a01b031614949350505050565b611ea281612e6a565b6000908152600760205260408120818155600181018290556002810182905560030155565b600080600160008154611ed99061418f565b91829055506000818152600760205260409020600181018890558681556002810186905560038101859055909150611f118883612ea5565b509695505050505050565b6001600160a01b0381166000908152600960205260408120611f3d90612360565b6001600160d01b031692915050565b6040516001600160a01b03838116602483015260448201839052610f8b91859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050612f0a565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061203257507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661202660008051602061447f833981519152546001600160a01b031690565b6001600160a01b031614155b156111d75760405163703e46dd60e11b815260040160405180910390fd5b6111eb6121e8565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156120b2575060408051601f3d908101601f191682019092526120af918101906141bb565b60015b6120da57604051634c9c8ce360e01b81526001600160a01b0383166004820152602401610c78565b60008051602061447f833981519152811461210b57604051632a87526960e21b815260048101829052602401610c78565b610f8b8383612f6d565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146111d75760405163703e46dd60e11b815260040160405180910390fd5b60008051602061441f8339815191526000612178846110a7565b6001600160a01b0385811660008181526020869052604080822080546001600160a01b031916898616908117909155905194955093928516927f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a4610cbd81846121e387612455565b612fc3565b336121f1611504565b6001600160a01b0316146111d75760405163118cdaa760e01b8152336004820152602401610c78565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0080546001600160a01b0319168155610c3282613138565b600080546001600160a01b0319166001600160a01b038316908117825560405190917ffe57f147cac4ee3455aca6ca0f9aaeb31ab789ee8624a152dc2ea8ab7b23002691a250565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d102805460609160008051602061445f83398151915291610b8e90614098565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d103805460609160008051602061445f83398151915291610b8e90614098565b6123206131a9565b6111eb816131f2565b6111d76131a9565b6123396131a9565b6123438787613224565b61234b612329565b612353612329565b6117ab8585858585613236565b805460009080156123905761237a83611bd96001846140e8565b54600160301b90046001600160d01b0316611254565b60009392505050565b60006115ae42611b1e565b60008051602061443f8339815191526001600160a01b0383166123e557604051630b61174360e31b81526001600160a01b0384166004820152602401610c78565b6001600160a01b038481166000818152600584016020908152604080832094881680845294825291829020805460ff191687151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a350505050565b6001600160a01b0381166000908152600860205260408120611f3d90612360565b6001600160a01b0383163b15610cbd57604051630a85bd0160e11b81526001600160a01b0384169063150b7a02906124b89033908890879087906004016141d4565b6020604051808303816000875af19250505080156124f3575060408051601f3d908101601f191682019092526124f091810190614207565b60015b61255c573d808015612521576040519150601f19603f3d011682016040523d82523d6000602084013e612526565b606091505b50805160000361255457604051633250574960e11b81526001600160a01b0385166004820152602401610c78565b805181602001fd5b6001600160e01b03198116630a85bd0160e11b1461259857604051633250574960e11b81526001600160a01b0385166004820152602401610c78565b5050505050565b6000610b186125ac613253565b8360405161190160f01b8152600281019290925260228201526042902090565b6000806000806125de8888888861325d565b9250925092506125ee828261332c565b50909695505050505050565b6001600160a01b03821660009081527f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb0060205260409020805460018101909155818114610f8b576040516301d4b62360e61b81526001600160a01b038416600482015260248101829052604401610c78565b60606040518060800160405280605d81526020016143c2605d9139905090565b60606000612699836133e5565b600101905060008167ffffffffffffffff8111156126b9576126b9613d07565b6040519080825280601f01601f1916602001820160405280156126e3576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a85049450846126ed57509392505050565b600060008051602061441f8339815191526127597fe8b26c30fad74198956032a3533d903385d56dd795af560196f9c78d4af40d02612360565b6001600160d01b031691505090565b60008051602061443f833981519152818061278b57506001600160a01b03831615155b1561284d57600061279b85611a9f565b90506001600160a01b038416158015906127c75750836001600160a01b0316816001600160a01b031614155b80156127da57506127d8818561192e565b155b156128035760405163a9fbf51f60e01b81526001600160a01b0385166004820152602401610c78565b821561284b5784866001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b600093845260040160205250506040902080546001600160a01b0319166001600160a01b0392909216919091179055565b60008160000361289057506000919050565b6000600161289d846134bd565b901c6001901b905060018184816128b6576128b6614112565b048201901c905060018184816128ce576128ce614112565b048201901c905060018184816128e6576128e6614112565b048201901c905060018184816128fe576128fe614112565b048201901c9050600181848161291657612916614112565b048201901c9050600181848161292e5761292e614112565b048201901c9050600181848161294657612946614112565b048201901c90506112548182858161296057612960614112565b04613551565b60005b818310156129c057600061297d8484613567565b60008781526020902090915065ffffffffffff86169082015465ffffffffffff1611156129ac578092506129ba565b6129b78160016141a8565b93505b50612969565b509392505050565b6040516001600160a01b038481166024830152838116604483015260648201839052610cbd9186918216906323b872dd90608401611f79565b600060008051602061443f83398151915281612a1c85611dfa565b90506001600160a01b03841615612a3857612a38818587613582565b6001600160a01b03811615612a7857612a55600086600080612768565b6001600160a01b0381166000908152600383016020526040902080546000190190555b6001600160a01b03861615612aa9576001600160a01b03861660009081526003830160205260409020805460010190555b600085815260028301602052604080822080546001600160a01b0319166001600160a01b038a811691821790925591518893918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a495945050505050565b60008051602061441f8339815191526001600160a01b038416612b4357612b40816002016135e6612b3b856135f2565b613626565b50505b6001600160a01b038316612b6757612b648160020161365f612b3b856135f2565b50505b610cbd612b73856110a7565b612b7c856110a7565b84612fc3565b816001600160a01b0316836001600160a01b031614158015612ba45750600081115b15610f8b576001600160a01b03831615612c47576001600160a01b03831660009081526008602052604081208190612be29061365f612b3b866135f2565b6001600160d01b031691506001600160d01b03169150846001600160a01b03167f4422beb34c2a55b50b2f702b195c7236da5c449e05e21698c4c784d644be69d58383604051612c3c929190918252602082015260400190565b60405180910390a250505b6001600160a01b03821615610f8b576001600160a01b03821660009081526008602052604081208190612c80906135e6612b3b866135f2565b6001600160d01b031691506001600160d01b03169150836001600160a01b03167f4422beb34c2a55b50b2f702b195c7236da5c449e05e21698c4c784d644be69d58383604051612cda929190918252602082015260400190565b60405180910390a25050505050565b816001600160a01b0316836001600160a01b031614158015612d0b5750600081115b15610f8b576001600160a01b03831615612db2576001600160a01b03831660009081526009602052604081208190612d499061365f612b3b866135f2565b6001600160d01b031691506001600160d01b03169150846001600160a01b03167fafcbf2a1b030e4657c122e7d7689d0567fe8b552bf92bb67eacfda0bf51d5e018383604051612da3929190918252602082015260400190565b60405180910390a25050612dc6565b612dc360066135e6612b3b846135f2565b50505b6001600160a01b03821615612e59576001600160a01b03821660009081526009602052604081208190612dff906135e6612b3b866135f2565b6001600160d01b031691506001600160d01b03169150836001600160a01b03167fafcbf2a1b030e4657c122e7d7689d0567fe8b552bf92bb67eacfda0bf51d5e018383604051612cda929190918252602082015260400190565b612598600661365f612b3b846135f2565b6000612e796000836000611d12565b90506001600160a01b038116610c3257604051637e27328960e01b815260048101839052602401610c78565b6001600160a01b038216612ecf57604051633250574960e11b815260006004820152602401610c78565b6000612edd83836000611d12565b90506001600160a01b03811615610f8b576040516339e3563760e11b815260006004820152602401610c78565b6000612f1f6001600160a01b0384168361366b565b90508051600014158015612f44575080806020019051810190612f429190614224565b155b15610f8b57604051635274afe760e01b81526001600160a01b0384166004820152602401610c78565b612f7682613679565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115612fbb57610f8b82826136de565b610c3261374b565b60008051602061441f8339815191526001600160a01b0384811690841614801590612fee5750600082115b15610cbd576001600160a01b03841615613093576001600160a01b03841660009081526001820160205260408120819061302e9061365f612b3b876135f2565b6001600160d01b031691506001600160d01b03169150856001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051613088929190918252602082015260400190565b60405180910390a250505b6001600160a01b03831615610cbd576001600160a01b0383166000908152600182016020526040812081906130ce906135e6612b3b876135f2565b6001600160d01b031691506001600160d01b03169150846001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051613128929190918252602082015260400190565b60405180910390a2505050505050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff166111d757604051631afcd79f60e31b815260040160405180910390fd5b6131fa6131a9565b6001600160a01b03811661122a57604051631e4fbdf760e01b815260006004820152602401610c78565b61322c6131a9565b610c32828261376a565b61323e6131a9565b61324a84848484611c13565b61259885612252565b60006115ae61379b565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411156132985750600091506003905082613322565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa1580156132ec573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661331857506000925060019150829050613322565b9250600091508190505b9450945094915050565b600082600381111561334057613340614241565b03613349575050565b600182600381111561335d5761335d614241565b0361337b5760405163f645eedf60e01b815260040160405180910390fd5b600282600381111561338f5761338f614241565b036133b05760405163fce698f760e01b815260048101829052602401610c78565b60038260038111156133c4576133c4614241565b03610c32576040516335e2f38360e21b815260048101829052602401610c78565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106134245772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310613450576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061346e57662386f26fc10000830492506010015b6305f5e1008310613486576305f5e100830492506008015b612710831061349a57612710830492506004015b606483106134ac576064830492506002015b600a8310610b185760010192915050565b600080608083901c156134d257608092831c92015b604083901c156134e457604092831c92015b602083901c156134f657602092831c92015b601083901c1561350857601092831c92015b600883901c1561351a57600892831c92015b600483901c1561352c57600492831c92015b600283901c1561353e57600292831c92015b600183901c15610b185760010192915050565b60008183106135605781611254565b5090919050565b60006135766002848418614128565b611254908484166141a8565b61358d838383611e34565b610f8b576001600160a01b0383166135bb57604051637e27328960e01b815260048101829052602401610c78565b60405163177e802f60e01b81526001600160a01b038316600482015260248101829052604401610c78565b60006112548284614257565b60006001600160d01b03821115611b51576040516306dfcc6560e41b815260d0600482015260248101839052604401610c78565b6000806136526136346115a4565b61364a61364088612360565b868863ffffffff16565b87919061380f565b915091505b935093915050565b60006112548284614277565b60606112548383600061381d565b806001600160a01b03163b6000036136af57604051634c9c8ce360e01b81526001600160a01b0382166004820152602401610c78565b60008051602061447f83398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516136fb9190614297565b600060405180830381855af49150503d8060008114613736576040519150601f19603f3d011682016040523d82523d6000602084013e61373b565b606091505b5091509150611d098583836138ba565b34156111d75760405163b398979f60e01b815260040160405180910390fd5b6137726131a9565b60008051602061443f8339815191528061378c8482614301565b5060018101610cbd8382614301565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6137c6613916565b6137ce613980565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b6000806136528585856139c4565b6060814710156138425760405163cd78605960e01b8152306004820152602401610c78565b600080856001600160a01b0316848660405161385e9190614297565b60006040518083038185875af1925050503d806000811461389b576040519150601f19603f3d011682016040523d82523d6000602084013e6138a0565b606091505b50915091506138b08683836138ba565b9695505050505050565b6060826138cf576138ca82613b3e565b611254565b81511580156138e657506001600160a01b0384163b155b1561390f57604051639996b31560e01b81526001600160a01b0385166004820152602401610c78565b5080611254565b600060008051602061445f8339815191528161393061229a565b80519091501561394857805160209091012092915050565b81548015613957579392505050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470935050505090565b600060008051602061445f8339815191528161399a6122d9565b8051909150156139b257805160209091012092915050565b60018201548015613957579392505050565b825460009081908015613ae35760006139e287611bd96001856140e8565b60408051808201909152905465ffffffffffff808216808452600160301b9092046001600160d01b031660208401529192509087161015613a3657604051632520601d60e01b815260040160405180910390fd5b805165ffffffffffff808816911603613a825784613a5988611bd96001866140e8565b80546001600160d01b0392909216600160301b0265ffffffffffff909216919091179055613ad3565b6040805180820190915265ffffffffffff80881682526001600160d01b0380881660208085019182528b54600181018d5560008d81529190912094519151909216600160301b029216919091179101555b6020015192508391506136579050565b50506040805180820190915265ffffffffffff80851682526001600160d01b0380851660208085019182528854600181018a5560008a815291822095519251909316600160301b029190931617920191909155905081613657565b805115613b4e5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b600060208284031215613b7957600080fd5b5035919050565b6001600160e01b0319811681146111eb57600080fd5b600060208284031215613ba857600080fd5b813561125481613b80565b60005b83811015613bce578181015183820152602001613bb6565b50506000910152565b60008151808452613bef816020860160208601613bb3565b601f01601f19169290920160200192915050565b6020815260006112546020830184613bd7565b80356001600160a01b0381168114613c2d57600080fd5b919050565b60008060408385031215613c4557600080fd5b613c4e83613c16565b946020939093013593505050565b60008060008060808587031215613c7257600080fd5b5050823594602084013594506040840135936060013592509050565b60008060408385031215613ca157600080fd5b50508035926020909101359150565b600080600060608486031215613cc557600080fd5b613cce84613c16565b9250613cdc60208501613c16565b9150604084013590509250925092565b600060208284031215613cfe57600080fd5b61125482613c16565b634e487b7160e01b600052604160045260246000fd5b600082601f830112613d2e57600080fd5b813567ffffffffffffffff80821115613d4957613d49613d07565b604051601f8301601f19908116603f01168101908282118183101715613d7157613d71613d07565b81604052838152866020858801011115613d8a57600080fd5b836020870160208301376000602085830101528094505050505092915050565b60008060408385031215613dbd57600080fd5b613dc683613c16565b9150602083013567ffffffffffffffff811115613de257600080fd5b613dee85828601613d1d565b9150509250929050565b60ff60f81b881681526000602060e081840152613e1860e084018a613bd7565b8381036040850152613e2a818a613bd7565b606085018990526001600160a01b038816608086015260a0850187905284810360c0860152855180825283870192509083019060005b81811015613e7c57835183529284019291840191600101613e60565b50909c9b505050505050505050505050565b60008060008060008060c08789031215613ea757600080fd5b613eb087613c16565b9550613ebe60208801613c16565b95989597505050506040840135936060810135936080820135935060a0909101359150565b80151581146111eb57600080fd5b60008060408385031215613f0457600080fd5b613f0d83613c16565b91506020830135613f1d81613ee3565b809150509250929050565b60008060008060808587031215613f3e57600080fd5b613f4785613c16565b9350613f5560208601613c16565b925060408501359150606085013567ffffffffffffffff811115613f7857600080fd5b613f8487828801613d1d565b91505092959194509250565b60008060008060008060c08789031215613fa957600080fd5b613fb287613c16565b95506020870135945060408701359350606087013560ff81168114613fd657600080fd5b9598949750929560808101359460a0909101359350915050565b6000806020838503121561400357600080fd5b823567ffffffffffffffff8082111561401b57600080fd5b818501915085601f83011261402f57600080fd5b81358181111561403e57600080fd5b8660208260051b850101111561405357600080fd5b60209290920196919550909350505050565b6000806040838503121561407857600080fd5b61408183613c16565b915061408f60208401613c16565b90509250929050565b600181811c908216806140ac57607f821691505b6020821081036140cc57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610b1857610b186140d2565b8082028115828204841417610b1857610b186140d2565b634e487b7160e01b600052601260045260246000fd5b60008261414557634e487b7160e01b600052601260045260246000fd5b500490565b6000835161415c818460208801613bb3565b835190830190614170818360208801613bb3565b01949350505050565b634e487b7160e01b600052603260045260246000fd5b6000600182016141a1576141a16140d2565b5060010190565b80820180821115610b1857610b186140d2565b6000602082840312156141cd57600080fd5b5051919050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906138b090830184613bd7565b60006020828403121561421957600080fd5b815161125481613b80565b60006020828403121561423657600080fd5b815161125481613ee3565b634e487b7160e01b600052602160045260246000fd5b6001600160d01b03818116838216019080821115611068576110686140d2565b6001600160d01b03828116828216039080821115611068576110686140d2565b600082516142a9818460208701613bb3565b9190910192915050565b601f821115610f8b57600081815260208120601f850160051c810160208610156142da5750805b601f850160051c820191505b818110156142f9578281556001016142e6565b505050505050565b815167ffffffffffffffff81111561431b5761431b613d07565b61432f816143298454614098565b846142b3565b602080601f831160018114614364576000841561434c5750858301515b600019600386901b1c1916600185901b1785556142f9565b600085815260208120601f198616915b8281101561439357888601518255948401946001909101908401614374565b50858210156143b15787850151600019600388901b60f8161c191681555b5050505050600190811b0190555056fe68747470733a2f2f6261636b656e642e64617070636f6d706f7365722e636f6d2f6170692f6e66742f7a68742f307838392f3078306244463665343637344234303843414332664230306438343063353439623465343130636634372fe8b26c30fad74198956032a3533d903385d56dd795af560196f9c78d4af40d0080bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab0079300a16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca2646970667358221220634454ecda7d00f44f7f6c7c6670b7a884fdc627b878bbcde149874ff2517da564736f6c63430008140033