@ensuro/core
Version:
Ensuro - Decentralized insurance protocol
737 lines (736 loc) • 47.2 kB
JSON
{
"_format": "hh-sol-artifact-1",
"contractName": "FixedRateVault",
"sourceName": "contracts/mocks/FixedRateVault.sol",
"abi": [
{
"inputs": [
{
"internalType": "string",
"name": "name_",
"type": "string"
},
{
"internalType": "string",
"name": "symbol_",
"type": "string"
},
{
"internalType": "contract IERC20Metadata",
"name": "asset_",
"type": "address"
},
{
"internalType": "uint256",
"name": "interestRate_",
"type": "uint256"
}
],
"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": "sender",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "assets",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "shares",
"type": "uint256"
}
],
"name": "Deposit",
"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": true,
"internalType": "address",
"name": "sender",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "receiver",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "assets",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "shares",
"type": "uint256"
}
],
"name": "Withdraw",
"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": "",
"type": "address"
}
],
"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": "broken",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "shares",
"type": "uint256"
}
],
"name": "convertToAssets",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "assets",
"type": "uint256"
}
],
"name": "convertToShares",
"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": [
{
"internalType": "uint256",
"name": "assets",
"type": "uint256"
},
{
"internalType": "address",
"name": "receiver",
"type": "address"
}
],
"name": "deposit",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "int256",
"name": "assets",
"type": "int256"
}
],
"name": "discreteEarning",
"outputs": [],
"stateMutability": "nonpayable",
"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": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"name": "maxDeposit",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"name": "maxMint",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "owner",
"type": "address"
}
],
"name": "maxRedeem",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "owner",
"type": "address"
}
],
"name": "maxWithdraw",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "shares",
"type": "uint256"
},
{
"internalType": "address",
"name": "receiver",
"type": "address"
}
],
"name": "mint",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "name",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "assets",
"type": "uint256"
}
],
"name": "previewDeposit",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "shares",
"type": "uint256"
}
],
"name": "previewMint",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "shares",
"type": "uint256"
}
],
"name": "previewRedeem",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "assets",
"type": "uint256"
}
],
"name": "previewWithdraw",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "shares",
"type": "uint256"
},
{
"internalType": "address",
"name": "receiver",
"type": "address"
},
{
"internalType": "address",
"name": "owner",
"type": "address"
}
],
"name": "redeem",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bool",
"name": "broken_",
"type": "bool"
}
],
"name": "setBroken",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "symbol",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "totalAssets",
"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": "uint256",
"name": "assets",
"type": "uint256"
},
{
"internalType": "address",
"name": "receiver",
"type": "address"
},
{
"internalType": "address",
"name": "owner",
"type": "address"
}
],
"name": "withdraw",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "nonpayable",
"type": "function"
}
],
"bytecode": "0x60c060405234801561000f575f5ffd5b5060405161219b38038061219b83398101604081905261002e91610220565b818484600361003d838261032f565b50600461004a828261032f565b5050505f5f61005e836100ad60201b60201c565b915091508161006e576012610070565b805b60ff1660a05250506001600160a01b031660805260055550505063ffffffff4216600160e01b026b033b2e3c9fd0803ce800000017600655610416565b60408051600481526024810182526020810180516001600160e01b031663313ce56760e01b17905290515f918291829182916001600160a01b038716916100f3916103e9565b5f60405180830381855afa9150503d805f811461012b576040519150601f19603f3d011682016040523d82523d5f602084013e610130565b606091505b509150915081801561014457506020815110155b15610177575f8180602001905181019061015e91906103ff565b905060ff8111610175576001969095509350505050565b505b505f9485945092505050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f8301126101a6575f5ffd5b81516001600160401b038111156101bf576101bf610183565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101ed576101ed610183565b604052818152838201602001851015610204575f5ffd5b8160208501602083015e5f918101602001919091529392505050565b5f5f5f5f60808587031215610233575f5ffd5b84516001600160401b03811115610248575f5ffd5b61025487828801610197565b602087015190955090506001600160401b03811115610271575f5ffd5b61027d87828801610197565b604087015190945090506001600160a01b038116811461029b575f5ffd5b6060959095015193969295505050565b600181811c908216806102bf57607f821691505b6020821081036102dd57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561032a57805f5260205f20601f840160051c810160208510156103085750805b601f840160051c820191505b81811015610327575f8155600101610314565b50505b505050565b81516001600160401b0381111561034857610348610183565b61035c8161035684546102ab565b846102e3565b6020601f82116001811461038e575f83156103775750848201515b5f19600385901b1c1916600184901b178455610327565b5f84815260208120601f198516915b828110156103bd578785015182556020948501946001909201910161039d565b50848210156103da57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b5f82518060208501845e5f920191825250919050565b5f6020828403121561040f575f5ffd5b5051919050565b60805160a051611d486104535f395f61055501525f818161029001528181610c6501528181610cf80152818161105201526111120152611d485ff3fe608060405234801561000f575f5ffd5b50600436106101d1575f3560e01c806386de9e4f116100fe578063ba0876521161009e578063ce96cb771161006e578063ce96cb77146103ea578063d905777e146103fd578063dd62ed3e14610410578063ef8b30f7146103c4575f5ffd5b8063ba087652146103b1578063c63d75b6146102cd578063c6e6f592146103c4578063c7361ed2146103d7575f5ffd5b8063a457c2d7116100d9578063a457c2d714610365578063a9059cbb14610378578063b3d7f6b91461038b578063b460af941461039e575f5ffd5b806386de9e4f1461032757806394bf804d1461034a57806395d89b411461035d575f5ffd5b8063313ce567116101745780634cdad506116101445780634cdad506146102055780636e553f65146102e157806370a08231146102f45780637fb1ad621461031c575f5ffd5b8063313ce5671461026957806338d52e0f1461028357806339509351146102ba578063402d267d146102cd575f5ffd5b8063095ea7b3116101af578063095ea7b3146102185780630a28a4771461023b57806318160ddd1461024e57806323b872dd14610256575f5ffd5b806301e1d114146101d557806306fdde03146101f057806307a2d13a14610205575b5f5ffd5b6101dd610423565b6040519081526020015b60405180910390f35b6101f8610465565b6040516101e791906118c9565b6101dd6102133660046118fe565b6104f5565b61022b61022636600461192b565b610506565b60405190151581526020016101e7565b6101dd6102493660046118fe565b61051d565b6002546101dd565b61022b610264366004611953565b610529565b61027161054e565b60405160ff90911681526020016101e7565b6040516001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001681526020016101e7565b61022b6102c836600461192b565b610579565b6101dd6102db36600461198d565b505f1990565b6101dd6102ef3660046119a6565b61059a565b6101dd61030236600461198d565b6001600160a01b03165f9081526020819052604090205490565b60075460ff1661022b565b6103486103353660046119dd565b6007805460ff1916911515919091179055565b005b6101dd6103583660046119a6565b6105b3565b6101f86105cc565b61022b61037336600461192b565b6105db565b61022b61038636600461192b565b610660565b6101dd6103993660046118fe565b61066d565b6101dd6103ac3660046119f8565b610679565b6101dd6103bf3660046119f8565b6106f3565b6101dd6103d23660046118fe565b610765565b6103486103e53660046118fe565b610770565b6101dd6103f836600461198d565b6107a8565b6101dd61040b36600461198d565b6107ca565b6101dd61041e366004611a31565b6107e7565b6007545f9060ff16156104515760405162461bcd60e51b815260040161044890611a59565b60405180910390fd5b60055461046090600690610811565b905090565b60606003805461047490611a82565b80601f01602080910402602001604051908101604052809291908181526020018280546104a090611a82565b80156104eb5780601f106104c2576101008083540402835291602001916104eb565b820191905f5260205f20905b8154815290600101906020018083116104ce57829003601f168201915b5050505050905090565b5f610500825f610848565b92915050565b5f33610513818585610880565b5060019392505050565b5f6105008260016109a3565b5f336105368582856109d2565b610541858585610a4a565b60019150505b9392505050565b5f610460817f0000000000000000000000000000000000000000000000000000000000000000611ac8565b5f3361051381858561058b83836107e7565b6105959190611ae1565b610880565b5f5f6105a584610765565b905061054733848684610bec565b5f5f6105be8461066d565b905061054733848387610bec565b60606004805461047490611a82565b5f33816105e882866107e7565b9050838110156106485760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610448565b6106558286868403610880565b506001949350505050565b5f33610513818585610a4a565b5f610500826001610848565b5f610683826107a8565b8411156106d25760405162461bcd60e51b815260206004820152601f60248201527f455243343632363a207769746864726177206d6f7265207468616e206d6178006044820152606401610448565b5f6106dc8561051d565b90506106eb3385858885610c2d565b949350505050565b5f6106fd826107ca565b84111561074c5760405162461bcd60e51b815260206004820152601d60248201527f455243343632363a2072656465656d206d6f7265207468616e206d61780000006044820152606401610448565b5f610756856104f5565b90506106eb3385858489610c2d565b5f610500825f6109a3565b5f81131561078d57600554610789906006908390610d9f565b5050565b61078961079982611af4565b60055460069190610e1c565b50565b6001600160a01b0381165f90815260208190526040812054610500905f610848565b6001600160a01b0381165f90815260208190526040812054610500565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b5f6105476108436108228585610ec8565b855461083d90600160701b90046001600160701b0316610f70565b90610f8a565b610fcc565b5f610547610854610423565b61085f906001611ae1565b61086a5f600a611bf1565b6002546108779190611ae1565b85919085610fef565b6001600160a01b0383166108e25760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610448565b6001600160a01b0382166109435760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610448565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f6105476109b282600a611bf1565b6002546109bf9190611ae1565b6109c7610423565b610877906001611ae1565b5f6109dd84846107e7565b90505f198114610a445781811015610a375760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610448565b610a448484848403610880565b50505050565b6001600160a01b038316610aae5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610448565b6001600160a01b038216610b105760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610448565b6001600160a01b0383165f9081526020819052604090205481811015610b875760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610448565b6001600160a01b038481165f81815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610a44565b60075460ff1615610c0f5760405162461bcd60e51b815260040161044890611a59565b600554610c20906006908490610d9f565b50610a448484848461104d565b60075460ff1615610c505760405162461bcd60e51b815260040161044890611a59565b600554610c61906006908490610e1c565b505f7f00000000000000000000000000000000000000000000000000000000000000006040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa158015610cc8573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cec9190611bff565b905082811015610d8a577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166340c10f1930610d308487611c16565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044015f604051808303815f87803b158015610d73575f5ffd5b505af1158015610d85573d5f5f3e3d5ffd5b505050505b610d9786868686866110df565b505050505050565b5f610daa848361119f565b5f610db5858561123c565b9050610dc081611260565b6001600160601b0316855f01600e8282829054906101000a90046001600160701b0316610ded9190611c29565b92506101000a8154816001600160701b0302191690836001600160701b03160217905550809150509392505050565b5f610e27848361119f565b5f610e32858561123c565b9050610e3d81611260565b6001600160601b0316855f01600e8282829054906101000a90046001600160701b0316610e6a9190611c48565b82546101009290920a6001600160701b038181021990931691831602179091558654600160701b9004165f0390506106eb5784546dffffffffffffffffffffffffffff19166b033b2e3c9fd0803ce800000017855590509392505050565b81545f90429063ffffffff808316600160e01b9092041610610ef657505081546001600160701b0316610500565b83545f90610f1190600160e01b900463ffffffff1683611c67565b63ffffffff169050610f676b033b2e3c9fd0803ce80000006301e1338083610f3888610f70565b610f429190611c83565b610f4c9190611cae565b610f569190611ae1565b86546001600160701b031690610f8a565b95945050505050565b633b9aca008181029081048214610f85575f5ffd5b919050565b5f81156b019d971e4fe8401e740000001983900484111517610faa575f5ffd5b506b033b2e3c9fd0803ce800000091026b019d971e4fe8401e74000000010490565b633b9aca00808204908206631dcd65008110610fe9576001820191505b50919050565b5f5f610ffc8686866112cb565b9050600183600281111561101257611012611ccd565b14801561102e57505f848061102957611029611c9a565b868809115b15610f675761103e600182611ae1565b9695505050505050565b505050565b6110797f00000000000000000000000000000000000000000000000000000000000000008530856113b0565b611083838261141b565b826001600160a01b0316846001600160a01b03167fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d784846040516110d1929190918252602082015260400190565b60405180910390a350505050565b826001600160a01b0316856001600160a01b031614611103576111038386836109d2565b61110d83826114d8565b6111387f00000000000000000000000000000000000000000000000000000000000000008584611608565b826001600160a01b0316846001600160a01b0316866001600160a01b03167ffbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db8585604051611190929190918252602082015260400190565b60405180910390a45050505050565b815463ffffffff428116600160e01b90920416106111bb575050565b8154600160701b90046001600160701b03165f036111f25781546001600160e01b0316600160e01b4263ffffffff16021782555050565b6112046111ff8383610ec8565b611638565b82546001600160701b03919091166dffffffffffffffffffffffffffff60701b90911617600160e01b4263ffffffff16021790915550565b81545f9061054790610843906001600160701b031661125a85610f70565b906116a0565b5f6001600160601b038211156112c75760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203960448201526536206269747360d01b6064820152608401610448565b5090565b5f80805f19858709858702925082811083820303915050805f03611302578382816112f8576112f8611c9a565b0492505050610547565b8084116113495760405162461bcd60e51b81526020600482015260156024820152744d6174683a206d756c446976206f766572666c6f7760581b6044820152606401610448565b5f8486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091025f889003889004909101858311909403939093029303949094049190911702949350505050565b6040516001600160a01b0380851660248301528316604482015260648101829052610a449085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526116dd565b6001600160a01b0382166114715760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610448565b8060025f8282546114829190611ae1565b90915550506001600160a01b0382165f81815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b0382166115385760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610448565b6001600160a01b0382165f90815260208190526040902054818110156115ab5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610448565b6001600160a01b0383165f818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b6040516001600160a01b03831660248201526044810182905261104890849063a9059cbb60e01b906064016113e4565b5f6001600160701b038211156112c75760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e20316044820152663132206269747360c81b6064820152608401610448565b5f81156b033b2e3c9fd0803ce8000000600284041904841117156116c2575f5ffd5b506b033b2e3c9fd0803ce80000009190910260028204010490565b5f611731826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166117b09092919063ffffffff16565b905080515f14806117515750808060200190518101906117519190611ce1565b6110485760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610448565b60606106eb84845f85855f5f866001600160a01b031685876040516117d59190611cfc565b5f6040518083038185875af1925050503d805f811461180f576040519150601f19603f3d011682016040523d82523d5f602084013e611814565b606091505b509150915061182587838387611830565b979650505050505050565b6060831561189e5782515f03611897576001600160a01b0385163b6118975760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610448565b50816106eb565b6106eb83838151156118b35781518083602001fd5b8060405162461bcd60e51b815260040161044891905b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f6020828403121561190e575f5ffd5b5035919050565b80356001600160a01b0381168114610f85575f5ffd5b5f5f6040838503121561193c575f5ffd5b61194583611915565b946020939093013593505050565b5f5f5f60608486031215611965575f5ffd5b61196e84611915565b925061197c60208501611915565b929592945050506040919091013590565b5f6020828403121561199d575f5ffd5b61054782611915565b5f5f604083850312156119b7575f5ffd5b823591506119c760208401611915565b90509250929050565b80151581146107a5575f5ffd5b5f602082840312156119ed575f5ffd5b8135610547816119d0565b5f5f5f60608486031215611a0a575f5ffd5b83359250611a1a60208501611915565b9150611a2860408501611915565b90509250925092565b5f5f60408385031215611a42575f5ffd5b611a4b83611915565b91506119c760208401611915565b6020808252600f908201526e2b30bab63a1034b990313937b5b2b760891b604082015260600190565b600181811c90821680611a9657607f821691505b602082108103610fe957634e487b7160e01b5f52602260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b60ff818116838216019081111561050057610500611ab4565b8082018082111561050057610500611ab4565b5f600160ff1b8201611b0857611b08611ab4565b505f0390565b6001815b6001841115611b4957808504811115611b2d57611b2d611ab4565b6001841615611b3b57908102905b60019390931c928002611b12565b935093915050565b5f82611b5f57506001610500565b81611b6b57505f610500565b8160018114611b815760028114611b8b57611ba7565b6001915050610500565b60ff841115611b9c57611b9c611ab4565b50506001821b610500565b5060208310610133831016604e8410600b8410161715611bca575081810a610500565b611bd65f198484611b0e565b805f1904821115611be957611be9611ab4565b029392505050565b5f61054760ff841683611b51565b5f60208284031215611c0f575f5ffd5b5051919050565b8181038181111561050057610500611ab4565b6001600160701b03818116838216019081111561050057610500611ab4565b6001600160701b03828116828216039081111561050057610500611ab4565b63ffffffff828116828216039081111561050057610500611ab4565b808202811582820484141761050057610500611ab4565b634e487b7160e01b5f52601260045260245ffd5b5f82611cc857634e487b7160e01b5f52601260045260245ffd5b500490565b634e487b7160e01b5f52602160045260245ffd5b5f60208284031215611cf1575f5ffd5b8151610547816119d0565b5f82518060208501845e5f92019182525091905056fea2646970667358221220dd185084742b6844ed5c6413558f38966341027d28833a2a8c7a6cbac1f78bd764736f6c634300081c0033",
"deployedBytecode": "0x608060405234801561000f575f5ffd5b50600436106101d1575f3560e01c806386de9e4f116100fe578063ba0876521161009e578063ce96cb771161006e578063ce96cb77146103ea578063d905777e146103fd578063dd62ed3e14610410578063ef8b30f7146103c4575f5ffd5b8063ba087652146103b1578063c63d75b6146102cd578063c6e6f592146103c4578063c7361ed2146103d7575f5ffd5b8063a457c2d7116100d9578063a457c2d714610365578063a9059cbb14610378578063b3d7f6b91461038b578063b460af941461039e575f5ffd5b806386de9e4f1461032757806394bf804d1461034a57806395d89b411461035d575f5ffd5b8063313ce567116101745780634cdad506116101445780634cdad506146102055780636e553f65146102e157806370a08231146102f45780637fb1ad621461031c575f5ffd5b8063313ce5671461026957806338d52e0f1461028357806339509351146102ba578063402d267d146102cd575f5ffd5b8063095ea7b3116101af578063095ea7b3146102185780630a28a4771461023b57806318160ddd1461024e57806323b872dd14610256575f5ffd5b806301e1d114146101d557806306fdde03146101f057806307a2d13a14610205575b5f5ffd5b6101dd610423565b6040519081526020015b60405180910390f35b6101f8610465565b6040516101e791906118c9565b6101dd6102133660046118fe565b6104f5565b61022b61022636600461192b565b610506565b60405190151581526020016101e7565b6101dd6102493660046118fe565b61051d565b6002546101dd565b61022b610264366004611953565b610529565b61027161054e565b60405160ff90911681526020016101e7565b6040516001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001681526020016101e7565b61022b6102c836600461192b565b610579565b6101dd6102db36600461198d565b505f1990565b6101dd6102ef3660046119a6565b61059a565b6101dd61030236600461198d565b6001600160a01b03165f9081526020819052604090205490565b60075460ff1661022b565b6103486103353660046119dd565b6007805460ff1916911515919091179055565b005b6101dd6103583660046119a6565b6105b3565b6101f86105cc565b61022b61037336600461192b565b6105db565b61022b61038636600461192b565b610660565b6101dd6103993660046118fe565b61066d565b6101dd6103ac3660046119f8565b610679565b6101dd6103bf3660046119f8565b6106f3565b6101dd6103d23660046118fe565b610765565b6103486103e53660046118fe565b610770565b6101dd6103f836600461198d565b6107a8565b6101dd61040b36600461198d565b6107ca565b6101dd61041e366004611a31565b6107e7565b6007545f9060ff16156104515760405162461bcd60e51b815260040161044890611a59565b60405180910390fd5b60055461046090600690610811565b905090565b60606003805461047490611a82565b80601f01602080910402602001604051908101604052809291908181526020018280546104a090611a82565b80156104eb5780601f106104c2576101008083540402835291602001916104eb565b820191905f5260205f20905b8154815290600101906020018083116104ce57829003601f168201915b5050505050905090565b5f610500825f610848565b92915050565b5f33610513818585610880565b5060019392505050565b5f6105008260016109a3565b5f336105368582856109d2565b610541858585610a4a565b60019150505b9392505050565b5f610460817f0000000000000000000000000000000000000000000000000000000000000000611ac8565b5f3361051381858561058b83836107e7565b6105959190611ae1565b610880565b5f5f6105a584610765565b905061054733848684610bec565b5f5f6105be8461066d565b905061054733848387610bec565b60606004805461047490611a82565b5f33816105e882866107e7565b9050838110156106485760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610448565b6106558286868403610880565b506001949350505050565b5f33610513818585610a4a565b5f610500826001610848565b5f610683826107a8565b8411156106d25760405162461bcd60e51b815260206004820152601f60248201527f455243343632363a207769746864726177206d6f7265207468616e206d6178006044820152606401610448565b5f6106dc8561051d565b90506106eb3385858885610c2d565b949350505050565b5f6106fd826107ca565b84111561074c5760405162461bcd60e51b815260206004820152601d60248201527f455243343632363a2072656465656d206d6f7265207468616e206d61780000006044820152606401610448565b5f610756856104f5565b90506106eb3385858489610c2d565b5f610500825f6109a3565b5f81131561078d57600554610789906006908390610d9f565b5050565b61078961079982611af4565b60055460069190610e1c565b50565b6001600160a01b0381165f90815260208190526040812054610500905f610848565b6001600160a01b0381165f90815260208190526040812054610500565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b5f6105476108436108228585610ec8565b855461083d90600160701b90046001600160701b0316610f70565b90610f8a565b610fcc565b5f610547610854610423565b61085f906001611ae1565b61086a5f600a611bf1565b6002546108779190611ae1565b85919085610fef565b6001600160a01b0383166108e25760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610448565b6001600160a01b0382166109435760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610448565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f6105476109b282600a611bf1565b6002546109bf9190611ae1565b6109c7610423565b610877906001611ae1565b5f6109dd84846107e7565b90505f198114610a445781811015610a375760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610448565b610a448484848403610880565b50505050565b6001600160a01b038316610aae5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610448565b6001600160a01b038216610b105760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610448565b6001600160a01b0383165f9081526020819052604090205481811015610b875760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610448565b6001600160a01b038481165f81815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610a44565b60075460ff1615610c0f5760405162461bcd60e51b815260040161044890611a59565b600554610c20906006908490610d9f565b50610a448484848461104d565b60075460ff1615610c505760405162461bcd60e51b815260040161044890611a59565b600554610c61906006908490610e1c565b505f7f00000000000000000000000000000000000000000000000000000000000000006040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa158015610cc8573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cec9190611bff565b905082811015610d8a577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166340c10f1930610d308487611c16565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044015f604051808303815f87803b158015610d73575f5ffd5b505af1158015610d85573d5f5f3e3d5ffd5b505050505b610d9786868686866110df565b505050505050565b5f610daa848361119f565b5f610db5858561123c565b9050610dc081611260565b6001600160601b0316855f01600e8282829054906101000a90046001600160701b0316610ded9190611c29565b92506101000a8154816001600160701b0302191690836001600160701b03160217905550809150509392505050565b5f610e27848361119f565b5f610e32858561123c565b9050610e3d81611260565b6001600160601b0316855f01600e8282829054906101000a90046001600160701b0316610e6a9190611c48565b82546101009290920a6001600160701b038181021990931691831602179091558654600160701b9004165f0390506106eb5784546dffffffffffffffffffffffffffff19166b033b2e3c9fd0803ce800000017855590509392505050565b81545f90429063ffffffff808316600160e01b9092041610610ef657505081546001600160701b0316610500565b83545f90610f1190600160e01b900463ffffffff1683611c67565b63ffffffff169050610f676b033b2e3c9fd0803ce80000006301e1338083610f3888610f70565b610f429190611c83565b610f4c9190611cae565b610f569190611ae1565b86546001600160701b031690610f8a565b95945050505050565b633b9aca008181029081048214610f85575f5ffd5b919050565b5f81156b019d971e4fe8401e740000001983900484111517610faa575f5ffd5b506b033b2e3c9fd0803ce800000091026b019d971e4fe8401e74000000010490565b633b9aca00808204908206631dcd65008110610fe9576001820191505b50919050565b5f5f610ffc8686866112cb565b9050600183600281111561101257611012611ccd565b14801561102e57505f848061102957611029611c9a565b868809115b15610f675761103e600182611ae1565b9695505050505050565b505050565b6110797f00000000000000000000000000000000000000000000000000000000000000008530856113b0565b611083838261141b565b826001600160a01b0316846001600160a01b03167fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d784846040516110d1929190918252602082015260400190565b60405180910390a350505050565b826001600160a01b0316856001600160a01b031614611103576111038386836109d2565b61110d83826114d8565b6111387f00000000000000000000000000000000000000000000000000000000000000008584611608565b826001600160a01b0316846001600160a01b0316866001600160a01b03167ffbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db8585604051611190929190918252602082015260400190565b60405180910390a45050505050565b815463ffffffff428116600160e01b90920416106111bb575050565b8154600160701b90046001600160701b03165f036111f25781546001600160e01b0316600160e01b4263ffffffff16021782555050565b6112046111ff8383610ec8565b611638565b82546001600160701b03919091166dffffffffffffffffffffffffffff60701b90911617600160e01b4263ffffffff16021790915550565b81545f9061054790610843906001600160701b031661125a85610f70565b906116a0565b5f6001600160601b038211156112c75760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203960448201526536206269747360d01b6064820152608401610448565b5090565b5f80805f19858709858702925082811083820303915050805f03611302578382816112f8576112f8611c9a565b0492505050610547565b8084116113495760405162461bcd60e51b81526020600482015260156024820152744d6174683a206d756c446976206f766572666c6f7760581b6044820152606401610448565b5f8486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091025f889003889004909101858311909403939093029303949094049190911702949350505050565b6040516001600160a01b0380851660248301528316604482015260648101829052610a449085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526116dd565b6001600160a01b0382166114715760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610448565b8060025f8282546114829190611ae1565b90915550506001600160a01b0382165f81815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b0382166115385760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610448565b6001600160a01b0382165f90815260208190526040902054818110156115ab5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610448565b6001600160a01b0383165f818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b6040516001600160a01b03831660248201526044810182905261104890849063a9059cbb60e01b906064016113e4565b5f6001600160701b038211156112c75760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e20316044820152663132206269747360c81b6064820152608401610448565b5f81156b033b2e3c9fd0803ce8000000600284041904841117156116c2575f5ffd5b506b033b2e3c9fd0803ce80000009190910260028204010490565b5f611731826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166117b09092919063ffffffff16565b905080515f14806117515750808060200190518101906117519190611ce1565b6110485760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610448565b60606106eb84845f85855f5f866001600160a01b031685876040516117d59190611cfc565b5f6040518083038185875af1925050503d805f811461180f576040519150601f19603f3d011682016040523d82523d5f602084013e611814565b606091505b509150915061182587838387611830565b979650505050505050565b6060831561189e5782515f03611897576001600160a01b0385163b6118975760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610448565b50816106eb565b6106eb83838151156118b35781518083602001fd5b8060405162461bcd60e51b815260040161044891905b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f6020828403121561190e575f5ffd5b5035919050565b80356001600160a01b0381168114610f85575f5ffd5b5f5f6040838503121561193c575f5ffd5b61194583611915565b946020939093013593505050565b5f5f5f60608486031215611965575f5ffd5b61196e84611915565b925061197c60208501611915565b929592945050506040919091013590565b5f6020828403121561199d575f5ffd5b61054782611915565b5f5f604083850312156119b7575f5ffd5b823591506119c760208401611915565b90509250929050565b80151581146107a5575f5ffd5b5f602082840312156119ed575f5ffd5b8135610547816119d0565b5f5f5f60608486031215611a0a575f5ffd5b83359250611a1a60208501611915565b9150611a2860408501611915565b90509250925092565b5f5f60408385031215611a42575f5ffd5b611a4b83611915565b91506119c760208401611915565b6020808252600f908201526e2b30bab63a1034b990313937b5b2b760891b604082015260600190565b600181811c90821680611a9657607f821691505b602082108103610fe957634e487b7160e01b5f52602260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b60ff818116838216019081111561050057610500611ab4565b8082018082111561050057610500611ab4565b5f600160ff1b8201611b0857611b08611ab4565b505f0390565b6001815b6001841115611b4957808504811115611b2d57611b2d611ab4565b6001841615611b3b57908102905b60019390931c928002611b12565b935093915050565b5f82611b5f57506001610500565b81611b6b57505f610500565b8160018114611b815760028114611b8b57611ba7565b6001915050610500565b60ff841115611b9c57611b9c611ab4565b50506001821b610500565b5060208310610133831016604e8410600b8410161715611bca575081810a610500565b611bd65f198484611b0e565b805f1904821115611be957611be9611ab4565b029392505050565b5f61054760ff841683611b51565b5f60208284031215611c0f575f5ffd5b5051919050565b8181038181111561050057610500611ab4565b6001600160701b03818116838216019081111561050057610500611ab4565b6001600160701b03828116828216039081111561050057610500611ab4565b63ffffffff828116828216039081111561050057610500611ab4565b808202811582820484141761050057610500611ab4565b634e487b7160e01b5f52601260045260245ffd5b5f82611cc857634e487b7160e01b5f52601260045260245ffd5b500490565b634e487b7160e01b5f52602160045260245ffd5b5f60208284031215611cf1575f5ffd5b8151610547816119d0565b5f82518060208501845e5f92019182525091905056fea2646970667358221220dd185084742b6844ed5c6413558f38966341027d28833a2a8c7a6cbac1f78bd764736f6c634300081c0033",
"linkReferences": {},
"deployedLinkReferences": {}
}