[ { "inputs": [ { "internalType": "address", "name": "_asset", "type": "address" }, { "internalType": "address", "name": "_superTokenFactoryAddress", "type": "address" }, { "internalType": "uint256", "name": "_gameDurationDays", "type": "uint256" }, { "internalType": "uint256", "name": "_totalMint", "type": "uint256" }, { "internalType": "uint256", "name": "_minStormPrice", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [ { "internalType": "address", "name": "accountAddress", "type": "address" }, { "internalType": "enum Vault.CourtRole", "name": "courtRole", "type": "uint8" } ], "name": "AlreadyCourtMember", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "badAddress", "type": "address" } ], "name": "BadAddress", "type": "error" }, { "inputs": [ { "internalType": "enum Vault.CourtRole", "name": "courtRole", "type": "uint8" } ], "name": "BadCourtRole", "type": "error" }, { "inputs": [], "name": "GameEnded", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "valueSent", "type": "uint256" } ], "name": "InsufficientFunds", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "oldAddress", "type": "address" }, { "internalType": "address", "name": "newAddress", "type": "address" }, { "internalType": "int96", "name": "flowRate", "type": "int96" } ], "name": "SwitchFlowRateError", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "nextBlockAllowed", "type": "uint256" }, { "internalType": "uint256", "name": "currentBlockNumber", "type": "uint256" } ], "name": "TooFrequentStorms", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "kingFlowrate", "type": "uint256" } ], "name": "TooMuchFlow", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "caller", "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": "user", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferred", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "stormAddress", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "amountSent", "type": "uint256" } ], "name": "StormTheCastle", "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": "amount", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "caller", "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": [], "name": "DOMAIN_SEPARATOR", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "address", "name": "", "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": "contract ERC20", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "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": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "courtRoles", "outputs": [ { "internalType": "enum Vault.CourtRole", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "assets", "type": "uint256" }, { "internalType": "address", "name": "receiver", "type": "address" } ], "name": "deposit", "outputs": [ { "internalType": "uint256", "name": "shares", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "enum Vault.CourtRole", "name": "", "type": "uint8" } ], "name": "flowRates", "outputs": [ { "internalType": "int96", "name": "", "type": "int96" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "initGame", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "king", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "knights", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "lords", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "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": [], "name": "minStormPrice", "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": "assets", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "nonces", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" }, { "internalType": "uint8", "name": "v", "type": "uint8" }, { "internalType": "bytes32", "name": "r", "type": "bytes32" }, { "internalType": "bytes32", "name": "s", "type": "bytes32" } ], "name": "permit", "outputs": [], "stateMutability": "nonpayable", "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": "address", "name": "accountAddress", "type": "address" } ], "name": "readFlowRate", "outputs": [ { "internalType": "int96", "name": "", "type": "int96" } ], "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": "assets", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "stormBlock", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "stormTheCastle", "outputs": [ { "internalType": "enum Vault.CourtRole", "name": "", "type": "uint8" } ], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "storms", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "superToken", "outputs": [ { "internalType": "contract ISuperToken", "name": "", "type": "address" } ], "stateMutability": "view", "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": "uint256", "name": "", "type": "uint256" } ], "name": "townsfolk", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "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": [ { "internalType": "uint256", "name": "assets", "type": "uint256" }, { "internalType": "address", "name": "receiver", "type": "address" }, { "internalType": "address", "name": "owner", "type": "address" } ], "name": "withdraw", "outputs": [ { "internalType": "uint256", "name": "shares", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "stateMutability": "payable", "type": "receive" } ]
6101406040523480156200001257600080fd5b50604051620036173803806200361783398101604081905262000035916200059a565b33856040518060400160405280600a81526020016925b4b733902a37b5b2b760b11b815250604051806040016040528060048152602001634b494e4760e01b8152508181846001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000b8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000de9190620005f2565b6000620000ec8482620006c5565b506001620000fb8382620006c5565b5060ff81166080524660a0526200011162000437565b60c052505050506001600160a01b0391821660e05250600680546001600160a01b03191691831691821790556040516000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506101208190526200017b3083620004d3565b836001600160a01b031663a6d0c5343060e0516001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001cc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001f29190620005f2565b60026040518463ffffffff1660e01b8152600401620002149392919062000791565b6020604051808303816000875af115801562000234573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200025a919062000820565b6001600160a01b03166101005260006200027684601862000856565b6200028390603c62000856565b6200029090603c62000856565b6200029c908462000870565b90506000620002ae82610ce462000540565b905060016001605f1b03811115620002e05760405163bca2368160e01b81526004810182905260240160405180910390fd5b600160005260096020527f92e85d02570a8092d09a6e3a57665bc3815a2699a4074001bf1ccabf660f5a3680546001600160601b0319166001600160601b038316179055620003328261057862000540565b600260005260096020527f6cde3cea4b3a3fb2488b2808bae7556f4a405e50f65e1794383bc026131b13c380546001600160601b0319166001600160601b039290921691909117905562000389826102bc62000540565b600360005260096020527fc575c31fea594a6eb97c8e9d3f9caee4c16218c6ef37e923234c0fe9014a61e780546001600160601b0319166001600160601b0392909216919091179055620003e0826101c262000540565b600460005260096020527f8dc18c4ccfd75f5c815b63770fa542fd953e8fef7e0e44bbdd4913470ce7e9cb80546001600160601b0319166001600160601b0392909216919091179055506200092795505050505050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60006040516200046b919062000893565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b8060026000828254620004e7919062000911565b90915550506001600160a01b0382166000818152600360209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b600061271062000551838562000856565b10156200055d57600080fd5b6127106200056c838562000856565b62000578919062000870565b90505b92915050565b6001600160a01b03811681146200059757600080fd5b50565b600080600080600060a08688031215620005b357600080fd5b8551620005c08162000581565b6020870151909550620005d38162000581565b6040870151606088015160809098015196999198509695945092505050565b6000602082840312156200060557600080fd5b815160ff811681146200061757600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200064957607f821691505b6020821081036200066a57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620006c0576000816000526020600020601f850160051c810160208610156200069b5750805b601f850160051c820191505b81811015620006bc57828155600101620006a7565b5050505b505050565b81516001600160401b03811115620006e157620006e16200061e565b620006f981620006f2845462000634565b8462000670565b602080601f831160018114620007315760008415620007185750858301515b600019600386901b1c1916600185901b178555620006bc565b600085815260208120601f198616915b82811015620007625788860151825594840194600190910190840162000741565b5085821015620007815787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6001600160a01b038416815260ff83166020820152600060038310620007c757634e487b7160e01b600052602160045260246000fd5b82604083015260a06060830152601060a08301526f29bab832b91025b4b733902a37b5b2b760811b60c083015260e06080830152600560e083015264096929c8ef60db1b61010083015261012082019050949350505050565b6000602082840312156200083357600080fd5b8151620006178162000581565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176200057b576200057b62000840565b6000826200088e57634e487b7160e01b600052601260045260246000fd5b500490565b6000808354620008a38162000634565b60018281168015620008be5760018114620008d45762000905565b60ff198416875282151583028701945062000905565b8760005260208060002060005b85811015620008fc5781548a820152908401908201620008e1565b50505082870194505b50929695505050505050565b808201808211156200057b576200057b62000840565b60805160a05160c05160e0516101005161012051612c45620009d2600039600081816103380152610ebe0152600081816103df01528181610ba301528181610c9601528181610e1e0152818161114401528181611f2e0152611f6e01526000818161049d015281816108a401528181610ff9015281816110b7015281816111950152818161137901526114bb01526000610dab01526000610d7b0152600061042b0152612c456000f3fe6080604052600436106102605760003560e01c806371cf1c2a11610144578063bd31c80d116100b6578063d505accf1161007a578063d505accf146107a8578063d905777e146107c8578063dd62ed3e146107fe578063ef8b30f714610836578063f2fde38b14610856578063fbc9d07e1461087657600080fd5b8063bd31c80d14610728578063c63d75b6146104df578063c6e6f59214610748578063cc181ca814610768578063ce96cb771461078857600080fd5b806394bf804d1161010857806394bf804d1461067357806395d89b4114610693578063a9059cbb146106a8578063b3d7f6b9146106c8578063b460af94146106e8578063ba0876521461070857600080fd5b806371cf1c2a146105b957806375d08643146105d95780637ecebe00146106065780638c1379cc146106335780638da5cb5b1461065357600080fd5b8063313ce567116101dd578063402d267d116101a1578063402d267d146104df578063434946f2146105015780634cdad506146105445780635c24f519146105645780636e553f651461056c57806370a082311461058c57600080fd5b8063313ce5671461041957806332eb25641461045f5780633644e5151461047657806338d52e0f1461048b5780633fb9b9c1146104bf57600080fd5b80630de95f06116102245780630de95f061461032657806318160ddd1461035a57806323b872dd1461037057806327679292146103905780632b4116f7146103cd57600080fd5b806301e1d1141461026c57806306fdde031461029457806307a2d13a146102b6578063095ea7b3146102d65780630a28a4771461030657600080fd5b3661026757005b600080fd5b34801561027857600080fd5b5061028161088c565b6040519081526020015b60405180910390f35b3480156102a057600080fd5b506102a961091c565b60405161028b91906125f9565b3480156102c257600080fd5b506102816102d136600461260c565b6109aa565b3480156102e257600080fd5b506102f66102f136600461263d565b6109d7565b604051901515815260200161028b565b34801561031257600080fd5b5061028161032136600461260c565b610a44565b34801561033257600080fd5b506102817f000000000000000000000000000000000000000000000000000000000000000081565b34801561036657600080fd5b5061028160025481565b34801561037c57600080fd5b506102f661038b366004612669565b610a64565b34801561039c57600080fd5b506103c06103ab3660046126aa565b60086020526000908152604090205460ff1681565b60405161028b91906126ff565b3480156103d957600080fd5b506104017f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161028b565b34801561042557600080fd5b5061044d7f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff909116815260200161028b565b34801561046b57600080fd5b50610474610b44565b005b34801561048257600080fd5b50610281610d77565b34801561049757600080fd5b506104017f000000000000000000000000000000000000000000000000000000000000000081565b3480156104cb57600080fd5b506104016104da36600461260c565b610dcd565b3480156104eb57600080fd5b506102816104fa3660046126aa565b5060001990565b34801561050d57600080fd5b5061053161051c36600461270d565b600960205260009081526040902054600b0b81565b604051600b9190910b815260200161028b565b34801561055057600080fd5b5061028161055f36600461260c565b610ded565b6103c0610df8565b34801561057857600080fd5b5061028161058736600461272e565b61105f565b34801561059857600080fd5b506102816105a73660046126aa565b60036020526000908152604090205481565b3480156105c557600080fd5b506105316105d43660046126aa565b611135565b3480156105e557600080fd5b506102816105f43660046126aa565b60076020526000908152604090205481565b34801561061257600080fd5b506102816106213660046126aa565b60056020526000908152604090205481565b34801561063f57600080fd5b5061040161064e36600461260c565b61116b565b34801561065f57600080fd5b50600654610401906001600160a01b031681565b34801561067f57600080fd5b5061028161068e36600461272e565b61117b565b34801561069f57600080fd5b506102a961120a565b3480156106b457600080fd5b506102f66106c336600461263d565b611217565b3480156106d457600080fd5b506102816106e336600461260c565b61127d565b3480156106f457600080fd5b5061028161070336600461275e565b61129c565b34801561071457600080fd5b5061028161072336600461275e565b6113a0565b34801561073457600080fd5b5061040161074336600461260c565b6114e2565b34801561075457600080fd5b5061028161076336600461260c565b6114f2565b34801561077457600080fd5b50600b54610401906001600160a01b031681565b34801561079457600080fd5b506102816107a33660046126aa565b611512565b3480156107b457600080fd5b506104746107c33660046127a0565b611534565b3480156107d457600080fd5b506102816107e33660046126aa565b6001600160a01b031660009081526003602052604090205490565b34801561080a57600080fd5b50610281610819366004612817565b600460209081526000928352604080842090915290825290205481565b34801561084257600080fd5b5061028161085136600461260c565b611778565b34801561086257600080fd5b506104746108713660046126aa565b611783565b34801561088257600080fd5b50610281600a5481565b6040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa1580156108f3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109179190612845565b905090565b600080546109299061285e565b80601f01602080910402602001604051908101604052809291908181526020018280546109559061285e565b80156109a25780601f10610977576101008083540402835291602001916109a2565b820191906000526020600020905b81548152906001019060200180831161098557829003601f168201915b505050505081565b60025460009080156109ce576109c96109c161088c565b849083611818565b6109d0565b825b9392505050565b3360008181526004602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610a329086815260200190565b60405180910390a35060015b92915050565b60025460009080156109ce576109c981610a5c61088c565b859190611836565b6001600160a01b03831660009081526004602090815260408083203384529091528120546000198114610ac057610a9b83826128ae565b6001600160a01b03861660009081526004602090815260408083203384529091529020555b6001600160a01b03851660009081526003602052604081208054859290610ae89084906128ae565b90915550506001600160a01b0380851660008181526003602052604090819020805487019055519091871690600080516020612bf083398151915290610b319087815260200190565b60405180910390a3506001949350505050565b6006546001600160a01b03163314610b925760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b60448201526064015b60405180910390fd5b306001600160a01b031663095ea7b37f0000000000000000000000000000000000000000000000000000000000000000306001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c249190612845565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015610c6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c9391906128c1565b507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166345977d03306001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d259190612845565b6040518263ffffffff1660e01b8152600401610d4391815260200190565b600060405180830381600087803b158015610d5d57600080fd5b505af1158015610d71573d6000803e3d6000fd5b50505050565b60007f00000000000000000000000000000000000000000000000000000000000000004614610da85761091761185c565b507f000000000000000000000000000000000000000000000000000000000000000090565b600c8160028110610ddd57600080fd5b01546001600160a01b0316905081565b6000610a3e826109aa565b600033610e1a57604051637833514560e11b8152336004820152602401610b89565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e9e9190612845565b11610ebc576040516308426a3f60e11b815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000341015610eff576040516365bc667160e11b8152346004820152602401610b89565b336000908152600760205260409020544390610f1d906107086128e3565b10610f615733600090815260076020526040902054610f3e906107086128e3565b60405163aff36d3160e01b81526004810191909152436024820152604401610b89565b3360009081526008602052604081205460ff166004811115610f8557610f856126c7565b14610fb95733600081815260086020526040908190205490516308519f2760e31b8152610b89929160ff16906004016128f6565b600a8054906000610fc983612913565b9091555050336000908152600760205260408120439055610fe86118f6565b9050610ff43382611974565b61102d7f0000000000000000000000000000000000000000000000000000000000000000611028655af3107a4000346128ae565b611b81565b604051349033907f3bbfacd143c5545cbbfbdadef52be5a1b70df84c167a11679d602b619eec65c590600090a3919050565b600061106a83611778565b9050806000036110aa5760405162461bcd60e51b815260206004820152600b60248201526a5a45524f5f53484152455360a81b6044820152606401610b89565b6110df6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016333086611bd7565b6110e98282611c73565b60408051848152602081018390526001600160a01b0384169133917fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d791015b60405180910390a3610a3e565b6000610a3e6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163084611ccd565b600e8160038110610ddd57600080fd5b60006111868361127d565b90506111bd6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016333084611bd7565b6111c78284611c73565b60408051828152602081018590526001600160a01b0384169133917fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d79101611128565b600180546109299061285e565b336000908152600360205260408120805483919083906112389084906128ae565b90915550506001600160a01b03831660008181526003602052604090819020805485019055513390600080516020612bf083398151915290610a329086815260200190565b60025460009080156109ce576109c961129461088c565b849083611836565b60006112a784610a44565b9050336001600160a01b03831614611317576001600160a01b03821660009081526004602090815260408083203384529091529020546000198114611315576112f082826128ae565b6001600160a01b03841660009081526004602090815260408083203384529091529020555b505b6113218282611d65565b60408051858152602081018390526001600160a01b03808516929086169133917ffbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db910160405180910390a46109d06001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168486611dc7565b6000336001600160a01b03831614611410576001600160a01b0382166000908152600460209081526040808320338452909152902054600019811461140e576113e985826128ae565b6001600160a01b03841660009081526004602090815260408083203384529091529020555b505b61141984610ded565b9050806000036114595760405162461bcd60e51b815260206004820152600b60248201526a5a45524f5f41535345545360a81b6044820152606401610b89565b6114638285611d65565b60408051828152602081018690526001600160a01b03808516929086169133917ffbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db910160405180910390a46109d06001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168483611dc7565b60118160048110610ddd57600080fd5b60025460009080156109ce576109c98161150a61088c565b859190611818565b6001600160a01b038116600090815260036020526040812054610a3e906109aa565b428410156115845760405162461bcd60e51b815260206004820152601760248201527f5045524d49545f444541444c494e455f455850495245440000000000000000006044820152606401610b89565b60006001611590610d77565b6001600160a01b038a811660008181526005602090815260409182902080546001810190915582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98184015280840194909452938d166060840152608083018c905260a083019390935260c08083018b90528151808403909101815260e08301909152805192019190912061190160f01b6101008301526101028201929092526101228101919091526101420160408051601f198184030181528282528051602091820120600084529083018083525260ff871690820152606081018590526080810184905260a0016020604051602081039080840390855afa15801561169c573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906116d25750876001600160a01b0316816001600160a01b0316145b61170f5760405162461bcd60e51b815260206004820152600e60248201526d24a72b20a624a22fa9a4a3a722a960911b6044820152606401610b89565b6001600160a01b0390811660009081526004602090815260408083208a8516808552908352928190208990555188815291928a16917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a350505050505050565b6000610a3e826114f2565b6006546001600160a01b031633146117cc5760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b6044820152606401610b89565b600680546001600160a01b0319166001600160a01b03831690811790915560405133907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a350565b600082600019048411830215820261182f57600080fd5b5091020490565b600082600019048411830215820261184d57600080fd5b50910281810615159190040190565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f600060405161188e919061292c565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b60008061190d60016064611908611e48565b611ea0565b905060018110158015611921575060058111155b1561192e57600191505090565b600681101580156119405750600f8111155b1561194d57600291505090565b6010811015801561195f575060248111155b1561196c57600391505090565b600491505090565b6001816004811115611988576119886126c7565b036119ef57600b546119cf906001600160a01b0316836009600060015b60048111156119b6576119b66126c7565b8152602081019190915260400160002054600b0b611f10565b600b80546001600160a01b0319166001600160a01b038416179055611b43565b6002816004811115611a0357611a036126c7565b03611a6f57600c54611a24906001600160a01b0316836009600060026119a5565b600d54600c80546001600160a01b0319166001600160a01b03909216919091178155829060015b0180546001600160a01b0319166001600160a01b0392909216919091179055611b43565b6003816004811115611a8357611a836126c7565b03611adc57600e54611aa4906001600160a01b0316836009600060036119a5565b600f8054600e80546001600160a01b038084166001600160a01b03199283161783556010541692169190911790915582906002611a4b565b601154611af8906001600160a01b0316836009600060046119a5565b60128054601180546001600160a01b03199081166001600160a01b03808516919091179092556013805493821684841617909455601480549382168484161790945590851691161790555b6001600160a01b0382166000908152600860205260409020805482919060ff19166001836004811115611b7857611b786126c7565b02179055505050565b600080600080600085875af1905080611bd25760405162461bcd60e51b815260206004820152601360248201527211551217d514905394d1915497d19052531151606a1b6044820152606401610b89565b505050565b60006040516323b872dd60e01b81526001600160a01b03851660048201526001600160a01b03841660248201528260448201526020600060648360008a5af13d15601f3d1160016000511416171691505080611c6c5760405162461bcd60e51b81526020600482015260146024820152731514905394d1915497d19493d357d1905253115160621b6044820152606401610b89565b5050505050565b8060026000828254611c8591906128e3565b90915550506001600160a01b038216600081815260036020908152604080832080548601905551848152600080516020612bf083398151915291015b60405180910390a35050565b600080611cd985611fdb565b604051631cd43d1160e31b81526001600160a01b03888116600483015287811660248301528681166044830152919350908316915063e6a1e88890606401608060405180830381865afa158015611d34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d5891906129cd565b5090979650505050505050565b6001600160a01b03821660009081526003602052604081208054839290611d8d9084906128ae565b90915550506002805482900390556040518181526000906001600160a01b03841690600080516020612bf083398151915290602001611cc1565b600060405163a9059cbb60e01b81526001600160a01b0384166004820152826024820152602060006044836000895af13d15601f3d1160016000511416171691505080610d715760405162461bcd60e51b815260206004820152600f60248201526e1514905394d1915497d19052531151608a1b6044820152606401610b89565b600032611e566001436128ae565b60405160609290921b6bffffffffffffffffffffffff191660208301524060348201524260548201526074016040516020818303038152906040528051906020012060001c905090565b60008060005b8560ff16811015611f07576040805160208101869052908101829052611ee8906060016040516020818303038152906040528051906020012060001c8661215c565b611ef39060016128e3565b611efd90836128e3565b9150600101611ea6565b50949350505050565b60006001600160a01b03841615611f5a57611f556001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163086612200565b611f5d565b60015b90506000611f956001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168585612227565b9050818015611fa15750805b611c6c5760405163f270ed2b60e01b81526001600160a01b03808716600483015285166024820152600b84900b6044820152606401610b89565b7f65599bf746e17a00ea62e3610586992d88101b78eec3cf380706621fb97ea837547fb969d79d88acd02d04ed7ee7d43b949e7daf093d363abcfbbc43dfdfd1ce969a546001600160a01b03811661212b576001600160a01b0382166120a057826001600160a01b03166320bc44256040518163ffffffff1660e01b8152600401602060405180830381865afa158015612079573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061209d9190612a11565b91505b604051635b69006f60e11b81527fa9214cc96615e0085d3bb077758db69497dc2dce3b2b1e97bc93c3d18d83efd360048201526001600160a01b0383169063b6d200de90602401602060405180830381865afa158015612104573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121289190612a11565b90505b6001600160a01b03821661214157612141612a2e565b6001600160a01b03811661215757612157612a2e565b915091565b60008082116121a55760405162461bcd60e51b8152602060048201526015602482015274155b9a599bdc9b54985b990bdb5a5b8b589bdd5b99605a1b6044820152606401610b89565b6000826121b181612a44565b6121bb9190612a60565b9050835b818110156121ed576040805160208082019390935281518082038401815290820190915280519101206121bf565b6121f78482612a60565b95945050505050565b6040805160008082526020820190925261221f90859085908590612246565b949350505050565b6040805160008082526020820190925261221f90859085908590612372565b6000806000612254876123fe565b91509150816001600160a01b03166339255d5b82836001600160a01b031663b4b333c68b8b8b600067ffffffffffffffff81111561229457612294612a82565b6040519080825280601f01601f1916602001820160405280156122be576020820181803683370190505b506040516024016122d29493929190612a98565b60408051808303601f1901815291815260208201805160e094851b6001600160e01b03909116179052519185901b6001600160e01b031916825261231d939250908990600401612ad6565b6000604051808303816000875af115801561233c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526123649190810190612b0c565b506001979650505050505050565b6000806000612380876123fe565b91509150816001600160a01b03166339255d5b82836001600160a01b03166362fc305e8b8b8b600067ffffffffffffffff8111156123c0576123c0612a82565b6040519080825280601f01601f1916602001820160405280156123ea576020820181803683370190505b506040516024016122d29493929190612bb9565b7f65599bf746e17a00ea62e3610586992d88101b78eec3cf380706621fb97ea837547fb969d79d88acd02d04ed7ee7d43b949e7daf093d363abcfbbc43dfdfd1ce969a546001600160a01b03811661212b576001600160a01b0382166124c357826001600160a01b03166320bc44256040518163ffffffff1660e01b8152600401602060405180830381865afa15801561249c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124c09190612a11565b91505b604051635b69006f60e11b81527fa9214cc96615e0085d3bb077758db69497dc2dce3b2b1e97bc93c3d18d83efd360048201526001600160a01b0383169063b6d200de90602401602060405180830381865afa158015612527573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061254b9190612a11565b9050817f65599bf746e17a00ea62e3610586992d88101b78eec3cf380706621fb97ea83755807fb969d79d88acd02d04ed7ee7d43b949e7daf093d363abcfbbc43dfdfd1ce969a556001600160a01b03821661214157612141612a2e565b60005b838110156125c45781810151838201526020016125ac565b50506000910152565b600081518084526125e58160208601602086016125a9565b601f01601f19169290920160200192915050565b6020815260006109d060208301846125cd565b60006020828403121561261e57600080fd5b5035919050565b6001600160a01b038116811461263a57600080fd5b50565b6000806040838503121561265057600080fd5b823561265b81612625565b946020939093013593505050565b60008060006060848603121561267e57600080fd5b833561268981612625565b9250602084013561269981612625565b929592945050506040919091013590565b6000602082840312156126bc57600080fd5b81356109d081612625565b634e487b7160e01b600052602160045260246000fd5b600581106126fb57634e487b7160e01b600052602160045260246000fd5b9052565b60208101610a3e82846126dd565b60006020828403121561271f57600080fd5b8135600581106109d057600080fd5b6000806040838503121561274157600080fd5b82359150602083013561275381612625565b809150509250929050565b60008060006060848603121561277357600080fd5b83359250602084013561278581612625565b9150604084013561279581612625565b809150509250925092565b600080600080600080600060e0888a0312156127bb57600080fd5b87356127c681612625565b965060208801356127d681612625565b95506040880135945060608801359350608088013560ff811681146127fa57600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561282a57600080fd5b823561283581612625565b9150602083013561275381612625565b60006020828403121561285757600080fd5b5051919050565b600181811c9082168061287257607f821691505b60208210810361289257634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610a3e57610a3e612898565b6000602082840312156128d357600080fd5b815180151581146109d057600080fd5b80820180821115610a3e57610a3e612898565b6001600160a01b0383168152604081016109d060208301846126dd565b60006001820161292557612925612898565b5060010190565b60008083548160018260011c9150600183168061294a57607f831692505b6020808410820361296957634e487b7160e01b86526022600452602486fd5b81801561297d5760018114612992576129bf565b60ff19861689528415158502890196506129bf565b60008a81526020902060005b868110156129b75781548b82015290850190830161299e565b505084890196505b509498975050505050505050565b600080600080608085870312156129e357600080fd5b84519350602085015180600b0b81146129fb57600080fd5b6040860151606090960151949790965092505050565b600060208284031215612a2357600080fd5b81516109d081612625565b634e487b7160e01b600052600160045260246000fd5b6000600160ff1b8201612a5957612a59612898565b5060000390565b600082612a7d57634e487b7160e01b600052601260045260246000fd5b500690565b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038581168252848116602083015283166040820152608060608201819052600090612acc908301846125cd565b9695505050505050565b6001600160a01b0384168152606060208201819052600090612afa908301856125cd565b8281036040840152612acc81856125cd565b600060208284031215612b1e57600080fd5b815167ffffffffffffffff80821115612b3657600080fd5b818401915084601f830112612b4a57600080fd5b815181811115612b5c57612b5c612a82565b604051601f8201601f19908116603f01168101908382118183101715612b8457612b84612a82565b81604052828152876020848701011115612b9d57600080fd5b612bae8360208301602088016125a9565b979650505050505050565b6001600160a01b03858116825284166020820152600b83900b6040820152608060608201819052600090612acc908301846125cd56feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa264697066735822122054a10ea3203bdb7790568fd29a0297479f6c57774fc407f849a09f703c4547a464736f6c634300081700330000000000000000000000004200000000000000000000000000000000000006000000000000000000000000fcf0489488397332579f35b0f711be570da0e8f5000000000000000000000000000000000000000000000000000000000000001e0000000000000000000000000000000000000001431e0fae6d7217caa000000000000000000000000000000000000000000000000000000000038d7ea4c68000