[ { "inputs": [ { "internalType": "contract IPool", "name": "pool", "type": "address" } ], "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": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "BalanceTransfer", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "target", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "balanceIncrease", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "Burn", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "underlyingAsset", "type": "address" }, { "indexed": true, "internalType": "address", "name": "pool", "type": "address" }, { "indexed": false, "internalType": "address", "name": "treasury", "type": "address" }, { "indexed": false, "internalType": "address", "name": "incentivesController", "type": "address" }, { "indexed": false, "internalType": "uint8", "name": "aTokenDecimals", "type": "uint8" }, { "indexed": false, "internalType": "string", "name": "aTokenName", "type": "string" }, { "indexed": false, "internalType": "string", "name": "aTokenSymbol", "type": "string" }, { "indexed": false, "internalType": "bytes", "name": "params", "type": "bytes" } ], "name": "Initialized", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "caller", "type": "address" }, { "indexed": true, "internalType": "address", "name": "onBehalfOf", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "balanceIncrease", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "Mint", "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" }, { "inputs": [], "name": "ATOKEN_REVISION", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "DOMAIN_SEPARATOR", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "EIP712_REVISION", "outputs": [ { "internalType": "bytes", "name": "", "type": "bytes" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "PERMIT_TYPEHASH", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "POOL", "outputs": [ { "internalType": "contract IPool", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "RESERVE_TREASURY_ADDRESS", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "UNDERLYING_ASSET_ADDRESS", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "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": "amount", "type": "uint256" } ], "name": "approve", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "receiverOfUnderlying", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "burn", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "subtractedValue", "type": "uint256" } ], "name": "decreaseAllowance", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "getIncentivesController", "outputs": [ { "internalType": "contract IAaveIncentivesController", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" } ], "name": "getPreviousIndex", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" } ], "name": "getScaledUserBalanceAndSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" }, { "internalType": "address", "name": "onBehalfOf", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "handleRepayment", "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": "contract IPool", "name": "initializingPool", "type": "address" }, { "internalType": "address", "name": "treasury", "type": "address" }, { "internalType": "address", "name": "underlyingAsset", "type": "address" }, { "internalType": "contract IAaveIncentivesController", "name": "incentivesController", "type": "address" }, { "internalType": "uint8", "name": "aTokenDecimals", "type": "uint8" }, { "internalType": "string", "name": "aTokenName", "type": "string" }, { "internalType": "string", "name": "aTokenSymbol", "type": "string" }, { "internalType": "bytes", "name": "params", "type": "bytes" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "caller", "type": "address" }, { "internalType": "address", "name": "onBehalfOf", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "mint", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "mintToTreasury", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "nonces", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "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": "address", "name": "token", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "rescueTokens", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" } ], "name": "scaledBalanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "scaledTotalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "contract IAaveIncentivesController", "name": "controller", "type": "address" } ], "name": "setIncentivesController", "outputs": [], "stateMutability": "nonpayable", "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": "recipient", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "transferOnLiquidation", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "target", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transferUnderlyingTo", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ]
60e0604052600080553480156200001557600080fd5b50604051620033c7380380620033c7833981016040819052620000389162000169565b806040518060400160405280600b81526020016a105513d2d15397d253541360aa1b8152506040518060400160405280600b81526020016a105513d2d15397d253541360aa1b81525060008383838383838383836001600160a01b0316630542975c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000ca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000f0919062000169565b6001600160a01b031660805260376200010a848262000235565b50603862000119838262000235565b506039805460ff191660ff9290921691909117905550506001600160a01b031660a05250504660c052506200030195505050505050565b6001600160a01b03811681146200016657600080fd5b50565b6000602082840312156200017c57600080fd5b8151620001898162000150565b9392505050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620001bb57607f821691505b602082108103620001dc57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200023057600081815260208120601f850160051c810160208610156200020b5750805b601f850160051c820191505b818110156200022c5782815560010162000217565b5050505b505050565b81516001600160401b0381111562000251576200025162000190565b6200026981620002628454620001a6565b84620001e2565b602080601f831160018114620002a15760008415620002885750858301515b600019600386901b1c1916600185901b1785556200022c565b600085815260208120601f198616915b82811015620002d257888601518255948401946001909101908401620002b1565b5085821015620002f15787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05160c0516130346200039360003960006118f90152600081816103af015281816106b901528181610804015281816109c201528181610b9901528181610c3201528181610cc001528181610d9601528181610dec01528181610eed015281816114130152818161166101528181611e9c0152611fec015260008181610f4d015261149101526130346000f3fe608060405234801561001057600080fd5b50600436106102265760003560e01c8063781603761161012a578063b1bf962d116100bd578063d7020d0a1161008c578063e075398611610071578063e07539861461053e578063e655dbd81461058d578063f866c319146105a057600080fd5b8063d7020d0a146104f2578063dd62ed3e1461050557600080fd5b8063b1bf962d146104b1578063b3f1c93d146104b9578063cea9d26f146104cc578063d505accf146104df57600080fd5b8063a457c2d7116100f9578063a457c2d714610469578063a9059cbb1461047c578063ae1673351461048f578063b16a19de146104a057600080fd5b806378160376146103ff5780637df5bd3b1461043b5780637ecebe001461044e57806395d89b411461046157600080fd5b806330adf81f116101bd5780634efecaa51161018c57806370a082311161017157806370a08231146103975780637535d246146103aa57806375d26413146103e957600080fd5b80634efecaa5146103715780636fd976761461038457600080fd5b806330adf81f1461031a578063313ce567146103415780633644e51514610356578063395093511461035e57600080fd5b806318160ddd116101f957806318160ddd146102d7578063183fb413146102df5780631da24f3e146102f457806323b872dd1461030757600080fd5b806306fdde031461022b578063095ea7b3146102495780630afbcdc91461026c5780630bd7ad3b146102c1575b600080fd5b6102336105b3565b604051610240919061293c565b60405180910390f35b61025c61025736600461297e565b610645565b6040519015158152602001610240565b6102ac61027a3660046129aa565b6001600160a01b03166000908152603460205260409020546036546fffffffffffffffffffffffffffffffff90911691565b60408051928352602083019190915201610240565b6102c9600181565b604051908152602001610240565b6102c961065c565b6102f26102ed366004612a21565b610731565b005b6102c96103023660046129aa565b610a79565b61025c610315366004612b15565b610aa9565b6102c97f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60395460405160ff9091168152602001610240565b6102c9610b1c565b61025c61036c36600461297e565b610b2b565b6102f261037f36600461297e565b610b62565b6102f2610392366004612b15565b610bfb565b6102c96103a53660046129aa565b610c7e565b6103d17f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610240565b60395461010090046001600160a01b03166103d1565b6102336040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b6102f2610449366004612b56565b610d5f565b6102c961045c3660046129aa565b610e21565b610233610e3f565b61025c61047736600461297e565b610e4e565b61025c61048a36600461297e565b610e85565b603c546001600160a01b03166103d1565b603d546001600160a01b03166103d1565b6102c9610ea8565b61025c6104c7366004612b78565b610eb3565b6102f26104da366004612b15565b610f49565b6102f26104ed366004612bbe565b61111e565b6102f2610500366004612b78565b6113dc565b6102c9610513366004612c2c565b6001600160a01b03918216600090815260356020908152604080832093909416825291909152205490565b6102c961054c3660046129aa565b6001600160a01b031660009081526034602052604090205470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1690565b6102f261059b3660046129aa565b61148d565b6102f26105ae366004612b15565b61162a565b6060603780546105c290612c65565b80601f01602080910402602001604051908101604052809291908181526020018280546105ee90612c65565b801561063b5780601f106106105761010080835404028352916020019161063b565b820191906000526020600020905b81548152906001019060200180831161061e57829003601f168201915b5050505050905090565b60006106523384846116b5565b5060015b92915050565b60008061066860365490565b90508060000361067a57600091505090565b603d546040517fd15e00530000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015261072b917f0000000000000000000000000000000000000000000000000000000000000000169063d15e005390602401602060405180830381865afa158015610700573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107249190612cb2565b8290611716565b91505090565b6001805460ff16806107425750303b155b8061074e575060005481115b6107c55760405162461bcd60e51b815260206004820152602e60248201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560448201527f656e20696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b60015460ff1615801561080257600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168117905560008290555b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168d6001600160a01b0316146040518060400160405280600281526020017f38370000000000000000000000000000000000000000000000000000000000008152509061088b5760405162461bcd60e51b81526004016107bc919061293c565b506108cb88888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061176d92505050565b61090a86868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061177992505050565b603980547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660ff8b16179055603c80546001600160a01b03808f167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255603d80548e8416921691909117905560398054918c16610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff9092169190911790556109ba611785565b603b819055507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168b6001600160a01b03167fb19e051f8af41150ccccb3fc2c2d8d15f4a4cf434f32a559ba75fe73d6eea20b8e8d8d8d8d8d8d8d8d604051610a3399989796959493929190612d14565b60405180910390a38015610a6a57600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b50505050505050505050505050565b6001600160a01b0381166000908152603460205260408120546fffffffffffffffffffffffffffffffff16610656565b600080610ab58361184a565b6001600160a01b038616600090815260356020908152604080832033808552925290912054919250610b0691879190610b01906fffffffffffffffffffffffffffffffff861690612db1565b6116b5565b610b118585836118d6565b506001949350505050565b6000610b266118f5565b905090565b3360008181526035602090815260408083206001600160a01b03871684529091528120549091610652918590610b01908690612dc4565b60408051808201909152600281527f32330000000000000000000000000000000000000000000000000000000000006020820152337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031614610bdf5760405162461bcd60e51b81526004016107bc919061293c565b50603d54610bf7906001600160a01b0316838361192d565b5050565b60408051808201909152600281527f32330000000000000000000000000000000000000000000000000000000000006020820152337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031614610c785760405162461bcd60e51b81526004016107bc919061293c565b50505050565b603d546040517fd15e00530000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600091610656917f00000000000000000000000000000000000000000000000000000000000000009091169063d15e005390602401602060405180830381865afa158015610d09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d2d9190612cb2565b6001600160a01b0384166000908152603460205260409020546fffffffffffffffffffffffffffffffff165b90611716565b60408051808201909152600281527f32330000000000000000000000000000000000000000000000000000000000006020820152337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031614610ddc5760405162461bcd60e51b81526004016107bc919061293c565b508115610bf757603c54610e1c907f0000000000000000000000000000000000000000000000000000000000000000906001600160a01b031684846119d9565b505050565b6001600160a01b0381166000908152603a6020526040812054610656565b6060603880546105c290612c65565b3360008181526035602090815260408083206001600160a01b03871684529091528120549091610652918590610b01908690612db1565b600080610e918361184a565b9050610e9e3385836118d6565b5060019392505050565b6000610b2660365490565b60408051808201909152600281527f32330000000000000000000000000000000000000000000000000000000000006020820152600090337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031614610f335760405162461bcd60e51b81526004016107bc919061293c565b50610f40858585856119d9565b95945050505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663707cd7166040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fa9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fcd9190612dd7565b6040517f7be53ca10000000000000000000000000000000000000000000000000000000081523360048201529091506001600160a01b03821690637be53ca190602401602060405180830381865afa15801561102d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110519190612df4565b6040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250906110a55760405162461bcd60e51b81526004016107bc919061293c565b50603d5460408051808201909152600281527f38350000000000000000000000000000000000000000000000000000000000006020820152906001600160a01b038681169116036111095760405162461bcd60e51b81526004016107bc919061293c565b50610c786001600160a01b038516848461192d565b60408051808201909152600281527f373700000000000000000000000000000000000000000000000000000000000060208201526001600160a01b0388166111795760405162461bcd60e51b81526004016107bc919061293c565b50834211156040518060400160405280600281526020017f3738000000000000000000000000000000000000000000000000000000000000815250906111d25760405162461bcd60e51b81526004016107bc919061293c565b506001600160a01b0387166000908152603a6020526040812054906111f5610b1c565b604080517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c960208201526001600160a01b03808d1692820192909252908a1660608201526080810189905260a0810184905260c0810188905260e001604051602081830303815290604052805190602001206040516020016112a99291907f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201206000845290830180835281905260ff8816918301919091526060820186905260808201859052915060019060a0016020604051602081039080840390855afa15801561132f573d6000803e3d6000fd5b505050602060405103516001600160a01b0316896001600160a01b0316146040518060400160405280600281526020017f3739000000000000000000000000000000000000000000000000000000000000815250906113a15760405162461bcd60e51b81526004016107bc919061293c565b506113ad826001612dc4565b6001600160a01b038a166000908152603a60205260409020556113d18989896116b5565b505050505050505050565b60408051808201909152600281527f32330000000000000000000000000000000000000000000000000000000000006020820152337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316146114595760405162461bcd60e51b81526004016107bc919061293c565b5061146684848484611bbf565b6001600160a01b0383163014610c7857603d54610c78906001600160a01b0316848461192d565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663707cd7166040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115119190612dd7565b6040517f7be53ca10000000000000000000000000000000000000000000000000000000081523360048201529091506001600160a01b03821690637be53ca190602401602060405180830381865afa158015611571573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115959190612df4565b6040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250906115e95760405162461bcd60e51b81526004016107bc919061293c565b5050603980546001600160a01b03909216610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055565b60408051808201909152600281527f32330000000000000000000000000000000000000000000000000000000000006020820152337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316146116a75760405162461bcd60e51b81526004016107bc919061293c565b50610e1c8383836000611e5b565b6001600160a01b0383811660008181526035602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600081157ffffffffffffffffffffffffffffffffffffffffffe6268e1b017bfe18bffffff8390048411151761174b57600080fd5b506b033b2e3c9fd0803ce800000091026b019d971e4fe8401e74000000010490565b6037610bf78282612e8b565b6038610bf78282612e8b565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6117b0612096565b8051602091820120604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000090840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b60006fffffffffffffffffffffffffffffffff8211156118d25760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203160448201527f323820626974730000000000000000000000000000000000000000000000000060648201526084016107bc565b5090565b610e1c8383836fffffffffffffffffffffffffffffffff166001611e5b565b60007f000000000000000000000000000000000000000000000000000000000000000046036119255750603b5490565b610b26611785565b6040517fa9059cbb000000000000000000000000000000000000000000000000000000008082526001600160a01b0384166004830152602482018390529060008060448382895af1611983573d6000803e3d6000fd5b5061198d846120a0565b610c785760405162461bcd60e51b815260206004820152601560248201527f475076323a206661696c6564207472616e73666572000000000000000000000060448201526064016107bc565b6000806119e68484612151565b60408051808201909152600281527f3234000000000000000000000000000000000000000000000000000000000000602082015290915081611a3b5760405162461bcd60e51b81526004016107bc919061293c565b506001600160a01b0385166000908152603460205260408120546fffffffffffffffffffffffffffffffff8082169291611a8b918491700100000000000000000000000000000000900416611716565b611a958387611716565b611a9f9190612db1565b9050611aaa8561184a565b6001600160a01b038816600090815260346020526040902080546fffffffffffffffffffffffffffffffff928316700100000000000000000000000000000000029216919091179055611b0587611b008561184a565b612190565b6000611b118288612dc4565b9050876001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611b5991815260200190565b60405180910390a360408051828152602081018490529081018790526001600160a01b03808a1691908b16907f458f5fa412d0f69b08dd84872b0215675cc67bc1d5b6fd93300a1c3878b861969060600160405180910390a35050159695505050505050565b6000611bcb8383612151565b60408051808201909152600281527f3235000000000000000000000000000000000000000000000000000000000000602082015290915081611c205760405162461bcd60e51b81526004016107bc919061293c565b506001600160a01b0385166000908152603460205260408120546fffffffffffffffffffffffffffffffff8082169291611c70918491700100000000000000000000000000000000900416611716565b611c7a8386611716565b611c849190612db1565b9050611c8f8461184a565b6001600160a01b038816600090815260346020526040902080546fffffffffffffffffffffffffffffffff928316700100000000000000000000000000000000029216919091179055611cea87611ce58561184a565b6122e5565b84811115611da2576000611cfe8683612db1565b9050876001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611d4691815260200190565b60405180910390a360408051828152602081018490529081018690526001600160a01b0389169081907f458f5fa412d0f69b08dd84872b0215675cc67bc1d5b6fd93300a1c3878b861969060600160405180910390a350611e52565b6000611dae8287612db1565b905060006001600160a01b0316886001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611df691815260200190565b60405180910390a360408051828152602081018490529081018690526001600160a01b0380891691908a16907f4cf25bc1d991c17529c25213d3cc0cda295eeaad5f13f361969b12ea48015f90906060015b60405180910390a3505b50505050505050565b603d546040517fd15e00530000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201819052916000917f00000000000000000000000000000000000000000000000000000000000000009091169063d15e005390602401602060405180830381865afa158015611ee5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f099190612cb2565b90506000611f4282610d59896001600160a01b03166000908152603460205260409020546fffffffffffffffffffffffffffffffff1690565b90506000611f7b83610d59896001600160a01b03166000908152603460205260409020546fffffffffffffffffffffffffffffffff1690565b9050611f898888888661233c565b8415612049576040517fd5ed39330000000000000000000000000000000000000000000000000000000081526001600160a01b03858116600483015289811660248301528881166044830152606482018890526084820184905260a482018390527f0000000000000000000000000000000000000000000000000000000000000000169063d5ed39339060c401600060405180830381600087803b15801561203057600080fd5b505af1158015612044573d6000803e3d6000fd5b505050505b6001600160a01b038088169089167f4beccb90f994c31aced7a23b5611020728a23d8ec5cddd1a3e9d97b96fda86666120828987612151565b604080519182526020820188905201611e48565b6060610b266105b3565b60006120c5565b62461bcd60e51b600052602060045280602452508060445260646000fd5b3d8015612104576020811461213e576120ff7f475076323a206d616c666f726d6564207472616e7366657220726573756c7400601f6120a7565b61214b565b823b612135576121357f475076323a206e6f74206120636f6e747261637400000000000000000000000060146120a7565b6001915061214b565b3d6000803e600051151591505b50919050565b600081156b033b2e3c9fd0803ce80000006002840419048411171561217557600080fd5b506b033b2e3c9fd0803ce80000009190910260028204010490565b6036546121af6fffffffffffffffffffffffffffffffff831682612dc4565b6036556001600160a01b0383166000908152603460205260409020546fffffffffffffffffffffffffffffffff166121e78382612fa5565b6001600160a01b03858116600090815260346020526040902080547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff939093169290921790915560395461010090041680156122de576040517f31873e2e0000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152602482018590526fffffffffffffffffffffffffffffffff841660448301528216906331873e2e90606401600060405180830381600087803b1580156122ca57600080fd5b505af11580156113d1573d6000803e3d6000fd5b5050505050565b6036546123046fffffffffffffffffffffffffffffffff831682612db1565b6036556001600160a01b0383166000908152603460205260409020546fffffffffffffffffffffffffffffffff166121e78382612fd5565b6001600160a01b0384166000908152603460205260408120546fffffffffffffffffffffffffffffffff808216929161238b918491700100000000000000000000000000000000900416611716565b6123958385611716565b61239f9190612db1565b905060006123d4866001600160a01b03166000908152603460205260409020546fffffffffffffffffffffffffffffffff1690565b6001600160a01b0387166000908152603460205260408120549192509061242290839070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16611716565b61242c8387611716565b6124369190612db1565b90506124418561184a565b6001600160a01b038916600090815260346020526040902080546fffffffffffffffffffffffffffffffff9283167001000000000000000000000000000000000292169190911790556124938561184a565b6001600160a01b038816600090815260346020526040902080546fffffffffffffffffffffffffffffffff9283167001000000000000000000000000000000000292169190911790556124f888886124f36124ee8a8a612151565b61184a565b612688565b821561258d576040518381526001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3604080518481526020810185905280820187905290516001600160a01b038a169133917f458f5fa412d0f69b08dd84872b0215675cc67bc1d5b6fd93300a1c3878b861969181900360600190a35b866001600160a01b0316886001600160a01b0316141580156125af5750600081115b15612643576040518181526001600160a01b038816906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3604080518281526020810183905280820187905290516001600160a01b0389169133917f458f5fa412d0f69b08dd84872b0215675cc67bc1d5b6fd93300a1c3878b861969181900360600190a35b866001600160a01b0316886001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef88604051611e4891815260200190565b6001600160a01b0383166000908152603460205260409020546fffffffffffffffffffffffffffffffff166126bd8282612fd5565b6001600160a01b0385811660009081526034602052604080822080547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff95861617905591861681522054166127248382612fa5565b6001600160a01b03858116600090815260346020526040902080547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff939093169290921790915560395461010090041680156128d0576036546040517f31873e2e0000000000000000000000000000000000000000000000000000000081526001600160a01b038881166004830152602482018390526fffffffffffffffffffffffffffffffff861660448301528316906331873e2e90606401600060405180830381600087803b15801561280a57600080fd5b505af115801561281e573d6000803e3d6000fd5b50505050856001600160a01b0316876001600160a01b031614611e52576040517f31873e2e0000000000000000000000000000000000000000000000000000000081526001600160a01b038781166004830152602482018390526fffffffffffffffffffffffffffffffff851660448301528316906331873e2e90606401600060405180830381600087803b1580156128b657600080fd5b505af11580156128ca573d6000803e3d6000fd5b50505050505b505050505050565b6000815180845260005b818110156128fe576020818501810151868301820152016128e2565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b60208152600061294f60208301846128d8565b9392505050565b6001600160a01b038116811461296b57600080fd5b50565b803561297981612956565b919050565b6000806040838503121561299157600080fd5b823561299c81612956565b946020939093013593505050565b6000602082840312156129bc57600080fd5b813561294f81612956565b803560ff8116811461297957600080fd5b60008083601f8401126129ea57600080fd5b50813567ffffffffffffffff811115612a0257600080fd5b602083019150836020828501011115612a1a57600080fd5b9250929050565b60008060008060008060008060008060006101008c8e031215612a4357600080fd5b612a4c8c61296e565b9a50612a5a60208d0161296e565b9950612a6860408d0161296e565b9850612a7660608d0161296e565b9750612a8460808d016129c7565b965067ffffffffffffffff8060a08e01351115612aa057600080fd5b612ab08e60a08f01358f016129d8565b909750955060c08d0135811015612ac657600080fd5b612ad68e60c08f01358f016129d8565b909550935060e08d0135811015612aec57600080fd5b50612afd8d60e08e01358e016129d8565b81935080925050509295989b509295989b9093969950565b600080600060608486031215612b2a57600080fd5b8335612b3581612956565b92506020840135612b4581612956565b929592945050506040919091013590565b60008060408385031215612b6957600080fd5b50508035926020909101359150565b60008060008060808587031215612b8e57600080fd5b8435612b9981612956565b93506020850135612ba981612956565b93969395505050506040820135916060013590565b600080600080600080600060e0888a031215612bd957600080fd5b8735612be481612956565b96506020880135612bf481612956565b95506040880135945060608801359350612c10608089016129c7565b925060a0880135915060c0880135905092959891949750929550565b60008060408385031215612c3f57600080fd5b8235612c4a81612956565b91506020830135612c5a81612956565b809150509250929050565b600181811c90821680612c7957607f821691505b60208210810361214b577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060208284031215612cc457600080fd5b5051919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60006001600160a01b03808c168352808b1660208401525060ff8916604083015260c06060830152612d4a60c08301888a612ccb565b8281036080840152612d5d818789612ccb565b905082810360a0840152612d72818587612ccb565b9c9b505050505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561065657610656612d82565b8082018082111561065657610656612d82565b600060208284031215612de957600080fd5b815161294f81612956565b600060208284031215612e0657600080fd5b8151801515811461294f57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f821115610e1c57600081815260208120601f850160051c81016020861015612e6c5750805b601f850160051c820191505b818110156128d057828155600101612e78565b815167ffffffffffffffff811115612ea557612ea5612e16565b612eb981612eb38454612c65565b84612e45565b602080601f831160018114612f0c5760008415612ed65750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556128d0565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015612f5957888601518255948401946001909101908401612f3a565b5085821015612f9557878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b6fffffffffffffffffffffffffffffffff818116838216019080821115612fce57612fce612d82565b5092915050565b6fffffffffffffffffffffffffffffffff828116828216039080821115612fce57612fce612d8256fea2646970667358221220a53ea18bea0bca829655d6b4aefb7aa8872c8561e7919b1285032e676627f19864736f6c634300081500330000000000000000000000004ab85bf9ea548410023b25a13031e91b4c4f3b91