[ { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "uint256", "name": "minAmount", "type": "uint256" } ], "name": "AmountTooSmall", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "allowance", "type": "uint256" }, { "internalType": "uint256", "name": "needed", "type": "uint256" } ], "name": "ERC20InsufficientAllowance", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "uint256", "name": "balance", "type": "uint256" }, { "internalType": "uint256", "name": "needed", "type": "uint256" } ], "name": "ERC20InsufficientBalance", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "approver", "type": "address" } ], "name": "ERC20InvalidApprover", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "receiver", "type": "address" } ], "name": "ERC20InvalidReceiver", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" } ], "name": "ERC20InvalidSender", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" } ], "name": "ERC20InvalidSpender", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "supplied", "type": "uint256" }, { "internalType": "uint256", "name": "accepted", "type": "uint256" } ], "name": "HighSlippage", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "fee", "type": "uint256" } ], "name": "InvalidFee", "type": "error" }, { "inputs": [], "name": "InvalidInitialization", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "skewFraction", "type": "uint256" } ], "name": "MaxSkewReached", "type": "error" }, { "inputs": [], "name": "ModuleKeyEmpty", "type": "error" }, { "inputs": [], "name": "NotInitializing", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "msgSender", "type": "address" } ], "name": "OnlyAuthorizedModule", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "msgSender", "type": "address" } ], "name": "OnlyOwner", "type": "error" }, { "inputs": [], "name": "PriceImpactDuringFullWithdraw", "type": "error" }, { "inputs": [], "name": "PriceImpactDuringWithdraw", "type": "error" }, { "inputs": [ { "internalType": "uint8", "name": "bits", "type": "uint8" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "SafeCastOverflowedUintDowncast", "type": "error" }, { "inputs": [ { "internalType": "string", "name": "variableName", "type": "string" } ], "name": "ZeroAddress", "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": "value", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "depositor", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "depositAmount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "mintedAmount", "type": "uint256" } ], "name": "Deposit", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint64", "name": "version", "type": "uint64" } ], "name": "Initialized", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "Locked", "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": "account", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "Unlocked", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "withdrawer", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "withdrawAmount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "burnedAmount", "type": "uint256" } ], "name": "Withdraw", "type": "event" }, { "inputs": [], "name": "MIN_LIQUIDITY", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "MODULE_KEY", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" } ], "name": "allowance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "approve", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "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": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_account", "type": "address" }, { "internalType": "uint64", "name": "_executableAtTime", "type": "uint64" }, { "components": [ { "internalType": "uint256", "name": "depositAmount", "type": "uint256" }, { "internalType": "uint256", "name": "minAmountOut", "type": "uint256" }, { "internalType": "address", "name": "announcedBy", "type": "address" } ], "internalType": "struct FlatcoinStructs.AnnouncedStableDeposit", "name": "_announcedDeposit", "type": "tuple" } ], "name": "executeDeposit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_account", "type": "address" }, { "internalType": "uint64", "name": "_executableAtTime", "type": "uint64" }, { "components": [ { "internalType": "uint256", "name": "withdrawAmount", "type": "uint256" }, { "internalType": "uint256", "name": "minAmountOut", "type": "uint256" } ], "internalType": "struct FlatcoinStructs.AnnouncedStableWithdraw", "name": "_announcedWithdraw", "type": "tuple" } ], "name": "executeWithdraw", "outputs": [ { "internalType": "uint256", "name": "_amountOut", "type": "uint256" }, { "internalType": "uint256", "name": "_withdrawFee", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_account", "type": "address" } ], "name": "getLockedAmount", "outputs": [ { "internalType": "uint256", "name": "_amountLocked", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "contract IFlatcoinVault", "name": "_vault", "type": "address" }, { "internalType": "uint256", "name": "_stableWithdrawFee", "type": "uint256" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_account", "type": "address" }, { "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "name": "lock", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_stableWithdrawFee", "type": "uint256" } ], "name": "setStableWithdrawFee", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "contract IFlatcoinVault", "name": "_vault", "type": "address" } ], "name": "setVault", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "stableCollateralPerShare", "outputs": [ { "internalType": "uint256", "name": "_collateralPerShare", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint32", "name": "_maxAge", "type": "uint32" }, { "internalType": "bool", "name": "_priceDiffCheck", "type": "bool" } ], "name": "stableCollateralPerShare", "outputs": [ { "internalType": "uint256", "name": "_collateralPerShare", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "stableCollateralTotalAfterSettlement", "outputs": [ { "internalType": "uint256", "name": "_stableCollateralBalance", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint32", "name": "_maxAge", "type": "uint32" }, { "internalType": "bool", "name": "_priceDiffCheck", "type": "bool" } ], "name": "stableCollateralTotalAfterSettlement", "outputs": [ { "internalType": "uint256", "name": "_stableCollateralBalance", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_depositAmount", "type": "uint256" } ], "name": "stableDepositQuote", "outputs": [ { "internalType": "uint256", "name": "_amountOut", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "stableWithdrawFee", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_withdrawAmount", "type": "uint256" } ], "name": "stableWithdrawQuote", "outputs": [ { "internalType": "uint256", "name": "_amountOut", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "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": "value", "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": "value", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_account", "type": "address" }, { "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "name": "unlock", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "vault", "outputs": [ { "internalType": "contract IFlatcoinVault", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" } ]
608060405234801561001057600080fd5b5061001961001e565b6100d0565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161561006e5760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100cd5780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b61228c80620000e06000396000f3fe608060405234801561001057600080fd5b50600436106101b95760003560e01c80636cbf48a6116100f9578063c110587511610097578063cd6dc68711610071578063cd6dc687146103b9578063d24545a7146103cc578063dd62ed3e146103df578063fbfa77cf1461043757600080fd5b8063c11058751461036b578063c149e6ae14610393578063c45383e6146103a657600080fd5b8063929ec537116100d3578063929ec5371461031457806395d89b411461033d578063a9059cbb14610345578063ac75491b1461035857600080fd5b80636cbf48a6146102c357806370a08231146102cb5780637eee288d1461030157600080fd5b8063282d3fdf116101665780633d23b9ca116101405780633d23b9ca1461028c578063543a4fa31461029557806367f77e54146102a85780636817031b146102b057600080fd5b8063282d3fdf14610255578063313ce5671461026a578063367585501461027957600080fd5b80631d109d39116101975780631d109d391461023057806321b77d631461023957806323b872dd1461024257600080fd5b806306fdde03146101be578063095ea7b3146101dc57806318160ddd146101ff575b600080fd5b6101c6610462565b6040516101d39190611bc0565b60405180910390f35b6101ef6101ea366004611c26565b610525565b60405190151581526020016101d3565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace02545b6040519081526020016101d3565b61022260645481565b61022261271081565b6101ef610250366004611c52565b61053f565b610268610263366004611c26565b610563565b005b604051601281526020016101d3565b610222610287366004611c93565b610606565b61022260005481565b6102686102a3366004611c93565b610630565b6102226106f6565b6102686102be366004611cac565b61070c565b610222610810565b6102226102d9366004611cac565b6001600160a01b03166000908152600080516020612237833981519152602052604090205490565b61026861030f366004611c26565b610821565b610222610322366004611cac565b6001600160a01b031660009081526032602052604090205490565b6101c66108bb565b6101ef610353366004611c26565b6108fa565b610222610366366004611cde565b610908565b61037e610379366004611d36565b610985565b604080519283526020830191909152016101d3565b6102686103a1366004611d89565b610cff565b6102226103b4366004611cde565b611015565b6102686103c7366004611c26565b6111c4565b6102226103da366004611c93565b611346565b6102226103ed366004611dce565b6001600160a01b0391821660009081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020908152604080832093909416825291909152205490565b60015461044a906001600160a01b031681565b6040516001600160a01b0390911681526020016101d3565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace038054606091600080516020612237833981519152916104a190611dfc565b80601f01602080910402602001604051908101604052809291908181526020018280546104cd90611dfc565b801561051a5780601f106104ef5761010080835404028352916020019161051a565b820191906000526020600020905b8154815290600101906020018083116104fd57829003601f168201915b505050505091505090565b60003361053381858561139d565b60019150505b92915050565b60003361054d8582856113af565b61055885858561144c565b506001949350505050565b60015460405163399dd46360e01b81523360048201526001600160a01b039091169063399dd46390602401602060405180830381865afa1580156105ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105cf9190611e36565b15156000036105f857604051633b9e98fd60e11b81523360048201526024015b60405180910390fd5b61060282826114ab565b5050565b60006106106106f6565b61061c6012600a611f4d565b6106269084611f5c565b6105399190611f73565b60015460408051638da5cb5b60e01b8152905133926001600160a01b031691638da5cb5b9160048083019260209291908290030181865afa158015610679573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061069d9190611f95565b6001600160a01b0316146106c657604051630543601560e11b81523360048201526024016105ef565b662386f26fc100008111156106f15760405163179c637760e11b8152600481018290526024016105ef565b606455565b600061070763ffffffff6000610908565b905090565b60015460408051638da5cb5b60e01b8152905133926001600160a01b031691638da5cb5b9160048083019260209291908290030181865afa158015610755573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107799190611f95565b6001600160a01b0316146107a257604051630543601560e11b81523360048201526024016105ef565b6001600160a01b0381166107e15760405163eac0d38960e01b81526020600482015260056024820152641d985d5b1d60da1b60448201526064016105ef565b6001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b600061070763ffffffff6000611015565b60015460405163399dd46360e01b81523360048201526001600160a01b039091169063399dd46390602401602060405180830381865afa158015610869573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061088d9190611e36565b15156000036108b157604051633b9e98fd60e11b81523360048201526024016105ef565b61060282826115cc565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace048054606091600080516020612237833981519152916104a190611dfc565b60003361053381858561144c565b6000806109337f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace025490565b905080156109725760006109478585611015565b9050816109566012600a611f4d565b6109609083611f5c565b61096a9190611f73565b92505061097e565b670de0b6b3a764000091505b5092915050565b60015460405163399dd46360e01b815233600482015260009182916001600160a01b039091169063399dd46390602401602060405180830381865afa1580156109d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109f69190611e36565b1515600003610a1a57604051633b9e98fd60e11b81523360048201526024016105ef565b82356000610a27866116cc565b90506000610a36826001610908565b9050610a446012600a611f4d565b610a4e8285611f5c565b610a589190611f73565b9450610a6488846115cc565b610a6e88846116ea565b6001546001600160a01b03166337f3e0d2610a8887611fb2565b6040518263ffffffff1660e01b8152600401610aa691815260200190565b600060405180830381600087803b158015610ac057600080fd5b505af1158015610ad4573d6000803e3d6000fd5b505050506000610ae5836001610908565b90506000610b117f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace025490565b1115610be457610b24620f424083611fce565b811080610b3c5750610b3982620f4240611fe1565b81115b15610b5a57604051634a03284360e01b815260040160405180910390fd5b670de0b6b3a764000086606454610b719190611f5c565b610b7b9190611f73565b600154604051630ce8fe6160e01b815260006004820152602481018390529196506001600160a01b031690630ce8fe619060440160006040518083038186803b158015610bc757600080fd5b505afa158015610bdb573d6000803e3d6000fd5b50505050610ca9565b600154604080516362af250760e11b815290516000926001600160a01b03169163c55e4a0e916004808301926101009291908290030181865afa158015610c2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c539190612056565b60a001516040015190508015610c7f576040516348c9e5b760e11b8152600481018290526024016105ef565b81670de0b6b3a764000014610ca757604051633fda602b60e11b815260040160405180910390fd5b505b604080516001600160a01b038b168152602081018890529081018590527ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b5689060600160405180910390a150505050935093915050565b60015460405163399dd46360e01b81523360048201526001600160a01b039091169063399dd46390602401602060405180830381865afa158015610d47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d6b9190611e36565b1515600003610d8f57604051633b9e98fd60e11b81523360048201526024016105ef565b80356000610d9c846116cc565b90506000610dab826001610908565b610db76012600a611f4d565b610dc19085611f5c565b610dcb9190611f73565b90508360200135811015610dff5760405163437879d160e01b815260048101829052602085013560248201526044016105ef565b610e098682611720565b600154604051631bf9f06960e11b8152600481018590526001600160a01b03909116906337f3e0d290602401600060405180830381600087803b158015610e4f57600080fd5b505af1158015610e63573d6000803e3d6000fd5b50505050612710610e927f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace025490565b1015610ede577f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0254604051625a5b2760e31b8152600481019190915261271060248201526044016105ef565b600154604051630aa10e9f60e41b81526b706f696e74734d6f64756c6560a01b60048201526000916001600160a01b03169063aa10e9f090602401602060405180830381865afa158015610f36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f5a9190611f95565b6040516301a57dfb60e51b81526001600160a01b03898116600483015287356024830152919250908216906334afbf6090604401600060405180830381600087803b158015610fa857600080fd5b505af1158015610fbc573d6000803e3d6000fd5b5050604080516001600160a01b038b168152602081018890529081018590527f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a15925060600190505b60405180910390a150505050505050565b600154604051630aa10e9f60e41b81527f6c657665726167654d6f64756c65000000000000000000000000000000000000600482015260009182916001600160a01b039091169063aa10e9f090602401602060405180830381865afa158015611082573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110a69190611f95565b604051633f93cc9760e21b815263ffffffff8616600482015284151560248201526001600160a01b03919091169063fe4f325c90604401602060405180830381865afa1580156110fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061111e91906120ef565b9050600081600160009054906101000a90046001600160a01b03166001600160a01b03166385820ba36040518163ffffffff1660e01b8152600401602060405180830381865afa158015611176573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061119a91906120ef565b6111a49190612108565b905060008112156111b857600092506111bc565b8092505b505092915050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff1660008115801561120f5750825b905060008267ffffffffffffffff16600114801561122c5750303b155b90508115801561123a575080155b156112585760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561128c57845468ff00000000000000001916680100000000000000001785555b6112a56b737461626c654d6f64756c6560a01b88611756565b6112ed6040518060400160405280600a815260200169466c6174204d6f6e657960b01b815250604051806040016040528060048152602001631553925560e21b8152506117e7565b6112f686610630565b831561133d57845468ff000000000000000019168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602001611004565b50505050505050565b60006113546012600a611f4d565b61135c6106f6565b6113669084611f5c565b6113709190611f73565b9050670de0b6b3a7640000606454826113899190611f5c565b6113939190611f73565b6105399082611fce565b6113aa83838360016117f9565b505050565b6001600160a01b0383811660009081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0160209081526040808320938616835292905220546000198114611446578181101561143757604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064016105ef565b611446848484840360006117f9565b50505050565b6001600160a01b03831661147657604051634b637e8f60e11b8152600060048201526024016105ef565b6001600160a01b0382166114a05760405163ec442f0560e01b8152600060048201526024016105ef565b6113aa8383836118e1565b6001600160a01b038216600090815260008051602061223783398151915260209081526040808320546032909252909120546114e8908390611fe1565b111561155c5760405162461bcd60e51b815260206004820152603760248201527f45524332304c6f636b61626c655570677261646561626c653a206c6f636b656460448201527f20616d6f756e7420657863656564732062616c616e636500000000000000000060648201526084016105ef565b6001600160a01b03821660009081526032602052604081208054839290611584908490611fe1565b90915550506040518181526001600160a01b038316907f9f1ec8c880f76798e7b793325d625e9b60e4082a553c98f42b6cda368dd60008906020015b60405180910390a25050565b6001600160a01b0382166000908152603260205260409020548111156116645760405162461bcd60e51b815260206004820152604160248201527f45524332304c6f636b61626c655570677261646561626c653a2072657175657360448201527f74656420756e6c6f636b2065786365656473206c6f636b65642062616c616e636064820152606560f81b608482015260a4016105ef565b6001600160a01b0382166000908152603260205260408120805483929061168c908490611fce565b90915550506040518181526001600160a01b038316907f0f0bc5b519ddefdd8e5f9e6423433aa2b869738de2ae34d58ebc796fc749fa0d906020016115c0565b60006105396116e567ffffffffffffffff841642611fce565b6119ac565b6001600160a01b03821661171457604051634b637e8f60e11b8152600060048201526024016105ef565b610602826000836118e1565b6001600160a01b03821661174a5760405163ec442f0560e01b8152600060048201526024016105ef565b610602600083836118e1565b816117745760405163673791e360e11b815260040160405180910390fd5b6001600160a01b0381166117b35760405163eac0d38960e01b81526020600482015260056024820152641d985d5b1d60da1b60448201526064016105ef565b6000919091556001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03909216919091179055565b6117ef6119e1565b6106028282611a31565b6000805160206122378339815191526001600160a01b0385166118325760405163e602df0560e01b8152600060048201526024016105ef565b6001600160a01b03841661185c57604051634a1406b160e11b8152600060048201526024016105ef565b6001600160a01b038086166000908152600183016020908152604080832093881683529290522083905581156118da57836001600160a01b0316856001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925856040516118d191815260200190565b60405180910390a35b5050505050565b6001600160a01b038316156119a1576001600160a01b03831660009081526032602090815260408083205460008051602061223783398151915290925290912054829161192d91611fce565b10156119a15760405162461bcd60e51b815260206004820152603760248201527f45524332304c6f636b61626c655570677261646561626c653a20696e7375666660448201527f696369656e7420756e6c6f636b65642062616c616e636500000000000000000060648201526084016105ef565b6113aa838383611a82565b600063ffffffff8211156119dd576040516306dfcc6560e41b815260206004820152602481018390526044016105ef565b5090565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16611a2f57604051631afcd79f60e31b815260040160405180910390fd5b565b611a396119e1565b6000805160206122378339815191527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace03611a738482612176565b50600481016114468382612176565b6000805160206122378339815191526001600160a01b038416611abe5781816002016000828254611ab39190611fe1565b90915550611b309050565b6001600160a01b03841660009081526020829052604090205482811015611b115760405163391434e360e21b81526001600160a01b038616600482015260248101829052604481018490526064016105ef565b6001600160a01b03851660009081526020839052604090209083900390555b6001600160a01b038316611b4e576002810180548390039055611b6d565b6001600160a01b03831660009081526020829052604090208054830190555b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611bb291815260200190565b60405180910390a350505050565b600060208083528351808285015260005b81811015611bed57858101830151858201604001528201611bd1565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114611c2357600080fd5b50565b60008060408385031215611c3957600080fd5b8235611c4481611c0e565b946020939093013593505050565b600080600060608486031215611c6757600080fd5b8335611c7281611c0e565b92506020840135611c8281611c0e565b929592945050506040919091013590565b600060208284031215611ca557600080fd5b5035919050565b600060208284031215611cbe57600080fd5b8135611cc981611c0e565b9392505050565b8015158114611c2357600080fd5b60008060408385031215611cf157600080fd5b823563ffffffff81168114611d0557600080fd5b91506020830135611d1581611cd0565b809150509250929050565b67ffffffffffffffff81168114611c2357600080fd5b60008060008385036080811215611d4c57600080fd5b8435611d5781611c0e565b93506020850135611d6781611d20565b92506040603f1982011215611d7b57600080fd5b506040840190509250925092565b600080600083850360a0811215611d9f57600080fd5b8435611daa81611c0e565b93506020850135611dba81611d20565b92506060603f1982011215611d7b57600080fd5b60008060408385031215611de157600080fd5b8235611dec81611c0e565b91506020830135611d1581611c0e565b600181811c90821680611e1057607f821691505b602082108103611e3057634e487b7160e01b600052602260045260246000fd5b50919050565b600060208284031215611e4857600080fd5b8151611cc981611cd0565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115611ea4578160001904821115611e8a57611e8a611e53565b80851615611e9757918102915b93841c9390800290611e6e565b509250929050565b600082611ebb57506001610539565b81611ec857506000610539565b8160018114611ede5760028114611ee857611f04565b6001915050610539565b60ff841115611ef957611ef9611e53565b50506001821b610539565b5060208310610133831016604e8410600b8410161715611f27575081810a610539565b611f318383611e69565b8060001904821115611f4557611f45611e53565b029392505050565b6000611cc960ff841683611eac565b808202811582820484141761053957610539611e53565b600082611f9057634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215611fa757600080fd5b8151611cc981611c0e565b6000600160ff1b8201611fc757611fc7611e53565b5060000390565b8181038181111561053957610539611e53565b8082018082111561053957610539611e53565b634e487b7160e01b600052604160045260246000fd5b60405160c0810167ffffffffffffffff8111828210171561202d5761202d611ff4565b60405290565b6040516060810167ffffffffffffffff8111828210171561202d5761202d611ff4565b600081830361010081121561206a57600080fd5b61207261200a565b835181526020840151602082015260408401516040820152606084015161209881611d20565b80606083015250608084015160808201526060609f19830112156120bb57600080fd5b6120c3612033565b60a085810151825260c0860151602083015260e090950151604082015293810193909352509092915050565b60006020828403121561210157600080fd5b5051919050565b818103600083128015838313168383128216171561097e5761097e611e53565b601f8211156113aa57600081815260208120601f850160051c8101602086101561214f5750805b601f850160051c820191505b8181101561216e5782815560010161215b565b505050505050565b815167ffffffffffffffff81111561219057612190611ff4565b6121a48161219e8454611dfc565b84612128565b602080601f8311600181146121d957600084156121c15750858301515b600019600386901b1c1916600185901b17855561216e565b600085815260208120601f198616915b82811015612208578886015182559484019460019091019084016121e9565b50858210156122265787850151600019600388901b60f8161c191681555b5050505050600190811b0190555056fe52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00a26469706673582212208ded5b6597f9e839977406e1e3e77516d1b271e60f39e8c0c8cab4999f0f2b0164736f6c63430008140033