3 txs
5 calls
constructor
constructor(address initialOwner, address usdt_, address nft_, address engineWallet_, address marketingWallet_, address marketingWallet2_, uint256[8] floorByModel)
functions
BOOST_10_BPS
viewfunction BOOST_10_BPS() view returns (uint256)
BOOST_20_BPS
viewfunction BOOST_20_BPS() view returns (uint256)
BOOST_30_BPS
viewfunction BOOST_30_BPS() view returns (uint256)
BPS
viewfunction BPS() view returns (uint256)
buybackBps
viewfunction buybackBps() view returns (uint256)
claimable
viewfunction claimable(uint256 tokenId) view returns (uint256)
currentPhase
viewfunction currentPhase() view returns (uint8)
directReferrals
viewfunction directReferrals(address, uint256) view returns (address)
engineWallet
viewfunction engineWallet() view returns (address)
floorPrice
viewfunction floorPrice(uint8) view returns (uint256)
getActiveListings
viewfunction getActiveListings() view returns (uint256[] ids)
getGlobalStats
viewfunction getGlobalStats() view returns (uint256 _totalUsers, uint256 _totalMinted, uint256 _totalActive, uint256 _activeListings)
getMinerInfo
viewfunction getMinerInfo(uint256 tokenId) view returns (tuple M)
getMyMinersDetailed
viewfunction getMyMinersDetailed() view returns (tuple[] arr)
getReferralCountsByLevel
viewfunction getReferralCountsByLevel(address u) view returns (uint256[10])
getReferralEarningsByLevel
viewfunction getReferralEarningsByLevel(address u) view returns (uint256[10])
hasUnlocked
viewfunction hasUnlocked(address user, uint8 level) view returns (bool)
listingIdCounter
viewfunction listingIdCounter() view returns (uint256)
listings
viewfunction listings(uint256) view returns (address seller, uint256 tokenId, uint256 price, bool active)
MARKET_ENGINE_BPS
viewfunction MARKET_ENGINE_BPS() view returns (uint256)
MARKET_FEE_BPS
viewfunction MARKET_FEE_BPS() view returns (uint256)
MARKET_MKT_BPS
viewfunction MARKET_MKT_BPS() view returns (uint256)
marketingWallet
viewfunction marketingWallet() view returns (address)
marketingWallet2
viewfunction marketingWallet2() view returns (address)
MAX_REF_BPS
viewfunction MAX_REF_BPS() view returns (uint256)
miner
viewfunction miner(uint256) view returns (bool isActive, bool expired, uint64 startTime, uint64 lastClaim, uint32 usedHours, uint32 maxHours, uint256 baseProdPerHour, uint256 lastPurchasePrice, uint16 permBoostBps, uint16 tempBoostBps, uint64 tempBoostUntil)
nft
viewfunction nft() view returns (address)
OCLOCK_20_BPS
viewfunction OCLOCK_20_BPS() view returns (uint256)
OCLOCK_35_BPS
viewfunction OCLOCK_35_BPS() view returns (uint256)
onERC721Received
purefunction onERC721Received(address, address, uint256, bytes) pure returns (bytes4)
OVERCLOCK_20_BPS
viewfunction OVERCLOCK_20_BPS() view returns (uint256)
OVERCLOCK_35_BPS
viewfunction OVERCLOCK_35_BPS() view returns (uint256)
OVERCLOCK_DURATION
viewfunction OVERCLOCK_DURATION() view returns (uint256)
owner
viewfunction owner() view returns (address)
PERM_BOOST_CAP_BPS
viewfunction PERM_BOOST_CAP_BPS() view returns (uint256)
phaseAllocation
viewfunction phaseAllocation(uint8, uint8) view returns (uint256)
phaseMinted
viewfunction phaseMinted(uint8, uint8) view returns (uint256)
phaseMultiplierBps
viewfunction phaseMultiplierBps(uint8) view returns (uint256)
plans
viewfunction plans(uint8) view returns (uint256 initialPrice, uint256 baseProdPerHour, uint32 maxHours, uint8 referralLevels)
previewAutoClaim
viewfunction previewAutoClaim(uint256 tokenId) view returns (uint256 hoursToClaim, uint256 baseAmount, uint256 refNeeded, bool hasEnoughInContract)
PRICE_MULTIPLIER_CAP_BPS
viewfunction PRICE_MULTIPLIER_CAP_BPS() view returns (uint256)
prodPerHour
viewfunction prodPerHour(uint256 tokenId) view returns (uint256)
refs
viewfunction refs(address) view returns (address referrer, uint256 totalEarnings)
RENEW_250H_BPS
viewfunction RENEW_250H_BPS() view returns (uint256)
totalActive
viewfunction totalActive() view returns (uint256)
totalMinted
viewfunction totalMinted() view returns (uint256)
totalUsers
viewfunction totalUsers() view returns (uint256)
UPGRADE_ENGINE_BPS
viewfunction UPGRADE_ENGINE_BPS() view returns (uint16)
UPGRADE_MKT_BPS
viewfunction UPGRADE_MKT_BPS() view returns (uint16)
UPGRADE_RESERVE_BPS
viewfunction UPGRADE_RESERVE_BPS() view returns (uint16)
usdt
viewfunction usdt() view returns (address)
activate
nonpayablefunction activate(uint256 tokenId)
autoListInternal
nonpayablefunction autoListInternal(uint256 tokenId)
boost
nonpayablefunction boost(uint256 tokenId, uint8 tierPct)
buyInternal
nonpayablefunction buyInternal(uint256 listingId)
buyPrimary
nonpayablefunction buyPrimary(uint8 model, address ref)
cancelListing
nonpayablefunction cancelListing(uint256 listingId)
claim
nonpayablefunction claim(uint256 tokenId)
claimBatch
nonpayablefunction claimBatch(uint256[] tokenIds)
extendLife
nonpayablefunction extendLife(uint256 tokenId, uint16 packHours)
listInternal
nonpayablefunction listInternal(uint256 tokenId, uint256 price)
overclock
nonpayablefunction overclock(uint256 tokenId, uint8 tierPct)
renounceOwnership
nonpayablefunction renounceOwnership()
sellToSystem
nonpayablefunction sellToSystem(uint256 tokenId)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
events
Activated
event Activated(address indexed owner, uint256 indexed tokenId, uint256 lastPurchasePrice)
Boosted
event Boosted(address indexed owner, uint256 indexed tokenId, uint16 boostBps, uint256 cost)
BoughtBack
event BoughtBack(address indexed seller, uint256 indexed tokenId, uint256 payout)
Claimed
event Claimed(address indexed owner, uint256 indexed tokenId, uint256 amount, uint256 hoursClaimed)
Delisted
event Delisted(address indexed seller, uint256 indexed listingId)
Expired
event Expired(address indexed owner, uint256 indexed tokenId)
Extended
event Extended(address indexed owner, uint256 indexed tokenId, uint16 hoursAdded, uint256 cost)
Listed
event Listed(address indexed seller, uint256 indexed listingId, uint256 indexed tokenId, uint256 price)
Overclocked
event Overclocked(address indexed owner, uint256 indexed tokenId, uint16 boostBps, uint256 cost, uint64 until)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
PhaseAdvanced
event PhaseAdvanced(uint8 newPhase)
PhaseConfigured
event PhaseConfigured(uint8 phase, uint8 model, uint256 allocation, uint256 multiplierBps)
PrimaryBought
event PrimaryBought(address indexed buyer, uint8 indexed model, uint256 indexed tokenId, uint256 price)
ReferralReward
event ReferralReward(address indexed from, address indexed to, uint8 level, uint256 amount)
SoldInternal
event SoldInternal(address indexed buyer, address indexed seller, uint256 indexed listingId, uint256 tokenId, uint256 price)
errors
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
creation bytecode
0x610120604052348015610010575f5ffd5b5060405161613438038061613483398101604081905261002f916109a9565b866001600160a01b03811661005e57604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b610067816108b0565b50600180556001600160a01b0386161580159061008c57506001600160a01b03851615155b6100c75760405162461bcd60e51b815260206004820152600c60248201526b5a65726f206164647265737360a01b6044820152606401610055565b6001600160a01b038416158015906100e757506001600160a01b03831615155b80156100fb57506001600160a01b03821615155b6101355760405162461bcd60e51b815260206004820152600b60248201526a16995c9bc81dd85b1b195d60aa1b6044820152606401610055565b6001600160a01b03868116608090815286821660a05285821660c05284821660e05290831661010052604080518083018252670de0b6b3a7640000808252662501e734690aaa6020808401918252610823848601908152600160608087018281525f808052600280875298517fac33ff75c19e70fe83507db0d683fd3465c996598dc972688b7ace676c89077b5595517fac33ff75c19e70fe83507db0d683fd3465c996598dc972688b7ace676c89077c5592517fac33ff75c19e70fe83507db0d683fd3465c996598dc972688b7ace676c89077d8054945163ffffffff92831664ffffffffff199687161764010000000060ff9283168102919091179092558a51808d018c5298895266c0704bdd556aaa8988019081526108208a8d019081528a86018c8152878b528c8a529a517fe90b7bceb6e7df5418fb78d8ee546e97c83a08bbccc01a0644d599ccd2a7c2e05590517fe90b7bceb6e7df5418fb78d8ee546e97c83a08bbccc01a0644d599ccd2a7c2e155517fe90b7bceb6e7df5418fb78d8ee546e97c83a08bbccc01a0644d599ccd2a7c2e280549a519185169a88169a909a179082168302179098558951808c018b5268056bc75e2d63100000815267018fae27693b400081880190815261081d828d0190815260048387018181528d8c528d8b5293517f679795a0195a1b76cdebb7c51d74e058aee92919b8c3389af86ef24535e8a28c5591517f679795a0195a1b76cdebb7c51d74e058aee92919b8c3389af86ef24535e8a28d55517f679795a0195a1b76cdebb7c51d74e058aee92919b8c3389af86ef24535e8a28e8054935191861693891693909317908b168402179091558a51808d018c52680d8d726b7177a80000815267040c3549bb7d2aaa8189019081526107f5828e01908152600683880181815260038d528e8c5293517f88601476d11616a71c5be67555bd1dff4b1cbf21533d2669b768b61518cfe1c35591517f88601476d11616a71c5be67555bd1dff4b1cbf21533d2669b768b61518cfe1c455517f88601476d11616a71c5be67555bd1dff4b1cbf21533d2669b768b61518cfe1c580549351918716938a1693909317908c168502179091558b51808e018d52681b1ae4d6e2ef500000815267083d6c7aab636000818a019081526107d0828f018181526007848a01818152968e528f8d5293517fee60d0579bcffd98e668647d59fec1ff86a7fb340ce572e844f234ae73a6918f5591517fee60d0579bcffd98e668647d59fec1ff86a7fb340ce572e844f234ae73a691905590517fee60d0579bcffd98e668647d59fec1ff86a7fb340ce572e844f234ae73a6919180549551918816958b1695909517908d168602179093558c51808f018e52683635c9adc5dea0000081526710c4dcc3bf98d555818b01908152818f018581526008838a0190815260058e528f8d5292517fb98b78633099fa36ed8b8680c4f8092689e1e04080eb9cbb077ca38a14d7e3845590517fb98b78633099fa36ed8b8680c4f8092689e1e04080eb9cbb077ca38a14d7e38555517fb98b78633099fa36ed8b8680c4f8092689e1e04080eb9cbb077ca38a14d7e38680549251918816928b1692909217908d1686021790558c51808f018e52686c6b935b8bbd400000815267221dc12450d5d555818b01908152818f018581526009838a01818152958e528f8d5292517f59dd4b18488d12f51eda69757a0ed42a2010c14b564330cc74a06895e60c077b5590517f59dd4b18488d12f51eda69757a0ed42a2010c14b564330cc74a06895e60c077c55517f59dd4b18488d12f51eda69757a0ed42a2010c14b564330cc74a06895e60c077d80549451918816948b1694909417908d168602179092558c519d8e018d5269010f0cf064dd592000008e526756bc75e2d63100008e8a019081529c8e01928352600a958e01868152908a529a88529b517facd8ef244210bb6898e73c48bf820ed8ecc857a3bab8d79c10e4fa92b1e9ca655599517facd8ef244210bb6898e73c48bf820ed8ecc857a3bab8d79c10e4fa92b1e9ca665598517facd8ef244210bb6898e73c48bf820ed8ecc857a3bab8d79c10e4fa92b1e9ca6780549951919092169890941697909717929095169096021790935591526127107f13da86008ba1c6922daee3e07db95305ef49ebced9f5467a0b8613fcc6b343e355908152614e207fbbc70db1b6c7afd11e79c0fb0051300458f1a3acb8ee9789d9b6b26c61ad9bc755815460ff19169091556107a4905b5f610fa06108ff565b6107b35f5b60016107d06108ff565b6107c25f5b60026105dc6108ff565b6107d15f5b60036103e86108ff565b6107e05f5b60046102586108ff565b6107ef5f5b600561012c6108ff565b6107fd5f5b600660a06108ff565b61080b5f5b600760506108ff565b610815600161079b565b61081f60016107a9565b61082960016107b8565b61083360016107c7565b61083d60016107d6565b61084760016107e5565b61085160016107f4565b61085b6001610802565b5f5b60088160ff1610156108a357818160ff166008811061087e5761087e610a87565b6020908102919091015160ff83165f908152600390925260409091205560010161085d565b5050505050505050610a9b565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60ff8381165f818152600b60209081526040808320948716808452948252808320869055838352600a82529182902054825193845290830193909352810183905260608101919091527f0dd13b11b802595586c55b160d3cf7981d7a89b3c2564dbd8d1ba584e00bc25d9060800160405180910390a1505050565b80516001600160a01b0381168114610990575f5ffd5b919050565b634e487b7160e01b5f52604160045260245ffd5b5f5f5f5f5f5f5f6101c0888a0312156109c0575f5ffd5b6109c98861097a565b96506109d76020890161097a565b95506109e56040890161097a565b94506109f36060890161097a565b9350610a016080890161097a565b9250610a0f60a0890161097a565b91508860df890112610a1f575f5ffd5b60405161010081016001600160401b0381118282101715610a4257610a42610995565b604052806101c08a018b811115610a57575f5ffd5b60c08b015b81811015610a74578051835260209283019201610a5c565b5050508091505092959891949750929550565b634e487b7160e01b5f52603260045260245ffd5b60805160a05160c05160e051610100516154fe610c365f395f818161045e015261229e01525f818161088e01528181612249015281816129670152613af101525f8181610422015281816121f4015281816129120152613a6701525f81816106bb01528181610b4e01528181610ea301528181611131015281816111f70152818161139d01528181611449015281816115e0015281816116b701528181611ada015281816122e301528181612596015281816129a801528181612aa501528181612cef01528181612dd6015281816130e80152818161337f0152818161349f015281816135800152818161380c01528181613c1f01528181613e52015281816144610152818161450f015261459d01525f818161051c015281816118530152818161194901528181611f130152818161219c015281816121d1015281816122260152818161227b015281816128b7015281816128ef0152818161294401528181613a4401528181613a9901528181613ace01528181613d4901528181613eec015281816141bb015281816142c901526149df01526154fe5ff3fe608060405234801561000f575f5ffd5b50600436106103ca575f3560e01c80636dd5a90311610200578063a2ceb78b1161011f578063d1d58b25116100b4578063e6f8453311610084578063e6f8453314610a99578063f2fde38b14610aac578063f716368914610abf578063f74fb84514610adf578063f778e01d14610ae9575f5ffd5b8063d1d58b25146109f3578063d43c89b414610a06578063dc00ac3314610a19578063de74e57b14610a2c575f5ffd5b8063bff1f9e1116100ef578063bff1f9e1146109ad578063c007d71c146109b6578063c1622f8a146109cb578063c90a2493146109ea575f5ffd5b8063a2ceb78b14610975578063a76d806b14610988578063b260c42a14610991578063baa9f0fa146109a4575f5ffd5b80637d2388ef11610195578063957b061711610165578063957b06171461080557806398548f6f1461092f5780639f2363bf14610942578063a2309ff81461096c575f5ffd5b80637d2388ef146108f857806387c35bc0146109015780638da5cb5b146109165780639262992c14610926575f5ffd5b806375c6c6da116101d057806375c6c6da1461083857806375f0a87414610889578063797a4f62146108b05780637b9ea87e146108e5575f5ffd5b80636dd5a903146107f4578063715018a6146107fd57806371aae7871461080557806371eeea331461080e575f5ffd5b8063357f3ca6116102ec578063553c02481161028157806360a31a881161025157806360a31a881461074257806362abebce146107b05780636658c827146107c35780636b4169c3146107cc575f5ffd5b8063553c02481461070857806357759600146107115780635825237b1461071a5780635ddaa12a14610723575f5ffd5b8063405cb769116102bc578063405cb7691461069657806347ccca02146106b65780634e965266146106dd57806354cab29114610700575f5ffd5b8063357f3ca61461065e578063379607f5146106675780633a091fae1461067a5780633f45c31b1461068d575f5ffd5b8063243bb56d116103625780632f48ab7d116103325780632f48ab7d14610517578063305a67a81461053e578063324e20c0146105515780633579bcbe1461064b575f5ffd5b8063243bb56d146104d7578063249d39e9146104f35780632546c851146104fc5780632b05abfe14610504575f5ffd5b80630d0020f21161039d5780630d0020f2146104595780630fcc40e714610480578063150b7a0214610496578063231701e9146104ce575f5ffd5b8063055ad42e146103ce57806305ad3935146103f2578063079e43a51461041d5780630c10f2aa14610444575b5f5ffd5b6009546103db9060ff1681565b60405160ff90911681526020015b60405180910390f35b610405610400366004614c92565b610af2565b6040516001600160a01b0390911681526020016103e9565b6104057f000000000000000000000000000000000000000000000000000000000000000081565b610457610452366004614cca565b610b26565b005b6104057f000000000000000000000000000000000000000000000000000000000000000081565b61048860c881565b6040519081526020016103e9565b6104b56104a4366004614cf8565b630a85bd0160e11b95945050505050565b6040516001600160e01b031990911681526020016103e9565b61048860085481565b6104e06101f481565b60405161ffff90911681526020016103e9565b61048861271081565b610488606481565b610488610512366004614d8f565b610dcc565b6104057f000000000000000000000000000000000000000000000000000000000000000081565b61045761054c366004614d8f565b61106d565b6105dd61055f366004614d8f565b60046020525f9081526040902080546001820154600283015460039093015460ff808416946101008504909116936001600160401b0362010000808304821695600160501b840483169563ffffffff600160901b8604811696600160b01b90960416949193919261ffff808316939183041691600160201b9004168b565b604080519b15158c5299151560208c01526001600160401b03988916998b019990995295871660608a015263ffffffff94851660808a01529390921660a088015260c087015260e086015261ffff9081166101008601521661012084015216610140820152610160016103e9565b610457610659366004614d8f565b6111cf565b61048861753081565b610457610675366004614d8f565b6115c0565b610457610688366004614d8f565b61168f565b610488610dac81565b6106a96106a4366004614da6565b6119b4565b6040516103e99190614dc1565b6104057f000000000000000000000000000000000000000000000000000000000000000081565b6106f06106eb366004614df2565b611a0d565b60405190151581526020016103e9565b61048860fa81565b6104886103e881565b610488600f5481565b61048861019081565b610488610731366004614e1e565b60036020525f908152604090205481565b610781610750366004614e1e565b600260208190525f918252604090912080546001820154919092015463ffffffff811690600160201b900460ff1684565b6040516103e99493929190938452602084019290925263ffffffff16604083015260ff16606082015260800190565b6104576107be366004614e39565b611ac5565b61048861012c81565b6107d4611cb9565b6040805194855260208501939093529183015260608201526080016103e9565b61048861038481565b610457611d12565b61048861025881565b61048861081c366004614ea8565b600c60209081525f928352604080842090915290825290205481565b61086a610846366004614da6565b60056020525f9081526040902080546001909101546001600160a01b039091169082565b604080516001600160a01b0390931683526020830191909152016103e9565b6104057f000000000000000000000000000000000000000000000000000000000000000081565b6108c36108be366004614d8f565b611d25565b60408051948552602085019390935291830152151560608201526080016103e9565b6104576108f3366004614ec4565b611f93565b6104e061213481565b610909612437565b6040516103e99190614ef0565b5f546001600160a01b0316610405565b610488610a2881565b61045761093d366004614f41565b61256e565b610488610950366004614ea8565b600b60209081525f928352604080842090915290825290205481565b610488600e5481565b610457610983366004614d8f565b612793565b61048861138881565b61045761099f366004614d8f565b612a7d565b610488611b5881565b610488600d5481565b6109be612ccd565b6040516103e99190615068565b6104886109d9366004614e1e565b600a6020525f908152604090205481565b6104e06103e881565b610488610a01366004614d8f565b612ed4565b6106a9610a14366004614da6565b613068565b610457610a27366004614cca565b6130c0565b610a6d610a3a366004614d8f565b60076020525f908152604090208054600182015460028301546003909301546001600160a01b0390921692909160ff1684565b604080516001600160a01b039095168552602085019390935291830152151560608201526080016103e9565b610457610aa73660046150ab565b613357565b610457610aba366004614da6565b6136f4565b610ad2610acd366004614d8f565b61372e565b6040516103e991906150cb565b61048862093a8081565b6104886107d081565b6006602052815f5260405f208181548110610b0b575f80fd5b5f918252602090912001546001600160a01b03169150829050565b610b2e61394f565b6040516331a9108f60e11b81526004810183905233906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa158015610b93573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bb791906150da565b6001600160a01b031614610be65760405162461bcd60e51b8152600401610bdd906150f5565b60405180910390fd5b8060ff16600a1480610bfb57508060ff166014145b80610c0957508060ff16601e145b610c445760405162461bcd60e51b815260206004820152600c60248201526b24b73b30b634b2103a34b2b960a11b6044820152606401610bdd565b5f8281526004602052604090208054610100900460ff1615610c785760405162461bcd60e51b8152600401610bdd90615118565b5f8260ff16600a14610c9f578260ff16601414610c9757610384610ca3565b610258610ca3565b61012c5b90505f612710828460020154610cb9919061514d565b610cc39190615164565b90505f610cd1856064615183565b600385015460ff91909116915061138890610cf190839061ffff166151a6565b1115610d2b5760405162461bcd60e51b81526020600482015260096024820152680426f6f7374206361760bc1b6044820152606401610bdd565b610d34826139a8565b6003840180548291905f90610d4e90849061ffff166151b9565b92506101000a81548161ffff021916908361ffff16021790555085336001600160a01b03167fbd2c55c132ce6bf4edbcaf8e0c9665cc39410a959ca8f88daa6b1b1fdb24117e8385604051610db392919061ffff929092168252602082015260400190565b60405180910390a350505050610dc860018055565b5050565b5f818152600460208181526040808420815161016081018352815460ff808216151583526101008083049091161515958301959095526001600160401b0362010000808304821684870152600160501b83048216606085015263ffffffff600160901b840481166080860152600160b01b90930490921660a0840152600184015460c0840152600284015460e084015260039093015461ffff80821696840196909652908104909416610120820152600160201b9093041661014083015251632bbacfe360e11b8152909183916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916357759fc691610eda9188910190815260200190565b602060405180830381865afa158015610ef5573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f1991906151e3565b60ff8082165f9081526002602081815260408084208151608081018352815480825260018301549482019490945293015463ffffffff811691840191909152600160201b900490931660608201529293509061271090610f7c906175309061514d565b610f869190615164565b90505f818560e0015111610f9e578460e00151610fa0565b815b83519091505f90610fb36127108461514d565b610fbd9190615164565b90505f86610100015161ffff16612710610fd791906151a6565b90505f8761014001516001600160401b03164210610ff75761271061100d565b61012088015161100d9061ffff166127106151a6565b60c0890151909150612710611022858361514d565b61102c9190615164565b905061271061103b848361514d565b6110459190615164565b9050612710611054838361514d565b61105e9190615164565b9b9a5050505050505050505050565b61107561394f565b5f818152600760205260409020600381015460ff166110c35760405162461bcd60e51b815260206004820152600a6024820152694e6f742061637469766560b01b6044820152606401610bdd565b80546001600160a01b031633146111095760405162461bcd60e51b815260206004820152600a6024820152692737ba1039b2b63632b960b11b6044820152606401610bdd565b60038101805460ff191690556001810154604051632142170760e11b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916342842e0e916111699130913391906004016151fe565b5f604051808303815f87803b158015611180575f5ffd5b505af1158015611192573d5f5f3e3d5ffd5b50506040518492503391507f070be797ebb4cddc2d58b4fe8de5939531dd771aaed937a59fbe5c9dc8a5d099905f90a3506111cc60018055565b50565b6111d761394f565b6040516331a9108f60e11b81526004810182905233906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa15801561123c573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061126091906150da565b6001600160a01b0316146112865760405162461bcd60e51b8152600401610bdd906150f5565b61128f81613b1c565b5f8181526004602052604090208054610100900460ff16156112c35760405162461bcd60e51b8152600401610bdd90615118565b80545f9063ffffffff600160901b82048116600160b01b90920416116112e9575f61130b565b815461130b9063ffffffff600160901b8204811691600160b01b900416615222565b63ffffffff1690505f81116113325760405162461bcd60e51b8152600401610bdd9061523e565b815460028301545f91600160b01b900463ffffffff169061135490849061514d565b61135e9190615164565b90505f6127106113708361232861514d565b61137a9190615164565b604051632bbacfe360e11b8152600481018790529091505f906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906357759fc690602401602060405180830381865afa1580156113e2573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061140691906151e3565b60ff81165f90815260036020526040902054909150801580159061142957508083105b15611432578092505b604051632142170760e11b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906342842e0e9061148290339030908c906004016151fe565b5f604051808303815f87803b158015611499575f5ffd5b505af11580156114ab573d5f5f3e3d5ffd5b5050600880545f93509150826114c083615264565b909155506040805160808101825233815260208082018c81528284018981526001606085018181525f888152600790955295909320935184546001600160a01b0319166001600160a01b0390911617845590519183019190915551600282015590516003909101805460ff1916911515919091179055875490915060ff161561156b57865460ff19168755600f541561156b576001600f5f828254611565919061527c565b90915550505b8781336001600160a01b03167f03dec9cb5eb28fc88294be525eef5c4e1c3f2ca49fbe9c31a5ae6f11945aaec1876040516115a891815260200190565b60405180910390a4505050505050506111cc60018055565b6115c861394f565b6040516331a9108f60e11b8152600481018290525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa15801561162d573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061165191906150da565b90506001600160a01b038116331461167b5760405162461bcd60e51b8152600401610bdd906150f5565b6116858282613ff7565b506111cc60018055565b61169761394f565b6040516331a9108f60e11b81526004810182905233906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa1580156116fc573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061172091906150da565b6001600160a01b0316146117465760405162461bcd60e51b8152600401610bdd906150f5565b5f8181526004602052604090208054610100900460ff161561177a5760405162461bcd60e51b8152600401610bdd90615118565b80545f9063ffffffff600160901b82048116600160b01b90920416116117a0575f6117c2565b81546117c29063ffffffff600160901b8204811691600160b01b900416615222565b63ffffffff1690505f81116117e95760405162461bcd60e51b8152600401610bdd9061523e565b815460028301545f91600160b01b900463ffffffff169061180b90849061514d565b6118159190615164565b90505f612710611827611b588461514d565b6118319190615164565b6040516370a0823160e01b815230600482015290915081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015611898573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118bc919061528f565b10156118fe5760405162461bcd60e51b8152602060048201526011602482015270125b9cdd59999a58da595b9d081554d115607a1b6044820152606401610bdd565b835461ff0019811661010017855560ff161561193c57835460ff19168455600f541561193c576001600f5f828254611936919061527c565b90915550505b6119706001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633836143da565b604051818152859033907fa52290e9bbeea08e85a4902c066be363bfea47a8be21bba8d1e325b67df795c69060200160405180910390a3505050506111cc60018055565b6119bc614bf4565b6001600160a01b0382165f908152600560205260409081902081516101408101909252600c01600a8282826020028201915b8154815260200190600101908083116119ee5750505050509050919050565b5f60018260ff161080611a235750600a8260ff16115b15611a2f57505f611abf565b5f546001600160a01b03166001600160a01b0316836001600160a01b031603611a5a57506001611abf565b5f611a648461443e565b60ff9081165f908152600260208181526040928390208351608081018552815481526001820154928101929092529091015463ffffffff811692820192909252600160201b9091048216606090910181905290841611159150505b92915050565b611acd61394f565b5f5b81811015611caf57337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636352211e858585818110611b1957611b196152a6565b905060200201356040518263ffffffff1660e01b8152600401611b3e91815260200190565b602060405180830381865afa158015611b59573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b7d91906150da565b6001600160a01b031603611ca7575f60045f858585818110611ba157611ba16152a6565b602090810292909201358352508181019290925260409081015f20815161016081018352815460ff8082161580158085526101008085049093161515978501979097526001600160401b0362010000808504821697860197909752600160501b84048116606086015263ffffffff600160901b850481166080870152600160b01b90940490931660a0850152600185015460c0850152600285015460e085015260039094015461ffff8082169285019290925294850416610120830152600160201b909304909216610140830152909250611c7e57508060200151155b15611ca557611ca5848484818110611c9857611c986152a6565b9050602002013533613ff7565b505b600101611acf565b50610dc860018055565b5f80808080805b600854811015611cf9575f8181526007602052604090206003015460ff1615611cf15781611ced81615264565b9250505b600101611cc0565b50600d54600e54600f5491965094509250905090919293565b611d1a61462c565b611d235f614658565b565b5f818152600460209081526040808320815161016081018352815460ff8082161580158085526101008085049093161515978501979097526001600160401b0362010000808504821697860197909752600160501b84048116606086015263ffffffff600160901b850481166080870152600160b01b90940490931660a0850152600185015460c0850152600285015460e085015260039094015461ffff8082169285019290925294850416610120830152600160201b909304909216610140830152839283928392909190611dfd57508060200151155b611e14575f5f5f6001945094509450945050611f8c565b5f610e1082606001516001600160401b031642611e31919061527c565b611e3b9190615164565b9050805f03611e58575f5f5f600195509550955095505050611f8c565b5f826080015163ffffffff168360a0015163ffffffff1611611e7a575f611e8e565b82608001518360a00151611e8e9190615222565b63ffffffff169050805f03611eb2575f5f5f60019650965096509650505050611f8c565b808211611ebf5781611ec1565b805b965086611ecd89610dcc565b611ed7919061514d565b9550612710611ee8610a288861514d565b611ef29190615164565b9450611efe85876151a6565b6040516370a0823160e01b81523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015611f60573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f84919061528f565b101593505050505b9193509193565b611f9b61394f565b600760ff83161115611fdf5760405162461bcd60e51b815260206004820152600d60248201526c125b9d985b1a59081b5bd9195b609a1b6044820152606401610bdd565b60ff8083165f908152600260208181526040928390208351608081018552815480825260018301549382019390935292015463ffffffff811693830193909352600160201b90920490921660608301526120715760405162461bcd60e51b81526020600482015260136024820152724d6f64656c206e6f7420617661696c61626c6560681b6044820152606401610bdd565b60095460ff9081165f818152600b6020908152604080832094881680845294825280832054938352600c82528083209483529390529190912054106120e95760405162461bcd60e51b815260206004820152600e60248201526d141a185cd9481cdbdb19081bdd5d60921b6044820152606401610bdd565b60095460ff165f908152600a602052604081205482516127109161210c9161514d565b6121169190615164565b90505f6127106121288361012c61514d565b6121329190615164565b90505f6127106121448461012c61514d565b61214e9190615164565b90505f6127106121608561019061514d565b61216a9190615164565b90505f8183612179868861527c565b612183919061527c565b61218d919061527c565b90506121c46001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163330846146a7565b6122196001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016337f0000000000000000000000000000000000000000000000000000000000000000876146a7565b61226e6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016337f0000000000000000000000000000000000000000000000000000000000000000866146a7565b6122c36001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016337f0000000000000000000000000000000000000000000000000000000000000000856146a7565b604051630348ab1560e51b815233600482015260ff891660248201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063691562a0906044016020604051808303815f875af1158015612331573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612355919061528f565b5f818152600460209081526040918290208054928b015163ffffffff16600160b01b026001600160d01b03199093169290921782558901516001820155600281018890556003810180546bffffffffffffffffffffffff191690559091506123bd338a6146cf565b6001600e5f8282546123cf91906151a6565b909155506123de90508a614852565b818a60ff16336001600160a01b03167f204afba2fa3455dc820c9fee8f5455497a472e2d7193c1b3e6a78d19bf187ba58a60405161241e91815260200190565b60405180910390a45050505050505050610dc860018055565b6008546060905f816001600160401b03811115612456576124566152ba565b60405190808252806020026020018201604052801561247f578160200160208202803683370190505b5090505f805b838110156124d9575f8181526007602052604090206003015460ff16156124d1578083836124b281615264565b9450815181106124c4576124c46152a6565b6020026020010181815250505b600101612485565b50806001600160401b038111156124f2576124f26152ba565b60405190808252806020026020018201604052801561251b578160200160208202803683370190505b5093505f5b818110156125675782818151811061253a5761253a6152a6565b6020026020010151858281518110612554576125546152a6565b6020908102919091010152600101612520565b5050505090565b61257661394f565b6040516331a9108f60e11b81526004810183905233906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa1580156125db573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125ff91906150da565b6001600160a01b0316146126255760405162461bcd60e51b8152600401610bdd906150f5565b8061ffff1660fa148061263d57508061ffff166101f4145b8061264d57508061ffff166103e8145b6126885760405162461bcd60e51b815260206004820152600c60248201526b496e76616c6964207061636b60a01b6044820152606401610bdd565b5f8281526004602052604090208054610100900460ff16156126bc5760405162461bcd60e51b8152600401610bdd90615118565b5f6126cc60fa61ffff8516615164565b90505f6126da8260fa61514d565b90505f6127108285600201546126f0919061514d565b6126fa9190615164565b9050612705816139a8565b835461ffff861690859060169061272a908490600160b01b900463ffffffff166152ce565b92506101000a81548163ffffffff021916908363ffffffff16021790555085336001600160a01b03167f9a3005d3b63dabda9047e395b13738a587dac530d65d9ac060dbb6421d3a2a3d8784604051610db392919061ffff929092168252602082015260400190565b61279b61394f565b5f818152600760205260409020600381015460ff166127ee5760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206c697374696e6760881b6044820152606401610bdd565b8054336001600160a01b03909116036128345760405162461bcd60e51b815260206004820152600860248201526753656c662062757960c01b6044820152606401610bdd565b60028101545f6127106128496103e88461514d565b6128539190615164565b90505f612860828461527c565b90505f6127106128726102588661514d565b61287c9190615164565b90505f61271061288e6101908761514d565b6128989190615164565b60038701805460ff1916905586549091506128e2906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811691339116866146a7565b6129376001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016337f0000000000000000000000000000000000000000000000000000000000000000856146a7565b61298c6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016337f0000000000000000000000000000000000000000000000000000000000000000846146a7565b6001860154604051632142170760e11b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916342842e0e916129e09130913391906004016151fe565b5f604051808303815f87803b1580156129f7575f5ffd5b505af1158015612a09573d5f5f3e3d5ffd5b5050506001870180545f9081526004602052604090819020805460ff19168155600281018990558954925491519093508a926001600160a01b03169133917f6dcef017cc53467bf0780bcb702819032f869d4fa4591dffd79fbeef06233bf8916115a8918c90918252602082015260400190565b612a8561394f565b6040516331a9108f60e11b81526004810182905233906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa158015612aea573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b0e91906150da565b6001600160a01b031614612b345760405162461bcd60e51b8152600401610bdd906150f5565b5f8181526004602052604090208054610100900460ff1615612b685760405162461bcd60e51b8152600401610bdd90615118565b805460ff1615612bab5760405162461bcd60e51b815260206004820152600e60248201526d416c72656164792061637469766560901b6044820152606401610bdd565b5f816002015411612bed5760405162461bcd60e51b815260206004820152600c60248201526b139bc81c1c9a58d9481cd95d60a21b6044820152606401610bdd565b805460ff19166001178082556001600160401b03620100009091041615612c245780546201000090046001600160401b0316612c26565b425b815471ffffffffffffffffffffffffffffffff00001916620100006001600160401b039283160267ffffffffffffffff60501b191617600160501b429290921691909102178155600f8054600191905f90612c829084906151a6565b90915550506002810154604051908152829033907ff89be561c4ce44410305a86555ebae8b579de22890a703ac89051c5971b5d4dc9060200160405180910390a3506111cc60018055565b6040516370a0823160e01b81523360048201526060905f906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015612d34573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612d58919061528f565b9050806001600160401b03811115612d7257612d726152ba565b604051908082528060200260200182016040528015612dab57816020015b612d98614c13565b815260200190600190039081612d905790505b5091505f5b81811015612ecf57604051632f745c5960e01b8152336004820152602481018290525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632f745c5990604401602060405180830381865afa158015612e23573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e47919061528f565b60405163f716368960e01b815260048101829052909150309063f7163689906024016101a060405180830381865afa158015612e85573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ea99190615362565b848381518110612ebb57612ebb6152a6565b602090810291909101015250600101612db0565b505090565b5f818152600460209081526040808320815161016081018352815460ff80821615801584526101008084049092161515968401969096526001600160401b0362010000808404821696850196909652600160501b83048116606085015263ffffffff600160901b840481166080860152600160b01b90930490921660a0840152600184015460c0840152600284015460e084015260039093015461ffff80821694840194909452938404909216610120820152600160201b909204166101408201529080612fa3575080602001515b15612fb057505f92915050565b5f610e1082606001516001600160401b031642612fcd919061527c565b612fd79190615164565b9050805f03612fe957505f9392505050565b5f826080015163ffffffff168360a0015163ffffffff161161300b575f61301f565b82608001518360a0015161301f9190615222565b63ffffffff169050805f0361303857505f949350505050565b5f8183116130465782613048565b815b90508061305487610dcc565b61305e919061514d565b9695505050505050565b613070614bf4565b6001600160a01b0382165f908152600560205260409081902081516101408101909252600201600a8282826020028201918154815260200190600101908083116119ee5750505050509050919050565b6130c861394f565b6040516331a9108f60e11b81526004810183905233906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa15801561312d573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061315191906150da565b6001600160a01b0316146131775760405162461bcd60e51b8152600401610bdd906150f5565b8060ff166014148061318c57508060ff166023145b6131c75760405162461bcd60e51b815260206004820152600c60248201526b24b73b30b634b2103a34b2b960a11b6044820152606401610bdd565b5f8281526004602052604090208054610100900460ff16156131fb5760405162461bcd60e51b8152600401610bdd90615118565b6003810154600160201b90046001600160401b03164210156132525760405162461bcd60e51b815260206004820152601060248201526f4f766572636c6f636b2061637469766560801b6044820152606401610bdd565b5f8260ff166014146132655760c8613268565b60645b90505f61271082846002015461327e919061514d565b6132889190615164565b9050613293816139a8565b61329e846064615183565b60038401805463ffff0000191660ff9290921662010000029190911790556132c962093a80426151a6565b6003840180546bffffffffffffffff000000001916600160201b6001600160401b03938416810291909117918290556040805162010000840461ffff168152602081018690529190920490921690820152859033907f5cce9e779c839c2487075280b16170f17c82662a7414e3bc44d72c106d106bb09060600160405180910390a3505050610dc860018055565b61335f61394f565b6040516331a9108f60e11b81526004810183905233906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa1580156133c4573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906133e891906150da565b6001600160a01b03161461340e5760405162461bcd60e51b8152600401610bdd906150f5565b5f811161344a5760405162461bcd60e51b815260206004820152600a6024820152695a65726f20707269636560b01b6044820152606401610bdd565b61345382613b1c565b5f8281526004602052604090208054610100900460ff16156134875760405162461bcd60e51b8152600401610bdd90615118565b604051632bbacfe360e11b8152600481018490525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906357759fc690602401602060405180830381865afa1580156134ec573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061351091906151e3565b60ff81165f90815260036020526040902054909150801561356957808410156135695760405162461bcd60e51b815260206004820152600b60248201526a2132b637bb90333637b7b960a91b6044820152606401610bdd565b604051632142170760e11b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906342842e0e906135b990339030908a906004016151fe565b5f604051808303815f87803b1580156135d0575f5ffd5b505af11580156135e2573d5f5f3e3d5ffd5b5050600880545f93509150826135f783615264565b909155506040805160808101825233815260208082018a81528284018a81526001606085018181525f888152600790955295909320935184546001600160a01b0319166001600160a01b0390911617845590519183019190915551600282015590516003909101805460ff1916911515919091179055845490915060ff16156136a257835460ff19168455600f54156136a2576001600f5f82825461369c919061527c565b90915550505b8581336001600160a01b03167f03dec9cb5eb28fc88294be525eef5c4e1c3f2ca49fbe9c31a5ae6f11945aaec1886040516136df91815260200190565b60405180910390a450505050610dc860018055565b6136fc61462c565b6001600160a01b03811661372557604051631e4fbdf760e01b81525f6004820152602401610bdd565b6111cc81614658565b613736614c13565b5f828152600460208181526040808420815161016081018352815460ff808216151583526101008083049091161515958301959095526001600160401b0362010000808304821684870152600160501b83048216606085015263ffffffff600160901b840481166080860152600160b01b90930490921660a0840152600184015460c0840152600284015460e084015260039093015461ffff80821696840196909652908104909416610120820152600160201b9093041661014083015251632bbacfe360e11b81529092916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916357759fc6916138439188910190815260200190565b602060405180830381865afa15801561385e573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061388291906151e3565b9050604051806101a001604052808260ff168152602001835f01511515815260200183602001511515815260200183604001516001600160401b0316815260200183606001516001600160401b03168152602001836080015163ffffffff1681526020018360a0015163ffffffff1681526020018360c0015181526020018360e00151815260200183610100015161ffff16815260200183610120015161ffff1681526020018361014001516001600160401b0316815260200161394586612ed4565b9052949350505050565b6002600154036139a15760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610bdd565b6002600155565b5f81116139e35760405162461bcd60e51b815260206004820152600960248201526816995c9bc818dbdcdd60ba1b6044820152606401610bdd565b5f6127106139f36103e88461514d565b6139fd9190615164565b90505f612710613a0f6121348561514d565b613a199190615164565b90505f612710613a2b6101f48661514d565b613a359190615164565b9050613a8c6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016337f0000000000000000000000000000000000000000000000000000000000000000866146a7565b613ac16001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163330856146a7565b613b166001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016337f0000000000000000000000000000000000000000000000000000000000000000846146a7565b50505050565b5f818152600460205260409020805460ff168015613b4157508054610100900460ff16155b613b49575050565b80545f90610e1090613b6b90600160501b90046001600160401b03164261527c565b613b759190615164565b9050805f03613b8357505050565b81545f9063ffffffff600160901b82048116600160b01b9092041611613ba9575f613bcb565b8254613bcb9063ffffffff600160901b8204811691600160b01b900416615222565b63ffffffff169050805f03613ccb57825461ffff1916610100178355600f5415613c07576001600f5f828254613c01919061527c565b90915550505b6040516331a9108f60e11b81526004810185905284907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa158015613c6c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613c9091906150da565b6001600160a01b03167f751a0eb66c3cc9aa48957d09bd3cc81db888f5bcac6689def5fb9e18ec3cf20160405160405180910390a350505050565b5f818311613cd95782613cdb565b815b90505f81613ce887610dcc565b613cf2919061514d565b9050805f03613d0357505050505050565b5f612710613d13610a288461514d565b613d1d9190615164565b613d2790836151a6565b6040516370a0823160e01b815230600482015290915081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015613d8e573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613db2919061528f565b1015613dc15750505050505050565b613dcd83610e10615450565b8654613de99190600160501b90046001600160401b0316615472565b86546001600160401b0391909116600160501b0267ffffffffffffffff60501b199091161780875583908790601290613e3190849063ffffffff600160901b909104166152ce565b92506101000a81548163ffffffff021916908363ffffffff1602179055505f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636352211e896040518263ffffffff1660e01b8152600401613e9e91815260200190565b602060405180830381865afa158015613eb9573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613edd91906150da565b9050613f136001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001682856143da565b604080518481526020810186905289916001600160a01b038416917f9cdcf2f7714cca3508c7f0110b04a90a80a3a8dd0e35de99689db74d28c5383e910160405180910390a3613f6381846148ec565b865463ffffffff600160b01b82048116600160901b9092041610613fed57865461ffff1916610100178755600f5415613fae576001600f5f828254613fa8919061527c565b90915550505b60405188906001600160a01b038316907f751a0eb66c3cc9aa48957d09bd3cc81db888f5bcac6689def5fb9e18ec3cf201905f90a35050505050505050565b5050505050505050565b5f828152600460205260409020805460ff16801561401c57508054610100900460ff16155b61405e5760405162461bcd60e51b8152602060048201526013602482015272125b9858dd1a5d99481bdc88195e1c1a5c9959606a1b6044820152606401610bdd565b80545f90610e109061408090600160501b90046001600160401b03164261527c565b61408a9190615164565b90505f81116140c95760405162461bcd60e51b815260206004820152600b60248201526a2bb0b4ba1018903437bab960a91b6044820152606401610bdd565b81545f906140ed9063ffffffff600160901b8204811691600160b01b900416615222565b63ffffffff1690505f8183116141035782614105565b815b90505f81116141265760405162461bcd60e51b8152600401610bdd9061523e565b5f8161413188610dcc565b61413b919061514d565b90505f81116141755760405162461bcd60e51b8152600401610bdd906020808252600490820152635a65726f60e01b604082015260600190565b5f612710614185610a288461514d565b61418f9190615164565b61419990836151a6565b6040516370a0823160e01b815230600482015290915081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015614200573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614224919061528f565b1015614234575050505050505050565b61424083610e10615450565b865461425c9190600160501b90046001600160401b0316615472565b86546001600160401b0391909116600160501b0267ffffffffffffffff60501b1990911617808755839087906012906142a490849063ffffffff600160901b909104166152ce565b92506101000a81548163ffffffff021916908363ffffffff16021790555061430087837f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166143da9092919063ffffffff16565b604080518381526020810185905289916001600160a01b038a16917f9cdcf2f7714cca3508c7f0110b04a90a80a3a8dd0e35de99689db74d28c5383e910160405180910390a361435087836148ec565b855463ffffffff600160b01b82048116600160901b9092041610613fed57855461ffff1916610100178655600f541561439b576001600f5f828254614395919061527c565b90915550505b60405188906001600160a01b038916907f751a0eb66c3cc9aa48957d09bd3cc81db888f5bcac6689def5fb9e18ec3cf201905f90a35050505050505050565b6040516001600160a01b0383811660248301526044820183905261443991859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050614b01565b505050565b6040516370a0823160e01b81526001600160a01b0382811660048301525f9182917f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa1580156144a6573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906144ca919061528f565b9050805f036144dc575f5b9392505050565b5f805b8281101561462457604051632f745c5960e01b81526001600160a01b038681166004830152602482018390525f917f000000000000000000000000000000000000000000000000000000000000000090911690632f745c5990604401602060405180830381865afa158015614556573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061457a919061528f565b604051632bbacfe360e11b8152600481018290529091505f906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906357759fc690602401602060405180830381865afa1580156145e2573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061460691906151e3565b90508360ff168160ff16111561461a578093505b50506001016144df565b509392505050565b5f546001600160a01b03163314611d235760405163118cdaa760e01b8152336004820152602401610bdd565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b613b1684856001600160a01b03166323b872dd868686604051602401614407939291906151fe565b6001600160a01b038281165f9081526005602052604090205416156146f2575050565b806001600160a01b038116158061471a5750826001600160a01b0316816001600160a01b0316145b1561472c57505f546001600160a01b03165b6001600160a01b038381165f90815260056020526040902080546001600160a01b031916918316918217905515614836576001600160a01b038181165f908152600660209081526040822080546001810182559083529082200180546001600160a01b0319169286169290921790915581905b600a8160ff161080156147ba57506001600160a01b03821615155b15614833576001600160a01b0382165f908152600560205260409020600190600c0160ff8316600a81106147f0576147f06152a6565b015f8282546147ff91906151a6565b90915550506001600160a01b039182165f90815260056020526040902054909116908061482b81615491565b91505061479f565b50505b6001600d5f82825461484891906151a6565b9091555050505050565b60095460ff9081165f908152600c6020908152604080832093851683529290529081208054600192906148869084906151a6565b909155505060095460ff161580156148a157506148a1614b6d565b156111cc576009805460ff191660019081179091556040519081527fd0e47a271d69b0e6e3f9bd81c7c695bfbcb309e6ee66a23e6ad80a8f901905749060200160405180910390a150565b6001600160a01b038083165f90815260056020526040812054909116905b600a8160ff1610801561492557506001600160a01b03821615155b15613b1657614939826106eb8360016154af565b61495f576001600160a01b039182165f9081526005602052604090205490911690614aef565b5f8160ff165f0361497357506103e86149b2565b8160ff1660010361498757506101f46149b2565b8160ff1660020361499b575061012c6149b2565b8160ff166003036149ae575060c86149b2565b5060645b5f6127106149c0838761514d565b6149ca9190615164565b90508015614acf57614a066001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001685836143da565b6001600160a01b0384165f9081526005602052604081206001018054839290614a309084906151a6565b90915550506001600160a01b0384165f908152600560205260409020819060020160ff8516600a8110614a6557614a656152a6565b015f828254614a7491906151a6565b90915550506001600160a01b038085169087167f9e049ed607614d479b674dbbbd87ad8695ec902d2f960b95e7a01c5c86b2d165614ab38660016154af565b6040805160ff9092168252602082018690520160405180910390a35b50506001600160a01b039182165f90815260056020526040902054909116905b80614af981615491565b91505061490a565b5f5f60205f8451602086015f885af180614b20576040513d5f823e3d81fd5b50505f513d91508115614b37578060011415614b44565b6001600160a01b0384163b155b15613b1657604051635274afe760e01b81526001600160a01b0385166004820152602401610bdd565b5f805b600760ff821611614bec5760095460ff9081165f908152600b60209081526040808320938516835292905220548015801590614bcc575060095460ff9081165f908152600c602090815260408083209386168352929052205481115b15614bd9575f9250505090565b5080614be481615491565b915050614b70565b506001905090565b604051806101400160405280600a906020820280368337509192915050565b604080516101a0810182525f80825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081019190915290565b6001600160a01b03811681146111cc575f5ffd5b5f5f60408385031215614ca3575f5ffd5b8235614cae81614c7e565b946020939093013593505050565b60ff811681146111cc575f5ffd5b5f5f60408385031215614cdb575f5ffd5b823591506020830135614ced81614cbc565b809150509250929050565b5f5f5f5f5f60808688031215614d0c575f5ffd5b8535614d1781614c7e565b94506020860135614d2781614c7e565b93506040860135925060608601356001600160401b03811115614d48575f5ffd5b8601601f81018813614d58575f5ffd5b80356001600160401b03811115614d6d575f5ffd5b886020828401011115614d7e575f5ffd5b959894975092955050506020019190565b5f60208284031215614d9f575f5ffd5b5035919050565b5f60208284031215614db6575f5ffd5b81356144d581614c7e565b610140810181835f5b600a811015614de9578151835260209283019290910190600101614dca565b50505092915050565b5f5f60408385031215614e03575f5ffd5b8235614e0e81614c7e565b91506020830135614ced81614cbc565b5f60208284031215614e2e575f5ffd5b81356144d581614cbc565b5f5f60208385031215614e4a575f5ffd5b82356001600160401b03811115614e5f575f5ffd5b8301601f81018513614e6f575f5ffd5b80356001600160401b03811115614e84575f5ffd5b8560208260051b8401011115614e98575f5ffd5b6020919091019590945092505050565b5f5f60408385031215614eb9575f5ffd5b8235614e0e81614cbc565b5f5f60408385031215614ed5575f5ffd5b8235614ee081614cbc565b91506020830135614ced81614c7e565b602080825282518282018190525f918401906040840190835b81811015614f27578351835260209384019390920191600101614f09565b509095945050505050565b61ffff811681146111cc575f5ffd5b5f5f60408385031215614f52575f5ffd5b823591506020830135614ced81614f32565b805160ff1682526020810151614f7e602084018215159052565b506040810151614f92604084018215159052565b506060810151614fad60608401826001600160401b03169052565b506080810151614fc860808401826001600160401b03169052565b5060a0810151614fe060a084018263ffffffff169052565b5060c0810151614ff860c084018263ffffffff169052565b5060e081015160e083015261010081015161010083015261012081015161502661012084018261ffff169052565b5061014081015161503e61014084018261ffff169052565b5061016081015161505b6101608401826001600160401b03169052565b5061018090810151910152565b602080825282518282018190525f918401906040840190835b81811015614f2757615094838551614f64565b602093909301926101a09290920191600101615081565b5f5f604083850312156150bc575f5ffd5b50508035926020909101359150565b6101a08101611abf8284614f64565b5f602082840312156150ea575f5ffd5b81516144d581614c7e565b6020808252600990820152682737ba1037bbb732b960b91b604082015260600190565b602080825260079082015266115e1c1a5c995960ca1b604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417611abf57611abf615139565b5f8261517e57634e487b7160e01b5f52601260045260245ffd5b500490565b60ff818116838216029081169081811461519f5761519f615139565b5092915050565b80820180821115611abf57611abf615139565b61ffff8181168382160190811115611abf57611abf615139565b80516151de81614cbc565b919050565b5f602082840312156151f3575f5ffd5b81516144d581614cbc565b6001600160a01b039384168152919092166020820152604081019190915260600190565b63ffffffff8281168282160390811115611abf57611abf615139565b6020808252600c908201526b4e6f2072656d61696e696e6760a01b604082015260600190565b5f6001820161527557615275615139565b5060010190565b81810381811115611abf57611abf615139565b5f6020828403121561529f575f5ffd5b5051919050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52604160045260245ffd5b63ffffffff8181168382160190811115611abf57611abf615139565b6040516101a081016001600160401b038111828210171561531957634e487b7160e01b5f52604160045260245ffd5b60405290565b805180151581146151de575f5ffd5b80516001600160401b03811681146151de575f5ffd5b805163ffffffff811681146151de575f5ffd5b80516151de81614f32565b5f6101a0828403128015615374575f5ffd5b5061537d6152ea565b615386836151d3565b81526153946020840161531f565b60208201526153a56040840161531f565b60408201526153b66060840161532e565b60608201526153c76080840161532e565b60808201526153d860a08401615344565b60a08201526153e960c08401615344565b60c082015260e0838101519082015261010080840151908201526154106101208401615357565b6101208201526154236101408401615357565b610140820152615436610160840161532e565b610160820152610180928301519281019290925250919050565b6001600160401b03818116838216029081169081811461519f5761519f615139565b6001600160401b038181168382160190811115611abf57611abf615139565b5f60ff821660ff81036154a6576154a6615139565b60010192915050565b60ff8181168382160190811115611abf57611abf61513956fea264697066735822122076ac023a16b42b09458ce09036b7b68e89cea15ed59a55f4ea56c5f0df3add8b64736f6c634300081e00330000000000000000000000009c1eb8cd53a98e748ee0449dfe20fe5aa30c531f00000000000000000000000055d398326f99059ff775485246999027b3197955000000000000000000000000f741763122ae6b6d56562f345f9627d49ee00d5b0000000000000000000000002fd8158fb9b5a78fa36164c52499e81723d1133a0000000000000000000000002fd8158fb9b5a78fa36164c52499e81723d1133a0000000000000000000000002fd8158fb9b5a78fa36164c52499e81723d1133a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000