0 txs
0 calls
constructor
constructor(address _addressProvider, address _creditManager, address _lossPolicy, address _botList, address _weth, address _degenNFT, bool _expirable)
functions
acl
viewfunction acl() view returns (address)
botList
viewfunction botList() view returns (address)
contractType
viewfunction contractType() view returns (bytes32)
creditManager
viewfunction creditManager() view returns (address)
debtLimits
viewfunction debtLimits() view returns (uint128 minDebt, uint128 maxDebt)
degenNFT
viewfunction degenNFT() view returns (address)
expirable
viewfunction expirable() view returns (bool)
expirationDate
viewfunction expirationDate() view returns (uint40)
forbiddenTokenMask
viewfunction forbiddenTokenMask() view returns (uint256)
lossPolicy
viewfunction lossPolicy() view returns (address)
maxDebtPerBlockMultiplier
viewfunction maxDebtPerBlockMultiplier() view returns (uint8)
maxQuotaMultiplier
viewfunction maxQuotaMultiplier() view returns (uint256)
paused
viewfunction paused() view returns (bool)
priceFeedStore
viewfunction priceFeedStore() view returns (address)
treasury
viewfunction treasury() view returns (address)
underlying
viewfunction underlying() view returns (address)
version
viewfunction version() view returns (uint256)
weth
viewfunction weth() view returns (address)
botMulticall
nonpayablefunction botMulticall(address creditAccount, tuple[] calls)
closeCreditAccount
payablefunction closeCreditAccount(address creditAccount, tuple[] calls) payable
liquidateCreditAccount
nonpayablefunction liquidateCreditAccount(address creditAccount, address to, tuple[] calls, bytes lossPolicyData)
liquidateCreditAccount
nonpayablefunction liquidateCreditAccount(address creditAccount, address to, tuple[] calls)
multicall
payablefunction multicall(address creditAccount, tuple[] calls) payable
openCreditAccount
payablefunction openCreditAccount(address onBehalfOf, tuple[] calls, uint256 referralCode) payable returns (address creditAccount)
partiallyLiquidateCreditAccount
nonpayablefunction partiallyLiquidateCreditAccount(address creditAccount, address token, uint256 repaidAmount, uint256 minSeizedAmount, address to, tuple[] priceUpdates) returns (uint256 seizedAmount)
pause
nonpayablefunction pause()
setDebtLimits
nonpayablefunction setDebtLimits(uint128 newMinDebt, uint128 newMaxDebt, uint8 newMaxDebtPerBlockMultiplier)
setExpirationDate
nonpayablefunction setExpirationDate(uint40 newExpirationDate)
setLossPolicy
nonpayablefunction setLossPolicy(address newLossPolicy)
setTokenAllowance
nonpayablefunction setTokenAllowance(address token, uint8 allowance)
unpause
nonpayablefunction unpause()
events
AddCollateral
event AddCollateral(address indexed creditAccount, address indexed token, uint256 amount)
CloseCreditAccount
event CloseCreditAccount(address indexed creditAccount, address indexed borrower)
Execute
event Execute(address indexed creditAccount, address indexed targetContract)
FinishMultiCall
event FinishMultiCall()
LiquidateCreditAccount
event LiquidateCreditAccount(address indexed creditAccount, address indexed liquidator, address to, uint256 remainingFunds)
OpenCreditAccount
event OpenCreditAccount(address indexed creditAccount, address indexed onBehalfOf, address indexed caller, uint256 referralCode)
PartiallyLiquidateCreditAccount
event PartiallyLiquidateCreditAccount(address indexed creditAccount, address indexed token, address indexed liquidator, uint256 repaidDebt, uint256 seizedCollateral, uint256 fee)
Paused
event Paused(address account)
StartMultiCall
event StartMultiCall(address indexed creditAccount, address indexed caller)
Unpaused
event Unpaused(address account)
WithdrawCollateral
event WithdrawCollateral(address indexed creditAccount, address indexed token, uint256 amount, address to)
WithdrawPhantomToken
event WithdrawPhantomToken(address indexed creditAccount, address indexed token, uint256 amount)
errors
AddressIsNotContractException
error AddressIsNotContractException(address)
AmountCantBeZeroException
error AmountCantBeZeroException()
BalanceLessThanExpectedException
error BalanceLessThanExpectedException(address token)
BorrowAmountOutOfLimitsException
error BorrowAmountOutOfLimitsException()
BorrowedBlockLimitException
error BorrowedBlockLimitException()
CallerNotConfiguratorException
error CallerNotConfiguratorException()
CallerNotCreditAccountOwnerException
error CallerNotCreditAccountOwnerException()
CallerNotPausableAdminException
error CallerNotPausableAdminException()
CallerNotUnpausableAdminException
error CallerNotUnpausableAdminException()
CreditAccountNotLiquidatableException
error CreditAccountNotLiquidatableException()
CreditAccountNotLiquidatableWithLossException
error CreditAccountNotLiquidatableWithLossException()
CustomHealthFactorTooLowException
error CustomHealthFactorTooLowException()
ExpectedBalancesAlreadySetException
error ExpectedBalancesAlreadySetException()
ExpectedBalancesNotSetException
error ExpectedBalancesNotSetException()
ForbiddenInWhitelistedModeException
error ForbiddenInWhitelistedModeException()
ForbiddenTokenBalanceIncreasedException
error ForbiddenTokenBalanceIncreasedException(address token)
ForbiddenTokenQuotaIncreasedException
error ForbiddenTokenQuotaIncreasedException(address token)
ForbiddenTokensException
error ForbiddenTokensException(uint256 forbiddenTokensMask)
IncorrectParameterException
error IncorrectParameterException()
InvalidCollateralHintException
error InvalidCollateralHintException(uint256 mask)
NoPermissionException
error NoPermissionException(uint256 permission)
NotAllowedAfterExpirationException
error NotAllowedAfterExpirationException()
NotAllowedWhenNotExpirableException
error NotAllowedWhenNotExpirableException()
NotApprovedBotException
error NotApprovedBotException(address bot)
RemainingTokenBalanceIncreasedException
error RemainingTokenBalanceIncreasedException(address token)
SafeTransferFailed
error SafeTransferFailed()
SeizedLessThanRequiredException
error SeizedLessThanRequiredException(uint256 seizedAmount)
TargetContractNotAllowedException
error TargetContractNotAllowedException()
TokenIsNotQuotedException
error TokenIsNotQuotedException()
UnderlyingIsNotLiquidatableException
error UnderlyingIsNotLiquidatableException()
UnexpectedPermissionsException
error UnexpectedPermissionsException(uint256 permissions)
UnknownMethodException
error UnknownMethodException(bytes4 selector)
ZeroAddressException
error ZeroAddressException()
creation bytecode
0x6101a06040525f805467ff0000000000ff0019166702000000000001001790553480156200002b575f80fd5b5060405162005f3f38038062005f3f8339810160408190526200004e9162000565565b620000626001600160a01b03871662000250565b5f805460ff191690556001600160a01b0381166200009357604051635919af9760e11b815260040160405180910390fd5b6001600160a01b0381163b620000cb5760405163df4c572d60e01b81526001600160a01b038216600482015260240160405180910390fd5b6001600160a01b031660805284620000e3816200026c565b84620000ef816200026c565b6001600160a01b0388811660a0819052600380546001600160a01b0319168a84161790558782166101805286821661014052908516610160528315156101205260408051636f307dc360e01b81529051636f307dc3916004808201926020929091908290030181865afa15801562000169573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200018f9190620005fc565b6001600160a01b0390811660c052620001aa90891662000297565b6001600160a01b0390811660e052604051632bdad0e360e11b81526f50524943455f464545445f53544f524560801b60048201525f6024820152908a16906357b5a1c690604401602060405180830381865afa1580156200020d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002339190620005fc565b6001600160a01b0316610100525062000637975050505050505050565b5f620002666200026083620002ad565b62000311565b92915050565b6001600160a01b0381166200029457604051635919af9760e11b815260040160405180910390fd5b50565b5f62000266620002a783620002ad565b620003ab565b5f816001600160a01b03166316f0115b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002eb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002669190620005fc565b5f610136620003208362000445565b10156200036e576200033282620004a9565b6001600160a01b031663de2873596040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002eb573d5f803e3d5ffd5b816001600160a01b031663de2873596040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002eb573d5f803e3d5ffd5b5f610136620003ba8362000445565b10156200040857620003cc82620004a9565b6001600160a01b03166361d027b36040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002eb573d5f803e3d5ffd5b816001600160a01b03166361d027b36040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002eb573d5f803e3d5ffd5b5f816001600160a01b03166354fd4d506040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000483573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200026691906200061f565b5f816001600160a01b031663de2873596040518163ffffffff1660e01b8152600401602060405180830381865afa158015620004e7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200050d9190620005fc565b6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002eb573d5f803e3d5ffd5b80516001600160a01b038116811462000560575f80fd5b919050565b5f805f805f805f60e0888a0312156200057c575f80fd5b620005878862000549565b9650620005976020890162000549565b9550620005a76040890162000549565b9450620005b76060890162000549565b9350620005c76080890162000549565b9250620005d760a0890162000549565b915060c08801518015158114620005ec575f80fd5b8091505092959891949750929550565b5f602082840312156200060d575f80fd5b620006188262000549565b9392505050565b5f6020828403121562000630575f80fd5b5051919050565b60805160a05160c05160e051610100516101205161014051610160516101805161577c620007c35f395f818161066c01528181610d2001528181610ed40152613cde01525f81816104e801528181611377015261142501525f81816102ba0152818161283201526128ac01525f8181610530015281816115d0015261353d01525f81816103050152612c0e01525f81816103b2015261124d01525f81816103e5015281816110a1015281816110cf01528181611102015281816111670152818161122b01528181612f24015261393601525f818161056301528181610b8401528181610db0015281816114b5015281816116f2015281816117f401528181611a3f01528181611b2501528181611c160152818161245a015281816129110152818161297c01528181612b1101528181612d1001528181612dd301528181612e59015281816130ff015281816132ef015281816133c7015281816134b20152818161388701528181613a3e0152818161413a015261445701525f81816105c901526118ac015261577c5ff3fe6080604052600436106101d0575f3560e01c80638456cb59116100fd578063c12c21c011610092578063eb9606df11610062578063eb9606df1461060a578063ebe4107c14610629578063f0b8f5621461063c578063f6722f621461065b575f80fd5b8063c12c21c014610552578063cb2ef6f714610585578063de287359146105b8578063e3f46b26146105eb575f80fd5b806392beab1d116100cd57806392beab1d146104c45780639408b63f146104d75780639fd12b771461050a578063b1836d321461051f575f80fd5b80638456cb591461044557806385589e1014610459578063874b2e02146104785780638f6204871461048c575f80fd5b806343ede9101161017357806361d027b31161014357806361d027b3146103a15780636f307dc3146103d45780637de164b0146104075780637e2ca9db14610426575f80fd5b806343ede910146102f4578063478ade361461032757806354fd4d501461035c5780635c975abb1461037f575f80fd5b80632b4e6251116101ae5780632b4e62511461026357806336b2ced3146102825780633f4ba83a146102955780633fc8cef3146102a9575f80fd5b80631656af9d146101d4578063166bf9d9146101f557806326f3069214610244575b5f80fd5b3480156101df575f80fd5b506101f36101ee3660046146f3565b61068e565b005b348015610200575f80fd5b5060015461021f906001600160801b0380821691600160801b90041682565b604080516001600160801b039384168152929091166020830152015b60405180910390f35b34801561024f575f80fd5b506101f361025e36600461474b565b61078e565b34801561026e575f80fd5b506101f361027d3660046148cb565b6107d4565b6101f3610290366004614954565b610c6e565b3480156102a0575f80fd5b506101f3610e50565b3480156102b4575f80fd5b506102dc7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161023b565b3480156102ff575f80fd5b506102dc7f000000000000000000000000000000000000000000000000000000000000000081565b348015610332575f80fd5b505f5461034a90670100000000000000900460ff1681565b60405160ff909116815260200161023b565b348015610367575f80fd5b5061037161013681565b60405190815260200161023b565b34801561038a575f80fd5b505f5460ff165b604051901515815260200161023b565b3480156103ac575f80fd5b506102dc7f000000000000000000000000000000000000000000000000000000000000000081565b3480156103df575f80fd5b506102dc7f000000000000000000000000000000000000000000000000000000000000000081565b348015610412575f80fd5b506003546102dc906001600160a01b031681565b348015610431575f80fd5b506101f3610440366004614954565b610e62565b348015610450575f80fd5b506101f3610fcf565b348015610464575f80fd5b506103716104733660046149a5565b610fdf565b348015610483575f80fd5b50610371600281565b348015610497575f80fd5b505f546104ae9062010000900464ffffffffff1681565b60405164ffffffffff909116815260200161023b565b6102dc6104d2366004614a2e565b611346565b3480156104e2575f80fd5b506102dc7f000000000000000000000000000000000000000000000000000000000000000081565b348015610515575f80fd5b5061037160025481565b34801561052a575f80fd5b506103917f000000000000000000000000000000000000000000000000000000000000000081565b34801561055d575f80fd5b506102dc7f000000000000000000000000000000000000000000000000000000000000000081565b348015610590575f80fd5b506103717f4352454449545f4641434144450000000000000000000000000000000000000081565b3480156105c3575f80fd5b506102dc7f000000000000000000000000000000000000000000000000000000000000000081565b3480156105f6575f80fd5b506101f3610605366004614a86565b6115a5565b348015610615575f80fd5b506101f3610624366004614ae7565b6115c6565b6101f3610637366004614954565b61164a565b348015610647575f80fd5b506101f3610656366004614b0b565b6116ae565b348015610666575f80fd5b506102dc7f000000000000000000000000000000000000000000000000000000000000000081565b6106966116f0565b6001600160801b036106ad83821660ff8416614b3a565b11156106e5576040517f47fbaa9700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160801b03918216600160801b02928216929092176001555f805467ffffffffffffffff431668010000000000000000026fffffffffffffffff00000000000000001960ff90951667010000000000000002949094167fffffffffffffffffffffffffffffffff000000000000000000ffffffffffffff9091161792909217167fffffffffffffffffffffffffffffffff00000000000000000000000000000000179055565b6107966116f0565b5f6107a0836117ba565b905060018260018111156107b6576107b6614b51565b146107c55760025481176107cc565b6002548119165b600255505050565b5f5460ff16158061080a575061080a7f454d455247454e43595f4c495155494441544f520000000000000000000000003361186b565b61084e5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064015b60405180910390fd5b61085661191e565b5f805461ff001916610200179055780100000000000000000000000000000000000000000001002182158015906108c457503084845f8161089957610899614b65565b90506020028101906108ab9190614b79565b6108b9906020810190614b0b565b6001600160a01b0316145b801561093157507f28b83c480000000000000000000000000000000000000000000000000000000084845f816108fc576108fc614b65565b905060200281019061090e9190614b79565b61091c906020810190614b97565b61092591614bda565b6001600160e01b031916145b156109855761097e84845f81811061094b5761094b614b65565b905060200281019061095d9190614b79565b61096b906020810190614b97565b610979916004908290614c08565b611979565b600160c21b175b5f8061099088611996565b915091508080156109a557506109a582611b21565b15610aa0576040805160608101825260c08401518152610120840151602082015280820186905260035491517f4f45d5b400000000000000000000000000000000000000000000000000000000815290916001600160a01b031690634f45d5b490610a18908c9033908690600401614c7c565b6020604051808303815f875af1158015610a34573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a589190614cd3565b610a8e576040517f6b8c2b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505f805467ff00000000000000191690555b5f610ac689610abe600186610140015161186690919063ffffffff16565b611be5611c88565b9050610ada89888886610140015188611d9f565b5f610b008a610af8600187610140015161186690919063ffffffff16565b8460016126cb565b90506001600160a01b03811615610b4e576040517f1867c2ef0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401610845565b6101408401805160011790526040517fe2f1490f0000000000000000000000000000000000000000000000000000000081525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063e2f1490f90610bc8908e9089908f908a1590600401614d2f565b60408051808303815f875af1158015610be3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c079190614e32565b50604080516001600160a01b038d811682526020820184905292935033928e16917f7dfecd8419723a9d3954585a30c2a270165d70aafa146c11c1e1b88ae1439064910160405180910390a350505f805461ff001916610100179055505050505050505050565b82610c788161278f565b610c806127e5565b610c8861191e565b5f805461ff001916610200179055610c9e61282a565b8115610cd257610cd2848484610cb3886128d7565b7801000000000000000000000000000000000000000000010165611d9f565b6001610cdd85612942565b1661ffff165f14610d78576040517f42a3b4d60000000000000000000000000000000000000000000000000000000081526001600160a01b0385811660048301527f000000000000000000000000000000000000000000000000000000000000000016906342a3b4d6906024015f604051808303815f87803b158015610d61575f80fd5b505af1158015610d73573d5f803e3d5ffd5b505050505b6040517f7687f6700000000000000000000000000000000000000000000000000000000081526001600160a01b0385811660048301527f00000000000000000000000000000000000000000000000000000000000000001690637687f670906024015f604051808303815f87803b158015610df1575f80fd5b505af1158015610e03573d5f803e3d5ffd5b50506040513392506001600160a01b03871691507f460ad03b1cf79b1d64d3aefa28475f110ab66e84649c52bb41ed796b9b391981905f90a350505f805461ff0019166101001790555050565b610e586129e7565b610e60612a47565b565b610e6a6127e5565b610e72612a98565b610e7a61191e565b5f805461ff001916610200179055610e9183612ad7565b506040517f997a07230000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b0384811660248301525f9182917f0000000000000000000000000000000000000000000000000000000000000000169063997a0723906044016040805180830381865afa158015610f18573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f3c9190614e68565b91506001600160c01b031691508080610f53575081155b80610f6c57506001610f6486612942565b1661ffff165f145b15610fa5576040517f6e437eab000000000000000000000000000000000000000000000000000000008152336004820152602401610845565b610fba858585610fb4896128d7565b86611d9f565b50505f805461ff001916610100179055505050565b610fd7612b42565b610e60612ba2565b5f805460ff16158061101657506110167f454d455247454e43595f4c495155494441544f520000000000000000000000003361186b565b6110555760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610845565b61105d61191e565b5f805461ff00191661020017905581156110835761108361107e8385614f72565b612bde565b5f8061108e8a611996565b90925090505f6110c76001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168c612c6c565b90506110f48b7f00000000000000000000000000000000000000000000000000000000000000008b612cc3565b806111286001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168d612c6c565b6111329190614f7e565b98505f6111418a8c8515612dcd565b919b5090955090505f6111568d8d8884612ffc565b919d50965090506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116908d16036111c2576040517fc978b5ab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b898610156111ff576040517f7f98dc0600000000000000000000000000000000000000000000000000000000815260048101879052602401610845565b600160c11b81161561121357611213613272565b6112258d8c876101400151600161327c565b6112718d7f0000000000000000000000000000000000000000000000000000000000000000847f0000000000000000000000000000000000000000000000000000000000000000613378565b61127d8d8d888c613378565b6101408501516112bd908e905f6040519080825280602002602001820160405280156112b3578160200160208202803683370190505b506127105f613482565b336001600160a01b03168c6001600160a01b03168e6001600160a01b03167f04d7a59a828995563eaa48eb65f11b681f7fec2fb7d6bc1a5426243882f9d2498e8a8760405161131f939291909283526020830191909152604082015260600190565b60405180910390a450505f805461ff00191661010017905550919998505050505050505050565b5f61134f6127e5565b611357612a98565b61135f61191e565b5f805461ff00191661020017905561137561282a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161561147d57336001600160a01b038616146113e6576040517fd380b4d500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f9dc29fac0000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152600160248301527f00000000000000000000000000000000000000000000000000000000000000001690639dc29fac906044015f604051808303815f87803b158015611466575f80fd5b505af1158015611478573d5f803e3d5ffd5b505050505b6040517f43fe7bbe0000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301527f000000000000000000000000000000000000000000000000000000000000000016906343fe7bbe906024016020604051808303815f875af11580156114fb573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061151f9190614f9c565b9050336001600160a01b0316856001600160a01b0316826001600160a01b03167f6e4927aac3383b13ffc5b6f44447693caf351f2f7ca800c9b4463b76997911b08560405161157091815260200190565b60405180910390a4821561158f5761158f818585600162010163611d9f565b5f805461ff001916610100179055949350505050565b6115c08484848460405180602001604052805f8152506107d4565b50505050565b6115ce6116f0565b7f0000000000000000000000000000000000000000000000000000000000000000611625576040517f50dd11fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f805464ffffffffff909216620100000266ffffffffff000019909216919091179055565b826116548161278f565b61165c6127e5565b611664612a98565b61166c61191e565b5f805461ff00191661020017905561168261282a565b61169a848484611691886128d7565b62010167611d9f565b50505f805461ff0019166101001790555050565b6116b66116f0565b600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561174c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117709190614f9c565b6001600160a01b0316336001600160a01b031614610e60576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fd5c2f4860000000000000000000000000000000000000000000000000000000081526001600160a01b0382811660048301525f917f00000000000000000000000000000000000000000000000000000000000000009091169063d5c2f486906024015b602060405180830381865afa15801561183c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118609190614fb7565b92915050565b191690565b6040517f91d14854000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b0382811660248301525f917f0000000000000000000000000000000000000000000000000000000000000000909116906391d1485490604401602060405180830381865afa1580156118f3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119179190614cd3565b9392505050565b5f5460011961010090910460ff1601610e605760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610845565b5f61198682840184614fce565b905061199181612bde565b505050565b611a0d604051806101c001604052805f81526020015f81526020015f81526020015f6001600160801b031681526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f8152602001606081526020015f6001600160a01b031681525090565b6040517f0d334ca60000000000000000000000000000000000000000000000000000000081525f906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690630d334ca690611a77908690600390600401615013565b5f60405180830381865afa158015611a91573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611ab891908101906150bb565b60c081015161012082015182519294501091501580611ae5575080158015611ae55750611ae361353a565b155b15611b1c576040517f234b893b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b915091565b5f807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639af1d35a6040518163ffffffff1660e01b815260040160a060405180830381865afa158015611b7f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ba391906151d2565b5050608086015186519194506127109350611bbf925090615243565b611bc99190614b3a565b8161ffff168460e00151611bdd9190614b3a565b109392505050565b6040517f4fc0e3a8000000000000000000000000000000000000000000000000000000008152600481018290525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690634fc0e3a8906024015b602060405180830381865afa158015611c64573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118609190614f9c565b6060821561191757611c9983613590565b67ffffffffffffffff811115611cb157611cb16147cd565b604051908082528060200260200182016040528015611d0c57816020015b611cf960405180606001604052805f6001600160a01b031681526020015f81526020015f81525090565b815260200190600190039081611ccf5790505b5090505f5b8315611d97575f84810385169485189490611d2f8263ffffffff8716565b90506040518060600160405280826001600160a01b03168152602001838152602001611d6d89846001600160a01b0316612c6c90919063ffffffff16565b815250848481518110611d8257611d82614b65565b60209081029190910101525050600101611d11565b509392505050565b60408051808201909152606081525f60208201525f19906060600160c01b84165f03611dea576127106020830152611dd6836135ad565b9250611de788868516611be5611c88565b90505b60405133906001600160a01b038a16907f6637691e02875fb5c598316278034ab86d133a75ab6d76491287290e03979284905f90a36060865f5b8181101561255357368a8a83818110611e3f57611e3f614b65565b9050602002810190611e519190614b79565b905030611e616020830183614b0b565b6001600160a01b03160361243f575f611e7d6020830183614b97565b611e8691614bda565b90507fd747c3b8000000000000000000000000000000000000000000000000000000006001600160e01b0319821601611f06578215611ee457604051635d0bd4ab60e01b81526001600160e01b031982166004820152602401610845565b600160c21b89165f03611f0157611f0161096b6020840184614b97565b612439565b7fd0d35b65000000000000000000000000000000000000000000000000000000006001600160e01b0319821601611fad57845115611f70576040517fe61eedf500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f611f7e6020840184614b97565b611f8c916004908290614c08565b810190611f999190615256565b9050611fa58e826135c4565b955050612439565b7f0bd51500000000000000000000000000000000000000000000000000000000006001600160e01b031982160161209d5784515f03612018576040517f87a3f92f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6120248e875f613706565b90506001600160a01b038116156120595760405163ce0e3f5b60e01b81526001600160a01b0382166004820152602401610845565b604080515f8082526020820190925290612094565b604080518082019091525f808252602082015281526020019060019003908161206e5790505b50955050612439565b7f928a4612000000000000000000000000000000000000000000000000000000006001600160e01b03198216016120fd576120d9896001613794565b611f018d6120ea6020850185614b97565b6120f8916004908290614c08565b6137d6565b7fbc707034000000000000000000000000000000000000000000000000000000006001600160e01b031982160161215d57612139896001613794565b611f018d61214a6020850185614b97565b612158916004908290614c08565b613813565b7f8ed3ef53000000000000000000000000000000000000000000000000000000006001600160e01b03198216016121c957612199896040613794565b6121bf8d6121aa6020850185614b97565b6121b8916004908290614c08565b8d8c61391d565b909a509750612439565b7fe0ef7760000000000000000000000000000000000000000000000000000000006001600160e01b031982160161223157612205896020613794565b61222a8d6122166020850185614b97565b612224916004908290614c08565b8c613b7d565b9850612439565b7fd48384ef000000000000000000000000000000000000000000000000000000006001600160e01b03198216016122b35761226d896002613794565b5f61227b6020840184614b97565b612289916004908290614c08565b8101906122969190615303565b90506122a48e828d5f61327c565b600160c31b8a17995050612439565b7fd5845e09000000000000000000000000000000000000000000000000000000006001600160e01b031982160161232d576122ef896004613794565b5f6122fd6020840184614b97565b61230b916004908290614c08565b8101906123189190615303565b90506123278e828d600161327c565b50612439565b7fe6fbcabd000000000000000000000000000000000000000000000000000000006001600160e01b031982160161238e5761236a89610100613794565b611f018d61237b6020850185614b97565b612389916004908290614c08565b613c12565b7ff8974402000000000000000000000000000000000000000000000000000000006001600160e01b031982160161241457600160c01b8916156123f057604051635d0bd4ab60e01b81526001600160e01b031982166004820152602401610845565b611f01876124016020850185614b97565b61240f916004908290614c08565b613d90565b604051635d0bd4ab60e01b81526001600160e01b031982166004820152602401610845565b5061254a565b61244c8862010000613794565b6125478c6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663ff68754361248c6020860186614b0b565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156124ce573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124f29190614f9c565b6124ff6020850185614b0b565b61250c6020860186614b97565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508f9250613e69915050565b97505b50600101611e24565b505080511561259f575f6125688a835f613706565b90506001600160a01b0381161561259d5760405163ce0e3f5b60e01b81526001600160a01b0382166004820152602401610845565b505b600160c11b8516156125b3576125b3613272565b6040517f9fe19f2060e67aed557c7d1bc297d4bd2d8a8b952e3545c658ec4bc00be7d6c4905f90a1600160c01b8516156125f057505050506126c4565b85841680156126a157600160c31b86161561263a576040517f1cc967e700000000000000000000000000000000000000000000000000000000815260048101829052602401610845565b5f6126488b838660016126cb565b90506001600160a01b03811615612696576040517f52e08bb70000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401610845565b600160c41b87179650505b6126be8a88865f01518760200151600160c41b8b165f1415613482565b50505050505b5050505050565b5f835f036126da57505f612787565b82515f5b81811015612784578481815181106126f8576126f8614b65565b60200260200101516020015186165f031561277c576127528786838151811061272357612723614b65565b60200260200101515f015187848151811061274057612740614b65565b60200260200101516040015187613f66565b61277c5784818151811061276857612768614b65565b60200260200101515f015192505050612787565b6001016126de565b50505b949350505050565b61279881612ad7565b6001600160a01b0316336001600160a01b0316146127e2576040517f1e83c51100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b5f5460ff1615610e605760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610845565b3415610e60577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004015f604051808303818588803b158015612889575f80fd5b505af115801561289b573d5f803e3d5ffd5b50610e609350506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016915033905034613fce565b6040517ff9f0ca660000000000000000000000000000000000000000000000000000000081526001600160a01b0382811660048301525f917f00000000000000000000000000000000000000000000000000000000000000009091169063f9f0ca6690602401611821565b6040517f845104de0000000000000000000000000000000000000000000000000000000081526001600160a01b0382811660048301525f917f00000000000000000000000000000000000000000000000000000000000000009091169063845104de90602401602060405180830381865afa1580156129c3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611860919061531a565b612a117f554e5041555341424c455f41444d494e000000000000000000000000000000003361186b565b610e60576040517f16e29ab700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612a4f614030565b5f805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b612aa061353a565b15610e60576040517ffd956fa500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fc53afb1e0000000000000000000000000000000000000000000000000000000081526001600160a01b0382811660048301525f917f00000000000000000000000000000000000000000000000000000000000000009091169063c53afb1e90602401611c49565b612b6c7f5041555341424c455f41444d494e0000000000000000000000000000000000003361186b565b610e60576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612baa6127e5565b5f805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612a7b3390565b6040517f7199e2c90000000000000000000000000000000000000000000000000000000081526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690637199e2c990612c43908490600401615335565b5f604051808303815f87803b158015612c5a575f80fd5b505af11580156126c4573d5f803e3d5ffd5b7f70a08231000000000000000000000000000000000000000000000000000000005f818152600483905290602082602481875afa5f51925060203d1081151715612cbb576040513d5f823e3d81fd5b505092915050565b6040517f830aa7450000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b0384811660248301528381166044830152606482018390527f0000000000000000000000000000000000000000000000000000000000000000169063830aa745906084016020604051808303815f875af1158015612d56573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612d7a9190614fb7565b50816001600160a01b0316836001600160a01b03167fa32435755c235de2976ed44a75a2f85cb01faf0c894f639fe0c32bb9455fea8f83604051612dc091815260200190565b60405180910390a3505050565b5f805f807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e2d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e519190614f9c565b90505f805f807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639af1d35a6040518163ffffffff1660e01b815260040160a060405180830381865afa158015612eb3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ed791906151d2565b94509450945094505088612eeb5782612eed565b805b6040517fb66102df000000000000000000000000000000000000000000000000000000008152600481018d90526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660248301528c8116604483015261ffff9290921691612710919088169063b66102df90606401602060405180830381865afa158015612f86573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612faa9190614fb7565b612fb49190614b3a565b612fbe91906153c6565b955061271089612fce5784612fd0565b825b612fde9061ffff168d614b3a565b612fe891906153c6565b9a8b90039b95995094975050505050505050565b6040805160048152602481019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa7b6cd8e000000000000000000000000000000000000000000000000000000001790525f90819081908190819061306b908990617530614081565b9150915081613084578787879450945094505050613268565b5f808280602001905181019061309a91906153d9565b915091506130a78a6117ba565b505f6130bc6001600160a01b0383168d612c6c565b6040517ffdd576450000000000000000000000000000000000000000000000000000000081526001600160a01b0380861660048301529192506131ed918e9186917f0000000000000000000000000000000000000000000000000000000000000000169063fdd5764590602401602060405180830381865afa158015613144573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906131689190614f9c565b8e8e60405160240161318f9291906001600160a01b03929092168252602082015260400190565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa823e9fe000000000000000000000000000000000000000000000000000000001790528d613e69565b98508a6001600160a01b03168c6001600160a01b03167ffb2a92d9536987a99026b9f077b3f5bc11912c1acc475a93d6dcbed8cf26b2608c60405161323491815260200190565b60405180910390a381816132516001600160a01b0383168f612c6c565b61325b9190614f7e565b8a97509750975050505050505b9450945094915050565b610e606001614102565b825f0361329c5760405163872160bd60e01b815260040160405180910390fd5b5f8160018111156132af576132af614b51565b036132bd576132bd83614169565b6040517f432017e80000000000000000000000000000000000000000000000000000000081525f906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063432017e89061332a908890889088908890600401615406565b6060604051808303815f875af1158015613346573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061336a9190615443565b505090506126c48183614274565b6040517f5a6f45de0000000000000000000000000000000000000000000000000000000081526001600160a01b03858116600483015284811660248301526044820184905282811660648301527f00000000000000000000000000000000000000000000000000000000000000001690635a6f45de906084016020604051808303815f875af115801561340d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134319190614fb7565b50604080518381526001600160a01b03838116602083015280861692908716917fe7655dfddd0226889710c711da4e725dd44525fb5717b2321017a97d32793ab8910160405180910390a350505050565b6040517f3d7e5dc40000000000000000000000000000000000000000000000000000000081526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690633d7e5dc4906134f2908890600189179088908890889060040161546e565b6020604051808303815f875af115801561350e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906135329190614fb7565b505050505050565b5f7f000000000000000000000000000000000000000000000000000000000000000061356557505f90565b5f5462010000900464ffffffffff16801580159061358a57508064ffffffffff164210155b91505090565b5f5b81156135a8575f19820190911690600101613592565b919050565b5f5f1982146135bc5781611860565b505060025490565b80516060908067ffffffffffffffff8111156135e2576135e26147cd565b60405190808252806020026020018201604052801561362657816020015b604080518082019091525f80825260208201528152602001906001900390816136005790505b5091505f5b81811015612cbb575f61367461366f8787858151811061364d5761364d614b65565b60200260200101515f01516001600160a01b0316612c6c90919063ffffffff16565b61430c565b9050604051806040016040528086848151811061369357613693614b65565b60200260200101515f01516001600160a01b031681526020016136dd8785815181106136c1576136c1614b65565b602002602001015160200151846136d891906154df565b6143a7565b8152508483815181106136f2576136f2614b65565b60209081029190910101525060010161362b565b81515f90815b8181101561378b576137598686838151811061372a5761372a614b65565b60200260200101515f015187848151811061374757613747614b65565b60200260200101516020015187613f66565b6137835784818151811061376f5761376f614b65565b60200260200101515f015192505050611917565b60010161370c565b50509392505050565b8082165f036137d2576040517f6b895d0400000000000000000000000000000000000000000000000000000000815260048101829052602401610845565b5050565b5f806137e4838501856154fe565b91509150805f036138085760405163872160bd60e01b815260040160405180910390fd5b6126c4858383612cc3565b5f808080808061382587890189615528565b955095509550955095509550845f036138515760405163872160bd60e01b815260040160405180910390fd5b6040517fd505accf0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166024830152604482018790526064820186905260ff8516608483015260a4820184905260c4820183905287169063d505accf9060e4015f604051808303815f87803b1580156138f5575f80fd5b505af1925050508015613906575060015b50613912898787612cc3565b505050505050505050565b5f8080808061392e888a018a61557e565b9250925092507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b03160361399f576040517fbfb4633c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600b0b5f036139c25760405163872160bd60e01b815260040160405180910390fd5b5f82600b0b1315613a32576139d6866135ad565b955085158015906139f05750856139ec846117ba565b1615155b15613a32576040517fab6416200000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401610845565b5f806001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663604ca15f8d876b800000000000000000000000600b89900b01613a825787613a99565b612710613a8f818a6155dc565b613a99919061561d565b6001548890613ad0906bffffffffffffffffffffffff90613acb90600160801b90046001600160801b03166002614b3a565b6143f8565b6040516001600160e01b031960e088901b1681526001600160a01b039586166004820152949093166024850152600b9190910b60448401526bffffffffffffffffffffffff908116606484015216608482015260a40160408051808303815f875af1158015613b41573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613b659190614e32565b199917989098169b969a509598505050505050505050565b5f808080613b8d86880188615643565b9250925092505f198203613bbf57613bae6001600160a01b03841689612c6c565b915060018210613bbf575f19909101905b815f03613bdf5760405163872160bd60e01b815260040160405180910390fd5b613beb88848488612ffc565b96509093509150613bfe88848484613378565b5050600360c31b8317915050949350505050565b5f80613c2083850185615677565b9092509050620100676201006719821677fffffffffffffffffffffffffffffffffffffffffffeff98831615613c8d576040517fbfac20f30000000000000000000000000000000000000000000000000000000081526001600160c01b0382166004820152602401610845565b6040517fc5b73ed00000000000000000000000000000000000000000000000000000000081526001600160a01b03858116600483015288811660248301526001600160c01b03851660448301525f917f00000000000000000000000000000000000000000000000000000000000000009091169063c5b73ed0906064016020604051808303815f875af1158015613d26573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613d4a9190614fb7565b9050805f03613d6457613d5f8860015f61440d565b613d86565b6001613d6f89612942565b1661ffff165f03613d8657613d868860018061440d565b5050505050505050565b613d9c818301836156ae565b61ffff16602085018190529084526127101115613de5576040517f69bb881000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8251515f5b818110156126c4575f855f01518281518110613e0857613e08614b65565b60200260200101519050600181111580613e2657505f198101811615155b15613e60576040517f9761f39900000000000000000000000000000000000000000000000000000000815260048101829052602401610845565b50600101613dea565b5f6001600160a01b0384161580613e8757506001600160a01b038516155b15613ebe576040517ffc1a554300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160c11b82165f03613ede57613ed486614102565b600160c11b821791505b5f613ef26001600160a01b038616856144b3565b806020019051810190613f059190614cd3565b90508015613f1857600360c31b92909217915b856001600160a01b0316876001600160a01b03167f1b835de7d84f000a333cdc5822ae62eb63b38d4c622ef96ac50f27db56d7c76860405160405180910390a3829150505b95945050505050565b5f80613f7b6001600160a01b03861687612c6c565b90505f836001811115613f9057613f90614b51565b148015613f9d5750838110155b80613fc457506001836001811115613fb757613fb7614b51565b148015613fc45750838111155b9695505050505050565b613ffa837fa9059cbb0000000000000000000000000000000000000000000000000000000084846144f6565b611991576040517ffb7f507900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5460ff16610e605760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610845565b5f60605f80866001600160a01b0316858760405161409f919061574c565b5f604051808303818686fa925050503d805f81146140d8576040519150601f19603f3d011682016040523d82523d5f602084013e6140dd565b606091505b50915091505f8151116140f1575f816140f4565b81815b935093505050935093915050565b6040517fe09357a40000000000000000000000000000000000000000000000000000000081526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e09357a490602401612c43565b5f54670100000000000000900460ff1660fe198101614186575050565b5f8054436801000000000000000090910467ffffffffffffffff16036141c9575f546141c290600160801b90046001600160801b031684615243565b90506141fb565b505f80546fffffffffffffffff00000000000000001916680100000000000000004367ffffffffffffffff1602179055815b60015461421b90600160801b90046001600160801b031660ff8416614b3a565b811115614254576040517f675f1a5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f80546001600160801b03928316600160801b0292169190911790555050565b811580156142935750600181600181111561429157614291614b51565b145b1561429c575050565b6001546001600160801b0381169060801c818410806142d5575080841180156142d557505f8360018111156142d3576142d3614b51565b145b156115c0576040517fce16799400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8211156143a35760405162461bcd60e51b815260206004820152602860248201527f53616665436173743a2076616c756520646f65736e27742066697420696e206160448201527f6e20696e743235360000000000000000000000000000000000000000000000006064820152608401610845565b5090565b5f808212156143a35760405162461bcd60e51b815260206004820181905260248201527f53616665436173743a2076616c7565206d75737420626520706f7369746976656044820152606401610845565b5f8183106144065781611917565b5090919050565b6040517fc544cf7d0000000000000000000000000000000000000000000000000000000081526001600160a01b03848116600483015261ffff8416602483015282151560448301527f0000000000000000000000000000000000000000000000000000000000000000169063c544cf7d906064015f604051808303815f87803b158015614498575f80fd5b505af11580156144aa573d5f803e3d5ffd5b50505050505050565b606061191783835f6040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c65640000815250614544565b5f60405184815283600482015282602482015260205f6044835f8a5af19150508015612787573d80156145345760015f5114601f3d1116915061453b565b5f863b1191505b50949350505050565b6060824710156145bc5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610845565b5f80866001600160a01b031685876040516145d7919061574c565b5f6040518083038185875af1925050503d805f8114614611576040519150601f19603f3d011682016040523d82523d5f602084013e614616565b606091505b509150915061462787838387614632565b979650505050505050565b606083156146a05782515f03614699576001600160a01b0385163b6146995760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610845565b5081612787565b61278783838151156146b55781518083602001fd5b8060405162461bcd60e51b8152600401610845919061575d565b6001600160801b03811681146127e2575f80fd5b803560ff811681146135a8575f80fd5b5f805f60608486031215614705575f80fd5b8335614710816146cf565b92506020840135614720816146cf565b915061472e604085016146e3565b90509250925092565b6001600160a01b03811681146127e2575f80fd5b5f806040838503121561475c575f80fd5b823561476781614737565b915060208301356002811061477a575f80fd5b809150509250929050565b5f8083601f840112614795575f80fd5b50813567ffffffffffffffff8111156147ac575f80fd5b6020830191508360208260051b85010111156147c6575f80fd5b9250929050565b634e487b7160e01b5f52604160045260245ffd5b6040805190810167ffffffffffffffff81118282101715614804576148046147cd565b60405290565b6040516101c0810167ffffffffffffffff81118282101715614804576148046147cd565b604051601f8201601f1916810167ffffffffffffffff81118282101715614857576148576147cd565b604052919050565b5f82601f83011261486e575f80fd5b813567ffffffffffffffff811115614888576148886147cd565b61489b601f8201601f191660200161482e565b8181528460208386010111156148af575f80fd5b816020850160208301375f918101602001919091529392505050565b5f805f805f608086880312156148df575f80fd5b85356148ea81614737565b945060208601356148fa81614737565b9350604086013567ffffffffffffffff80821115614916575f80fd5b61492289838a01614785565b9095509350606088013591508082111561493a575f80fd5b506149478882890161485f565b9150509295509295909350565b5f805f60408486031215614966575f80fd5b833561497181614737565b9250602084013567ffffffffffffffff81111561498c575f80fd5b61499886828701614785565b9497909650939450505050565b5f805f805f805f60c0888a0312156149bb575f80fd5b87356149c681614737565b965060208801356149d681614737565b9550604088013594506060880135935060808801356149f481614737565b925060a088013567ffffffffffffffff811115614a0f575f80fd5b614a1b8a828b01614785565b989b979a50959850939692959293505050565b5f805f8060608587031215614a41575f80fd5b8435614a4c81614737565b9350602085013567ffffffffffffffff811115614a67575f80fd5b614a7387828801614785565b9598909750949560400135949350505050565b5f805f8060608587031215614a99575f80fd5b8435614aa481614737565b93506020850135614ab481614737565b9250604085013567ffffffffffffffff811115614acf575f80fd5b614adb87828801614785565b95989497509550505050565b5f60208284031215614af7575f80fd5b813564ffffffffff81168114611917575f80fd5b5f60208284031215614b1b575f80fd5b813561191781614737565b634e487b7160e01b5f52601160045260245ffd5b808202811582820484141761186057611860614b26565b634e487b7160e01b5f52602160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b5f8235603e19833603018112614b8d575f80fd5b9190910192915050565b5f808335601e19843603018112614bac575f80fd5b83018035915067ffffffffffffffff821115614bc6575f80fd5b6020019150368190038213156147c6575f80fd5b6001600160e01b03198135818116916004851015612cbb5760049490940360031b84901b1690921692915050565b5f8085851115614c16575f80fd5b83861115614c22575f80fd5b5050820193919092039150565b5f5b83811015614c49578181015183820152602001614c31565b50505f910152565b5f8151808452614c68816020860160208601614c2f565b601f01601f19169290920160200192915050565b5f6001600160a01b0380861683528085166020840152506060604083015282516060830152602083015160808301526040830151606060a0840152613fc460c0840182614c51565b805180151581146135a8575f80fd5b5f60208284031215614ce3575f80fd5b61191782614cc4565b5f815180845260208085019450602084015f5b83811015614d245781516001600160a01b031687529582019590820190600101614cff565b509495945050505050565b6001600160a01b03851681526080602082015283516080820152602084015160a0820152604084015160c08201525f6060850151614d7860e08401826001600160801b03169052565b5060808501516101008381019190915260a08601516101208085019190915260c08701516101408086019190915260e0880151610160808701919091529288015161018080870191909152918801516101a080870191909152908801516101c080870191909152928801516101e086015281880151610200860193909352614e04610240860184614cec565b908801516001600160a01b039081166102208701528716604086015285151560608601529250613f5d915050565b5f8060408385031215614e43575f80fd5b505080516020909101519092909150565b6001600160c01b03811681146127e2575f80fd5b5f8060408385031215614e79575f80fd5b8251614e8481614e54565b9150614e9260208401614cc4565b90509250929050565b5f67ffffffffffffffff821115614eb457614eb46147cd565b5060051b60200190565b5f614ed0614ecb84614e9b565b61482e565b8381529050602080820190600585901b840186811115614eee575f80fd5b845b81811015614f6757803567ffffffffffffffff80821115614f0f575f80fd5b908701906040828b031215614f22575f80fd5b614f2a6147e1565b8235614f3581614737565b81528286013582811115614f47575f80fd5b614f538c82860161485f565b828801525086525050928201928201614ef0565b505050509392505050565b5f611917368484614ebe565b8181038181111561186057611860614b26565b80516135a881614737565b5f60208284031215614fac575f80fd5b815161191781614737565b5f60208284031215614fc7575f80fd5b5051919050565b5f60208284031215614fde575f80fd5b813567ffffffffffffffff811115614ff4575f80fd5b8201601f81018413615004575f80fd5b61278784823560208401614ebe565b6001600160a01b0383168152604081016005831061503357615033614b51565b8260208301529392505050565b80516135a8816146cf565b5f82601f83011261505a575f80fd5b8151602061506a614ecb83614e9b565b8083825260208201915060208460051b87010193508684111561508b575f80fd5b602086015b848110156150b05780516150a381614737565b8352918301918301615090565b509695505050505050565b5f602082840312156150cb575f80fd5b815167ffffffffffffffff808211156150e2575f80fd5b908301906101c082860312156150f6575f80fd5b6150fe61480a565b82518152602083015160208201526040830151604082015261512260608401615040565b60608201526080830151608082015260a083015160a082015260c083015160c082015260e083015160e08201526101008084015181830152506101208084015181830152506101408084015181830152506101608084015181830152506101808084015183811115615192575f80fd5b61519e8882870161504b565b8284015250506101a091506151b4828401614f91565b91810191909152949350505050565b61ffff811681146127e2575f80fd5b5f805f805f60a086880312156151e6575f80fd5b85516151f1816151c3565b6020870151909550615202816151c3565b6040870151909450615213816151c3565b6060870151909350615224816151c3565b6080870151909250615235816151c3565b809150509295509295909350565b8082018082111561186057611860614b26565b5f6020808385031215615267575f80fd5b823567ffffffffffffffff81111561527d575f80fd5b8301601f8101851361528d575f80fd5b803561529b614ecb82614e9b565b81815260069190911b820183019083810190878311156152b9575f80fd5b928401925b8284101561462757604084890312156152d5575f80fd5b6152dd6147e1565b84356152e881614737565b815284860135868201528252604090930192908401906152be565b5f60208284031215615313575f80fd5b5035919050565b5f6020828403121561532a575f80fd5b8151611917816151c3565b5f60208083018184528085518083526040925060408601915060408160051b8701018488015f5b838110156153a457888303603f19018552815180516001600160a01b0316845287015187840187905261539187850182614c51565b958801959350509086019060010161535c565b509098975050505050505050565b634e487b7160e01b5f52601260045260245ffd5b5f826153d4576153d46153b2565b500490565b5f80604083850312156153ea575f80fd5b82516153f581614737565b602084015190925061477a81614737565b6001600160a01b03851681526020810184905260408101839052608081016002831061543457615434614b51565b82606083015295945050505050565b5f805f60608486031215615455575f80fd5b8351925060208401519150604084015190509250925092565b5f60a082016001600160a01b0388168352602087602085015260a0604085015281875180845260c0860191506020890193505f5b818110156154be578451835293830193918301916001016154a2565b505061ffff9690961660608501525050509015156080909101529392505050565b8082018281125f831280158216821582161715612cbb57612cbb614b26565b5f806040838503121561550f575f80fd5b823561551a81614737565b946020939093013593505050565b5f805f805f8060c0878903121561553d575f80fd5b863561554881614737565b95506020870135945060408701359350615564606088016146e3565b92506080870135915060a087013590509295509295509295565b5f805f60608486031215615590575f80fd5b833561559b81614737565b92506020840135600b81900b81146155b1575f80fd5b915060408401356bffffffffffffffffffffffff811681146155d1575f80fd5b809150509250925092565b5f81600b0b83600b0b806155f2576155f26153b2565b6b7fffffffffffffffffffffff1982145f198214161561561457615614614b26565b90059392505050565b5f82600b0b82600b0b0280600b0b915080821461563c5761563c614b26565b5092915050565b5f805f60608486031215615655575f80fd5b833561566081614737565b92506020840135915060408401356155d181614737565b5f8060408385031215615688575f80fd5b823561569381614737565b9150602083013561477a81614e54565b80356135a8816151c3565b5f80604083850312156156bf575f80fd5b823567ffffffffffffffff8111156156d5575f80fd5b8301601f810185136156e5575f80fd5b803560206156f5614ecb83614e9b565b82815260059290921b83018101918181019088841115615713575f80fd5b938201935b8385101561573157843582529382019390820190615718565b955061574090508682016156a3565b93505050509250929050565b5f8251614b8d818460208701614c2f565b602081525f6119176020830184614c5156fea164736f6c6343000817000a000000000000000000000000f7f0a609bfab9a0a98786951ef10e5fe26cc1e380000000000000000000000005415092f06403f30486ef846dbae0532c6bd8759000000000000000000000000a6bacb6e5f4a9d4950429a9bb0484eab1031d1f30000000000000000000000000bc03983da93021a374c964a22b73865220ce962000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000