0 txs
0 calls
constructor
constructor(string _name, string _symbol, address _underlying, address _creditVault)
functions
allowance
viewfunction allowance(address owner, address spender) view returns (uint256)
balanceOf
viewfunction balanceOf(address account) view returns (uint256)
creditVault
viewfunction creditVault() view returns (address)
decimals
viewfunction decimals() view returns (uint8)
depositPaused
viewfunction depositPaused() view returns (bool)
earlyWithdrawFeeBips
viewfunction earlyWithdrawFeeBips() view returns (uint256)
exchangeRate
viewfunction exchangeRate() view returns (uint256)
getSharesByUnderlying
viewfunction getSharesByUnderlying(uint256 underlyingAmount) view returns (uint256)
getUnderlyingByShares
viewfunction getUnderlyingByShares(uint256 sharesAmount) view returns (uint256)
lastDepositTimestamp
viewfunction lastDepositTimestamp(address) view returns (uint256)
minDeposit
viewfunction minDeposit() view returns (uint256)
minRedeemInterval
viewfunction minRedeemInterval() view returns (uint256)
name
viewfunction name() view returns (string)
owner
viewfunction owner() view returns (address)
pendingOwner
viewfunction pendingOwner() view returns (address)
redeemCooldownExempt
viewfunction redeemCooldownExempt(address) view returns (bool)
redeemPaused
viewfunction redeemPaused() view returns (bool)
shares
viewfunction shares(address) view returns (uint256)
sharesOf
viewfunction sharesOf(address account) view returns (uint256)
symbol
viewfunction symbol() view returns (string)
totalShares
viewfunction totalShares() view returns (uint256)
totalSupply
viewfunction totalSupply() view returns (uint256)
totalUnderlying
viewfunction totalUnderlying() view returns (uint256)
trustedOperators
viewfunction trustedOperators(address) view returns (bool)
underlying
viewfunction underlying() view returns (address)
acceptOwnership
nonpayablefunction acceptOwnership()
approve
nonpayablefunction approve(address spender, uint256 amount) returns (bool)
decreaseAllowance
nonpayablefunction decreaseAllowance(address spender, uint256 subtractedValue) returns (bool)
deposit
nonpayablefunction deposit(uint256 amount) returns (uint256 sharesToMint)
depositFor
nonpayablefunction depositFor(address to, uint256 amount) returns (uint256 sharesToMint)
distributeYield
nonpayablefunction distributeYield(uint256 yieldAmount)
increaseAllowance
nonpayablefunction increaseAllowance(address spender, uint256 addedValue) returns (bool)
pauseDeposit
nonpayablefunction pauseDeposit()
pauseRedeem
nonpayablefunction pauseRedeem()
redeem
nonpayablefunction redeem(uint256 sharesToBurn) returns (uint256 underlyingAmount)
redeemTo
nonpayablefunction redeemTo(uint256 sharesToBurn, address to) returns (uint256 underlyingAmount)
renounceOwnership
nonpayablefunction renounceOwnership()
setEarlyWithdrawFeeBips
nonpayablefunction setEarlyWithdrawFeeBips(uint256 _earlyWithdrawFeeBips)
setMinDeposit
nonpayablefunction setMinDeposit(uint256 _minDeposit)
setMinRedeemInterval
nonpayablefunction setMinRedeemInterval(uint256 _interval)
setRedeemCooldownExempt
nonpayablefunction setRedeemCooldownExempt(address account, bool status)
setTrustedOperator
nonpayablefunction setTrustedOperator(address account, bool status)
transfer
nonpayablefunction transfer(address to, uint256 amount) returns (bool)
transferFrom
nonpayablefunction transferFrom(address from, address to, uint256 amount) returns (bool)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
transferShares
nonpayablefunction transferShares(address recipient, uint256 sharesAmount) returns (uint256)
unpauseDeposit
nonpayablefunction unpauseDeposit()
unpauseRedeem
nonpayablefunction unpauseRedeem()
events
Approval
event Approval(address indexed owner, address indexed spender, uint256 value)
DepositPaused
event DepositPaused()
DepositUnpaused
event DepositUnpaused()
EarlyWithdrawFeeBipsUpdated
event EarlyWithdrawFeeBipsUpdated(uint256 oldFeeBips, uint256 newFeeBips)
MinDepositUpdated
event MinDepositUpdated(uint256 oldAmount, uint256 newAmount)
MinRedeemIntervalUpdated
event MinRedeemIntervalUpdated(uint256 newInterval)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
OwnershipTransferStarted
event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner)
RedeemCooldownExemptUpdated
event RedeemCooldownExemptUpdated(address indexed account, bool status)
RedeemPaused
event RedeemPaused()
RedeemUnpaused
event RedeemUnpaused()
SharesBurned
event SharesBurned(address indexed from, address indexed to, uint256 shares, uint256 underlyingAmount)
SharesMinted
event SharesMinted(address indexed from, address indexed to, uint256 shares, uint256 underlyingAmount)
Transfer
event Transfer(address indexed from, address indexed to, uint256 value)
TransferShares
event TransferShares(address indexed from, address indexed to, uint256 shares)
TrustedOperatorUpdated
event TrustedOperatorUpdated(address indexed account, bool status)
YieldDistributed
event YieldDistributed(uint256 yieldAmount)
errors
BelowMinimumDeposit
error BelowMinimumDeposit()
FeaturePaused
error FeaturePaused()
InsufficientShares
error InsufficientShares()
InvalidFeeBips
error InvalidFeeBips()
NotTrustedOperator
error NotTrustedOperator()
NoYieldToDistribute
error NoYieldToDistribute()
OnlyCreditVault
error OnlyCreditVault()
PoolNotInitialized
error PoolNotInitialized()
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
TransferInCooldown
error TransferInCooldown()
TransferSelf
error TransferSelf()
TransferToContract
error TransferToContract()
ZeroAddress
error ZeroAddress()
ZeroAmount
error ZeroAmount()
creation bytecode
0x6080604052617080600c55348015610015575f5ffd5b50604051612dfa380380612dfa8339810160408190526100349161023f565b838360036100428382610348565b50600461004f8282610348565b50505061006861006361011660201b60201c565b61011a565b600780546001600160a01b038085166001600160a01b0319928316811790935560088054918516919092161790556040805163313ce56760e01b8152905163313ce567916004808201926020929091908290030181865afa1580156100cf573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100f39190610402565b600860146101000a81548160ff021916908360ff16021790555050505050610429565b3390565b600680546001600160a01b031916905561013381610136565b50565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f8301126101aa575f5ffd5b81516001600160401b038111156101c3576101c3610187565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101f1576101f1610187565b604052818152838201602001851015610208575f5ffd5b8160208501602083015e5f918101602001919091529392505050565b80516001600160a01b038116811461023a575f5ffd5b919050565b5f5f5f5f60808587031215610252575f5ffd5b84516001600160401b03811115610267575f5ffd5b6102738782880161019b565b602087015190955090506001600160401b03811115610290575f5ffd5b61029c8782880161019b565b9350506102ab60408601610224565b91506102b960608601610224565b905092959194509250565b600181811c908216806102d857607f821691505b6020821081036102f657634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561034357805f5260205f20601f840160051c810160208510156103215750805b601f840160051c820191505b81811015610340575f815560010161032d565b50505b505050565b81516001600160401b0381111561036157610361610187565b6103758161036f84546102c4565b846102fc565b6020601f8211600181146103a7575f83156103905750848201515b5f19600385901b1c1916600184901b178455610340565b5f84815260208120601f198516915b828110156103d657878501518255602094850194600190920191016103b6565b50848210156103f357868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b5f60208284031215610412575f5ffd5b815160ff81168114610422575f5ffd5b9392505050565b6129c4806104365f395ff3fe608060405234801561000f575f5ffd5b506004361061030f575f3560e01c806379ba50971161019d578063b4317d53116100e8578063db006a7511610093578063e30c39781161006e578063e30c3978146106ec578063f2fde38b1461070a578063f5eb42dc1461071d575f5ffd5b8063db006a7514610674578063dd62ed3e14610687578063e2498f72146106cc575f5ffd5b8063c70920bc116100c3578063c70920bc14610639578063c8cc5cd814610642578063ce7c2ac214610655575f5ffd5b8063b4317d53146105f1578063b6b55f2514610613578063bfcd254214610626575f5ffd5b806395d89b4111610148578063a9059cbb11610123578063a9059cbb146105b0578063af3345d1146105c3578063b235d468146105cb575f5ffd5b806395d89b4114610582578063a285f1c31461058a578063a457c2d71461059d575f5ffd5b80638da5cb5b116101785780638da5cb5b1461053e5780638fcb4e5b1461055c5780638fcc9cfb1461056f575f5ffd5b806379ba50971461050157806386b6541d14610509578063877ce6d71461051c575f5ffd5b80633d37a45d1161025d578063655d8dec1161020857806370a08231116101e357806370a08231146104d3578063715018a6146104e6578063761487e0146104ee575f5ffd5b8063655d8dec1461046757806369026e88146104865780636f307dc31461048e575f5ffd5b8063445331131161023857806344533113146104395780635157ced51461044c57806352c08bb414610454575f5ffd5b80633d37a45d1461041e578063416f40591461042757806341b3d18514610430575f5ffd5b80632f4f21e2116102bd578063395093511161029857806339509351146103fa5780633a98ef391461040d5780633ba0b9a914610416575f5ffd5b80632f4f21e2146103af578063313ce567146103c257806332ec84d2146103f2575f5ffd5b806316a1075a116102ed57806316a1075a1461037557806318160ddd1461038a57806323b872dd1461039c575f5ffd5b806302befd241461031357806306fdde031461034d578063095ea7b314610362575b5f5ffd5b6006546103389074010000000000000000000000000000000000000000900460ff1681565b60405190151581526020015b60405180910390f35b610355610752565b60405161034491906126b7565b61033861037036600461272d565b6107e2565b610388610383366004612755565b6107fb565b005b600a545b604051908152602001610344565b6103386103aa36600461276c565b610885565b61038e6103bd36600461272d565b6108a8565b60085474010000000000000000000000000000000000000000900460ff1660405160ff9091168152602001610344565b6103886109b2565b61033861040836600461272d565b610a24565b61038e600b5481565b61038e610a6f565b61038e600c5481565b61038e60095481565b61038e600d5481565b6103886104473660046127b3565b610aad565b610388610b8c565b61038e6104623660046127e8565b610be6565b61038e610475366004612812565b60106020525f908152604090205481565b610388610ce5565b6007546104ae9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610344565b61038e6104e1366004612812565b610d56565b610388610d84565b61038e6104fc366004612755565b610d97565b610388610dbf565b610388610517366004612755565b610e79565b61033861052a366004612812565b60116020525f908152604090205460ff1681565b60055473ffffffffffffffffffffffffffffffffffffffff166104ae565b61038e61056a36600461272d565b610ebd565b61038861057d366004612755565b610ee8565b610355610f2e565b6103886105983660046127b3565b610f3d565b6103386105ab36600461272d565b611014565b6103386105be36600461272d565b6110e4565b6103886110f1565b600654610338907501000000000000000000000000000000000000000000900460ff1681565b6103386105ff366004612812565b600f6020525f908152604090205460ff1681565b61038e610621366004612755565b61114b565b61038e610634366004612755565b6111c5565b61038e600a5481565b610388610650366004612755565b6111e3565b61038e610663366004612812565b600e6020525f908152604090205481565b61038e610682366004612755565b6112ee565b61038e61069536600461282b565b73ffffffffffffffffffffffffffffffffffffffff9182165f90815260016020908152604080832093909416825291909152205490565b6008546104ae9073ffffffffffffffffffffffffffffffffffffffff1681565b60065473ffffffffffffffffffffffffffffffffffffffff166104ae565b610388610718366004612812565b611358565b61038e61072b366004612812565b73ffffffffffffffffffffffffffffffffffffffff165f908152600e602052604090205490565b60606003805461076190612853565b80601f016020809104026020016040519081016040528092919081815260200182805461078d90612853565b80156107d85780601f106107af576101008083540402835291602001916107d8565b820191905f5260205f20905b8154815290600101906020018083116107bb57829003601f168201915b5050505050905090565b5f336107ef818585611408565b60019150505b92915050565b6108036115ba565b6103e881111561083f576040517f82c9638200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600980549082905560408051828152602081018490527f6730dde45b44b81615893b00081ca1865c1512048fef1dc7b3a8ec4f3da0dae691015b60405180910390a15050565b5f3361089285828561163b565b61089d858585611711565b506001949350505050565b5f6108b1611734565b60065474010000000000000000000000000000000000000000900460ff168015610907576040517faadfaddd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8416610954576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b335f908152600f602052604090205460ff1661099c576040517ffb837df400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109a73385856117b8565b9150506107f5611a28565b6109ba6115ba565b600680547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1675010000000000000000000000000000000000000000001790556040517f60b78ed2d882d2d2387ad2b7119495f7c99dd9a9c191d3d02c35982a0750bcc6905f90a1565b335f81815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906107ef9082908690610a6a9087906128d1565b611408565b5f600b545f03610a865750670de0b6b3a764000090565b600b54600a54610a9e90670de0b6b3a76400006128e4565b610aa891906128fb565b905090565b610ab56115ba565b73ffffffffffffffffffffffffffffffffffffffff8216610b02576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82165f8181526011602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001685151590811790915591519182527fce0277a65558e646cf52d00a8e5a74cc06c339d7a6277d7333af0d81cad38ed491015b60405180910390a25050565b610b946115ba565b600680547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690556040517f8c357fe0f696f2972294914e16a16c64a121f9a529a92b9d87fc7a79ec170f2c905f90a1565b5f610bef611734565b6006547501000000000000000000000000000000000000000000900460ff168015610c46576040517faadfaddd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8316610c93576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b335f908152600f602052604090205460ff16610cdb576040517ffb837df400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109a78484611a52565b610ced6115ba565b600680547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790556040517f35edea304410d4256c657d14535db2c0a3e9c75dcc42c5c9781c4e8171dad7e0905f90a1565b73ffffffffffffffffffffffffffffffffffffffff81165f908152600e60205260408120546107f5906111c5565b610d8c6115ba565b610d955f611d9e565b565b5f600b545f03610da5575090565b600a54600b54610db590846128e4565b6107f591906128fb565b600654339073ffffffffffffffffffffffffffffffffffffffff168114610e6d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f74207468652060448201527f6e6577206f776e6572000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b610e7681611d9e565b50565b610e816115ba565b600c8190556040518181527f4bc7bce1799e8fb5e7c6565f8090db1a4fec630506908c783abacc2a6b6d2f38906020015b60405180910390a150565b5f610ec9338484611dcf565b5f610ed3836111c5565b9050610ee133858386611f73565b9392505050565b610ef06115ba565b600d80549082905560408051828152602081018490527fb566d3df2587c9e70b06b6419bdeeeeec8ca8cd60e4c48c6baad0d94c46809c79101610879565b60606004805461076190612853565b610f456115ba565b73ffffffffffffffffffffffffffffffffffffffff8216610f92576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82165f818152600f602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001685151590811790915591519182527f2e4746592fbf3f346fff4993672957b8e58f533eaaca7a25d1676602f1150a039101610b80565b335f81815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156110d7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610e64565b61089d8286868403611408565b5f336107ef818585611711565b6110f96115ba565b600680547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1690556040517f687bf6e69dbabcc95e11041b4816a83f36dcf6ef647f6acf63e7469d28f5ea73905f90a1565b5f611154611734565b60065474010000000000000000000000000000000000000000900460ff1680156111aa576040517faadfaddd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111b53333856117b8565b9150506111c0611a28565b919050565b5f600b545f036111d3575090565b600b54600a54610db590846128e4565b5f600b541161121e576040517f486aa30700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8111611257576040517fd665a9fd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60085473ffffffffffffffffffffffffffffffffffffffff1633146112a8576040517f13300f9300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600a5f8282546112b991906128d1565b90915550506040518181527fe8ed0a697f15301f06fd3d30bc896682e7826c5397076a3eda05844cfc35648090602001610eb2565b5f6112f7611734565b6006547501000000000000000000000000000000000000000000900460ff16801561134e576040517faadfaddd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111b58333611a52565b6113606115ba565b6006805473ffffffffffffffffffffffffffffffffffffffff83167fffffffffffffffffffffffff000000000000000000000000000000000000000090911681179091556113c360055473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b73ffffffffffffffffffffffffffffffffffffffff83166114aa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610e64565b73ffffffffffffffffffffffffffffffffffffffff821661154d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610e64565b73ffffffffffffffffffffffffffffffffffffffff8381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60055473ffffffffffffffffffffffffffffffffffffffff163314610d95576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610e64565b73ffffffffffffffffffffffffffffffffffffffff8381165f908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461170b57818110156116fe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610e64565b61170b8484848403611408565b50505050565b5f61171b82610d97565b9050611728848483611dcf565b61170b84848484611f73565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005c1561178d576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d957f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f006001612047565b5f600d5482101580156117ca57505f82115b611800576040517f5bbe862200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6007546008546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201525f9291909116906370a0823190602401602060405180830381865afa158015611874573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118989190612933565b6008546007549192506118c79173ffffffffffffffffffffffffffffffffffffffff908116918891168661204e565b6007546008546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152839291909116906370a0823190602401602060405180830381865afa15801561193b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061195f9190612933565b611969919061294a565b9250600b545f0361197c57829150611999565b600a54600b5461198c90856128e4565b61199691906128fb565b91505b6119a384836120e3565b82600a5f8282546119b491906128d1565b909155505073ffffffffffffffffffffffffffffffffffffffff8481165f81815260106020908152604091829020429055815186815290810187905291928816917fd9c8415d46bc958abafa67ce0dad25daa34cd66edf0fba6e9bf3cc0fc8bfe1e0910160405180910390a3509392505050565b610d957f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005f612047565b5f5f8311611a8c576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b335f908152600e6020526040902054831115611ad4576040517f3999656700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600b54600a54611ae490856128e4565b611aee91906128fb565b600c54335f90815260106020526040902054919250611b0c916128d1565b42108015611b1b57505f600954115b8015611b365750335f9081526011602052604090205460ff16155b15611b635761271060095482611b4c91906128e4565b611b5691906128fb565b611b60908261294a565b90505b611b6d33846121be565b6007546008546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201525f9291909116906370a0823190602401602060405180830381865afa158015611be1573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c059190612933565b6008546040517fc407687600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301526024820186905292935091169063c4076876906044015f604051808303815f87803b158015611c78575f5ffd5b505af1158015611c8a573d5f5f3e3d5ffd5b50506007546008546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152911692506370a082319150602401602060405180830381865afa158015611cfe573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d229190612933565b611d2c908261294a565b915081600a5f828254611d3f919061294a565b9091555050604080518581526020810184905273ffffffffffffffffffffffffffffffffffffffff85169133917fdf98f11672c77edcc0f4ed1da404198a75887435a8da9173ef3d22969dcf318c910160405180910390a35092915050565b600680547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055610e7681612290565b73ffffffffffffffffffffffffffffffffffffffff831615801590611e09575073ffffffffffffffffffffffffffffffffffffffff821615155b611e3f576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611ea4576040517f986d142100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff831603611ef3576040517f3a49fd5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611efc83612306565b73ffffffffffffffffffffffffffffffffffffffff83165f908152600e602052604081208054839290611f3090849061294a565b909155505073ffffffffffffffffffffffffffffffffffffffff82165f908152600e602052604081208054839290611f699084906128d1565b9091555050505050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611fd291815260200190565b60405180910390a38273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9d9c909296d9c674451c0c24f02cb64981eb3b727f99865939192f880a755dcb8360405161203991815260200190565b60405180910390a350505050565b80825d5050565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261170b9085906123a0565b5f811161211c576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216612169576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82165f908152600e60205260408120805483929061219d9084906128d1565b9250508190555080600b5f8282546121b591906128d1565b90915550505050565b5f81116121f7576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216612244576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82165f908152600e60205260408120805483929061227890849061294a565b9250508190555080600b5f8282546121b5919061294a565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b600c5473ffffffffffffffffffffffffffffffffffffffff82165f908152601060205260409020544291612339916128d1565b11158061236a575073ffffffffffffffffffffffffffffffffffffffff81165f9081526011602052604090205460ff165b610e76576040517f188d0c1700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f612401826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166124b29092919063ffffffff16565b905080515f1480612421575080806020019051810190612421919061295d565b6124ad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610e64565b505050565b60606124c084845f856124c8565b949350505050565b60608247101561255a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610e64565b5f5f8673ffffffffffffffffffffffffffffffffffffffff1685876040516125829190612978565b5f6040518083038185875af1925050503d805f81146125bc576040519150601f19603f3d011682016040523d82523d5f602084013e6125c1565b606091505b50915091506125d2878383876125dd565b979650505050505050565b606083156126725782515f0361266b5773ffffffffffffffffffffffffffffffffffffffff85163b61266b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610e64565b50816124c0565b6124c083838151156126875781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6491905b602081525f82518060208401528060208501604085015e5f6040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146111c0575f5ffd5b5f5f6040838503121561273e575f5ffd5b6127478361270a565b946020939093013593505050565b5f60208284031215612765575f5ffd5b5035919050565b5f5f5f6060848603121561277e575f5ffd5b6127878461270a565b92506127956020850161270a565b929592945050506040919091013590565b8015158114610e76575f5ffd5b5f5f604083850312156127c4575f5ffd5b6127cd8361270a565b915060208301356127dd816127a6565b809150509250929050565b5f5f604083850312156127f9575f5ffd5b823591506128096020840161270a565b90509250929050565b5f60208284031215612822575f5ffd5b610ee18261270a565b5f5f6040838503121561283c575f5ffd5b6128458361270a565b91506128096020840161270a565b600181811c9082168061286757607f821691505b60208210810361289e577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808201808211156107f5576107f56128a4565b80820281158282048414176107f5576107f56128a4565b5f8261292e577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b5f60208284031215612943575f5ffd5b5051919050565b818103818111156107f5576107f56128a4565b5f6020828403121561296d575f5ffd5b8151610ee1816127a6565b5f82518060208501845e5f92019182525091905056fea2646970667358221220c97b1a5f3933765e15b8d03e376c7bbdb4b8882a5329f37317dbcebfc88cda3b64736f6c634300081c0033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000868fced65edbf0056c4163515dd840e9f287a4c3000000000000000000000000ba8db0caf781cac69b6acf6c848ac148264cc05d000000000000000000000000000000000000000000000000000000000000000f4e61746976652d4c503a205369676e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4e542d4c502d5349474e00000000000000000000000000000000000000000000