UNPKG

core-artifacts

Version:

Consist artifacts of the maple protocol

1,313 lines 99.9 kB
{ "_format": "hh-sol-artifact-1", "contractName": "Loan", "sourceName": "contracts/core/loan/v1/LoanFactory.sol", "abi": [ { "inputs": [ { "internalType": "address", "name": "_borrower", "type": "address" }, { "internalType": "address", "name": "_liquidityAsset", "type": "address" }, { "internalType": "address", "name": "_collateralAsset", "type": "address" }, { "internalType": "address", "name": "_flFactory", "type": "address" }, { "internalType": "address", "name": "_clFactory", "type": "address" }, { "internalType": "uint256[5]", "name": "specs", "type": "uint256[5]" }, { "internalType": "address[3]", "name": "calcs", "type": "address[3]" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "token", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "balance", "type": "uint256" } ], "name": "BalanceUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "drawdownAmount", "type": "uint256" } ], "name": "Drawdown", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "by", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "fundsDistributed", "type": "uint256" } ], "name": "FundsDistributed", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "by", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "fundsWithdrawn", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "totalWithdrawn", "type": "uint256" } ], "name": "FundsWithdrawn", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "collateralSwapped", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "liquidityAssetReturned", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "liquidationExcess", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "defaultSuffered", "type": "uint256" } ], "name": "Liquidation", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "loanAdmin", "type": "address" }, { "indexed": false, "internalType": "bool", "name": "allowed", "type": "bool" } ], "name": "LoanAdminSet", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "fundedBy", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amountFunded", "type": "uint256" } ], "name": "LoanFunded", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "enum ILoan.State", "name": "state", "type": "uint8" } ], "name": "LoanStateChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "account", "type": "address" } ], "name": "Paused", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "totalPaid", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "principalPaid", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "interestPaid", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "paymentsRemaining", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "principalOwed", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "nextPaymentDue", "type": "uint256" }, { "indexed": false, "internalType": "bool", "name": "latePayment", "type": "bool" } ], "name": "PaymentMade", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "", "type": "address" }, { "indexed": false, "internalType": "int256", "name": "", "type": "int256" } ], "name": "PointsCorrectionUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "PointsPerShareUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "account", "type": "address" } ], "name": "Unpaused", "type": "event" }, { "inputs": [ { "internalType": "address", "name": "_owner", "type": "address" } ], "name": "accumulativeFundsOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" } ], "name": "allowance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "amountLiquidated", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "amountRecovered", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "approve", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "apr", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "borrower", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "clFactory", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "collateralAsset", "outputs": [ { "internalType": "contract IERC20", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "collateralLocker", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "collateralRatio", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amt", "type": "uint256" } ], "name": "collateralRequiredForDrawdown", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "createdAt", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "subtractedValue", "type": "uint256" } ], "name": "decreaseAllowance", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "defaultGracePeriod", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "defaultSuffered", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amt", "type": "uint256" } ], "name": "drawdown", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "excessReturned", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "feePaid", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "flFactory", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "mintTo", "type": "address" }, { "internalType": "uint256", "name": "amt", "type": "uint256" } ], "name": "fundLoan", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "fundingLocker", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "fundingPeriod", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "fundsToken", "outputs": [ { "internalType": "contract IERC20", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "fundsTokenBalance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getExpectedAmountRecovered", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getFullPayment", "outputs": [ { "internalType": "uint256", "name": "total", "type": "uint256" }, { "internalType": "uint256", "name": "principal", "type": "uint256" }, { "internalType": "uint256", "name": "interest", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getNextPayment", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "addedValue", "type": "uint256" } ], "name": "increaseAllowance", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "interestPaid", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "lateFeeCalc", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "liquidationExcess", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "liquidityAsset", "outputs": [ { "internalType": "contract IERC20", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "loanAdmins", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "loanState", "outputs": [ { "internalType": "enum ILoan.State", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "makeFullPayment", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "makePayment", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "nextPaymentDue", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "pause", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "paused", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "paymentIntervalSeconds", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "paymentsRemaining", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "premiumCalc", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "principalOwed", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "principalPaid", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" } ], "name": "reclaimERC20", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "repaymentCalc", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "requestAmount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "loanAdmin", "type": "address" }, { "internalType": "bool", "name": "allowed", "type": "bool" } ], "name": "setLoanAdmin", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "superFactory", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "termDays", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "triggerDefault", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "unpause", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "unwind", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "updateFundsReceived", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "withdrawFunds", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_owner", "type": "address" } ], "name": "withdrawableFundsOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_owner", "type": "address" } ], "name": "withdrawnFundsOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" } ], "bytecode": "0x6103006040523480156200001257600080fd5b5060405162004a8d38038062004a8d83398181016040526101a08110156200003957600080fd5b5080516020808301516040808501516060860151608087015183518085018552601081526f26b0b83632902637b0b7102a37b5b2b760811b8188019081528551808701909652600886526726a82616a627a0a760c11b9786019790975280519798959793969295919460a0830194610140909301939192909189918491849183918391620000ca91600391620006bf565b508051620000e0906004906020840190620006bf565b505060058054601260ff199182161790915560609490941b6001600160601b0319166080525050600a8054909216909155506000915062000123905033620004f7565b604051639ae4100b60e01b81526001600160a01b0380831660048301908152818b166024840152908916604483015291925073__$c58eaca1925b76929fe9306e4e51c4b95a$__91639ae4100b9184918b918b9189916064018260a080838360005b838110156200019f57818101518382015260200162000185565b5050505090500194505050505060006040518083038186803b158015620001c557600080fd5b505af4158015620001da573d6000803e3d6000fd5b5050506001600160601b031960608a811b82166101605289811b821660a05288811b821660c05287811b82166101005286901b166101405250426102a052825161020052602083810180516102205260408501519051620002479290919062000567811b6200236317901c565b600d556200026e620151808460026020020151620005ba60201b620023a51790919060201c565b61024052606083015161026052608083015161028052604080516374d7c62b60e01b815290516001600160a01b038316916374d7c62b916004828101926020929190829003018186803b158015620002c557600080fd5b505afa158015620002da573d6000803e3d6000fd5b505050506040513d6020811015620002f157600080fd5b50516102c05260408051631c1757c960e21b815290516001600160a01b0383169163705d5f24916004808301926020929190829003018186803b1580156200033857600080fd5b505afa1580156200034d573d6000803e3d6000fd5b505050506040513d60208110156200036457600080fd5b50516102e05281516001600160601b0319606091821b811661018052602080850151831b82166101a052604080860151841b9092166101c0523390921b6101e0528051630cf5bc1d60e11b81526001600160a01b0389811660048301529151918716926319eb783a926024808401938290030181600087803b158015620003ea57600080fd5b505af1158015620003ff573d6000803e3d6000fd5b505050506040513d60208110156200041657600080fd5b505160601b6001600160601b0319166101205260408051630cf5bc1d60e11b81526001600160a01b0389811660048301529151918716916319eb783a916024808201926020929091908290030181600087803b1580156200047657600080fd5b505af11580156200048b573d6000803e3d6000fd5b505050506040513d6020811015620004a257600080fd5b505160601b6001600160601b03191660e052604080516000815290517f400243eaf4da5ecbc2c6f2453605068a362c65ff9212fc60b58289b7e09d2209916020908290030190a1505050505050505062000764565b6000816001600160a01b031663c31245256040518163ffffffff1660e01b815260040160206040518083038186803b1580156200053357600080fd5b505afa15801562000548573d6000803e3d6000fd5b505050506040513d60208110156200055f57600080fd5b505192915050565b6000620005b183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506200061860201b60201c565b90505b92915050565b600082620005cb57506000620005b4565b82820282848281620005d957fe5b0414620005b15760405162461bcd60e51b815260040180806020018281038252602181526020018062004a6c6021913960400191505060405180910390fd5b60008183620006a85760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156200066c57818101518382015260200162000652565b50505050905090810190601f1680156200069a5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581620006b557fe5b0495945050505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200070257805160ff191683800117855562000732565b8280016001018555821562000732579182015b828111156200073257825182559160200191906001019062000715565b506200074092915062000744565b5090565b6200076191905b808211156200074057600081556001016200074b565b90565b60805160601c60a05160601c60c05160601c60e05160601c6101005160601c6101205160601c6101405160601c6101605160601c6101805160601c6101a05160601c6101c05160601c6101e05160601c61020051610220516102405161026051610280516102a0516102c0516102e0516140dd6200098f60003980610aa7528061134f5250806113b252806115dd52806136ac5250806115b75280612008528061368b525080611eb952806120db5250806118c1528061231d52508061198852806123415280612dc55250806110a0525080611295525080610a545280610ac85280610c3152806116f252806118785280611f07528061210152806124f352806135135250806113d6528061146b52508061113852806112c2528061144352508061095252806111145280611413525080610d75528061151c52806119c95280611bed52806129b65280612e5e52806130b25250806121d3525080610a305280610c5952806119ea52806126505280612e3752806133ce525080610fcf52508061138e528061159052806118a05280612292528061314852806132e1525080610be15280611a1c5280611e895280611f52528061208b5280612626528061339f525080610c095280610d525280610e45528061156852806116ce5280611cac5280611cef5280611f7a52806120b3528061226f5280612f24528061311952806132b752806133425280613729525080610f27528061132552806129185280612b0752506140dd6000f3fe608060405234801561001057600080fd5b50600436106103da5760003560e01c806364195ba81161020a578063a9691f3f11610125578063cf09e0d0116100b8578063e48671c411610087578063e48671c4146108e5578063e74f6166146108ed578063e920b1e1146108f5578063f52ec46c14610921578063f555278814610929576103da565b8063cf09e0d01461088a578063d8d7970014610892578063da9bf6e01461089a578063dd62ed3e146108b7576103da565b8063b4eae1cb116100f4578063b4eae1cb1461086a578063c296dcba14610872578063c9f4e4901461087a578063cee9666914610882576103da565b8063a9691f3f1461084a578063aabaecd614610852578063ac7c57801461085a578063b419857014610862576103da565b8063807763ab1161019d57806395d89b411161016c57806395d89b41146107cd578063a079a4dd146107d5578063a457c2d7146107f2578063a9059cbb1461081e576103da565b8063807763ab146107695780638456cb59146107715780638905fd4f1461077957806392769d941461079f576103da565b806374d7c62b116101d957806374d7c62b1461072b578063757116a01461073357806377903e3b1461073b5780637df1f1b914610761576103da565b806364195ba8146106ed578063705d5f24146106f557806370a08231146106fd578063743e5d1d14610723576103da565b806331a7958f116102fa5780634b27ef6c1161028d5780635c975abb1161025c5780635c975abb146106cd5780635e8bdbeb146106d557806360bd1f87146106dd57806363f04b15146106e5576103da565b80634b27ef6c146106715780634be7cb14146106795780634e97415f1461069f57806357ded9c9146106c5576103da565b8063443bb293116102c9578063443bb29314610606578063469cbfdb1461062c57806346c162de146106345780634ae01cdc1461063c576103da565b806331a7958f146105c257806339509351146105ca57806339c02899146105f65780633f4ba83a146105fe576103da565b806318160ddd1161037257806324600fc31161034157806324600fc31461056857806325af34cd146105705780632c3c12161461059c578063313ce567146105a4576103da565b806318160ddd1461051a5780631935011414610522578063209b2bca1461052a57806323b872dd14610532576103da565b8063095ea7b3116103ae578063095ea7b3146104c057806309f64d08146105005780630d49b38c14610508578063175f832914610510576103da565b806241c52c146103df578063067754581461041757806306fdde031461043b5780630895326f146104b8575b600080fd5b610405600480360360208110156103f557600080fd5b50356001600160a01b0316610931565b60408051918252519081900360200190f35b61041f610950565b604080516001600160a01b039092168252519081900360200190f35b610443610974565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561047d578181015183820152602001610465565b50505050905090810190601f1680156104aa5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610405610a0a565b6104ec600480360360408110156104d657600080fd5b506001600160a01b038135169060200135610a10565b604080519115158252519081900360200190f35b61041f610a2e565b61041f610a52565b610518610a76565b005b610405610e37565b610405610e3d565b61041f610e43565b6104ec6004803603606081101561054857600080fd5b506001600160a01b03813581169160208101359091169060400135610e67565b610518610ef5565b610578610fbf565b6040518082600481111561058857fe5b60ff16815260200191505060405180910390f35b61041f610fcd565b6105ac610ff1565b6040805160ff9092168252519081900360200190f35b610405610ffa565b6104ec600480360360408110156105e057600080fd5b506001600160a01b038135169060200135611000565b610405611054565b61051861105a565b6104056004803603602081101561061c57600080fd5b50356001600160a01b031661106c565b61040561109e565b6105186110c2565b6106446110f0565b60408051958652602086019490945284840192909252606084015215156080830152519081900360a00190f35b61040561120f565b6104ec6004803603602081101561068f57600080fd5b50356001600160a01b0316611215565b610405600480360360208110156106b557600080fd5b50356001600160a01b031661122a565b610405611293565b6104ec6112b7565b61041f6112c0565b6105186112e4565b61041f611323565b610405611347565b61040561134d565b6104056004803603602081101561071357600080fd5b50356001600160a01b0316611371565b61041f61138c565b6104056113b0565b61041f6113d4565b6107436113f8565b60408051938452602084019290925282820152519081900360600190f35b61041f61151a565b61051861153e565b6105186116a1565b6105186004803603602081101561078f57600080fd5b50356001600160a01b03166116b1565b610518600480360360408110156107b557600080fd5b506001600160a01b0381351690602001351515611786565b6104436117f6565b610518600480360360208110156107eb57600080fd5b5035611857565b6104ec6004803603604081101561080857600080fd5b506001600160a01b038135169060200135611dff565b6104ec6004803603604081101561083457600080fd5b506001600160a01b038135169060200135611e6d565b610405611e81565b61041f611e87565b610405611eab565b610405611eb1565b610405611eb7565b610405611edb565b610405611ffa565b610405612000565b610405612006565b61051861202a565b610405600480360360208110156108b057600080fd5b5035612073565b610405600480360360408110156108cd57600080fd5b506001600160a01b03813581169160200135166121a0565b6104056121cb565b61041f6121d1565b6105186004803603604081101561090b57600080fd5b506001600160a01b0381351690602001356121f5565b61040561231b565b61040561233f565b6001600160a01b0381166000908152600860205260409020545b919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60038054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610a005780601f106109d557610100808354040283529160200191610a00565b820191906000526020600020905b8154815290600101906020018083116109e357829003601f168201915b5050505050905090565b600d5481565b6000610a24610a1d6123fe565b8484612402565b5060015b92915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b610a7e6124ee565b610a8860016125be565b73__$c58eaca1925b76929fe9306e4e51c4b95a$__639b3134e1600c547f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000610af033611371565b610af8610e37565b6040518663ffffffff1660e01b815260040180868152602001858152602001846001600160a01b03166001600160a01b031681526020018381526020018281526020019550505050505060206040518083038186803b158015610b5a57600080fd5b505af4158015610b6e573d6000803e3d6000fd5b505050506040513d6020811015610b8457600080fd5b5051610bc9576040805162461bcd60e51b815260206004820152600f60248201526e4c3a4641494c45445f544f5f4c495160881b604482015290519081900360640190fd5b60408051635432274f60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527f0000000000000000000000000000000000000000000000000000000000000000166064820152815173__$c58eaca1925b76929fe9306e4e51c4b95a$__92635432274f9260848082019391829003018186803b158015610cb757600080fd5b505af4158015610ccb573d6000803e3d6000fd5b505050506040513d6040811015610ce157600080fd5b508051602090910151601455601355610cf8612624565b600e5460145411610d2557601454600e54610d189163ffffffff6126a216565b600e819055601555610da0565b600e54601454610d3a9163ffffffff6126a216565b60168190556000600e55610da0906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016907f00000000000000000000000000000000000000000000000000000000000000009063ffffffff6126e416565b610da86110c2565b600a805461ff001916610400179055601354601454601654601554604080519485526020850193909352838301919091526060830152517f4152c73dd2614c4f9fc35e8c9cf16013cd588c75b49a4c1673ecffdcbcda94039181900360800190a1604051600080516020613eb18339815191529060049080825b60ff16815260200191505060405180910390a1565b60025490565b600e5481565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000610e74848484612736565b610eea84610e806123fe565b610ee585604051806060016040528060288152602001613fc4602891396001600160a01b038a16600090815260016020526040812090610ebe6123fe565b6001600160a01b03168152602081019190915260400160002054919063ffffffff61286216565b612402565b5060015b9392505050565b610efd6124ee565b610f056128f9565b604080516370a0823160e01b8152306004820181905291516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169291600080516020613ef48339815191529184916370a08231916024808301926020929190829003018186803b158015610f8057600080fd5b505afa158015610f94573d6000803e3d6000fd5b505050506040513d6020811015610faa57600080fd5b505160408051918252519081900360200190a3565b600a54610100900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b60055460ff1690565b60125481565b6000610a2461100d6123fe565b84610ee5856001600061101e6123fe565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549063ffffffff61295116565b60145481565b6110626129ab565b61106a612a42565b565b6001600160a01b038116600090815260086020526040812054610a28906110928461122a565b9063ffffffff6126a216565b7f000000000000000000000000000000000000000000000000000000000000000081565b60006110cc612ae0565b9050600081136110dc575061106a565b6110ed6110e882612b95565b612bda565b50565b600080600080600073__$c58eaca1925b76929fe9306e4e51c4b95a$__63f7dd03107f0000000000000000000000000000000000000000000000000000000000000000600c547f00000000000000000000000000000000000000000000000000000000000000006040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b03168152602001838152602001826001600160a01b03166001600160a01b03168152602001935050505060a06040518083038186803b1580156111bd57600080fd5b505af41580156111d1573d6000803e3d6000fd5b505050506040513d60a08110156111e757600080fd5b5080516020820151604083015160608401516080909401519299919850965091945092509050565b60155481565b600b6020526000908152604090205460ff1681565b6001600160a01b038116600090815260076020526040812054600160801b90611285906112809061127461126f61126088611371565b6006549063ffffffff6123a516565b612cda565b9063ffffffff612d1b16565b612b95565b8161128c57fe5b0492915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600a5460ff1690565b7f000000000000000000000000000000000000000000000000000000000000000081565b6112ec6124ee565b6112f660016125be565b60008060006113036113f8565b9250925092506000600d8190555061131e8383836000612d80565b505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600f5481565b7f000000000000000000000000000000000000000000000000000000000000000081565b6001600160a01b031660009081526020819052604090205490565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b600c546040805163348f8f0560e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116600483015260248201939093527f0000000000000000000000000000000000000000000000000000000000000000831660448201527f0000000000000000000000000000000000000000000000000000000000000000929092166064830152516000918291829173__$c58eaca1925b76929fe9306e4e51c4b95a$__9163691f1e0a91608480820192606092909190829003018186803b1580156114d757600080fd5b505af41580156114eb573d6000803e3d6000fd5b505050506040513d606081101561150157600080fd5b5080516020820151604090920151909591945092509050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6115466124ee565b61155060006125be565b604080516306742b0f60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301527f00000000000000000000000000000000000000000000000000000000000000001660248201527f000000000000000000000000000000000000000000000000000000000000000060448201527f00000000000000000000000000000000000000000000000000000000000000006064820152905173__$c58eaca1925b76929fe9306e4e51c4b95a$__916306742b0f916084808301926020929190829003018186803b15801561163e57600080fd5b505af4158015611652573d6000803e3d6000fd5b505050506040513d602081101561166857600080fd5b50516012556116756110c2565b600a805461ff001916610300179055604051600080516020613eb1833981519152906003908082610e22565b6116a96129ab565b61106a612fd7565b73__$c58eaca1925b76929fe9306e4e51c4b95a$__63a89d5ddb827f00000000000000000000000000000000000000000000000000000000000000006117167f0000000000000000000000000000000000000000000000000000000000000000613058565b604080516001600160e01b031960e087901b1681526001600160a01b03948516600482015292841660248401529216604482015290516064808301926000929190829003018186803b15801561176b57600080fd5b505af415801561177f573d6000803e3d6000fd5b5050505050565b61178e6124ee565b6117966130a7565b6001600160a01b0382166000818152600b6020908152604091829020805460ff1916851515908117909155825190815291517fa30926bb66c297ef5b745add0851be86e54885064eeb08b3dec89c878e53e9e69281900390910190a25050565b60048054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610a005780601f106109d557610100808354040283529160200191610a00565b61185f6124ee565b6118676130a7565b61187160006125be565b600061189c7f0000000000000000000000000000000000000000000000000000000000000000613058565b90507f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000083101561192b576040805162461bcd60e51b8152602060048201526014602482015273130e90535517d31517d49154555154d517d0535560621b604482015290519081900360640190fd5b611933613115565b83111561197d576040805162461bcd60e51b8152602060048201526013602482015272130e90535517d1d517d1955391115117d05355606a1b604482015290519081900360640190fd5b600e8390556119b2427f000000000000000000000000000000000000000000000000000000000000000063ffffffff61295116565b600c55600a805461ff001916610100179055611a4a7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000611a1286612073565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692919063ffffffff6131de16565b6000826001600160a01b031663cc32d1766040518163ffffffff1660e01b815260040160206040518083038186803b158015611a8557600080fd5b505afa158015611a99573d6000803e3d6000fd5b505050506040513d6020811015611aaf57600080fd5b505160408051630b5096bd60e11b815290519192506000916001600160a01b038616916316a12d7a916004808301926020929190829003018186803b158015611af757600080fd5b505afa158015611b0b573d6000803e3d6000fd5b505050506040513d6020811015611b2157600080fd5b50516040805163a5a2760560e01b815290519192506000916001600160a01b0387169163a5a27605916004808301926020929190829003018186803b158015611b6957600080fd5b505afa158015611b7d573d6000803e3d6000fd5b505050506040513d6020811015611b9357600080fd5b505190506000611bbb612710611baf898663ffffffff6123a516565b9063ffffffff61236316565b601181905590506000611bda612710611baf8a8863ffffffff6123a516565b9050611be7868483613238565b611c25867f0000000000000000000000000000000000000000000000000000000000000000611c20856110928d8763ffffffff6126a216565b613238565b611c3182611092613115565b601281905550856001600160a01b0316639890220b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611c7257600080fd5b505af1158015611c86573d6000803e3d6000fd5b50505050611c926110c2565b611c9a612624565b611ca26132b5565b611caa613320565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316600080516020613ef48339815191527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231876040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611d6357600080fd5b505afa158015611d77573d6000803e3d6000fd5b505050506040513d6020811015611d8d57600080fd5b505160408051918252519081900360200190a360408051600181529051600080516020613eb18339815191529181900360200190a16040805189815290517febf485edb8aa02238294ff7cda84b77f5afafa105e34f3bbf866534b7b5bd40e9181900360200190a15050505050505050565b6000610a24611e0c6123fe565b84610ee5856040518060600160405280602581526020016140836025913960016000611e366123fe565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919063ffffffff61286216565b6000610a24611e7a6123fe565b8484612736565b60095481565b7f000000000000000000000000000000000000000000000000000000000000000081565b60115481565b600c5481565b7f000000000000000000000000000000000000000000000000000000000000000081565b600080611ee661339b565b905073__$7147a69822a4dc0ef4bf7921909de23609$__63c1e37186611f2b7f0000000000000000000000000000000000000000000000000000000000000000613058565b6040805160e084901b6001600160e01b03191681526001600160a01b0392831660048201527f0000000000000000000000000000000000000000000000000000000000000000831660248201527f0000000000000000000000000000000000000000000000000000000000000000909216604483015260648201859052516084808301926020929190829003018186803b158015611fc857600080fd5b505af4158015611fdc573d6000803e3d6000fd5b505050506040513d6020811015611ff257600080fd5b505191505090565b60135481565b60165481565b7f000000000000000000000000000000000000000000000000000000000000000081565b6120326124ee565b61203c60016125be565b60008060008061204a6110f0565b600d8054600019019055939750919550935090915061206d905084848484612d80565b50505050565b60408051630f6a160160e31b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000060448301527f000000000000000000000000000000000000000000000000000000000000000016606482015260848101839052905160009173__$c58eaca1925b76929fe9306e4e51c4b95a$__91637b50b0089160a480820192602092909190829003018186803b15801561216e57600080fd5b505af4158015612182573d6000803e3d6000fd5b505050506040513d602081101561219857600080fd5b505192915050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b60105481565b7f000000000000000000000000000000000000000000000000000000000000000081565b600a5460ff1615612240576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b6122486124ee565b61225260006125be565b61225a613433565b612262613686565b6122bd6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016337f00000000000000000000000000000000000000000000000000000000000000008463ffffffff6131de16565b60006122c882613722565b90506122d483826137c7565b6040805183815290516001600160a01b038516917f726d5f1a838fe31748f737fa3ae5539ccff95952adfc593a1299532b643ff7a8919081900360200190a261131e6132b5565b7f0000000000000000000000000000000000000000000000000000000000000000815