Overview
Max Total Supply
1,000,000,000,000,000,000 MEDI
Holders
520 (0.00%)
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Balance
649,815,298,901,664.037044962 MEDIValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
MediTokenV2
Compiler Version
v0.8.9+commit.e5eed63a
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion, Audited
Contract Source Code (Solidity Standard Json-Input format)Audit Report
// SPDX-License-Identifier: NOLICENSE // @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ // @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@&.(@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ // @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@,@@@@@@@@@@@@%.&@@@..@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ // @@@@@@@@@@@@@@@@@@@&**&@@@@@@@@@.*#@@#*,,*@,..,&@@@&,.&,...,./@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ // @@@@@@@@@@@@@@@@@@((((((/**@@@.,*,***&,.,*(@&@%,,,***%@@@@@@@@@@@@,@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ // @@@@@@@@@@@@@@#*((((((((((((@.****@,,**@,,.******,,@(((((/*@....,*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ // @@@@@@@@@@*#(((((((((((#%@*,*,,*@***@,,,**,,*****&#((((((((**@***@%***@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ // @@@@@@@@@@@@&#%(((((%%.,,**(,,,#***/,**,,*******@(((((((((((((*&@,,,....,**@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ // @@@@@@@@@@@/@@@@@@@,..******,,,****,,*,,*@**/@*@#(((((((((((((((****@****@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ // @@@@@@@@@@@@@@,........,****%,,,*,,,,,,@*,,,,*/#((((((((((*******((/@**@@&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ // @@@@@@@@@@@@@@@@@#@(******@**@,/,*,,,&***(,,,**#(((((***%@@%######(@(,../@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ // @@@@@@@@@@@@@@@@,,*@@#(*/(**%***/,/,@,/#&,,#,.,*#@%***%**/&****/&&%&***@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ // @@@@@@@@@@@@@@,/&#******@*#,..............,,#,.,*#......../@(*******.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ // @@@@@@@@@@@@,@@#&,****@*//,................,,,,*,,*#... ./((/,&*****(@@@@@*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ // @@@@@@@@@@@@@@@@@%***(*/@,..................,%.***,,*,%..#******,,@(**.**@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ // @@@@@@@@@@@@@@@@@%*,,(*/@@@.............@@@@@@%&**##****,...@********#,@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ // @@@@@@@@@@@@@@@@@*.,#**#@/*@&,,,,,,...%@,,,/&@@/**.@,%@**#&@&&@@/****/#(,@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ // @@@@@@@@@@@@@@@@@&*@&(###%@@@&#*,,@#@,...,#(/(**../.(/.,,,,*%@@@@**@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ // @@@@@@@@@@@@@@@@@#####*. .@%,......,@ ... (.(,.,,,(#@ ...... #&@@@**@@@,@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ // @@@@@@@@@@@@@@@@@@###,,*,,@,........,& /. @......./&...,,@(@,.,@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ // @@@@@@@@@@@@@@@@@@%@@@&%(@*...............,.....................&*****&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ // @@@@@@@@@@@@@@@@@@@@/****,,.................................#(****(*@*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ // @@@@@@@@@@@@@@@@@@@@@@&//,@@@@@#..........*&@@...........*@@/***&***/&@#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@&&&&%%&@@@@@@@@@@@@@@@@ // @@@@@@@@@@@@@@@@@@@@@(*(*/**,,,........@&((,&@.......,.&*(#/********@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@############@@@@@@@@@@@@@@@@ // @@@@@@@@@@@@@@@@@@@@@@@@@(/&,....../@((( ./.......,,@***(.....**@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@############@@@@@@@@@@@@@@@@ // @@@@@@@@@@@@@@@@@@@@@@@@@@@@@*#....,.@&@,,,,,.,,,&(**(*......*@&///@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@############@@@@@@@@@@@@@@@@ // @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@**,,@&(,,,,,*,,@#****(.....,*%#(((((%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@############@@@@@@@@@@@@@@@@ // @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@&**,,**%@%&******.....,*&(((((((#,.@@/@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%%%&&&@@@@@@############@@@@@@@@@@@@@@@@ // @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@&@@@@@@@@@%/****/@(,,,.,*&((((((((#@.. (@* @@@@@@@@@@@@@@@@@@@@@@@@@@@%#####################################&@@ // @@@@@@@@@@@@@@@@@@@@@@&..%@@@#@@@@@@@@@%%&*******,,,,*@/((((((((##*..&..@@ * %@@@@@@@@@@@@@@@@@@@@@@@%#####################################@@@ // @@@@@@@@@@@@@@@@@@@*,&,,&#%@@*,@@@@@@@%@%%&***/&*,,##(//((#(((###&..,.. (@& * @@@@@@@@@@@@@@@@@@@@######################################@@@ // @@@@@@@@@@@@@@@@,.....&*&&&**@@@@&..@@%%&%%&**,,,**@%%%@/####(#((&..&. @@ @@@@@@@@@@@@@@@#####################################%@@@ // @@@@@@@@@@@@,.,%...&,,,&/**@@@,....@@%%%&&%*******/%%%%%&/(##((((,../, &@ / %@@@@@@@@@@@@@@@@@@@@@@@@############@@@@@@@@@@@@@@@@ // @@@@@@@@@@,,,...%..,(/,(**@@.....(@@&%%%&&&********@%&&&&&./((((@.. %. @@ .. .%%#&@@@@@@@@@@@@@@@@@@@@@############@@@@@@@@@@@@@@@@ // @@@@@@@@@(.,@*(.,,%,.&.#*,*.....@@@@&&.#&&&#*******&&&&&&.....@(....&. @@ ..., .@ ,@@@@@@@@@@@@@@@@@&############@@@@@@@@@@@@@@@@ // @@@@@@@@@@..,***(#.&.%***/..,@@@ (@@@.@&&&******%&&&&&& ..........@ .@&..../ ..& @@@@@@@@@@@@@@@@@&############@@@@@@@@@@@@@@@@ // @@@@@@@@@@(.************,%..(/@ @@.@&&&/***(&&&&&#/. ......*&,. @@ ...@ ...# @@@@@@@@@@@@@@@@@%############@@@@@@@@@@@@@@@@ // @@@@@@@@@@@,***********(/ /@# ,@&*%&&&&*&&&@%%#/(& ....&*,. ##@ ..& ..&.. @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ // @@@@@@@@@@@@********&*#. % @(*%%%&&&&&&@(((((% .........*% &@ ..,..&.. /@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ // @@@@@@@@@@@@*****@***.. .( * @%(%&&&&&&&((((#@ .........@. @@* .&..,.. . @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ // @@@@@@@@@@@@********,&.*@@@@@@@@@@# %%((&&&&@@@@@@@@@@@@@@@@@@@@@@&, @@/ .&@@@@@@@@@@@@@@@@@@/ .@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ // @@ @@*******.,@@( @@ &(/(%&&@@ @@*@@* *@@ /@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@ // @@. @@(*****/@@ @@@((((&&&@@. ,@@./ ,@@ .@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@ // @@/ @@@***(@@ @@#(((#&&&@@/ @@@@&%#*. @@&@& .@@ @@@@@# ,@@@@@@@@@@@@@* @@@@@@@@@@@@@@@@@ // @@# *@@*@@@ @@%#((&&&&@@& @@@@@@@@@@@@@ &@ /@@ @@ @@@ @@@@@@@@@@@@# @@@@@@@@@@@@@@@@@ // @@& @@@. .@@%%#%&&&&@@@ @@ @( ..@@ @@ @@, &@@@@@@@@@@@& ,@@@@@@@@@@@@@@@@@ // @@@..............@...... ........@@#((%&&&&&@@.................. @@ ##/ ..,@@....... @@ #@@.......*@@@@@@@@@@@&.......*@@@@@@@@@@@@@@@@@ // @@&.......@............%@........@@(((&&&&&@@@........&&&&&&&%/./@@@@ ./.@@........@@.. @@........@@@@@@@@@@@@(.......,@@@@@@@@@@@@@@@@@ // @@(.......@@/.........@@@........@@%@(&&&&&@@(........@@@@@@@@@@@@@@ #.(.@@........@@&&@@@@&........%@@@@@@@@@@@@,........@@@@@@@@@@@@@@@@@ // @@,.......@@@@.......@@@&........@@((%&&&&&@@,....................@@# ..(,*@@........................@@@@@@@@@@@@@@.........@@@@@@@@@@@@@@@@@ // @@........@@@@@....,@@@@#........@@((&&&&&&@@.....................@@ ..#@%.@@.....................,@@@@@@@@@@@@@@@@.........@@@@@@@@@@@@@@@@@ // @@.,,,,,,,@@/*@@,,,@@*@@#,,,,,,,,@@((@&&&&&@@.,,,,,,,,,,,,,,,,,,,(@@ .,,@%.*@@,,,,,,,,,,,,,,..(@@@@@@@@@@@@@@@@@@@@@.,,,,,,,.@@@@@@@@@@@@@@@@@ // @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ // @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ // @@@ @@@@@@@@@@@@@@@ /@@@@@@@@@@@@@@@@ .@@@@ @@@@@@@@@@@@@ @@@@@@@@@@@@@@ @@@@@# @@@@@@@@@@@@@@@@@@ // @@@@@@( @@@@@@@@@@@@@@@@@ %@( @@@@@@@@@@@@@@ #@@@ @@@@@@@@@@@@@@ ,@@@@@@@@@@@@@@@@@@@@ @@@@ @@@@@@@@@@@@@@@@@@ // @@@@@@& @@@@@@@@@@@@@@@@ @@@@@@@ /@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@ @@ @@@@@@@@@@@@@@@@@@ // @@@@@@%....@@@@@@@@@@@@@@@@ ... @@@@@@@....(@@@@@@@@@@@@@.......... @@@@@@@@@@@@@@@@..... . @@@@@@@@@@@@@@....@@.........@@@@@@@@@@@@@@@@@@ // @@@@@@/....@@@@@@@@@@@@@@@@@......*#,.....,@@@@@@@@@@@@@@..../@@.....%@@@@@@@@@@@@@@.....%@@&#//@@@@@@@@@@@@@....@@@@.......@@@@@@@@@@@@@@@@@@ // @@@@@@,,,,,@@@@@@@@@@@@@@@@@@@/,,,,,,,,,&@@@@@@@@@@@@@@@@,,,,,@@@@,,,,.@@@@@@@@@@@@@,,,,,,,,,,,&@@@@@@@@@@@@@,,,,@@@@@@.,,,,@@@@@@@@@@@@@@@@@@ // @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ pragma solidity ^0.8.9; interface IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor() { _setOwner(_msgSender()); } function owner() public view virtual returns (address) { return _owner; } modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } interface IFactory{ function createPair(address tokenA, address tokenB) external returns (address pair); } interface IRouter { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external; } contract MediTokenV2 is Context, IERC20, Ownable { mapping (address => uint256) private _rOwned; mapping (address => uint256) private _tOwned; mapping (address => mapping (address => uint256)) private _allowances; mapping (address => bool) private _isExcludedFromFee; mapping (address => bool) private _isExcluded; mapping (address => bool) private _isBot; address[] private _excluded; bool public swapEnabled; bool private swapping; IRouter public router; address public pair; uint8 private constant _decimals = 9; uint256 private constant MAX = ~uint256(0); uint256 private _tTotal = 1000000000000000000 * 10**_decimals; uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 public swapTokensAtAmount = 1000000 * 10**_decimals; uint256 public maxTxAmount = 2000000000000000 * 10**_decimals; bool private _isTradingState = true; // Anti Dump // mapping (address => uint256) public _lastTrade; bool public coolDownEnabled = true; uint256 public coolDownTime = 69 seconds; address public constant deadAddress = 0x000000000000000000000000000000000000dEaD; address public devAddress = 0xC56d6d2ae78102C9D7a72bCab720ca1CAe97b2cC; address public charityAddress = 0xb3AaE54BE35E8044c8044F5488aAF3861279328B; address public marketingAddress = 0x45b495b912c33db96D57B18FbB5f4A439573D770; address private routerAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; //uniswap v2 string private constant _name = "Medi Token V2"; string private constant _symbol = "MEDI"; struct Taxes { uint256 rfi; uint256 burn; uint256 liquidity; uint256 charity; uint256 dev; uint256 marketing; } Taxes public taxes = Taxes(1,1,1,3,3,2); struct TotFeesPaidStruct{ uint256 rfi; uint256 burn; uint256 liquidity; uint256 charity; uint256 dev; uint256 marketing; } TotFeesPaidStruct public totFeesPaid; struct valuesFromGetValues{ uint256 rAmount; uint256 rTransferAmount; uint256 rRfi; uint256 rBurn; uint256 rLiquidity; uint256 rCharity; uint256 rDev; uint256 rMarketing; uint256 tTransferAmount; uint256 tRfi; uint256 tBurn; uint256 tLiquidity; uint256 tCharity; uint256 tDev; uint256 tMarketing; } event FeesChanged(); event UpdatedRouter(address oldRouter, address newRouter); modifier lockTheSwap { swapping = true; _; swapping = false; } constructor () { IRouter _router = IRouter(routerAddress); address _pair = IFactory(_router.factory()) .createPair(address(this), _router.WETH()); router = _router; pair = _pair; excludeFromReward(pair); excludeFromReward(deadAddress); _rOwned[owner()] = _rTotal; _isExcludedFromFee[owner()] = true; _isExcludedFromFee[address(this)] = true; _isExcludedFromFee[charityAddress]=true; _isExcludedFromFee[devAddress]=true; _isExcludedFromFee[marketingAddress]=true; _isExcludedFromFee[deadAddress] = true; _isTradingState = true; swapEnabled = true; emit Transfer(address(0), owner(), _tTotal); } function name() public pure returns (string memory) { return _name; } function symbol() public pure returns (string memory) { return _symbol; } function decimals() public pure returns (uint8) { return _decimals; } function totalSupply() public view override returns (uint256) { return _tTotal; } function balanceOf(address account) public view override returns (uint256) { if (_isExcluded[account]) return _tOwned[account]; return tokenFromReflection(_rOwned[account]); } function transfer(address recipient, uint256 amount) public override returns (bool) { require(_isTradingState == true, "Trading is currently disabled."); _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) public view override returns (uint256) { return _allowances[owner][spender]; } function tradingEnabled() public view returns (bool) { return _isTradingState; } function approve(address spender, uint256 amount) public override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) { _transfer(sender, recipient, amount); uint256 currentAllowance = _allowances[sender][_msgSender()]; require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance"); _approve(sender, _msgSender(), currentAllowance - amount); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { uint256 currentAllowance = _allowances[_msgSender()][spender]; require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); _approve(_msgSender(), spender, currentAllowance - subtractedValue); return true; } function isExcludedFromReward(address account) public view returns (bool) { return _isExcluded[account]; } function reflectionFromToken(uint256 tAmount, bool deductTransferRfi) public view returns(uint256) { require(tAmount <= _tTotal, "Amount must be less than supply"); if (!deductTransferRfi) { valuesFromGetValues memory s = _getValues(tAmount, true); return s.rAmount; } else { valuesFromGetValues memory s = _getValues(tAmount, true); return s.rTransferAmount; } } function tokenFromReflection(uint256 rAmount) public view returns(uint256) { require(rAmount <= _rTotal, "Amount must be less than total reflections"); uint256 currentRate = _getRate(); return rAmount/currentRate; } function excludeFromReward(address account) public onlyOwner() { require(!_isExcluded[account], "Account is already excluded"); if(_rOwned[account] > 0) { _tOwned[account] = tokenFromReflection(_rOwned[account]); } _isExcluded[account] = true; _excluded.push(account); } function includeInReward(address account) external onlyOwner() { require(_isExcluded[account], "Account is not excluded"); for (uint256 i = 0; i < _excluded.length; i++) { if (_excluded[i] == account) { _excluded[i] = _excluded[_excluded.length - 1]; _tOwned[account] = 0; _isExcluded[account] = false; _excluded.pop(); break; } } } function excludeFromFee(address account) public onlyOwner { _isExcludedFromFee[account] = true; } function includeInFee(address account) public onlyOwner { _isExcludedFromFee[account] = false; } function isExcludedFromFee(address account) public view returns(bool) { return _isExcludedFromFee[account]; } function setTaxes(uint256 _rfi, uint256 _charity, uint256 _dev, uint256 _marketing, uint256 _liquidity, uint256 _burn) public onlyOwner { taxes.rfi = _rfi; taxes.charity = _charity; taxes.dev = _dev; taxes.marketing = _marketing; taxes.liquidity = _liquidity; taxes.burn = _burn; emit FeesChanged(); } function _reflectRfi(uint256 rRfi, uint256 tRfi) private { _rTotal -=rRfi; totFeesPaid.rfi +=tRfi; } function _takeLiquidity(uint256 rLiquidity, uint256 tLiquidity) private { totFeesPaid.liquidity +=tLiquidity; if(_isExcluded[address(this)]) { _tOwned[address(this)]+=tLiquidity; } _rOwned[address(this)] +=rLiquidity; } function _takeDev(uint256 rDev, uint256 tDev) private { totFeesPaid.dev +=tDev; if(_isExcluded[address(this)]) { _tOwned[address(this)]+=tDev; } _rOwned[address(this)] +=rDev; } function _takeMarketing(uint256 rMarketing, uint256 tMarketing) private { totFeesPaid.marketing +=tMarketing; if(_isExcluded[address(this)]) { _tOwned[address(this)]+=tMarketing; } _rOwned[address(this)] +=rMarketing; } function _takeCharity(uint256 rCharity, uint256 tCharity) private { totFeesPaid.charity +=tCharity; if(_isExcluded[address(this)]) { _tOwned[address(this)]+=tCharity; } _rOwned[address(this)] +=rCharity; } function _takeBurn(uint256 rBurn, uint256 tBurn) private{ totFeesPaid.burn +=tBurn; if(_isExcluded[deadAddress]) { _tOwned[deadAddress]+=tBurn; } _rOwned[deadAddress] +=rBurn; } function _getValues(uint256 tAmount, bool takeFee) private view returns (valuesFromGetValues memory to_return) { to_return = _getTValues(tAmount, takeFee); (to_return.rAmount, to_return.rTransferAmount, to_return.rRfi, to_return.rCharity, to_return.rDev, to_return.rMarketing, to_return.rLiquidity, to_return.rBurn) = _getRValues(to_return, tAmount, takeFee, _getRate()); return to_return; } function _getTValues(uint256 tAmount, bool takeFee) private view returns (valuesFromGetValues memory s) { if(!takeFee) { s.tTransferAmount = tAmount; return s; } s.tRfi = tAmount*taxes.rfi/100; s.tCharity = tAmount*taxes.charity/100; s.tDev = tAmount*taxes.dev/100; s.tMarketing = tAmount*taxes.marketing/100; s.tLiquidity = tAmount*taxes.liquidity/100; s.tBurn = tAmount*taxes.burn/100; s.tTransferAmount = tAmount-s.tRfi-s.tCharity-s.tDev-s.tMarketing-s.tLiquidity-s.tBurn; return s; } function _getRValues(valuesFromGetValues memory s, uint256 tAmount, bool takeFee, uint256 currentRate) private pure returns (uint256 rAmount, uint256 rTransferAmount, uint256 rRfi, uint256 rCharity, uint256 rDev, uint256 rMarketing, uint256 rLiquidity, uint256 rBurn) { rAmount = tAmount*currentRate; if(!takeFee) { return(rAmount, rAmount, 0,0,0,0,0,0); } rRfi = s.tRfi*currentRate; rCharity = s.tCharity*currentRate; rDev = s.tDev*currentRate; rMarketing = s.tMarketing*currentRate; rLiquidity = s.tLiquidity*currentRate; rBurn = s.rBurn*currentRate; rTransferAmount = rAmount-rRfi-rCharity-rDev-rMarketing-rLiquidity-rBurn; return (rAmount, rTransferAmount, rRfi, rCharity, rDev, rMarketing, rLiquidity, rBurn); } function _getRate() private view returns(uint256) { (uint256 rSupply, uint256 tSupply) = _getCurrentSupply(); return rSupply/tSupply; } function _getCurrentSupply() private view returns(uint256, uint256) { uint256 rSupply = _rTotal; uint256 tSupply = _tTotal; for (uint256 i = 0; i < _excluded.length; i++) { if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal); rSupply = rSupply-_rOwned[_excluded[i]]; tSupply = tSupply-_tOwned[_excluded[i]]; } if (rSupply < _rTotal/_tTotal) return (_rTotal, _tTotal); return (rSupply, tSupply); } function _approve(address owner, address spender, uint256 amount) private { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _transfer(address from, address to, uint256 amount) private { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); require(amount > 0, "Transfer amount must be greater than zero"); require(amount <= balanceOf(from),"You are trying to transfer more than your balance"); require(!_isBot[from] && !_isBot[to], "You are a bot"); if(!_isExcludedFromFee[from] && !_isExcludedFromFee[to] && !swapping){ require(amount <= maxTxAmount ,"Amount is exceeding maxTxAmount"); if(from != pair && coolDownEnabled){ uint256 timePassed = block.timestamp - _lastTrade[from]; require(timePassed > coolDownTime, "You must wait coolDownTime"); _lastTrade[from] = block.timestamp; } if(to != pair && coolDownEnabled){ uint256 timePassed2 = block.timestamp - _lastTrade[to]; require(timePassed2 > coolDownTime, "You must wait coolDownTime"); _lastTrade[to] = block.timestamp; } } bool canSwap = balanceOf(address(this)) >= swapTokensAtAmount; if(!swapping && swapEnabled && canSwap && from != pair && !_isExcludedFromFee[from] && !_isExcludedFromFee[to]){ swapAndLiquify(swapTokensAtAmount); } _tokenTransfer(from, to, amount, !(_isExcludedFromFee[from] || _isExcludedFromFee[to])); } //this method is responsible for taking all fee, if takeFee is true function _tokenTransfer(address sender, address recipient, uint256 tAmount, bool takeFee) private { valuesFromGetValues memory s = _getValues(tAmount, takeFee); if (_isExcluded[sender] ) { //from excluded _tOwned[sender] = _tOwned[sender]-tAmount; } if (_isExcluded[recipient]) { //to excluded _tOwned[recipient] = _tOwned[recipient]+s.tTransferAmount; } _rOwned[sender] = _rOwned[sender]-s.rAmount; _rOwned[recipient] = _rOwned[recipient]+s.rTransferAmount; _reflectRfi(s.rRfi, s.tRfi); _takeLiquidity(s.rLiquidity,s.tLiquidity); _takeDev(s.rDev, s.tDev); _takeMarketing(s.rMarketing, s.tMarketing); _takeCharity(s.rCharity, s.tCharity); _takeBurn(s.rBurn, s.tBurn); emit Transfer(sender, deadAddress, s.tBurn); emit Transfer(sender, recipient, s.tTransferAmount); emit Transfer(sender, address(this), s.tLiquidity + s.tCharity + s.tDev + s.tMarketing); } function swapAndLiquify(uint256 tokens) private lockTheSwap{ // Split the contract balance into halves uint256 denominator = (taxes.liquidity + taxes.dev + taxes.charity + taxes.marketing ) * 2; uint256 tokensToAddLiquidityWith = tokens * taxes.liquidity / denominator; uint256 toSwap = tokens - tokensToAddLiquidityWith; uint256 initialBalance = address(this).balance; swapTokensForETH(toSwap); uint256 deltaBalance = address(this).balance - initialBalance; uint256 unitBalance= deltaBalance / (denominator - taxes.liquidity); uint256 ethToAddLiquidityWith = unitBalance * taxes.liquidity; if(ethToAddLiquidityWith > 0){ // Add liquidity to uniswap addLiquidity(tokensToAddLiquidityWith, ethToAddLiquidityWith); } uint256 devAmt = unitBalance * 2 * taxes.charity; if(devAmt > 0){ payable(devAddress).transfer(devAmt); } uint256 charityAmt = unitBalance * 2 * taxes.dev; if(charityAmt > 0){ payable(charityAddress).transfer(charityAmt); } uint256 marketingAmt = unitBalance * 2 * taxes.marketing; if(marketingAmt > 0){ payable(marketingAddress).transfer(marketingAmt); } } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { // approve token transfer to cover all possible scenarios _approve(address(this), address(router), tokenAmount); // add the liquidity router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable owner(), block.timestamp ); } function swapTokensForETH(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = router.WETH(); _approve(address(this), address(router), tokenAmount); // make the swap router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function updatedevWallet(address newWallet) external onlyOwner{ require(devAddress != newWallet ,'Wallet already set'); devAddress = newWallet; _isExcludedFromFee[devAddress]; } function updatecharityWallet(address newWallet) external onlyOwner{ require(charityAddress != newWallet ,'Wallet already set'); charityAddress = newWallet; _isExcludedFromFee[charityAddress]; } function updatemarketingWallet(address newWallet) external onlyOwner{ require(marketingAddress != newWallet ,'Wallet already set'); marketingAddress = newWallet; _isExcludedFromFee[marketingAddress]; } function updatMaxTxAmt(uint256 amount) external onlyOwner{ maxTxAmount = amount * 10 **_decimals; } function updateSwapTokensAtAmount(uint256 amount) external onlyOwner{ swapTokensAtAmount = amount * 10 **_decimals; } function updateSwapEnabled(bool _enabled) external onlyOwner{ swapEnabled = _enabled; } function updateCoolDownSettings(bool _enabled, uint256 _timeInSeconds) external onlyOwner{ coolDownEnabled = _enabled; coolDownTime = _timeInSeconds * 1 seconds; } function setAntibot(address account, bool state) external onlyOwner{ require(_isBot[account] != state, 'Value already set'); _isBot[account] = state; } function bulkAntiBot(address[] memory accounts, bool state) external onlyOwner{ for(uint256 i = 0; i < accounts.length; i++){ _isBot[accounts[i]] = state; } } function updateRouterAndPair(address newRouter, address newPair) external onlyOwner{ router = IRouter(newRouter); pair = newPair; } function isBot(address account) public view returns(bool){ return _isBot[account]; } //Use this in case ETH are sent to the contract by mistake function rescueETH(uint256 weiAmount) external onlyOwner{ require(address(this).balance >= weiAmount, "insufficient ETH balance"); payable(msg.sender).transfer(weiAmount); } // Function to allow admin to claim *other* BEP20 tokens sent to this contract (by mistake) // Owner cannot transfer out cakecoin from this smart contract function rescueAnyERC20Tokens(address _tokenAddr, address _to, uint _amount) public onlyOwner { IERC20(_tokenAddr).transfer(_to, _amount); } function setTradingState(bool _state) external onlyOwner{ _isTradingState = _state; } receive() external payable{ } }
{ "remappings": [], "optimizer": { "enabled": true, "runs": 200 }, "evmVersion": "berlin", "libraries": {}, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } } }
Contract Security Audit
- InterFi- Jan 18th, 2022 - Security Audit Report
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[],"name":"FeesChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldRouter","type":"address"},{"indexed":false,"internalType":"address","name":"newRouter","type":"address"}],"name":"UpdatedRouter","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_lastTrade","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"state","type":"bool"}],"name":"bulkAntiBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"charityAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"coolDownEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"coolDownTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferRfi","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddr","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"rescueAnyERC20Tokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"weiAmount","type":"uint256"}],"name":"rescueETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"state","type":"bool"}],"name":"setAntibot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rfi","type":"uint256"},{"internalType":"uint256","name":"_charity","type":"uint256"},{"internalType":"uint256","name":"_dev","type":"uint256"},{"internalType":"uint256","name":"_marketing","type":"uint256"},{"internalType":"uint256","name":"_liquidity","type":"uint256"},{"internalType":"uint256","name":"_burn","type":"uint256"}],"name":"setTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setTradingState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"taxes","outputs":[{"internalType":"uint256","name":"rfi","type":"uint256"},{"internalType":"uint256","name":"burn","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"charity","type":"uint256"},{"internalType":"uint256","name":"dev","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totFeesPaid","outputs":[{"internalType":"uint256","name":"rfi","type":"uint256"},{"internalType":"uint256","name":"burn","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"charity","type":"uint256"},{"internalType":"uint256","name":"dev","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"updatMaxTxAmt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_timeInSeconds","type":"uint256"}],"name":"updateCoolDownSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"},{"internalType":"address","name":"newPair","type":"address"}],"name":"updateRouterAndPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updatecharityWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updatedevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updatemarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6080604052620000126009600a62000a54565b6200002690670de0b6b3a764000062000a65565b600a819055620000399060001962000a9d565b620000479060001962000ab4565b600b55620000586009600a62000a54565b6200006790620f424062000a65565b600c55620000786009600a62000a54565b6200008b9066071afd498d000062000a65565b600d55600e805460ff19908116600190811790925560108054909116821790556045601155601280546001600160a01b031990811673c56d6d2ae78102c9d7a72bcab720ca1cae97b2cc1790915560138054821673b3aae54be35e8044c8044f5488aaf3861279328b1790556014805482167345b495b912c33db96d57b18fbb5f4a439573d77017905560158054909116737a250d5630b4cf539739df2c5dacb4c659f2488d1790556040805160c0810182528281526020810183905290810182905260036060820181905260808201819052600260a0909201829052601683905560178390556018929092556019829055601a91909155601b553480156200019357600080fd5b506200019f3362000506565b6015546040805163c45a015560e01b815290516001600160a01b0390921691600091839163c45a015591600480820192602092909190829003018186803b158015620001ea57600080fd5b505afa158015620001ff573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000225919062000ace565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200026e57600080fd5b505afa15801562000283573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002a9919062000ace565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015620002f257600080fd5b505af115801562000307573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200032d919062000ace565b600880546001600160a01b03808616620100000262010000600160b01b031990921691909117909155600980549183166001600160a01b0319909216821790559091506200037b9062000556565b6200038861dead62000556565b600b5460016000620003a26000546001600160a01b031690565b6001600160a01b03166001600160a01b0316815260200190815260200160002081905550600160046000620003dc620006e460201b60201c565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905530815260049093528183208054851660019081179091556013548216845282842080548616821790556012548216845282842080548616821790556014549091168352908220805484168217905561dead9091527f42c63635470f1fb1d6d4b6441c413cb435b1ebb6fedd1896dd5e25d1399147dd8054831682179055600e805483168217905560088054909216179055620004ae6000546001600160a01b031690565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600a54604051620004f691815260200190565b60405180910390a3505062000b44565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000546001600160a01b03163314620005b65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6001600160a01b03811660009081526005602052604090205460ff1615620006215760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401620005ad565b6001600160a01b038116600090815260016020526040902054156200067e576001600160a01b0381166000908152600160205260409020546200066490620006f3565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556007805491820181559091527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6880180546001600160a01b0319169091179055565b6000546001600160a01b031690565b6000600b548211156200075c5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401620005ad565b6000620007686200077d565b905062000776818462000af9565b9392505050565b600080806200078b620007a3565b90925090506200079c818362000af9565b9250505090565b600b54600a546000918291825b6007548110156200090b57826001600060078481548110620007d657620007d662000b10565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806200084557508160026000600784815481106200081e576200081e62000b10565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156200085c57600b54600a54945094505050509091565b600160006007838154811062000876576200087662000b10565b60009182526020808320909101546001600160a01b03168352820192909252604001902054620008a7908462000ab4565b92506002600060078381548110620008c357620008c362000b10565b60009182526020808320909101546001600160a01b03168352820192909252604001902054620008f4908362000ab4565b915080620009028162000b26565b915050620007b0565b50600a54600b546200091e919062000af9565b8210156200093657600b54600a549350935050509091565b90939092509050565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620009965781600019048211156200097a576200097a6200093f565b808516156200098857918102915b93841c93908002906200095a565b509250929050565b600082620009af5750600162000a4e565b81620009be5750600062000a4e565b8160018114620009d75760028114620009e25762000a02565b600191505062000a4e565b60ff841115620009f657620009f66200093f565b50506001821b62000a4e565b5060208310610133831016604e8410600b841016171562000a27575081810a62000a4e565b62000a33838362000955565b806000190482111562000a4a5762000a4a6200093f565b0290505b92915050565b60006200077660ff8416836200099e565b600081600019048311821515161562000a825762000a826200093f565b500290565b634e487b7160e01b600052601260045260246000fd5b60008262000aaf5762000aaf62000a87565b500690565b60008282101562000ac95762000ac96200093f565b500390565b60006020828403121562000ae157600080fd5b81516001600160a01b03811681146200077657600080fd5b60008262000b0b5762000b0b62000a87565b500490565b634e487b7160e01b600052603260045260246000fd5b600060001982141562000b3d5762000b3d6200093f565b5060010190565b6133748062000b546000396000f3fe6080604052600436106103035760003560e01c80638c0b5e2211610190578063bff78169116100dc578063e2f4560511610095578063f2fde38b1161006f578063f2fde38b146109e1578063f887ea4014610a01578063f965aa1d14610a27578063fc17044114610a4757600080fd5b8063e2f4560514610991578063ea2f0b37146109a7578063ee36e359146109c757600080fd5b8063bff78169146108b5578063d257b34f146108d5578063d2ce0db2146108f5578063d5ccb8ee1461090b578063dd62ed3e1461092b578063e11655451461097157600080fd5b8063a457c2d711610149578063a8aa1b3111610123578063a8aa1b3114610835578063a9059cbb14610855578063afcf2fc414610875578063b31470a41461089557600080fd5b8063a457c2d7146107c8578063a5ece941146107e8578063a87859f61461080857600080fd5b80638c0b5e22146106fc5780638da5cb5b14610712578063924de9b71461073057806395d89b41146107505780639ba5e4d51461077d5780639e252f00146107a857600080fd5b806340b28c2f1161024f5780635342acb411610208578063715018a6116101e2578063715018a614610636578063728f8eea1461064b57806388f82020146106a35780638c0ae3df146106dc57600080fd5b80635342acb4146105c35780636ddd1713146105fc57806370a082311461061657600080fd5b806340b28c2f1461050b578063437823ec1461052b5780634549b0391461054b57806349244cb01461056b5780634ada218b1461058b57806352390c02146105a357600080fd5b806327c8f835116102bc5780633685d419116102965780633685d4191461047257806339509351146104925780633ad10ef6146104b25780633bbac579146104d257600080fd5b806327c8f835146104085780632d83811914610436578063313ce5671461045657600080fd5b806304d4c9901461030f57806306fdde0314610331578063095ea7b3146103795780630d65df9b146103a957806318160ddd146103c957806323b872dd146103e857600080fd5b3661030a57005b600080fd5b34801561031b57600080fd5b5061032f61032a366004612d17565b610a67565b005b34801561033d57600080fd5b5060408051808201909152600d81526c26b2b234902a37b5b2b7102b1960991b60208201525b6040516103709190612d5a565b60405180910390f35b34801561038557600080fd5b50610399610394366004612dd4565b610ae9565b6040519015158152602001610370565b3480156103b557600080fd5b5061032f6103c4366004612e00565b610b00565b3480156103d557600080fd5b50600a545b604051908152602001610370565b3480156103f457600080fd5b50610399610403366004612e00565b610bb2565b34801561041457600080fd5b5061041e61dead81565b6040516001600160a01b039091168152602001610370565b34801561044257600080fd5b506103da610451366004612e41565b610c63565b34801561046257600080fd5b5060405160098152602001610370565b34801561047e57600080fd5b5061032f61048d366004612e5a565b610ce7565b34801561049e57600080fd5b506103996104ad366004612dd4565b610e9e565b3480156104be57600080fd5b5060125461041e906001600160a01b031681565b3480156104de57600080fd5b506103996104ed366004612e5a565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561051757600080fd5b5061032f610526366004612e77565b610ed5565b34801561053757600080fd5b5061032f610546366004612e5a565b610f39565b34801561055757600080fd5b506103da610566366004612ec9565b610f87565b34801561057757600080fd5b5061032f610586366004612e5a565b611011565b34801561059757600080fd5b50600e5460ff16610399565b3480156105af57600080fd5b5061032f6105be366004612e5a565b611092565b3480156105cf57600080fd5b506103996105de366004612e5a565b6001600160a01b031660009081526004602052604090205460ff1690565b34801561060857600080fd5b506008546103999060ff1681565b34801561062257600080fd5b506103da610631366004612e5a565b6111e5565b34801561064257600080fd5b5061032f611244565b34801561065757600080fd5b50601654601754601854601954601a54601b5461067695949392919086565b604080519687526020870195909552938501929092526060840152608083015260a082015260c001610370565b3480156106af57600080fd5b506103996106be366004612e5a565b6001600160a01b031660009081526005602052604090205460ff1690565b3480156106e857600080fd5b5061032f6106f7366004612eee565b61127a565b34801561070857600080fd5b506103da600d5481565b34801561071e57600080fd5b506000546001600160a01b031661041e565b34801561073c57600080fd5b5061032f61074b366004612f0c565b6112c4565b34801561075c57600080fd5b506040805180820190915260048152634d45444960e01b6020820152610363565b34801561078957600080fd5b50601c54601d54601e54601f5460205460215461067695949392919086565b3480156107b457600080fd5b5061032f6107c3366004612e41565b611301565b3480156107d457600080fd5b506103996107e3366004612dd4565b6113a8565b3480156107f457600080fd5b5060145461041e906001600160a01b031681565b34801561081457600080fd5b506103da610823366004612e5a565b600f6020526000908152604090205481565b34801561084157600080fd5b5060095461041e906001600160a01b031681565b34801561086157600080fd5b50610399610870366004612dd4565b611443565b34801561088157600080fd5b5060135461041e906001600160a01b031681565b3480156108a157600080fd5b5061032f6108b0366004612f3f565b6114a8565b3480156108c157600080fd5b5061032f6108d0366004612e5a565b61153e565b3480156108e157600080fd5b5061032f6108f0366004612e41565b6115bf565b34801561090157600080fd5b506103da60115481565b34801561091757600080fd5b5061032f610926366004612f0c565b611605565b34801561093757600080fd5b506103da610946366004612e77565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b34801561097d57600080fd5b5061032f61098c366004613016565b611642565b34801561099d57600080fd5b506103da600c5481565b3480156109b357600080fd5b5061032f6109c2366004612e5a565b6116fa565b3480156109d357600080fd5b506010546103999060ff1681565b3480156109ed57600080fd5b5061032f6109fc366004612e5a565b611745565b348015610a0d57600080fd5b5060085461041e906201000090046001600160a01b031681565b348015610a3357600080fd5b5061032f610a42366004612e41565b6117e0565b348015610a5357600080fd5b5061032f610a62366004612e5a565b611826565b6000546001600160a01b03163314610a9a5760405162461bcd60e51b8152600401610a9190613044565b60405180910390fd5b60168690556019859055601a849055601b839055601882905560178190556040517f846206d6c3449ac0b05841dfb88bf28b55aef00f96152490c69c96238048de1590600090a1505050505050565b6000610af63384846118a7565b5060015b92915050565b6000546001600160a01b03163314610b2a5760405162461bcd60e51b8152600401610a9190613044565b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb90604401602060405180830381600087803b158015610b7457600080fd5b505af1158015610b88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bac9190613079565b50505050565b6000610bbf8484846119cb565b6001600160a01b038416600090815260036020908152604080832033845290915290205482811015610c445760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610a91565b610c588533610c5386856130ac565b6118a7565b506001949350505050565b6000600b54821115610cca5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610a91565b6000610cd4611ef9565b9050610ce081846130c3565b9392505050565b6000546001600160a01b03163314610d115760405162461bcd60e51b8152600401610a9190613044565b6001600160a01b03811660009081526005602052604090205460ff16610d795760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610a91565b60005b600754811015610e9a57816001600160a01b031660078281548110610da357610da36130e5565b6000918252602090912001546001600160a01b03161415610e885760078054610dce906001906130ac565b81548110610dde57610dde6130e5565b600091825260209091200154600780546001600160a01b039092169183908110610e0a57610e0a6130e5565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff191690556007805480610e6257610e626130fb565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610e9281613111565b915050610d7c565b5050565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610af6918590610c5390869061312c565b6000546001600160a01b03163314610eff5760405162461bcd60e51b8152600401610a9190613044565b6008805462010000600160b01b031916620100006001600160a01b0394851602179055600980546001600160a01b03191691909216179055565b6000546001600160a01b03163314610f635760405162461bcd60e51b8152600401610a9190613044565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b6000600a54831115610fdb5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610a91565b81610ff7576000610fed846001611f1c565b519150610afa9050565b6000611004846001611f1c565b602001519150610afa9050565b6000546001600160a01b0316331461103b5760405162461bcd60e51b8152600401610a9190613044565b6013546001600160a01b03828116911614156110695760405162461bcd60e51b8152600401610a9190613144565b601380546001600160a01b039092166001600160a01b0319909216821790556000526004602052565b6000546001600160a01b031633146110bc5760405162461bcd60e51b8152600401610a9190613044565b6001600160a01b03811660009081526005602052604090205460ff16156111255760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610a91565b6001600160a01b0381166000908152600160205260409020541561117f576001600160a01b03811660009081526001602052604090205461116590610c63565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556007805491820181559091527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6880180546001600160a01b0319169091179055565b6001600160a01b03811660009081526005602052604081205460ff161561122257506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610afa90610c63565b6000546001600160a01b0316331461126e5760405162461bcd60e51b8152600401610a9190613044565b6112786000611f6e565b565b6000546001600160a01b031633146112a45760405162461bcd60e51b8152600401610a9190613044565b6010805460ff19168315151790556112bd816001613170565b6011555050565b6000546001600160a01b031633146112ee5760405162461bcd60e51b8152600401610a9190613044565b6008805460ff1916911515919091179055565b6000546001600160a01b0316331461132b5760405162461bcd60e51b8152600401610a9190613044565b8047101561137b5760405162461bcd60e51b815260206004820152601860248201527f696e73756666696369656e74204554482062616c616e636500000000000000006044820152606401610a91565b604051339082156108fc029083906000818181858888f19350505050158015610e9a573d6000803e3d6000fd5b3360009081526003602090815260408083206001600160a01b03861684529091528120548281101561142a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610a91565b6114393385610c5386856130ac565b5060019392505050565b600e5460009060ff16151560011461149d5760405162461bcd60e51b815260206004820152601e60248201527f54726164696e672069732063757272656e746c792064697361626c65642e00006044820152606401610a91565b610af63384846119cb565b6000546001600160a01b031633146114d25760405162461bcd60e51b8152600401610a9190613044565b60005b82518110156115395781600660008584815181106114f5576114f56130e5565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790558061153181613111565b9150506114d5565b505050565b6000546001600160a01b031633146115685760405162461bcd60e51b8152600401610a9190613044565b6014546001600160a01b03828116911614156115965760405162461bcd60e51b8152600401610a9190613144565b601480546001600160a01b039092166001600160a01b0319909216821790556000526004602052565b6000546001600160a01b031633146115e95760405162461bcd60e51b8152600401610a9190613044565b6115f56009600a613273565b6115ff9082613170565b600c5550565b6000546001600160a01b0316331461162f5760405162461bcd60e51b8152600401610a9190613044565b600e805460ff1916911515919091179055565b6000546001600160a01b0316331461166c5760405162461bcd60e51b8152600401610a9190613044565b6001600160a01b03821660009081526006602052604090205460ff16151581151514156116cf5760405162461bcd60e51b815260206004820152601160248201527015985b1d5948185b1c9958591e481cd95d607a1b6044820152606401610a91565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146117245760405162461bcd60e51b8152600401610a9190613044565b6001600160a01b03166000908152600460205260409020805460ff19169055565b6000546001600160a01b0316331461176f5760405162461bcd60e51b8152600401610a9190613044565b6001600160a01b0381166117d45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a91565b6117dd81611f6e565b50565b6000546001600160a01b0316331461180a5760405162461bcd60e51b8152600401610a9190613044565b6118166009600a613273565b6118209082613170565b600d5550565b6000546001600160a01b031633146118505760405162461bcd60e51b8152600401610a9190613044565b6012546001600160a01b038281169116141561187e5760405162461bcd60e51b8152600401610a9190613144565b601280546001600160a01b039092166001600160a01b0319909216821790556000526004602052565b6001600160a01b0383166119095760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a91565b6001600160a01b03821661196a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a91565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611a2f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610a91565b6001600160a01b038216611a915760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610a91565b60008111611af35760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610a91565b611afc836111e5565b811115611b655760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b6064820152608401610a91565b6001600160a01b03831660009081526006602052604090205460ff16158015611ba757506001600160a01b03821660009081526006602052604090205460ff16155b611be35760405162461bcd60e51b815260206004820152600d60248201526c165bdd48185c99481848189bdd609a1b6044820152606401610a91565b6001600160a01b03831660009081526004602052604090205460ff16158015611c2557506001600160a01b03821660009081526004602052604090205460ff16155b8015611c395750600854610100900460ff16155b15611e0057600d54811115611c905760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e7420697320657863656564696e67206d61785478416d6f756e74006044820152606401610a91565b6009546001600160a01b03848116911614801590611cb0575060105460ff165b15611d48576001600160a01b0383166000908152600f6020526040812054611cd890426130ac565b90506011548111611d2b5760405162461bcd60e51b815260206004820152601a60248201527f596f75206d757374207761697420636f6f6c446f776e54696d650000000000006044820152606401610a91565b506001600160a01b0383166000908152600f602052604090204290555b6009546001600160a01b03838116911614801590611d68575060105460ff165b15611e00576001600160a01b0382166000908152600f6020526040812054611d9090426130ac565b90506011548111611de35760405162461bcd60e51b815260206004820152601a60248201527f596f75206d757374207761697420636f6f6c446f776e54696d650000000000006044820152606401610a91565b506001600160a01b0382166000908152600f602052604090204290555b6000600c54611e0e306111e5565b6008549111159150610100900460ff16158015611e2d575060085460ff165b8015611e365750805b8015611e5057506009546001600160a01b03858116911614155b8015611e7557506001600160a01b03841660009081526004602052604090205460ff16155b8015611e9a57506001600160a01b03831660009081526004602052604090205460ff16155b15611eaa57611eaa600c54611fbe565b6001600160a01b038416600090815260046020526040902054610bac9085908590859060ff1680611ef357506001600160a01b03871660009081526004602052604090205460ff165b156121c3565b6000806000611f066124aa565b9092509050611f1581836130c3565b9250505090565b611f24612ca1565b611f2e838361262d565b9050611f43818484611f3e611ef9565b61276f565b6060890152608088015260e087015260c086015260a085015260408401526020830152815292915050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6008805461ff001916610100179055601b54601954601a546018546000939291611fe79161312c565b611ff1919061312c565b611ffb919061312c565b612006906002613170565b90506000816016600201548461201c9190613170565b61202691906130c3565b9050600061203482856130ac565b90504761204082612867565b600061204c82476130ac565b60185490915060009061205f90876130ac565b61206990836130c3565b60185490915060009061207c9083613170565b9050801561208e5761208e86826129f5565b60195460009061209f846002613170565b6120a99190613170565b905080156120ed576012546040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156120eb573d6000803e3d6000fd5b505b601a546000906120fe856002613170565b6121089190613170565b9050801561214c576013546040516001600160a01b039091169082156108fc029083906000818181858888f1935050505015801561214a573d6000803e3d6000fd5b505b601b5460009061215d866002613170565b6121679190613170565b905080156121ab576014546040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156121a9573d6000803e3d6000fd5b505b50506008805461ff0019169055505050505050505050565b60006121cf8383611f1c565b6001600160a01b03861660009081526005602052604090205490915060ff1615612231576001600160a01b0385166000908152600260205260409020546122179084906130ac565b6001600160a01b0386166000908152600260205260409020555b6001600160a01b03841660009081526005602052604090205460ff1615612295576101008101516001600160a01b03851660009081526002602052604090205461227b919061312c565b6001600160a01b0385166000908152600260205260409020555b80516001600160a01b0386166000908152600160205260409020546122ba91906130ac565b6001600160a01b03808716600090815260016020908152604080832094909455840151918716815291909120546122f1919061312c565b6001600160a01b03851660009081526001602052604090819020919091558101516101208201516123229190612ae6565b6123358160800151826101600151612b1b565b6123488160c00151826101a00151612b91565b61235b8160e00151826101c00151612ba6565b61236e8160a00151826101800151612bbb565b6123818160600151826101400151612bd0565b61dead6001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8361014001516040516123cd91815260200190565b60405180910390a3836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83610100015160405161241f91815260200190565b60405180910390a3306001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836101c00151846101a0015185610180015186610160015161247e919061312c565b612488919061312c565b612492919061312c565b60405190815260200160405180910390a35050505050565b600b54600a546000918291825b6007548110156125fc578260016000600784815481106124d9576124d96130e5565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612544575081600260006007848154811061251d5761251d6130e5565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561255a57600b54600a54945094505050509091565b6001600060078381548110612571576125716130e5565b60009182526020808320909101546001600160a01b031683528201929092526040019020546125a090846130ac565b925060026000600783815481106125b9576125b96130e5565b60009182526020808320909101546001600160a01b031683528201929092526040019020546125e890836130ac565b9150806125f481613111565b9150506124b7565b50600a54600b5461260d91906130c3565b82101561262457600b54600a549350935050509091565b90939092509050565b612635612ca1565b81612647576101008101839052610afa565b6016546064906126579085613170565b61266191906130c3565b6101208201526019546064906126779085613170565b61268191906130c3565b610180820152601a546064906126979085613170565b6126a191906130c3565b6101a0820152601b546064906126b79085613170565b6126c191906130c3565b6101c08201526018546064906126d79085613170565b6126e191906130c3565b6101608201526017546064906126f79085613170565b61270191906130c3565b61014082018190526101608201516101c08301516101a084015161018085015161012086015161273190896130ac565b61273b91906130ac565b61274591906130ac565b61274f91906130ac565b61275991906130ac565b61276391906130ac565b61010082015292915050565b600080808080808080612782898c613170565b9750896127a357508695506000945084935083925082915081905080612858565b888c61012001516127b49190613170565b9550888c61018001516127c79190613170565b9450888c6101a001516127da9190613170565b9350888c6101c001516127ed9190613170565b9250888c61016001516128009190613170565b9150888c606001516128129190613170565b905080828486886128238b8e6130ac565b61282d91906130ac565b61283791906130ac565b61284191906130ac565b61284b91906130ac565b61285591906130ac565b96505b94995094995094999196509450565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061289c5761289c6130e5565b60200260200101906001600160a01b031690816001600160a01b031681525050600860029054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561290a57600080fd5b505afa15801561291e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129429190613282565b81600181518110612955576129556130e5565b6001600160a01b03928316602091820292909201015260085461298191309162010000900416846118a7565b60085460405163791ac94760e01b8152620100009091046001600160a01b03169063791ac947906129bf90859060009086903090429060040161329f565b600060405180830381600087803b1580156129d957600080fd5b505af11580156129ed573d6000803e3d6000fd5b505050505050565b600854612a139030906201000090046001600160a01b0316846118a7565b6008546001600160a01b03620100009091041663f305d719823085600080612a436000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b158015612aa657600080fd5b505af1158015612aba573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612adf9190613310565b5050505050565b81600b6000828254612af891906130ac565b9091555050601c8054829190600090612b1290849061312c565b90915550505050565b80601c6002016000828254612b30919061312c565b90915550503060009081526005602052604090205460ff1615612b72573060009081526002602052604081208054839290612b6c90849061312c565b90915550505b3060009081526001602052604081208054849290612b1290849061312c565b80601c6004016000828254612b30919061312c565b80601c6005016000828254612b30919061312c565b80601c6003016000828254612b30919061312c565b80601c6001016000828254612be5919061312c565b909155505061dead60005260056020527f7d509c07f0d4edcc2dd1b53aae68677132eb562dcba78e36381b63ccaf66e6ba5460ff1615612c635761dead600090815260026020527f6a9609baa168169acaea398c4407efea4be641bb08e21e88806d9836fd9333cc8054839290612c5d90849061312c565b90915550505b61dead600090815260016020527fb34209a263f6c38fe55f099e9e70f9d67e93982480ff3234a5e0108028ad164d8054849290612b1290849061312c565b604051806101e001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b60008060008060008060c08789031215612d3057600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b600060208083528351808285015260005b81811015612d8757858101830151858201604001528201612d6b565b81811115612d99576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b03811681146117dd57600080fd5b8035612dcf81612daf565b919050565b60008060408385031215612de757600080fd5b8235612df281612daf565b946020939093013593505050565b600080600060608486031215612e1557600080fd5b8335612e2081612daf565b92506020840135612e3081612daf565b929592945050506040919091013590565b600060208284031215612e5357600080fd5b5035919050565b600060208284031215612e6c57600080fd5b8135610ce081612daf565b60008060408385031215612e8a57600080fd5b8235612e9581612daf565b91506020830135612ea581612daf565b809150509250929050565b80151581146117dd57600080fd5b8035612dcf81612eb0565b60008060408385031215612edc57600080fd5b823591506020830135612ea581612eb0565b60008060408385031215612f0157600080fd5b8235612df281612eb0565b600060208284031215612f1e57600080fd5b8135610ce081612eb0565b634e487b7160e01b600052604160045260246000fd5b60008060408385031215612f5257600080fd5b823567ffffffffffffffff80821115612f6a57600080fd5b818501915085601f830112612f7e57600080fd5b8135602082821115612f9257612f92612f29565b8160051b604051601f19603f83011681018181108682111715612fb757612fb7612f29565b604052928352818301935084810182019289841115612fd557600080fd5b948201945b83861015612ffa57612feb86612dc4565b85529482019493820193612fda565b96506130099050878201612ebe565b9450505050509250929050565b6000806040838503121561302957600080fd5b823561303481612daf565b91506020830135612ea581612eb0565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60006020828403121561308b57600080fd5b8151610ce081612eb0565b634e487b7160e01b600052601160045260246000fd5b6000828210156130be576130be613096565b500390565b6000826130e057634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b600060001982141561312557613125613096565b5060010190565b6000821982111561313f5761313f613096565b500190565b60208082526012908201527115d85b1b195d08185b1c9958591e481cd95d60721b604082015260600190565b600081600019048311821515161561318a5761318a613096565b500290565b600181815b808511156131ca5781600019048211156131b0576131b0613096565b808516156131bd57918102915b93841c9390800290613194565b509250929050565b6000826131e157506001610afa565b816131ee57506000610afa565b8160018114613204576002811461320e5761322a565b6001915050610afa565b60ff84111561321f5761321f613096565b50506001821b610afa565b5060208310610133831016604e8410600b841016171561324d575081810a610afa565b613257838361318f565b806000190482111561326b5761326b613096565b029392505050565b6000610ce060ff8416836131d2565b60006020828403121561329457600080fd5b8151610ce081612daf565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156132ef5784516001600160a01b0316835293830193918301916001016132ca565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561332557600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220460f4278c074493a99e2d3383abf1beb5fa1cdd1d0d21d8ca5aa0080df4fb5cd64736f6c63430008090033
Deployed Bytecode
0x6080604052600436106103035760003560e01c80638c0b5e2211610190578063bff78169116100dc578063e2f4560511610095578063f2fde38b1161006f578063f2fde38b146109e1578063f887ea4014610a01578063f965aa1d14610a27578063fc17044114610a4757600080fd5b8063e2f4560514610991578063ea2f0b37146109a7578063ee36e359146109c757600080fd5b8063bff78169146108b5578063d257b34f146108d5578063d2ce0db2146108f5578063d5ccb8ee1461090b578063dd62ed3e1461092b578063e11655451461097157600080fd5b8063a457c2d711610149578063a8aa1b3111610123578063a8aa1b3114610835578063a9059cbb14610855578063afcf2fc414610875578063b31470a41461089557600080fd5b8063a457c2d7146107c8578063a5ece941146107e8578063a87859f61461080857600080fd5b80638c0b5e22146106fc5780638da5cb5b14610712578063924de9b71461073057806395d89b41146107505780639ba5e4d51461077d5780639e252f00146107a857600080fd5b806340b28c2f1161024f5780635342acb411610208578063715018a6116101e2578063715018a614610636578063728f8eea1461064b57806388f82020146106a35780638c0ae3df146106dc57600080fd5b80635342acb4146105c35780636ddd1713146105fc57806370a082311461061657600080fd5b806340b28c2f1461050b578063437823ec1461052b5780634549b0391461054b57806349244cb01461056b5780634ada218b1461058b57806352390c02146105a357600080fd5b806327c8f835116102bc5780633685d419116102965780633685d4191461047257806339509351146104925780633ad10ef6146104b25780633bbac579146104d257600080fd5b806327c8f835146104085780632d83811914610436578063313ce5671461045657600080fd5b806304d4c9901461030f57806306fdde0314610331578063095ea7b3146103795780630d65df9b146103a957806318160ddd146103c957806323b872dd146103e857600080fd5b3661030a57005b600080fd5b34801561031b57600080fd5b5061032f61032a366004612d17565b610a67565b005b34801561033d57600080fd5b5060408051808201909152600d81526c26b2b234902a37b5b2b7102b1960991b60208201525b6040516103709190612d5a565b60405180910390f35b34801561038557600080fd5b50610399610394366004612dd4565b610ae9565b6040519015158152602001610370565b3480156103b557600080fd5b5061032f6103c4366004612e00565b610b00565b3480156103d557600080fd5b50600a545b604051908152602001610370565b3480156103f457600080fd5b50610399610403366004612e00565b610bb2565b34801561041457600080fd5b5061041e61dead81565b6040516001600160a01b039091168152602001610370565b34801561044257600080fd5b506103da610451366004612e41565b610c63565b34801561046257600080fd5b5060405160098152602001610370565b34801561047e57600080fd5b5061032f61048d366004612e5a565b610ce7565b34801561049e57600080fd5b506103996104ad366004612dd4565b610e9e565b3480156104be57600080fd5b5060125461041e906001600160a01b031681565b3480156104de57600080fd5b506103996104ed366004612e5a565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561051757600080fd5b5061032f610526366004612e77565b610ed5565b34801561053757600080fd5b5061032f610546366004612e5a565b610f39565b34801561055757600080fd5b506103da610566366004612ec9565b610f87565b34801561057757600080fd5b5061032f610586366004612e5a565b611011565b34801561059757600080fd5b50600e5460ff16610399565b3480156105af57600080fd5b5061032f6105be366004612e5a565b611092565b3480156105cf57600080fd5b506103996105de366004612e5a565b6001600160a01b031660009081526004602052604090205460ff1690565b34801561060857600080fd5b506008546103999060ff1681565b34801561062257600080fd5b506103da610631366004612e5a565b6111e5565b34801561064257600080fd5b5061032f611244565b34801561065757600080fd5b50601654601754601854601954601a54601b5461067695949392919086565b604080519687526020870195909552938501929092526060840152608083015260a082015260c001610370565b3480156106af57600080fd5b506103996106be366004612e5a565b6001600160a01b031660009081526005602052604090205460ff1690565b3480156106e857600080fd5b5061032f6106f7366004612eee565b61127a565b34801561070857600080fd5b506103da600d5481565b34801561071e57600080fd5b506000546001600160a01b031661041e565b34801561073c57600080fd5b5061032f61074b366004612f0c565b6112c4565b34801561075c57600080fd5b506040805180820190915260048152634d45444960e01b6020820152610363565b34801561078957600080fd5b50601c54601d54601e54601f5460205460215461067695949392919086565b3480156107b457600080fd5b5061032f6107c3366004612e41565b611301565b3480156107d457600080fd5b506103996107e3366004612dd4565b6113a8565b3480156107f457600080fd5b5060145461041e906001600160a01b031681565b34801561081457600080fd5b506103da610823366004612e5a565b600f6020526000908152604090205481565b34801561084157600080fd5b5060095461041e906001600160a01b031681565b34801561086157600080fd5b50610399610870366004612dd4565b611443565b34801561088157600080fd5b5060135461041e906001600160a01b031681565b3480156108a157600080fd5b5061032f6108b0366004612f3f565b6114a8565b3480156108c157600080fd5b5061032f6108d0366004612e5a565b61153e565b3480156108e157600080fd5b5061032f6108f0366004612e41565b6115bf565b34801561090157600080fd5b506103da60115481565b34801561091757600080fd5b5061032f610926366004612f0c565b611605565b34801561093757600080fd5b506103da610946366004612e77565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b34801561097d57600080fd5b5061032f61098c366004613016565b611642565b34801561099d57600080fd5b506103da600c5481565b3480156109b357600080fd5b5061032f6109c2366004612e5a565b6116fa565b3480156109d357600080fd5b506010546103999060ff1681565b3480156109ed57600080fd5b5061032f6109fc366004612e5a565b611745565b348015610a0d57600080fd5b5060085461041e906201000090046001600160a01b031681565b348015610a3357600080fd5b5061032f610a42366004612e41565b6117e0565b348015610a5357600080fd5b5061032f610a62366004612e5a565b611826565b6000546001600160a01b03163314610a9a5760405162461bcd60e51b8152600401610a9190613044565b60405180910390fd5b60168690556019859055601a849055601b839055601882905560178190556040517f846206d6c3449ac0b05841dfb88bf28b55aef00f96152490c69c96238048de1590600090a1505050505050565b6000610af63384846118a7565b5060015b92915050565b6000546001600160a01b03163314610b2a5760405162461bcd60e51b8152600401610a9190613044565b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb90604401602060405180830381600087803b158015610b7457600080fd5b505af1158015610b88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bac9190613079565b50505050565b6000610bbf8484846119cb565b6001600160a01b038416600090815260036020908152604080832033845290915290205482811015610c445760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610a91565b610c588533610c5386856130ac565b6118a7565b506001949350505050565b6000600b54821115610cca5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610a91565b6000610cd4611ef9565b9050610ce081846130c3565b9392505050565b6000546001600160a01b03163314610d115760405162461bcd60e51b8152600401610a9190613044565b6001600160a01b03811660009081526005602052604090205460ff16610d795760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610a91565b60005b600754811015610e9a57816001600160a01b031660078281548110610da357610da36130e5565b6000918252602090912001546001600160a01b03161415610e885760078054610dce906001906130ac565b81548110610dde57610dde6130e5565b600091825260209091200154600780546001600160a01b039092169183908110610e0a57610e0a6130e5565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff191690556007805480610e6257610e626130fb565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610e9281613111565b915050610d7c565b5050565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610af6918590610c5390869061312c565b6000546001600160a01b03163314610eff5760405162461bcd60e51b8152600401610a9190613044565b6008805462010000600160b01b031916620100006001600160a01b0394851602179055600980546001600160a01b03191691909216179055565b6000546001600160a01b03163314610f635760405162461bcd60e51b8152600401610a9190613044565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b6000600a54831115610fdb5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610a91565b81610ff7576000610fed846001611f1c565b519150610afa9050565b6000611004846001611f1c565b602001519150610afa9050565b6000546001600160a01b0316331461103b5760405162461bcd60e51b8152600401610a9190613044565b6013546001600160a01b03828116911614156110695760405162461bcd60e51b8152600401610a9190613144565b601380546001600160a01b039092166001600160a01b0319909216821790556000526004602052565b6000546001600160a01b031633146110bc5760405162461bcd60e51b8152600401610a9190613044565b6001600160a01b03811660009081526005602052604090205460ff16156111255760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610a91565b6001600160a01b0381166000908152600160205260409020541561117f576001600160a01b03811660009081526001602052604090205461116590610c63565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556007805491820181559091527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6880180546001600160a01b0319169091179055565b6001600160a01b03811660009081526005602052604081205460ff161561122257506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610afa90610c63565b6000546001600160a01b0316331461126e5760405162461bcd60e51b8152600401610a9190613044565b6112786000611f6e565b565b6000546001600160a01b031633146112a45760405162461bcd60e51b8152600401610a9190613044565b6010805460ff19168315151790556112bd816001613170565b6011555050565b6000546001600160a01b031633146112ee5760405162461bcd60e51b8152600401610a9190613044565b6008805460ff1916911515919091179055565b6000546001600160a01b0316331461132b5760405162461bcd60e51b8152600401610a9190613044565b8047101561137b5760405162461bcd60e51b815260206004820152601860248201527f696e73756666696369656e74204554482062616c616e636500000000000000006044820152606401610a91565b604051339082156108fc029083906000818181858888f19350505050158015610e9a573d6000803e3d6000fd5b3360009081526003602090815260408083206001600160a01b03861684529091528120548281101561142a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610a91565b6114393385610c5386856130ac565b5060019392505050565b600e5460009060ff16151560011461149d5760405162461bcd60e51b815260206004820152601e60248201527f54726164696e672069732063757272656e746c792064697361626c65642e00006044820152606401610a91565b610af63384846119cb565b6000546001600160a01b031633146114d25760405162461bcd60e51b8152600401610a9190613044565b60005b82518110156115395781600660008584815181106114f5576114f56130e5565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790558061153181613111565b9150506114d5565b505050565b6000546001600160a01b031633146115685760405162461bcd60e51b8152600401610a9190613044565b6014546001600160a01b03828116911614156115965760405162461bcd60e51b8152600401610a9190613144565b601480546001600160a01b039092166001600160a01b0319909216821790556000526004602052565b6000546001600160a01b031633146115e95760405162461bcd60e51b8152600401610a9190613044565b6115f56009600a613273565b6115ff9082613170565b600c5550565b6000546001600160a01b0316331461162f5760405162461bcd60e51b8152600401610a9190613044565b600e805460ff1916911515919091179055565b6000546001600160a01b0316331461166c5760405162461bcd60e51b8152600401610a9190613044565b6001600160a01b03821660009081526006602052604090205460ff16151581151514156116cf5760405162461bcd60e51b815260206004820152601160248201527015985b1d5948185b1c9958591e481cd95d607a1b6044820152606401610a91565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146117245760405162461bcd60e51b8152600401610a9190613044565b6001600160a01b03166000908152600460205260409020805460ff19169055565b6000546001600160a01b0316331461176f5760405162461bcd60e51b8152600401610a9190613044565b6001600160a01b0381166117d45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a91565b6117dd81611f6e565b50565b6000546001600160a01b0316331461180a5760405162461bcd60e51b8152600401610a9190613044565b6118166009600a613273565b6118209082613170565b600d5550565b6000546001600160a01b031633146118505760405162461bcd60e51b8152600401610a9190613044565b6012546001600160a01b038281169116141561187e5760405162461bcd60e51b8152600401610a9190613144565b601280546001600160a01b039092166001600160a01b0319909216821790556000526004602052565b6001600160a01b0383166119095760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a91565b6001600160a01b03821661196a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a91565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611a2f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610a91565b6001600160a01b038216611a915760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610a91565b60008111611af35760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610a91565b611afc836111e5565b811115611b655760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b6064820152608401610a91565b6001600160a01b03831660009081526006602052604090205460ff16158015611ba757506001600160a01b03821660009081526006602052604090205460ff16155b611be35760405162461bcd60e51b815260206004820152600d60248201526c165bdd48185c99481848189bdd609a1b6044820152606401610a91565b6001600160a01b03831660009081526004602052604090205460ff16158015611c2557506001600160a01b03821660009081526004602052604090205460ff16155b8015611c395750600854610100900460ff16155b15611e0057600d54811115611c905760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e7420697320657863656564696e67206d61785478416d6f756e74006044820152606401610a91565b6009546001600160a01b03848116911614801590611cb0575060105460ff165b15611d48576001600160a01b0383166000908152600f6020526040812054611cd890426130ac565b90506011548111611d2b5760405162461bcd60e51b815260206004820152601a60248201527f596f75206d757374207761697420636f6f6c446f776e54696d650000000000006044820152606401610a91565b506001600160a01b0383166000908152600f602052604090204290555b6009546001600160a01b03838116911614801590611d68575060105460ff165b15611e00576001600160a01b0382166000908152600f6020526040812054611d9090426130ac565b90506011548111611de35760405162461bcd60e51b815260206004820152601a60248201527f596f75206d757374207761697420636f6f6c446f776e54696d650000000000006044820152606401610a91565b506001600160a01b0382166000908152600f602052604090204290555b6000600c54611e0e306111e5565b6008549111159150610100900460ff16158015611e2d575060085460ff165b8015611e365750805b8015611e5057506009546001600160a01b03858116911614155b8015611e7557506001600160a01b03841660009081526004602052604090205460ff16155b8015611e9a57506001600160a01b03831660009081526004602052604090205460ff16155b15611eaa57611eaa600c54611fbe565b6001600160a01b038416600090815260046020526040902054610bac9085908590859060ff1680611ef357506001600160a01b03871660009081526004602052604090205460ff165b156121c3565b6000806000611f066124aa565b9092509050611f1581836130c3565b9250505090565b611f24612ca1565b611f2e838361262d565b9050611f43818484611f3e611ef9565b61276f565b6060890152608088015260e087015260c086015260a085015260408401526020830152815292915050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6008805461ff001916610100179055601b54601954601a546018546000939291611fe79161312c565b611ff1919061312c565b611ffb919061312c565b612006906002613170565b90506000816016600201548461201c9190613170565b61202691906130c3565b9050600061203482856130ac565b90504761204082612867565b600061204c82476130ac565b60185490915060009061205f90876130ac565b61206990836130c3565b60185490915060009061207c9083613170565b9050801561208e5761208e86826129f5565b60195460009061209f846002613170565b6120a99190613170565b905080156120ed576012546040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156120eb573d6000803e3d6000fd5b505b601a546000906120fe856002613170565b6121089190613170565b9050801561214c576013546040516001600160a01b039091169082156108fc029083906000818181858888f1935050505015801561214a573d6000803e3d6000fd5b505b601b5460009061215d866002613170565b6121679190613170565b905080156121ab576014546040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156121a9573d6000803e3d6000fd5b505b50506008805461ff0019169055505050505050505050565b60006121cf8383611f1c565b6001600160a01b03861660009081526005602052604090205490915060ff1615612231576001600160a01b0385166000908152600260205260409020546122179084906130ac565b6001600160a01b0386166000908152600260205260409020555b6001600160a01b03841660009081526005602052604090205460ff1615612295576101008101516001600160a01b03851660009081526002602052604090205461227b919061312c565b6001600160a01b0385166000908152600260205260409020555b80516001600160a01b0386166000908152600160205260409020546122ba91906130ac565b6001600160a01b03808716600090815260016020908152604080832094909455840151918716815291909120546122f1919061312c565b6001600160a01b03851660009081526001602052604090819020919091558101516101208201516123229190612ae6565b6123358160800151826101600151612b1b565b6123488160c00151826101a00151612b91565b61235b8160e00151826101c00151612ba6565b61236e8160a00151826101800151612bbb565b6123818160600151826101400151612bd0565b61dead6001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8361014001516040516123cd91815260200190565b60405180910390a3836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83610100015160405161241f91815260200190565b60405180910390a3306001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836101c00151846101a0015185610180015186610160015161247e919061312c565b612488919061312c565b612492919061312c565b60405190815260200160405180910390a35050505050565b600b54600a546000918291825b6007548110156125fc578260016000600784815481106124d9576124d96130e5565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612544575081600260006007848154811061251d5761251d6130e5565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561255a57600b54600a54945094505050509091565b6001600060078381548110612571576125716130e5565b60009182526020808320909101546001600160a01b031683528201929092526040019020546125a090846130ac565b925060026000600783815481106125b9576125b96130e5565b60009182526020808320909101546001600160a01b031683528201929092526040019020546125e890836130ac565b9150806125f481613111565b9150506124b7565b50600a54600b5461260d91906130c3565b82101561262457600b54600a549350935050509091565b90939092509050565b612635612ca1565b81612647576101008101839052610afa565b6016546064906126579085613170565b61266191906130c3565b6101208201526019546064906126779085613170565b61268191906130c3565b610180820152601a546064906126979085613170565b6126a191906130c3565b6101a0820152601b546064906126b79085613170565b6126c191906130c3565b6101c08201526018546064906126d79085613170565b6126e191906130c3565b6101608201526017546064906126f79085613170565b61270191906130c3565b61014082018190526101608201516101c08301516101a084015161018085015161012086015161273190896130ac565b61273b91906130ac565b61274591906130ac565b61274f91906130ac565b61275991906130ac565b61276391906130ac565b61010082015292915050565b600080808080808080612782898c613170565b9750896127a357508695506000945084935083925082915081905080612858565b888c61012001516127b49190613170565b9550888c61018001516127c79190613170565b9450888c6101a001516127da9190613170565b9350888c6101c001516127ed9190613170565b9250888c61016001516128009190613170565b9150888c606001516128129190613170565b905080828486886128238b8e6130ac565b61282d91906130ac565b61283791906130ac565b61284191906130ac565b61284b91906130ac565b61285591906130ac565b96505b94995094995094999196509450565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061289c5761289c6130e5565b60200260200101906001600160a01b031690816001600160a01b031681525050600860029054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561290a57600080fd5b505afa15801561291e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129429190613282565b81600181518110612955576129556130e5565b6001600160a01b03928316602091820292909201015260085461298191309162010000900416846118a7565b60085460405163791ac94760e01b8152620100009091046001600160a01b03169063791ac947906129bf90859060009086903090429060040161329f565b600060405180830381600087803b1580156129d957600080fd5b505af11580156129ed573d6000803e3d6000fd5b505050505050565b600854612a139030906201000090046001600160a01b0316846118a7565b6008546001600160a01b03620100009091041663f305d719823085600080612a436000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b158015612aa657600080fd5b505af1158015612aba573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612adf9190613310565b5050505050565b81600b6000828254612af891906130ac565b9091555050601c8054829190600090612b1290849061312c565b90915550505050565b80601c6002016000828254612b30919061312c565b90915550503060009081526005602052604090205460ff1615612b72573060009081526002602052604081208054839290612b6c90849061312c565b90915550505b3060009081526001602052604081208054849290612b1290849061312c565b80601c6004016000828254612b30919061312c565b80601c6005016000828254612b30919061312c565b80601c6003016000828254612b30919061312c565b80601c6001016000828254612be5919061312c565b909155505061dead60005260056020527f7d509c07f0d4edcc2dd1b53aae68677132eb562dcba78e36381b63ccaf66e6ba5460ff1615612c635761dead600090815260026020527f6a9609baa168169acaea398c4407efea4be641bb08e21e88806d9836fd9333cc8054839290612c5d90849061312c565b90915550505b61dead600090815260016020527fb34209a263f6c38fe55f099e9e70f9d67e93982480ff3234a5e0108028ad164d8054849290612b1290849061312c565b604051806101e001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b60008060008060008060c08789031215612d3057600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b600060208083528351808285015260005b81811015612d8757858101830151858201604001528201612d6b565b81811115612d99576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b03811681146117dd57600080fd5b8035612dcf81612daf565b919050565b60008060408385031215612de757600080fd5b8235612df281612daf565b946020939093013593505050565b600080600060608486031215612e1557600080fd5b8335612e2081612daf565b92506020840135612e3081612daf565b929592945050506040919091013590565b600060208284031215612e5357600080fd5b5035919050565b600060208284031215612e6c57600080fd5b8135610ce081612daf565b60008060408385031215612e8a57600080fd5b8235612e9581612daf565b91506020830135612ea581612daf565b809150509250929050565b80151581146117dd57600080fd5b8035612dcf81612eb0565b60008060408385031215612edc57600080fd5b823591506020830135612ea581612eb0565b60008060408385031215612f0157600080fd5b8235612df281612eb0565b600060208284031215612f1e57600080fd5b8135610ce081612eb0565b634e487b7160e01b600052604160045260246000fd5b60008060408385031215612f5257600080fd5b823567ffffffffffffffff80821115612f6a57600080fd5b818501915085601f830112612f7e57600080fd5b8135602082821115612f9257612f92612f29565b8160051b604051601f19603f83011681018181108682111715612fb757612fb7612f29565b604052928352818301935084810182019289841115612fd557600080fd5b948201945b83861015612ffa57612feb86612dc4565b85529482019493820193612fda565b96506130099050878201612ebe565b9450505050509250929050565b6000806040838503121561302957600080fd5b823561303481612daf565b91506020830135612ea581612eb0565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60006020828403121561308b57600080fd5b8151610ce081612eb0565b634e487b7160e01b600052601160045260246000fd5b6000828210156130be576130be613096565b500390565b6000826130e057634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b600060001982141561312557613125613096565b5060010190565b6000821982111561313f5761313f613096565b500190565b60208082526012908201527115d85b1b195d08185b1c9958591e481cd95d60721b604082015260600190565b600081600019048311821515161561318a5761318a613096565b500290565b600181815b808511156131ca5781600019048211156131b0576131b0613096565b808516156131bd57918102915b93841c9390800290613194565b509250929050565b6000826131e157506001610afa565b816131ee57506000610afa565b8160018114613204576002811461320e5761322a565b6001915050610afa565b60ff84111561321f5761321f613096565b50506001821b610afa565b5060208310610133831016604e8410600b841016171561324d575081810a610afa565b613257838361318f565b806000190482111561326b5761326b613096565b029392505050565b6000610ce060ff8416836131d2565b60006020828403121561329457600080fd5b8151610ce081612daf565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156132ef5784516001600160a01b0316835293830193918301916001016132ca565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561332557600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220460f4278c074493a99e2d3383abf1beb5fa1cdd1d0d21d8ca5aa0080df4fb5cd64736f6c63430008090033
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.