97 txs
207 calls
constructor
constructor(address initialOwner_, address hOHM_, address gOHM_, address dai_, address usds_, address daiUsds_, address monoCooler_, address flashloanLender_, address[3] clearinghouses_)
functions
dai
viewfunction dai() view returns (address)
daiUsds
viewfunction daiUsds() view returns (address)
explicitFunctionAccess
viewfunction explicitFunctionAccess(address, bytes4) view returns (bool)
flashloanLender
viewfunction flashloanLender() view returns (address)
getClearinghouses
viewfunction getClearinghouses() view returns (address v1_1, address v1_2, address v1_3)
getCoolerLoansFor
viewfunction getCoolerLoansFor(address account, address cooler_v1_1) view returns (tuple allLoans)
getCoolerV1_1Params
viewfunction getCoolerV1_1Params() view returns (address, address, address)
gOHM
viewfunction gOHM() view returns (address)
hOHM
viewfunction hOHM() view returns (address)
maxLoans
viewfunction maxLoans() view returns (uint256)
monoCooler
viewfunction monoCooler() view returns (address)
owner
viewfunction owner() view returns (address)
previewMigration
viewfunction previewMigration(tuple allLoans) view returns (tuple preview)
usds
viewfunction usds() view returns (address)
acceptOwner
nonpayablefunction acceptOwner()
migrate
nonpayablefunction migrate(tuple allLoans, tuple monoCoolerParams, tuple slippageParams)
onFlashLoan
nonpayablefunction onFlashLoan(address initiator, address, uint256 flashLoanAmount, uint256, bytes params) returns (bytes32)
proposeNewOwner
nonpayablefunction proposeNewOwner(address account)
revokeOwnership
nonpayablefunction revokeOwnership()
setExplicitAccess
nonpayablefunction setExplicitAccess(address allowedCaller, tuple[] access)
setMaxLoans
nonpayablefunction setMaxLoans(uint256 maxLoans_)
events
CoolerLoansMigrated
event CoolerLoansMigrated(address indexed account, uint256 totalDebtRepaid, uint256 totalCollateralWithdrawn, uint256 hohmSharesReceived, uint256 usdsReceived)
ExplicitAccessSet
event ExplicitAccessSet(address indexed account, bytes4 indexed fnSelector, bool indexed value)
MaxLoansSet
event MaxLoansSet(uint256 maxLoans)
NewOwnerAccepted
event NewOwnerAccepted(address indexed oldOwner, address indexed newOwner)
NewOwnerProposed
event NewOwnerProposed(address indexed oldOwner, address indexed oldProposedOwner, address indexed newProposedOwner)
errors
ExpectedNonZero
error ExpectedNonZero()
InvalidAccess
error InvalidAccess()
InvalidAddress
error InvalidAddress(address addr)
InvalidAuth
error InvalidAuth()
InvalidCooler
error InvalidCooler(address cooler)
InvalidLoanId
error InvalidLoanId(address cooler, uint256 loanId)
InvalidOwner
error InvalidOwner()
IsPaused
error IsPaused()
MismatchingCollateral
error MismatchingCollateral()
MismatchingDebt
error MismatchingDebt()
Overflow
error Overflow(uint256 amount)
Slippage
error Slippage(uint256 minAmountExpected, uint256 actualAmount)
UnknownExecuteError
error UnknownExecuteError(bytes returndata)
creation bytecode
0x6101c060405260326003553480156200001757600080fd5b5060405162004a0238038062004a028339810160408190526200003a916200014b565b8862000046816200009c565b506001600160a01b03978816608052958716610120529386166101005291851661014052841660c052831660e052821660a0528051821661016052602081015182166101805260400151166101a0525062000274565b6000546001600160a01b031615620000c757604051633006171960e21b815260040160405180910390fd5b6001600160a01b038116620000f657604051634726455360e11b81526000600482015260240160405180910390fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b80516001600160a01b03811681146200013057600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b6000806000806000806000806000610160808b8d0312156200016c57600080fd5b620001778b62000118565b995060206200018960208d0162000118565b99506200019960408d0162000118565b9850620001a960608d0162000118565b9750620001b960808d0162000118565b9650620001c960a08d0162000118565b9550620001d960c08d0162000118565b9450620001e960e08d0162000118565b93508c61011f8d0112620001fc57600080fd5b604051606081016001600160401b038111828210171562000221576200022162000135565b604052918c0191808e8411156200023757600080fd5b6101008e015b848110156200025f57620002518162000118565b82529083019083016200023d565b50508093505050509295985092959850929598565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516145c962000439600039600081816102dd015281816114380152611fab0152600081816102bc015281816112990152611f6f01526000818161029b01528181610e5c015281816111200152611f3301526000818161023d01528181610768015281816107b1015281816107e60152818161151d01528181611b8f0152612be20152600081816101c50152818161068501528181610edf01528181611356015281816114f50152818161186401528181611c360152611cad01526000818161046c01528181610562015281816108d301528181610cb401528181610f020152818161137e01528181611b250152611b5501526000818161018101528181611618015281816116d401528181612027015281816120e30152818161238f0152818161243401528181612c0501528181612c390152612d4c01526000818161034701528181610585015281816105e501528181610808015261086201526000818161043d0152818161049b015281816108f70152610c850152600081816102640152818161183701528181611c5801528181611ce50152611d8201526145c96000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c8063b1f8100d116100d8578063d9f538731161008c578063e9291ad511610066578063e9291ad514610438578063ebbc49651461045f578063f4b9fa751461046757600080fd5b8063d9f538731461039c578063da401739146103f1578063daeccc79146103fa57600080fd5b8063b8faa7f6116100bd578063b8faa7f614610342578063bfccf0ec14610369578063c94501dc1461037c57600080fd5b8063b1f8100d14610327578063b7e61b481461033a57600080fd5b80633069a86a1161012f5780636a320257116101145780636a3202571461025f5780638da5cb5b1461028657806390adf0601461029957600080fd5b80633069a86a146102255780634cf282fb1461023857600080fd5b806323e30c8b1161016057806323e30c8b146101e7578063251c48ae146102085780632b9689581461021d57600080fd5b80630621ef271461017c5780630cd30585146101c0575b600080fd5b6101a37f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b6101a37f000000000000000000000000000000000000000000000000000000000000000081565b6101fa6101f53660046135ce565b61048e565b6040519081526020016101b7565b61021b610216366004613678565b61094e565b005b61021b6109ed565b61021b610233366004613691565b610b0d565b6101a37f000000000000000000000000000000000000000000000000000000000000000081565b6101a37f000000000000000000000000000000000000000000000000000000000000000081565b6000546101a3906001600160a01b031681565b7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000005b604080516001600160a01b03948516815292841660208401529216918101919091526060016101b7565b61021b61033536600461373d565b610d2d565b6102fd610e55565b6101a37f000000000000000000000000000000000000000000000000000000000000000081565b61021b61037736600461375a565b610f27565b61038f61038a3660046137e2565b611105565b6040516101b791906138fa565b6103af6103aa366004613bec565b61175f565b6040516101b79190600060a082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015292915050565b6101fa60035481565b610428610408366004613c51565b600160209081526000928352604080842090915290825290205460ff1681565b60405190151581526020016101b7565b6101a37f000000000000000000000000000000000000000000000000000000000000000081565b61021b61191f565b6101a37f000000000000000000000000000000000000000000000000000000000000000081565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146104f2576040517fc0185c6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0387163014610534576040517fc0185c6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061054283850185613cc1565b60408101519091501561064a5760408101516105aa906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016907f0000000000000000000000000000000000000000000000000000000000000000906119d3565b60408181015190517ff2c07aae00000000000000000000000000000000000000000000000000000000815230600482015260248101919091527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063f2c07aae90604401600060405180830381600087803b15801561063157600080fd5b505af1158015610645573d6000803e3d6000fd5b505050505b60008061066d836060015184600001518560000151606001518660200151611b18565b606085015191935091506106ad906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016903085611bd5565b6000806106c76106bd8486613dfa565b8660600151611c26565b606087015191935091506001600160a01b03167fd8c77019fc4e51083b4a4f7b510fd9e01f7cd1681dc11a80d1a2ca377725c7568b6107068688613dfa565b60408051928352602083019190915281018590526060810184905260800160405180910390a260006107378b611dc1565b61074083611dc1565b61074a9190613e0d565b9050600081131561079457606086015161078f906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169083611e24565b6107d9565b6107d9866060015130836107a790613e34565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016929190611bd5565b61082d6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000167f00000000000000000000000000000000000000000000000000000000000000008d6119d3565b6040517f68f30150000000000000000000000000000000000000000000000000000000008152306004820152602481018c90527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906368f3015090604401600060405180830381600087803b1580156108ae57600080fd5b505af11580156108c2573d6000803e3d6000fd5b5061091c9250506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690507f00000000000000000000000000000000000000000000000000000000000000008d6119d3565b507f439148f0bbc682ca079e46d6e2c2f0c1e3b820f1a291b069d8882abf8cf18dd99c9b505050505050505050505050565b61097c336000357fffffffff0000000000000000000000000000000000000000000000000000000016611e72565b6109b2576040517fc0185c6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60038190556040518181527f35e57f7f3ac0c8331fe08d776d87f47a381b3fea46dd681a1dd0eee38f053a6c9060200160405180910390a150565b610a1b336000357fffffffff0000000000000000000000000000000000000000000000000000000016611e72565b610a51576040517fc0185c6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546001600160a01b031661dead14610aab576002546040517f8e4c8aa60000000000000000000000000000000000000000000000000000000081526001600160a01b0390911660048201526024015b60405180910390fd5b600080546040516001600160a01b03909116907f5cd6b24c0149d980c82592262b3a81294b39f8f6e3c004126aaf0828c787d554908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b6000610b193385611edd565b90506000610b268261175f565b9050600081604001518260200151610b3e9190613dfa565b905080600003610b7a576040517f54db0c8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b8582858361216d565b610b956080870160608801613e7a565b15610ba457610ba48533612286565b6000604051806080016040528085815260200187806101000190610bc89190613e97565b808060200260200160405190810160405280939291908181526020016000905b82821015610c1457610c0560408302860136819003810190613f06565b81526020019060010190610be8565b5050505050815260200184604001518152602001336001600160a01b0316815250604051602001610c459190613f72565b60408051601f19818403018152908290527f5cffe9de00000000000000000000000000000000000000000000000000000000825291506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635cffe9de90610ce09030907f00000000000000000000000000000000000000000000000000000000000000009087908790600401614025565b6020604051808303816000875af1158015610cff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d23919061406c565b5050505050505050565b610d5b336000357fffffffff0000000000000000000000000000000000000000000000000000000016611e72565b610d91576040517fc0185c6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038116610ddc576040517f8e4c8aa60000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401610aa2565b600254600080546040516001600160a01b03808616948116939216917f64420d4a41c6ed4de2bccbf33192eea18e576c5b23c79c3a722d4e9534c2e8d891a4600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60008060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610eb8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610edc9190614089565b937f000000000000000000000000000000000000000000000000000000000000000093507f000000000000000000000000000000000000000000000000000000000000000092509050565b610f55336000357fffffffff0000000000000000000000000000000000000000000000000000000016611e72565b610f8b576040517fc0185c6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038316610fd6576040517f8e4c8aa60000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401610aa2565b604080518082019091526000808252602082015260005b828110156110fe57838382818110611007576110076140a6565b90506040020180360381019061101d91906140d5565b91508160200151151582600001517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916866001600160a01b03167ff5736e75de2c751f775d4c5ed517289f77074f8c337f451ba4c0c3ed1dd7f9ad60405160405180910390a46020828101516001600160a01b03871660009081526001808452604080832087517fffffffff0000000000000000000000000000000000000000000000000000000016845290945292902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001691151591909117905501610fed565b5050505050565b61110d61350c565b60006001600160a01b03831615611297577f000000000000000000000000000000000000000000000000000000000000000090506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611181573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111a59190614089565b6040517fd42efd830000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301529192509082169063d42efd8390602401602060405180830381865afa158015611208573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061122c919061406c565b61126d576040517ff4ae19870000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401610aa2565b6040518060400160405280856001600160a01b0316815260200161129186856124a5565b90528352505b7f000000000000000000000000000000000000000000000000000000000000000090506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061131e9190614089565b6040517fa023bd6e0000000000000000000000000000000000000000000000000000000081526001600160a01b0387811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f00000000000000000000000000000000000000000000000000000000000000008116604483015291925060009183169063a023bd6e90606401602060405180830381865afa1580156113d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113f79190614089565b90506001600160a01b03811615611434576040518060400160405280826001600160a01b0316815260200161142c83866124a5565b905260208501525b50507f000000000000000000000000000000000000000000000000000000000000000090506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611499573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114bd9190614089565b6040517fa023bd6e0000000000000000000000000000000000000000000000000000000081526001600160a01b0387811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f00000000000000000000000000000000000000000000000000000000000000008116604483015291925060009183169063a023bd6e90606401602060405180830381865afa158015611572573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115969190614089565b90506001600160a01b038116156115d3576040518060400160405280826001600160a01b031681526020016115cb83866124a5565b905260408501525b505060408051808201918290527f030c3c58000000000000000000000000000000000000000000000000000000009091526001600160a01b03858116604483015281907f00000000000000000000000000000000000000000000000000000000000000001663030c3c5860648301602060405180830381865afa15801561165e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611682919061411f565b6fffffffffffffffffffffffffffffffff1681526040517f5472214b0000000000000000000000000000000000000000000000000000000081526001600160a01b0387811660048301526020909201917f00000000000000000000000000000000000000000000000000000000000000001690635472214b90602401602060405180830381865afa15801561171b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061173f919061411f565b6fffffffffffffffffffffffffffffffff16905260608301525092915050565b6117916040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b8151602001516117a39082600161279b565b6117b782602001516020015182600161279b565b6117cb82604001516020015182600061279b565b606082015151815182906117e0908390613dfa565b9052506060820151602001516040820180516117fd908390613dfa565b90525080516040517f907ad64a00000000000000000000000000000000000000000000000000000000815260009182916001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163907ad64a916118a0917f0000000000000000000000000000000000000000000000000000000000000000916004016001600160a01b03929092168252602082015260400190565b600060405180830381865afa1580156118bd573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526118e591908101906141bb565b92505091508183606001818152505080600081518110611907576119076140a6565b60200260200101518360800181815250505050919050565b6002546001600160a01b03163314611963576040517fc0185c6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805460405133926001600160a01b03909216917f5cd6b24c0149d980c82592262b3a81294b39f8f6e3c004126aaf0828c787d55491a3600080547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163317909155600280549091169055565b6040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b0383811660248301526000919085169063dd62ed3e90604401602060405180830381865afa158015611a3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a609190614228565b9050611b12847f095ea7b30000000000000000000000000000000000000000000000000000000085611a928686613dfa565b6040516001600160a01b03909216602483015260448201526064015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612851565b50505050565b600080611b4985600001517f0000000000000000000000000000000000000000000000000000000000000000612953565b9150611b7985602001517f0000000000000000000000000000000000000000000000000000000000000000612953565b611b839083613dfa565b9150611bb385604001517f0000000000000000000000000000000000000000000000000000000000000000612953565b611bbd9083613dfa565b9150611bca868585612bb2565b905094509492505050565b6040516001600160a01b0380851660248301528316604482015260648101829052611b129085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611aae565b600080611c7d6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000167f0000000000000000000000000000000000000000000000000000000000000000866119d3565b6040517f2fa7f9240000000000000000000000000000000000000000000000000000000081526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018690523060448301526060917f000000000000000000000000000000000000000000000000000000000000000090911690632fa7f924906064016000604051808303816000875af1158015611d30573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611d5891908101906141bb565b80519295509250829160009150611d7157611d716140a6565b60200260200101519150611db984847f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611e249092919063ffffffff16565b509250929050565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821115611e20576040517fe0fb6a7c00000000000000000000000000000000000000000000000000000000815260048101839052602401610aa2565b5090565b6040516001600160a01b038316602482015260448101829052611e6d9084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401611aae565b505050565b600080546001600160a01b0384811691161480611ed457506001600160a01b03831660009081526001602090815260408083207fffffffff000000000000000000000000000000000000000000000000000000008616845290915290205460ff165b90505b92915050565b611ee561350c565b600354600003611f21576040517f1309a56300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611f5783611f2f8480614241565b83517f0000000000000000000000000000000000000000000000000000000000000000612e44565b611f9383611f686020850185614241565b83602001517f0000000000000000000000000000000000000000000000000000000000000000612e44565b611fcf83611fa46040850185614241565b83604001517f0000000000000000000000000000000000000000000000000000000000000000612e44565b611fdf6080830160608401613e7a565b15611ed75760408051808201918290527f030c3c58000000000000000000000000000000000000000000000000000000009091526001600160a01b03848116604483015281907f00000000000000000000000000000000000000000000000000000000000000001663030c3c5860648301602060405180830381865afa15801561206d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612091919061411f565b6fffffffffffffffffffffffffffffffff1681526040517f5472214b0000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301526020909201917f00000000000000000000000000000000000000000000000000000000000000001690635472214b90602401602060405180830381865afa15801561212a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061214e919061411f565b6fffffffffffffffffffffffffffffffff169052606082015292915050565b6060830151823511156121bc5760608301516040517f2746152a000000000000000000000000000000000000000000000000000000008152833560048201526024810191909152604401610aa2565b80836080015111156122275760008184608001516121da919061427f565b90508260200135811015611b12576040517f2746152a0000000000000000000000000000000000000000000000000000000081526020840135600482015260248101829052604401610aa2565b6000836080015182612239919061427f565b90508260400135811115611b1257604080517f2746152a00000000000000000000000000000000000000000000000000000000815290840135600482015260248101829052604401610aa2565b816000612296602083018361373d565b6001600160a01b0316036122a957505050565b6001600160a01b0382166122c0602083018361373d565b6001600160a01b031614612300576040517f49e27cff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b30612311604083016020840161373d565b6001600160a01b031614612351576040517f60907fd100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fa35ac7530000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b0383811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063a35ac75390604401602060405180830381865afa1580156123d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123fa919061406c565b1561240457505050565b6040517fe54c0d960000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063e54c0d969061246e90849060a0880190600401614292565b600060405180830381600087803b15801561248857600080fd5b505af115801561249c573d6000803e3d6000fd5b50505050505050565b60035460609060008167ffffffffffffffff8111156124c6576124c661390d565b60405190808252806020026020018201604052801561251b57816020015b61250860405180606001604052806000815260200160008152602001600081525090565b8152602001906001900390816124e45790505b5090506000805b838110156126d5576040517f504006ca000000000000000000000000000000000000000000000000000000008152600481018290526001600160a01b0388169063504006ca906024016101a060405180830381865afa9250505080156125a5575060408051601f3d908101601f191682019092526125a2918101906143c0565b60015b612632576125b161444e565b634e487b7103612628576125c361446a565b906125ce5750612628565b806032036125dc57506126d5565b60408051602081018390520160408051601f19818403018152908290527fb48da25d000000000000000000000000000000000000000000000000000000008252610aa29160040161448a565b3d6000803e3d6000fd5b866001600160a01b03168160a001516001600160a01b031614158061265957506020810151155b806126675750806080015142115b1561267257506126cd565b604051806060016040528083815260200182606001518152602001826040015183602001516126a19190613dfa565b905284846126ae8161449d565b9550815181106126c0576126c06140a6565b6020026020010181905250505b600101612522565b508067ffffffffffffffff8111156126ef576126ef61390d565b60405190808252806020026020018201604052801561274457816020015b61273160405180606001604052806000815260200160008152602001600081525090565b81526020019060019003908161270d5790505b50935060005b8181101561279157828181518110612764576127646140a6565b602002602001015185828151811061277e5761277e6140a6565b602090810291909101015260010161274a565b5050505092915050565b60005b8351811015611b125781156127e4578381815181106127bf576127bf6140a6565b602002602001015160400151836020018181516127dc9190613dfa565b905250612817565b8381815181106127f6576127f66140a6565b602002602001015160400151836040018181516128139190613dfa565b9052505b838181518110612829576128296140a6565b602002602001015160200151836000018181516128469190613dfa565b90525060010161279e565b60006128a6826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166132c89092919063ffffffff16565b90508051600014806128c75750808060200190518101906128c7919061406c565b611e6d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610aa2565b81516000906001600160a01b03811615806129715750602084015151155b15612980576000915050611ed7565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0382811660048301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602483015284169063095ea7b3906044016020604051808303816000875af1158015612a07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a2b919061406c565b50612a5060405180606001604052806000815260200160008152602001600081525090565b60005b856020015151811015612b1c5785602001518181518110612a7657612a766140a6565b60200260200101519150826001600160a01b0316638a700b53836000015184604001516040518363ffffffff1660e01b8152600401612abf929190918252602082015260400190565b6020604051808303816000875af1158015612ade573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b029190614228565b506020820151612b129085613dfa565b9350600101612a53565b506040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0383811660048301526000602483015285169063095ea7b3906044016020604051808303816000875af1158015612b85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ba9919061406c565b50505092915050565b81516000908103612bc557506000612e3d565b602083015115612d4a576020830151612c2a906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016907f0000000000000000000000000000000000000000000000000000000000000000906119d3565b60208301516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166325e6b5e8612c67836132df565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526fffffffffffffffffffffffffffffffff90911660048201526001600160a01b03881660248201526044016020604051808303816000875af1158015612cdd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d01919061411f565b6fffffffffffffffffffffffffffffffff1614612d4a576040517f896842c700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632cf05b40612d8685600001516132df565b8630866040518563ffffffff1660e01b8152600401612da894939291906144d5565b6020604051808303816000875af1158015612dc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612deb919061411f565b6fffffffffffffffffffffffffffffffff16836000015114612e39576040517febe7bc6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5081515b9392505050565b6000612e53602085018561373d565b90506001600160a01b038116612e695750611b12565b6000826001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ea9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ecd9190614089565b6040517fd42efd830000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529192509082169063d42efd8390602401602060405180830381865afa158015612f30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f54919061406c565b612f95576040517ff4ae19870000000000000000000000000000000000000000000000000000000081526001600160a01b0383166004820152602401610aa2565b856001600160a01b0316826001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612fdd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130019190614089565b6001600160a01b031614613041576040517f49e27cff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806130516020880188614519565b6001600160a01b0386168852915081905067ffffffffffffffff81111561307a5761307a61390d565b6040519080825280602002602001820160405280156130cf57816020015b6130bc60405180606001604052806000815260200160008152602001600081525090565b8152602001906001900390816130985790505b50602087015260005b818110156132bd576130ed6020890189614519565b828181106130fd576130fd6140a6565b905060200201359250846001600160a01b031663504006ca846040518263ffffffff1660e01b815260040161313491815260200190565b6101a060405180830381865afa92505050801561316e575060408051601f3d908101601f1916820190925261316b918101906143c0565b60015b6131e35761317a61444e565b634e487b71036126285761318c61446a565b906131975750612628565b806032036125dc576040517f3d22b13c0000000000000000000000000000000000000000000000000000000081526001600160a01b038716600482015260248101859052604401610aa2565b866001600160a01b03168160a001516001600160a01b031614158061320a57506020810151155b806132185750806080015142115b15613261576040517f3d22b13c0000000000000000000000000000000000000000000000000000000081526001600160a01b038716600482015260248101859052604401610aa2565b604051806060016040528085815260200182606001518152602001826040015183602001516132909190613dfa565b815250886020015183815181106132a9576132a96140a6565b6020026020010181905250506001016130d8565b505050505050505050565b60606132d7848460008561332e565b949350505050565b60006fffffffffffffffffffffffffffffffff821115611e20576040517fe0fb6a7c00000000000000000000000000000000000000000000000000000000815260048101839052602401610aa2565b6060824710156133c0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610aa2565b600080866001600160a01b031685876040516133dc9190614581565b60006040518083038185875af1925050503d8060008114613419576040519150601f19603f3d011682016040523d82523d6000602084013e61341e565b606091505b509150915061342f8783838761343a565b979650505050505050565b606083156134c35782516000036134bc576001600160a01b0385163b6134bc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610aa2565b50816132d7565b6132d783838151156134d85781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa2919061448a565b6040805160c08101909152600060808201908152606060a083015281908152602001613554604051806040016040528060006001600160a01b03168152602001606081525090565b815260200161357f604051806040016040528060006001600160a01b03168152602001606081525090565b81526020016135a1604051806040016040528060008152602001600081525090565b905290565b6001600160a01b03811681146135bb57600080fd5b50565b80356135c9816135a6565b919050565b60008060008060008060a087890312156135e757600080fd5b86356135f2816135a6565b95506020870135613602816135a6565b94506040870135935060608701359250608087013567ffffffffffffffff8082111561362d57600080fd5b818901915089601f83011261364157600080fd5b81358181111561365057600080fd5b8a602082850101111561366257600080fd5b6020830194508093505050509295509295509295565b60006020828403121561368a57600080fd5b5035919050565b600080600083850360a08112156136a757600080fd5b843567ffffffffffffffff808211156136bf57600080fd5b90860190608082890312156136d357600080fd5b909450602086013590808211156136e957600080fd5b50850161012081880312156136fd57600080fd5b925060607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08201121561372f57600080fd5b506040840190509250925092565b60006020828403121561374f57600080fd5b8135612e3d816135a6565b60008060006040848603121561376f57600080fd5b833561377a816135a6565b9250602084013567ffffffffffffffff8082111561379757600080fd5b818601915086601f8301126137ab57600080fd5b8135818111156137ba57600080fd5b8760208260061b85010111156137cf57600080fd5b6020830194508093505050509250925092565b600080604083850312156137f557600080fd5b8235613800816135a6565b91506020830135613810816135a6565b809150509250929050565b600060408084016001600160a01b03845116855260208085015160408288015282815180855260609450606089019150838301925060005b81811015613880578351805184528581015186850152870151878401529284019291850191600101613853565b509098975050505050505050565b6000815160a084526138a360a085018261381b565b9050602083015184820360208601526138bc828261381b565b915050604083015184820360408601526138d6828261381b565b91505060608301518051606086015260208101516080860152508091505092915050565b602081526000611ed4602083018461388e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff8111828210171561395f5761395f61390d565b60405290565b6040516060810167ffffffffffffffff8111828210171561395f5761395f61390d565b6040516080810167ffffffffffffffff8111828210171561395f5761395f61390d565b604051610100810167ffffffffffffffff8111828210171561395f5761395f61390d565b604051601f8201601f1916810167ffffffffffffffff811182821017156139f8576139f861390d565b604052919050565b600067ffffffffffffffff821115613a1a57613a1a61390d565b5060051b60200190565b60006040808385031215613a3757600080fd5b613a3f61393c565b91508235613a4c816135a6565b825260208381013567ffffffffffffffff811115613a6957600080fd5b8401601f81018613613a7a57600080fd5b8035613a8d613a8882613a00565b6139cf565b81815260609182028301840191848201919089841115613aac57600080fd5b938501935b83851015613af45780858b031215613ac95760008081fd5b613ad1613965565b853581528686013587820152878601358882015283529384019391850191613ab1565b50808588015250505050505092915050565b600081830360a0811215613b1957600080fd5b613b21613988565b9150823567ffffffffffffffff80821115613b3b57600080fd5b613b4786838701613a24565b84526020850135915080821115613b5d57600080fd5b613b6986838701613a24565b60208501526040850135915080821115613b8257600080fd5b50613b8f85828601613a24565b60408401525060407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa082011215613bc557600080fd5b50613bce61393c565b60608301358152608083013560208201528060608301525092915050565b600060208284031215613bfe57600080fd5b813567ffffffffffffffff811115613c1557600080fd5b6132d784828501613b06565b80357fffffffff00000000000000000000000000000000000000000000000000000000811681146135c957600080fd5b60008060408385031215613c6457600080fd5b8235613c6f816135a6565b9150613c7d60208401613c21565b90509250929050565b600060408284031215613c9857600080fd5b613ca061393c565b90508135613cad816135a6565b808252506020820135602082015292915050565b60006020808385031215613cd457600080fd5b823567ffffffffffffffff80821115613cec57600080fd5b9084019060808287031215613d0057600080fd5b613d08613988565b823582811115613d1757600080fd5b613d2388828601613b06565b8252508383013582811115613d3757600080fd5b83019150601f82018713613d4a57600080fd5b8135613d58613a8882613a00565b81815260069190911b83018501908581019089831115613d7757600080fd5b938601935b82851015613da057613d8e8a86613c86565b82528682019150604085019450613d7c565b83870152505060408381013590820152613dbc606084016135be565b60608201529695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b80820180821115611ed757611ed7613dcb565b8181036000831280158383131683831282161715613e2d57613e2d613dcb565b5092915050565b60007f80000000000000000000000000000000000000000000000000000000000000008203613e6557613e65613dcb565b5060000390565b80151581146135bb57600080fd5b600060208284031215613e8c57600080fd5b8135612e3d81613e6c565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112613ecc57600080fd5b83018035915067ffffffffffffffff821115613ee757600080fd5b6020019150600681901b3603821315613eff57600080fd5b9250929050565b600060408284031215613f1857600080fd5b611ed48383613c86565b60008151808452602080850194506020840160005b83811015613f6757815180516001600160a01b031688528301518388015260409096019590820190600101613f37565b509495945050505050565b602081526000825160806020840152613f8e60a084018261388e565b90506020840151601f19848303016040850152613fab8282613f22565b915050604084015160608401526001600160a01b0360608501511660808401528091505092915050565b60005b83811015613ff0578181015183820152602001613fd8565b50506000910152565b60008151808452614011816020860160208601613fd5565b601f01601f19169290920160200192915050565b60006001600160a01b038087168352808616602084015250836040830152608060608301526140576080830184613ff9565b9695505050505050565b80516135c981613e6c565b60006020828403121561407e57600080fd5b8151612e3d81613e6c565b60006020828403121561409b57600080fd5b8151612e3d816135a6565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000604082840312156140e757600080fd5b6140ef61393c565b6140f883613c21565b8152602083013561410881613e6c565b60208201529392505050565b80516135c9816135a6565b60006020828403121561413157600080fd5b81516fffffffffffffffffffffffffffffffff81168114612e3d57600080fd5b600082601f83011261416257600080fd5b81516020614172613a8883613a00565b8083825260208201915060208460051b87010193508684111561419457600080fd5b602086015b848110156141b05780518352918301918301614199565b509695505050505050565b6000806000606084860312156141d057600080fd5b83519250602084015167ffffffffffffffff808211156141ef57600080fd5b6141fb87838801614151565b9350604086015191508082111561421157600080fd5b5061421e86828701614151565b9150509250925092565b60006020828403121561423a57600080fd5b5051919050565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc183360301811261427557600080fd5b9190910192915050565b81810381811115611ed757611ed7613dcb565b610100810183356142a2816135a6565b6001600160a01b0390811683526020850135906142be826135a6565b16602083015260408401356bffffffffffffffffffffffff81168082146142e457600080fd5b80604085015250506060840135606083015260808401356080830152823560ff811680821461431257600080fd5b60a084015250602083013560c083015260409092013560e090910152919050565b600060c0828403121561434557600080fd5b60405160c0810181811067ffffffffffffffff821117156143685761436861390d565b80604052508091508251815260208301516020820152604083015160408201526060830151606082015260808301516143a081613e6c565b608082015260a08301516143b3816135a6565b60a0919091015292915050565b60006101a082840312156143d357600080fd5b6143db6139ab565b6143e58484614333565b815260c0830151602082015260e083015160408201526101008301516060820152610120830151608082015261441e6101408401614114565b60a08201526144306101608401614114565b60c08201526144426101808401614061565b60e08201529392505050565b600060033d11156144675760046000803e5060005160e01c5b90565b60008060233d1115614486576020600460003e50506000516001905b9091565b602081526000611ed46020830184613ff9565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036144ce576144ce613dcb565b5060010190565b6fffffffffffffffffffffffffffffffff8516815260006001600160a01b038086166020840152808516604084015250608060608301526140576080830184613f22565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261454e57600080fd5b83018035915067ffffffffffffffff82111561456957600080fd5b6020019150600581901b3603821315613eff57600080fd5b60008251614275818460208701613fd556fea26469706673582212209029cea248c4bc313896e79e4c5efa34fc9791a73c75f217e1631391539e550f64736f6c63430008160033000000000000000000000000781b4c57100738095222bd92d37b07ed034ab6960000000000000000000000001db1591540d7a6062be0837ca3c808add28844f60000000000000000000000000ab87046fbb341d058f17cbc4c1133f25a20a52f0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000dc035d45d973e3ec169d2276ddab16f1e407384f0000000000000000000000003225737a9bbb6473cb4a45b7244aca2befdb276a000000000000000000000000db591ea2e5db886da872654d58f6cc584b68e7cc00000000000000000000000060744434d6339a6b27d73d9eda62b6f66a0a04fa000000000000000000000000d6a6e8d9e82534bd65821142fccd91ec9cf31880000000000000000000000000e6343ad0675c9b8d3f32679ae6adba0766a2ab4c0000000000000000000000001e094fe00e13fd06d64eea4fb3cd912893606fe0