0 txs
6.5k calls
constructor
constructor()
functions
auctions
viewfunction auctions(uint256) view returns (address)
bondToken
viewfunction bondToken() view returns (address)
couponToken
viewfunction couponToken() view returns (address)
ETH
viewfunction ETH() view returns (address)
feeBeneficiary
viewfunction feeBeneficiary() view returns (address)
getCreateAmount
purefunction getCreateAmount(uint8 tokenType, uint256 depositAmount, uint256 bondSupply, uint256 levSupply, uint256 poolReserves, uint256 ethPrice, uint8 oracleDecimals) pure returns (uint256)
getOracleDecimals
viewfunction getOracleDecimals(address quote, address base) view returns (uint8 decimals)
getOraclePrice
viewfunction getOraclePrice(address quote, address base) view returns (uint256)
getPoolInfo
viewfunction getPoolInfo() view returns (tuple info)
getRedeemAmount
purefunction getRedeemAmount(uint8 tokenType, uint256 depositAmount, uint256 bondSupply, uint256 levSupply, uint256 poolReserves, uint256 ethPrice, uint8 oracleDecimals, uint256 marketRate) pure returns (uint256)
lToken
viewfunction lToken() view returns (address)
name
viewfunction name() view returns (string)
oracleFeeds
viewfunction oracleFeeds() view returns (address)
paused
viewfunction paused() view returns (bool)
poolFactory
viewfunction poolFactory() view returns (address)
reserveToken
viewfunction reserveToken() view returns (address)
simulateCreate
viewfunction simulateCreate(uint8 tokenType, uint256 depositAmount) view returns (uint256)
simulateRedeem
viewfunction simulateRedeem(uint8 tokenType, uint256 depositAmount) view returns (uint256)
USD
viewfunction USD() view returns (address)
claimFees
nonpayablefunction claimFees()
create
nonpayablefunction create(uint8 tokenType, uint256 depositAmount, uint256 minAmount, uint256 deadline, address onBehalfOf) returns (uint256)
create
nonpayablefunction create(uint8 tokenType, uint256 depositAmount, uint256 minAmount) returns (uint256)
distribute
nonpayablefunction distribute()
initialize
nonpayablefunction initialize(address _poolFactory, uint256 _fee, address _reserveToken, address _dToken, address _lToken, address _couponToken, uint256 _sharesPerToken, uint256 _distributionPeriod, address _feeBeneficiary, address _oracleFeeds, bool _pauseOnCreation)
pause
nonpayablefunction pause()
redeem
nonpayablefunction redeem(uint8 tokenType, uint256 depositAmount, uint256 minAmount, uint256 deadline, address onBehalfOf) returns (uint256)
redeem
nonpayablefunction redeem(uint8 tokenType, uint256 depositAmount, uint256 minAmount) returns (uint256)
setAuctionPeriod
nonpayablefunction setAuctionPeriod(uint256 _auctionPeriod)
setDistributionPeriod
nonpayablefunction setDistributionPeriod(uint256 _distributionPeriod)
setFee
nonpayablefunction setFee(uint256 _fee)
setFeeBeneficiary
nonpayablefunction setFeeBeneficiary(address _feeBeneficiary)
setName
nonpayablefunction setName(string _name)
setPoolSaleLimit
nonpayablefunction setPoolSaleLimit(uint256 _poolSaleLimit)
setSharesPerToken
nonpayablefunction setSharesPerToken(uint256 _sharesPerToken)
startAuction
nonpayablefunction startAuction()
transferAllReserveAssets
nonpayablefunction transferAllReserveAssets(address to)
transferReserveToAuction
nonpayablefunction transferReserveToAuction(uint256 amount)
unpause
nonpayablefunction unpause()
zeroLastSharesPerToken
nonpayablefunction zeroLastSharesPerToken()
events
AuctionPeriodChanged
event AuctionPeriodChanged(uint256 oldPeriod, uint256 newPeriod)
AuctionStarted
event AuctionStarted(address auction, uint256 period, uint256 couponAmountToDistribute)
Distributed
event Distributed(uint256 period, uint256 amount, address distributor, address distributorAdapter)
DistributionPeriodChanged
event DistributionPeriodChanged(uint256 oldPeriod, uint256 newPeriod)
DistributionRollOver
event DistributionRollOver(uint256 period, uint256 shares)
FeeChanged
event FeeChanged(uint256 oldFee, uint256 newFee)
FeeClaimed
event FeeClaimed(address beneficiary, uint256 amount)
Initialized
event Initialized(uint64 version)
NoFeesToClaim
event NoFeesToClaim()
Paused
event Paused(address account)
PoolSaleLimitChanged
event PoolSaleLimitChanged(uint256 oldThreshold, uint256 newThreshold)
SharesPerTokenChanged
event SharesPerTokenChanged(uint256 oldSharesPerToken, uint256 sharesPerToken)
TokensCreated
event TokensCreated(address caller, address indexed onBehalfOf, uint8 tokenType, uint256 depositedAmount, uint256 mintedAmount)
TokensRedeemed
event TokensRedeemed(address caller, address indexed onBehalfOf, uint8 tokenType, uint256 depositedAmount, uint256 redeemedAmount)
Unpaused
event Unpaused(address account)
errors
AccessDenied
error AccessDenied()
AddressEmptyCode
error AddressEmptyCode(address target)
AddressInsufficientBalance
error AddressInsufficientBalance(address account)
AlreadyInitialized
error AlreadyInitialized()
AuctionAlreadyStarted
error AuctionAlreadyStarted()
AuctionIsOngoing
error AuctionIsOngoing()
AuctionPeriodPassed
error AuctionPeriodPassed()
CallerIsNotAuction
error CallerIsNotAuction()
DistributionPeriod
error DistributionPeriod()
DistributionPeriodNotPassed
error DistributionPeriodNotPassed()
EnforcedPause
error EnforcedPause()
ExpectedPause
error ExpectedPause()
FailedInnerCall
error FailedInnerCall()
FeeTooHigh
error FeeTooHigh()
InvalidInitialization
error InvalidInitialization()
MinAmount
error MinAmount()
NoFeedFound
error NoFeedFound()
NoPriceFound
error NoPriceFound()
NotBeneficiary
error NotBeneficiary()
NotInitializing
error NotInitializing()
PoolSaleLimitTooLow
error PoolSaleLimitTooLow()
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
StalePrice
error StalePrice()
TransactionTooOld
error TransactionTooOld()
ZeroAmount
error ZeroAmount()
ZeroDebtSupply
error ZeroDebtSupply()
ZeroLeverageSupply
error ZeroLeverageSupply()
creation bytecode
0x6080806040523460aa575f5160206147f95f395f51905f525460ff8160401c16609b576002600160401b03196001600160401b038216016049575b60405161474a90816100af8239f35b6001600160401b0319166001600160401b039081175f5160206147f95f395f51905f525581527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a15f80603a565b63f92ee8a960e01b5f5260045ffd5b5f80fdfe6080806040526004361015610012575f80fd5b5f905f3560e01c908163010ee18414612d9f5750806306fdde0314612cc157806310c0493214612b8f5780631bf6c21b14612b735780632bbc264314612b4c5780632e50408e146127ed5780633f4ba83a146126ae5780634219dc4014612685578063457cf77a1461265c578063492fb343146126335780634c2d8eff14612381578063571a26a01461234d5780635a0a3d821461224e5780635c975abb1461221f57806360246c8814611f7a57806369fe0e2d14611e2c5780636b64c769146118805780636e530e97146116dd578063724786cf146115225780637362d149146113375780637710c6d8146111b3578063801e2a1c146110055780638322fff214610fd65780638456cb5914610ea45780638afb27b014610e8a57806398c76b2314610e3f5780639d64bca414610e255780639fef3e6214610dd6578063c28f439214610dad578063c47f002714610b20578063c8c73e7c1461097e578063d294f09314610949578063d7032f2d146107a9578063e14a81a914610642578063e4fc6b6d14610621578063ec27344c146105cb578063f0fae20f14610428578063f4325d67146103ff5763f9d22289146101cb575f80fd5b34610329576101d936612e9c565b906101e79592949395614435565b6101ef614326565b42116103f0576101fd61428d565b610207858461328d565b9384106103e15783156103d2576001600160a01b0381166103cc575033905b6038546040516323b872dd60e01b60208201523360248201523060448201526064808201889052815261026c916001600160a01b0316610267608483612e2b565b614563565b60028310156103b8578261033b576039546001600160a01b0316803b15610337576040516340c10f1960e01b81526001600160a01b0384166004820152602481018690529082908290604490829084905af1801561032c57610314575b50506020935f5160206146755f395f51905f52915b6102f88560405193849360018060a01b031696338561446d565b0390a260015f5160206146b55f395f51905f5255604051908152f35b61031f828092612e2b565b61032957806102c9565b80fd5b6040513d84823e3d90fd5b5080fd5b603a546001600160a01b0316803b15610337576040516340c10f1960e01b81526001600160a01b0384166004820152602481018690529082908290604490829084905af1801561032c576103a3575b50506020935f5160206146755f395f51905f52916102de565b6103ae828092612e2b565b610329578061038a565b634e487b7160e01b81526021600452602490fd5b90610226565b631f2a200560e01b8252600482fd5b637632920360e11b8252600482fd5b632a0c45bf60e21b8252600482fd5b50346103295780600319360112610329576038546040516001600160a01b039091168152602090f35b50346103295761043736612e79565b9190610441614435565b610449614326565b61045161428d565b61045b8183613693565b9283106105bc5782156105ad5760028210156105995781610525576039546001600160a01b0316803b1561052157604051632770a7eb60e21b8152336004820152602481018390529085908290604490829084905af18015610516576104fd575b50825f5160206146555f395f51905f52916020955b506038546104eb90839033906001600160a01b031661449b565b6102f86040519283923396338561446d565b610508858092612e2b565b610512575f6104bc565b8380fd5b6040513d87823e3d90fd5b8480fd5b603a546001600160a01b0316803b1561052157604051632770a7eb60e21b8152336004820152602481018390529085908290604490829084905af1801561051657610584575b50825f5160206146555f395f51905f52916020956104d1565b61058f858092612e2b565b610512575f61056b565b634e487b7160e01b84526021600452602484fd5b631f2a200560e01b8452600484fd5b637632920360e11b8452600484fd5b5034610329576020366003190112610329576001600160a01b036105ed61418f565b1633036106125760385461060f906004359033906001600160a01b031661449b565b80f35b637f02311560e11b8152600490fd5b503461032957806003193601126103295761063a614326565b61060f613bd6565b503461032957602036600319011261032957603254604051635a9b40c560e11b815260048035926001600160a01b03169190602090829081855afa90811561079e578491610766575b50604051632474521560e21b815260048101919091523360248201529060209082908180604481015b03915afa90811561075b57839161072c575b501561071d57605a811061070e5760407fbd1900a27c42d19889a9199e391bdf6738af2b388f81b7d73db6013548a27e7d91603654908060365582519182526020820152a180f35b630eff748360e31b8252600482fd5b634ca8886760e01b8252600482fd5b61074e915060203d602011610754575b6107468183612e2b565b810190612f41565b5f6106c6565b503d61073c565b6040513d85823e3d90fd5b90506020813d602011610796575b8161078160209383612e2b565b8101031261079257516106b461068b565b5f80fd5b3d9150610774565b6040513d86823e3d90fd5b5034610329576040366003190112610329576107c3612e4d565b6107cb612e63565b8254604051637c86348360e11b81526001600160a01b038481166004830152838116602483015292939092909116602083604481845afa928315610516578593610928575b506001600160a01b03831615610890575b505060405163313ce56760e01b81529150602090829060049082906001600160a01b03165afa90811561032c5760209291610863575b5060ff60405191168152f35b6108839150823d8411610889575b61087b8183612e2b565b810190612f91565b5f610857565b503d610871565b604051637c86348360e11b81526001600160a01b0394851660048201529190931660248201529160209150829060449082905afa90811561032c5782916108f9575b506001600160a01b038116156108ea57805f80610821565b633458f58160e11b8252600482fd5b61091b915060203d602011610921575b6109138183612e2b565b810190612f22565b5f6108d2565b503d610909565b61094291935060203d602011610921576109138183612e2b565b915f610810565b5034610329578060031936011261032957610962614435565b61096a61428d565b60015f5160206146b55f395f51905f525580f35b50346103295760203660031901126103295760395460408051630e4455e160e21b8152600480359391929183919082906001600160a01b03165afa90811561075b578391610af0575b508252604060208190528220546001600160a01b0316610ae257603254604051635a9b40c560e11b81526001600160a01b0390911690602081600481855afa90811561079e578491610aae575b50604051632474521560e21b815260048101919091523360248201529060209082908180604481015b03915afa90811561075b578391610a8f575b501561071d5760407f8b63bdaf0f5981cb255f97be2272e1ea65195664462f04777a64848795236aed91603e549080603e5582519182526020820152a180f35b610aa8915060203d602011610754576107468183612e2b565b5f610a4f565b90506020813d602011610ada575b81610ac960209383612e2b565b810103126107925751610a3d610a14565b3d9150610abc565b625c4e7f60e31b8252600482fd5b610b12915060403d604011610b19575b610b0a8183612e2b565b810190613256565b505f6109c7565b503d610b00565b5034610329576020366003190112610329576004359067ffffffffffffffff82116103295736602383011215610329578160040135610b5e81612f06565b92610b6c6040519485612e2b565b8184523660248383010111610da9578183926024602093018387013784010152603254604051635a9b40c560e11b81526001600160a01b0390911690602081600481855afa90811561075b578391610d75575b50604051632474521560e21b815260048101919091523360248201529060209082908180604481015b03915afa90811561032c578291610d56575b5015610d4757815167ffffffffffffffff8111610d3357610c1c603754612dc2565b601f8111610ccb575b50602092601f8211600114610c6157928293829392610c56575b50508160011b915f199060031b1c19161760375580f35b015190505f80610c3f565b60378352601f198216935f5160206146d55f395f51905f5291845b868110610cb35750836001959610610c9b575b505050811b0160375580f35b01515f1960f88460031b161c191690555f8080610c8f565b91926020600181928685015181550194019201610c7c565b60378352601f820160051c5f5160206146d55f395f51905f52019060208310610d1e575b601f0160051c5f5160206146d55f395f51905f5201905b818110610d135750610c25565b838155600101610d06565b5f5160206146d55f395f51905f529150610cef565b634e487b7160e01b82526041600452602482fd5b634ca8886760e01b8152600490fd5b610d6f915060203d602011610754576107468183612e2b565b5f610bfa565b90506020813d602011610da1575b81610d9060209383612e2b565b810103126107925751610be8610bbf565b3d9150610d83565b8280fd5b50346103295780600319360112610329576039546040516001600160a01b039091168152602090f35b50346103295760e036600319011261032957600435906002821015610329576020610e1d83610e03612ef6565b9060a4359060843590606435906044359060243590613940565b604051908152f35b5034610329576020610e1d610e3936612ed7565b90613693565b50346103295761010036600319011261032957600435906002821015610329576020610e1d83610e6d612ef6565b60e4359160a4359060843590606435906044359060243590613525565b5034610329576020610e1d610e9e36612ed7565b9061328d565b503461032957806003193601126103295760325460405163b9fe5cf760e01b81526001600160a01b0390911690602081600481855afa90811561075b578391610fa2575b50604051632474521560e21b815260048101919091523360248201529060209082908180604481015b03915afa90811561032c578291610f83575b5015610d4757610f31614326565b600160ff195f5160206146955f395f51905f525416175f5160206146955f395f51905f52557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586020604051338152a180f35b610f9c915060203d602011610754576107468183612e2b565b5f610f23565b90506020813d602011610fce575b81610fbd60209383612e2b565b810103126107925751610f11610ee8565b3d9150610fb0565b5034610329578060031936011261032957602060405173eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee8152f35b50346103295760203660031901126103295761101f612e4d565b603254604051635a9b40c560e11b81526001600160a01b0390911690602081600481855afa90811561079e57849161117f575b50604051632474521560e21b815260048101919091523360248201529060209082908180604481015b03915afa90811561075b578391611160575b501561071d576001600160a01b03811615611129576038546040516370a0823160e01b81523060048201526001600160a01b0390911691602082602481865afa91821561079e5784926110f5575b50816110e5578380f35b6110ee9261449b565b5f80808380f35b9091506020813d602011611121575b8161111160209383612e2b565b810103126107925751905f6110db565b3d9150611104565b60405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b6044820152606490fd5b611179915060203d602011610754576107468183612e2b565b5f61108d565b90506020813d6020116111ab575b8161119a60209383612e2b565b81010312610792575161107b611052565b3d915061118d565b50346103295760203660031901126103295760395460408051630e4455e160e21b8152600480359391929183919082906001600160a01b03165afa90811561075b578391611317575b508252604060208190528220546001600160a01b0316610ae257603254604051635a9b40c560e11b81526001600160a01b0390911690602081600481855afa90811561079e5784916112e3575b50604051632474521560e21b815260048101919091523360248201529060209082908180604481015b03915afa90811561075b5783916112c4575b501561071d5760407f614ada6efad9c4a86e8541da67aa075e9e21e37f888c79f23807667abb742ce391603d549080603d5582519182526020820152a180f35b6112dd915060203d602011610754576107468183612e2b565b5f611284565b90506020813d60201161130f575b816112fe60209383612e2b565b810103126107925751611272611249565b3d91506112f1565b611330915060403d604011610b1957610b0a8183612e2b565b505f6111fc565b50346103295760203660031901126103295760395460408051630e4455e160e21b815260048035936001600160a01b03169290829081855afa90811561079e578491611502575b508352604060208190528320546001600160a01b03166114f457603254604051635a9b40c560e11b81526001600160a01b0390911690602081600481855afa9081156105165785916114c0575b50604051632474521560e21b815260048101919091523360248201529060209082908180604481015b03915afa90811561079e5784916114a1575b5015611492578290603c549280603c55813b15610da9578291602483926040519485938492637362d14960e01b845260048401525af1801561032c5761147d575b507f67b8059073c48bc22a124c60cf344bd97cf9b265f273fa09afe215b64eb5d2c2604083603c5482519182526020820152a180f35b8161148791612e2b565b61033757815f611447565b634ca8886760e01b8352600483fd5b6114ba915060203d602011610754576107468183612e2b565b5f611406565b90506020813d6020116114ec575b816114db60209383612e2b565b8101031261079257516113f46113cb565b3d91506114ce565b625c4e7f60e31b8352600483fd5b61151b915060403d604011610b1957610b0a8183612e2b565b505f61137e565b50346103295761153136612e9c565b9061153e94939294614435565b611546614326565b42116116ce5761155461428d565b61155e8284613693565b9384106116bf5783156116b057600283101561169c5782611628576039546001600160a01b0316803b1561162457604051632770a7eb60e21b8152336004820152602481018490529086908290604490829084905af1801561161957611604575b50905f5160206146555f395f51905f52916020955b506001600160a01b0381166115ff5750335b6038546102de90869083906001600160a01b031661449b565b6115e6565b61160f868092612e2b565b610521575f6115bf565b6040513d88823e3d90fd5b8580fd5b603a546001600160a01b0316803b1561162457604051632770a7eb60e21b8152336004820152602481018490529086908290604490829084905af1801561161957611687575b50905f5160206146555f395f51905f52916020956115d4565b611692868092612e2b565b610521575f61166e565b634e487b7160e01b85526021600452602485fd5b631f2a200560e01b8552600485fd5b637632920360e11b8552600485fd5b632a0c45bf60e21b8552600485fd5b5034610329576116ec36612e79565b9190926116f7614435565b6116ff614326565b61170761428d565b611711848361328d565b928310611871578215611862576038546040516323b872dd60e01b60208201523360248201523060448201526064808201879052815261175f916001600160a01b0316610267608483612e2b565b60028210156103b857816117ee576039546001600160a01b0316803b15610337576040516340c10f1960e01b8152336004820152602481018590529082908290604490829084905af1801561032c576117d9575b50505f5160206146755f395f51905f52826020946102f86040519283923396338561446d565b6117e4828092612e2b565b61032957806117b3565b603a546001600160a01b0316803b15610337576040516340c10f1960e01b8152336004820152602481018590529082908290604490829084905af1801561032c5761184d575b50505f5160206146755f395f51905f52826020946104eb565b611858828092612e2b565b6103295780611834565b631f2a200560e01b8152600490fd5b637632920360e11b8152600490fd5b5034610329578060031936011261032957611899614326565b603f54603d54906118aa8282612f70565b421115611e1d57906118bb91612f70565b603e54906118ca824292612f70565b10611e0e5760395460408051630e4455e160e21b81526001600160a01b03909216929082600481865afa91821561079e578492611dec575b50818452604060208190528420546001600160a01b0316611ddd5760405163313ce56760e01b8152602081600481875afa908115610516578591611dbe575b506040516323a70cf960e11b815290602082600481885afa908115611619576004928792611d9d575b5060ff821660ff8216115f14611d9457602081965b6040516318160ddd60e01b815294859182905afa8015611d895786938891611d50575b50926119b5816119be936119c49661439a565b92603c5461439a565b90612fb8565b9260011b926101fe60fe851694168403611d2857603b546001600160a01b031693611a0c9190611a0690611a01906119fb886143de565b9061326c565b61434d565b90612fcb565b6103e8810190818111611d3c576103e701908111611d28576103e89004926103e88402938085046103e81490151715611d2857603254604051631abe729160e31b815293929190602090859060049082906001600160a01b03165afa938415611619578694611ce0575b509061010460209287611a9460018060a01b03603854169442612f70565b966036546040519889968795633d6ea23560e11b8752306004880152602487015260448601528a606486015260848501526103e860a48501523060c485015260e484015260018060a01b03165af191821561079e578492611cbf575b5080845260406020819052842080546001600160a01b0319166001600160a01b03938416908117909155603954603c5491938692911690813b15610da9578291602483926040519485938492633bd2fa7160e21b845260048401525af1801561032c57611caa575b5060325460405163cbd5920f60e01b815290602090829060049082906001600160a01b03165afa90811561032c578291611c8b575b506001600160a01b031680611c42575b5050611bad603d54603f54612f70565b603f5560395484906001600160a01b0316803b15610337578180916024604051809481936312325dad60e11b83524360048401525af1801561032c57611c29575b507f92db7303de5c78e58e4570f0b4acf392e3dac09394e96c4fa62b323b6337ee65606084868560405192835260208301526040820152a180f35b81611c3691949394612e2b565b6105125790835f611bee565b603c54813b15610da957829160248392604051948593849263acedf0e160e01b845260048401525af1801561032c5715611b9d5781611c8091612e2b565b61051257835f611b9d565b611ca4915060203d602011610921576109138183612e2b565b5f611b8d565b81611cb491612e2b565b61051257835f611b58565b611cd991925060203d602011610921576109138183612e2b565b905f611af0565b9093506020813d602011611d20575b81611cfc60209383612e2b565b810103126116245751906001600160a01b0382168203611624579092610104611a76565b3d9150611cef565b634e487b7160e01b85526011600452602485fd5b634e487b7160e01b86526011600452602486fd5b9350506020833d602011611d81575b81611d6c60209383612e2b565b810103126107925791518592906119b56119a2565b3d9150611d5f565b6040513d89823e3d90fd5b6020829661197f565b611db791925060203d6020116108895761087b8183612e2b565b905f61196a565b611dd7915060203d6020116108895761087b8183612e2b565b5f611941565b63628e388360e01b8452600484fd5b611e0691925060403d604011610b1957610b0a8183612e2b565b50905f611902565b632c846e4160e21b8252600482fd5b639f15412160e01b8352600483fd5b503461032957602036600319011261032957603254604051635a9b40c560e11b815260048035926001600160a01b03169190602090829081855afa90811561079e578491611f46575b50604051632474521560e21b815260048101919091523360248201529060209082908180604481015b03915afa90811561075b578391611f27575b501561071d57620186a08111611f185760407f5fc463da23c1b063e66f9e352006a7fbe8db7223c455dc429e881a2dfe2f94f191611eec614207565b15611f0f57611ef961428d565b603354908060335582519182526020820152a180f35b42603555611ef9565b63cd4e616760e01b8252600482fd5b611f40915060203d602011610754576107468183612e2b565b5f611eb0565b90506020813d602011611f72575b81611f6160209383612e2b565b810103126107925751611e9e611e75565b3d9150611f54565b503461032957806003193601126103295780610120604051611f9b81612dfa565b8281528260208201528260408201528260608201528260808201528260a08201528260c08201528260e082015282610100820152015260018060a01b036039541690604051630e4455e160e21b8152604081600481865afa90811561032c57602491839182916121fd575b5060335493603d5491602060018060a01b0360385416604051968780926370a0823160e01b82523060048301525afa94851561032c5782956121c6575b506020600497604051988980926318160ddd60e01b82525afa93841561032c578294612191575b603a546040516318160ddd60e01b81529850602090899060049082906001600160a01b03165afa928315612185579261214f575b6101409750603f5492603e549560018060a01b0360345416976101206040516120c681612dfa565b8b81526020810192835260408101938452606081019485526080810195865260a0810196875260c0810197885260e081019889526101008101998a5201988952604051998a525160208a01525160408901525160608801525160808701525160a08601525160c08501525160e08401525161010083015260018060a01b03905116610120820152f35b91506020873d60201161217d575b8161216a60209383612e2b565b810103126107925761014096519161209e565b3d915061215d565b604051903d90823e3d90fd5b93506020873d6020116121be575b816121ac60209383612e2b565b8101031261079257600496519361206a565b3d915061219f565b9694506020873d6020116121f5575b816121e260209383612e2b565b8101031261079257955193956020612043565b3d91506121d5565b9050612218915060403d604011610b1957610b0a8183612e2b565b905f612006565b5034610329578060031936011261032957602060ff5f5160206146955f395f51905f5254166040519015158152f35b503461032957602036600319011261032957612268612e4d565b603254604051635a9b40c560e11b81526001600160a01b0390911690602081600481855afa90811561079e578491612319575b50604051632474521560e21b815260048101919091523360248201529060209082908180604481015b03915afa90811561075b5783916122fa575b501561071d5760018060a01b03166001600160601b0360a01b603454161760345580f35b612313915060203d602011610754576107468183612e2b565b5f6122d6565b90506020813d602011612345575b8161233460209383612e2b565b8101031261079257516122c461229b565b3d9150612327565b503461032957602036600319011261032957600435815260406020818152918190205490516001600160a01b039091168152f35b50346103295760403660031901126103295761239b612e4d565b906123a4612e63565b8154604051637c86348360e11b81526001600160a01b0385811660048301528381166024830152909116938392602083604481895afa92831561079e578493612612575b506001600160a01b0383161561257c575b5050604051633fabe5a360e21b815292906001600160a01b031660a084600481845afa94851561075b5783948496612522575b5060206024916040519283809263a83c3ab560e01b82528660048301525afa90811561079e5784916124ef575b5061246690600496612f70565b42116124e1576020906040519586809263313ce56760e01b82525afa93841561032c5760209460ff9184916124c4575b50169150156124be57906124b9826119be6124b3610e1d95612faa565b91612faa565b612fcb565b50610e1d565b6124db9150863d88116108895761087b8183612e2b565b5f612496565b630cd5fa0760e11b83528483fd5b90506020813d60201161251a575b8161250a60209383612e2b565b8101031261079257516004612459565b3d91506124fd565b9450945060a0843d60a011612574575b8161253f60a09383612e2b565b81010312610da95761255084612f59565b50602460208086015161256a608060608901519801612f59565b509596915061242c565b3d9150612532565b604051637c86348360e11b81526001600160a01b0391821660048201529116602482015292506020905082604481865afa9182156126055781926125e4575b506001600160a01b038216156125d5576001915f806123f9565b633458f58160e11b8152600490fd5b6125fe91925060203d602011610921576109138183612e2b565b905f6125bb565b50604051903d90823e3d90fd5b61262c91935060203d602011610921576109138183612e2b565b915f6123e8565b50346103295780600319360112610329576034546040516001600160a01b039091168152602090f35b5034610329578060031936011261032957603b546040516001600160a01b039091168152602090f35b50346103295780600319360112610329576032546040516001600160a01b039091168152602090f35b503461032957806003193601126103295760325460405163b9fe5cf760e01b81526001600160a01b0390911690602081600481855afa90811561075b5783916127b9575b50604051632474521560e21b815260048101919091523360248201529060209082908180604481015b03915afa90811561032c57829161279a575b5015610d47575f5160206146955f395f51905f525460ff81161561278b5760ff19165f5160206146955f395f51905f52557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6020604051338152a180f35b638dfc202b60e01b8252600482fd5b6127b3915060203d602011610754576107468183612e2b565b5f61272d565b90506020813d6020116127e5575b816127d460209383612e2b565b81010312610792575161271b6126f2565b3d91506127c7565b50346103295761016036600319011261032957612808612e4d565b6044356001600160a01b038116919060243590839003610512576064356001600160a01b03811690819003610521576084356001600160a01b038116908190036116245760a4356001600160a01b0381169190829003612b4857610104356001600160a01b0381169390849003612b4457610124356001600160a01b0381169790889003612b405761014435958615158703612b3c575f5160206146f55f395f51905f52549860ff8a60401c16159967ffffffffffffffff811680159081612b34575b6001149081612b2a575b159081612b21575b50612b125767ffffffffffffffff1981166001175f5160206146f55f395f51905f52558a612ae6575b508a546001600160a01b038116612ad8576001600160a01b031916178a5561292c614538565b612934614538565b60015f5160206146b55f395f51905f525561294d614538565b612955614538565b60ff195f5160206146955f395f51905f52541697885f5160206146955f395f51905f525560018060a01b03166001600160601b0360a01b6032541617603255620186a08111612ac9576033556001600160601b0360a01b60385416176038556001600160601b0360a01b60395416176039556001600160601b0360a01b603a541617603a556001600160601b0360a01b603b541617603b5560c435603c5560e435603d5542603f556001600160601b0360a01b603454161760345542603555605a603655612a7e575b50612a265780f35b68ff0000000000000000195f5160206146f55f395f51905f5254165f5160206146f55f395f51905f52557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a180f35b600190612a89614326565b175f5160206146955f395f51905f52557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586020604051338152a15f612a1e565b63cd4e616760e01b8a5260048afd5b62dc149f60e41b8c5260048cfd5b68ffffffffffffffffff191668010000000000000001175f5160206146f55f395f51905f52555f612906565b63f92ee8a960e01b8c5260048cfd5b9050155f6128dd565b303b1591506128d5565b8c91506128cb565b8980fd5b8880fd5b8780fd5b8680fd5b5034610329578060031936011261032957546040516001600160a01b039091168152602090f35b5034610329578060031936011261032957602090604051908152f35b5034610792575f366003190112610792576001600160a01b03612bb061418f565b163303612cb2576039546001600160a01b0316803b15610792575f8091600460405180948193630860249960e11b83525af18015612ca757612c94575b5060325460405163cbd5920f60e01b81528291602090829060049082906001600160a01b03165afa90811561032c578291612c75575b506001600160a01b031680612c355750f35b803b15612c7257818091600460405180948193635d5cc1b560e01b83525af1801561032c57612c615750f35b81612c6b91612e2b565b6103295780f35b50fd5b612c8e915060203d602011610921576109138183612e2b565b5f612c23565b612ca091505f90612e2b565b5f5f612bed565b6040513d5f823e3d90fd5b637f02311560e11b5f5260045ffd5b34610792575f36600319011261079257604051603754905f612ce283612dc2565b808352602083019360018116908115612d845750600114612d39575b5090612d0e816040930382612e2b565b8151928391602083525180918160208501528484015e5f828201840152601f01601f19168101030190f35b91905060375f525f5160206146d55f395f51905f52915f905b808210612d6a57509091508101602001612d0e612cfe565b919260018160209254838588010152019101909291612d52565b60ff1916855250151560051b82016020019050612d0e612cfe565b34610792575f36600319011261079257603a546001600160a01b03168152602090f35b90600182811c92168015612df0575b6020831014612ddc57565b634e487b7160e01b5f52602260045260245ffd5b91607f1691612dd1565b610140810190811067ffffffffffffffff821117612e1757604052565b634e487b7160e01b5f52604160045260245ffd5b90601f8019910116810190811067ffffffffffffffff821117612e1757604052565b600435906001600160a01b038216820361079257565b602435906001600160a01b038216820361079257565b606090600319011261079257600435600281101561079257906024359060443590565b60a090600319011261079257600435600281101561079257906024359060443590606435906084356001600160a01b03811681036107925790565b6040906003190112610792576004356002811015610792579060243590565b60c4359060ff8216820361079257565b67ffffffffffffffff8111612e1757601f01601f191660200190565b9081602091031261079257516001600160a01b03811681036107925790565b90816020910312610792575180151581036107925790565b519069ffffffffffffffffffff8216820361079257565b91908201809211612f7d57565b634e487b7160e01b5f52601160045260245ffd5b90816020910312610792575160ff811681036107925790565b604d8111612f7d57600a0a90565b81810292918115918404141715612f7d57565b8115612fd5570490565b634e487b7160e01b5f52601260045260245ffd5b5f8054604051637c86348360e11b81526001600160a01b0393841660048201819052602482018490529390911692602082604481875afa918215612ca7575f92613235575b506001600160a01b038216156131bb575b50604051633fabe5a360e21b8152926001600160a01b03919091169060a084600481855afa908115612ca7575f945f92613161575b509060206024926040519384809263a83c3ab560e01b82528760048301525afa908115612ca7575f9161312b575b6130ac9250612f70565b421161311c5760206004916040519283809263313ce56760e01b82525afa8015612ca75760ff915f916130fd575b501690156130f957906124b9826119be6124b36130f695612faa565b90565b5090565b613116915060203d6020116108895761087b8183612e2b565b5f6130da565b630cd5fa0760e11b5f5260045ffd5b90506020823d602011613159575b8161314660209383612e2b565b81010312610792576130ac9151906130a2565b3d9150613139565b9450905060a0843d60a0116131b3575b8161317e60a09383612e2b565b810103126107925760249061319285612f59565b506020808601516131aa608060608901519801612f59565b50959250613074565b3d9150613171565b91505060405190637c86348360e11b82525f60048301526024820152602081604481855afa908115612ca7575f91613216575b506001600160a01b03811615613207576001905f61303f565b633458f58160e11b5f5260045ffd5b61322f915060203d602011610921576109138183612e2b565b5f6131ee565b61324f91925060203d602011610921576109138183612e2b565b905f61302e565b9190826040910312610792576020825192015190565b9060ff8091169116039060ff8211612f7d57565b91908203918211612f7d57565b908015613516576039546040516318160ddd60e01b81526001600160a01b039091169190602081600481865afa8015612ca75783905f906134e0575b6132d392506144d9565b9260018060a01b03603a5416916040516318160ddd60e01b8152602081600481875afa8015612ca75784905f906134aa575b61330f92506144d9565b6038546040516370a0823160e01b81523060048201526001600160a01b03909116929190602081602481875afa908115612ca75784905f92613474575b5061338661335d8261338c946144d9565b651cae8c13e00061337f61337360335484612fb8565b6119be60355442613280565b0490613280565b936144d9565b956002851015613460576004956020916001870361340e575060405163313ce56760e01b815296879182905afa968715612ca7576130f6976133ea965f916133ef575b50965b6133e46133de86612fe9565b95613a90565b95613940565b61435e565b613408915060203d6020116108895761087b8183612e2b565b5f6133cf565b60405163313ce56760e01b8152978892509082905afa968715612ca7576130f6976133ea965f91613441575b50966133d2565b61345a915060203d6020116108895761087b8183612e2b565b5f61343a565b634e487b7160e01b5f52602160045260245ffd5b9150506020813d6020116134a2575b8161349060209383612e2b565b8101031261079257518361338661334c565b3d9150613483565b50506020813d6020116134d8575b816134c560209383612e2b565b81010312610792578361330f9151613305565b3d91506134b8565b50506020813d60201161350e575b816134fb60209383612e2b565b8101031261079257826132d391516132c9565b3d91506134ee565b631f2a200560e01b5f5260045ffd5b91909396949681156136845761353e6135479189612fb8565b611a068861434d565b908093620c350093620f42408402848104620f42401485151715612f7d5760648402938404606403612f7d578361357d91612fcb565b906002811015613460576001149182613661575b50621312d0106135f0575050620f424096946124b9946135bf6135db98956124b96119be966135d596612fb8565b915b801515806135e7575b6135df575b50612fb8565b9161434d565b0490565b91505f6135cf565b508281106135ca565b939795969390925015613640579061360791613280565b620f4240810290808204620f42401490151715612f7d576135d56135db956124b99461363a620f4240996119be95612fcb565b916135c1565b5050620f424094506119be6135d56135db956124b9946305f5e100916135c1565b955062030d4094508515613675575f613591565b638ac0b6f960e01b5f5260045ffd5b63309d60ef60e21b5f5260045ffd5b8115613516576039546040516318160ddd60e01b81526001600160a01b0390911690602081600481855afa8015612ca75782905f9061390a575b6136d792506144d9565b603a546040516318160ddd60e01b81526001600160a01b03909116929190602081600481875afa8015612ca75784905f906138d4575b61371792506144d9565b9160018060a01b0360385416946040516370a0823160e01b81523060048201526020816024818a5afa8015612ca75787915f9161389d575b5061375d9161335d916144d9565b600282101561346057600495600183036138915761377c9080996144d9565b94602061378889613a90565b94604051988980926323a70cf960e11b82525afa968715612ca7575f97613870575b505f8054604051637c86348360e11b81526001600160a01b038c81166004830152602482018490529098929792916020918a916044918391165afa988915612ca7576130f69b6138259a61381f9a5f91613851575b506001600160a01b031661382b575b50506138198a612fe9565b94613525565b916143de565b9061435e565b61384992985061384361383d82612fe9565b91613a90565b9061439a565b955f8061380e565b61386a915060203d602011610921576109138183612e2b565b5f6137ff565b61388a91975060203d6020116108895761087b8183612e2b565b955f6137aa565b5061377c8380996144d9565b9150506020813d6020116138cc575b816138b960209383612e2b565b810103126107925751869061375d61374f565b3d91506138ac565b50506020813d602011613902575b816138ef60209383612e2b565b810103126107925783613717915161370d565b3d91506138e2565b50506020813d602011613938575b8161392560209383612e2b565b8101031261079257816136d791516136cd565b3d9150613918565b909594929391938415613684578491620c35009360028210159182613460576001149283613a80575b506139776139809187612fb8565b611a068961434d565b95620f42408702878104620f42401488151715612f7d5760648202828104606403612f7d576139ae91612fcb565b6305f5e1009190621312d010613a145750506134605780613a0c575b613675576124b96139de926139e495612fb8565b93612fb8565b91620f4240830292808404620f42401490151715612f7d576135d5611a06916130f694612fcb565b5080156139ca565b929150979495929350613a2f575b505050906139e491612fb8565b90918094939650156136755780606402906064820403612f7d57613a5291613280565b620f4240810290808204620f42401490151715612f7d576139e492613a7691612fcb565b9390915f80613a22565b62030d4095509350613977613969565b5f8054604051637c86348360e11b81526001600160a01b03938416600482018190526024820193909352921690602083604481855afa928315612ca7575f93613b9d575b506001600160a01b03831615613b34575b505060405163313ce56760e01b815290602090829060049082906001600160a01b03165afa908115612ca7575f91613b1b575090565b6130f6915060203d6020116108895761087b8183612e2b565b6020919250604460405180948193637c86348360e11b83525f600484015260248301525afa908115612ca7575f91613b7e575b506001600160a01b03811615613207575f80613ae5565b613b97915060203d602011610921576109138183612e2b565b5f613b67565b613bb791935060203d602011610921576109138183612e2b565b915f613ad4565b90816020910312610792575160048110156107925790565b60395460408051630e4455e160e21b8152915f9190839060049082906001600160a01b03165afa918215612ca7575f9261416d575b50811561415e575f198201918211612f7d57600490825f526040602052602060018060a01b0360405f20541660405193848092636e64757b60e11b82525afa918215612ca7575f9261412a575b50825f5260406020526004602060018060a01b0360405f2054166040519283809263c19d93fb60e01b82525afa908115612ca7575f9161410b575b50600481101561346057600314801561409f575b61406c57825f5260406020526004602060018060a01b0360405f2054166040519283809263c19d93fb60e01b82525afa908115612ca7575f9161403d575b5060048110156134605760010361402f5760325460405163331909e160e21b815230600482015292906001600160a01b0316602084602481845afa938415612ca7575f9461400e575b50604051633a6d9dc160e11b815230600482015290602082602481845afa918215612ca7575f92613fe9575b5060206004916040519283809263cbd5920f60e01b82525afa908115612ca7575f91613fca575b506001600160a01b03828116955f95929091169086613f6a575b855f9280613e80575b5090613dec82613dfc9596613ddb8985613dd589613dd0613dd09a60018060a01b03603b541695613280565b613280565b9161449b565b603b546001600160a01b031661449b565b6001600160a01b03169585613280565b833b1561033757604051906390ca796b60e01b82526004820152818160248183885af1801561032c57613e6b575b5050917ff31622ab385aaab5e43335aae9bd72d56139ae3cdb4ceeb2f30d4f47099e46189391608093604051938452602084015260408301526060820152a1565b613e76828092612e2b565b6103295780613e2a565b925050604051634739493560e11b8152306004820152602081602481865afa928315612ca75787915f94613f33575b508380613ebd575b50613da4565b603b54919250613ed79183906001600160a01b031661449b565b803b15610792575f8091602460405180948193638db86a6960e01b83523060048401525af1908115612ca7578791613f10575b80613eb7565b613dfc9450613dd09291505f613f2591612e2b565b5f9350905085613dec613f0a565b915092506020813d602011613f62575b81613f5060209383612e2b565b8101031261079257869051925f613eaf565b3d9150613f43565b604051638679d15b60e01b81529095506020816004818a5afa908115612ca7575f91613f98575b5094613d9b565b90506020813d602011613fc2575b81613fb360209383612e2b565b8101031261079257515f613f91565b3d9150613fa6565b613fe3915060203d602011610921576109138183612e2b565b5f613d81565b6004919250614006602091823d8411610921576109138183612e2b565b929150613d5a565b61402891945060203d602011610921576109138183612e2b565b925f613d2e565b625c4e7f60e31b5f5260045ffd5b61405f915060203d602011614065575b6140578183612e2b565b810190613bbe565b5f613ce5565b503d61404d565b507fb07ac059d2a0dd966a73cbd0cb9b6c1b7af9468cab03dc1fd5d34c6fb4a6b30c9160409182519182526020820152a1565b50825f5260406020526004602060018060a01b0360405f2054166040519283809263c19d93fb60e01b82525afa908115612ca7575f916140ec575b50600481101561346057600214613ca7565b614105915060203d602011614065576140578183612e2b565b5f6140da565b614124915060203d602011614065576140578183612e2b565b5f613c93565b9091506020813d602011614156575b8161414660209383612e2b565b810103126107925751905f613c58565b3d9150614139565b634ca8886760e01b5f5260045ffd5b61418791925060403d604011610b1957610b0a8183612e2b565b50905f613c0b565b60395460408051630e4455e160e21b815291829060049082906001600160a01b03165afa908115612ca7575f916141e7575b505f198101908111612f7d575f908152604060208190529020546001600160a01b031690565b614200915060403d604011610b1957610b0a8183612e2b565b505f6141c1565b6038546040516370a0823160e01b815230600482015290602090829060249082906001600160a01b03165afa908115612ca7575f91614259575b506135db613373651cae8c13e0009260335490612fb8565b90506020813d602011614285575b8161427460209383612e2b565b8101031261079257516135db614241565b3d9150614267565b614295614207565b80156142ff57426035556038546034547f20ca5094f3a20c321cbe4123d0f01b276b81df0fa24cd4d83d9253956035d86392916142e09183916001600160a01b03918216911661449b565b603454604080516001600160a01b0390921682526020820192909252a1565b507f846d8c5c020eac85233c31fc79d004ef12b5e20abfbe63b23c49f764393b44825f80a1565b60ff5f5160206146955f395f51905f52541661433e57565b63d93c066560e01b5f5260045ffd5b60ff16604d8111612f7d57600a0a90565b9060ff8116806012115f14614380575090611a06611a016130f693601261326c565b601210156130f957906119be611a0160126130f69461326c565b909160ff811660ff84168181115f146143bf575050611a01611a06916130f69461326c565b92939210156143d957611a016130f693926119be9261326c565b505090565b60405163313ce56760e01b815290602090829060049082906001600160a01b03165afa5f9181614414575b506130f65750601290565b61442e91925060203d6020116108895761087b8183612e2b565b905f614409565b60025f5160206146b55f395f51905f52541461445e5760025f5160206146b55f395f51905f5255565b633ee5aeb560e01b5f5260045ffd5b6001600160a01b03909116815260808101949392600283101561346057606092602083015260408201520152565b60405163a9059cbb60e01b60208201526001600160a01b039290921660248301526044808301939093529181526144d791610267606483612e2b565b565b60405163313ce56760e01b81529091602090829060049082906001600160a01b03165afa8015612ca7576130f6926012925f92614517575b5061439a565b61453191925060203d6020116108895761087b8183612e2b565b905f614511565b60ff5f5160206146f55f395f51905f525460401c161561455457565b631afcd79f60e31b5f5260045ffd5b5f806145ab9260018060a01b03169360208151910182865af13d156145ee573d9061458d82612f06565b9161459b6040519384612e2b565b82523d5f602084013e5b836145f6565b80519081151591826145d3575b50506145c15750565b635274afe760e01b5f5260045260245ffd5b6145e69250602080918301019101612f41565b155f806145b8565b6060906145a5565b9061461a575080511561460b57805190602001fd5b630a12f52160e11b5f5260045ffd5b8151158061464b575b61462b575090565b639996b31560e01b5f9081526001600160a01b0391909116600452602490fd5b50803b1561462356fe2441fb9f349bdfdf06755d1f5239efc1851c81c59e35378f3df9ac880bca3094bd52f81ce4beba21c7c6a29213c7c718167799f216ed3ebe0f7224c3947fa525cd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0042a7b7dd785cd69714a189dffb3fd7d7174edc9ece837694ce50f7078f7c31aef0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00a26469706673582212204a3b422da2aed532160f55ddec2315b0fb5bcfb70ecb34ea569846503968773b64736f6c634300081e0033f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00