0 txs
2.4k calls
constructor
constructor(address _foundry, uint256 _appId, uint256 _feeDenominator, uint256 _totalPercent, address _curve, address _payToken, uint256 _buyFee, uint256 _sellFee)
functions
appId
viewfunction appId() view returns (uint256)
balanceOf
viewfunction balanceOf(string tid, address account) view returns (uint256)
buyFee
viewfunction buyFee() view returns (uint256)
curve
viewfunction curve() view returns (address)
feeDenominator
viewfunction feeDenominator() view returns (uint256)
foundry
viewfunction foundry() view returns (address)
getBuyPayTokenAmount
viewfunction getBuyPayTokenAmount(string tid, uint256 tokenAmount) view returns (uint256 payTokenAmount)
getPayTokenAmount
viewfunction getPayTokenAmount(uint256 base, uint256 add) view returns (uint256 payTokenAmount)
getSellPayTokenAmount
viewfunction getSellPayTokenAmount(string tid, uint256 tokenAmount) view returns (uint256 payTokenAmount)
mortgageNFT
viewfunction mortgageNFT() view returns (address)
payToken
viewfunction payToken() view returns (address)
publicNFT
viewfunction publicNFT() view returns (address)
sellFee
viewfunction sellFee() view returns (uint256)
totalPercent
viewfunction totalPercent() view returns (uint256)
totalSupply
viewfunction totalSupply(string tid) view returns (uint256)
buy
payablefunction buy(string tid, uint256 tokenAmount) payable returns (uint256 payTokenAmount)
buyProxy
payablefunction buyProxy(string tid, uint256 tokenAmount, address user) payable returns (uint256 payTokenAmount)
cash
nonpayablefunction cash(uint256 nftTokenId, uint256 tokenAmount) returns (uint256 payTokenAmount)
cashProxy
nonpayablefunction cashProxy(uint256 nftTokenId, uint256 tokenAmount) returns (uint256 payTokenAmount)
initialize
nonpayablefunction initialize(address _publicNFT, address _mortgageNFT)
merge
nonpayablefunction merge(uint256 nftTokenId, uint256 otherNFTTokenId) returns (uint256 payTokenAmount)
mergeProxy
nonpayablefunction mergeProxy(uint256 nftTokenId, uint256 otherNFTTokenId) returns (uint256 payTokenAmount)
mortgage
nonpayablefunction mortgage(string tid, uint256 tokenAmount) returns (uint256 nftTokenId, uint256 payTokenAmount)
mortgageAdd
nonpayablefunction mortgageAdd(uint256 nftTokenId, uint256 tokenAmount) returns (uint256 payTokenAmount)
mortgageAddProxy
nonpayablefunction mortgageAddProxy(uint256 nftTokenId, uint256 tokenAmount) returns (uint256 payTokenAmount)
mortgageProxy
nonpayablefunction mortgageProxy(string tid, uint256 tokenAmount, address user) returns (uint256 nftTokenId, uint256 payTokenAmount)
multiply
payablefunction multiply(string tid, uint256 multiplyAmount) payable returns (uint256 nftTokenId, uint256 payTokenAmount)
multiplyAdd
payablefunction multiplyAdd(uint256 nftTokenId, uint256 multiplyAmount) payable returns (uint256 payTokenAmount)
multiplyAddProxy
payablefunction multiplyAddProxy(uint256 nftTokenId, uint256 multiplyAmount) payable returns (uint256 payTokenAmount)
multiplyProxy
payablefunction multiplyProxy(string tid, uint256 multiplyAmount, address user) payable returns (uint256 nftTokenId, uint256 payTokenAmount)
redeem
payablefunction redeem(uint256 nftTokenId, uint256 tokenAmount) payable returns (uint256 payTokenAmount)
redeemProxy
payablefunction redeemProxy(uint256 nftTokenId, uint256 tokenAmount) payable returns (uint256 payTokenAmount)
sell
nonpayablefunction sell(string tid, uint256 tokenAmount) returns (uint256 payTokenAmount)
sellProxy
nonpayablefunction sellProxy(string tid, uint256 tokenAmount, address user) returns (uint256 payTokenAmount)
split
payablefunction split(uint256 nftTokenId, uint256 splitAmount) payable returns (uint256 payTokenAmount, uint256 newNFTTokenId)
splitProxy
payablefunction splitProxy(uint256 nftTokenId, uint256 splitAmount) payable returns (uint256 payTokenAmount, uint256 newNFTTokenId)
events
Buy
event Buy(string tid, uint256 tokenAmount, uint256 payTokenAmount, address sender, address user, uint256[] feeTokenIds, address[] feeOwners, uint256[] feeAmounts)
Cash
event Cash(uint256 tokenId, string tid, uint256 tokenAmount, uint256 payTokenAmount, address sender, uint256[] feeTokenIds, address[] feeOwners, uint256[] feeAmounts)
Initialize
event Initialize(address publicNFT, address mortgageNFT)
Merge
event Merge(uint256 tokenId, string tid, uint256 otherTokenId, uint256 payTokenAmount, uint256 feeAmount, address sender)
Mortgage
event Mortgage(uint256 tokenId, string tid, uint256 tokenAmount, uint256 payTokenAmount, uint256 feeAmount, address sender)
Multiply
event Multiply(uint256 tokenId, string tid, uint256 multiplyAmount, uint256 payTokenAmount, uint256 feeAmount, address sender, uint256[] feeTokenIds, address[] feeOwners, uint256[] feeAmounts)
Redeem
event Redeem(uint256 tokenId, string tid, uint256 tokenAmount, uint256 payTokenAmount, address sender)
Sell
event Sell(string tid, uint256 tokenAmount, uint256 payTokenAmount, address sender, address user, uint256[] feeTokenIds, address[] feeOwners, uint256[] feeAmounts)
Split
event Split(uint256 tokenId, uint256 newTokenId, string tid, uint256 splitAmount, uint256 payTokenAmount, address sender)
errors
AddressEmptyCode
error AddressEmptyCode(address target)
AddressInsufficientBalance
error AddressInsufficientBalance(address account)
FailedInnerCall
error FailedInnerCall()
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
creation bytecode
0x6101806040523480156200001257600080fd5b5060405162004ec938038062004ec9833981016040819052620000359162000095565b60016000556001600160a01b0397881660c05260e09690965260809490945260a0929092528416610100529092166101205261014091909152610160526200010f565b80516001600160a01b03811681146200009057600080fd5b919050565b600080600080600080600080610100898b031215620000b357600080fd5b620000be8962000078565b9750602089015196506040890151955060608901519450620000e360808a0162000078565b9350620000f360a08a0162000078565b60c08a015160e0909a0151989b979a5095989497939692505050565b60805160a05160c05160e05161010051610120516101405161016051614bef620002da6000396000818161036e015261371e0152600081816103e201526131b90152600081816105d901528181611ca401528181611e9d0152818161251e0152818161299201528181612e3f015281816130a40152818161314f015281816134a90152818161366401526137e801526000818161049e0152610d3b015260008181610585015281816107830152818161099501528181610ae201528181610bf901528181610fae015281816110d20152818161129f015281816113b6015281816115040152818161191601528181611da70152818161260b0152818161283201528181612a57015281816138cb015281816139ae0152613a60015260008181610551015281816107b6015281816109be01528181610b0b01528181610c2c01528181610dc001528181610fd701528181611105015281816112c8015281816113df0152818161152d0152818161193f01528181611d7a015281816125dc0152818161280501528181612a2801528181613920015281816139d80152613a8a0152600081816104ea0152613c7e0152600081816102d4015281816138f40152613c5d0152614bef6000f3fe60806040526004361061024f5760003560e01c80637a7c83a611610138578063a5c33b43116100b0578063ce5566c51161007f578063d7e24f2c11610064578063d7e24f2c146106d4578063e7e42b35146106f4578063f3bddb4c1461071457600080fd5b8063ce5566c514610694578063d1c2babb146106b457600080fd5b8063a5c33b431461062e578063bfd6843d14610641578063c245635c14610661578063c415db131461067457600080fd5b806380afdea81161010757806396336b30116100ec57806396336b30146105c757806399942833146105fb5780639f6563211461060e57600080fd5b806380afdea814610573578063820ffbba146105a757600080fd5b80637a7c83a6146104d85780637ac8070c1461050c5780637cbc23731461052c5780637cd27ca61461053f57600080fd5b806336758390116101cb5780634b19becc1161019a57806361c6544f1161017f57806361c6544f146104595780636b53c968146104795780637165485d1461048c57600080fd5b80634b19becc1461042657806351f765ee1461043957600080fd5b806336758390146103905780633c429cc1146103b057806347062402146103d0578063485cc9551461040457600080fd5b80631bd2361f116102225780631e218386116102075780631e2183861461032957806326cee143146103495780632b14ca561461035c57600080fd5b80631bd2361f146102f65780631daaebcd1461030957600080fd5b806304031852146102545780630b07fde7146102875780630ca5c504146102af578063180b0d7e146102c2575b600080fd5b34801561026057600080fd5b5061027461026f366004614275565b610734565b6040519081526020015b60405180910390f35b61029a6102953660046142c7565b610774565b6040805192835260208301919091520161027e565b6102746102bd3660046142e9565b6108a8565b3480156102ce57600080fd5b506102747f000000000000000000000000000000000000000000000000000000000000000081565b6102746103043660046142c7565b6108c9565b34801561031557600080fd5b506102746103243660046142c7565b610986565b34801561033557600080fd5b506102746103443660046142e9565b610a9d565b6102746103573660046142c7565b610ad3565b34801561036857600080fd5b506102747f000000000000000000000000000000000000000000000000000000000000000081565b34801561039c57600080fd5b5061029a6103ab36600461432e565b610bea565b3480156103bc57600080fd5b506102746103cb3660046142c7565b610d1b565b3480156103dc57600080fd5b506102747f000000000000000000000000000000000000000000000000000000000000000081565b34801561041057600080fd5b5061042461041f366004614389565b610db5565b005b61029a6104343660046142c7565b610eb3565b34801561044557600080fd5b506102746104543660046142e9565b610f67565b34801561046557600080fd5b5061027461047436600461432e565b610f9f565b61029a61048736600461432e565b6110c3565b34801561049857600080fd5b506104c07f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161027e565b3480156104e457600080fd5b506102747f000000000000000000000000000000000000000000000000000000000000000081565b34801561051857600080fd5b506001546104c0906001600160a01b031681565b61027461053a3660046142c7565b6111dd565b34801561054b57600080fd5b506104c07f000000000000000000000000000000000000000000000000000000000000000081565b34801561057f57600080fd5b506102747f000000000000000000000000000000000000000000000000000000000000000081565b3480156105b357600080fd5b506102746105c23660046142c7565b611290565b3480156105d357600080fd5b506104c07f000000000000000000000000000000000000000000000000000000000000000081565b6102746106093660046142c7565b6113a7565b34801561061a57600080fd5b506102746106293660046142e9565b6114b4565b61029a61063c3660046142e9565b6114c9565b34801561064d57600080fd5b5061029a61065c3660046142e9565b6114df565b61027461066f36600461432e565b6114f5565b34801561068057600080fd5b5061027461068f3660046143b7565b61160d565b3480156106a057600080fd5b506102746106af3660046142c7565b611635565b3480156106c057600080fd5b506102746106cf3660046142c7565b6116f2565b3480156106e057600080fd5b506002546104c0906001600160a01b031681565b34801561070057600080fd5b5061027461070f3660046142c7565b611854565b34801561072057600080fd5b5061027461072f3660046142c7565b611907565b60006004836040516107469190614410565b90815260408051602092819003830190206001600160a01b0385166000908152925290205490505b92915050565b6040516330d661bf60e11b81527f0000000000000000000000000000000000000000000000000000000000000000600482015260009081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906361acc37e90602401600060405180830381865afa1580156107fd573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610825919081019061448c565b604001516001600160a01b0316336001600160a01b0316146108805760405162461bcd60e51b815260206004820152600f60248201526e37b7363ca0b83827b832b930ba37b960891b60448201526064015b60405180910390fd5b610888611a10565b6108928484611a3a565b90925090506108a16001600055565b9250929050565b60006108b2611a10565b6108bd838333611d60565b905061076e6001600055565b60006108d3611a10565b6002546040516331a9108f60e11b81526004810185905233916001600160a01b031690636352211e90602401602060405180830381865afa15801561091c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610940919061455f565b6001600160a01b03161461097c5760405162461bcd60e51b8152602060048201526003602482015262414f4560e81b6044820152606401610877565b6108bd8383611f73565b6040516330d661bf60e11b81527f000000000000000000000000000000000000000000000000000000000000000060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906361acc37e90602401600060405180830381865afa158015610a0d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610a35919081019061448c565b604001516001600160a01b0316336001600160a01b031614610a8b5760405162461bcd60e51b815260206004820152600f60248201526e37b7363ca0b83827b832b930ba37b960891b6044820152606401610877565b610a93611a10565b6108bd838361209e565b600080600384604051610ab09190614410565b9081526020016040518091039020549050610acb8184610d1b565b949350505050565b6040516330d661bf60e11b81527f000000000000000000000000000000000000000000000000000000000000000060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906361acc37e90602401600060405180830381865afa158015610b5a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610b82919081019061448c565b604001516001600160a01b0316336001600160a01b031614610bd85760405162461bcd60e51b815260206004820152600f60248201526e37b7363ca0b83827b832b930ba37b960891b6044820152606401610877565b610be0611a10565b6108bd83836122a8565b6040516330d661bf60e11b81527f0000000000000000000000000000000000000000000000000000000000000000600482015260009081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906361acc37e90602401600060405180830381865afa158015610c73573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610c9b919081019061448c565b604001516001600160a01b0316336001600160a01b031614610cf15760405162461bcd60e51b815260206004820152600f60248201526e37b7363ca0b83827b832b930ba37b960891b6044820152606401610877565b610cf9611a10565b610d048585856125d7565b9092509050610d136001600055565b935093915050565b604051635115e63160e01b815260048101839052602481018290526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635115e63190604401602060405180830381865afa158015610d8a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dae919061457c565b9392505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610e2d5760405162461bcd60e51b815260206004820152600b60248201527f6f6e6c79466f756e6472790000000000000000000000000000000000000000006044820152606401610877565b600180546001600160a01b038481167fffffffffffffffffffffffff00000000000000000000000000000000000000009283168117909355600280549185169190921681179091556040805192835260208301919091527fdc90fed0326ba91706deeac7eb34ac9f8b680734f9d782864dc29704d23bed6a910160405180910390a15050565b600080610ebe611a10565b6002546040516331a9108f60e11b81526004810186905233916001600160a01b031690636352211e90602401602060405180830381865afa158015610f07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f2b919061455f565b6001600160a01b0316146108885760405162461bcd60e51b8152602060048201526003602482015262414f4560e81b6044820152606401610877565b600080600384604051610f7a9190614410565b908152604051908190036020019020549050610acb610f9984836145ab565b84610d1b565b6040516330d661bf60e11b81527f000000000000000000000000000000000000000000000000000000000000000060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906361acc37e90602401600060405180830381865afa158015611026573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261104e919081019061448c565b604001516001600160a01b0316336001600160a01b0316146110a45760405162461bcd60e51b815260206004820152600f60248201526e37b7363ca0b83827b832b930ba37b960891b6044820152606401610877565b6110ac611a10565b6110b78484846127eb565b9050610dae6001600055565b6040516330d661bf60e11b81527f0000000000000000000000000000000000000000000000000000000000000000600482015260009081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906361acc37e90602401600060405180830381865afa15801561114c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611174919081019061448c565b604001516001600160a01b0316336001600160a01b0316146111ca5760405162461bcd60e51b815260206004820152600f60248201526e37b7363ca0b83827b832b930ba37b960891b6044820152606401610877565b6111d2611a10565b610d04858585612a23565b60006111e7611a10565b6002546040516331a9108f60e11b81526004810185905233916001600160a01b031690636352211e90602401602060405180830381865afa158015611230573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611254919061455f565b6001600160a01b031614610be05760405162461bcd60e51b8152602060048201526003602482015262414f4560e81b6044820152606401610877565b6040516330d661bf60e11b81527f000000000000000000000000000000000000000000000000000000000000000060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906361acc37e90602401600060405180830381865afa158015611317573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261133f919081019061448c565b604001516001600160a01b0316336001600160a01b0316146113955760405162461bcd60e51b815260206004820152600f60248201526e37b7363ca0b83827b832b930ba37b960891b6044820152606401610877565b61139d611a10565b6108bd8383612bc2565b6040516330d661bf60e11b81527f000000000000000000000000000000000000000000000000000000000000000060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906361acc37e90602401600060405180830381865afa15801561142e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611456919081019061448c565b604001516001600160a01b0316336001600160a01b0316146114ac5760405162461bcd60e51b815260206004820152600f60248201526e37b7363ca0b83827b832b930ba37b960891b6044820152606401610877565b61097c611a10565b60006114be611a10565b6108bd8383336127eb565b6000806114d4611a10565b610892848433612a23565b6000806114ea611a10565b6108928484336125d7565b6040516330d661bf60e11b81527f000000000000000000000000000000000000000000000000000000000000000060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906361acc37e90602401600060405180830381865afa15801561157c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526115a4919081019061448c565b604001516001600160a01b0316336001600160a01b0316146115fa5760405162461bcd60e51b815260206004820152600f60248201526e37b7363ca0b83827b832b930ba37b960891b6044820152606401610877565b611602611a10565b6110b7848484611d60565b600060038260405161161f9190614410565b9081526020016040518091039020549050919050565b600061163f611a10565b6002546040516331a9108f60e11b81526004810185905233916001600160a01b031690636352211e90602401602060405180830381865afa158015611688573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ac919061455f565b6001600160a01b0316146116e85760405162461bcd60e51b8152602060048201526003602482015262414f4560e81b6044820152606401610877565b6108bd8383612edc565b60006116fc611a10565b6002546040516331a9108f60e11b81526004810185905233916001600160a01b031690636352211e90602401602060405180830381865afa158015611745573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611769919061455f565b6001600160a01b0316146117a85760405162461bcd60e51b815260040161087790602080825260049082015263414f453160e01b604082015260600190565b6002546040516331a9108f60e11b81526004810184905233916001600160a01b031690636352211e90602401602060405180830381865afa1580156117f1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611815919061455f565b6001600160a01b03161461139d5760405162461bcd60e51b81526004016108779060208082526004908201526320a7a29960e11b604082015260600190565b600061185e611a10565b6002546040516331a9108f60e11b81526004810185905233916001600160a01b031690636352211e90602401602060405180830381865afa1580156118a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118cb919061455f565b6001600160a01b031614610a935760405162461bcd60e51b8152602060048201526003602482015262414f4560e81b6044820152606401610877565b6040516330d661bf60e11b81527f000000000000000000000000000000000000000000000000000000000000000060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906361acc37e90602401600060405180830381865afa15801561198e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526119b6919081019061448c565b604001516001600160a01b0316336001600160a01b031614611a0c5760405162461bcd60e51b815260206004820152600f60248201526e37b7363ca0b83827b832b930ba37b960891b6044820152606401610877565b6116e85b600260005403611a3357604051633ee5aeb560e01b815260040160405180910390fd5b6002600055565b600254604051632e34059960e01b8152600481018490526000918291829182916001600160a01b0390911690632e34059990602401600060405180830381865afa158015611a8c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611ab491908101906145be565b9150915060008511611aee5760405162461bcd60e51b815260206004820152600360248201526253414560e81b6044820152606401610877565b808510611b235760405162461bcd60e51b815260206004820152600360248201526253414560e81b6044820152606401610877565b6002546040516331a9108f60e11b8152600481018890526000916001600160a01b031690636352211e90602401602060405180830381865afa158015611b6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b91919061455f565b6002546040516332936dbd60e11b8152600481018a9052602481018990529192506001600160a01b031690636526db7a90604401600060405180830381600087803b158015611bdf57600080fd5b505af1158015611bf3573d6000803e3d6000fd5b505060025460405163ba7aef4360e01b81526001600160a01b03909116925063ba7aef439150611c2b90849087908b90600401614631565b6020604051808303816000875af1158015611c4a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c6e919061457c565b9350611c7b600087610d1b565b611c8e611c8888856145ab565b88610d1b565b611c9891906145ab565b94506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001615611cd757611cd28561314a565b611d15565b84341015611d0c5760405162461bcd60e51b8152602060048201526002602482015261564560f01b6044820152606401610877565b611d1585613179565b7f06b7b6c38804faf2c534a0cad68aef3a0f07a95cc5ab29e6a53d57baf2ba8dd3878585898933604051611d4e96959493929190614663565b60405180910390a15050509250929050565b6040516305d2c77360e01b81526000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906305d2c77390611dd1907f00000000000000000000000000000000000000000000000000000000000000009088906004016146a9565b602060405180830381865afa158015611dee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e1291906146c2565b611e435760405162461bcd60e51b8152602060048201526002602482015261544560f01b6044820152606401610877565b60008311611e795760405162461bcd60e51b815260206004820152600360248201526254414560e81b6044820152606401610877565b6060806060611e8985888861319b565b929650909450925090506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001615611edb57611ecb8461314a565b611ed683838361328a565b611f24565b83341015611f105760405162461bcd60e51b8152602060048201526002602482015261564560f01b6044820152606401610877565b611f1b83838361337a565b611f2484613179565b7f4148c4143002597ba7355c883febeed0bdadfc0e1d4bc285ae46cc2db8b90bfe8787863389888888604051611f61989796959493929190614758565b60405180910390a15050509392505050565b6000808211611faa5760405162461bcd60e51b815260206004820152600360248201526254414560e81b6044820152606401610877565b600254604051632e34059960e01b81526004810185905260009182916001600160a01b0390911690632e34059990602401600060405180830381865afa158015611ff8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261202091908101906145be565b60025460405163771602f760e01b815260048101899052602481018890529294509092506001600160a01b03169063771602f790604401600060405180830381600087803b15801561207157600080fd5b505af1158015612085573d6000803e3d6000fd5b505050506120958583838761344f565b95945050505050565b600254604051632e34059960e01b815260048101849052600091829182916001600160a01b031690632e34059990602401600060405180830381865afa1580156120ec573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261211491908101906145be565b6002546040516331a9108f60e11b8152600481018990529294509092506000916001600160a01b0390911690636352211e90602401602060405180830381865afa158015612166573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061218a919061455f565b9050600085116121c25760405162461bcd60e51b815260206004820152600360248201526254414560e81b6044820152606401610877565b6004836040516121d29190614410565b90815260408051602092819003830190206001600160a01b0384166000908152925290205485111561222c5760405162461bcd60e51b815260206004820152600360248201526254414560e81b6044820152606401610877565b60025460405163771602f760e01b815260048101889052602481018790526001600160a01b039091169063771602f790604401600060405180830381600087803b15801561227957600080fd5b505af115801561228d573d6000803e3d6000fd5b5050505061229e8684848885613598565b9695505050505050565b600254604051632e34059960e01b815260048101849052600091829182916001600160a01b031690632e34059990602401600060405180830381865afa1580156122f6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261231e91908101906145be565b6002546040516331a9108f60e11b8152600481018990529294509092506000916001600160a01b0390911690636352211e90602401602060405180830381865afa158015612370573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612394919061455f565b9050600085116123cc5760405162461bcd60e51b815260206004820152600360248201526254414560e81b6044820152606401610877565b818511156124025760405162461bcd60e51b815260206004820152600360248201526254414560e81b6044820152606401610877565b61241561240f86846145ab565b86610d1b565b6002546040516332936dbd60e11b815260048101899052602481018890529195506001600160a01b031690636526db7a90604401600060405180830381600087803b15801561246357600080fd5b505af1158015612477573d6000803e3d6000fd5b505050508460048460405161248c9190614410565b90815260408051602092819003830190203060009081529252812080549091906124b79084906145ab565b92505081905550846004846040516124cf9190614410565b90815260200160405180910390206000836001600160a01b03166001600160a01b03168152602001908152602001600020600082825461250f91906147dc565b90915550506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016156125515761254c8461314a565b61258f565b833410156125865760405162461bcd60e51b8152602060048201526002602482015261564560f01b6044820152606401610877565b61258f84613179565b7ff526b7def965ff19c2ef9b94a1e04c9e996ce6316110adb6d17a24233609429d86848787336040516125c69594939291906147ef565b60405180910390a150505092915050565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166305d2c7737f0000000000000000000000000000000000000000000000000000000000000000876040518363ffffffff1660e01b81526004016126489291906146a9565b602060405180830381865afa158015612665573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061268991906146c2565b6126ba5760405162461bcd60e51b8152602060048201526002602482015261544560f01b6044820152606401610877565b600084116126f05760405162461bcd60e51b815260206004820152600360248201526254414560e81b6044820152606401610877565b6004856040516127009190614410565b90815260408051602092819003830190206001600160a01b0386166000908152925290205484111561275a5760405162461bcd60e51b815260206004820152600360248201526254414560e81b6044820152606401610877565b60025460405163ba7aef4360e01b81526001600160a01b039091169063ba7aef439061278e90869089908990600401614631565b6020604051808303816000875af11580156127ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127d1919061457c565b91506127e1828660008787613598565b9050935093915050565b6040516305d2c77360e01b81526000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906305d2c7739061285c907f00000000000000000000000000000000000000000000000000000000000000009088906004016146a9565b602060405180830381865afa158015612879573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061289d91906146c2565b6128ce5760405162461bcd60e51b8152602060048201526002602482015261544560f01b6044820152606401610877565b600083116129045760405162461bcd60e51b815260206004820152600360248201526254414560e81b6044820152606401610877565b6004846040516129149190614410565b90815260408051602092819003830190206001600160a01b0385166000908152925290205483111561296e5760405162461bcd60e51b815260206004820152600360248201526254414560e81b6044820152606401610877565b606080606061297e858888613700565b929650909450925090506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016156129d1576129c133856137dd565b6129cc83838361328a565b6129e6565b6129db338561380e565b6129e683838361337a565b7f1b2eeec214de59fdf7929b1d523b8a29f0fa6928a5a32502b10e2fb6eec738488787863389888888604051611f61989796959493929190614758565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166305d2c7737f0000000000000000000000000000000000000000000000000000000000000000876040518363ffffffff1660e01b8152600401612a949291906146a9565b602060405180830381865afa158015612ab1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ad591906146c2565b612b065760405162461bcd60e51b8152602060048201526002602482015261544560f01b6044820152606401610877565b60008411612b3c5760405162461bcd60e51b815260206004820152600360248201526254414560e81b6044820152606401610877565b60025460405163ba7aef4360e01b81526001600160a01b039091169063ba7aef4390612b7090869089908990600401614631565b6020604051808303816000875af1158015612b8f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bb3919061457c565b91506127e1828660008761344f565b600254604051632e34059960e01b815260048101849052600091829182916001600160a01b031690632e34059990602401600060405180830381865afa158015612c10573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612c3891908101906145be565b600254604051632e34059960e01b81526004810188905292945090925060009182916001600160a01b031690632e34059990602401600060405180830381865afa158015612c8a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612cb291908101906145be565b9150915081604051602001612cc79190614410565b6040516020818303038152906040528051906020012084604051602001612cee9190614410565b6040516020818303038152906040528051906020012014612d365760405162461bcd60e51b8152602060048201526002602482015261544560f01b6044820152606401610877565b600254604051630852cd8d60e31b8152600481018890526001600160a01b03909116906342966c6890602401600060405180830381600087803b158015612d7c57600080fd5b505af1158015612d90573d6000803e3d6000fd5b505060025460405163771602f760e01b8152600481018b9052602481018590526001600160a01b03909116925063771602f79150604401600060405180830381600087803b158015612de157600080fd5b505af1158015612df5573d6000803e3d6000fd5b505050506000612e06600083610d1b565b612e108584610d1b565b612e1a91906145ab565b90506000612e27826138bc565b9050612e3381836145ab565b96506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001615612e7c57612e6e33886137dd565b612e778161399f565b612e8f565b612e86338861380e565b612e8f81613a51565b7fde619523ae77d03ec4f29025bfd201e1e877f05f290c85569455c5374baf0f7d89878a8a8533604051612ec89695949392919061482e565b60405180910390a150505050505092915050565b600254604051632e34059960e01b815260048101849052600091829182916001600160a01b031690632e34059990602401600060405180830381865afa158015612f2a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612f5291908101906145be565b9150915060008411612f8c5760405162461bcd60e51b815260206004820152600360248201526254414560e81b6044820152606401610877565b80841115612fc25760405162461bcd60e51b815260206004820152600360248201526254414560e81b6044820152606401610877565b6002546040516332936dbd60e11b815260048101879052602481018690526001600160a01b0390911690636526db7a90604401600060405180830381600087803b15801561300f57600080fd5b505af1158015613023573d6000803e3d6000fd5b5050505060008060008061303830878a613700565b93509350935093506000613057898761305191906145ab565b8a610d1b565b90508085101561308e5760405162461bcd60e51b8152602060048201526002602482015261434560f01b6044820152606401610877565b61309881866145ab565b97506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016156130e3576130d333896137dd565b6130de84848461328a565b6130f8565b6130ed338961380e565b6130f884848461337a565b7f22646f19852066c29f0a0ad97d04b7017329fe9bdd8562b2af36687f2d76d94b8a888b8b33898989604051613135989796959493929190614875565b60405180910390a15050505050505092915050565b6131767f0000000000000000000000000000000000000000000000000000000000000000333084613b03565b50565b600061318582346145ab565b9050801561319757613197338261380e565b5050565b6000606080606060006131ae8787610a9d565b905060006131dd88837f0000000000000000000000000000000000000000000000000000000000000000613b7f565b9197509550935090506131f081836147dc565b9550866003896040516132039190614410565b9081526020016040518091039020600082825461322091906147dc565b92505081905550866004896040516132389190614410565b908152602001604051809103902060008b6001600160a01b03166001600160a01b03168152602001908152602001600020600082825461327891906147dc565b92505081905550505093509350935093565b60005b81518110156133745760006132c28483815181106132ad576132ad6148be565b6020026020010151631db0957160e31b613d2c565b90508015613325576133208583815181106132df576132df6148be565b60200260200101518584815181106132f9576132f96148be565b6020026020010151858581518110613313576133136148be565b6020026020010151613d48565b613361565b61336184838151811061333a5761333a6148be565b6020026020010151848481518110613354576133546148be565b60200260200101516137dd565b508061336c816148d4565b91505061328d565b50505050565b60005b815181101561337457600061339d8483815181106132ad576132ad6148be565b90508015613400576133fb8583815181106133ba576133ba6148be565b60200260200101518584815181106133d4576133d46148be565b60200260200101518585815181106133ee576133ee6148be565b6020026020010151613e16565b61343c565b61343c848381518110613415576134156148be565b602002602001015184848151811061342f5761342f6148be565b602002602001015161380e565b5080613447816148d4565b91505061337d565b600080600080600061346230898861319b565b935093509350935060006134768888610d1b565b90506000613483826138bc565b9050600061349182846145ab565b905061349d81886145ab565b97506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016156134f0576134d78861314a565b6134e08261399f565b6134eb86868661328a565b613542565b873410156135255760405162461bcd60e51b8152602060048201526002602482015261564560f01b6044820152606401610877565b61352e82613a51565b61353986868661337a565b61354288613179565b7f58bb572302183568a95f5d6430e568d9f9a7c311d171b91fc21396eaf6e8b5908c8c8b8b86338c8c8c604051613581999897969594939291906148ed565b60405180910390a150505050505050949350505050565b6000806135a58585610d1b565b905060006135b2826138bc565b9050846004886040516135c59190614410565b90815260200160405180910390206000866001600160a01b03166001600160a01b03168152602001908152602001600020600082825461360591906145ab565b925050819055508460048860405161361d9190614410565b90815260408051602092819003830190203060009081529252812080549091906136489084906147dc565b90915550613658905081836145ab565b92506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016156136a15761369333846137dd565b61369c8161399f565b6136b4565b6136ab338461380e565b6136b481613a51565b7f4bbb421ef6a45a1a636c3a193c4b52139022e0c755fa94c2bbd9b758ad37aec88888878685336040516136ed9695949392919061482e565b60405180910390a1505095945050505050565b6000606080606060006137138787610f67565b9050600061374288837f0000000000000000000000000000000000000000000000000000000000000000613b7f565b91975095509350905061375581836145ab565b9550866003896040516137689190614410565b9081526020016040518091039020600082825461378591906145ab565b925050819055508660048960405161379d9190614410565b908152602001604051809103902060008b6001600160a01b03166001600160a01b03168152602001908152602001600020600082825461327891906145ab565b8015613197576131977f00000000000000000000000000000000000000000000000000000000000000008383613ee4565b801561319757604080516000808252602082019092526001600160a01b03841690839060405161383e9190614410565b60006040518083038185875af1925050503d806000811461387b576040519150601f19603f3d011682016040523d82523d6000602084013e613880565b606091505b50509050806138b75760405162461bcd60e51b815260206004820152600360248201526254454560e81b6044820152606401610877565b505050565b60405163bb371b0f60e01b81527f000000000000000000000000000000000000000000000000000000000000000060048201526000907f00000000000000000000000000000000000000000000000000000000000000009083906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063bb371b0f90602401602060405180830381865afa158015613967573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061398b919061457c565b6139959190614975565b61076e919061498c565b6040516306cf70fb60e51b81527f00000000000000000000000000000000000000000000000000000000000000006004820152613176907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063d9ee1f6090602401602060405180830381865afa158015613a27573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a4b919061455f565b826137dd565b6040516306cf70fb60e51b81527f00000000000000000000000000000000000000000000000000000000000000006004820152613176907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063d9ee1f6090602401602060405180830381865afa158015613ad9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613afd919061455f565b8261380e565b6040516001600160a01b0384811660248301528381166044830152606482018390526133749186918216906323b872dd906084015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050613f15565b600154604051636743753360e11b81526000916060918291829182916001600160a01b03169063ce86ea6690613bb9908b906004016149ae565b600060405180830381865afa158015613bd6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613bfe9190810190614aaf565b825193975095509092505067ffffffffffffffff811115613c2157613c21614172565b604051908082528060200260200182016040528015613c4a578160200160208202803683370190505b50915060005b8151811015613d215760007f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000848481518110613caf57613caf6148be565b60200260200101518a8c613cc39190614975565b613ccd9190614975565b613cd7919061498c565b613ce1919061498c565b905080848381518110613cf657613cf66148be565b6020908102919091010152613d0b81886147dc565b9650508080613d19906148d4565b915050613c50565b505093509350935093565b6000613d3783613f78565b8015610dae5750610dae8383613fc3565b613d5282826137dd565b604051631db0957160e31b815260048101849052602481018290526000906001600160a01b0384169063ed84ab88906044016020604051808303816000875af1158015613da3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613dc791906146c2565b9050806133745760405162461bcd60e51b815260206004820152600660248201527f54453257444500000000000000000000000000000000000000000000000000006044820152606401610877565b613e20828261380e565b604051631db0957160e31b815260048101849052602481018290526000906001600160a01b0384169063ed84ab88906044016020604051808303816000875af1158015613e71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e9591906146c2565b9050806133745760405162461bcd60e51b815260206004820152600560248201527f54455744450000000000000000000000000000000000000000000000000000006044820152606401610877565b6040516001600160a01b038381166024830152604482018390526138b791859182169063a9059cbb90606401613b38565b6000613f2a6001600160a01b0384168361407a565b90508051600014158015613f4f575080806020019051810190613f4d91906146c2565b155b156138b757604051635274afe760e01b81526001600160a01b0384166004820152602401610877565b6000613f8b826301ffc9a760e01b613fc3565b801561076e5750613fbc827fffffffff00000000000000000000000000000000000000000000000000000000613fc3565b1592915050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000082166024820152600090819060440160408051601f19818403018152919052602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166301ffc9a760e01b178152825192935060009283928392909183918a617530fa92503d91506000519050828015614063575060208210155b801561406f5750600081115b979650505050505050565b6060610dae8383600084600080856001600160a01b031684866040516140a09190614410565b60006040518083038185875af1925050503d80600081146140dd576040519150601f19603f3d011682016040523d82523d6000602084013e6140e2565b606091505b509150915061229e868383606082614102576140fd82614149565b610dae565b815115801561411957506001600160a01b0384163b155b1561414257604051639996b31560e01b81526001600160a01b0385166004820152602401610877565b5080610dae565b8051156141595780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b634e487b7160e01b600052604160045260246000fd5b60405160e0810167ffffffffffffffff811182821017156141ab576141ab614172565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156141da576141da614172565b604052919050565b600067ffffffffffffffff8211156141fc576141fc614172565b50601f01601f191660200190565b600082601f83011261421b57600080fd5b813561422e614229826141e2565b6141b1565b81815284602083860101111561424357600080fd5b816020850160208301376000918101602001919091529392505050565b6001600160a01b038116811461317657600080fd5b6000806040838503121561428857600080fd5b823567ffffffffffffffff81111561429f57600080fd5b6142ab8582860161420a565b92505060208301356142bc81614260565b809150509250929050565b600080604083850312156142da57600080fd5b50508035926020909101359150565b600080604083850312156142fc57600080fd5b823567ffffffffffffffff81111561431357600080fd5b61431f8582860161420a565b95602094909401359450505050565b60008060006060848603121561434357600080fd5b833567ffffffffffffffff81111561435a57600080fd5b6143668682870161420a565b93505060208401359150604084013561437e81614260565b809150509250925092565b6000806040838503121561439c57600080fd5b82356143a781614260565b915060208301356142bc81614260565b6000602082840312156143c957600080fd5b813567ffffffffffffffff8111156143e057600080fd5b610acb8482850161420a565b60005b838110156144075781810151838201526020016143ef565b50506000910152565b600082516144228184602087016143ec565b9190910192915050565b600061443a614229846141e2565b905082815283838301111561444e57600080fd5b610dae8360208301846143ec565b600082601f83011261446d57600080fd5b610dae8383516020850161442c565b805161448781614260565b919050565b60006020828403121561449e57600080fd5b815167ffffffffffffffff808211156144b657600080fd5b9083019060e082860312156144ca57600080fd5b6144d2614188565b8251828111156144e157600080fd5b6144ed8782860161445c565b8252506144fc6020840161447c565b602082015261450d6040840161447c565b604082015261451e6060840161447c565b606082015261452f6080840161447c565b608082015261454060a0840161447c565b60a082015261455160c0840161447c565b60c082015295945050505050565b60006020828403121561457157600080fd5b8151610dae81614260565b60006020828403121561458e57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561076e5761076e614595565b600080604083850312156145d157600080fd5b825167ffffffffffffffff8111156145e857600080fd5b6145f48582860161445c565b925050602083015190509250929050565b6000815180845261461d8160208601602086016143ec565b601f01601f19169290920160200192915050565b6001600160a01b03841681526060602082015260006146536060830185614605565b9050826040830152949350505050565b86815285602082015260c06040820152600061468260c0830187614605565b60608301959095525060808101929092526001600160a01b031660a0909101529392505050565b828152604060208201526000610acb6040830184614605565b6000602082840312156146d457600080fd5b81518015158114610dae57600080fd5b600081518084526020808501945080840160005b83811015614714578151875295820195908201906001016146f8565b509495945050505050565b600081518084526020808501945080840160005b838110156147145781516001600160a01b031687529582019590820190600101614733565b600061010080835261476c8184018c614605565b90508960208401528860408401526001600160a01b03808916606085015280881660808501525082810360a08401526147a581876146e4565b905082810360c08401526147b9818661471f565b905082810360e08401526147cd81856146e4565b9b9a5050505050505050505050565b8082018082111561076e5761076e614595565b85815260a06020820152600061480860a0830187614605565b60408301959095525060608101929092526001600160a01b031660809091015292915050565b86815260c06020820152600061484760c0830188614605565b90508560408301528460608301528360808301526001600160a01b03831660a0830152979650505050505050565b60006101008a835280602084015261488f8184018b614605565b90508860408401528760608401526001600160a01b038716608084015282810360a08401526147a581876146e4565b634e487b7160e01b600052603260045260246000fd5b6000600182016148e6576148e6614595565b5060010190565b60006101208b83528060208401526149078184018c614605565b90508960408401528860608401528760808401526001600160a01b03871660a084015282810360c084015261493c81876146e4565b905082810360e0840152614950818661471f565b905082810361010084015261496581856146e4565b9c9b505050505050505050505050565b808202811582820484141761076e5761076e614595565b6000826149a957634e487b7160e01b600052601260045260246000fd5b500490565b602081526000610dae6020830184614605565b600067ffffffffffffffff8211156149db576149db614172565b5060051b60200190565b600082601f8301126149f657600080fd5b81516020614a06614229836149c1565b82815260059290921b84018101918181019086841115614a2557600080fd5b8286015b84811015614a405780518352918301918301614a29565b509695505050505050565b600082601f830112614a5c57600080fd5b81516020614a6c614229836149c1565b82815260059290921b84018101918181019086841115614a8b57600080fd5b8286015b84811015614a40578051614aa281614260565b8352918301918301614a8f565b60008060008060808587031215614ac557600080fd5b845167ffffffffffffffff80821115614add57600080fd5b614ae9888389016149e5565b9550602091508187015181811115614b0057600080fd5b614b0c89828a016149e5565b95505060408088015182811115614b2257600080fd5b8801601f81018a13614b3357600080fd5b8051614b41614229826149c1565b81815260059190911b8201850190858101908c831115614b6057600080fd5b8684015b83811015614bac57805187811115614b7c5760008081fd5b8501603f81018f13614b8e5760008081fd5b614b9e8f8a83015189840161442c565b845250918701918701614b64565b5080985050505050506060870151915080821115614bc957600080fd5b50614bd687828801614a4b565b9150509295919450925056fea164736f6c6343000814000a000000000000000000000000c9d45752c87240bf68811b39814fc441dd98e21d000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000186a000000000000000000000000000000000000000000000000000000000000186a00000000000000000000000005228a94abb0150a2169374813a0438f98b41722900000000000000000000000001ffe5a380a3e14c433040529ab892634d7c6bc900000000000000000000000000000000000000000000000000000000000006400000000000000000000000000000000000000000000000000000000000000640