0 txs
12 calls
constructor
constructor((address evc, address balanceTracker, address permit2, bool isHarvestCoolDownCheckOn) _integrationsParams)
functions
allowance
viewfunction allowance(address _owner, address _spender) view returns (uint256)
asset
viewfunction asset() view returns (address)
balanceOf
viewfunction balanceOf(address _account) view returns (uint256)
checkpoints
viewfunction checkpoints(address _account, uint32 _pos) view returns (tuple)
CLOCK_MODE
viewfunction CLOCK_MODE() view returns (string)
clock
viewfunction clock() view returns (uint48)
convertToAssets
viewfunction convertToAssets(uint256 _shares) view returns (uint256)
convertToShares
viewfunction convertToShares(uint256 _assets) view returns (uint256)
decimals
viewfunction decimals() view returns (uint8)
delegates
viewfunction delegates(address _account) view returns (address)
eip712Domain
viewfunction eip712Domain() view returns (bytes1 fields, string name, string version, uint256 chainId, address verifyingContract, bytes32 salt, uint256[] extensions)
EVC
viewfunction EVC() view returns (address)
getEulerEarnSavingRate
viewfunction getEulerEarnSavingRate() view returns (uint40, uint40, uint168)
getPastTotalSupply
viewfunction getPastTotalSupply(uint256 _timepoint) view returns (uint256)
getPastVotes
viewfunction getPastVotes(address _account, uint256 _timepoint) view returns (uint256)
getVotes
viewfunction getVotes(address _account) view returns (uint256)
interestAccrued
viewfunction interestAccrued() view returns (uint256)
interestSmearingPeriod
viewfunction interestSmearingPeriod() view returns (uint256)
isCheckingHarvestCoolDown
viewfunction isCheckingHarvestCoolDown() view returns (bool)
lastHarvestTimestamp
viewfunction lastHarvestTimestamp() view returns (uint256)
maxDeposit
viewfunction maxDeposit(address) view returns (uint256)
maxMint
viewfunction maxMint(address) view returns (uint256)
maxRedeem
viewfunction maxRedeem(address _owner) view returns (uint256)
maxWithdraw
viewfunction maxWithdraw(address _owner) view returns (uint256)
name
viewfunction name() view returns (string)
nonces
viewfunction nonces(address owner) view returns (uint256)
numCheckpoints
viewfunction numCheckpoints(address _account) view returns (uint32)
permit2Address
viewfunction permit2Address() view returns (address)
previewDeposit
viewfunction previewDeposit(uint256 _assets) view returns (uint256)
previewMint
viewfunction previewMint(uint256 _shares) view returns (uint256)
previewRedeem
viewfunction previewRedeem(uint256 _shares) view returns (uint256)
previewWithdraw
viewfunction previewWithdraw(uint256 _assets) view returns (uint256)
symbol
viewfunction symbol() view returns (string)
totalAllocated
viewfunction totalAllocated() view returns (uint256)
totalAssets
viewfunction totalAssets() view returns (uint256)
totalAssetsAllocatable
viewfunction totalAssetsAllocatable() view returns (uint256)
totalAssetsDeposited
viewfunction totalAssetsDeposited() view returns (uint256)
totalSupply
viewfunction totalSupply() view returns (uint256)
approve
nonpayablefunction approve(address _spender, uint256 _value) returns (bool)
delegate
nonpayablefunction delegate(address _delegatee)
delegateBySig
nonpayablefunction delegateBySig(address _delegatee, uint256 _nonce, uint256 _expiry, uint8 _v, bytes32 _r, bytes32 _s)
deposit
nonpayablefunction deposit(uint256 _assets, address _receiver) returns (uint256)
gulp
nonpayablefunction gulp()
harvest
nonpayablefunction harvest()
mint
nonpayablefunction mint(uint256 _shares, address _receiver) returns (uint256)
rebalance
nonpayablefunction rebalance(address[] _strategies)
redeem
nonpayablefunction redeem(uint256 _shares, address _receiver, address _owner) returns (uint256)
skim
nonpayablefunction skim(address _token, address _recipient)
transfer
nonpayablefunction transfer(address _to, uint256 _value) returns (bool)
transferFrom
nonpayablefunction transferFrom(address _from, address _to, uint256 _value) returns (bool)
updateInterestAccrued
nonpayablefunction updateInterestAccrued()
withdraw
nonpayablefunction withdraw(uint256 _assets, address _receiver, address _owner) returns (uint256)
events
AccruePerformanceFee
event AccruePerformanceFee(address indexed feeRecipient, uint256 yield, uint256 feeShares)
Approval
event Approval(address indexed owner, address indexed spender, uint256 value)
DeductLoss
event DeductLoss(uint256 socializedAmount)
DelegateChanged
event DelegateChanged(address indexed delegator, address indexed fromDelegate, address indexed toDelegate)
DelegateVotesChanged
event DelegateVotesChanged(address indexed delegate, uint256 previousVotes, uint256 newVotes)
Deposit
event Deposit(address indexed sender, address indexed owner, uint256 assets, uint256 shares)
Deposit
event Deposit(address indexed sender, address indexed owner, uint256 assets, uint256 shares)
EIP712DomainChanged
event EIP712DomainChanged()
ExecuteHarvest
event ExecuteHarvest(address indexed strategy, uint256 eulerEarnAssetsAmount, uint256 strategyAllocatedAmount)
Gulp
event Gulp(uint256 interestLeft, uint256 interestSmearEnd)
Harvest
event Harvest(uint256 totalAllocated, uint256 totalYield, uint256 totalLoss)
Initialized
event Initialized(uint64 version)
InterestUpdated
event InterestUpdated(uint256 interestAccrued, uint256 interestLeft)
Rebalance
event Rebalance(address indexed strategy, uint256 amountToRebalance, bool isDeposit)
Skim
event Skim(address indexed token, address indexed recipient, uint256 amount)
Transfer
event Transfer(address indexed from, address indexed to, uint256 value)
Withdraw
event Withdraw(address indexed sender, address indexed receiver, address indexed owner, uint256 assets, uint256 shares)
errors
CanNotSkim
error CanNotSkim()
CheckpointUnorderedInsertion
error CheckpointUnorderedInsertion()
ControllerDisabled
error ControllerDisabled()
ECDSAInvalidSignature
error ECDSAInvalidSignature()
ECDSAInvalidSignatureLength
error ECDSAInvalidSignatureLength(uint256 length)
ECDSAInvalidSignatureS
error ECDSAInvalidSignatureS(bytes32 s)
EmptyError
error EmptyError()
ERC20ExceededSafeSupply
error ERC20ExceededSafeSupply(uint256 increasedSupply, uint256 cap)
ERC20ExceededSafeSupply
error ERC20ExceededSafeSupply(uint256 increasedSupply, uint256 cap)
ERC20InsufficientAllowance
error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed)
ERC20InsufficientBalance
error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed)
ERC20InvalidApprover
error ERC20InvalidApprover(address approver)
ERC20InvalidReceiver
error ERC20InvalidReceiver(address receiver)
ERC20InvalidSender
error ERC20InvalidSender(address sender)
ERC20InvalidSpender
error ERC20InvalidSpender(address spender)
ERC4626ExceededMaxDeposit
error ERC4626ExceededMaxDeposit(address receiver, uint256 assets, uint256 max)
ERC4626ExceededMaxMint
error ERC4626ExceededMaxMint(address receiver, uint256 shares, uint256 max)
ERC4626ExceededMaxRedeem
error ERC4626ExceededMaxRedeem(address owner, uint256 shares, uint256 max)
ERC4626ExceededMaxRedeem
error ERC4626ExceededMaxRedeem(address owner, uint256 shares, uint256 max)
ERC4626ExceededMaxWithdraw
error ERC4626ExceededMaxWithdraw(address owner, uint256 assets, uint256 max)
ERC4626ExceededMaxWithdraw
error ERC4626ExceededMaxWithdraw(address owner, uint256 assets, uint256 max)
ERC5805FutureLookup
error ERC5805FutureLookup(uint256 timepoint, uint48 clock)
ERC6372InconsistentClock
error ERC6372InconsistentClock()
EVC_InvalidAddress
error EVC_InvalidAddress()
InvalidAccountNonce
error InvalidAccountNonce(address account, uint256 currentNonce)
InvalidInitialization
error InvalidInitialization()
NotAuthorized
error NotAuthorized()
NotEnoughAssets
error NotEnoughAssets()
NotInitializing
error NotInitializing()
Reentrancy
error Reentrancy()
SafeCastOverflowedUintDowncast
error SafeCastOverflowedUintDowncast(uint8 bits, uint256 value)
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
SafeTransferFromFailed
error SafeTransferFromFailed(bytes errorPermit2, bytes errorTransferFrom)
ViewReentrancy
error ViewReentrancy()
VotesExpiredSignature
error VotesExpiredSignature(uint256 expiry)
creation bytecode
0x610100604052348015610010575f5ffd5b5060405161598938038061598983398101604081905261002f916100a5565b805181906001600160a01b03811661005a57604051638133abd160e01b815260040160405180910390fd5b6001600160a01b039081166080526020820151811660a05260408201511660c05260600151151560e05250610133565b80516001600160a01b03811681146100a0575f5ffd5b919050565b5f60808284031280156100b6575f5ffd5b50604051608081016001600160401b03811182821017156100e557634e487b7160e01b5f52604160045260245ffd5b6040526100f18361008a565b81526100ff6020840161008a565b60208201526101106040840161008a565b604082015260608301518015158114610127575f5ffd5b60608201529392505050565b60805160a05160c05160e0516157f26101975f395f818161056a0152818161102b015281816111fc01526116a701525f81816106c5015261219a01525f818161422f015261433301525f81816105f80152818161471d015261475801526157f25ff3fe608060405234801561000f575f5ffd5b506004361061033b575f3560e01c80637ecebe00116101b3578063ba087652116100f3578063c6e6f5921161009e578063dd62ed3e11610079578063dd62ed3e14610735578063ef8b30f7146106fc578063f061879114610748578063f1127ed814610750575f5ffd5b8063c6e6f592146106fc578063ce96cb771461070f578063d905777e14610722575f5ffd5b8063c3cda520116100ce578063c3cda520146106b0578063c5224983146106c3578063c63d75b6146106e9575f5ffd5b8063ba08765214610655578063bea9db6d14610668578063beb9c69b1461067b575f5ffd5b806394bf804d1161015e578063a70354a111610139578063a70354a1146105f6578063a9059cbb1461061c578063b3d7f6b91461062f578063b460af9414610642575f5ffd5b806394bf804d146105c857806395d89b41146105db5780639ab24eb0146105e3575f5ffd5b80638e539e8c1161018e5780638e539e8c1461058e57806391ddadf4146105a157806394909e62146105c0575f5ffd5b80637ecebe001461053a57806384b0196e1461054d5780638db7e68f14610568575f5ffd5b80633a46b1a81161027e578063587cde1e116102295780636e553f65116102045780636e553f65146104d95780636fcfff45146104ec57806370a0823114610514578063712b772f14610527575f5ffd5b8063587cde1e146104ab5780635c19a95c146104be5780636c63c2da146104d1575f5ffd5b80634641257d116102595780634641257d146104865780634bf5d7e9146104905780634cdad50614610498575f5ffd5b80633a46b1a814610458578063402d267d1461046b57806345f7f2491461047e575f5ffd5b806320dcc342116102e957806323b872dd116102c457806323b872dd1461040357806323e5516014610416578063313ce5671461041e57806338d52e0f14610438575f5ffd5b806320dcc342146103c0578063210da9cd146103c85780632257a738146103fb575f5ffd5b8063095ea7b311610319578063095ea7b3146103825780630a28a477146103a557806318160ddd146103b8575f5ffd5b806301e1d1141461033f57806306fdde031461035a57806307a2d13a1461036f575b5f5ffd5b61034761078f565b6040519081526020015b60405180910390f35b6103626107a5565b60405161035191906150cc565b61034761037d3660046150de565b6107af565b610395610390366004615109565b6107ca565b6040519015158152602001610351565b6103476103b33660046150de565b6107de565b6103476108bf565b6103476108ee565b7f557a0cdd38e5249281b5bc89e23dd8e4f8f0223d657d77792700289d81047f0854600160e81b900462ffffff16610347565b610347610934565b610395610411366004615133565b610971565b610347610987565b610426610998565b60405160ff9091168152602001610351565b6104406109a1565b6040516001600160a01b039091168152602001610351565b610347610466366004615109565b6109c0565b610347610479366004615171565b6109cb565b610347610a43565b61048e610a72565b005b610362610ab0565b6103476104a63660046150de565b610aba565b6104406104b9366004615171565b610ba2565b61048e6104cc366004615171565b610bcf565b610347610bdb565b6103476104e736600461518c565b610bf7565b6104ff6104fa366004615171565b610c5a565b60405163ffffffff9091168152602001610351565b610347610522366004615171565b610c64565b61048e6105353660046151ba565b610c76565b610347610548366004615171565b610dc0565b610555610e03565b60405161035197969594939291906151e6565b7f0000000000000000000000000000000000000000000000000000000000000000610395565b61034761059c3660046150de565b610ecc565b6105a9610ed6565b60405165ffffffffffff9091168152602001610351565b61048e610edf565b6103476105d636600461518c565b610f12565b610362610f49565b6103476105f1366004615171565b610f53565b7f0000000000000000000000000000000000000000000000000000000000000000610440565b61039561062a366004615109565b610f5d565b61034761063d3660046150de565b610f68565b61034761065036600461527c565b610f7c565b61034761066336600461527c565b6110f3565b61048e6106763660046152bb565b611276565b6106836112f8565b6040805164ffffffffff94851681529390921660208401526001600160a81b031690820152606001610351565b61048e6106be36600461532c565b611340565b7f0000000000000000000000000000000000000000000000000000000000000000610440565b6103476106f7366004615171565b611356565b61034761070a3660046150de565b611367565b61034761071d366004615171565b61137a565b610347610730366004615171565b61138d565b6103476107433660046151ba565b6113db565b61048e611426565b61076361075e366004615389565b611436565b60408051825165ffffffffffff1681526020928301516001600160d01b03169281019290925201610351565b5f610798611453565b6107a06114bb565b905090565b60606107a0611500565b5f6107b8611453565b6107c2825f6115b8565b90505b919050565b5f6107d5838361160f565b90505b92915050565b5f6107e7611453565b5f826108075f51602061575d5f395f51905f52546001600160a01b031690565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa15801561084b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061086f91906153bd565b101590505f5f61087e83611630565b915091506108b661088c5f90565b61089790600a6154c3565b6108a190836154d1565b6108ac8460016154d1565b87919060016119b7565b95945050505050565b5f6108c8611453565b507f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace025490565b5f6108f7611453565b5f51602061579d5f395f51905f52545f51602061577d5f395f51905f529061092e90600160501b90046001600160a81b03166119f9565b91505090565b5f61093d611453565b507f557a0cdd38e5249281b5bc89e23dd8e4f8f0223d657d77792700289d81047f0854600160c01b900464ffffffffff1690565b5f61097d848484611ae3565b90505b9392505050565b5f610990611453565b6107a0611b10565b5f6107a0611bcd565b5f6107a05f51602061575d5f395f51905f52546001600160a01b031690565b5f6107d58383611bf6565b5f5f193063b3d7f6b96109dc611c86565b6040518263ffffffff1660e01b81526004016109fa91815260200190565b602060405180830381865afa925050508015610a33575060408051601f3d908101601f19168201909252610a30918101906153bd565b60015b6109805792915050565b50919050565b5f610a4c611453565b507f557a0cdd38e5249281b5bc89e23dd8e4f8f0223d657d77792700289d81047f015490565b610a7a611cc0565b610a82611d22565b610a8c5f5f611e1a565b505f51602061579d5f395f51905f5280546001600160f81b0316600160f81b179055565b60606107a0611fbd565b5f610ac3611453565b5f610ace835f6115b8565b90505f81610af05f51602061575d5f395f51905f52546001600160a01b031690565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa158015610b34573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b5891906153bd565b101590505f5f610b6783611630565b9092509050610b98610b7a8360016154d1565b610b855f600a6154c3565b610b8f90846154d1565b8891905f6119b7565b9695505050505050565b6001600160a01b038082165f9081525f51602061573d5f395f51905f5260205260408120549091166107c2565b610bd881612035565b50565b5f610be4611453565b505f51602061577d5f395f51905f525490565b5f610c00611cc0565b610c126001610c0d61204a565b612053565b5f610c1d845f612144565b9050610c32610c2a61204a565b848684612192565b5f51602061579d5f395f51905f5280546001600160f81b0316600160f81b17905590506107d8565b5f6107c28261226a565b5f610c6d611453565b6107c282612274565b610c7e611cc0565b5f51602061575d5f395f51905f52546001600160a01b03838116911614801590610cae5750610cac8261229c565b155b610ccb576040516318b10bcf60e21b815260040160405180910390fd5b6040516370a0823160e01b81523060048201525f906001600160a01b038416906370a0823190602401602060405180830381865afa158015610d0f573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d3391906153bd565b9050610d496001600160a01b0384168383612329565b816001600160a01b0316836001600160a01b03167f2ae72b44f59d038340fca5739135a1d51fc5ab720bb02d983e4c5ff4119ca7b883604051610d8e91815260200190565b60405180910390a3505f51602061579d5f395f51905f5280546001600160f81b0316600160f81b1790555050565b5050565b5f807f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb005b6001600160a01b039093165f9081526020939093525050604090205490565b5f60608082808083817fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1008054909150158015610e4157506001810154155b610e925760405162461bcd60e51b815260206004820152601560248201527f4549503731323a20556e696e697469616c697a6564000000000000000000000060448201526064015b60405180910390fd5b610e9a612388565b610ea26123d9565b604080515f80825260208201909252600f60f81b9c939b5091995046985030975095509350915050565b5f6107c282612402565b5f6107a061247c565b610ee7611cc0565b610eef612485565b5f51602061579d5f395f51905f5280546001600160f81b0316600160f81b179055565b5f610f1b611cc0565b610f286004610c0d61204a565b5f610f348460016115b8565b9050610c32610f4161204a565b848387612192565b60606107a0612628565b5f6107c282612679565b5f6107d583836126d7565b5f610f71611453565b6107c28260016115b8565b5f610f85611cc0565b610f8d611d22565b610f9a6002610c0d61204a565b5f84610fba5f51602061575d5f395f51905f52546001600160a01b031690565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa158015610ffe573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061102291906153bd565b101590506110507f000000000000000000000000000000000000000000000000000000000000000082611e1a565b505f61106461105e85612274565b5f6115b8565b9050838682808211156110a357604051633fa733bb60e21b81526001600160a01b03909316600484015260248301919091526044820152606401610e89565b5050505f6110b2876001612144565b90506110c86110bf61204a565b87878a856126ee565b5f51602061579d5f395f51905f5280546001600160f81b0316600160f81b1790559250610980915050565b5f6110fc611cc0565b611104611d22565b6111116008610c0d61204a565b5f61111b83612274565b90508285828082111561115a57604051632e52afbb60e21b81526001600160a01b03909316600484015260248301919091526044820152606401610e89565b5050505f611168865f6115b8565b90505f8161118a5f51602061575d5f395f51905f52546001600160a01b031690565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa1580156111ce573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111f291906153bd565b101590505f6112217f000000000000000000000000000000000000000000000000000000000000000083611e1a565b9050801561123657611233885f6115b8565b92505b61124a61124161204a565b8888868c6126ee565b50505f51602061579d5f395f51905f5280546001600160f81b0316600160f81b17905591506109809050565b61127e611cc0565b611286611d22565b6112905f5f611e1a565b505f5b818110156112d2576112ca8383838181106112b0576112b06154e4565b90506020020160208101906112c59190615171565b612a0f565b600101611293565b505f51602061579d5f395f51905f5280546001600160f81b0316600160f81b1790555050565b5f5f5f611303611453565b50505f51602061579d5f395f51905f525464ffffffffff808216936501000000000083049091169250600160501b9091046001600160a81b031690565b61134e868686868686612fc9565b505050505050565b5f61135f611453565b6107c2611c86565b5f611370611453565b6107c2825f612144565b5f611383611453565b5f6108b68361307c565b5f611396611453565b5f5f5f6113a28561307c565b9250925092506108b66113b25f90565b6113bd90600a6154c3565b6113c790846154d1565b6113d28560016154d1565b8391905f6119b7565b6001600160a01b038083165f9081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace01602090815260408083209385168352929052908120546107d5565b61142e611cc0565b610eef611d22565b604080518082019091525f80825260208201526107d58383613174565b5f51602061579d5f395f51905f52545f51602061577d5f395f51905f529060ff600160f81b9091041660011901610bd85760088101546001600160a01b031633148061149e57503330145b610bd857604051630622e97b60e51b815260040160405180910390fd5b5f51602061579d5f395f51905f52545f905f51602061577d5f395f51905f52906114f490600160501b90046001600160a81b03166119f9565b815461092e91906154d1565b60605f7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace005b9050806003018054611536906154f8565b80601f0160208091040260200160405190810160405280929190818152602001828054611562906154f8565b80156115ad5780601f10611584576101008083540402835291602001916115ad565b820191905f5260205f20905b81548152906001019060200180831161159057829003601f168201915b505050505091505090565b5f6107d56115c46114bb565b6115cf9060016154d1565b6115da5f600a6154c3565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace025461160691906154d1565b859190856119b7565b5f5f61161961204a565b9050611626818585613191565b5060019392505050565b5f51602061579d5f395f51905f52545f9081905f51602061577d5f395f51905f5290600160501b90046001600160a81b03168261166c826119f9565b835461167891906154d1565b90505f6116a37f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace025490565b90507f000000000000000000000000000000000000000000000000000000000000000080156116f35750600884015442906116f0906201518090600160c01b900464ffffffffff166154d1565b10155b80156116fc5750865b1561170d5790969095509350505050565b60058401545f908190815b818110156118de575f886005018281548110611736576117366154e4565b5f918252602080832091909101546001600160a01b031680835260048c019091526040909120549091506001600160781b03811690600190600160e81b900460ff1660028111156117895761178961552a565b146117955750506118d6565b6040516370a0823160e01b81523060048201525f906001600160a01b038416906370a0823190602401602060405180830381865afa1580156117d9573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117fd91906153bd565b60405163266d6a8360e11b8152600481018290529091505f906001600160a01b03851690634cdad50690602401602060405180830381865afa158015611845573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061186991906153bd565b9050826001600160781b03168111156118a05761188f6001600160781b0384168261553e565b61189990896154d1565b97506118d1565b826001600160781b03168110156118d1576118c4816001600160781b03851661553e565b6118ce90886154d1565b96505b505050505b600101611718565b5082821115611918575f856118f1611b10565b6118fb919061553e565b9050838303818111156119115781900395869003955b50506119a7565b828210156119a75760038701546bffffffffffffffffffffffff8116906c0100000000000000000000000090046001600160a01b03161580159061196957506bffffffffffffffffffffffff811615155b156119a5578284035f8061197d838561319e565b91509150805f146119a157611992828a6154d1565b985061199e81896154d1565b97505b5050505b505b5092989197509095505050505050565b5f6119e46119c4836131dd565b80156119df57505f84806119da576119da615551565b868809115b151590565b6119ef868686613209565b6108b691906154d1565b5f611a227f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace025490565b5f03611a2f57505f919050565b5f51602061579d5f395f51905f52545f51602061577d5f395f51905f529065010000000000900464ffffffffff16428111611a73575050506001600160a81b031690565b600682015464ffffffffff16428103611a9057505f949350505050565b5f611a9b8284615565565b64ffffffffff1690505f8264ffffffffff1642611ab8919061553e565b905081611ace826001600160a81b038a16615582565b611ad89190615599565b979650505050505050565b5f5f611aed61204a565b9050611afa8582856132bf565b611b05858585613322565b506001949350505050565b7f557a0cdd38e5249281b5bc89e23dd8e4f8f0223d657d77792700289d81047f01545f51602061575d5f395f51905f52545f915f51602061577d5f395f51905f52916001600160a01b03166040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa158015611b9f573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611bc391906153bd565b61092e91906154d1565b5f805f51602061575d5f395f51905f5290505f815461092e9190600160a01b900460ff166155ac565b5f5f51602061573d5f395f51905f5281611c0e610ed6565b90508065ffffffffffff168410611c4957604051637669fc0f60e11b81526004810185905265ffffffffffff82166024820152604401610e89565b611c74611c558561337f565b6001600160a01b0387165f9081526001850160205260409020906133b5565b6001600160d01b031695945050505050565b5f611caf7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace025490565b6107a0906001600160d01b0361553e565b5f51602061579d5f395f51905f52545f51602061577d5f395f51905f529060ff600160f81b9091041660011901611d0a5760405163558a1e0360e11b815260040160405180910390fd5b60060180546001600160f81b0316600160f91b179055565b5f51602061579d5f395f51905f52545f51602061577d5f395f51905f5290600160501b90046001600160a81b03165f611d5a826119f9565b90508015611e1557611d6c81836155c5565b6006840180547fff000000000000000000000000000000000000000000ffffffffff000000000016600160501b6001600160a81b0384160264ffffffffff1916174264ffffffffff161790558354909250819084905f90611dce9084906154d1565b9091555050604080518281526001600160a81b03841660208201527f46ba83b1bb5d30bf76865a9c4d50e868ef6092e32e9dbca33926fe6d81c1a129910160405180910390a15b505050565b5f5f51602061577d5f395f51905f52838015611e57575060088101544290611e54906201518090600160c01b900464ffffffffff166154d1565b10155b8015611e605750825b15611e6e575f9150506107d8565b6008810180547fffffff0000000000ffffffffffffffffffffffffffffffffffffffffffffffff16600160c01b4264ffffffffff160217905560058101545f908190815b81811015611f17575f5f611eed876005018481548110611ed457611ed46154e4565b5f918252602090912001546001600160a01b0316613467565b9092509050611efc82876154d1565b9550611f0881866154d1565b94505050806001019050611eb2565b5082821115611f3057611f2b8383036136c5565b611f43565b82821015611f4357611f43828403613767565b81838560010154611f5491906154d1565b611f5e919061553e565b6001850155611f6b612485565b6001840154604080519182526020820185905281018390527f4ec2d4038813a7f233af1d6d09519189db3ed5bc5b823bf72f6d3144574721de9060600160405180910390a15060019695505050505050565b6060611fc761386a565b65ffffffffffff16611fd7610ed6565b65ffffffffffff1614611ffd576040516301bfc1c560e61b815260040160405180910390fd5b5060408051808201909152601d81527f6d6f64653d626c6f636b6e756d6265722666726f6d3d64656661756c74000000602082015290565b5f61203e61204a565b9050610dbc8183613874565b5f6107a0613913565b7f557a0cdd38e5249281b5bc89e23dd8e4f8f0223d657d77792700289d81047f08545f51602061577d5f395f51905f52906001600160a01b03811690600160a01b900463ffffffff818116918616165f036120af575050505050565b5f5f836001600160a01b03165f36886040516020016120d0939291906155e4565b60408051601f19818403018152908290526120ea9161560a565b5f604051808303815f865af19150503d805f8114612123576040519150601f19603f3d011682016040523d82523d5f602084013e612128565b606091505b50915091508161213b5761213b8161391c565b50505050505050565b5f6107d561215382600a6154c3565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace025461217f91906154d1565b6121876114bb565b6116069060016154d1565b6121e98430847f00000000000000000000000000000000000000000000000000000000000000006121d75f51602061575d5f395f51905f52546001600160a01b031690565b6001600160a01b031693929190613944565b6121f38382613a5a565b5f51602061577d5f395f51905f528054839082905f906122149084906154d1565b909155505060408051848152602081018490526001600160a01b0380871692908816917fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d791015b60405180910390a35050505050565b5f6107c282613a8e565b5f807f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00610de4565b7f557a0cdd38e5249281b5bc89e23dd8e4f8f0223d657d77792700289d81047f05545f905f51602061577d5f395f51905f5290825b8181101561231f578260050181815481106122ee576122ee6154e4565b5f918252602090912001546001600160a01b039081169086160361231757506001949350505050565b6001016122d1565b505f949350505050565b6040516001600160a01b03838116602483015260448201839052611e1591859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050613add565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10280546060917fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10091611536906154f8565b60605f7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100611525565b5f5f51602061573d5f395f51905f528161241a610ed6565b90508065ffffffffffff16841061245557604051637669fc0f60e11b81526004810185905265ffffffffffff82166024820152604401610e89565b61246b6124618561337f565b60028401906133b5565b6001600160d01b0316949350505050565b5f6107a061386a565b61248d611d22565b5f51602061579d5f395f51905f52545f51602061577d5f395f51905f5280549091600160501b90046001600160a81b0316905f9082906124cb611b10565b6124d5919061553e565b6124df919061553e565b9050805f036124ed57505050565b5f6124ff836001600160a81b036155c5565b6001600160a81b0316905080821115612516578091505b6008840154600160e81b900462ffffff166125318385615620565b60068601805464ffffffffff19164264ffffffffff81169190911790915590945061255d9082906154d1565b6006860180547fff0000000000000000000000000000000000000000000000000000ffffffffff166501000000000064ffffffffff93909316929092027fff000000000000000000000000000000000000000000ffffffffffffffffffff1691909117600160501b6001600160a81b038716021790557fe435ccc388e2041f0f453c668f3437d28221b3fd0b446dbfae9c66d4a7b380a1846125ff83426154d1565b604080516001600160a81b03909316835260208301919091520160405180910390a15050505050565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0480546060917f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0091611536906154f8565b6001600160a01b0381165f9081527fe8b26c30fad74198956032a3533d903385d56dd795af560196f9c78d4af40d01602052604081205f51602061573d5f395f51905f52906126c790613b49565b6001600160d01b03169392505050565b5f5f6126e161204a565b9050611626818585613322565b5f51602061577d5f395f51905f525f61271b5f51602061575d5f395f51905f52546001600160a01b031690565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa15801561275f573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061278391906153bd565b9050838110156129c95760058201545f5b818110156129c6575f8460050182815481106127b2576127b26154e4565b5f918252602090912001546001600160a01b0316905060016001600160a01b0382165f908152600487016020526040902054600160e81b900460ff1660028111156127ff576127ff61552a565b1461280a57506129be565b60405163ce96cb7760e01b81523060048201525f906001600160a01b0383169063ce96cb7790602401602060405180830381865afa15801561284e573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061287291906153bd565b90505f61287f868a61553e565b90505f818310156128905782612892565b815b604051632d182be560e21b815260048101829052306024820181905260448201529091506001600160a01b0385169063b460af94906064016020604051808303815f875af11580156128e6573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061290a91906153bd565b506001600160781b038110156129205780612929565b6001600160781b035b6001600160a01b0385165f90815260048a0160205260408120805492935083929091906129609084906001600160781b031661563f565b92506101000a8154816001600160781b0302191690836001600160781b0316021790555080886001015f828254612997919061553e565b909155506129a7905081886154d1565b96508987106129b957505050506129c6565b505050505b600101612794565b50505b838110156129ea57604051630de1bf7560e21b815260040160405180910390fd5b83825f015f8282546129fc919061553e565b9091555061213b90508787878787613b83565b6001600160a01b038116612a205750565b6001600160a01b0381165f9081527f557a0cdd38e5249281b5bc89e23dd8e4f8f0223d657d77792700289d81047f0460209081526040808320815160808101835281546001600160781b03811682526f0100000000000000000000000000000081046bffffffffffffffffffffffff16948201949094527b01000000000000000000000000000000000000000000000000000000840461ffff16928101929092525f51602061577d5f395f51905f5293926060830190600160e81b900460ff166002811115612af157612af161552a565b6002811115612b0257612b0261552a565b9052509050600181606001516002811115612b1f57612b1f61552a565b14612b2957505050565b60028201545f612b37611b10565b90505f8284602001516bffffffffffffffffffffffff1683612b599190615582565b612b639190615599565b90505f612b77856040015161ffff16613c37565b9050806001600160781b0316821115612b9757806001600160781b031691505b5f5f83875f01516001600160781b03161115612c3b57865160405163ce96cb7760e01b81523060048201526001600160781b0390911685900392505f906001600160a01b038b169063ce96cb7790602401602060405180830381865afa158015612c03573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c2791906153bd565b905080831115612c35578092505b50612d57565b86516001600160781b0316841115612d57575f8080526004890160205260408120548790612c8a906f0100000000000000000000000000000090046bffffffffffffffffffffffff1688615582565b612c949190615599565b90505f896001015487612ca7919061553e565b90505f828211612cb7575f612cbb565b8282035b8a516001600160781b031688039550905080851115612cd8578094505b60405163402d267d60e01b81523060048201525f906001600160a01b038e169063402d267d90602401602060405180830381865afa158015612d1c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612d4091906153bd565b905080861115612d4e578095505b60019450505050505b815f03612d6957505050505050505050565b8015612e8f57612da28983612d925f51602061575d5f395f51905f52546001600160a01b031690565b6001600160a01b03169190613c64565b604051636e553f6560e01b8152600481018390523060248201526001600160a01b038a1690636e553f65906044016020604051808303815f875af1158015612dec573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e1091906153bd565b508651612e3090612e2b9084906001600160781b03166154d1565b613cf3565b6001600160a01b038a165f90815260048a016020526040812080546effffffffffffffffffffffffffffff19166001600160781b039390931692909217909155600189018054849290612e849084906154d1565b90915550612f799050565b604051632d182be560e21b815260048101839052306024820181905260448201526001600160a01b038a169063b460af94906064016020604051808303815f875af1158015612ee0573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f0491906153bd565b508651612f1f90612e2b9084906001600160781b031661553e565b6001600160a01b038a165f90815260048a016020526040812080546effffffffffffffffffffffffffffff19166001600160781b039390931692909217909155600189018054849290612f7390849061553e565b90915550505b6040805183815282151560208201526001600160a01b038b16917fd9259a3a643b8cdbd74028e2849ad4311e6fcf699f744fc2680a6260ce71c49a910160405180910390a2505050505050505050565b83421115612fed57604051632341d78760e11b815260048101859052602401610e89565b604080517fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60208201526001600160a01b0388169181019190915260608101869052608081018590525f906130669061305e9060a00160405160208183030381529060405280519060200120613d26565b858585613d52565b90506130728187613d7e565b61213b8188613874565b5f5f5f5f61308985612274565b90505f613096825f6115b8565b90505f816130b85f51602061575d5f395f51905f52546001600160a01b031690565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa1580156130fc573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061312091906153bd565b101590505f5f61312f83611630565b90925090505f6131586131438460016154d1565b61314e5f600a6154c3565b610b8f90856154d1565b905061316381613def565b929a91995091975095505050505050565b604080518082019091525f80825260208201526107d58383613fcc565b611e158383836001614035565b5f80806131c3856bffffffffffffffffffffffff8616670de0b6b3a7640000846119b7565b90505f6131d0825f612144565b9196919550909350505050565b5f60028260038111156131f2576131f261552a565b6131fc919061565e565b60ff166001149050919050565b5f838302815f1985870982811083820303915050805f0361323d5783828161323357613233615551565b0492505050610980565b808411613254576132546003851502601118614123565b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b5f6132ca84846113db565b90505f19811461331c578181101561330e57604051637dc7a0d960e11b81526001600160a01b03841660048201526024810182905260448101839052606401610e89565b61331c84848484035f614035565b50505050565b6001600160a01b03831661334b57604051634b637e8f60e11b81525f6004820152602401610e89565b6001600160a01b0382166133745760405163ec442f0560e01b81525f6004820152602401610e89565b611e15838383614134565b5f65ffffffffffff8211156133b1576040516306dfcc6560e41b81526030600482015260248101839052604401610e89565b5090565b81545f9081816005811115613411575f6133ce846143dd565b6133d8908561553e565b5f8881526020902090915081015465ffffffffffff90811690871610156134015780915061340f565b61340c8160016154d1565b92505b505b5f61341e87878585614542565b9050801561345b576134428761343560018461553e565b5f91825260209091200190565b54660100000000000090046001600160d01b0316611ad8565b5f979650505050505050565b6001600160a01b0381165f9081527f557a0cdd38e5249281b5bc89e23dd8e4f8f0223d657d77792700289d81047f04602052604081205481905f51602061577d5f395f51905f52906001600160781b03811690600190600160e81b900460ff1660028111156134d8576134d861552a565b146134e957505f9485945092505050565b6040516370a0823160e01b81523060048201525f906001600160a01b038716906370a0823190602401602060405180830381865afa15801561352d573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061355191906153bd565b60405163266d6a8360e11b8152600481018290529091505f906001600160a01b03881690634cdad50690602401602060405180830381865afa158015613599573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906135bd91906153bd565b90506001600160781b038110156135d457806135dd565b6001600160781b035b6001600160a01b0388165f908152600486016020526040812080546effffffffffffffffffffffffffffff19166001600160781b03848116919091179091559192509081908516830361363857909890975095505050505050565b846001600160781b031683111561365c57846001600160781b03168303915061366b565b82856001600160781b03160390505b604080518481526001600160781b03871660208201526001600160a01b038b16917fdce8ace881cfedf574a3d691e22ba08e0cc0692fab52350403d1045ebe107123910160405180910390a2909890975095505050505050565b5f51602061577d5f395f51905f5280545f816136df611b10565b6136e9919061553e565b6006840180547fff000000000000000000000000000000000000000000ffffffffffffffffffff16905590508084111561331c57928390039261372c848361553e565b83556040518481527fd923720a22e30955bb06e5d1b0849b32f5dfc178055a3416b2fd317659eda5a39060200160405180910390a150505050565b7f557a0cdd38e5249281b5bc89e23dd8e4f8f0223d657d77792700289d81047f03545f51602061577d5f395f51905f52906c0100000000000000000000000081046001600160a01b0316906bffffffffffffffffffffffff168115806137d957506bffffffffffffffffffffffff8116155b156137e45750505050565b5f5f6137f0868461319e565b91509150805f1461381d5781855f015f82825461380d91906154d1565b9091555061381d90508482613a5a565b60408051878152602081018390526001600160a01b038616917f558a9f5a20732dc47970d9366825f7548770c9d887d68b5efebd0734bc51db2791015b60405180910390a2505050505050565b5f6107a04361337f565b5f51602061573d5f395f51905f525f61388c84610ba2565b6001600160a01b038581165f8181526020869052604080822080547fffffffffffffffffffffffff000000000000000000000000000000000000000016898616908117909155905194955093928516927f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a461331c818461390e876145a1565b6145ab565b5f6107a0614711565b80511561392b57805181602001fd5b604051634f3d7def60e01b815260040160405180910390fd5b5f6060806001600160a01b0384161580159061396757506001600160a01b038511155b15613a17576040516001600160a01b03888116602483015287811660448301528681166064830152898116608483015285169060a40160408051601f198184030181529181526020820180516001600160e01b0316631b63c28b60e11b179052516139d2919061560a565b5f604051808303815f865af19150503d805f8114613a0b576040519150601f19603f3d011682016040523d82523d5f602084013e613a10565b606091505b5090935091505b82613a2e57613a28888888886147cf565b90935090505b82613a505781816040516315e5ad5960e31b8152600401610e8992919061567f565b5050505050505050565b6001600160a01b038216613a835760405163ec442f0560e01b81525f6004820152602401610e89565b610dbc5f8383614134565b6001600160a01b0381165f9081527fe8b26c30fad74198956032a3533d903385d56dd795af560196f9c78d4af40d0160205260408120545f51602061573d5f395f51905f5290610980906148ae565b5f5f60205f8451602086015f885af180613afc576040513d5f823e3d81fd5b50505f513d91508115613b13578060011415613b20565b6001600160a01b0384163b155b1561331c57604051635274afe760e01b81526001600160a01b0385166004820152602401610e89565b80545f908015613b7b57613b628361343560018461553e565b54660100000000000090046001600160d01b0316610980565b5f9392505050565b5f51602061575d5f395f51905f526001600160a01b0386811690851614613baf57613baf8487846132bf565b613bb984836148de565b8054613bcf906001600160a01b03168685612329565b836001600160a01b0316856001600160a01b0316876001600160a01b03167ffbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db8686604051613c27929190918252602082015260400190565b60405180910390a4505050505050565b5f61ffff8216808203613c4d57505f1992915050565b6064603f8216600a0a600683901c02049392505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b179052613cb58482614912565b61331c576040516001600160a01b0384811660248301525f6044830152613ce991869182169063095ea7b390606401612356565b61331c8482613add565b5f6001600160781b038211156133b1576040516306dfcc6560e41b81526078600482015260248101839052604401610e89565b5f6107c2613d32614957565b8360405161190160f01b8152600281019290925260228201526042902090565b5f5f5f5f613d6288888888614960565b925092509250613d728282614a28565b50909695505050505050565b6001600160a01b0382165f9081527f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb0060205260409020805460018101909155818114611e15576040516301d4b62360e61b81526001600160a01b038416600482015260248101829052604401610e89565b5f5f51602061577d5f395f51905f5281613e1d5f51602061575d5f395f51905f52546001600160a01b031690565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa158015613e61573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613e8591906153bd565b905083811015613fb85760058201545f5b81811015613fb5575f846005018281548110613eb457613eb46154e4565b5f918252602090912001546001600160a01b0316905060016001600160a01b0382165f908152600487016020526040902054600160e81b900460ff166002811115613f0157613f0161552a565b14613f0c5750613fad565b60405163ce96cb7760e01b81523060048201525f906001600160a01b0383169063ce96cb7790602401602060405180830381865afa158015613f50573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613f7491906153bd565b90508488035f81831015613f885782613f8a565b815b9050613f9681886154d1565b9650898710613fa85750505050613fb5565b505050505b600101613e96565b50505b80841115613fc4578093505b509192915050565b6040805180820182525f80825260208083018290526001600160a01b03861682527fe8b26c30fad74198956032a3533d903385d56dd795af560196f9c78d4af40d019052919091205f51602061573d5f395f51905f529061402d9084614ae0565b949350505050565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace006001600160a01b03851661407f5760405163e602df0560e01b81525f6004820152602401610e89565b6001600160a01b0384166140a857604051634a1406b160e11b81525f6004820152602401610e89565b6001600160a01b038086165f9081526001830160209081526040808320938816835292905220839055811561411c57836001600160a01b0316856001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258560405161225b91815260200190565b5050505050565b634e487b715f52806020526024601cfd5b61413f838383614b50565b6001600160a01b0383166141b1575f6141767f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace025490565b90506001600160d01b038181808211156141ac57604051630e58ae9360e11b815260048101929092526024820152604401610e89565b505050505b6141bc838383614c9c565b816001600160a01b0316836001600160a01b0316036141da57505050565b6001600160a01b0383161580159061422857506001600160a01b0383165f9081527f557a0cdd38e5249281b5bc89e23dd8e4f8f0223d657d77792700289d81047f07602052604090205460ff165b156142de577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636fc4fdc18461426686612274565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03909216600483015260248201525f60448201526064015f604051808303815f87803b1580156142c7575f5ffd5b505af11580156142d9573d5f5f3e3d5ffd5b505050505b6001600160a01b0382161580159061432c57506001600160a01b0382165f9081527f557a0cdd38e5249281b5bc89e23dd8e4f8f0223d657d77792700289d81047f07602052604090205460ff165b15611e15577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636fc4fdc18361436a85612274565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03909216600483015260248201525f60448201526064015f604051808303815f87803b1580156143cb575f5ffd5b505af115801561213b573d5f5f3e3d5ffd5b5f600182116143ea575090565b81600170010000000000000000000000000000000082106144105760809190911c9060401b5b68010000000000000000821061442b5760409190911c9060201b5b64010000000082106144425760209190911c9060101b5b6201000082106144575760109190911c9060081b5b610100821061446b5760089190911c9060041b5b6010821061447e5760049190911c9060021b5b6004821061448a5760011b5b600302600190811c908185816144a2576144a2615551565b048201901c905060018185816144ba576144ba615551565b048201901c905060018185816144d2576144d2615551565b048201901c905060018185816144ea576144ea615551565b048201901c9050600181858161450257614502615551565b048201901c9050600181858161451a5761451a615551565b048201901c905061453981858161453357614533615551565b04821190565b90039392505050565b5f5b81831015614599575f6145578484614d0d565b5f8781526020902090915065ffffffffffff86169082015465ffffffffffff16111561458557809250614593565b6145908160016154d1565b93505b50614544565b509392505050565b5f6107c282610c64565b5f51602061573d5f395f51905f526001600160a01b03848116908416148015906145d457505f82115b1561331c576001600160a01b0384161561467d576001600160a01b0384165f9081526001820160205260408120819061461890614d2761461387614d32565b614d65565b6001600160d01b031691506001600160d01b03169150856001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051614672929190918252602082015260400190565b60405180910390a250505b6001600160a01b0383161561331c576001600160a01b0383165f908152600182016020526040812081906146b790614d9d61461387614d32565b6001600160d01b031691506001600160d01b03169150846001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724838360405161385a929190918252602082015260400190565b5f336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001681036107c557604051630c281d0f60e11b81525f60048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906318503a1e906024016040805180830381865afa1580156147a4573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906147c891906156b2565b5092915050565b6040516001600160a01b0384811660248301528381166044830152606482018390525f916060918391829189169060840160408051601f198184030181529181526020820180516001600160e01b03166323b872dd60e01b17905251614835919061560a565b5f604051808303815f865af19150503d805f811461486e576040519150601f19603f3d011682016040523d82523d5f602084013e614873565b606091505b50915091506148828282614da8565b61488d575f8161489f565b600160405180602001604052805f8152505b93509350505094509492505050565b5f63ffffffff8211156133b1576040516306dfcc6560e41b81526020600482015260248101839052604401610e89565b6001600160a01b03821661490757604051634b637e8f60e11b81525f6004820152602401610e89565b610dbc825f83614134565b5f5f5f5f60205f8651602088015f8a5af192503d91505f519050828015610b98575081156149435780600114610b98565b50505050506001600160a01b03163b151590565b5f6107a0614ddb565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561499957505f91506003905082614a1e565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa1580156149ea573d5f5f3e3d5ffd5b5050604051601f1901519150506001600160a01b038116614a1557505f925060019150829050614a1e565b92505f91508190505b9450945094915050565b5f826003811115614a3b57614a3b61552a565b03614a44575050565b6001826003811115614a5857614a5861552a565b03614a765760405163f645eedf60e01b815260040160405180910390fd5b6002826003811115614a8a57614a8a61552a565b03614aab5760405163fce698f760e01b815260048101829052602401610e89565b6003826003811115614abf57614abf61552a565b03610dbc576040516335e2f38360e21b815260048101829052602401610e89565b604080518082019091525f8082526020820152825f018263ffffffff1681548110614b0d57614b0d6154e4565b5f9182526020918290206040805180820190915291015465ffffffffffff81168252660100000000000090046001600160d01b0316918101919091529392505050565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace006001600160a01b038416614b9d5781816002015f828254614b9291906154d1565b90915550614c0d9050565b6001600160a01b0384165f9081526020829052604090205482811015614bef5760405163391434e360e21b81526001600160a01b03861660048201526024810182905260448101849052606401610e89565b6001600160a01b0385165f9081526020839052604090209083900390555b6001600160a01b038316614c2b576002810180548390039055614c49565b6001600160a01b0383165f9081526020829052604090208054830190555b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051614c8e91815260200190565b60405180910390a350505050565b5f51602061573d5f395f51905f526001600160a01b038416614cce57614ccb81600201614d9d61461385614d32565b50505b6001600160a01b038316614cf257614cef81600201614d2761461385614d32565b50505b61331c614cfe85610ba2565b614d0785610ba2565b846145ab565b5f614d1b6002848418615599565b6107d5908484166154d1565b5f6107d582846156e5565b5f6001600160d01b038211156133b1576040516306dfcc6560e41b815260d0600482015260248101839052604401610e89565b5f5f614d90614d72610ed6565b614d88614d7e88613b49565b868863ffffffff16565b879190614e4e565b915091505b935093915050565b5f6107d58284615704565b5f8280156107d55750815115806107d5575060208251101580156107d55750818060200190518101906107d59190615723565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f614e05614e5b565b614e0d614ed6565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b5f80614d90858585614f2b565b5f7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10081614e86612388565b805190915015614e9e57805160209091012092915050565b81548015614ead579392505050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470935050505090565b5f7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10081614f016123d9565b805190915015614f1957805160209091012092915050565b60018201548015614ead579392505050565b82545f9081908015615041575f614f478761343560018561553e565b805490915065ffffffffffff80821691660100000000000090046001600160d01b0316908816821115614f8d57604051632520601d60e01b815260040160405180910390fd5b8765ffffffffffff168265ffffffffffff1603614fe05786614fb48a61343560018861553e565b80546001600160d01b039290921666010000000000000265ffffffffffff909216919091179055615033565b6040805180820190915265ffffffffffff808a1682526001600160d01b03808a1660208085019182528d54600181018f555f8f815291909120945191519092166601000000000000029216919091179101555b9450859350614d9592505050565b50506040805180820190915265ffffffffffff80851682526001600160d01b0380851660208085019182528854600181018a555f8a8152918220955192519093166601000000000000029190931617920191909155905081614d95565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6107d5602083018461509e565b5f602082840312156150ee575f5ffd5b5035919050565b6001600160a01b0381168114610bd8575f5ffd5b5f5f6040838503121561511a575f5ffd5b8235615125816150f5565b946020939093013593505050565b5f5f5f60608486031215615145575f5ffd5b8335615150816150f5565b92506020840135615160816150f5565b929592945050506040919091013590565b5f60208284031215615181575f5ffd5b8135610980816150f5565b5f5f6040838503121561519d575f5ffd5b8235915060208301356151af816150f5565b809150509250929050565b5f5f604083850312156151cb575f5ffd5b82356151d6816150f5565b915060208301356151af816150f5565b60ff60f81b8816815260e060208201525f61520460e083018961509e565b8281036040840152615216818961509e565b606084018890526001600160a01b038716608085015260a0840186905283810360c0850152845180825260208087019350909101905f5b8181101561526b57835183526020938401939092019160010161524d565b50909b9a5050505050505050505050565b5f5f5f6060848603121561528e575f5ffd5b8335925060208401356152a0816150f5565b915060408401356152b0816150f5565b809150509250925092565b5f5f602083850312156152cc575f5ffd5b823567ffffffffffffffff8111156152e2575f5ffd5b8301601f810185136152f2575f5ffd5b803567ffffffffffffffff811115615308575f5ffd5b8560208260051b840101111561531c575f5ffd5b6020919091019590945092505050565b5f5f5f5f5f5f60c08789031215615341575f5ffd5b863561534c816150f5565b95506020870135945060408701359350606087013560ff8116811461536f575f5ffd5b9598949750929560808101359460a0909101359350915050565b5f5f6040838503121561539a575f5ffd5b82356153a5816150f5565b9150602083013563ffffffff811681146151af575f5ffd5b5f602082840312156153cd575f5ffd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b6001815b6001841115614d9557808504811115615407576154076153d4565b600184161561541557908102905b60019390931c9280026153ec565b5f82615431575060016107d8565b8161543d57505f6107d8565b8160018114615453576002811461545d57615479565b60019150506107d8565b60ff84111561546e5761546e6153d4565b50506001821b6107d8565b5060208310610133831016604e8410600b841016171561549c575081810a6107d8565b6154a85f1984846153e8565b805f19048211156154bb576154bb6153d4565b029392505050565b5f6107d560ff841683615423565b808201808211156107d8576107d86153d4565b634e487b7160e01b5f52603260045260245ffd5b600181811c9082168061550c57607f821691505b602082108103610a3d57634e487b7160e01b5f52602260045260245ffd5b634e487b7160e01b5f52602160045260245ffd5b818103818111156107d8576107d86153d4565b634e487b7160e01b5f52601260045260245ffd5b64ffffffffff82811682821603908111156107d8576107d86153d4565b80820281158282048414176107d8576107d86153d4565b5f826155a7576155a7615551565b500490565b60ff81811683821601908111156107d8576107d86153d4565b6001600160a81b0382811682821603908111156107d8576107d86153d4565b8284823760609190911b6bffffffffffffffffffffffff19169101908152601401919050565b5f82518060208501845e5f920191825250919050565b6001600160a81b0381811683821601908111156107d8576107d86153d4565b6001600160781b0382811682821603908111156107d8576107d86153d4565b5f60ff83168061567057615670615551565b8060ff84160691505092915050565b604081525f615691604083018561509e565b82810360208401526108b6818561509e565b805180151581146107c5575f5ffd5b5f5f604083850312156156c3575f5ffd5b82516156ce816150f5565b91506156dc602084016156a3565b90509250929050565b6001600160d01b0382811682821603908111156107d8576107d86153d4565b6001600160d01b0381811683821601908111156107d8576107d86153d4565b5f60208284031215615733575f5ffd5b6107d5826156a356fee8b26c30fad74198956032a3533d903385d56dd795af560196f9c78d4af40d000773e532dfede91f04b12a73d3d2acd361424f41f76b4fb79f090161e36b4e00557a0cdd38e5249281b5bc89e23dd8e4f8f0223d657d77792700289d81047f00557a0cdd38e5249281b5bc89e23dd8e4f8f0223d657d77792700289d81047f06a264697066735822122059728651a8a84ccea14a1e188e831bc14d72c022261544ee6056bbf42452920464736f6c634300081b00330000000000000000000000000c9a3dd6b8f28529d72d7f9ce918d493519ee3830000000000000000000000000d52d06ceb8dcdeeb40cfd9f17489b350dd7f8a3000000000000000000000000000000000022d473030f116ddee9f6b43ac78ba30000000000000000000000000000000000000000000000000000000000000001