0 txs
0 calls
constructor
constructor()
functions
asUsdf
viewfunction asUsdf() view returns (address)
asUsdfEarn
viewfunction asUsdfEarn() view returns (address)
BOT
viewfunction BOT() view returns (bytes32)
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
defaultSlippage
viewfunction defaultSlippage() view returns (uint256)
DENOMINATOR
viewfunction DENOMINATOR() view returns (uint256)
getRequestWithdrawUSDFNos
viewfunction getRequestWithdrawUSDFNos() view returns (uint256[])
getRequestWithdrawUSDTNos
viewfunction getRequestWithdrawUSDTNos() view returns (uint256[])
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
getRoleMember
viewfunction getRoleMember(bytes32 role, uint256 index) view returns (address)
getRoleMemberCount
viewfunction getRoleMemberCount(bytes32 role) view returns (uint256)
getRoleMembers
viewfunction getRoleMembers(bytes32 role) view returns (address[])
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
idWhitelist
viewfunction idWhitelist(bytes32) view returns (bool)
isHealthy
viewfunction isHealthy(bytes32 id, address borrower) view returns (bool)
MANAGER
viewfunction MANAGER() view returns (bytes32)
MAX_LTV
viewfunction MAX_LTV() view returns (uint256)
moolah
viewfunction moolah() view returns (address)
NATIVE_TOKEN_ADDRESS
viewfunction NATIVE_TOKEN_ADDRESS() view returns (address)
ORACLE_PRICE_SCALE
viewfunction ORACLE_PRICE_SCALE() view returns (uint256)
proxiableUUID
viewfunction proxiableUUID() view returns (bytes32)
recipient
viewfunction recipient() view returns (address)
requestWithdrawsUSDF
viewfunction requestWithdrawsUSDF(uint256 _requestWithdrawNo) view returns (tuple)
requestWithdrawsUSDT
viewfunction requestWithdrawsUSDT(uint256 _requestWithdrawNo) view returns (tuple)
requestWithdrawUSDFNos
viewfunction requestWithdrawUSDFNos(uint256) view returns (uint256)
requestWithdrawUSDTNos
viewfunction requestWithdrawUSDTNos(uint256) view returns (uint256)
slippages
viewfunction slippages(address, address) view returns (uint256)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
swapRouterWhitelist
viewfunction swapRouterWhitelist(address) view returns (bool)
tokenProviders
viewfunction tokenProviders(address) view returns (address)
tokenWhitelist
viewfunction tokenWhitelist(address) view returns (bool)
transferSwitch
viewfunction transferSwitch() view returns (bool)
UPGRADE_INTERFACE_VERSION
viewfunction UPGRADE_INTERFACE_VERSION() view returns (string)
usdf
viewfunction usdf() view returns (address)
usdfEarn
viewfunction usdfEarn() view returns (address)
usdt
viewfunction usdt() view returns (address)
vaultWhitelist
viewfunction vaultWhitelist(address) view returns (bool)
borrow
nonpayablefunction borrow(bytes32 _id, uint256 _asset, uint256 _shares)
claimWithdrawUSDF
nonpayablefunction claimWithdrawUSDF(uint256 _requestWithdrawNo)
claimWithdrawUSDT
nonpayablefunction claimWithdrawUSDT(uint256 _requestWithdrawNo)
convertUSDFToAsUSDF
nonpayablefunction convertUSDFToAsUSDF(uint256 _amount)
deposit
nonpayablefunction deposit(address _vault, uint256 _amount)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
initialize
nonpayablefunction initialize(address _admin, address _manager, address _bot, address _recipient, uint256 _defaultSlippage)
managerWithdraw
nonpayablefunction managerWithdraw(address _token, uint256 _amount)
renounceRole
nonpayablefunction renounceRole(bytes32 role, address callerConfirmation)
repay
nonpayablefunction repay(bytes32 _id, uint256 _asset, uint256 _shares)
requestWithdrawUSDF
nonpayablefunction requestWithdrawUSDF(uint256 _amount)
requestWithdrawUSDT
nonpayablefunction requestWithdrawUSDT(uint256 _amount)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
swap
nonpayablefunction swap(address _tokenIn, address _tokenOut, uint256 _amountIn, uint256 _amountOutMin, address _swapRouter, bytes _swapData)
updateDefaultSlippage
nonpayablefunction updateDefaultSlippage(uint256 _defaultSlippage)
updateIdWhitelist
nonpayablefunction updateIdWhitelist(bytes32 _id, bool _bool)
updateRecipient
nonpayablefunction updateRecipient(address _recipient)
updateSlippage
nonpayablefunction updateSlippage(address _tokenIn, address _tokenOut, uint256 _slippage)
updateSwapRouterWhitelist
nonpayablefunction updateSwapRouterWhitelist(address _swapRouter, bool _bool)
updateTokenProvider
nonpayablefunction updateTokenProvider(address _token, address _provider)
updateTokenWhitelist
nonpayablefunction updateTokenWhitelist(address _token, bool _bool)
updateTransferSwitch
nonpayablefunction updateTransferSwitch(bool _bool)
updateVaultWhitelist
nonpayablefunction updateVaultWhitelist(address _vault, bool _bool)
upgradeToAndCall
payablefunction upgradeToAndCall(address newImplementation, bytes data) payable
withdraw
nonpayablefunction withdraw(address _vault, uint256 _amount)
withdrawCollateral
nonpayablefunction withdrawCollateral(bytes32 _id, uint256 _asset)
events
ClaimWithdrawUSDF
event ClaimWithdrawUSDF(uint256 requestWithdrawNo, uint256 withdrawAmount, uint256 receiveAmount)
ClaimWithdrawUSDT
event ClaimWithdrawUSDT(uint256 requestWithdrawNo, uint256 withdrawAmount, uint256 receiveAmount)
ConvertUSDFToAsUSDF
event ConvertUSDFToAsUSDF(uint256 amount, uint256 asUsdfAmount)
DefaultSlippageUpdated
event DefaultSlippageUpdated(uint256 oldDefaultSlippage, uint256 newDefaultSlippage)
IdWhitelistUpdate
event IdWhitelistUpdate(bytes32 id, bool isWhitelisted)
Initialized
event Initialized(uint64 version)
RecipientUpdated
event RecipientUpdated(address oldRecipient, address newRecipient)
RequestWithdrawUSDF
event RequestWithdrawUSDF(uint256 requestWithdrawNo, uint256 amount)
RequestWithdrawUSDT
event RequestWithdrawUSDT(uint256 requestWithdrawNo, uint256 amount)
RoleAdminChanged
event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole)
RoleGranted
event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender)
RoleRevoked
event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender)
SlippageUpdated
event SlippageUpdated(address indexed tokenIn, address indexed tokenOut, uint256 slippage)
Swap
event Swap(address indexed swapRouter, address indexed tokenIn, address indexed tokenOut, uint256 amountIn, uint256 amountOut)
SwapRouterWhitelistUpdated
event SwapRouterWhitelistUpdated(address swapRouter, bool isWhitelisted)
TokenProviderUpdated
event TokenProviderUpdated(address token, address oldProvider, address newProvider)
TokenWhitelistUpdated
event TokenWhitelistUpdated(address token, bool isWhitelisted)
TransferSwitchUpdated
event TransferSwitchUpdated(bool transferSwitch)
Upgraded
event Upgraded(address indexed implementation)
VaultWhitelistUpdated
event VaultWhitelistUpdated(address vault, bool isWhitelisted)
errors
AccessControlBadConfirmation
error AccessControlBadConfirmation()
AccessControlUnauthorizedAccount
error AccessControlUnauthorizedAccount(address account, bytes32 neededRole)
AddressEmptyCode
error AddressEmptyCode(address target)
ERC1967InvalidImplementation
error ERC1967InvalidImplementation(address implementation)
ERC1967NonPayable
error ERC1967NonPayable()
FailedCall
error FailedCall()
InvalidInitialization
error InvalidInitialization()
NotInitializing
error NotInitializing()
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
UUPSUnauthorizedCallContext
error UUPSUnauthorizedCallContext()
UUPSUnsupportedProxiableUUID
error UUPSUnsupportedProxiableUUID(bytes32 slot)
creation bytecode
0x60a080604052346100c257306080525f5160206150215f395f51905f525460ff8160401c166100b3576002600160401b03196001600160401b03821601610060575b604051614f5a90816100c78239608051818181612d260152612df60152f35b6001600160401b0319166001600160401b039081175f5160206150215f395f51905f525581527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a15f80610041565b63f92ee8a960e01b5f5260045ffd5b5f80fdfe608080604052600436101561001c575b50361561001a575f80fd5b005b5f905f3560e01c90816301ffc9a7146138fc575080630f958b35146138d55780631b2df850146138ae578063248a9ca31461386f5780632782b772146137fb578063279093a5146137b55780632f2ff15d1461376b5780632f48ab7d1461373d57806336568abe146136f957806339daa1b2146136bc5780633cc0d97b146135705780633e992d98146135485780633e9b44fd1461351957806343e04d671461328057806345335feb1461316757806347e7ef2414613002578063486277f614612fda5780634f1ef28614612d7a57806352d1902d14612d135780635487404a14612cf657806357888f0f14612cd35780636332c0fb14612c9457806366d003ac14612c6b57806367c572ea14612c3a5780636dd984a314612b0f5780636eeb80a314612ae45780637469bfd714612a80578063753d756314612a4157806381bf8d3d14612a245780639010d07c146129d2578063918f8674146129b557806391d148541461295f5780639881ceb114612930578063995f37f71461281d578063a0d7bf5f146127ca578063a1e9348214612581578063a217fddf14612565578063a3246ad3146124a9578063a4bf309d14612129578063a7e3ba9014612101578063ad3cb1cc146120b8578063b13740e914611eec578063b208212414611ec2578063b38fcf9114611e0c578063b46eb63814611cb7578063b69cbf9f14611926578063bbfaf53614611557578063c5041664146114c3578063ca15c8731461148d578063cc5129b8146113a6578063d547741f14611356578063dcfaa23c14611327578063df2ebdbb146112f8578063e066f16814610fd2578063e485849414610cdf578063e4f4228a14610a8b578063e5e97c6514610987578063f30b2cbe14610946578063f3fef3a314610872578063f6ba1371146107ed578063f7013ef6146103fa578063fae590ea146103c05763feec756c0361000f57346103bd5760203660031901126103bd576102f26139b8565b6102fa614220565b6001600160a01b038116906103108215156141d4565b600354916001600160a01b03831690818114610380576001600160a01b031993909316909217600355604080516001600160a01b0393841681529190921660208201527f62e69886a5df0ba8ffcacbfc1388754e7abd9bde24b036354c561f1acd4e459391819081015b0390a180f35b60405162461bcd60e51b8152602060048201526015602482015274526563697069656e74206973207468652073616d6560581b6044820152606490fd5b80fd5b50346103bd5760203660031901126103bd57600435906002548210156103bd5760206103eb83613a92565b90549060031b1c604051908152f35b50346103bd5760a03660031901126103bd576104146139b8565b61041c6139a2565b6044356001600160a01b0381169290918383036107e9576064356001600160a01b03811694908590036107e557608435915f516020614f055f395f51905f52549560ff8760401c16159667ffffffffffffffff8116801590816107dd575b60011490816107d3575b1590816107ca575b506107bb5767ffffffffffffffff1981166001175f516020614f055f395f51905f52558761078f575b506001600160a01b038516928315610752576001600160a01b03831695861561070d5781156106d2576104e98315156141d4565b612710861061069a577f2bf28488f825d28ef86f4d9579750af1848405e1db4bb31d686a9f6722a51d299760409761056789968d7f62e69886a5df0ba8ffcacbfc1388754e7abd9bde24b036354c561f1acd4e45939961055b6105729761054e614c42565b610556614c42565b61492d565b610673575b50506149c9565b61063f575b50614a6f565b61060b575b50806bffffffffffffffffffffffff60a01b60035416176003558151908882526020820152a18085558151908582526020820152a16105b35780f35b68ff0000000000000000195f516020614f055f395f51905f5254165f516020614f055f395f51905f52557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a180f35b610638905f516020614ec55f395f51905f528a525f516020614e655f395f51905f52602052838a20614c6d565b505f610577565b61066c905f516020614e255f395f51905f528d525f516020614e655f395f51905f52602052868d20614c6d565b505f61056c565b89828061069294525f516020614e655f395f51905f5260205220614c6d565b508d5f610560565b60405162461bcd60e51b815260206004820152601060248201526f496e76616c696420736c69707061676560801b6044820152606490fd5b60405162461bcd60e51b8152602060048201526013602482015272496e76616c696420626f74206164647265737360681b6044820152606490fd5b60405162461bcd60e51b815260206004820152601760248201527f496e76616c6964206d616e6167657220616464726573730000000000000000006044820152606490fd5b60405162461bcd60e51b8152602060048201526015602482015274496e76616c69642061646d696e206164647265737360581b6044820152606490fd5b68ffffffffffffffffff191668010000000000000001175f516020614f055f395f51905f52555f6104b5565b63f92ee8a960e01b8952600489fd5b9050155f61048c565b303b159150610484565b89915061047a565b8580fd5b8480fd5b50346103bd57806003193601126103bd5760405180916020600254928381520191600282527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace915b81811061085c576108588561084c81870382613a28565b60405191829182613969565b0390f35b8254845260209093019260019283019201610835565b50346103bd5760403660031901126103bd5761088c6139b8565b60206024359161089a61427c565b6001600160a01b03168084526007825260408420549092906108be9060ff16613ce5565b6108c9811515613b4a565b600354604051632d182be560e21b815260048101929092523060248301526001600160a01b03166044820152918290606490829086905af1801561093b5761090f575080f35b6109309060203d602011610934575b6109288183613a28565b810190613b96565b5080f35b503d61091e565b6040513d84823e3d90fd5b50346103bd5760203660031901126103bd576020906001600160a01b0361096b6139b8565b16815260068252604060018060a01b0391205416604051908152f35b50346103bd5760403660031901126103bd576109a16139b8565b6109a96139e8565b6109b1614220565b6001600160a01b038216916109c7831515614115565b8284526009602052604084205460ff16151582151514610a46577f67821d5384bb02aab1ba91a477f89c9966cd30f475b02618bdc58712bca512759284526009602052610a2382604086209060ff801983541691151516179055565b604080516001600160a01b0390921682529115156020820152908190810161037a565b60405162461bcd60e51b815260206004820152601f60248201527f546f6b656e206f75742077686974656c697374206973207468652073616d65006044820152606490fd5b50346103bd5760203660031901126103bd57600435610aa861427c565b610ab3811515613b4a565b604051636eb1769f60e11b81523060048201525f516020614ea55f395f51905f526024820152602081604481735a110fc00474038f6c02e89c707d638602ea44b55afa908115610c75578391610cad575b50818101809111610c9957610b3b905f516020614ea55f395f51905f52735a110fc00474038f6c02e89c707d638602ea44b5614816565b5f516020614ea55f395f51905f523b15610c95578160405163745400c960e01b81528260048201528181602481835f516020614ea55f395f51905f525af1801561093b57610c80575b505060405163591666bb60e11b8152906020826004815f516020614ea55f395f51905f525afa918215610c75578392610c3d575b50600154600160401b811015610c29579160409181610c19610c038660017f3f7da1da47c29d74fc391dd453ff2b67e345a0853810648a7884df9bd9ecc5ca98016001556001613aaa565b819391549060031b91821b915f19901b19161790565b905582519182526020820152a180f35b634e487b7160e01b84526041600452602484fd5b9091506020813d602011610c6d575b81610c5960209383613a28565b81010312610c695751905f610bb8565b5f80fd5b3d9150610c4c565b6040513d85823e3d90fd5b81610c8a91613a28565b610c9557815f610b84565b5080fd5b634e487b7160e01b83526011600452602483fd5b90506020813d602011610cd7575b81610cc860209383613a28565b81010312610c6957515f610b04565b3d9150610cbb565b50346103bd57610cee366139ce565b610cf992919261427c565b8184526004602052610d1160ff604086205416613ba5565b60405191632c3c915760e01b8352600483015260a0826024815f516020614e455f395f51905f525afa918215610f43578492610fa1575b508151604051636eb1769f60e11b81523060048201525f516020614e455f395f51905f526024820152906001600160a01b0316602082604481845afa918215610f96578692610f62575b505f198201809211610f4e57905f516020614e455f395f51905f52610db692614816565b604060018060a01b036003541691602094610e248351610dd68882613a28565b888152601f198801368983013784516320b76e8160e01b81529586948594610e01600487018b613c85565b60a486015260c485015260e4840152610120610104840152610124830190613b26565b0381875f516020614e455f395f51905f525af18015610f4357610f15575b505160405163095ea7b360e01b8382019081525f516020614e455f395f51905f5260248301526044808301869052825290916001600160a01b03169083908590610e8d606486613a28565b84519082855af184513d82610ef9575b505015610ea8578380f35b610eed610ef2936040519063095ea7b360e01b908201525f516020614e455f395f51905f52602482015285604482015260448152610ee7606482613a28565b826148d5565b6148d5565b5f80808380f35b909150610f0d5750803b15155b5f80610e9d565b600114610f06565b610f369060403d604011610f3c575b610f2e8183613a28565b810190613c6f565b50610e42565b503d610f24565b6040513d86823e3d90fd5b634e487b7160e01b86526011600452602486fd5b9091506020813d602011610f8e575b81610f7e60209383613a28565b81010312610c695751905f610d92565b3d9150610f71565b6040513d88823e3d90fd5b610fc491925060a03d60a011610fcb575b610fbc8183613a28565b810190613bfa565b905f610d48565b503d610fb2565b50346103bd5760203660031901126103bd57600435610fef61427c565b8015610ffb8115613b4a565b6040516370a0823160e01b815230600482015260208160248173917af46b3c3c6e1bb7286b9f59637fb7c65851fb5afa908115610f435784916112c6575b50611043836143e4565b5f516020614e055f395f51905f523b156112c2578360405163b6b55f2560e01b81528460048201528181602481835f516020614e055f395f51905f525af1801561093b576112ad575b50506040516370a0823160e01b81523060048201529060208260248173917af46b3c3c6e1bb7286b9f59637fb7c65851fb5afa80156112a257859061126e575b6110d69250613cc4565b90811561123457735a110fc00474038f6c02e89c707d638602ea44b58452600a6020526040842073917af46b3c3c6e1bb7286b9f59637fb7c65851fb8552602052604084205490811561122b575b8184029184830414171561121757612710900481106111de577f44e7f84f39d7030f457cd4cce591f217bc60d3149f55676b91e126b2b34afd349160409160ff6005541661117b575b82519182526020820152a180f35b600354835163a9059cbb60e01b60208201526001600160a01b039091166024820152604481018290526111d9906111bf81606481015b03601f198101835282613a28565b73917af46b3c3c6e1bb7286b9f59637fb7c65851fb6148d5565b61116d565b60405162461bcd60e51b81526020600482015260116024820152700a6d8d2e0e0c2ceca40e8dede40d0d2ced607b1b6044820152606490fd5b634e487b7160e01b84526011600452602484fd5b84549150611124565b60405162461bcd60e51b8152602060048201526012602482015271139bc8185cd554d111881c9958d95a5d995960721b6044820152606490fd5b506020823d60201161129a575b8161128860209383613a28565b81010312610c69576110d691516110cc565b3d915061127b565b6040513d87823e3d90fd5b816112b791613a28565b6112c257835f61108c565b8380fd5b90506020813d6020116112f0575b816112e160209383613a28565b81010312610c6957515f611039565b3d91506112d4565b50346103bd57806003193601126103bd57602060405173eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee8152f35b50346103bd57806003193601126103bd576020604051735a110fc00474038f6c02e89c707d638602ea44b58152f35b50346103bd5760403660031901126103bd576109306004356113766139a2565b906113a161139c825f525f516020614ee55f395f51905f52602052600160405f20015490565b6142d8565b6143a2565b50346103bd5760203660031901126103bd576004356113c3614220565b61271081106114515781549081811461140c577f2bf28488f825d28ef86f4d9579750af1848405e1db4bb31d686a9f6722a51d299181604092855582519182526020820152a180f35b60405162461bcd60e51b815260206004820152601c60248201527f5f64656661756c74536c697070616765206973207468652073616d65000000006044820152606490fd5b60405162461bcd60e51b8152602060048201526014602482015273496e76616c6964206d696e20736c69707061676560601b6044820152606490fd5b50346103bd5760203660031901126103bd57604060209160043581525f516020614e655f395f51905f5283522054604051908152f35b50346103bd5760203660031901126103bd576114dd614033565b506040516326421cdf60e11b81526004803590820152610100816024815f516020614ea55f395f51905f525afa90811561093b576108589291611528575b5060405191829182613abf565b61154a91506101003d8111611550575b6115428183613a28565b81019061407c565b5f61151b565b503d611538565b50346103bd5760203660031901126103bd5760043561157461427c565b6040516326421cdf60e11b81526004810182905290610100826024815f516020614ea55f395f51905f525afa918215610c75578392611905575b5060a0820151156118b4576040516370a0823160e01b8152306004820152916020836024817355d398326f99059ff775485246999027b31979555afa928315610f43578493611880575b506040918483516116098582613a28565b60018152601f1985013660208301378261162282614108565b525f516020614ea55f395f51905f523b15610c9557816116559186518093819263eb9259ef60e01b835260048301613969565b0381835f516020614ea55f395f51905f525af1801561187657611861575b505b60015480821015611857578261168a83613a66565b90549060031b1c1461169f5750600101611675565b5f959293949519810190811161184357610c036116be6116cb92613a66565b90549060031b1c92613a66565b9055600154801561182f575f19016116e4816001613aaa565b8154905f199060031b1b191690556001555b83516370a0823160e01b81523060048201526020816024817355d398326f99059ff775485246999027b31979555afa9081156118255786916117ef575b509361176361037a927f0ea10e23dff1b9e75f8633091f863ee6aebe302cfff044e0bb68d2d965b6082f96613cc4565b60ff60055416611794575b508060208501519401519051938493846040919493926060820195825260208201520152565b600354825163a9059cbb60e01b60208201526001600160a01b03909116602482015260448101919091526117e9906117cf81606481016111b1565b7355d398326f99059ff775485246999027b31979556148d5565b5f61176e565b9490506020853d60201161181d575b8161180b60209383613a28565b81010312610c69579351611763611733565b3d91506117fe565b85513d88823e3d90fd5b634e487b7160e01b86526031600452602486fd5b634e487b7160e01b87526011600452602487fd5b50509091926116f6565b8161186b91613a28565b6107e957845f611673565b85513d84823e3d90fd5b9092506020813d6020116118ac575b8161189c60209383613a28565b81010312610c695751915f6115f8565b3d915061188f565b60405162461bcd60e51b815260206004820152602360248201527f555344542077697468647261772072657175657374206e6f7420636c61696d61604482015262626c6560e81b6064820152608490fd5b61191f9192506101003d8111611550576115428183613a28565b905f6115ae565b50346103bd5760c03660031901126103bd576119406139b8565b6119486139a2565b60843591906001600160a01b038316906044358285036107e55760a4359367ffffffffffffffff8511611cb35736602386011215611cb35784600401359467ffffffffffffffff8611611caf573660248783010111611caf576119a961427c565b6001600160a01b038216808952600960205260408920549096906119cf9060ff16614159565b6001600160a01b038516808a52600960205260408a20549098906119f59060ff16614159565b888814611c5f57868a52600860205260ff60408b20541615611c1b578980916024611a203088614532565b94611a2b308b614532565b9673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee8d148d8b868315611c0a575b5050505f14611c035789915b80604051948593018337810185815203925af1611a746141a5565b5015611bd057611a95611a9d91611a8f611aa2953090614532565b90613cc4565b943090614532565b613cc4565b908211611b98576064358110611b5f57838652600a60205260408620855f5260205260405f20548015611b57575b8083029083820414831517156118435761271090048110611b1e577fcd3829a3813dc3cdd188fd3d01dcf3268c16be2fdd2dd21d0665418816e460629160409182519182526020820152a480f35b60405162461bcd60e51b81526020600482015260116024820152700e6d8d2e0e0c2ceca40e8dede40d0d2ced607b1b6044820152606490fd5b508554611ad0565b60405162461bcd60e51b81526020600482015260116024820152701b9bdd08195b9bdd59da081c1c9bd99a5d607a1b6044820152606490fd5b60405162461bcd60e51b815260206004820152601060248201526f32bc31b2b2b21030b6b7bab73a1034b760811b6044820152606490fd5b60405162461bcd60e51b815260206004820152600b60248201526a1cddd85c0819985a5b195960aa1b6044820152606490fd5b8491611a59565b611c13926144a0565b8d8b86611a4d565b606460405162461bcd60e51b815260206004820152602060248201527f7377617020726f75746572206e6f7420696e207468652077686974656c6973746044820152fd5b60405162461bcd60e51b815260206004820152602260248201527f746f6b656e20696e20616e64206f7574206d75737420626520646966666572656044820152611b9d60f21b6064820152608490fd5b8780fd5b8680fd5b50346103bd5760403660031901126103bd57611cd16139b8565b611cd96139a2565b90611ce2614220565b6001600160a01b031690611cf7821515614115565b6001600160a01b03168015611dc757818352600660205260408320546001600160a01b03168114611d8b578183526006602081815260408086205485875292825280862080546001600160a01b0319168517905580519485526001600160a01b03909216908401528201527f775accb3a3b5697bd8f186bb6feb38e0828d3bb2c31f4c82d6e7806ba0eb52a690606090a180f35b60405162461bcd60e51b815260206004820152601460248201527350726f7669646572206973207468652073616d6560601b6044820152606490fd5b60405162461bcd60e51b815260206004820152601860248201527f496e76616c69642070726f7669646572206164647265737300000000000000006044820152606490fd5b50346103bd5760203660031901126103bd57600435801515809103610c9557611e33614220565b6005548160ff8216151514611e7d5760ff191660ff8216176005556040519081527fef051b5eea538c8171ad7fbaa03fad46745290c5d02c163e0837e16805818a7090602090a180f35b60405162461bcd60e51b815260206004820152601b60248201527f5472616e7366657220737769746368206973207468652073616d6500000000006044820152606490fd5b50346103bd57806003193601126103bd5760206040516ec097ce7bc90715b34b9f10000000008152f35b50346103bd5760603660031901126103bd57611f066139b8565b611f0e6139a2565b60443591611f1a614220565b6001600160a01b0316908115612073576001600160a01b031691821561202e57828214611fde57818452600a60205260408420835f526020528060405f205414611fa25760207f0e68cd977ed96d805f51b9f31f485777d991b937919ba2c0ed157fb2b3efa54491838652600a825260408620855f5282528060405f2055604051908152a380f35b60405162461bcd60e51b8152602060048201526014602482015273536c697070616765206973207468652073616d6560601b6044820152606490fd5b60405162461bcd60e51b815260206004820152602260248201527f546f6b656e20696e20616e64206f7574206d75737420626520646966666572656044820152611b9d60f21b6064820152608490fd5b60405162461bcd60e51b815260206004820152601960248201527f496e76616c696420746f6b656e206f75742061646472657373000000000000006044820152606490fd5b60405162461bcd60e51b815260206004820152601860248201527f496e76616c696420746f6b656e20696e206164647265737300000000000000006044820152606490fd5b50346103bd57806003193601126103bd57506108586040516120db604082613a28565b60058152640352e302e360dc1b6020820152604051918291602083526020830190613b26565b50346103bd57806003193601126103bd5760206040515f516020614e055f395f51905f528152f35b50346103bd5760203660031901126103bd5760043561214661427c565b6040516326421cdf60e11b81526004810182905290610100826024815f516020614e055f395f51905f525afa918215610c75578392612488575b5060a082015115612443576040516370a0823160e01b815230600482015291602083602481735a110fc00474038f6c02e89c707d638602ea44b55afa928315610f4357849361240f575b506040918483516121db8582613a28565b60018152601f198501366020830137826121f482614108565b525f516020614e055f395f51905f523b15610c9557816122279186518093819263eb9259ef60e01b835260048301613969565b0381835f516020614e055f395f51905f525af18015611876576123fa575b505b600254808210156123f0578261225c83613a92565b90549060031b1c146122715750600101612247565b5f959293949519810190811161184357610c0361229061229d92613a92565b90549060031b1c92613a92565b9055600254801561182f575f19016122b6816002613aaa565b8154905f199060031b1b191690556002555b83516370a0823160e01b8152306004820152602081602481735a110fc00474038f6c02e89c707d638602ea44b55afa9081156118255786916123ba575b509361233561037a927f1ecdefa24f2f261ad4e1403d5235935e9f810063a8e80a5bfeabce1ca4d81f5796613cc4565b60ff6005541661236557508060208501519401519051938493846040919493926060820195825260208201520152565b600354825163a9059cbb60e01b60208201526001600160a01b03909116602482015260448101919091526117e9906123a081606481016111b1565b735a110fc00474038f6c02e89c707d638602ea44b56148d5565b9490506020853d6020116123e8575b816123d660209383613a28565b81010312610c69579351612335612305565b3d91506123c9565b50509091926122c8565b8161240491613a28565b6107e957845f612245565b9092506020813d60201161243b575b8161242b60209383613a28565b81010312610c695751915f6121ca565b3d915061241e565b60405162461bcd60e51b815260206004820152601e60248201527f52657175657374207769746864726177206e6f7420636c61696d61626c6500006044820152606490fd5b6124a29192506101003d8111611550576115428183613a28565b905f612180565b50346103bd5760203660031901126103bd5760043581525f516020614e655f395f51905f5260205260408120604051908160208254918281520190819285526020852090855b81811061254f5750505082612505910383613a28565b604051928392602084019060208552518091526040840192915b81811061252d575050500390f35b82516001600160a01b031684528594506020938401939092019160010161251f565b82548452602090930192600192830192016124ef565b50346103bd57806003193601126103bd57602090604051908152f35b50346103bd5760403660031901126103bd57600435816024356125a261427c565b82825260046020526125ba60ff604084205416613ba5565b604051632c3c915760e01b81526004810184905260a0816024815f516020614e455f395f51905f525afa908115610c755783916127ab575b50602081810180516001600160a01b039081168652600690925260408520549091161561271b57516001600160a01b0390811684526006602052604084205460035482169116803b156107e95784928361010492612666946040519788968795638720316d60e01b87526004870190613c85565b60a485015260c48401523060e48401525af1801561093b57612706575b505061269c905b6003546001600160a01b031690613d3d565b156126a45780f35b60405162461bcd60e51b815260206004820152603460248201527f506f736974696f6e206973206e6f74206865616c7468792061667465722077696044820152731d1a191c985dda5b99c818dbdb1b185d195c985b60621b6064820152608490fd5b8161271091613a28565b610c9557815f612683565b509060018060a01b0360035416905f516020614e455f395f51905f523b156112c257604051638720316d60e01b815292612759906004850190613c85565b60a483015260c48201523060e4820152818161010481835f516020614e455f395f51905f525af1801561093b57612796575b505061269c9061268a565b816127a091613a28565b610c9557815f61278b565b6127c4915060a03d60a011610fcb57610fbc8183613a28565b5f6125f2565b50346103bd5760403660031901126103bd5760406127e66139b8565b916127ef6139a2565b9260018060a01b03168152600a602052209060018060a01b03165f52602052602060405f2054604051908152f35b50346103bd5760403660031901126103bd5760043561283a6139e8565b612842614220565b604051632c3c915760e01b81526004810183905260a0816024815f516020614e455f395f51905f525afa908115610f43578491612911575b50516001600160a01b0316156128df57816040917f676b1079af31b4aee37f3d49ff7a40a6498b7506e0705b0ab84deb2be5688b5093855260046020526128cf818487209060ff801983541691151516179055565b825191825215156020820152a180f35b60405162461bcd60e51b815260206004820152600a602482015269125b9d985b1a59081a5960b21b6044820152606490fd5b61292a915060a03d60a011610fcb57610fbc8183613a28565b5f61287a565b50346103bd5760203660031901126103bd5760ff60406020926004358152600484522054166040519015158152f35b50346103bd5760403660031901126103bd57604061297b6139a2565b9160043581525f516020614ee55f395f51905f52602052209060018060a01b03165f52602052602060ff60405f2054166040519015158152f35b50346103bd57806003193601126103bd5760206040516127108152f35b50346103bd5760403660031901126103bd57612a0b60209160043581525f516020614e655f395f51905f52835260406024359120613aaa565b905460405160039290921b1c6001600160a01b03168152f35b50346103bd57806003193601126103bd5760206040516126488152f35b50346103bd5760203660031901126103bd5760209060ff906040906001600160a01b03612a6c6139b8565b168152600984522054166040519015158152f35b50346103bd5760203660031901126103bd57612a9a614033565b506040516326421cdf60e11b81526004803590820152610100816024815f516020614e055f395f51905f525afa90811561093b576108589291611528575060405191829182613abf565b50346103bd5760203660031901126103bd57600435906001548210156103bd5760206103eb83613a66565b50346103bd5760403660031901126103bd57612b296139b8565b612b316139e8565b612b39614220565b6001600160a01b038216918215612bf5578284526008602052604084205460ff16151582151514612ba6577f2aca21dd3f1ce3532093b99eb1a6ea2213868bcc3cee3b122dfd9f07cb4d632f9284526008602052610a2382604086209060ff801983541691151516179055565b60405162461bcd60e51b815260206004820152602160248201527f5377617020726f757465722077686974656c697374206973207468652073616d6044820152606560f81b6064820152608490fd5b60405162461bcd60e51b815260206004820152601b60248201527f496e76616c6964207377617020726f75746572206164647265737300000000006044820152606490fd5b50346103bd5760403660031901126103bd576020612c61612c596139a2565b600435613d3d565b6040519015158152f35b50346103bd57806003193601126103bd576003546040516001600160a01b039091168152602090f35b50346103bd5760203660031901126103bd5760209060ff906040906001600160a01b03612cbf6139b8565b168152600884522054166040519015158152f35b50346103bd57806003193601126103bd57602060ff600554166040519015158152f35b50346103bd57806003193601126103bd5760209054604051908152f35b50346103bd57806003193601126103bd577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163003612d6b5760206040515f516020614e855f395f51905f528152f35b63703e46dd60e11b8152600490fd5b5060403660031901126103bd57612d8f6139b8565b6024359067ffffffffffffffff8211612fd65736602383011215612fd65781600401359083612dbd83613a4a565b93612dcb6040519586613a28565b83855260208501933660248284010111612fd657806024602093018637850101526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016308114908115612fb4575b50612fa5578380525f516020614ee55f395f51905f5260209081526040808620335f908152925290205460ff1615612f8d576040516352d1902d60e01b81526001600160a01b0382169390602081600481885afa869181612f59575b50612e9657634c9c8ce360e01b86526004859052602486fd5b93845f516020614e855f395f51905f52879603612f475750823b15612f35575f516020614e855f395f51905f5280546001600160a01b031916821790558491907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b8380a2805115612f1a576109309382915190845af4612f146141a5565b91614d86565b5050505034612f265780f35b63b398979f60e01b8152600490fd5b634c9c8ce360e01b8552600452602484fd5b632a87526960e21b8652600452602485fd5b9091506020813d602011612f85575b81612f7560209383613a28565b81010312611cb35751905f612e7d565b3d9150612f68565b63e2517d3f60e01b8452336004526024849052604484fd5b63703e46dd60e11b8452600484fd5b5f516020614e855f395f51905f52546001600160a01b0316141590505f612e21565b8280fd5b50346103bd57806003193601126103bd5760206040515f516020614ec55f395f51905f528152f35b50346103bd5760403660031901126103bd5761301c6139b8565b6024359061302861427c565b6001600160a01b0381168084526007602052604084205490929061304e9060ff16613ce5565b613059811515613b4a565b6040516338d52e0f60e01b815291602083600481875afa9283156112a257859361312b575b508161308a3085614532565b106130e6576020926130a69183916001600160a01b03166144a0565b600354604051636e553f6560e01b815260048101929092526001600160a01b03166024820152918290604490829086905af1801561093b5761090f575080f35b60405162461bcd60e51b815260206004820152601860248201527f4e6f7420656e6f75676820746f6b656e2062616c616e636500000000000000006044820152606490fd5b9092506020813d60201161315f575b8161314760209383613a28565b810103126107e95761315890613be6565b915f61307e565b3d915061313a565b50346103bd5760403660031901126103bd576131816139b8565b6131896139e8565b613191614220565b6001600160a01b038216918215613243578284526007602052604084205460ff161515821515146131fe577f9c4947993c105b7a2ef94cdd18c10347d79d0d5a763630cdc1de23ede5e9f72b9284526007602052610a2382604086209060ff801983541691151516179055565b60405162461bcd60e51b815260206004820152601b60248201527f5661756c742077686974656c697374206973207468652073616d6500000000006044820152606490fd5b60405162461bcd60e51b8152602060048201526015602482015274496e76616c6964207661756c74206164647265737360581b6044820152606490fd5b50346103bd5761328f366139ce565b61329a92919261427c565b81845260046020526132b260ff604086205416613ba5565b604051632c3c915760e01b8152600481018390529260a0846024815f516020614e455f395f51905f525afa9182156112a25760249486936134f8575b5082516040516370a0823160e01b81523060048201529560209187919082906001600160a01b03165afa948515610f965786956134c4575b506003546040516350d8cd4b60e01b8152926001600160a01b0390911691906133526004850186613c85565b60a484015260c483015260e48201523061010482015260408161012481885f516020614e455f395f51905f525af180156112a2576134a6575b5080516040516370a0823160e01b815230600482015290602090829060249082906001600160a01b03165afa9081156112a2578591613472575b506133f2936133d391613cc4565b60ff6005541661344f575b50506003546001600160a01b031690613d3d565b156133fa5780f35b60405162461bcd60e51b815260206004820152602760248201527f506f736974696f6e206973206e6f74206865616c74687920616674657220626f60448201526672726f77696e6760c81b6064820152608490fd5b905160035461346b92916001600160a01b03918216911661431e565b5f806133de565b90506020813d60201161349e575b8161348d60209383613a28565b81010312610c6957516133f26133c5565b3d9150613480565b6134be9060403d604011610f3c57610f2e8183613a28565b5061338b565b9094506020813d6020116134f0575b816134e060209383613a28565b81010312610c695751935f613326565b3d91506134d3565b61351291935060a03d60a011610fcb57610fbc8183613a28565b915f6132ee565b50346103bd57806003193601126103bd57602060405173917af46b3c3c6e1bb7286b9f59637fb7c65851fb8152f35b50346103bd57806003193601126103bd5760206040515f516020614ea55f395f51905f528152f35b5034610c69576020366003190112610c695760043561358d61427c565b613598811515613b4a565b6135a1816143e4565b5f516020614e055f395f51905f523b15610c695760405163745400c960e01b8152600481018290525f81602481835f516020614e055f395f51905f525af180156136b15761369c575b5060405163591666bb60e11b8152906020826004815f516020614e055f395f51905f525afa918215610c75578392613668575b50600254600160401b811015610c29579160409181610c19610c038660017f769c53a30f4a5dbb979fbe01c72b96c12b86a0865a9db1e4758d6f607c41dfaf98016002556002613aaa565b9091506020813d602011613694575b8161368460209383613a28565b81010312610c695751905f61361d565b3d9150613677565b6136a99192505f90613a28565b5f905f6135ea565b6040513d5f823e3d90fd5b34610c69576020366003190112610c69576001600160a01b036136dd6139b8565b165f526007602052602060ff60405f2054166040519015158152f35b34610c69576040366003190112610c69576137126139a2565b336001600160a01b0382160361372e5761001a906004356143a2565b63334bd91960e11b5f5260045ffd5b34610c69575f366003190112610c695760206040517355d398326f99059ff775485246999027b31979558152f35b34610c69576040366003190112610c695761001a60043561378a6139a2565b906137b061139c825f525f516020614ee55f395f51905f52602052600160405f20015490565b61435c565b34610c69576040366003190112610c69576004356001600160a01b0381168103610c695761001a90602435906137e9614220565b6137f4821515613b4a565b339061431e565b34610c69575f366003190112610c695760405180602060015491828152019060015f527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6905f5b818110613859576108588561084c81870382613a28565b8254845260209093019260019283019201613842565b34610c69576020366003190112610c695760206138a66004355f525f516020614ee55f395f51905f52602052600160405f20015490565b604051908152f35b34610c69575f366003190112610c695760206040515f516020614e255f395f51905f528152f35b34610c69575f366003190112610c695760206040515f516020614e455f395f51905f528152f35b34610c69576020366003190112610c69576004359063ffffffff60e01b8216809203610c6957602091635a05180f60e01b811490811561393e575b5015158152f35b637965db0b60e01b811491508115613958575b5083613937565b6301ffc9a760e01b14905083613951565b60206040818301928281528451809452019201905f5b81811061398c5750505090565b825184526020938401939092019160010161397f565b602435906001600160a01b0382168203610c6957565b600435906001600160a01b0382168203610c6957565b6060906003190112610c6957600435906024359060443590565b602435908115158203610c6957565b610100810190811067ffffffffffffffff821117613a1457604052565b634e487b7160e01b5f52604160045260245ffd5b90601f8019910116810190811067ffffffffffffffff821117613a1457604052565b67ffffffffffffffff8111613a1457601f01601f191660200190565b600154811015613a7e5760015f5260205f2001905f90565b634e487b7160e01b5f52603260045260245ffd5b600254811015613a7e5760025f5260205f2001905f90565b8054821015613a7e575f5260205f2001905f90565b91909160e08061010083019460018060a01b0381511684526020810151602085015260408101516040850152606081015160608501526080810151608085015260a0810151151560a085015260018060a01b0360c08201511660c085015201511515910152565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b15613b5157565b60405162461bcd60e51b815260206004820152601d60248201527f416d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606490fd5b90816020910312610c69575190565b15613bac57565b60405162461bcd60e51b81526020600482015260126024820152711259081b9bdd081dda1a5d195b1a5cdd195960721b6044820152606490fd5b51906001600160a01b0382168203610c6957565b908160a0910312610c69576040519060a082019082821067ffffffffffffffff831117613a1457608091604052613c3081613be6565b8352613c3e60208201613be6565b6020840152613c4f60408201613be6565b6040840152613c6060608201613be6565b60608401520151608082015290565b9190826040910312610c69576020825192015190565b80516001600160a01b03908116835260208083015182169084015260408083015182169084015260608083015190911690830152608090810151910152565b91908203918211613cd157565b634e487b7160e01b5f52601160045260245ffd5b15613cec57565b60405162461bcd60e51b815260206004820152601560248201527415985d5b1d081b9bdd081dda1a5d195b1a5cdd1959605a1b6044820152606490fd5b51906001600160801b0382168203610c6957565b604051632c3c915760e01b8152600481018290529160a0836024815f516020614e455f395f51905f525afa9283156136b1575f93614012575b50604051630ad22b2b60e11b815291613d926004840185613c85565b60208360a4815f516020614e455f395f51905f525afa9283156136b1575f93613fde575b506040516349e2903160e11b8152600481018290526001600160a01b0390921660248301526060826044815f516020614e455f395f51905f525afa9182156136b1575f92613f67575b5060405190632e3071cd60e11b8252600482015260c0816024815f516020614e455f395f51905f525afa9081156136b1575f91613eb7575b506001600160801b036020830151168015613ead57816001600160801b036060816040613e6b960151169201511691614764565b928315613ea4576080613e91613e9f946001600160801b036040613e9a960151166145c4565b9101519061466e565b6146f1565b101590565b50505050600190565b5050505050600190565b905060c0813d60c011613f5f575b81613ed260c09383613a28565b81010312610c69576040519060c0820182811067ffffffffffffffff821117613a1457613f549160a091604052613f0881613d29565b8452613f1660208201613d29565b6020850152613f2760408201613d29565b6040850152613f3860608201613d29565b6060850152613f4960808201613d29565b608085015201613d29565b60a08201525f613e37565b3d9150613ec5565b9091506060813d606011613fd6575b81613f8360609383613a28565b81010312610c6957604051906060820182811067ffffffffffffffff821117613a1457613fca91604091825280518452613fbf60208201613d29565b602085015201613d29565b6040820152905f613dff565b3d9150613f76565b9092506020813d60201161400a575b81613ffa60209383613a28565b81010312610c695751915f613db6565b3d9150613fed565b61402c91935060a03d60a011610fcb57610fbc8183613a28565b915f613d76565b60405190614040826139f7565b5f60e0838281528260208201528260408201528260608201528260808201528260a08201528260c08201520152565b51908115158203610c6957565b9081610100910312610c695760405190614095826139f7565b80516001600160a01b0381168103610c69576141009160e0918452602081015160208501526040810151604085015260608101516060850152608081015160808501526140e460a0820161406f565b60a08501526140f560c08201613be6565b60c08501520161406f565b60e082015290565b805115613a7e5760200190565b1561411c57565b60405162461bcd60e51b8152602060048201526015602482015274496e76616c696420746f6b656e206164647265737360581b6044820152606490fd5b1561416057565b60405162461bcd60e51b815260206004820152601a60248201527f746f6b656e206e6f7420696e207468652077686974656c6973740000000000006044820152606490fd5b3d156141cf573d906141b682613a4a565b916141c46040519384613a28565b82523d5f602084013e565b606090565b156141db57565b60405162461bcd60e51b815260206004820152601960248201527f496e76616c696420726563697069656e742061646472657373000000000000006044820152606490fd5b335f9081527f511d0314ee32589a99ab73eccd900c257efd9224711c0e5aadda466017c07f6c602052604090205460ff161561425857565b63e2517d3f60e01b5f52336004525f516020614e255f395f51905f5260245260445ffd5b335f9081527fb835ef30b07ac2ae2a43d2f890ca34f2c6198a6dcffa0223f2fe7e388a9175bc602052604090205460ff16156142b457565b63e2517d3f60e01b5f52336004525f516020614ec55f395f51905f5260245260445ffd5b5f8181525f516020614ee55f395f51905f526020908152604080832033845290915290205460ff16156143085750565b63e2517d3f60e01b5f523360045260245260445ffd5b60405163a9059cbb60e01b60208201526001600160a01b0392909216602483015260448083019390935291815261435a91610eed606483613a28565b565b6143668282614b15565b918261437157505090565b5f9182525f516020614e655f395f51905f52602052604090912061439e916001600160a01b031690614c6d565b5090565b6143ac8282614ba6565b91826143b757505090565b5f9182525f516020614e655f395f51905f52602052604090912061439e916001600160a01b031690614cc1565b604051636eb1769f60e11b81523060048201525f516020614e055f395f51905f5260248201529060208260448173917af46b3c3c6e1bb7286b9f59637fb7c65851fb5afa9182156136b1575f9261446c575b508101809111613cd15761435a905f516020614e055f395f51905f5273917af46b3c3c6e1bb7286b9f59637fb7c65851fb614816565b9091506020813d602011614498575b8161448860209383613a28565b81010312610c695751905f614436565b3d915061447b565b604051636eb1769f60e11b81523060048201526001600160a01b03831660248201529092909190602083806044810103816001600160a01b0388165afa9283156136b1575f936144fe575b508201809211613cd15761435a92614816565b9092506020813d60201161452a575b8161451a60209383613a28565b81010312610c695751915f6144eb565b3d915061450d565b6001600160a01b031673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee810361455b57503190565b6040516370a0823160e01b81526001600160a01b039092166004830152602090829060249082905afa9081156136b1575f91614595575090565b90506020813d6020116145bc575b816145b060209383613a28565b81010312610c69575190565b3d91506145a3565b9190915f838202915f198582099183808410930392808403931461465457826ec097ce7bc90715b34b9f1000000000111561464257507f356317ffa45f828d2a41175b2aed3a20e7fdd4a4e46cc11944d93b01be7b171193946ec097ce7bc90715b34b9f1000000000910990828211900360dc1b910360241c170290565b634e487b71905260116020526024601cfd5b5050506ec097ce7bc90715b34b9f10000000009192500490565b9190915f838202915f19858209918380841093039280840393146146de5782670de0b6b3a7640000111561464257507faccb18165bd6fe31ae1cf318dc5b51eee0e1ba569b88cd74c1773b91fac106699394670de0b6b3a7640000910990828211900360ee1b910360121c170290565b505050670de0b6b3a76400009192500490565b905f6126488302905f196126488509908280831092039180830392146147595781612710111561464257506127106126487fbc01a36e2eb1c432ca57a786c226809d495182a9930be0ded288ce703afb7e9194950990828211900360fc1b910360041c170290565b505061271090049150565b91818302915f19818509938380861095039480860395146147f457848311156147dc5790829109815f0382168092046002816003021880820260020302808202600203028082026002030280820260020302808202600203028091026002030293600183805f03040190848311900302920304170290565b82634e487b715f52156003026011186020526024601cfd5b505091508115614802570490565b634e487b7160e01b5f52601260045260245ffd5b60405163095ea7b360e01b60208083019182526001600160a01b0385166024840152604480840196909652948252929390925f90614855606486613a28565b84519082855af15f513d826148b0575b50501561487157505050565b60405163095ea7b360e01b60208201526001600160a01b0390931660248401525f604480850191909152835261435a92610eed90610ee7606482613a28565b9091506148cd57506001600160a01b0381163b15155b5f80614865565b6001146148c6565b905f602091828151910182855af1156136b1575f513d61492457506001600160a01b0381163b155b6149045750565b635274afe760e01b5f9081526001600160a01b0391909116600452602490fd5b600114156148fd565b6001600160a01b0381165f9081527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d602052604090205460ff166149c4576001600160a01b03165f8181527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d60205260408120805460ff191660011790553391905f516020614de55f395f51905f528180a4600190565b505f90565b6001600160a01b0381165f9081527f511d0314ee32589a99ab73eccd900c257efd9224711c0e5aadda466017c07f6c602052604090205460ff166149c4576001600160a01b03165f8181527f511d0314ee32589a99ab73eccd900c257efd9224711c0e5aadda466017c07f6c60205260408120805460ff191660011790553391905f516020614e255f395f51905f52905f516020614de55f395f51905f529080a4600190565b6001600160a01b0381165f9081527fb835ef30b07ac2ae2a43d2f890ca34f2c6198a6dcffa0223f2fe7e388a9175bc602052604090205460ff166149c4576001600160a01b03165f8181527fb835ef30b07ac2ae2a43d2f890ca34f2c6198a6dcffa0223f2fe7e388a9175bc60205260408120805460ff191660011790553391905f516020614ec55f395f51905f52905f516020614de55f395f51905f529080a4600190565b5f8181525f516020614ee55f395f51905f52602090815260408083206001600160a01b038616845290915290205460ff16614ba0575f8181525f516020614ee55f395f51905f52602090815260408083206001600160a01b0395909516808452949091528120805460ff19166001179055339291905f516020614de55f395f51905f529080a4600190565b50505f90565b5f8181525f516020614ee55f395f51905f52602090815260408083206001600160a01b038616845290915290205460ff1615614ba0575f8181525f516020614ee55f395f51905f52602090815260408083206001600160a01b0395909516808452949091528120805460ff19169055339291907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9080a4600190565b60ff5f516020614f055f395f51905f525460401c1615614c5e57565b631afcd79f60e31b5f5260045ffd5b6001810190825f528160205260405f2054155f14614cba578054600160401b811015613a1457614ca7610c03826001879401855584613aaa565b905554915f5260205260405f2055600190565b5050505f90565b906001820191815f528260205260405f20548015155f14614d7e575f198101818111613cd15782545f19810191908211613cd157818103614d49575b50505080548015614d35575f190190614d168282613aaa565b8154905f199060031b1b19169055555f526020525f6040812055600190565b634e487b7160e01b5f52603160045260245ffd5b614d69614d59610c039386613aaa565b90549060031b1c92839286613aaa565b90555f528360205260405f20555f8080614cfd565b505050505f90565b90614daa5750805115614d9b57805190602001fd5b63d6bda27560e01b5f5260045ffd5b81511580614ddb575b614dbb575090565b639996b31560e01b5f9081526001600160a01b0391909116600452602490fd5b50803b15614db356fe2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d000000000000000000000000db57a53c428a9fafcbfeffb6dd80d0f427543695af290d8680820aad922855f39b306097b20e28774d6c1ad35a20325630c3a02c0000000000000000000000008f73b65b4caaf64fba2af91cc5d4a2a1318e5d8cc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e82371705932000360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc000000000000000000000000c271fc70dd9e678ac1ab632f797894fe4be2c3458fe94c374ec92811fc20be7dcfaebd09fc0de5127d6ad0a08f1ae166a58b1d6402dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00a26469706673582212208ac5af6e73d5b0893445f0051ec0b04cbd94ff346a30d5d035908032b30e99be64736f6c634300081c0033f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00