60 txs
626 calls
constructor
constructor()
functions
allowance
viewfunction allowance(address owner, address spender) view returns (uint256)
allowOthersToAddToLP
viewfunction allowOthersToAddToLP() view returns (bool)
balanceOf
viewfunction balanceOf(address account) view returns (uint256)
buyFee
viewfunction buyFee() view returns (uint16 marketing, uint16 autoLP)
claimsDAppWallet
viewfunction claimsDAppWallet() view returns (address)
decimals
purefunction decimals() pure returns (uint8)
getClaimDapp
viewfunction getClaimDapp() view returns (address)
getContractStats
viewfunction getContractStats() view returns (uint256 totalSupply_, uint256 contractBalance, uint256 txCount, uint256 swapThreshold, bool normalModeActive)
getCurrentBuyTax
viewfunction getCurrentBuyTax() view returns (uint256)
getCurrentFees
viewfunction getCurrentFees() view returns (uint16 buyMarketing, uint16 buyLP, uint16 sellMarketing, uint16 sellLP)
getCurrentSellTax
viewfunction getCurrentSellTax() view returns (uint256)
getCurrentTransferTax
viewfunction getCurrentTransferTax() view returns (uint256)
getOGExemption
viewfunction getOGExemption(address holder) view returns (uint256 exemptionAmount, uint256 exemptionStarts, bool isActive)
isAddressAMM
viewfunction isAddressAMM(address account) view returns (bool)
isAddressBlacklisted
viewfunction isAddressBlacklisted(address account) view returns (bool)
isAddressExcludedFromFees
viewfunction isAddressExcludedFromFees(address account) view returns (bool)
isAutomatedMarketMaker
viewfunction isAutomatedMarketMaker(address) view returns (bool)
isBlacklisted
viewfunction isBlacklisted(address) view returns (bool)
isExcludedFromFees
viewfunction isExcludedFromFees(address) view returns (bool)
marketingWallet
viewfunction marketingWallet() view returns (address)
MAX_FEE_LIMIT
viewfunction MAX_FEE_LIMIT() view returns (uint256)
name
viewfunction name() view returns (string)
ogHolders
viewfunction ogHolders(address) view returns (uint256 exemptionAmount, uint256 exemptionStarts)
owner
viewfunction owner() view returns (address)
pendingOwner
viewfunction pendingOwner() view returns (address)
sellFee
viewfunction sellFee() view returns (uint16 marketing, uint16 autoLP)
swapTokensAtAmount
viewfunction swapTokensAtAmount() view returns (uint256)
symbol
viewfunction symbol() view returns (string)
totalSupply
viewfunction totalSupply() view returns (uint256)
tradingEnabled
viewfunction tradingEnabled() view returns (bool)
uniswapV2Pair
viewfunction uniswapV2Pair() view returns (address)
uniswapV2Router
viewfunction uniswapV2Router() view returns (address)
acceptOwnership
nonpayablefunction acceptOwnership()
approve
nonpayablefunction approve(address spender, uint256 value) returns (bool)
blacklist
nonpayablefunction blacklist(address user, bool value)
claimOtherERC20
nonpayablefunction claimOtherERC20(address _token, uint256 _amount)
enableOthersToAddToLP
nonpayablefunction enableOthersToAddToLP()
enableTrading
nonpayablefunction enableTrading()
excludeFromFees
nonpayablefunction excludeFromFees(address user, bool value)
manageLiquidityPairs
nonpayablefunction manageLiquidityPairs(address _newPair, bool value)
manualSwap
nonpayablefunction manualSwap(uint256 percentage)
renounceOwnership
nonpayablefunction renounceOwnership()
setClaimDapp
nonpayablefunction setClaimDapp(address claimDappAddress)
setOGHolder
nonpayablefunction setOGHolder(address holder, uint256 exemptionAmount)
switchToNormalTax
nonpayablefunction switchToNormalTax()
transfer
nonpayablefunction transfer(address to, uint256 value) returns (bool)
transferFrom
nonpayablefunction transferFrom(address from, address to, uint256 value) returns (bool)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
updateBuyFees
nonpayablefunction updateBuyFees(uint16 _marketing, uint16 _autoLP)
updateMarketingWallet
nonpayablefunction updateMarketingWallet(address newMarketingWallet)
updateSellFees
nonpayablefunction updateSellFees(uint16 _marketing, uint16 _autoLP)
updateSwapTokensAtAmount
nonpayablefunction updateSwapTokensAtAmount(uint256 amount)
events
Approval
event Approval(address indexed owner, address indexed spender, uint256 value)
BuyFeesUpdated
event BuyFeesUpdated(uint16 indexed marketingFee, uint16 indexed liquidityFee)
EthReceived
event EthReceived(address payer, uint256 amount)
FeesSwapped
event FeesSwapped(uint256 indexed ethForLiquidity, uint256 indexed tokensForLiquidity, uint256 indexed ethForMarketing)
OGHolderSet
event OGHolderSet(address indexed holder, uint256 exemptionAmount, uint256 exemptionStarts)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
OwnershipTransferStarted
event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner)
SellFeesUpdated
event SellFeesUpdated(uint16 indexed marketingFee, uint16 indexed liquidityFee)
Transfer
event Transfer(address indexed from, address indexed to, uint256 value)
errors
BlacklistedUser
error BlacklistedUser()
CannotClaimNativeToken
error CannotClaimNativeToken()
CannotRemoveMainPair
error CannotRemoveMainPair()
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)
FeesLimitExceeds
error FeesLimitExceeds()
InvalidAmount
error InvalidAmount()
InvalidPercentage
error InvalidPercentage()
OnlyOwnerCanAddLP
error OnlyOwnerCanAddLP()
OnlyOwnerOrClaimsDappWallet
error OnlyOwnerOrClaimsDappWallet()
OnlyOwnerOrMarketingWallet
error OnlyOwnerOrMarketingWallet()
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
TradingNotEnabled
error TradingNotEnabled()
UpdateBoolValue
error UpdateBoolValue()
ZeroAddressNotAllowed
error ZeroAddressNotAllowed()
creation bytecode
0x60a060405267016345785d8a00006009556509184e72a000600a555f600b5f6101000a81548160ff0219169083151502179055505f600b60016101000a81548160ff0219169083151502179055505f600b60026101000a81548160ff021916908315150217905550348015610072575f5ffd5b50336040518060400160405280600981526020017f4f6d6e696d696e647300000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f4f4d4e495300000000000000000000000000000000000000000000000000000081525081600390816100ef9190611d5b565b5080600490816100ff9190611d5b565b5050505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610172575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016101699190611e69565b60405180910390fd5b610181816106fe60201b60201c565b506001600781905550737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505060805173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561021d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102419190611eb0565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060805173ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102a8573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102cc9190611eb0565b6040518363ffffffff1660e01b81526004016102e9929190611edb565b6020604051808303815f875af1158015610305573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103299190611eb0565b60135f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160145f60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506005600c5f015f6101000a81548161ffff021916908361ffff1602179055505f600c5f0160026101000a81548161ffff021916908361ffff1602179055506005600f819055506005600d5f015f6101000a81548161ffff021916908361ffff1602179055505f600d5f0160026101000a81548161ffff021916908361ffff16021790555060056010819055505f61047961073460201b60201c565b3060405161048690611b11565b610491929190611edb565b604051809103905ff0801580156104aa573d5f5f3e3d5ffd5b50905080601160016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073387d344376a8ce500c3bd86eec5f104dbae2753460125f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160155f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160155f601160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160155f61062161073460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160155f60125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506106f83360095461075c60201b60201c565b506123d9565b60065f6101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055610731816107e160201b60201c565b50565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036107cc575f6040517fec442f050000000000000000000000000000000000000000000000000000000081526004016107c39190611e69565b60405180910390fd5b6107dd5f83836108a460201b60201c565b5050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60165f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168061093f575060165f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15610976576040517fd9a60d2d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f81036109935761098e83835f610f3c60201b60201c565b610f37565b60145f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156109f65750600b60029054906101000a900460ff16155b8015610a49575060155f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15610a80576040517fe614db7800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f610a903061115560201b60201c565b90505f600a548210159050808015610aef575060145f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015610b075750600b5f9054906101000a900460ff16155b8015610b5a575060155f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015610bad575060155f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15610bc257610bc18261119a60201b60201c565b5b5f60155f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015610c61575060155f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b905080610c8157610c79868686610f3c60201b60201c565b505050610f37565b600b60019054906101000a900460ff16610cc7576040517f12f1f92300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5f90505f4290505f610cde6114c260201b60201c565b9050600e5f81546001019190508190555060145f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015610d4657505f600f54115b15610d8c575f610d5a61150c60201b60201c565b90505f8183610d699190611f2f565b90506064818a610d799190611f62565b610d839190611fd0565b94505050610ef7565b60145f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015610de357505f601054115b15610ed2575f60085f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2090505f5f825f0154118015610e3f575081600101548410155b8015610e4e5750815f01548911155b90508015610e8e5788825f015f828254610e689190612000565b925050819055506064838a610e7d9190611f62565b610e879190611fd0565b9450610ecb565b5f610e9d61158060201b60201c565b90505f8185610eac9190611f2f565b90506064818c610ebc9190611f62565b610ec69190611fd0565b965050505b5050610ef6565b5f811115610ef55760648188610ee89190611f62565b610ef29190611fd0565b92505b5b5b5f831115610f1f57610f10893085610f3c60201b60201c565b8287610f1c9190612000565b96505b610f30898989610f3c60201b60201c565b5050505050505b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610f8c578060025f828254610f809190611f2f565b9250508190555061105a565b5f5f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015611015578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161100c93929190612042565b60405180910390fd5b8181035f5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036110a1578060025f82825403925050819055506110eb565b805f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516111489190612077565b60405180910390a3505050565b5f5f5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6001600b5f6101000a81548160ff0219169083151502179055505f601054600f546111c59190611f2f565b90505f81036112bc576111dd826115f460201b60201c565b5f4790505f8111156112b5575f601160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051611230906120bd565b5f6040518083038185875af1925050503d805f811461126a576040519150601f19603f3d011682016040523d82523d5f602084013e61126f565b606091505b50509050806112b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112aa9061212b565b60405180910390fd5b505b50506114a6565b5f8183600d5f015f9054906101000a900461ffff16600c5f015f9054906101000a900461ffff166112ed9190612156565b61ffff166112fb9190611f62565b6113059190611fd0565b90505f81846113149190612000565b90505f6002826113249190611fd0565b90505f81866113339190612000565b90505f479050611348826115f460201b60201c565b5f81476113559190612000565b90505f8382866113659190611f62565b61136f9190611fd0565b90505f8111801561137f57505f85115b1561139557611394858261180d60201b60201c565b5b5f4790505f81111561146d575f601160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516113e8906120bd565b5f6040518083038185875af1925050503d805f8114611422576040519150601f19603f3d011682016040523d82523d5f602084013e611427565b606091505b505090508061146b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114629061212b565b60405180910390fd5b505b8086837ff8cfc1c15ead481ffc3a2df6126e88c84a6730799e332fcfe2dbc386373d517160405160405180910390a45050505050505050505b5f600b5f6101000a81548160ff02191690831515021790555050565b5f60115f9054906101000a900460ff16156114df575f9050611509565b600a600e54116114f257600f9050611509565b601e600e541161150557600a9050611509565b5f90505b90565b5f60115f9054906101000a900460ff161561152b57600f54905061157d565b600a600e541161153e576019905061157d565b6014600e5411611551576014905061157d565b6019600e541161156457600f905061157d565b601e600e541161157757600a905061157d565b600f5490505b90565b5f60115f9054906101000a900460ff161561159f5760105490506115f1565b600a600e54116115b257601990506115f1565b6014600e54116115c557601490506115f1565b6019600e54116115d857600f90506115f1565b601e600e54116115eb57600a90506115f1565b60105490505b90565b5f600267ffffffffffffffff8111156116105761160f611b28565b5b60405190808252806020026020018201604052801561163e5781602001602082028036833780820191505090505b50905030815f815181106116555761165461218b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060805173ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116da573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116fe9190611eb0565b816001815181106117125761171161218b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508161175f306080516118a860201b60201c565b101561179957611798306080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61192a60201b60201c565b5b60805173ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016117dc9594939291906122a8565b5f604051808303815f87803b1580156117f3575f5ffd5b505af1158015611805573d5f5f3e3d5ffd5b505050505050565b60805173ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f5f61183e61073460201b60201c565b426040518863ffffffff1660e01b815260040161186096959493929190612300565b60606040518083038185885af115801561187c573d5f5f3e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906118a19190612389565b5050505050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b61193d838383600161194260201b60201c565b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036119b2575f6040517fe602df050000000000000000000000000000000000000000000000000000000081526004016119a99190611e69565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611a22575f6040517f94280d62000000000000000000000000000000000000000000000000000000008152600401611a199190611e69565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015611b0b578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051611b029190612077565b60405180910390a35b50505050565b61218d806168da83390190565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680611b9957607f821691505b602082108103611bac57611bab611b55565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302611c0e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82611bd3565b611c188683611bd3565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f611c5c611c57611c5284611c30565b611c39565b611c30565b9050919050565b5f819050919050565b611c7583611c42565b611c89611c8182611c63565b848454611bdf565b825550505050565b5f5f905090565b611ca0611c91565b611cab818484611c6c565b505050565b5b81811015611cce57611cc35f82611c98565b600181019050611cb1565b5050565b601f821115611d1357611ce481611bb2565b611ced84611bc4565b81016020851015611cfc578190505b611d10611d0885611bc4565b830182611cb0565b50505b505050565b5f82821c905092915050565b5f611d335f1984600802611d18565b1980831691505092915050565b5f611d4b8383611d24565b9150826002028217905092915050565b611d6482611b1e565b67ffffffffffffffff811115611d7d57611d7c611b28565b5b611d878254611b82565b611d92828285611cd2565b5f60209050601f831160018114611dc3575f8415611db1578287015190505b611dbb8582611d40565b865550611e22565b601f198416611dd186611bb2565b5f5b82811015611df857848901518255600182019150602085019450602081019050611dd3565b86831015611e155784890151611e11601f891682611d24565b8355505b6001600288020188555050505b505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f611e5382611e2a565b9050919050565b611e6381611e49565b82525050565b5f602082019050611e7c5f830184611e5a565b92915050565b5f5ffd5b611e8f81611e49565b8114611e99575f5ffd5b50565b5f81519050611eaa81611e86565b92915050565b5f60208284031215611ec557611ec4611e82565b5b5f611ed284828501611e9c565b91505092915050565b5f604082019050611eee5f830185611e5a565b611efb6020830184611e5a565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611f3982611c30565b9150611f4483611c30565b9250828201905080821115611f5c57611f5b611f02565b5b92915050565b5f611f6c82611c30565b9150611f7783611c30565b9250828202611f8581611c30565b91508282048414831517611f9c57611f9b611f02565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f611fda82611c30565b9150611fe583611c30565b925082611ff557611ff4611fa3565b5b828204905092915050565b5f61200a82611c30565b915061201583611c30565b925082820390508181111561202d5761202c611f02565b5b92915050565b61203c81611c30565b82525050565b5f6060820190506120555f830186611e5a565b6120626020830185612033565b61206f6040830184612033565b949350505050565b5f60208201905061208a5f830184612033565b92915050565b5f81905092915050565b50565b5f6120a85f83612090565b91506120b38261209a565b5f82019050919050565b5f6120c78261209d565b9150819050919050565b5f82825260208201905092915050565b7f4d61726b6574696e67207472616e73666572206661696c6564000000000000005f82015250565b5f6121156019836120d1565b9150612120826120e1565b602082019050919050565b5f6020820190508181035f83015261214281612109565b9050919050565b5f61ffff82169050919050565b5f61216082612149565b915061216b83612149565b9250828201905061ffff81111561218557612184611f02565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f819050919050565b5f6121db6121d66121d1846121b8565b611c39565b611c30565b9050919050565b6121eb816121c1565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61222381611e49565b82525050565b5f612234838361221a565b60208301905092915050565b5f602082019050919050565b5f612256826121f1565b61226081856121fb565b935061226b8361220b565b805f5b8381101561229b5781516122828882612229565b975061228d83612240565b92505060018101905061226e565b5085935050505092915050565b5f60a0820190506122bb5f830188612033565b6122c860208301876121e2565b81810360408301526122da818661224c565b90506122e96060830185611e5a565b6122f66080830184612033565b9695505050505050565b5f60c0820190506123135f830189611e5a565b6123206020830188612033565b61232d60408301876121e2565b61233a60608301866121e2565b6123476080830185611e5a565b61235460a0830184612033565b979650505050505050565b61236881611c30565b8114612372575f5ffd5b50565b5f815190506123838161235f565b92915050565b5f5f5f606084860312156123a05761239f611e82565b5b5f6123ad86828701612375565b93505060206123be86828701612375565b92505060406123cf86828701612375565b9150509250925092565b6080516144c66124145f395f8181610de9015281816126fc015281816127dc0152818161280c01528181612854015261377d01526144c65ff3fe608060405260043610610302575f3560e01c806389d5c72b1161018f578063d257b34f116100db578063e737b57b11610094578063f2fde38b1161006e578063f2fde38b14610b90578063f54493d814610bb8578063fe575a8714610be2578063fef7090a14610c1e57610342565b8063e737b57b14610aec578063ea84a65c14610b28578063ec0e39bf14610b6657610342565b8063d257b34f146109de578063dd62ed3e14610a06578063dfe6b5d614610a42578063e2f4560514610a70578063e30c397814610a9a578063e35f5bdd14610ac457610342565b8063a9059cbb11610148578063b70143c911610122578063b70143c91461093c578063b8076f7414610964578063c02466681461097a578063c5be000c146109a257610342565b8063a9059cbb146108b0578063aacebbe3146108ec578063b384f7641461091457610342565b806389d5c72b146107ca5780638a8c523c146107e05780638da5cb5b146107f657806390683e8c1461082057806395d89b411461085c5780639edc5f0f1461088657610342565b8063470624021161024e57806370a082311161020757806375f0a874116101e157806375f0a8741461072657806379ba5097146107505780638428841714610766578063858e4a02146107a257610342565b806370a08231146106a7578063715018a6146106e357806371908a03146106f957610342565b8063470624021461059a57806349bd5a5e146105c55780634ada218b146105ef5780634eed4bd5146106195780634fbee1931461064157806360c067011461067d57610342565b806323b872dd116102bb578063313ce56711610295578063313ce567146104f6578063380628da14610520578063404e51291461054857806341bc2aa61461057057610342565b806323b872dd1461045257806323eb11511461048e5780632b14ca56146104cb57610342565b8063039bed0b1461034657806306fdde031461036e578063095ea7b3146103985780631053d256146103d45780631694505e146103fe57806318160ddd1461042857610342565b36610342577f85177f287940f2f05425a4029951af0e047a7f9c4eaa9a6e6917bcd869f866953334604051610338929190613885565b60405180910390a1005b5f5ffd5b348015610351575f5ffd5b5061036c600480360381019061036791906138e7565b610c48565b005b348015610379575f5ffd5b50610382610d27565b60405161038f9190613995565b60405180910390f35b3480156103a3575f5ffd5b506103be60048036038101906103b99190613a09565b610db7565b6040516103cb9190613a61565b60405180910390f35b3480156103df575f5ffd5b506103e8610dd9565b6040516103f59190613a7a565b60405180910390f35b348015610409575f5ffd5b50610412610de7565b60405161041f9190613aee565b60405180910390f35b348015610433575f5ffd5b5061043c610e0b565b6040516104499190613a7a565b60405180910390f35b34801561045d575f5ffd5b5061047860048036038101906104739190613b07565b610e14565b6040516104859190613a61565b60405180910390f35b348015610499575f5ffd5b506104b460048036038101906104af9190613b57565b610e42565b6040516104c2929190613b82565b60405180910390f35b3480156104d6575f5ffd5b506104df610e62565b6040516104ed929190613bb8565b60405180910390f35b348015610501575f5ffd5b5061050a610e8d565b6040516105179190613bfa565b60405180910390f35b34801561052b575f5ffd5b5061054660048036038101906105419190613b57565b610e95565b005b348015610553575f5ffd5b5061056e60048036038101906105699190613c3d565b610ee0565b005b34801561057b575f5ffd5b5061058461102b565b6040516105919190613a7a565b60405180910390f35b3480156105a5575f5ffd5b506105ae611039565b6040516105bc929190613bb8565b60405180910390f35b3480156105d0575f5ffd5b506105d9611064565b6040516105e69190613c7b565b60405180910390f35b3480156105fa575f5ffd5b50610603611089565b6040516106109190613a61565b60405180910390f35b348015610624575f5ffd5b5061063f600480360381019061063a9190613a09565b61109c565b005b34801561064c575f5ffd5b5061066760048036038101906106629190613b57565b6112f8565b6040516106749190613a61565b60405180910390f35b348015610688575f5ffd5b50610691611315565b60405161069e9190613a61565b60405180910390f35b3480156106b2575f5ffd5b506106cd60048036038101906106c89190613b57565b611328565b6040516106da9190613a7a565b60405180910390f35b3480156106ee575f5ffd5b506106f761136d565b005b348015610704575f5ffd5b5061070d611380565b60405161071d9493929190613c94565b60405180910390f35b348015610731575f5ffd5b5061073a6113dc565b6040516107479190613c7b565b60405180910390f35b34801561075b575f5ffd5b50610764611402565b005b348015610771575f5ffd5b5061078c60048036038101906107879190613b57565b611490565b6040516107999190613a61565b60405180910390f35b3480156107ad575f5ffd5b506107c860048036038101906107c391906138e7565b6114ad565b005b3480156107d5575f5ffd5b506107de61158c565b005b3480156107eb575f5ffd5b506107f46115b0565b005b348015610801575f5ffd5b5061080a6115d5565b6040516108179190613c7b565b60405180910390f35b34801561082b575f5ffd5b5061084660048036038101906108419190613b57565b6115fd565b6040516108539190613a61565b60405180910390f35b348015610867575f5ffd5b5061087061164f565b60405161087d9190613995565b60405180910390f35b348015610891575f5ffd5b5061089a6116df565b6040516108a79190613a7a565b60405180910390f35b3480156108bb575f5ffd5b506108d660048036038101906108d19190613a09565b6116e4565b6040516108e39190613a61565b60405180910390f35b3480156108f7575f5ffd5b50610912600480360381019061090d9190613b57565b611706565b005b34801561091f575f5ffd5b5061093a60048036038101906109359190613c3d565b6117b7565b005b348015610947575f5ffd5b50610962600480360381019061095d9190613cd7565b611988565b005b34801561096f575f5ffd5b50610978611c0f565b005b348015610985575f5ffd5b506109a0600480360381019061099b9190613c3d565b611c34565b005b3480156109ad575f5ffd5b506109c860048036038101906109c39190613b57565b611d7f565b6040516109d59190613a61565b60405180910390f35b3480156109e9575f5ffd5b50610a0460048036038101906109ff9190613cd7565b611dd1565b005b348015610a11575f5ffd5b50610a2c6004803603810190610a279190613d02565b611e2b565b604051610a399190613a7a565b60405180910390f35b348015610a4d575f5ffd5b50610a56611ead565b604051610a67959493929190613d40565b60405180910390f35b348015610a7b575f5ffd5b50610a84611ee9565b604051610a919190613a7a565b60405180910390f35b348015610aa5575f5ffd5b50610aae611eef565b604051610abb9190613c7b565b60405180910390f35b348015610acf575f5ffd5b50610aea6004803603810190610ae59190613a09565b611f17565b005b348015610af7575f5ffd5b50610b126004803603810190610b0d9190613b57565b61214a565b604051610b1f9190613a61565b60405180910390f35b348015610b33575f5ffd5b50610b4e6004803603810190610b499190613b57565b61219c565b604051610b5d93929190613d91565b60405180910390f35b348015610b71575f5ffd5b50610b7a61222a565b604051610b879190613c7b565b60405180910390f35b348015610b9b575f5ffd5b50610bb66004803603810190610bb19190613b57565b612252565b005b348015610bc3575f5ffd5b50610bcc6122fe565b604051610bd99190613a7a565b60405180910390f35b348015610bed575f5ffd5b50610c086004803603810190610c039190613b57565b61230c565b604051610c159190613a61565b60405180910390f35b348015610c29575f5ffd5b50610c32612329565b604051610c3f9190613c7b565b60405180910390f35b610c5061234e565b600a8183610c5e9190613df3565b61ffff161115610c9a576040517fe298135000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600c5f015f6101000a81548161ffff021916908361ffff16021790555080600c5f0160026101000a81548161ffff021916908361ffff1602179055508082610ce39190613df3565b61ffff16600f819055508061ffff168261ffff167fc8f6ebed6f64bd25f0aed0b6507ae982cddfd23874ad542be24905c9412a4a1660405160405180910390a35050565b606060038054610d3690613e55565b80601f0160208091040260200160405190810160405280929190818152602001828054610d6290613e55565b8015610dad5780601f10610d8457610100808354040283529160200191610dad565b820191905f5260205f20905b815481529060010190602001808311610d9057829003601f168201915b5050505050905090565b5f5f610dc16123d5565b9050610dce8185856123dc565b600191505092915050565b5f610de26123ee565b905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f600254905090565b5f5f610e1e6123d5565b9050610e2b858285612462565b610e368585856124f5565b60019150509392505050565b6008602052805f5260405f205f91509050805f0154908060010154905082565b600d805f015f9054906101000a900461ffff1690805f0160029054906101000a900461ffff16905082565b5f6008905090565b610e9d61234e565b8060125f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610ee861234e565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610f4d576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80151560165f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16151503610fd3576040517fc7f2b1ee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060165f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f6110346125e5565b905090565b600c805f015f9054906101000a900461ffff1690805f0160029054906101000a900461ffff16905082565b60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b60019054906101000a900460ff1681565b601160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415801561112d57506110fd6115d5565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b15611164576040517ffbc5dd9300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036111c9576040517fe9cceb3600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5f8373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33856040516024016111fa929190613885565b6040516020818303038152906040529060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516112489190613ec9565b5f604051808303815f865af19150503d805f8114611281576040519150601f19603f3d011682016040523d82523d5f602084013e611286565b606091505b50915091508180156112b357505f815114806112b25750808060200190518101906112b19190613ef3565b5b5b6112f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e990613f8e565b60405180910390fd5b50505050565b6015602052805f5260405f205f915054906101000a900460ff1681565b600b60029054906101000a900460ff1681565b5f5f5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b61137561234e565b61137e5f61262f565b565b5f5f5f5f600c5f015f9054906101000a900461ffff16600c5f0160029054906101000a900461ffff16600d5f015f9054906101000a900461ffff16600d5f0160029054906101000a900461ffff16935093509350935090919293565b601160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f61140b6123d5565b90508073ffffffffffffffffffffffffffffffffffffffff1661142c611eef565b73ffffffffffffffffffffffffffffffffffffffff161461148457806040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161147b9190613c7b565b60405180910390fd5b61148d8161262f565b50565b6014602052805f5260405f205f915054906101000a900460ff1681565b6114b561234e565b600a81836114c39190613df3565b61ffff1611156114ff576040517fe298135000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600d5f015f6101000a81548161ffff021916908361ffff16021790555080600d5f0160026101000a81548161ffff021916908361ffff16021790555080826115489190613df3565b61ffff166010819055508061ffff168261ffff167f52357d2b6ee817f5d57183c13530148906a8ec8b5be2fc82da16afbd8a04507260405160405180910390a35050565b61159461234e565b600160115f6101000a81548160ff021916908315150217905550565b6115b861234e565b6001600b60016101000a81548160ff021916908315150217905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f60165f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b60606004805461165e90613e55565b80601f016020809104026020016040519081016040528092919081815260200182805461168a90613e55565b80156116d55780601f106116ac576101008083540402835291602001916116d5565b820191905f5260205f20905b8154815290600101906020018083116116b857829003601f168201915b5050505050905090565b600a81565b5f5f6116ee6123d5565b90506116fb8185856124f5565b600191505092915050565b61170e61234e565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611773576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80601160016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6117bf61234e565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611824576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036118aa576040517f02e4f4c400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80151560145f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16151503611930576040517fc7f2b1ee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060145f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b6001600b5f6101000a81548160ff021916908315150217905550601160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015611a335750611a036115d5565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b15611a6a576040517ffbc5dd9300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f811480611a785750606481115b15611aaf576040517f1f3b85d300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f611ab930611328565b90505f8103611af4576040517f2c5211c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f60648383611b039190613fac565b611b0d919061401a565b9050611b188161265f565b5f4790505f811115611bf0575f601160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051611b6b9061406d565b5f6040518083038185875af1925050503d805f8114611ba5576040519150601f19603f3d011682016040523d82523d5f602084013e611baa565b606091505b5050905080611bee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be5906140cb565b60405180910390fd5b505b5050505f600b5f6101000a81548160ff02191690831515021790555050565b611c1761234e565b6001600b60026101000a81548160ff021916908315150217905550565b611c3c61234e565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611ca1576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80151560155f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16151503611d27576040517fc7f2b1ee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060155f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f60145f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b611dd961234e565b5f8103611e12576040517f2c5211c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6305f5e10081611e229190613fac565b600a8190555050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f5f5f5f5f611eba610e0b565b611ec330611328565b600e54600a5460115f9054906101000a900460ff16945094509450945094509091929394565b600a5481565b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015611fa75750611f776115d5565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b15611fde576040517ff537af8e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612043576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f810361207c576040517f2c5211c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f62ed4e004261208c91906140e9565b905060405180604001604052808381526020018281525060085f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f820151815f0155602082015181600101559050508273ffffffffffffffffffffffffffffffffffffffff167fefa959232c3dff47265ea6402bee01616fb5293e0908468a5ddb92ca4cd3e004838360405161213d929190613b82565b60405180910390a2505050565b5f60155f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b5f5f5f5f60085f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206040518060400160405290815f82015481526020016001820154815250509050805f015181602001515f835f015111801561221c575082602001514210155b935093509350509193909250565b5f60125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61225a61234e565b8060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff166122b96115d5565b73ffffffffffffffffffffffffffffffffffffffff167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b5f6123076128e4565b905090565b6016602052805f5260405f205f915054906101000a900460ff1681565b60125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6123566123d5565b73ffffffffffffffffffffffffffffffffffffffff166123746115d5565b73ffffffffffffffffffffffffffffffffffffffff16146123d3576123976123d5565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016123ca9190613c7b565b60405180910390fd5b565b5f33905090565b6123e98383836001612958565b505050565b5f60115f9054906101000a900460ff161561240d57600f54905061245f565b600a600e5411612420576019905061245f565b6014600e5411612433576014905061245f565b6019600e541161244657600f905061245f565b601e600e541161245957600a905061245f565b600f5490505b90565b5f61246d8484611e2b565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8110156124ef57818110156124e0578281836040517ffb8f41b20000000000000000000000000000000000000000000000000000000081526004016124d79392919061411c565b60405180910390fd5b6124ee84848484035f612958565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612565575f6040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260040161255c9190613c7b565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036125d5575f6040517fec442f050000000000000000000000000000000000000000000000000000000081526004016125cc9190613c7b565b60405180910390fd5b6125e0838383612b27565b505050565b5f60115f9054906101000a900460ff1615612602575f905061262c565b600a600e541161261557600f905061262c565b601e600e541161262857600a905061262c565b5f90505b90565b60065f6101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905561265c81613189565b50565b5f600267ffffffffffffffff81111561267b5761267a614151565b5b6040519080825280602002602001820160405280156126a95781602001602082028036833780820191505090505b50905030815f815181106126c0576126bf61417e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612763573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061278791906141bf565b8160018151811061279b5761279a61417e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505081612800307f0000000000000000000000000000000000000000000000000000000000000000611e2b565b101561285257612851307f00000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6123dc565b5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016128b39594939291906142da565b5f604051808303815f87803b1580156128ca575f5ffd5b505af11580156128dc573d5f5f3e3d5ffd5b505050505050565b5f60115f9054906101000a900460ff1615612903576010549050612955565b600a600e54116129165760199050612955565b6014600e54116129295760149050612955565b6019600e541161293c57600f9050612955565b601e600e541161294f57600a9050612955565b60105490505b90565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036129c8575f6040517fe602df050000000000000000000000000000000000000000000000000000000081526004016129bf9190613c7b565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612a38575f6040517f94280d62000000000000000000000000000000000000000000000000000000008152600401612a2f9190613c7b565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015612b21578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051612b189190613a7a565b60405180910390a35b50505050565b60165f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612bc2575060165f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612bf9576040517fd9a60d2d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8103612c1057612c0b83835f61324c565b613184565b60145f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612c735750600b60029054906101000a900460ff16155b8015612cc6575060155f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612cfd576040517fe614db7800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f612d0730611328565b90505f600a548210159050808015612d66575060145f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612d7e5750600b5f9054906101000a900460ff16155b8015612dd1575060155f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612e24575060155f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612e3357612e3282613465565b5b5f60155f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015612ed2575060155f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b905080612eec57612ee486868661324c565b505050613184565b600b60019054906101000a900460ff16612f32576040517f12f1f92300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5f90505f4290505f612f436125e5565b9050600e5f81546001019190508190555060145f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612fab57505f600f54115b15612feb575f612fb96123ee565b90505f8183612fc891906140e9565b90506064818a612fd89190613fac565b612fe2919061401a565b94505050613150565b60145f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561304257505f601054115b1561312b575f60085f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2090505f5f825f015411801561309e575081600101548410155b80156130ad5750815f01548911155b905080156130ed5788825f015f8282546130c79190614332565b925050819055506064838a6130dc9190613fac565b6130e6919061401a565b9450613124565b5f6130f66128e4565b90505f818561310591906140e9565b90506064818c6131159190613fac565b61311f919061401a565b965050505b505061314f565b5f81111561314e57606481886131419190613fac565b61314b919061401a565b92505b5b5b5f8311156131725761316389308561324c565b828761316f9190614332565b96505b61317d89898961324c565b5050505050505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361329c578060025f82825461329091906140e9565b9250508190555061336a565b5f5f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015613325578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161331c9392919061411c565b60405180910390fd5b8181035f5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036133b1578060025f82825403925050819055506133fb565b805f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516134589190613a7a565b60405180910390a3505050565b6001600b5f6101000a81548160ff0219169083151502179055505f601054600f5461349091906140e9565b90505f8103613581576134a28261265f565b5f4790505f81111561357a575f601160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516134f59061406d565b5f6040518083038185875af1925050503d805f811461352f576040519150601f19603f3d011682016040523d82523d5f602084013e613534565b606091505b5050905080613578576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161356f906143af565b60405180910390fd5b505b505061375f565b5f8183600d5f015f9054906101000a900461ffff16600c5f015f9054906101000a900461ffff166135b29190613df3565b61ffff166135c09190613fac565b6135ca919061401a565b90505f81846135d99190614332565b90505f6002826135e9919061401a565b90505f81866135f89190614332565b90505f4790506136078261265f565b5f81476136149190614332565b90505f8382866136249190613fac565b61362e919061401a565b90505f8111801561363e57505f85115b1561364e5761364d858261377b565b5b5f4790505f811115613726575f601160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516136a19061406d565b5f6040518083038185875af1925050503d805f81146136db576040519150601f19603f3d011682016040523d82523d5f602084013e6136e0565b606091505b5050905080613724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161371b906143af565b60405180910390fd5b505b8086837ff8cfc1c15ead481ffc3a2df6126e88c84a6730799e332fcfe2dbc386373d517160405160405180910390a45050505050505050505b5f600b5f6101000a81548160ff02191690831515021790555050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f5f6137c46115d5565b426040518863ffffffff1660e01b81526004016137e6969594939291906143cd565b60606040518083038185885af1158015613802573d5f5f3e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906138279190614440565b5050505050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6138578261382e565b9050919050565b6138678161384d565b82525050565b5f819050919050565b61387f8161386d565b82525050565b5f6040820190506138985f83018561385e565b6138a56020830184613876565b9392505050565b5f5ffd5b5f61ffff82169050919050565b6138c6816138b0565b81146138d0575f5ffd5b50565b5f813590506138e1816138bd565b92915050565b5f5f604083850312156138fd576138fc6138ac565b5b5f61390a858286016138d3565b925050602061391b858286016138d3565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f61396782613925565b613971818561392f565b935061398181856020860161393f565b61398a8161394d565b840191505092915050565b5f6020820190508181035f8301526139ad818461395d565b905092915050565b6139be8161384d565b81146139c8575f5ffd5b50565b5f813590506139d9816139b5565b92915050565b6139e88161386d565b81146139f2575f5ffd5b50565b5f81359050613a03816139df565b92915050565b5f5f60408385031215613a1f57613a1e6138ac565b5b5f613a2c858286016139cb565b9250506020613a3d858286016139f5565b9150509250929050565b5f8115159050919050565b613a5b81613a47565b82525050565b5f602082019050613a745f830184613a52565b92915050565b5f602082019050613a8d5f830184613876565b92915050565b5f819050919050565b5f613ab6613ab1613aac8461382e565b613a93565b61382e565b9050919050565b5f613ac782613a9c565b9050919050565b5f613ad882613abd565b9050919050565b613ae881613ace565b82525050565b5f602082019050613b015f830184613adf565b92915050565b5f5f5f60608486031215613b1e57613b1d6138ac565b5b5f613b2b868287016139cb565b9350506020613b3c868287016139cb565b9250506040613b4d868287016139f5565b9150509250925092565b5f60208284031215613b6c57613b6b6138ac565b5b5f613b79848285016139cb565b91505092915050565b5f604082019050613b955f830185613876565b613ba26020830184613876565b9392505050565b613bb2816138b0565b82525050565b5f604082019050613bcb5f830185613ba9565b613bd86020830184613ba9565b9392505050565b5f60ff82169050919050565b613bf481613bdf565b82525050565b5f602082019050613c0d5f830184613beb565b92915050565b613c1c81613a47565b8114613c26575f5ffd5b50565b5f81359050613c3781613c13565b92915050565b5f5f60408385031215613c5357613c526138ac565b5b5f613c60858286016139cb565b9250506020613c7185828601613c29565b9150509250929050565b5f602082019050613c8e5f83018461385e565b92915050565b5f608082019050613ca75f830187613ba9565b613cb46020830186613ba9565b613cc16040830185613ba9565b613cce6060830184613ba9565b95945050505050565b5f60208284031215613cec57613ceb6138ac565b5b5f613cf9848285016139f5565b91505092915050565b5f5f60408385031215613d1857613d176138ac565b5b5f613d25858286016139cb565b9250506020613d36858286016139cb565b9150509250929050565b5f60a082019050613d535f830188613876565b613d606020830187613876565b613d6d6040830186613876565b613d7a6060830185613876565b613d876080830184613a52565b9695505050505050565b5f606082019050613da45f830186613876565b613db16020830185613876565b613dbe6040830184613a52565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613dfd826138b0565b9150613e08836138b0565b9250828201905061ffff811115613e2257613e21613dc6565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613e6c57607f821691505b602082108103613e7f57613e7e613e28565b5b50919050565b5f81519050919050565b5f81905092915050565b5f613ea382613e85565b613ead8185613e8f565b9350613ebd81856020860161393f565b80840191505092915050565b5f613ed48284613e99565b915081905092915050565b5f81519050613eed81613c13565b92915050565b5f60208284031215613f0857613f076138ac565b5b5f613f1584828501613edf565b91505092915050565b7f5472616e7366657248656c7065723a3a736166655472616e736665723a2074725f8201527f616e73666572206661696c656400000000000000000000000000000000000000602082015250565b5f613f78602d8361392f565b9150613f8382613f1e565b604082019050919050565b5f6020820190508181035f830152613fa581613f6c565b9050919050565b5f613fb68261386d565b9150613fc18361386d565b9250828202613fcf8161386d565b91508282048414831517613fe657613fe5613dc6565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6140248261386d565b915061402f8361386d565b92508261403f5761403e613fed565b5b828204905092915050565b50565b5f6140585f83613e8f565b91506140638261404a565b5f82019050919050565b5f6140778261404d565b9150819050919050565b7f455448207472616e73666572206661696c6564000000000000000000000000005f82015250565b5f6140b560138361392f565b91506140c082614081565b602082019050919050565b5f6020820190508181035f8301526140e2816140a9565b9050919050565b5f6140f38261386d565b91506140fe8361386d565b925082820190508082111561411657614115613dc6565b5b92915050565b5f60608201905061412f5f83018661385e565b61413c6020830185613876565b6141496040830184613876565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f815190506141b9816139b5565b92915050565b5f602082840312156141d4576141d36138ac565b5b5f6141e1848285016141ab565b91505092915050565b5f819050919050565b5f61420d614208614203846141ea565b613a93565b61386d565b9050919050565b61421d816141f3565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6142558161384d565b82525050565b5f614266838361424c565b60208301905092915050565b5f602082019050919050565b5f61428882614223565b614292818561422d565b935061429d8361423d565b805f5b838110156142cd5781516142b4888261425b565b97506142bf83614272565b9250506001810190506142a0565b5085935050505092915050565b5f60a0820190506142ed5f830188613876565b6142fa6020830187614214565b818103604083015261430c818661427e565b905061431b606083018561385e565b6143286080830184613876565b9695505050505050565b5f61433c8261386d565b91506143478361386d565b925082820390508181111561435f5761435e613dc6565b5b92915050565b7f4d61726b6574696e67207472616e73666572206661696c6564000000000000005f82015250565b5f61439960198361392f565b91506143a482614365565b602082019050919050565b5f6020820190508181035f8301526143c68161438d565b9050919050565b5f60c0820190506143e05f83018961385e565b6143ed6020830188613876565b6143fa6040830187614214565b6144076060830186614214565b614414608083018561385e565b61442160a0830184613876565b979650505050505050565b5f8151905061443a816139df565b92915050565b5f5f5f60608486031215614457576144566138ac565b5b5f6144648682870161442c565b93505060206144758682870161442c565b92505060406144868682870161442c565b915050925092509256fea2646970667358221220db06ff491e3596387f050b512310d24a9400c9a3a55a05c3a99eb801da20bfeb64736f6c634300081b00336080604052730f31b5ed38b39b435128adc6b173f0939116859e60065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550730f31b5ed38b39b435128adc6b173f0939116859e60075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507365eae045386dff93094e5896ceb6ad54a221260d60085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062b71b00600b556001600c60146101000a81548160ff02191690831515021790555034801561012d575f5ffd5b5060405161218d38038061218d833981810160405281019061014f91906104b6565b815f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036101c0575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016101b79190610503565b60405180910390fd5b6101cf8161028860201b60201c565b506001600281905550735f4ec3df9cbd43714fe2740f5e3616155c5b841960035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600c5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426009819055506102816102be60201b60201c565b505061072d565b60015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556102bb8161039760201b60201c565b50565b5f5f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa15801561032a573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061034e91906105c1565b509350509250505f821380156103715750610e10814261036e9190610665565b11155b1561039357620f42408261038591906106c5565b600581905550806004819055505b5050565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6104858261045c565b9050919050565b6104958161047b565b811461049f575f5ffd5b50565b5f815190506104b08161048c565b92915050565b5f5f604083850312156104cc576104cb610458565b5b5f6104d9858286016104a2565b92505060206104ea858286016104a2565b9150509250929050565b6104fd8161047b565b82525050565b5f6020820190506105165f8301846104f4565b92915050565b5f69ffffffffffffffffffff82169050919050565b61053a8161051c565b8114610544575f5ffd5b50565b5f8151905061055581610531565b92915050565b5f819050919050565b61056d8161055b565b8114610577575f5ffd5b50565b5f8151905061058881610564565b92915050565b5f819050919050565b6105a08161058e565b81146105aa575f5ffd5b50565b5f815190506105bb81610597565b92915050565b5f5f5f5f5f60a086880312156105da576105d9610458565b5b5f6105e788828901610547565b95505060206105f88882890161057a565b9450506040610609888289016105ad565b935050606061061a888289016105ad565b925050608061062b88828901610547565b9150509295509295909350565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61066f8261058e565b915061067a8361058e565b925082820390508181111561069257610691610638565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6106cf8261055b565b91506106da8361055b565b9250826106ea576106e9610698565b5b60015f0383147f80000000000000000000000000000000000000000000000000000000000000008314161561072257610721610638565b5b828205905092915050565b611a538061073a5f395ff3fe608060405260043610610122575f3560e01c806380a3f3ef1161009f578063b70143c911610063578063b70143c914610693578063e30c3978146106bb578063ecda10f5146106e5578063f2fde38b1461070f578063ff9fac1a1461073757610470565b806380a3f3ef146105d95780638943b2e4146105ef5780638da5cb5b1461061757806395060e5914610641578063ae3557bb1461066957610470565b806367272999116100e65780636727299914610545578063715018a61461055b57806375f0a87414610571578063773a50d01461059b57806379ba5097146105c357610470565b80632217455a146104745780632af0adb51461049f57806334069243146104c957806350fc019d146104f35780635a7afe641461051d57610470565b366104705761012f610761565b600c60149054906101000a900460ff1615610466575f3490505f81036101555750610466565b600b54600a5410610230575f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516101a690611244565b5f6040518083038185875af1925050503d805f81146101e0576040519150601f19603f3d011682016040523d82523d5f602084013e6101e5565b606091505b5050905080610229576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610220906112d8565b60405180910390fd5b5050610466565b5f5f61023b836107a5565b91509150610247610825565b5f670de0b6b3a76400006005548461025f919061132c565b610269919061139a565b90505f600a54600b5461027c91906113ca565b9050818110610375575f8411156103705781600a5f82825461029e91906113fd565b925050819055505f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16856040516102eb90611244565b5f6040518083038185875af1925050503d805f8114610325576040519150601f19603f3d011682016040523d82523d5f602084013e61032a565b606091505b505090508061036e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103659061147a565b60405180910390fd5b505b61038d565b5f84111561038c57838361038991906113fd565b92505b5b5f831115610460575f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16846040516103db90611244565b5f6040518083038185875af1925050503d805f8114610415576040519150601f19603f3d011682016040523d82523d5f602084013e61041a565b606091505b505090508061045e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610455906112d8565b60405180910390fd5b505b50505050505b61046e6108fe565b005b5f5ffd5b34801561047f575f5ffd5b50610488610908565b6040516104969291906114a7565b60405180910390f35b3480156104aa575f5ffd5b506104b3610918565b6040516104c091906114ce565b60405180910390f35b3480156104d4575f5ffd5b506104dd61091e565b6040516104ea91906114ce565b60405180910390f35b3480156104fe575f5ffd5b50610507610924565b6040516105149190611561565b60405180910390f35b348015610528575f5ffd5b50610543600480360381019061053e91906115e3565b610949565b005b348015610550575f5ffd5b506105596109de565b005b348015610566575f5ffd5b5061056f610ae6565b005b34801561057c575f5ffd5b50610585610af9565b6040516105929190611630565b60405180910390f35b3480156105a6575f5ffd5b506105c160048036038101906105bc9190611649565b610b1e565b005b3480156105ce575f5ffd5b506105d7610baa565b005b3480156105e4575f5ffd5b506105ed610c38565b005b3480156105fa575f5ffd5b50610615600480360381019061061091906115e3565b610c6c565b005b348015610622575f5ffd5b5061062b610da3565b6040516106389190611630565b60405180910390f35b34801561064c575f5ffd5b5061066760048036038101906106629190611687565b610dca565b005b348015610674575f5ffd5b5061067d610ee2565b60405161068a9190611630565b60405180910390f35b34801561069e575f5ffd5b506106b960048036038101906106b49190611687565b610f07565b005b3480156106c6575f5ffd5b506106cf610f99565b6040516106dc9190611630565b60405180910390f35b3480156106f0575f5ffd5b506106f9610fc1565b60405161070691906114ce565b60405180910390f35b34801561071a575f5ffd5b50610735600480360381019061073091906116b2565b610fc7565b005b348015610742575f5ffd5b5061074b611073565b6040516107589190611630565b60405180910390f35b600280540361079c576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028081905550565b5f5f5f600954426107b691906113ca565b90505f6212750090508082116107f45760646028866107d5919061132c565b6107df919061139a565b935083856107ed91906113ca565b925061081e565b6064601486610803919061132c565b61080d919061139a565b9350838561081b91906113ca565b92505b5050915091565b5f5f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610891573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108b59190611763565b509350509250505f821380156108d85750610e1081426108d591906113ca565b11155b156108fa57620f4240826108ec91906117da565b600581905550806004819055505b5050565b6001600281905550565b5f5f600554600454915091509091565b600a5481565b600b5481565b600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610951611098565b600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634eed4bd583836040518363ffffffff1660e01b81526004016109ad929190611842565b5f604051808303815f87803b1580156109c4575f5ffd5b505af11580156109d6573d5f5f3e3d5ffd5b505050505050565b6109e6611098565b6109ee610761565b5f4790505f8103610a34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2b906118b3565b60405180910390fd5b5f610a3d610da3565b73ffffffffffffffffffffffffffffffffffffffff1682604051610a6090611244565b5f6040518083038185875af1925050503d805f8114610a9a576040519150601f19603f3d011682016040523d82523d5f602084013e610a9f565b606091505b5050905080610ada576040517f6d963f8800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050610ae46108fe565b565b610aee611098565b610af75f61111f565b565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610b26611098565b8160075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b5f610bb361114f565b90508073ffffffffffffffffffffffffffffffffffffffff16610bd4610f99565b73ffffffffffffffffffffffffffffffffffffffff1614610c2c57806040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610c239190611630565b60405180910390fd5b610c358161111f565b50565b610c40611098565b600c60149054906101000a900460ff1615600c60146101000a81548160ff021916908315150217905550565b610c74611098565b5f5f8373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb3385604051602401610ca5929190611842565b6040516020818303038152906040529060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051610cf39190611919565b5f604051808303815f865af19150503d805f8114610d2c576040519150601f19603f3d011682016040523d82523d5f602084013e610d31565b606091505b5091509150818015610d5e57505f81511480610d5d575080806020019051810190610d5c9190611964565b5b5b610d9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d94906119ff565b60405180910390fd5b50505050565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015610e5a5750610e2a610da3565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b15610e91576040517f07e7d15800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600a54811015610ea157600a5490505b80600b819055507f57119eab85b40f774dd79b299f71f087511b52a5f517997dd9c076ef3abf795981604051610ed791906114ce565b60405180910390a150565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610f0f611098565b600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b70143c9826040518263ffffffff1660e01b8152600401610f6991906114ce565b5f604051808303815f87803b158015610f80575f5ffd5b505af1158015610f92573d5f5f3e3d5ffd5b5050505050565b5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60095481565b610fcf611098565b8060015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1661102e610da3565b73ffffffffffffffffffffffffffffffffffffffff167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6110a061114f565b73ffffffffffffffffffffffffffffffffffffffff166110be610da3565b73ffffffffffffffffffffffffffffffffffffffff161461111d576110e161114f565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016111149190611630565b60405180910390fd5b565b60015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905561114c81611156565b50565b5f33905090565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f81905092915050565b50565b5f61122f5f83611217565b915061123a82611221565b5f82019050919050565b5f61124e82611224565b9150819050919050565b5f82825260208201905092915050565b7f4661696c656420746f2073656e6420746f206d61726b6574696e672077616c6c5f8201527f6574000000000000000000000000000000000000000000000000000000000000602082015250565b5f6112c2602283611258565b91506112cd82611268565b604082019050919050565b5f6020820190508181035f8301526112ef816112b6565b9050919050565b5f819050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611336826112f6565b9150611341836112f6565b925082820261134f816112f6565b91508282048414831517611366576113656112ff565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6113a4826112f6565b91506113af836112f6565b9250826113bf576113be61136d565b5b828204905092915050565b5f6113d4826112f6565b91506113df836112f6565b92508282039050818111156113f7576113f66112ff565b5b92915050565b5f611407826112f6565b9150611412836112f6565b925082820190508082111561142a576114296112ff565b5b92915050565b7f4661696c656420746f207472616e7366657220746f20417374726158000000005f82015250565b5f611464601c83611258565b915061146f82611430565b602082019050919050565b5f6020820190508181035f83015261149181611458565b9050919050565b6114a1816112f6565b82525050565b5f6040820190506114ba5f830185611498565b6114c76020830184611498565b9392505050565b5f6020820190506114e15f830184611498565b92915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f819050919050565b5f61152961152461151f846114e7565b611506565b6114e7565b9050919050565b5f61153a8261150f565b9050919050565b5f61154b82611530565b9050919050565b61155b81611541565b82525050565b5f6020820190506115745f830184611552565b92915050565b5f5ffd5b5f611588826114e7565b9050919050565b6115988161157e565b81146115a2575f5ffd5b50565b5f813590506115b38161158f565b92915050565b6115c2816112f6565b81146115cc575f5ffd5b50565b5f813590506115dd816115b9565b92915050565b5f5f604083850312156115f9576115f861157a565b5b5f611606858286016115a5565b9250506020611617858286016115cf565b9150509250929050565b61162a8161157e565b82525050565b5f6020820190506116435f830184611621565b92915050565b5f5f6040838503121561165f5761165e61157a565b5b5f61166c858286016115a5565b925050602061167d858286016115a5565b9150509250929050565b5f6020828403121561169c5761169b61157a565b5b5f6116a9848285016115cf565b91505092915050565b5f602082840312156116c7576116c661157a565b5b5f6116d4848285016115a5565b91505092915050565b5f69ffffffffffffffffffff82169050919050565b6116fb816116dd565b8114611705575f5ffd5b50565b5f81519050611716816116f2565b92915050565b5f819050919050565b61172e8161171c565b8114611738575f5ffd5b50565b5f8151905061174981611725565b92915050565b5f8151905061175d816115b9565b92915050565b5f5f5f5f5f60a0868803121561177c5761177b61157a565b5b5f61178988828901611708565b955050602061179a8882890161173b565b94505060406117ab8882890161174f565b93505060606117bc8882890161174f565b92505060806117cd88828901611708565b9150509295509295909350565b5f6117e48261171c565b91506117ef8361171c565b9250826117ff576117fe61136d565b5b60015f0383147f800000000000000000000000000000000000000000000000000000000000000083141615611837576118366112ff565b5b828205905092915050565b5f6040820190506118555f830185611621565b6118626020830184611498565b9392505050565b7f4e6f2045544820746f20636c61696d00000000000000000000000000000000005f82015250565b5f61189d600f83611258565b91506118a882611869565b602082019050919050565b5f6020820190508181035f8301526118ca81611891565b9050919050565b5f81519050919050565b8281835e5f83830152505050565b5f6118f3826118d1565b6118fd8185611217565b935061190d8185602086016118db565b80840191505092915050565b5f61192482846118e9565b915081905092915050565b5f8115159050919050565b6119438161192f565b811461194d575f5ffd5b50565b5f8151905061195e8161193a565b92915050565b5f602082840312156119795761197861157a565b5b5f61198684828501611950565b91505092915050565b7f5472616e7366657248656c7065723a3a736166655472616e736665723a2074725f8201527f616e73666572206661696c656400000000000000000000000000000000000000602082015250565b5f6119e9602d83611258565b91506119f48261198f565b604082019050919050565b5f6020820190508181035f830152611a16816119dd565b905091905056fea2646970667358221220a912f92b22cb6af316db47aeca9857b8ff17c5048640646cab71d386a6179aa164736f6c634300081b0033