0 txs
14 calls
constructor
constructor(address _initialOwner, address _native)
functions
calculateDebtReceiveApproval
viewfunction calculateDebtReceiveApproval(address _flashFrom, uint256 _flashAmount) view returns (uint256 debtReceiveApproval)
calculateLeverageFee
viewfunction calculateLeverageFee(uint256 _amount) view returns (uint256 leverageFeeAmount)
DESCRIPTION
viewfunction DESCRIPTION() view returns (string)
FEE_PRECISION
viewfunction FEE_PRECISION() view returns (uint256)
leverageFee
viewfunction leverageFee() view returns (uint256)
NATIVE_TOKEN
viewfunction NATIVE_TOKEN() view returns (address)
owner
viewfunction owner() view returns (address)
paused
viewfunction paused() view returns (bool)
pendingOwner
viewfunction pendingOwner() view returns (address)
revenueReceiver
viewfunction revenueReceiver() view returns (address)
acceptOwnership
nonpayablefunction acceptOwnership()
closeLeveragePosition
nonpayablefunction closeLeveragePosition(bytes _swapArgs, tuple _closeArgs)
closeLeveragePositionPermit
nonpayablefunction closeLeveragePositionPermit(bytes _swapArgs, tuple _closeArgs, tuple _withdrawAllowance)
onFlashLoan
nonpayablefunction onFlashLoan(address, address _borrowToken, uint256 _flashloanAmount, uint256 _flashloanFee, bytes _data) returns (bytes32)
openLeveragePosition
payablefunction openLeveragePosition(tuple _flashArgs, bytes _swapArgs, tuple _depositArgs) payable
openLeveragePositionPermit
nonpayablefunction openLeveragePositionPermit(tuple _flashArgs, bytes _swapArgs, tuple _depositArgs, tuple _depositAllowance)
pause
nonpayablefunction pause()
renounceOwnership
nonpayablefunction renounceOwnership()
rescueTokens
nonpayablefunction rescueTokens(address _token)
rescueTokens
nonpayablefunction rescueTokens(address[] _tokens)
setLeverageFee
nonpayablefunction setLeverageFee(uint256 _fee)
setRevenueReceiver
nonpayablefunction setRevenueReceiver(address _receiver)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
unpause
nonpayablefunction unpause()
events
CloseLeverage
event CloseLeverage(address indexed borrower, uint256 flashloanAmount, uint256 flashloanFee, uint256 swapAmountOut, uint256 depositWithdrawn)
LeverageFeeChanged
event LeverageFeeChanged(uint256 leverageFee)
LeverageRevenue
event LeverageRevenue(address indexed token, uint256 revenue, address indexed receiver)
OpenLeverage
event OpenLeverage(address indexed borrower, uint256 borrowerDeposit, uint256 swapAmountOut, uint256 flashloanAmount, uint256 totalDeposit, uint256 totalBorrow, uint256 leverageFee, uint256 flashloanFee)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
OwnershipTransferStarted
event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner)
Paused
event Paused(address account)
RevenueReceiverChanged
event RevenueReceiverChanged(address indexed receiver)
Unpaused
event Unpaused(address account)
errors
AddressEmptyCode
error AddressEmptyCode(address target)
EmptyNativeToken
error EmptyNativeToken()
EnforcedPause
error EnforcedPause()
ExchangeAddressZero
error ExchangeAddressZero()
ExpectedPause
error ExpectedPause()
FailedCall
error FailedCall()
FeeDidNotChanged
error FeeDidNotChanged()
FlashloanFailed
error FlashloanFailed()
IncorrectNativeTokenAmount
error IncorrectNativeTokenAmount()
InsufficientBalance
error InsufficientBalance(uint256 balance, uint256 needed)
InvalidFee
error InvalidFee()
InvalidFlashloanLender
error InvalidFlashloanLender()
InvalidInitiator
error InvalidInitiator()
InvalidSilo
error InvalidSilo()
NoRevenue
error NoRevenue()
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
ReceiverDidNotChanged
error ReceiverDidNotChanged()
ReceiverNotSet
error ReceiverNotSet()
ReceiverZero
error ReceiverZero()
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
Swap
error Swap()
SwapCallFailed
error SwapCallFailed()
SwapDidNotCoverObligations
error SwapDidNotCoverObligations()
UnknownAction
error UnknownAction()
ZeroAmountOut
error ZeroAmountOut()
creation bytecode
0x60a060405234801561000f575f5ffd5b50604051612f5f380380612f5f83398101604081905261002e91610135565b80826001600160a01b03811661005d57604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b610066816100af565b506001805460ff60a01b191690556001600160a01b03811661009b57604051633ce3edfd60e01b815260040160405180910390fd5b6001600160a01b0316608052506101669050565b600180546001600160a01b03191690556100c8816100cb565b50565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b0381168114610130575f5ffd5b919050565b5f5f60408385031215610146575f5ffd5b61014f8361011a565b915061015d6020840161011a565b90509250929050565b608051612dda6101855f395f81816101ae0152611ff80152612dda5ff3fe608060405260043610610146575f3560e01c80638da5cb5b116100b3578063e63a391f1161006d578063e63a391f14610386578063ee8b3809146103a1578063f088aa73146103c0578063f1ae8856146103d5578063f2fde38b146103f6578063fab7c40914610415575f5ffd5b80638da5cb5b146102d1578063a687d49d146102ed578063ae52e04a1461030c578063c1a793e01461032b578063e144cca81461034a578063e30c397814610369575f5ffd5b80635c975abb116101045780635c975abb1461023a5780635d0c693014610263578063715018a61461027657806379ba50971461028a5780638456cb591461029e578063852293ea146102b2575f5ffd5b8062ae3bf81461014a57806323e30c8b1461016b57806331f7d9641461019d5780633f4ba83a146101e85780634f6dc09e146101fc5780634ffadff41461021b575b5f5ffd5b348015610155575f5ffd5b50610169610164366004612364565b610434565b005b348015610176575f5ffd5b5061018a6101853660046123c3565b61054e565b6040519081526020015b60405180910390f35b3480156101a8575f5ffd5b506101d07f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610194565b3480156101f3575f5ffd5b50610169610644565b348015610207575f5ffd5b50610169610216366004612364565b610656565b348015610226575f5ffd5b50610169610235366004612459565b6106fc565b348015610245575f5ffd5b50600154600160a01b900460ff166040519015158152602001610194565b6101696102713660046124cc565b610734565b348015610281575f5ffd5b506101696109a9565b348015610295575f5ffd5b506101696109ba565b3480156102a9575f5ffd5b50610169610a03565b3480156102bd575f5ffd5b5061018a6102cc366004612523565b610a13565b3480156102dc575f5ffd5b505f546001600160a01b03166101d0565b3480156102f8575f5ffd5b5061016961030736600461254d565b610b6d565b348015610317575f5ffd5b506003546101d0906001600160a01b031681565b348015610336575f5ffd5b5061018a61034536600461259d565b610e59565b348015610355575f5ffd5b506101696103643660046125b4565b610e96565b348015610374575f5ffd5b506001546001600160a01b03166101d0565b348015610391575f5ffd5b5061018a670de0b6b3a764000081565b3480156103ac575f5ffd5b506101696103bb366004612623565b610ed7565b3480156103cb575f5ffd5b5061018a60025481565b3480156103e0575f5ffd5b506103e9610f68565b60405161019491906126c5565b348015610401575f5ffd5b50610169610410366004612364565b610f84565b348015610420575f5ffd5b5061016961042f36600461259d565b610ff4565b6040516370a0823160e01b81523060048201525f906001600160a01b038316906370a0823190602401602060405180830381865afa158015610478573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061049c91906126d7565b9050805f036104be5760405163d55eb96360e01b815260040160405180910390fd5b6003546001600160a01b0316806104e8576040516310c3a82760e21b815260040160405180910390fd5b6104fc6001600160a01b03841682846110aa565b806001600160a01b0316836001600160a01b03167f0e7dee8d7926e02842d15c9446e96f74e0cd5f0610bb9de9258a66f8c80c83018460405161054191815260200190565b60405180910390a3505050565b5f60025c6001600160a01b0316331461057a576040516301176be360e51b815260040160405180910390fd5b600160ff600160a01b60015c04166002811115610599576105996126ee565b036105af576105aa85858585611109565b6105f9565b600260ff600160a01b60015c041660028111156105ce576105ce6126ee565b036105e0576105aa868686868661131a565b60405163211bf9ef60e21b815260040160405180910390fd5b610618866001600160a01b0360025c166106138789612716565b61162f565b507f439148f0bbc682ca079e46d6e2c2f0c1e3b820f1a291b069d8882abf8cf18dd99695505050505050565b61064c61163a565b610654611666565b565b61065e61163a565b6003546001600160a01b0380831691160361068c5760405163045be8db60e31b815260040160405180910390fd5b6001600160a01b0381166106b35760405163220a42fb60e11b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b0383169081179091556040517f52b259f049e62561a54b2a991347b9fc60fe163d8ca148d83ecc5e89cf2e9a56905f90a250565b61072361070e368390038301836127b7565b61071e6040850160208601612364565b6116bb565b61072e848484610b6d565b50505050565b61073c61174d565b60ff5f5c161561075f57604051633ee5aeb560e01b815260040160405180910390fd5b60015f805c60ff19168217905d5061077a6020820182612364565b60016107896020870187612364565b806002805c6001600160a01b0319166001600160a01b03831617905d5081600160ff60a01b19815c16600160a01b8360028111156107c9576107c96126ee565b0217905d50335f805c610100600160a81b031916610100830217905d50826001600160a01b03166379502c556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610822573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108469190612814565b6001805c6001600160a01b0319166001600160a01b03831617905d50348060035d506108756020880188612364565b6001600160a01b0316635cffe9de3061089160208b018b612364565b6001600160a01b03166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108cc573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108f09190612814565b8a602001358a8a8a60405160200161090a9392919061287e565b6040516020818303038152906040526040518563ffffffff1660e01b815260040161093894939291906128dd565b6020604051808303815f875af1158015610954573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610978919061290f565b610995576040516301fabd5b60e71b815260040160405180910390fd5b505f91505060ff19815c16815d5050505050565b6109b161163a565b6106545f611778565b60015433906001600160a01b031681146109f75760405163118cdaa760e01b81526001600160a01b03821660048201526024015b60405180910390fd5b610a0081611778565b50565b610a0b61163a565b610654611791565b5f5f836001600160a01b03166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a51573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a759190612814565b604051633676633960e21b81526001600160a01b038083166004830152602482018690529192505f9186169063d9d98ce490604401602060405180830381865afa158015610ac5573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ae991906126d7565b610af39085612716565b604051635d4086af60e01b81529091506001600160a01b03861690635d4086af90610b2590849060029060040161292e565b602060405180830381865afa158015610b40573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b6491906126d7565b95945050505050565b610b7561174d565b60ff5f5c1615610b9857604051633ee5aeb560e01b815260040160405180910390fd5b60015f805c60ff19168217905d50610bb66040820160208301612364565b6002610bc56020840184612364565b806002805c6001600160a01b0319166001600160a01b03831617905d5081600160ff60a01b19815c16600160a01b836002811115610c0557610c056126ee565b0217905d50335f805c610100600160a81b031916610100830217905d50826001600160a01b03166379502c556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c5e573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c829190612814565b6001805c6001600160a01b0319166001600160a01b03831617905d50610cab6020850185612364565b6001600160a01b0316635cffe9de30610cc76020880188612364565b6001600160a01b03166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d02573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d269190612814565b610d3e610d3960408a0160208b01612364565b6117d4565b604051635f30114960e01b81523360048201526001600160a01b039190911690635f30114990602401602060405180830381865afa158015610d82573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610da691906126d7565b8a8a8a604051602001610dbb93929190612952565b6040516020818303038152906040526040518563ffffffff1660e01b8152600401610de994939291906128dd565b6020604051808303815f875af1158015610e05573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e29919061290f565b610e46576040516301fabd5b60e71b815260040160405180910390fd5b505f91505060ff19815c16815d50505050565b6002545f90808203610e6d57505f92915050565b610e828382670de0b6b3a764000060016118ba565b9150815f03610e9057600191505b50919050565b5f5b81811015610ed257610eca838383818110610eb557610eb56129ad565b90506020020160208101906101649190612364565b600101610e98565b505050565b610f55610ee9368390038301836127b7565b610ef66020850185612364565b6001600160a01b03166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f31573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061071e9190612814565b610f6185858585610734565b5050505050565b604051806060016040528060388152602001612d6d6038913981565b610f8c61163a565b600180546001600160a01b0383166001600160a01b03199091168117909155610fbc5f546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b610ffc61163a565b6003546001600160a01b03166110255760405163220a42fb60e11b815260040160405180910390fd5b8060025403611047576040516341cadab560e01b815260040160405180910390fd5b670de0b6b3a7640000811061106f576040516358d620b360e01b815260040160405180910390fd5b60028190556040518181527fa2a1c3487ac8d2713d66becf0a4401fbb3181d84471f17bf16626589bb87ee569060200160405180910390a150565b6040516001600160a01b03838116602483015260448201839052610ed291859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b0383818316178352505050506118fc565b611129604080516060810182525f80825260208201819052909182015290565b5f606061113884860186612a39565b93509050611146818861195d565b9150505f81836020015161115a9190612716565b90505f61116682610e59565b90506111728183612abf565b91505f845f01516001600160a01b03166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111b4573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111d89190612814565b90506111e585848361196f565b5f6111f2865f01516117d4565b90506001600160a01b03811663d516418461120d8b8d612716565b60405160e083901b6001600160e01b031916815260048101919091523060248201526101005f5c046001600160a01b031660448201526064016020604051808303815f875af1158015611262573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061128691906126d7565b505060208501516001600160a01b036101005f5c0416907ff18030b7a463dc538970cd78fddc6f7046cfd4fc8bd4384144d29c15ed7bbab890868c876112cc8e83612716565b604080519586526020860194909452928401919091526060830152608082015260a0810185905260c081018b905260e00160405180910390a261130f8183611a08565b505050505050505050565b5f8061132883850185612ad2565b915091505f61133a82602001516117d4565b905061134788828961162f565b806001600160a01b031663e36754eb61135f83611a28565b60405160e083901b6001600160e01b031916815260048101919091526101005f5c046001600160a01b031660248201526044016020604051808303815f875af11580156113ae573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113d291906126d7565b505f6113dd83611b0a565b602084015160408086015190516306d29bb360e51b81529293505f926001600160a01b039283169263da537660926114259287923092610100895c0490911691600401612b51565b6020604051808303815f875af1158015611441573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061146591906126d7565b90505f611472868361195d565b90505f61147f8a8c612716565b9050808210156114a25760405163f538c00760e01b815260040160405180910390fd5b5f6114ad8284612abf565b604080518e8152602081018e9052908101859052606081018690529091506101005f5c046001600160a01b0316907ff59a5048755853e275aa7b0a7c402a10078f1d3d98657c90dfd06f581683dc779060800160405180910390a2801561152a5761152a6001600160a01b038e8116906101005f5c0416836110aa565b5f87602001516001600160a01b03166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561156b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061158f9190612814565b6040516370a0823160e01b81523060048201529091505f906001600160a01b038316906370a0823190602401602060405180830381865afa1580156115d6573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115fa91906126d7565b9050801561161e5761161e6001600160a01b03838116906101005f5c0416836110aa565b505050505050505050505050505050565b610ed2838383611c4b565b5f546001600160a01b031633146106545760405163118cdaa760e01b81523360048201526024016109ee565b61166e611cdb565b6001805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b8151602083015160408085015160608601516080870151925163d505accf60e01b81523360048201523060248201526044810195909552606485019390935260ff16608484015260a483019190915260c48201526001600160a01b0382169063d505accf9060e4015f604051808303815f87803b15801561173a575f5ffd5b505af1925050508015610ed257505b5050565b600154600160a01b900460ff16156106545760405163d93c066560e01b815260040160405180910390fd5b600180546001600160a01b0319169055610a0081611d05565b61179961174d565b6001805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861169e3390565b6040805163aecc90cb60e01b815281515f92839283926001600160a01b0360015c169263aecc90cb92600480820193918290030181865afa15801561181b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061183f9190612b7c565b91509150816001600160a01b0316846001600160a01b031614806118745750806001600160a01b0316846001600160a01b0316145b611891576040516306cc02d160e01b815260040160405180910390fd5b836001600160a01b0316826001600160a01b0316146118b057816118b2565b805b949350505050565b5f6118e76118c783611d54565b80156118e257505f84806118dd576118dd612bb4565b868809115b151590565b6118f2868686611d80565b610b649190612716565b5f6119106001600160a01b03841683611e3d565b905080515f14158015611934575080806020019051810190611932919061290f565b155b15610ed257604051635274afe760e01b81526001600160a01b03841660048201526024016109ee565b5f6119688383611e4a565b9392505050565b61197d818460200151611fae565b61198b81845f01518461162f565b8251604080850151905163b7ec8d4b60e01b81526001600160a01b039283169263b7ec8d4b926119c89287926101005f5c04169190600401612bc8565b6020604051808303815f875af11580156119e4573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061072e91906126d7565b801561174957600354611749906001600160a01b038481169116836110aa565b604051630483b24f60e41b81526001600160a01b0382811660048301525f91829160015c169063483b24f090602401606060405180830381865afa158015611a72573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a969190612beb565b6040516370a0823160e01b81526001600160a01b036101005f5c048116600483015291945090841692506370a0823191506024015b602060405180830381865afa158015611ae6573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061196891906126d7565b5f600182604001516001811115611b2357611b236126ee565b03611ba15760208201516040516370a0823160e01b81526001600160a01b036101005f5c0481166004830152909116906370a0823190602401602060405180830381865afa158015611b77573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b9b91906126d7565b92915050565b6020820151604051630483b24f60e41b81526001600160a01b0391821660048201525f9160015c169063483b24f090602401606060405180830381865afa158015611bee573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c129190612beb565b50506040516370a0823160e01b81526001600160a01b036101005f5c0481166004830152919250908216906370a0823190602401611acb565b604051636eb1769f60e11b81523060048201526001600160a01b0383811660248301525f919085169063dd62ed3e90604401602060405180830381865afa158015611c98573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611cbc91906126d7565b90508181101561072e5761072e6001600160a01b038516845f1961206c565b600154600160a01b900460ff1661065457604051638dfc202b60e01b815260040160405180910390fd5b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f6002826003811115611d6957611d696126ee565b611d739190612c35565b60ff166001149050919050565b5f838302815f1985870982811083820303915050805f03611db457838281611daa57611daa612bb4565b0492505050611968565b808411611dd257611dd28415611dcb5760116120fb565b60126120fb565b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b606061196883835f61210c565b5f5f83806020019051810190611e609190612c62565b80519091506001600160a01b0316611e8b576040516301fa152160e31b815260040160405180910390fd5b611e9e816020015182606001518561162f565b5f5f825f01516001600160a01b03168360800151604051611ebf9190612d56565b5f604051808303815f865af19150503d805f8114611ef8576040519150601f19603f3d011682016040523d82523d5f602084013e611efd565b606091505b509150915081611f1757611f178162e902f160e21b6121ac565b60408084015190516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015611f5f573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f8391906126d7565b9350835f03611fa557604051631125efa160e21b815260040160405180910390fd5b50505092915050565b60035c5f03611fd4576117496001600160a01b03838116906101005f5c041630846121c4565b8060035c14611ff6576040516337a515db60e21b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db060035c6040518263ffffffff1660e01b81526004015f604051808303818588803b158015612051575f5ffd5b505af1158015612063573d5f5f3e3d5ffd5b50505050505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b1790526120bd84826121fd565b61072e576040516001600160a01b0384811660248301525f60448301526120f191869182169063095ea7b3906064016110d7565b61072e84826118fc565b634e487b715f52806020526024601cfd5b6060814710156121385760405163cf47918160e01b8152476004820152602481018390526044016109ee565b5f5f856001600160a01b031684866040516121539190612d56565b5f6040518083038185875af1925050503d805f811461218d576040519150601f19603f3d011682016040523d82523d5f602084013e612192565b606091505b50915091506121a286838361229a565b9695505050505050565b8151156121bb57815182602001fd5b611749816122f6565b6040516001600160a01b03848116602483015283811660448301526064820183905261072e9186918216906323b872dd906084016110d7565b5f5f5f846001600160a01b0316846040516122189190612d56565b5f604051808303815f865af19150503d805f8114612251576040519150601f19603f3d011682016040523d82523d5f602084013e612256565b606091505b5091509150818015612280575080511580612280575080806020019051810190612280919061290f565b8015610b645750505050506001600160a01b03163b151590565b6060826122af576122aa82612327565b611968565b81511580156122c657506001600160a01b0384163b155b156122ef57604051639996b31560e01b81526001600160a01b03851660048201526024016109ee565b5080611968565b6040805160048152602481019091526020810180516001600160e01b03166001600160e01b03198416178152815190fd5b8051156123375780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b6001600160a01b0381168114610a00575f5ffd5b5f60208284031215612374575f5ffd5b813561196881612350565b5f5f83601f84011261238f575f5ffd5b5081356001600160401b038111156123a5575f5ffd5b6020830191508360208285010111156123bc575f5ffd5b9250929050565b5f5f5f5f5f5f60a087890312156123d8575f5ffd5b86356123e381612350565b955060208701356123f381612350565b9450604087013593506060870135925060808701356001600160401b0381111561241b575f5ffd5b61242789828a0161237f565b979a9699509497509295939492505050565b5f60608284031215610e90575f5ffd5b5f60a08284031215610e90575f5ffd5b5f5f5f5f610120858703121561246d575f5ffd5b84356001600160401b03811115612482575f5ffd5b61248e8782880161237f565b90955093506124a290508660208701612439565b91506124b18660808701612449565b905092959194509250565b5f60408284031215610e90575f5ffd5b5f5f5f5f60c085870312156124df575f5ffd5b6124e986866124bc565b935060408501356001600160401b03811115612503575f5ffd5b61250f8782880161237f565b90945092506124b190508660608701612439565b5f5f60408385031215612534575f5ffd5b823561253f81612350565b946020939093013593505050565b5f5f5f6080848603121561255f575f5ffd5b83356001600160401b03811115612574575f5ffd5b6125808682870161237f565b909450925061259490508560208601612439565b90509250925092565b5f602082840312156125ad575f5ffd5b5035919050565b5f5f602083850312156125c5575f5ffd5b82356001600160401b038111156125da575f5ffd5b8301601f810185136125ea575f5ffd5b80356001600160401b038111156125ff575f5ffd5b8560208260051b8401011115612613575f5ffd5b6020919091019590945092505050565b5f5f5f5f5f6101608688031215612638575f5ffd5b61264287876124bc565b945060408601356001600160401b0381111561265c575f5ffd5b6126688882890161237f565b909550935061267c90508760608801612439565b915061268b8760c08801612449565b90509295509295909350565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6119686020830184612697565b5f602082840312156126e7575f5ffd5b5051919050565b634e487b7160e01b5f52602160045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b80820180821115611b9b57611b9b612702565b634e487b7160e01b5f52604160045260245ffd5b60405160a081016001600160401b038111828210171561275f5761275f612729565b60405290565b604051606081016001600160401b038111828210171561275f5761275f612729565b604051601f8201601f191681016001600160401b03811182821017156127af576127af612729565b604052919050565b5f60a08284031280156127c8575f5ffd5b506127d161273d565b8235815260208084013590820152604083013560ff811681146127f2575f5ffd5b6040820152606083810135908201526080928301359281019290925250919050565b5f60208284031215612824575f5ffd5b815161196881612350565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b803560028110612865575f5ffd5b919050565b6002811061287a5761287a6126ee565b9052565b608081525f61289160808301858761282f565b9050823561289e81612350565b6001600160a01b03166020838101919091528301356040808401919091526128c7908401612857565b6128d4606084018261286a565b50949350505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190525f906121a290830184612697565b5f6020828403121561291f575f5ffd5b81518015158114611968575f5ffd5b8281526040810160038310612945576129456126ee565b8260208301529392505050565b608081525f61296560808301858761282f565b9050823561297281612350565b6001600160a01b031660208381019190915283013561299081612350565b6001600160a01b03166040838101919091526128c7908401612857565b634e487b7160e01b5f52603260045260245ffd5b5f6001600160401b038211156129d9576129d9612729565b50601f01601f191660200190565b5f82601f8301126129f6575f5ffd5b8135612a09612a04826129c1565b612787565b818152846020838601011115612a1d575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f8284036080811215612a4b575f5ffd5b83356001600160401b03811115612a60575f5ffd5b612a6c868287016129e7565b9350506060601f1982011215612a80575f5ffd5b50612a89612765565b6020840135612a9781612350565b815260408401356020820152612aaf60608501612857565b6040820152809150509250929050565b81810381811115611b9b57611b9b612702565b5f5f8284036080811215612ae4575f5ffd5b83356001600160401b03811115612af9575f5ffd5b612b05868287016129e7565b9350506060601f1982011215612b19575f5ffd5b50612b22612765565b6020840135612b3081612350565b81526040840135612b4081612350565b6020820152612aaf60608501612857565b8481526001600160a01b0384811660208301528316604082015260808101610b64606083018461286a565b5f5f60408385031215612b8d575f5ffd5b8251612b9881612350565b6020840151909250612ba981612350565b809150509250929050565b634e487b7160e01b5f52601260045260245ffd5b8381526001600160a01b0383166020820152606081016118b2604083018461286a565b5f5f5f60608486031215612bfd575f5ffd5b8351612c0881612350565b6020850151909350612c1981612350565b6040850151909250612c2a81612350565b809150509250925092565b5f60ff831680612c5357634e487b7160e01b5f52601260045260245ffd5b8060ff84160691505092915050565b5f60208284031215612c72575f5ffd5b81516001600160401b03811115612c87575f5ffd5b820160a08185031215612c98575f5ffd5b612ca061273d565b8151612cab81612350565b81526020820151612cbb81612350565b60208201526040820151612cce81612350565b60408201526060820151612ce181612350565b606082015260808201516001600160401b03811115612cfe575f5ffd5b80830192505084601f830112612d12575f5ffd5b8151612d20612a04826129c1565b818152866020838601011115612d34575f5ffd5b8160208501602083015e5f918101602001919091526080820152949350505050565b5f82518060208501845e5f92019182525091905056fe4c6576657261676520776974682073696c6f20666c6173686c6f616e20616e6420307820286f7220636f6d70617469626c65292073776170a2646970667358221220faddb5315f0d6fb4ec71d09b11423c7f4b7c994656016f2155dae15e9ee24fab64736f6c634300081c0033000000000000000000000000e8e8041cb5e3158a0829a19e014ca1cf91098554000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2