[ { "inputs": [ { "internalType": "address", "name": "_asset", "type": "address" }, { "internalType": "address", "name": "_slippageCurve", "type": "address" }, { "internalType": "address", "name": "_router", "type": "address" }, { "internalType": "address", "name": "_backstop", "type": "address" }, { "internalType": "address", "name": "_protocolTreasury", "type": "address" }, { "internalType": "string", "name": "_name", "type": "string" }, { "internalType": "string", "name": "_symbol", "type": "string" } ], "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": false, "internalType": "address", "name": "recipient", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amountSwapTokens", "type": "uint256" } ], "name": "BackstopDrain", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "poolSharesBurned", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amountPrincipleWithdrawn", "type": "uint256" } ], "name": "Burn", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "lpFees", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "backstopFees", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "protocolFees", "type": "uint256" } ], "name": "ChargedSwapFees", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "poolSharesMinted", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amountPrincipleDeposited", "type": "uint256" } ], "name": "Mint", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferred", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "account", "type": "address" } ], "name": "Paused", "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" }, { "internalType": "address", "name": "spender", "type": "address" } ], "name": "allowance", "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": "asset", "outputs": [ { "internalType": "address", "name": "_token", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "assetDecimals", "outputs": [ { "internalType": "uint8", "name": "_decimals", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "backstop", "outputs": [ { "internalType": "contract IBackstopPool", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_owner", "type": "address" }, { "internalType": "uint256", "name": "_sharesToBurn", "type": "uint256" } ], "name": "backstopBurn", "outputs": [ { "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_amount", "type": "uint256" }, { "internalType": "address", "name": "_recipient", "type": "address" } ], "name": "backstopDrain", "outputs": [ { "internalType": "uint256", "name": "_swapAmount", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "coverage", "outputs": [ { "internalType": "uint256", "name": "_reserves", "type": "uint256" }, { "internalType": "uint256", "name": "_liabilities", "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": [ { "internalType": "uint256", "name": "_depositAmount", "type": "uint256" } ], "name": "deposit", "outputs": [ { "internalType": "uint256", "name": "_sharesToMint", "type": "uint256" }, { "internalType": "int256", "name": "_fee", "type": "int256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "getExcessLiquidity", "outputs": [ { "internalType": "int256", "name": "_excessLiquidity", "type": "int256" } ], "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": "insuranceWithdrawalTimelock", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_liquidityProvider", "type": "address" } ], "name": "insuranceWithdrawalUnlock", "outputs": [ { "internalType": "uint256", "name": "_unlockedOnBlockNo", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "maxCoverageRatioForSwapIn", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "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": "poolCap", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "protocolTreasury", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "name": "quoteBackstopDrain", "outputs": [ { "internalType": "uint256", "name": "_swapAmount", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_depositAmount", "type": "uint256" } ], "name": "quoteDeposit", "outputs": [ { "internalType": "uint256", "name": "_sharesToMint", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "name": "quoteSwapInto", "outputs": [ { "internalType": "uint256", "name": "_effectiveAmount", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "name": "quoteSwapOut", "outputs": [ { "internalType": "uint256", "name": "_effectiveAmount", "type": "uint256" }, { "internalType": "uint256", "name": "_protocolFeeWithSlippage", "type": "uint256" }, { "internalType": "uint256", "name": "_effectiveLpFee", "type": "uint256" }, { "internalType": "uint256", "name": "_backstopFee", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_sharesToBurn", "type": "uint256" } ], "name": "quoteWithdraw", "outputs": [ { "internalType": "uint256", "name": "_payoutAmount", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "reserve", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "reserveWithSlippage", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "router", "outputs": [ { "internalType": "contract IRouter", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_durationInBlocks", "type": "uint256" } ], "name": "setInsuranceWithdrawalTimelock", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_maxCoverageRatio", "type": "uint256" } ], "name": "setMaxCoverageRatioForSwapIn", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_maxTokens", "type": "uint256" } ], "name": "setPoolCap", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_lpFee", "type": "uint256" }, { "internalType": "uint256", "name": "_backstopFee", "type": "uint256" }, { "internalType": "uint256", "name": "_protocolFee", "type": "uint256" } ], "name": "setSwapFees", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_sharesToBurn", "type": "uint256" } ], "name": "sharesTargetWorth", "outputs": [ { "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "slippageCurve", "outputs": [ { "internalType": "contract ISlippageCurve", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "swapFees", "outputs": [ { "internalType": "uint256", "name": "_lpFee", "type": "uint256" }, { "internalType": "uint256", "name": "_backstopFee", "type": "uint256" }, { "internalType": "uint256", "name": "_protocolFee", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "name": "swapIntoFromRouter", "outputs": [ { "internalType": "uint256", "name": "_effectiveAmount", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "name": "swapOutFromRouter", "outputs": [ { "internalType": "uint256", "name": "_effectiveAmount", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalLiabilities", "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": "to", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "unpause", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_sharesToBurn", "type": "uint256" }, { "internalType": "uint256", "name": "_minimumAmount", "type": "uint256" } ], "name": "withdraw", "outputs": [ { "internalType": "uint256", "name": "_payoutAmount", "type": "uint256" }, { "internalType": "int256", "name": "_fee", "type": "int256" } ], "stateMutability": "nonpayable", "type": "function" } ]
61014060405260001960055560006009556000600a556000600b556103e8600c5560c8600f553480156200003257600080fd5b50604051620036ae380380620036ae83398101604081905262000055916200040f565b868282818181600390805190602001906200007292919062000283565b5080516200008890600490602084019062000283565b5050506001600160a01b03831660808190526040805163313ce56760e01b8152905163313ce567916004808201926020929091908290030181865afa158015620000d6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000fc9190620004e5565b60ff1660a05250506006805460ff191690555060016007556200011f3362000231565b6001600160a01b0380851660e08190528682166101005284821660c0529087166101205215620002245760e0516001600160a01b031663f887ea406040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200018a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001b0919062000511565b6001600160a01b0316856001600160a01b031614620002245760405162461bcd60e51b815260206004820152602660248201527f636f6e7374727563746f7228293a4241434b53544f505f524f555445525f4d496044820152650a69a82a886960d31b606482015260840160405180910390fd5b505050505050506200056d565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b828054620002919062000531565b90600052602060002090601f016020900481019282620002b5576000855562000300565b82601f10620002d057805160ff191683800117855562000300565b8280016001018555821562000300579182015b8281111562000300578251825591602001919060010190620002e3565b506200030e92915062000312565b5090565b5b808211156200030e576000815560010162000313565b6001600160a01b03811681146200033f57600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200036a57600080fd5b81516001600160401b038082111562000387576200038762000342565b604051601f8301601f19908116603f01168101908282118183101715620003b257620003b262000342565b81604052838152602092508683858801011115620003cf57600080fd5b600091505b83821015620003f35785820183015181830184015290820190620003d4565b83821115620004055760008385830101525b9695505050505050565b600080600080600080600060e0888a0312156200042b57600080fd5b8751620004388162000329565b60208901519097506200044b8162000329565b60408901519096506200045e8162000329565b6060890151909550620004718162000329565b6080890151909450620004848162000329565b60a08901519093506001600160401b0380821115620004a257600080fd5b620004b08b838c0162000358565b935060c08a0151915080821115620004c757600080fd5b50620004d68a828b0162000358565b91505092959891949750929550565b600060208284031215620004f857600080fd5b815160ff811681146200050a57600080fd5b9392505050565b6000602082840312156200052457600080fd5b81516200050a8162000329565b600181811c908216806200054657607f821691505b6020821081036200056757634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05160c05160e051610100516101205161301f6200068f6000396000818161069101528181610817015281816115ad01528181611c250152818161202c015281816120b9015281816121c00152818161237b01526126810152600081816106f201528181610abb0152610bdf0152600081816104700152818161112e01526113560152600081816104970152610e4d0152600081816105c7015281816108850152818161158301528181611c93015281816120020152818161211b01528181612221015281816123e901526126e401526000818161036801528181610b7901528181610c8501528181610df101528181610e2b01528181610f8b015281816111da01528181611dc1015281816124c401526125de015261301f6000f3fe608060405234801561001057600080fd5b50600436106102bb5760003560e01c806395d89b4111610182578063cfcc238d116100e9578063eb43434e116100a2578063ee8f6a0e1161007c578063ee8f6a0e146106c6578063f2fde38b146106d1578063f73579a9146106e4578063f887ea40146106ed57600080fd5b8063eb43434e14610679578063ebe26b9e1461068c578063ec211840146106b357600080fd5b8063cfcc238d14610607578063d835f5351461061a578063db431f061461062d578063dd62ed3e14610640578063e237fb3d14610653578063e45f37bd1461066657600080fd5b8063b954dc571161013b578063b954dc5714610557578063b9ccf21d14610560578063c2cb15de146105b2578063c2d41601146105c5578063cc045745146105eb578063cd3293de146105fe57600080fd5b806395d89b4114610505578063a457c2d71461050d578063a9059cbb14610520578063ace0f0d514610533578063b2f3447a1461053b578063b6b55f251461054457600080fd5b8063441a3e7011610226578063715018a6116101df578063715018a6146104635780637dea18171461046b578063803db96d146104925780638456cb59146104b95780638735c246146104c15780638da5cb5b146104f457600080fd5b8063441a3e70146103ce5780634d8ea83f146103f65780635c6f4279146104095780635c975abb1461041c5780635f79d44f1461042757806370a082311461043a57600080fd5b806323b872dd1161027857806323b872dd1461033e578063313ce5671461035157806338d52e0f1461036657806339509351146103a05780633c945248146103b35780633f4ba83a146103c657600080fd5b80630668d07c146102c057806306fdde03146102d5578063095ea7b3146102f35780630b09d91e146103165780630d3a7fd41461032d57806318160ddd14610336575b600080fd5b6102d36102ce366004612c7b565b610714565b005b6102dd610721565b6040516102ea9190612cc0565b60405180910390f35b610306610301366004612d0a565b6107b3565b60405190151581526020016102ea565b61031f600b5481565b6040519081526020016102ea565b61031f600c5481565b60025461031f565b61030661034c366004612d34565b6107cd565b60125b60405160ff90911681526020016102ea565b7f00000000000000000000000000000000000000000000000000000000000000005b6040516001600160a01b0390911681526020016102ea565b6103066103ae366004612d0a565b6107f1565b61031f6103c1366004612c7b565b610813565b6102d361097e565b6103e16103dc366004612d70565b610990565b604080519283526020830191909152016102ea565b61031f610404366004612c7b565b610aae565b61031f610417366004612d92565b610bab565b60065460ff16610306565b61031f610435366004612c7b565b610bd2565b61031f610448366004612d92565b6001600160a01b031660009081526020819052604090205490565b6102d3610e80565b6103887f000000000000000000000000000000000000000000000000000000000000000081565b6103887f000000000000000000000000000000000000000000000000000000000000000081565b6102d3610e92565b6104d46104cf366004612c7b565b610ea2565b6040805194855260208501939093529183015260608201526080016102ea565b6008546001600160a01b0316610388565b6102dd610ec2565b61030661051b366004612d0a565b610ed1565b61030661052e366004612d0a565b610f4c565b61031f610f5a565b61031f600f5481565b6103e1610552366004612c7b565b611031565b61031f60055481565b6040805160608082018352600e5463ffffffff808216808552640100000000830482166020808701829052600160401b90940490921694860185905285519081529182015292830191909152016102ea565b61031f6105c0366004612db4565b611121565b7f0000000000000000000000000000000000000000000000000000000000000000610354565b61031f6105f9366004612c7b565b611254565b61031f600a5481565b6102d3610615366004612c7b565b611276565b6102d3610628366004612c7b565b6112ec565b61031f61063b366004612c7b565b6112f9565b61031f61064e366004612de0565b61130c565b61031f610661366004612c7b565b611337565b61031f610674366004612d0a565b611349565b6102d3610687366004612e0a565b61163d565b6103887f000000000000000000000000000000000000000000000000000000000000000081565b61031f6106c1366004612c7b565b611746565b600a546009546103e1565b6102d36106df366004612d92565b611751565b61031f60095481565b6103887f000000000000000000000000000000000000000000000000000000000000000081565b61071c6117ca565b600f55565b60606003805461073090612e36565b80601f016020809104026020016040519081016040528092919081815260200182805461075c90612e36565b80156107a95780601f1061077e576101008083540402835291602001916107a9565b820191906000526020600020905b81548152906001019060200180831161078c57829003601f168201915b5050505050905090565b6000336107c1818585611824565b60019150505b92915050565b6000336107db858285611948565b6107e68585856119c2565b506001949350505050565b6000336107c1818585610804838361130c565b61080e9190612e86565b611824565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e67b3643600a5460095485600b546108589190612e86565b6040516001600160e01b031960e086901b16815260048101939093526024830191909152604482015260ff7f0000000000000000000000000000000000000000000000000000000000000000166064820152608401602060405180830381865afa1580156108ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ee9190612e9e565b90506064600954600f546109029190612eb7565b61090c9190612ed6565b81600a5461091a9190612e86565b11156109795760405162461bcd60e51b8152602060048201526024808201527f53776170506f6f6c3a20455843454544535f4d41585f434f5645524147455f526044820152634154494f60e01b60648201526084015b60405180910390fd5b919050565b6109866117ca565b61098e611b66565b565b60008061099b611bb8565b6000806109a786611c11565b9095509092509050848410156109ff5760405162461bcd60e51b815260206004820152601860248201527f77697468647261773a204d494e494d554d5f414d4f554e5400000000000000006044820152606401610970565b8160096000828254610a119190612ef8565b9250508190555081600a6000828254610a2a9190612ef8565b9250508190555083600b6000828254610a439190612ef8565b90915550610a549050338786611d3c565b610a5d81611ded565b604080518881526020810187905291945033917f49995e5dd6158cf69ad3e9777c46755a1a826a446c6416992167462dad033b2a910160405180910390a25050610aa76001600755565b9250929050565b6000336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610b205760405162461bcd60e51b815260206004820152601560248201527429bbb0b82837b7b61d1027a7262cafa927aaaa22a960591b6044820152606401610970565b610b28611e5b565b610b30611bb8565b610b3982610813565b905080600a6000828254610b4d9190612e86565b9250508190555081600b6000828254610b669190612e86565b90915550610ba190506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016333085611ea1565b6109796001600755565b600c546001600160a01b0382166000908152600d602052604081205490916107c791612e86565b6000336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610c445760405162461bcd60e51b815260206004820152601560248201527429bbb0b82837b7b61d1027a7262cafa927aaaa22a960591b6044820152606401610970565b610c4c611e5b565b610c54611bb8565b600080600080610c6386611f0c565b6040516370a0823160e01b8152306004820152949950929750909550935091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610cd4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cf89190612e9e565b610d028587612e86565b1115610d615760405162461bcd60e51b815260206004820152602860248201527f53776170506f6f6c23737761704f757446726f6d526f757465723a204f55545f6044820152674f465f46554e445360c01b6064820152608401610970565b8260096000828254610d739190612e86565b9091555050600a829055610d878486612e86565b600b6000828254610d989190612ef8565b909155505060408051848152602081018390529081018590527f3eb07265dc949e6776beb7b2e85d9e292a8a411eabd500cbe06b6bec16d877219060600160405180910390a18415610e1857610e186001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633876122b5565b8315610e7257610e726001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000167f0000000000000000000000000000000000000000000000000000000000000000866122b5565b505050506109796001600755565b610e886117ca565b61098e60006122e5565b610e9a6117ca565b61098e612337565b600080600080610eb185611f0c565b939992985090965091945092505050565b60606004805461073090612e36565b60003381610edf828661130c565b905083811015610f3f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610970565b6107e68286868403611824565b6000336107c18185856119c2565b6000610f67600954611ded565b610f72600b54611ded565b6040516370a0823160e01b8152306004820152611003907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610fda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ffe9190612e9e565b611ded565b61100e600a54611ded565b6110189190612f0f565b6110229190612f50565b61102c9190612f50565b905090565b60008061103c611e5b565b611044611bb8565b336000908152600d602052604081204390558061106085612374565b600b8054929750929450925086919060009061107d908490612e86565b9250508190555081600a60008282546110969190612e86565b9250508190555081600960008282546110af9190612e86565b909155506110c0905033868661249f565b6110c981611ded565b6110d290612f8f565b604080518681526020810188905291945033917f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f910160405180910390a2505061111c6001600755565b915091565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146111955760405162461bcd60e51b8152602060048201526017602482015276053776170506f6f6c3a204f4e4c595f4241434b53544f5604c1b6044820152606401610970565b61119d611bb8565b60006111a884612606565b809250819350505083600a60008282546111c29190612ef8565b90915550508115611207576112016001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001684846122b5565b600b8190555b604080516001600160a01b0385168152602081018490527f439c15c5ffd384d65af60124e574f5642b7e5d6750b762ddeef70abac573ab27910160405180910390a1506107c76001600755565b600061125f60025490565b60095461126c9084612eb7565b6107c79190612ed6565b61127e6117ca565b600081116112e75760405162461bcd60e51b815260206004820152603060248201527f736574496e737572616e63655769746864726177616c54696d656c6f636b3a2060448201526f24a72b20a624a22fa22aa920aa24a7a760811b6064820152608401610970565b600c55565b6112f46117ca565b600555565b600061130482612374565b509392505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b600061134282612606565b5092915050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146113bd5760405162461bcd60e51b8152602060048201526017602482015276053776170506f6f6c3a204f4e4c595f4241434b53544f5604c1b6044820152606401610970565b6113c5611bb8565b6113cd611e5b565b816113ed846001600160a01b031660009081526020819052604090205490565b101561144a5760405162461bcd60e51b815260206004820152602660248201527f53776170506f6f6c236261636b73746f704275726e3a2042414c414e43455f546044820152654f4f5f4c4f5760d01b6064820152608401610970565b600c546001600160a01b0384166000908152600d60205260409020546114709043612ef8565b10156114be5760405162461bcd60e51b815260206004820152601f60248201527f53776170506f6f6c236261636b73746f704275726e3a2054494d454c4f434b006044820152606401610970565b6114c782611254565b905060095481600a546114da9190612e86565b111561153e5760405162461bcd60e51b815260206004820152602d60248201527f53776170506f6f6c236261636b73746f704275726e28293a494e53554646494360448201526c49454e545f434f56455241474560981b6064820152608401610970565b6115488383612777565b806009600082825461155a9190612ef8565b9091555050600a5460095460405163113fe09360e21b81526004810192909252602482015260ff7f00000000000000000000000000000000000000000000000000000000000000001660448201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906344ff824c90606401602060405180830381865afa1580156115fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116209190612e9e565b9050600b5481101561163257600b8190555b506107c76001600755565b6116456117ca565b620493e0816116548486612e86565b61165e9190612e86565b106116ab5760405162461bcd60e51b815260206004820152601a60248201527f73657453776170466565733a20464545535f544f4f5f484947480000000000006044820152606401610970565b60405180606001604052806116bf856128a9565b63ffffffff1681526020016116d3846128a9565b63ffffffff1681526020016116e7836128a9565b63ffffffff9081169091528151600e8054602085015160409095015192841667ffffffffffffffff199091161764010000000094841694909402939093176bffffffff00000000000000001916600160401b9190921602179055505050565b600061130482611c11565b6117596117ca565b6001600160a01b0381166117be5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610970565b6117c7816122e5565b50565b6008546001600160a01b0316331461098e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610970565b6001600160a01b0383166118865760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610970565b6001600160a01b0382166118e75760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610970565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000611954848461130c565b905060001981146119bc57818110156119af5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610970565b6119bc8484848403611824565b50505050565b6001600160a01b038316611a265760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610970565b6001600160a01b038216611a885760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610970565b6001600160a01b03831660009081526020819052604090205481811015611b005760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610970565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36119bc565b611b6e61290e565b6006805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b600260075403611c0a5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610970565b6002600755565b6000806000611c1f84611254565b925060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166344ff824c85600a54611c609190612ef8565b86600954611c6e9190612ef8565b6040516001600160e01b031960e085901b1681526004810192909252602482015260ff7f0000000000000000000000000000000000000000000000000000000000000000166044820152606401602060405180830381865afa158015611cd8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cfc9190612e9e565b9050600b54811115611d0d5750600b545b80600b54611d1b9190612ef8565b925083831115611d29578392505b611d338385612ef8565b93959294505050565b81611d5c846001600160a01b031660009081526020819052604090205490565b1015611daa5760405162461bcd60e51b815260206004820152601e60248201527f77697468647261773a20494e53554646494349454e545f42414c414e434500006044820152606401610970565b611db48383612777565b611de86001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001684836122b5565b505050565b60006001600160ff1b03821115611e575760405162461bcd60e51b815260206004820152602860248201527f53616665436173743a2076616c756520646f65736e27742066697420696e2061604482015267371034b73a191a9b60c11b6064820152608401610970565b5090565b60065460ff161561098e5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610970565b6040516001600160a01b03808516602483015283166044820152606481018290526119bc9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152612957565b600e5460009081908190819081908190620f424090611f319063ffffffff1689612eb7565b611f3b9190612ed6565b600e54909150620f424090611f5e90640100000000900463ffffffff1689612eb7565b611f689190612ed6565b600e54909250600090620f424090611f8d90600160401b900463ffffffff168a612eb7565b611f979190612ed6565b9050600088611fa68386612e86565b10611fb357600a54611fd7565b888285600a54611fc39190612e86565b611fcd9190612e86565b611fd79190612ef8565b600954600b54604051633cf1eef960e11b8152600481018490526024810192909252604482015260ff7f00000000000000000000000000000000000000000000000000000000000000001660648201529091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906379e3ddf290608401602060405180830381865afa15801561207b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061209f9190612e9e565b9550828611156120ad578295505b60006001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166344ff824c6120e88985612e86565b896009546120f69190612e86565b6040516001600160e01b031960e085901b1681526004810192909252602482015260ff7f0000000000000000000000000000000000000000000000000000000000000000166044820152606401602060405180830381865afa158015612160573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121849190612e9e565b9050600b548111156121955750600b545b80600b546121a39190612ef8565b9850826121b08884612e86565b6121ba9190612ef8565b955060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166344ff824c888a6009546121fc9190612e86565b6040516001600160e01b031960e085901b1681526004810192909252602482015260ff7f0000000000000000000000000000000000000000000000000000000000000000166044820152606401602060405180830381865afa158015612266573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061228a9190612e9e565b90508181116122a25761229d8183612ef8565b6122a5565b60005b9850505050505091939590929450565b6040516001600160a01b038316602482015260448101829052611de890849063a9059cbb60e01b90606401611ed5565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b61233f611e5b565b6006805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611b9b3390565b60008060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166379e3ddf2600a5460095487600b546123bc9190612e86565b6040516001600160e01b031960e086901b16815260048101939093526024830191909152604482015260ff7f0000000000000000000000000000000000000000000000000000000000000000166064820152608401602060405180830381865afa15801561242e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124529190612e9e565b925083831015612460578392505b61246a8484612ef8565b905060006009541161247c5782612496565b60095460025461248c9085612eb7565b6124969190612ed6565b91509193909250565b6005546040516370a0823160e01b815230600482015283919082906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa15801561250b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061252f9190612e9e565b6125399190612e86565b111561257f5760405162461bcd60e51b815260206004820152601560248201527419195c1bdcda5d0e8810d05417d15610d151511151605a1b6044820152606401610970565b600082116125c75760405162461bcd60e51b815260206004820152601560248201527419195c1bdcda5d0e8816915493d7d1115413d4d255605a1b6044820152606401610970565b6125d18483612a2c565b6119bc6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016853086611ea1565b600080826009546126179190612e86565b600a54101561267f5760405162461bcd60e51b815260206004820152602e60248201527f53776170506f6f6c236261636b73746f70447261696e28293a494e535546464960448201526d4349454e545f434f56455241474560901b6064820152608401610970565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166344ff824c84600a546126bc9190612ef8565b6009546040516001600160e01b031960e085901b1681526004810192909252602482015260ff7f0000000000000000000000000000000000000000000000000000000000000000166044820152606401602060405180830381865afa158015612729573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061274d9190612e9e565b9050600b5481101561276e5780600b546127679190612ef8565b9150915091565b60009150915091565b6001600160a01b0382166127d75760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610970565b6001600160a01b0382166000908152602081905260409020548181101561284b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610970565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b600063ffffffff821115611e575760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203360448201526532206269747360d01b6064820152608401610970565b60065460ff1661098e5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610970565b60006129ac826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316612aeb9092919063ffffffff16565b90508051600014806129cd5750808060200190518101906129cd9190612fab565b611de85760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610970565b6001600160a01b038216612a825760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610970565b8060026000828254612a949190612e86565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6060612afa8484600085612b02565b949350505050565b606082471015612b635760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610970565b600080866001600160a01b03168587604051612b7f9190612fcd565b60006040518083038185875af1925050503d8060008114612bbc576040519150601f19603f3d011682016040523d82523d6000602084013e612bc1565b606091505b5091509150612bd287838387612bdd565b979650505050505050565b60608315612c4c578251600003612c45576001600160a01b0385163b612c455760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610970565b5081612afa565b612afa8383815115612c615781518083602001fd5b8060405162461bcd60e51b81526004016109709190612cc0565b600060208284031215612c8d57600080fd5b5035919050565b60005b83811015612caf578181015183820152602001612c97565b838111156119bc5750506000910152565b6020815260008251806020840152612cdf816040850160208701612c94565b601f01601f19169190910160400192915050565b80356001600160a01b038116811461097957600080fd5b60008060408385031215612d1d57600080fd5b612d2683612cf3565b946020939093013593505050565b600080600060608486031215612d4957600080fd5b612d5284612cf3565b9250612d6060208501612cf3565b9150604084013590509250925092565b60008060408385031215612d8357600080fd5b50508035926020909101359150565b600060208284031215612da457600080fd5b612dad82612cf3565b9392505050565b60008060408385031215612dc757600080fd5b82359150612dd760208401612cf3565b90509250929050565b60008060408385031215612df357600080fd5b612dfc83612cf3565b9150612dd760208401612cf3565b600080600060608486031215612e1f57600080fd5b505081359360208301359350604090920135919050565b600181811c90821680612e4a57607f821691505b602082108103612e6a57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115612e9957612e99612e70565b500190565b600060208284031215612eb057600080fd5b5051919050565b6000816000190483118215151615612ed157612ed1612e70565b500290565b600082612ef357634e487b7160e01b600052601260045260246000fd5b500490565b600082821015612f0a57612f0a612e70565b500390565b600080821280156001600160ff1b0384900385131615612f3157612f31612e70565b600160ff1b8390038412811615612f4a57612f4a612e70565b50500190565b60008083128015600160ff1b850184121615612f6e57612f6e612e70565b6001600160ff1b0384018313811615612f8957612f89612e70565b50500390565b6000600160ff1b8201612fa457612fa4612e70565b5060000390565b600060208284031215612fbd57600080fd5b81518015158114612dad57600080fd5b60008251612fdf818460208701612c94565b919091019291505056fea2646970667358221220132f16173ae1194f165a153196f52f8c32e8c8694ae76d3ec30272c1d58ae97864736f6c634300080d0033000000000000000000000000eed8895b11f4ef20f9217a31707414713576c366000000000000000000000000f904cc02107eedae9399874c03955c8a507558ff000000000000000000000000d3ec28ad6d777f5aa92377294b9b6522c71930790000000000000000000000000dbd7ff7199593537ad741cce6c63a9fa18661c50000000000000000000000007b413a024c2c4a2b4f2c249ef11f1c45adebf4a400000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000124e61626c6120574254432053776170204c50000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000066e61574254430000000000000000000000000000000000000000000000000000