ETH Price: $2,502.92 (-0.87%)

Token

RiddleOneExperiment (ROE)
 

Overview

Max Total Supply

100,000,000,000 ROE

Holders

98

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
thecryptoplumber.eth
Balance
0.204040611476942779 ROE

Value
$0.00
0xdd913f8cc3b66a5b6be595516248c649c688e208
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
ROE

Compiler Version
v0.8.5+commit.a4f2e591

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-08-24
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.4;

abstract contract Context {

    function _msgSender() internal view virtual returns (address payable) {
        return payable(msg.sender);
    }

    function _msgData() internal view virtual returns (bytes memory) {
        this; 
        return msg.data;
    }
}

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);
}

library SafeMath {

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

library Address {

    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }

    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    function owner() public view returns (address) {
        return _owner;
    }   
    
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
    
    function waiveOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
    
}

interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);

    function createPair(address tokenA, address tokenB) external returns (address pair);

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
    
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

contract ROE is Context, IERC20, Ownable {
    
    using SafeMath for uint256;
    using Address for address;
    
    string private _name = "RiddleOneExperiment";
    string private _symbol = "ROE";
    uint8 private _decimals = 18;
    uint256 private _totalSupply = 100 *  10**9 * 10**_decimals;
    uint256 public _maxTxAmount = _totalSupply.div(50); 
    uint256 public _walletMax = _totalSupply.div(50);
    uint256 private minimumTokensBeforeSwap = _totalSupply.div(10000); 
    address payable public marketingWalletAddress = payable(0xD4BBdE3002a749CD9956572B3EeDe4bFF425e685); 

    mapping (address => uint256) _balances;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) public isExcludedFromFee;
    mapping (address => bool) public isWalletLimitExempt;
    mapping (address => bool) public isTxLimitExempt;
    mapping (address => bool) public isMarketPair;
    
    uint256 private _buyLiquidityFee;
    uint256 private _buyMarketingFee = 20;
    uint256 private _sellLiquidityFee;
    uint256 private _sellMarketingFee = 20;
    uint256 private _liquidityShare = _buyLiquidityFee.add(_sellLiquidityFee);
    uint256 private _marketingShare = _buyMarketingFee.add(_sellMarketingFee);
    uint256 public _totalTaxIfBuying;
    uint256 public _totalTaxIfSelling;
    uint256 private _totalDistributionShares;

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapPair;
    bool inSwapAndLiquify;
    bool private swapAndLiquifyEnabled = true;
    bool private swapAndLiquifyByLimitOnly = false;
    bool private checkWalletLimit = true;

    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    
    event SwapETHForTokens(
        uint256 amountIn,
        address[] path
    );
    
    event SwapTokensForETH(
        uint256 amountIn,
        address[] path
    );
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    
    constructor () {
        
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); 

        uniswapPair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;
        _allowances[address(this)][address(uniswapV2Router)] = _totalSupply;

        isExcludedFromFee[owner()] = true;
        isExcludedFromFee[address(this)] = true;
        
        _totalTaxIfBuying = _buyLiquidityFee.add(_buyMarketingFee);
        _totalTaxIfSelling = _sellLiquidityFee.add(_sellMarketingFee);
        _totalDistributionShares = _liquidityShare.add(_marketingShare);
        isWalletLimitExempt[owner()] = true;
        isWalletLimitExempt[address(uniswapPair)] = true;
        isWalletLimitExempt[address(this)] = true;
        
        isTxLimitExempt[owner()] = true;
        isTxLimitExempt[address(this)] = true;

        isMarketPair[address(uniswapPair)] = true;

        _balances[_msgSender()] = _totalSupply;
        emit Transfer(address(0), _msgSender(), _totalSupply);
    }

    function name() public view returns (string memory) {
        return _name;
    }

    function symbol() public view returns (string memory) {
        return _symbol;
    }

    function decimals() public view returns (uint8) {
        return _decimals;
    }

    function totalSupply() public view override returns (uint256) {
        return _totalSupply;
    }

    function balanceOf(address account) public view override returns (uint256) {
        return _balances[account];
    }

    function allowance(address owner, address spender) public view override returns (uint256) {
        return _allowances[owner][spender];
    }

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

    function minimumTokensBeforeSwapAmount() private view returns (uint256) {
        return minimumTokensBeforeSwap;
    }

    function approve(address spender, uint256 amount) public override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    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 setMarketPairStatus(address account, bool newValue) public onlyOwner {
        isMarketPair[account] = newValue;
    }

    function setIsExcludedFromFee(address account, bool newValue) public onlyOwner {
        isExcludedFromFee[account] = newValue;
    }

    function setIsTxLimitAndWalletLimitExempt(address holder, bool exempt) external onlyOwner {
        isTxLimitExempt[holder] = exempt;
        isWalletLimitExempt[holder] = exempt;
    }
    
    function setNumTokensBeforeSwap(uint256 newLimit) external onlyOwner() {
        minimumTokensBeforeSwap = newLimit;
    }

    function setTaxes(
        uint256 newbuyLiquidityTax, uint256 newbuyMarketingTax,
        uint256 newsellLiquidityTax, uint256 newsellMarketingTax,
        uint256 newLiquidityShare, uint256 newMarketingShare
        ) external onlyOwner() {   
        require(newbuyLiquidityTax.add(newbuyMarketingTax) <= 5, "Total tax cannot exceed 5%");
        require(newsellLiquidityTax.add(newsellMarketingTax) <= 5, "Total tax cannot exceed 5%");
        require(newLiquidityShare.add(newMarketingShare) <= 10, "Total tax cannot exceed 10%");

        _buyLiquidityFee = newbuyLiquidityTax;
        _buyMarketingFee = newbuyMarketingTax;
        _totalTaxIfBuying = _buyLiquidityFee.add(_buyMarketingFee);

        _sellLiquidityFee = newsellLiquidityTax;
        _sellMarketingFee = newsellMarketingTax;
        _totalTaxIfSelling = _sellLiquidityFee.add(_sellMarketingFee);

        _liquidityShare = newLiquidityShare;
        _marketingShare = newMarketingShare;
        _totalDistributionShares = _liquidityShare.add(_marketingShare);
    }
    
    function setMaxWalletAndTxnAmount(uint256 newTxnNum, uint256 newMaxWalletNum) external onlyOwner {
        require(newTxnNum >=  _totalSupply.div(200), "Cannot set maxTxn lower than 0.5%");
        require(newMaxWalletNum >= _totalSupply.div(200),"Cannot set maxWallet lower than 0.5%");
        _maxTxAmount = newTxnNum;
        _walletMax = newMaxWalletNum;
    }


    function setMarketingWalletAddress(address newAddress) external onlyOwner() {
        marketingWalletAddress = payable(newAddress);
    }

    function transferToAddressETH(address payable recipient, uint256 amount) private {
        recipient.transfer(amount);
    }
    
    function changeRouterVersion(address newRouterAddress) public onlyOwner returns(address newPairAddress) {

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(newRouterAddress); 

        newPairAddress = IUniswapV2Factory(_uniswapV2Router.factory()).getPair(address(this), _uniswapV2Router.WETH());

        if(newPairAddress == address(0)) //Create If Doesnt exist
        {
            newPairAddress = IUniswapV2Factory(_uniswapV2Router.factory())
                .createPair(address(this), _uniswapV2Router.WETH());
        }

        uniswapPair = newPairAddress; //Set new pair address
        uniswapV2Router = _uniswapV2Router; //Set new router address

        isWalletLimitExempt[address(uniswapPair)] = true;
        isMarketPair[address(uniswapPair)] = true;
    }

     //to recieve ETH from uniswapV2Router when swaping
    receive() external payable {}

    function transfer(address recipient, uint256 amount) public override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

    function _transfer(address sender, address recipient, uint256 amount) private returns (bool) {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");      

        if(inSwapAndLiquify)
        { 
            return _basicTransfer(sender, recipient, amount); 
        }
        else
        {
            if(!isTxLimitExempt[sender] && !isTxLimitExempt[recipient]) {
                require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
            }            

            uint256 contractTokenBalance = balanceOf(address(this));
            bool overMinimumTokenBalance = contractTokenBalance >= minimumTokensBeforeSwap;
            
            if (overMinimumTokenBalance && !inSwapAndLiquify && !isMarketPair[sender] && swapAndLiquifyEnabled) 
            {
                if(swapAndLiquifyByLimitOnly)
                    contractTokenBalance = minimumTokensBeforeSwap;
                swapAndLiquify(contractTokenBalance);    
            }

            _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");

            uint256 finalAmount = (isExcludedFromFee[sender] || isExcludedFromFee[recipient]) ? 
                                         amount : takeFee(sender, recipient, amount);

            if(checkWalletLimit && !isWalletLimitExempt[recipient])
                require(balanceOf(recipient).add(finalAmount) <= _walletMax);

            _balances[recipient] = _balances[recipient].add(finalAmount);

            emit Transfer(sender, recipient, finalAmount);
            return true;
        }
    }

    function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) {
        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
        return true;
    }

    function swapAndLiquify(uint256 tAmount) private lockTheSwap {
        
        uint256 tokensForLP = tAmount.mul(_liquidityShare).div(_totalDistributionShares).div(2);
        uint256 tokensForSwap = tAmount.sub(tokensForLP);

        swapTokensForEth(tokensForSwap);
        uint256 amountReceived = address(this).balance;

        uint256 totalETHFee = _totalDistributionShares.sub(_liquidityShare.div(2));
        
        uint256 amountETHLiquidity = amountReceived.mul(_liquidityShare).div(totalETHFee).div(2);

        uint256 amountETHMarketing = amountReceived.sub(amountETHLiquidity);

        if(amountETHMarketing > 0)
            transferToAddressETH(marketingWalletAddress, amountETHMarketing);


        if(amountETHLiquidity > 0 && tokensForLP > 0)
            addLiquidity(tokensForLP, amountETHLiquidity);
    }
    
    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] = uniswapV2Router.WETH();

        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this), // The contract
            block.timestamp
        );
        
        emit SwapTokensForETH(tokenAmount, path);
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            owner(),
            block.timestamp
        );
    }

    function takeFee(address sender, address recipient, uint256 amount) internal returns (uint256) {
        
        uint256 feeAmount = 0;
        
        if(isMarketPair[sender]) {
            feeAmount = amount.mul(_totalTaxIfBuying).div(100);
        }
        else if(isMarketPair[recipient]) {
            feeAmount = amount.mul(_totalTaxIfSelling).div(100);
        }
        
        if(feeAmount > 0) {
            _balances[address(this)] = _balances[address(this)].add(feeAmount);
            emit Transfer(sender, address(this), feeAmount);
        }

        return amount.sub(feeAmount);
    }

}

Contract Security Audit

Contract ABI

[{"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":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","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"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalTaxIfBuying","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalTaxIfSelling","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_walletMax","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":"newRouterAddress","type":"address"}],"name":"changeRouterVersion","outputs":[{"internalType":"address","name":"newPairAddress","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","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":[{"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":"","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isMarketPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isTxLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isWalletLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWalletAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"newValue","type":"bool"}],"name":"setIsExcludedFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTxLimitAndWalletLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"newValue","type":"bool"}],"name":"setMarketPairStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"setMarketingWalletAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newTxnNum","type":"uint256"},{"internalType":"uint256","name":"newMaxWalletNum","type":"uint256"}],"name":"setMaxWalletAndTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setNumTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newbuyLiquidityTax","type":"uint256"},{"internalType":"uint256","name":"newbuyMarketingTax","type":"uint256"},{"internalType":"uint256","name":"newsellLiquidityTax","type":"uint256"},{"internalType":"uint256","name":"newsellMarketingTax","type":"uint256"},{"internalType":"uint256","name":"newLiquidityShare","type":"uint256"},{"internalType":"uint256","name":"newMarketingShare","type":"uint256"}],"name":"setTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[],"name":"uniswapPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"waiveOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c0604052601360808190527f526964646c654f6e654578706572696d656e740000000000000000000000000060a0908152620000409160019190620006d9565b5060408051808201909152600380825262524f4560e81b60209092019182526200006d91600291620006d9565b506003805460ff191660129081179091556200008b90600a62000889565b6200009c9064174876e80062000948565b600455620000bc6032600454620005e360201b620011551790919060201c565b600555620000dc6032600454620005e360201b620011551790919060201c565b600655620000fd612710600454620005e360201b620011551790919060201c565b6007556008805473d4bbde3002a749cd9956572b3eede4bff425e6856001600160a01b031990911617905560146010819055601255601154600f546200014f9162000636602090811b6200119717901c565b601355620001706012546010546200063660201b620011971790919060201c565b6014556019805462ffffff60a81b19166201000160a81b1790553480156200019757600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200022c57600080fd5b505afa15801562000241573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200026791906200077f565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620002b057600080fd5b505afa158015620002c5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002eb91906200077f565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156200033457600080fd5b505af115801562000349573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200036f91906200077f565b601980546001600160a01b039283166001600160a01b031991821617909155601880549284169290911682179055600454306000908152600a6020908152604080832094835293905291822055600190600b90620003d56000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff19958616179055308152600b8352208054909216600117909155601054600f5462000431929091906200119762000636821b17901c565b601581905550620004556012546011546200063660201b620011971790919060201c565b601681905550620004796014546013546200063660201b620011971790919060201c565b6017556001600c6000620004956000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790556019549091168152600c90925280822080548416600190811790915530835290822080549093168117909255600d90620005056000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055308152600d84528281208054861660019081179091556019549092168152600e90935290822080549093161790915560045490600990620005713390565b6001600160a01b03168152602081019190915260400160002055336001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600454604051620005d491815260200190565b60405180910390a350620009bd565b60006200062d83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506200069d60201b60201c565b90505b92915050565b60008062000645838562000802565b9050838110156200062d5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064015b60405180910390fd5b60008183620006c15760405162461bcd60e51b8152600401620006949190620007aa565b506000620006d084866200081d565b95945050505050565b828054620006e7906200096a565b90600052602060002090601f0160209004810192826200070b576000855562000756565b82601f106200072657805160ff191683800117855562000756565b8280016001018555821562000756579182015b828111156200075657825182559160200191906001019062000739565b506200076492915062000768565b5090565b5b8082111562000764576000815560010162000769565b6000602082840312156200079257600080fd5b81516001600160a01b03811681146200062d57600080fd5b600060208083528351808285015260005b81811015620007d957858101830151858201604001528201620007bb565b81811115620007ec576000604083870101525b50601f01601f1916929092016040019392505050565b60008219821115620008185762000818620009a7565b500190565b6000826200083b57634e487b7160e01b600052601260045260246000fd5b500490565b600181815b8085111562000881578160001904821115620008655762000865620009a7565b808516156200087357918102915b93841c939080029062000845565b509250929050565b60006200062d60ff841683600082620008a55750600162000630565b81620008b45750600062000630565b8160018114620008cd5760028114620008d857620008f8565b600191505062000630565b60ff841115620008ec57620008ec620009a7565b50506001821b62000630565b5060208310610133831016604e8410600b84101617156200091d575081810a62000630565b62000929838362000840565b8060001904821115620009405762000940620009a7565b029392505050565b6000816000190483118215151615620009655762000965620009a7565b500290565b600181811c908216806200097f57607f821691505b60208210811415620009a157634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b61221380620009cd6000396000f3fe6080604052600436106101f25760003560e01c8063807c2d9c1161010d578063a9059cbb116100a0578063d158272d1161006f578063d158272d146105d4578063dd62ed3e146105f4578063ef422a181461063a578063f0cd1dac1461065a578063f2fde38b1461067057600080fd5b8063a9059cbb14610544578063af06c23514610564578063c816841b14610584578063c867d60b146105a457600080fd5b80638da5cb5b116100dc5780638da5cb5b146104dc578063914eb66a146104fa57806395d89b411461050f578063a457c2d71461052457600080fd5b8063807c2d9c1461046057806382eefb4314610476578063844d591c1461048c5780638b42507f146104ac57600080fd5b806339509351116101855780635342acb4116101545780635342acb4146103c45780635881f3ef146103f457806370a08231146104145780637d1db4a51461044a57600080fd5b806339509351146103345780633b97084a146103545780633ecad271146103745780634cb80fd5146103a457600080fd5b80631694505e116101c15780631694505e1461029b57806318160ddd146102d357806323b872dd146102f2578063313ce5671461031257600080fd5b8063022d02e5146101fe57806304d4c9901461022057806306fdde0314610240578063095ea7b31461026b57600080fd5b366101f957005b600080fd5b34801561020a57600080fd5b5061021e610219366004611ee3565b610690565b005b34801561022c57600080fd5b5061021e61023b366004611f33565b61079e565b34801561024c57600080fd5b50610255610923565b6040516102629190611fba565b60405180910390f35b34801561027757600080fd5b5061028b610286366004611e9e565b6109b5565b6040519015158152602001610262565b3480156102a757600080fd5b506018546102bb906001600160a01b031681565b6040516001600160a01b039091168152602001610262565b3480156102df57600080fd5b506004545b604051908152602001610262565b3480156102fe57600080fd5b5061028b61030d366004611e2a565b6109cc565b34801561031e57600080fd5b5060035460405160ff9091168152602001610262565b34801561034057600080fd5b5061028b61034f366004611e9e565b610a37565b34801561036057600080fd5b5061021e61036f366004611eca565b610a6d565b34801561038057600080fd5b5061028b61038f366004611db7565b600e6020526000908152604090205460ff1681565b3480156103b057600080fd5b5061021e6103bf366004611db7565b610a9c565b3480156103d057600080fd5b5061028b6103df366004611db7565b600b6020526000908152604090205460ff1681565b34801561040057600080fd5b506102bb61040f366004611db7565b610ae8565b34801561042057600080fd5b506102e461042f366004611db7565b6001600160a01b031660009081526009602052604090205490565b34801561045657600080fd5b506102e460055481565b34801561046c57600080fd5b506102e460065481565b34801561048257600080fd5b506102e460165481565b34801561049857600080fd5b5061021e6104a7366004611e6b565b610e7a565b3480156104b857600080fd5b5061028b6104c7366004611db7565b600d6020526000908152604090205460ff1681565b3480156104e857600080fd5b506000546001600160a01b03166102bb565b34801561050657600080fd5b5061021e610ecf565b34801561051b57600080fd5b50610255610f43565b34801561053057600080fd5b5061028b61053f366004611e9e565b610f52565b34801561055057600080fd5b5061028b61055f366004611e9e565b610fa1565b34801561057057600080fd5b5061021e61057f366004611e6b565b610fae565b34801561059057600080fd5b506019546102bb906001600160a01b031681565b3480156105b057600080fd5b5061028b6105bf366004611db7565b600c6020526000908152604090205460ff1681565b3480156105e057600080fd5b506008546102bb906001600160a01b031681565b34801561060057600080fd5b506102e461060f366004611df1565b6001600160a01b039182166000908152600a6020908152604080832093909416825291909152205490565b34801561064657600080fd5b5061021e610655366004611e6b565b611016565b34801561066657600080fd5b506102e460155481565b34801561067c57600080fd5b5061021e61068b366004611db7565b61106b565b6000546001600160a01b031633146106c35760405162461bcd60e51b81526004016106ba9061200f565b60405180910390fd5b6004546106d19060c8611155565b82101561072a5760405162461bcd60e51b815260206004820152602160248201527f43616e6e6f7420736574206d617854786e206c6f776572207468616e20302e356044820152602560f81b60648201526084016106ba565b6004546107389060c8611155565b8110156107935760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e352560e01b60648201526084016106ba565b600591909155600655565b6000546001600160a01b031633146107c85760405162461bcd60e51b81526004016106ba9061200f565b60056107d48787611197565b11156108225760405162461bcd60e51b815260206004820152601a60248201527f546f74616c207461782063616e6e6f742065786365656420352500000000000060448201526064016106ba565b600561082e8585611197565b111561087c5760405162461bcd60e51b815260206004820152601a60248201527f546f74616c207461782063616e6e6f742065786365656420352500000000000060448201526064016106ba565b600a6108888383611197565b11156108d65760405162461bcd60e51b815260206004820152601b60248201527f546f74616c207461782063616e6e6f742065786365656420313025000000000060448201526064016106ba565b600f86905560108590556108ea8686611197565b601555601184905560128390556109018484611197565b601655601382905560148190556109188282611197565b601755505050505050565b60606001805461093290612111565b80601f016020809104026020016040519081016040528092919081815260200182805461095e90612111565b80156109ab5780601f10610980576101008083540402835291602001916109ab565b820191906000526020600020905b81548152906001019060200180831161098e57829003601f168201915b5050505050905090565b60006109c23384846111f6565b5060015b92915050565b60006109d984848461131a565b50610a2c8433610a2785604051806060016040528060288152602001612191602891396001600160a01b038a166000908152600a6020908152604080832033845290915290205491906116ef565b6111f6565b5060015b9392505050565b336000818152600a602090815260408083206001600160a01b038716845290915281205490916109c2918590610a279086611197565b6000546001600160a01b03163314610a975760405162461bcd60e51b81526004016106ba9061200f565b600755565b6000546001600160a01b03163314610ac65760405162461bcd60e51b81526004016106ba9061200f565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b600080546001600160a01b03163314610b135760405162461bcd60e51b81526004016106ba9061200f565b6000829050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015610b5157600080fd5b505afa158015610b65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b899190611dd4565b6001600160a01b031663e6a4390530836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015610bd157600080fd5b505afa158015610be5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c099190611dd4565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b158015610c4f57600080fd5b505afa158015610c63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c879190611dd4565b91506001600160a01b038216610e0b57806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015610cd057600080fd5b505afa158015610ce4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d089190611dd4565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015610d5057600080fd5b505afa158015610d64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d889190611dd4565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015610dd057600080fd5b505af1158015610de4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e089190611dd4565b91505b601980546001600160a01b03199081166001600160a01b03858116918217845560188054909316948116949094179091556000908152600c60209081526040808320805460ff19908116600190811790925594549095168352600e909152902080549091169091179055919050565b6000546001600160a01b03163314610ea45760405162461bcd60e51b81526004016106ba9061200f565b6001600160a01b03919091166000908152600e60205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610ef95760405162461bcd60e51b81526004016106ba9061200f565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b60606002805461093290612111565b60006109c23384610a27856040518060600160405280602581526020016121b960259139336000908152600a602090815260408083206001600160a01b038d16845290915290205491906116ef565b6000610a2c33848461131a565b6000546001600160a01b03163314610fd85760405162461bcd60e51b81526004016106ba9061200f565b6001600160a01b039091166000908152600d60209081526040808320805494151560ff199586168117909155600c9092529091208054909216179055565b6000546001600160a01b031633146110405760405162461bcd60e51b81526004016106ba9061200f565b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146110955760405162461bcd60e51b81526004016106ba9061200f565b6001600160a01b0381166110fa5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016106ba565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000610a3083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611729565b6000806111a483856120a1565b905083811015610a305760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016106ba565b6001600160a01b0383166112585760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016106ba565b6001600160a01b0382166112b95760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016106ba565b6001600160a01b038381166000818152600a602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b0384166113805760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016106ba565b6001600160a01b0383166113e25760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016106ba565b601954600160a01b900460ff1615611406576113ff848484611757565b9050610a30565b6001600160a01b0384166000908152600d602052604090205460ff1615801561144857506001600160a01b0383166000908152600d602052604090205460ff16155b156114b0576005548211156114b05760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b60648201526084016106ba565b30600090815260096020526040902054600754811080159081906114de5750601954600160a01b900460ff16155b801561150357506001600160a01b0386166000908152600e602052604090205460ff16155b80156115185750601954600160a81b900460ff165b1561153e57601954600160b01b900460ff16156115355760075491505b61153e8261183d565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0389166000908152600990915291909120546115909186906116ef565b6001600160a01b038716600090815260096020908152604080832093909355600b90529081205460ff16806115dd57506001600160a01b0386166000908152600b602052604090205460ff165b6115f1576115ec87878761192f565b6115f3565b845b601954909150600160b81b900460ff16801561162857506001600160a01b0386166000908152600c602052604090205460ff16155b156116645760065461165982611653896001600160a01b031660009081526009602052604090205490565b90611197565b111561166457600080fd5b6001600160a01b0386166000908152600960205260409020546116879082611197565b6001600160a01b0380881660008181526009602052604090819020939093559151908916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906116db9085815260200190565b60405180910390a360019350505050610a30565b600081848411156117135760405162461bcd60e51b81526004016106ba9190611fba565b50600061172084866120fa565b95945050505050565b6000818361174a5760405162461bcd60e51b81526004016106ba9190611fba565b50600061172084866120b9565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b03861660009081526009909152918220546117a89184906116ef565b6001600160a01b0380861660009081526009602052604080822093909355908516815220546117d79083611197565b6001600160a01b0380851660008181526009602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061182b9086815260200190565b60405180910390a35060019392505050565b6019805460ff60a01b1916600160a01b1790556017546013546000916118739160029161186d9182908790611a35565b90611155565b905060006118818383611ab4565b905061188c81611af6565b60135447906000906118ac906118a3906002611155565b60175490611ab4565b905060006118ce600261186d8461186d60135488611a3590919063ffffffff16565b905060006118dc8483611ab4565b905080156118fa576008546118fa906001600160a01b031682611c98565b60008211801561190a5750600086115b15611919576119198683611cd3565b50506019805460ff60a01b191690555050505050565b6001600160a01b0383166000908152600e6020526040812054819060ff16156119735761196c606461186d60155486611a3590919063ffffffff16565b90506119b1565b6001600160a01b0384166000908152600e602052604090205460ff16156119b1576119ae606461186d60165486611a3590919063ffffffff16565b90505b8015611a2b57306000908152600960205260409020546119d19082611197565b30600081815260096020526040908190209290925590516001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611a229085815260200190565b60405180910390a35b6117208382611ab4565b600082611a44575060006109c6565b6000611a5083856120db565b905082611a5d85836120b9565b14610a305760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016106ba565b6000610a3083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506116ef565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611b2b57611b2b612162565b6001600160a01b03928316602091820292909201810191909152601854604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015611b7f57600080fd5b505afa158015611b93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bb79190611dd4565b81600181518110611bca57611bca612162565b6001600160a01b039283166020918202929092010152601854611bf091309116846111f6565b60185460405163791ac94760e01b81526001600160a01b039091169063791ac94790611c29908590600090869030904290600401612065565b600060405180830381600087803b158015611c4357600080fd5b505af1158015611c57573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051611c8c929190612044565b60405180910390a15050565b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015611cce573d6000803e3d6000fd5b505050565b601854611ceb9030906001600160a01b0316846111f6565b6018546001600160a01b031663f305d719823085600080611d146000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b158015611d7757600080fd5b505af1158015611d8b573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611db09190611f05565b5050505050565b600060208284031215611dc957600080fd5b8135610a3081612178565b600060208284031215611de657600080fd5b8151610a3081612178565b60008060408385031215611e0457600080fd5b8235611e0f81612178565b91506020830135611e1f81612178565b809150509250929050565b600080600060608486031215611e3f57600080fd5b8335611e4a81612178565b92506020840135611e5a81612178565b929592945050506040919091013590565b60008060408385031215611e7e57600080fd5b8235611e8981612178565b915060208301358015158114611e1f57600080fd5b60008060408385031215611eb157600080fd5b8235611ebc81612178565b946020939093013593505050565b600060208284031215611edc57600080fd5b5035919050565b60008060408385031215611ef657600080fd5b50508035926020909101359150565b600080600060608486031215611f1a57600080fd5b8351925060208401519150604084015190509250925092565b60008060008060008060c08789031215611f4c57600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b600081518084526020808501945080840160005b83811015611faf5781516001600160a01b031687529582019590820190600101611f8a565b509495945050505050565b600060208083528351808285015260005b81811015611fe757858101830151858201604001528201611fcb565b81811115611ff9576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b82815260406020820152600061205d6040830184611f76565b949350505050565b85815284602082015260a06040820152600061208460a0830186611f76565b6001600160a01b0394909416606083015250608001529392505050565b600082198211156120b4576120b461214c565b500190565b6000826120d657634e487b7160e01b600052601260045260246000fd5b500490565b60008160001904831182151516156120f5576120f561214c565b500290565b60008282101561210c5761210c61214c565b500390565b600181811c9082168061212557607f821691505b6020821081141561214657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b038116811461218d57600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122040848e20cdae7533fd4b71cc0c4fe590383a6b3b99caf1c6979be48d4f997ebb64736f6c63430008050033

Deployed Bytecode

0x6080604052600436106101f25760003560e01c8063807c2d9c1161010d578063a9059cbb116100a0578063d158272d1161006f578063d158272d146105d4578063dd62ed3e146105f4578063ef422a181461063a578063f0cd1dac1461065a578063f2fde38b1461067057600080fd5b8063a9059cbb14610544578063af06c23514610564578063c816841b14610584578063c867d60b146105a457600080fd5b80638da5cb5b116100dc5780638da5cb5b146104dc578063914eb66a146104fa57806395d89b411461050f578063a457c2d71461052457600080fd5b8063807c2d9c1461046057806382eefb4314610476578063844d591c1461048c5780638b42507f146104ac57600080fd5b806339509351116101855780635342acb4116101545780635342acb4146103c45780635881f3ef146103f457806370a08231146104145780637d1db4a51461044a57600080fd5b806339509351146103345780633b97084a146103545780633ecad271146103745780634cb80fd5146103a457600080fd5b80631694505e116101c15780631694505e1461029b57806318160ddd146102d357806323b872dd146102f2578063313ce5671461031257600080fd5b8063022d02e5146101fe57806304d4c9901461022057806306fdde0314610240578063095ea7b31461026b57600080fd5b366101f957005b600080fd5b34801561020a57600080fd5b5061021e610219366004611ee3565b610690565b005b34801561022c57600080fd5b5061021e61023b366004611f33565b61079e565b34801561024c57600080fd5b50610255610923565b6040516102629190611fba565b60405180910390f35b34801561027757600080fd5b5061028b610286366004611e9e565b6109b5565b6040519015158152602001610262565b3480156102a757600080fd5b506018546102bb906001600160a01b031681565b6040516001600160a01b039091168152602001610262565b3480156102df57600080fd5b506004545b604051908152602001610262565b3480156102fe57600080fd5b5061028b61030d366004611e2a565b6109cc565b34801561031e57600080fd5b5060035460405160ff9091168152602001610262565b34801561034057600080fd5b5061028b61034f366004611e9e565b610a37565b34801561036057600080fd5b5061021e61036f366004611eca565b610a6d565b34801561038057600080fd5b5061028b61038f366004611db7565b600e6020526000908152604090205460ff1681565b3480156103b057600080fd5b5061021e6103bf366004611db7565b610a9c565b3480156103d057600080fd5b5061028b6103df366004611db7565b600b6020526000908152604090205460ff1681565b34801561040057600080fd5b506102bb61040f366004611db7565b610ae8565b34801561042057600080fd5b506102e461042f366004611db7565b6001600160a01b031660009081526009602052604090205490565b34801561045657600080fd5b506102e460055481565b34801561046c57600080fd5b506102e460065481565b34801561048257600080fd5b506102e460165481565b34801561049857600080fd5b5061021e6104a7366004611e6b565b610e7a565b3480156104b857600080fd5b5061028b6104c7366004611db7565b600d6020526000908152604090205460ff1681565b3480156104e857600080fd5b506000546001600160a01b03166102bb565b34801561050657600080fd5b5061021e610ecf565b34801561051b57600080fd5b50610255610f43565b34801561053057600080fd5b5061028b61053f366004611e9e565b610f52565b34801561055057600080fd5b5061028b61055f366004611e9e565b610fa1565b34801561057057600080fd5b5061021e61057f366004611e6b565b610fae565b34801561059057600080fd5b506019546102bb906001600160a01b031681565b3480156105b057600080fd5b5061028b6105bf366004611db7565b600c6020526000908152604090205460ff1681565b3480156105e057600080fd5b506008546102bb906001600160a01b031681565b34801561060057600080fd5b506102e461060f366004611df1565b6001600160a01b039182166000908152600a6020908152604080832093909416825291909152205490565b34801561064657600080fd5b5061021e610655366004611e6b565b611016565b34801561066657600080fd5b506102e460155481565b34801561067c57600080fd5b5061021e61068b366004611db7565b61106b565b6000546001600160a01b031633146106c35760405162461bcd60e51b81526004016106ba9061200f565b60405180910390fd5b6004546106d19060c8611155565b82101561072a5760405162461bcd60e51b815260206004820152602160248201527f43616e6e6f7420736574206d617854786e206c6f776572207468616e20302e356044820152602560f81b60648201526084016106ba565b6004546107389060c8611155565b8110156107935760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e352560e01b60648201526084016106ba565b600591909155600655565b6000546001600160a01b031633146107c85760405162461bcd60e51b81526004016106ba9061200f565b60056107d48787611197565b11156108225760405162461bcd60e51b815260206004820152601a60248201527f546f74616c207461782063616e6e6f742065786365656420352500000000000060448201526064016106ba565b600561082e8585611197565b111561087c5760405162461bcd60e51b815260206004820152601a60248201527f546f74616c207461782063616e6e6f742065786365656420352500000000000060448201526064016106ba565b600a6108888383611197565b11156108d65760405162461bcd60e51b815260206004820152601b60248201527f546f74616c207461782063616e6e6f742065786365656420313025000000000060448201526064016106ba565b600f86905560108590556108ea8686611197565b601555601184905560128390556109018484611197565b601655601382905560148190556109188282611197565b601755505050505050565b60606001805461093290612111565b80601f016020809104026020016040519081016040528092919081815260200182805461095e90612111565b80156109ab5780601f10610980576101008083540402835291602001916109ab565b820191906000526020600020905b81548152906001019060200180831161098e57829003601f168201915b5050505050905090565b60006109c23384846111f6565b5060015b92915050565b60006109d984848461131a565b50610a2c8433610a2785604051806060016040528060288152602001612191602891396001600160a01b038a166000908152600a6020908152604080832033845290915290205491906116ef565b6111f6565b5060015b9392505050565b336000818152600a602090815260408083206001600160a01b038716845290915281205490916109c2918590610a279086611197565b6000546001600160a01b03163314610a975760405162461bcd60e51b81526004016106ba9061200f565b600755565b6000546001600160a01b03163314610ac65760405162461bcd60e51b81526004016106ba9061200f565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b600080546001600160a01b03163314610b135760405162461bcd60e51b81526004016106ba9061200f565b6000829050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015610b5157600080fd5b505afa158015610b65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b899190611dd4565b6001600160a01b031663e6a4390530836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015610bd157600080fd5b505afa158015610be5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c099190611dd4565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b158015610c4f57600080fd5b505afa158015610c63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c879190611dd4565b91506001600160a01b038216610e0b57806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015610cd057600080fd5b505afa158015610ce4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d089190611dd4565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015610d5057600080fd5b505afa158015610d64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d889190611dd4565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015610dd057600080fd5b505af1158015610de4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e089190611dd4565b91505b601980546001600160a01b03199081166001600160a01b03858116918217845560188054909316948116949094179091556000908152600c60209081526040808320805460ff19908116600190811790925594549095168352600e909152902080549091169091179055919050565b6000546001600160a01b03163314610ea45760405162461bcd60e51b81526004016106ba9061200f565b6001600160a01b03919091166000908152600e60205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610ef95760405162461bcd60e51b81526004016106ba9061200f565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b60606002805461093290612111565b60006109c23384610a27856040518060600160405280602581526020016121b960259139336000908152600a602090815260408083206001600160a01b038d16845290915290205491906116ef565b6000610a2c33848461131a565b6000546001600160a01b03163314610fd85760405162461bcd60e51b81526004016106ba9061200f565b6001600160a01b039091166000908152600d60209081526040808320805494151560ff199586168117909155600c9092529091208054909216179055565b6000546001600160a01b031633146110405760405162461bcd60e51b81526004016106ba9061200f565b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146110955760405162461bcd60e51b81526004016106ba9061200f565b6001600160a01b0381166110fa5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016106ba565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000610a3083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611729565b6000806111a483856120a1565b905083811015610a305760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016106ba565b6001600160a01b0383166112585760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016106ba565b6001600160a01b0382166112b95760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016106ba565b6001600160a01b038381166000818152600a602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b0384166113805760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016106ba565b6001600160a01b0383166113e25760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016106ba565b601954600160a01b900460ff1615611406576113ff848484611757565b9050610a30565b6001600160a01b0384166000908152600d602052604090205460ff1615801561144857506001600160a01b0383166000908152600d602052604090205460ff16155b156114b0576005548211156114b05760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b60648201526084016106ba565b30600090815260096020526040902054600754811080159081906114de5750601954600160a01b900460ff16155b801561150357506001600160a01b0386166000908152600e602052604090205460ff16155b80156115185750601954600160a81b900460ff165b1561153e57601954600160b01b900460ff16156115355760075491505b61153e8261183d565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0389166000908152600990915291909120546115909186906116ef565b6001600160a01b038716600090815260096020908152604080832093909355600b90529081205460ff16806115dd57506001600160a01b0386166000908152600b602052604090205460ff165b6115f1576115ec87878761192f565b6115f3565b845b601954909150600160b81b900460ff16801561162857506001600160a01b0386166000908152600c602052604090205460ff16155b156116645760065461165982611653896001600160a01b031660009081526009602052604090205490565b90611197565b111561166457600080fd5b6001600160a01b0386166000908152600960205260409020546116879082611197565b6001600160a01b0380881660008181526009602052604090819020939093559151908916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906116db9085815260200190565b60405180910390a360019350505050610a30565b600081848411156117135760405162461bcd60e51b81526004016106ba9190611fba565b50600061172084866120fa565b95945050505050565b6000818361174a5760405162461bcd60e51b81526004016106ba9190611fba565b50600061172084866120b9565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b03861660009081526009909152918220546117a89184906116ef565b6001600160a01b0380861660009081526009602052604080822093909355908516815220546117d79083611197565b6001600160a01b0380851660008181526009602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061182b9086815260200190565b60405180910390a35060019392505050565b6019805460ff60a01b1916600160a01b1790556017546013546000916118739160029161186d9182908790611a35565b90611155565b905060006118818383611ab4565b905061188c81611af6565b60135447906000906118ac906118a3906002611155565b60175490611ab4565b905060006118ce600261186d8461186d60135488611a3590919063ffffffff16565b905060006118dc8483611ab4565b905080156118fa576008546118fa906001600160a01b031682611c98565b60008211801561190a5750600086115b15611919576119198683611cd3565b50506019805460ff60a01b191690555050505050565b6001600160a01b0383166000908152600e6020526040812054819060ff16156119735761196c606461186d60155486611a3590919063ffffffff16565b90506119b1565b6001600160a01b0384166000908152600e602052604090205460ff16156119b1576119ae606461186d60165486611a3590919063ffffffff16565b90505b8015611a2b57306000908152600960205260409020546119d19082611197565b30600081815260096020526040908190209290925590516001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611a229085815260200190565b60405180910390a35b6117208382611ab4565b600082611a44575060006109c6565b6000611a5083856120db565b905082611a5d85836120b9565b14610a305760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016106ba565b6000610a3083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506116ef565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611b2b57611b2b612162565b6001600160a01b03928316602091820292909201810191909152601854604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015611b7f57600080fd5b505afa158015611b93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bb79190611dd4565b81600181518110611bca57611bca612162565b6001600160a01b039283166020918202929092010152601854611bf091309116846111f6565b60185460405163791ac94760e01b81526001600160a01b039091169063791ac94790611c29908590600090869030904290600401612065565b600060405180830381600087803b158015611c4357600080fd5b505af1158015611c57573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051611c8c929190612044565b60405180910390a15050565b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015611cce573d6000803e3d6000fd5b505050565b601854611ceb9030906001600160a01b0316846111f6565b6018546001600160a01b031663f305d719823085600080611d146000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b158015611d7757600080fd5b505af1158015611d8b573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611db09190611f05565b5050505050565b600060208284031215611dc957600080fd5b8135610a3081612178565b600060208284031215611de657600080fd5b8151610a3081612178565b60008060408385031215611e0457600080fd5b8235611e0f81612178565b91506020830135611e1f81612178565b809150509250929050565b600080600060608486031215611e3f57600080fd5b8335611e4a81612178565b92506020840135611e5a81612178565b929592945050506040919091013590565b60008060408385031215611e7e57600080fd5b8235611e8981612178565b915060208301358015158114611e1f57600080fd5b60008060408385031215611eb157600080fd5b8235611ebc81612178565b946020939093013593505050565b600060208284031215611edc57600080fd5b5035919050565b60008060408385031215611ef657600080fd5b50508035926020909101359150565b600080600060608486031215611f1a57600080fd5b8351925060208401519150604084015190509250925092565b60008060008060008060c08789031215611f4c57600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b600081518084526020808501945080840160005b83811015611faf5781516001600160a01b031687529582019590820190600101611f8a565b509495945050505050565b600060208083528351808285015260005b81811015611fe757858101830151858201604001528201611fcb565b81811115611ff9576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b82815260406020820152600061205d6040830184611f76565b949350505050565b85815284602082015260a06040820152600061208460a0830186611f76565b6001600160a01b0394909416606083015250608001529392505050565b600082198211156120b4576120b461214c565b500190565b6000826120d657634e487b7160e01b600052601260045260246000fd5b500490565b60008160001904831182151516156120f5576120f561214c565b500290565b60008282101561210c5761210c61214c565b500390565b600181811c9082168061212557607f821691505b6020821081141561214657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b038116811461218d57600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122040848e20cdae7533fd4b71cc0c4fe590383a6b3b99caf1c6979be48d4f997ebb64736f6c63430008050033

Deployed Bytecode Sourcemap

14075:13637:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20902:370;;;;;;;;;;-1:-1:-1;20902:370:0;;;;;:::i;:::-;;:::i;:::-;;19832:1058;;;;;;;;;;-1:-1:-1;19832:1058:0;;;;;:::i;:::-;;:::i;17411:83::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18706:161;;;;;;;;;;-1:-1:-1;18706:161:0;;;;;:::i;:::-;;:::i;:::-;;;5378:14:1;;5371:22;5353:41;;5341:2;5326:18;18706:161:0;5308:92:1;15490:41:0;;;;;;;;;;-1:-1:-1;15490:41:0;;;;-1:-1:-1;;;;;15490:41:0;;;;;;-1:-1:-1;;;;;4024:32:1;;;4006:51;;3994:2;3979:18;15490:41:0;3961:102:1;17688:100:0;;;;;;;;;;-1:-1:-1;17768:12:0;;17688:100;;;11459:25:1;;;11447:2;11432:18;17688:100:0;11414:76:1;22651:313:0;;;;;;;;;;-1:-1:-1;22651:313:0;;;;;:::i;:::-;;:::i;17597:83::-;;;;;;;;;;-1:-1:-1;17663:9:0;;17597:83;;17663:9;;;;12561:36:1;;12549:2;12534:18;17597:83:0;12516:87:1;18074:218:0;;;;;;;;;;-1:-1:-1;18074:218:0;;;;;:::i;:::-;;:::i;19700:124::-;;;;;;;;;;-1:-1:-1;19700:124:0;;;;;:::i;:::-;;:::i;14976:45::-;;;;;;;;;;-1:-1:-1;14976:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;21282:139;;;;;;;;;;-1:-1:-1;21282:139:0;;;;;:::i;:::-;;:::i;14805:50::-;;;;;;;;;;-1:-1:-1;14805:50:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;21567:807;;;;;;;;;;-1:-1:-1;21567:807:0;;;;;:::i;:::-;;:::i;17796:119::-;;;;;;;;;;-1:-1:-1;17796:119:0;;;;;:::i;:::-;-1:-1:-1;;;;;17889:18:0;17862:7;17889:18;;;:9;:18;;;;;;;17796:119;14389:50;;;;;;;;;;;;;;;;14447:48;;;;;;;;;;;;;;;;15401:33;;;;;;;;;;;;;;;;19220:129;;;;;;;;;;-1:-1:-1;19220:129:0;;;;;:::i;:::-;;:::i;14921:48::-;;;;;;;;;;-1:-1:-1;14921:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;5608:79;;;;;;;;;;-1:-1:-1;5646:7:0;5673:6;-1:-1:-1;;;;;5673:6:0;5608:79;;5833:145;;;;;;;;;;;;;:::i;17502:87::-;;;;;;;;;;;;;:::i;18300:269::-;;;;;;;;;;-1:-1:-1;18300:269:0;;;;;:::i;:::-;;:::i;22476:167::-;;;;;;;;;;-1:-1:-1;22476:167:0;;;;;:::i;:::-;;:::i;19500:188::-;;;;;;;;;;-1:-1:-1;19500:188:0;;;;;:::i;:::-;;:::i;15538:26::-;;;;;;;;;;-1:-1:-1;15538:26:0;;;;-1:-1:-1;;;;;15538:26:0;;;14862:52;;;;;;;;;;-1:-1:-1;14862:52:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;14575:99;;;;;;;;;;-1:-1:-1;14575:99:0;;;;-1:-1:-1;;;;;14575:99:0;;;17923:143;;;;;;;;;;-1:-1:-1;17923:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;18031:18:0;;;18004:7;18031:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;17923:143;19357:135;;;;;;;;;;-1:-1:-1;19357:135:0;;;;;:::i;:::-;;:::i;15362:32::-;;;;;;;;;;;;;;;;5986:244;;;;;;;;;;-1:-1:-1;5986:244:0;;;;;:::i;:::-;;:::i;20902:370::-;5742:6;;-1:-1:-1;;;;;5742:6:0;193:10;5742:22;5734:67;;;;-1:-1:-1;;;5734:67:0;;;;;;;:::i;:::-;;;;;;;;;21032:12:::1;::::0;:21:::1;::::0;21049:3:::1;21032:16;:21::i;:::-;21018:9;:35;;21010:81;;;::::0;-1:-1:-1;;;21010:81:0;;8775:2:1;21010:81:0::1;::::0;::::1;8757:21:1::0;8814:2;8794:18;;;8787:30;8853:34;8833:18;;;8826:62;-1:-1:-1;;;8904:18:1;;;8897:31;8945:19;;21010:81:0::1;8747:223:1::0;21010:81:0::1;21129:12;::::0;:21:::1;::::0;21146:3:::1;21129:16;:21::i;:::-;21110:15;:40;;21102:88;;;::::0;-1:-1:-1;;;21102:88:0;;8014:2:1;21102:88:0::1;::::0;::::1;7996:21:1::0;8053:2;8033:18;;;8026:30;8092:34;8072:18;;;8065:62;-1:-1:-1;;;8143:18:1;;;8136:34;8187:19;;21102:88:0::1;7986:226:1::0;21102:88:0::1;21201:12;:24:::0;;;;21236:10:::1;:28:::0;20902:370::o;19832:1058::-;5742:6;;-1:-1:-1;;;;;5742:6:0;193:10;5742:22;5734:67;;;;-1:-1:-1;;;5734:67:0;;;;;;;:::i;:::-;20145:1:::1;20099:42;:18:::0;20122;20099:22:::1;:42::i;:::-;:47;;20091:86;;;::::0;-1:-1:-1;;;20091:86:0;;11160:2:1;20091:86:0::1;::::0;::::1;11142:21:1::0;11199:2;11179:18;;;11172:30;11238:28;11218:18;;;11211:56;11284:18;;20091:86:0::1;11132:176:1::0;20091:86:0::1;20244:1;20196:44;:19:::0;20220;20196:23:::1;:44::i;:::-;:49;;20188:88;;;::::0;-1:-1:-1;;;20188:88:0;;11160:2:1;20188:88:0::1;::::0;::::1;11142:21:1::0;11199:2;11179:18;;;11172:30;11238:28;11218:18;;;11211:56;11284:18;;20188:88:0::1;11132:176:1::0;20188:88:0::1;20339:2;20295:40;:17:::0;20317;20295:21:::1;:40::i;:::-;:46;;20287:86;;;::::0;-1:-1:-1;;;20287:86:0;;8419:2:1;20287:86:0::1;::::0;::::1;8401:21:1::0;8458:2;8438:18;;;8431:30;8497:29;8477:18;;;8470:57;8544:18;;20287:86:0::1;8391:177:1::0;20287:86:0::1;20386:16;:37:::0;;;20434:16:::1;:37:::0;;;20502:38:::1;20405:18:::0;20453;20502:20:::1;:38::i;:::-;20482:17;:58:::0;20553:17:::1;:39:::0;;;20603:17:::1;:39:::0;;;20674:40:::1;20573:19:::0;20623;20674:21:::1;:40::i;:::-;20653:18;:61:::0;20727:15:::1;:35:::0;;;20773:15:::1;:35:::0;;;20846:36:::1;20745:17:::0;20791;20846:19:::1;:36::i;:::-;20819:24;:63:::0;-1:-1:-1;;;;;;19832:1058:0:o;17411:83::-;17448:13;17481:5;17474:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17411:83;:::o;18706:161::-;18781:4;18798:39;193:10;18821:7;18830:6;18798:8;:39::i;:::-;-1:-1:-1;18855:4:0;18706:161;;;;;:::o;22651:313::-;22749:4;22766:36;22776:6;22784:9;22795:6;22766:9;:36::i;:::-;-1:-1:-1;22813:121:0;22822:6;193:10;22844:89;22882:6;22844:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22844:19:0;;;;;;:11;:19;;;;;;;;193:10;22844:33;;;;;;;;;;:37;:89::i;:::-;22813:8;:121::i;:::-;-1:-1:-1;22952:4:0;22651:313;;;;;;:::o;18074:218::-;193:10;18162:4;18211:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;18211:34:0;;;;;;;;;;18162:4;;18179:83;;18202:7;;18211:50;;18250:10;18211:38;:50::i;19700:124::-;5742:6;;-1:-1:-1;;;;;5742:6:0;193:10;5742:22;5734:67;;;;-1:-1:-1;;;5734:67:0;;;;;;;:::i;:::-;19782:23:::1;:34:::0;19700:124::o;21282:139::-;5742:6;;-1:-1:-1;;;;;5742:6:0;193:10;5742:22;5734:67;;;;-1:-1:-1;;;5734:67:0;;;;;;;:::i;:::-;21369:22:::1;:44:::0;;-1:-1:-1;;;;;;21369:44:0::1;-1:-1:-1::0;;;;;21369:44:0;;;::::1;::::0;;;::::1;::::0;;21282:139::o;21567:807::-;21647:22;5742:6;;-1:-1:-1;;;;;5742:6:0;193:10;5742:22;5734:67;;;;-1:-1:-1;;;5734:67:0;;;;;;;:::i;:::-;21684:35:::1;21741:16;21684:74;;21807:16;-1:-1:-1::0;;;;;21807:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;21789:53:0::1;;21851:4;21858:16;-1:-1:-1::0;;;;;21858:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21789:93;::::0;-1:-1:-1;;;;;;21789:93:0::1;::::0;;;;;;-1:-1:-1;;;;;4522:15:1;;;21789:93:0::1;::::0;::::1;4504:34:1::0;4574:15;;4554:18;;;4547:43;4439:18;;21789:93:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21772:110:::0;-1:-1:-1;;;;;;21898:28:0;::::1;21895:225;;22012:16;-1:-1:-1::0;;;;;22012:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;21994:74:0::1;;22077:4;22084:16;-1:-1:-1::0;;;;;22084:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21994:114;::::0;-1:-1:-1;;;;;;21994:114:0::1;::::0;;;;;;-1:-1:-1;;;;;4522:15:1;;;21994:114:0::1;::::0;::::1;4504:34:1::0;4574:15;;4554:18;;;4547:43;4439:18;;21994:114:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21977:131;;21895:225;22132:11;:28:::0;;-1:-1:-1;;;;;;22132:28:0;;::::1;-1:-1:-1::0;;;;;22132:28:0;;::::1;::::0;;::::1;::::0;;22194:15:::1;:34:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;-1:-1:-1;22266:41:0;;;:19:::1;:41;::::0;;;;;;;:48;;-1:-1:-1;;22266:48:0;;::::1;-1:-1:-1::0;22266:48:0;;::::1;::::0;;;22346:11;;;;::::1;22325:34:::0;;:12:::1;:34:::0;;;;;:41;;;;::::1;::::0;;::::1;::::0;;22132:28;22146:14;-1:-1:-1;21567:807:0:o;19220:129::-;5742:6;;-1:-1:-1;;;;;5742:6:0;193:10;5742:22;5734:67;;;;-1:-1:-1;;;5734:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19309:21:0;;;::::1;;::::0;;;:12:::1;:21;::::0;;;;:32;;-1:-1:-1;;19309:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;19220:129::o;5833:145::-;5742:6;;-1:-1:-1;;;;;5742:6:0;193:10;5742:22;5734:67;;;;-1:-1:-1;;;5734:67:0;;;;;;;:::i;:::-;5937:1:::1;5921:6:::0;;5900:40:::1;::::0;-1:-1:-1;;;;;5921:6:0;;::::1;::::0;5900:40:::1;::::0;5937:1;;5900:40:::1;5968:1;5951:19:::0;;-1:-1:-1;;;;;;5951:19:0::1;::::0;;5833:145::o;17502:87::-;17541:13;17574:7;17567:14;;;;;:::i;18300:269::-;18393:4;18410:129;193:10;18433:7;18442:96;18481:15;18442:96;;;;;;;;;;;;;;;;;193:10;18442:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;18442:34:0;;;;;;;;;;;;:38;:96::i;22476:167::-;22554:4;22571:42;193:10;22595:9;22606:6;22571:9;:42::i;19500:188::-;5742:6;;-1:-1:-1;;;;;5742:6:0;193:10;5742:22;5734:67;;;;-1:-1:-1;;;5734:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19601:23:0;;::::1;;::::0;;;:15:::1;:23;::::0;;;;;;;:32;;;::::1;;-1:-1:-1::0;;19601:32:0;;::::1;::::0;::::1;::::0;;;19644:19:::1;:27:::0;;;;;;:36;;;;::::1;;::::0;;19500:188::o;19357:135::-;5742:6;;-1:-1:-1;;;;;5742:6:0;193:10;5742:22;5734:67;;;;-1:-1:-1;;;5734:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19447:26:0;;;::::1;;::::0;;;:17:::1;:26;::::0;;;;:37;;-1:-1:-1;;19447:37:0::1;::::0;::::1;;::::0;;;::::1;::::0;;19357:135::o;5986:244::-;5742:6;;-1:-1:-1;;;;;5742:6:0;193:10;5742:22;5734:67;;;;-1:-1:-1;;;5734:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6075:22:0;::::1;6067:73;;;::::0;-1:-1:-1;;;6067:73:0;;6848:2:1;6067:73:0::1;::::0;::::1;6830:21:1::0;6887:2;6867:18;;;6860:30;6926:34;6906:18;;;6899:62;-1:-1:-1;;;6977:18:1;;;6970:36;7023:19;;6067:73:0::1;6820:228:1::0;6067:73:0::1;6177:6;::::0;;6156:38:::1;::::0;-1:-1:-1;;;;;6156:38:0;;::::1;::::0;6177:6;::::1;::::0;6156:38:::1;::::0;::::1;6205:6;:17:::0;;-1:-1:-1;;;;;;6205:17:0::1;-1:-1:-1::0;;;;;6205:17:0;;;::::1;::::0;;;::::1;::::0;;5986:244::o;1838:132::-;1896:7;1923:39;1927:1;1930;1923:39;;;;;;;;;;;;;;;;;:3;:39::i;1047:181::-;1105:7;;1137:5;1141:1;1137;:5;:::i;:::-;1125:17;;1166:1;1161;:6;;1153:46;;;;-1:-1:-1;;;1153:46:0;;7658:2:1;1153:46:0;;;7640:21:1;7697:2;7677:18;;;7670:30;7736:29;7716:18;;;7709:57;7783:18;;1153:46:0;7630:177:1;18875:337:0;-1:-1:-1;;;;;18968:19:0;;18960:68;;;;-1:-1:-1;;;18960:68:0;;10755:2:1;18960:68:0;;;10737:21:1;10794:2;10774:18;;;10767:30;10833:34;10813:18;;;10806:62;-1:-1:-1;;;10884:18:1;;;10877:34;10928:19;;18960:68:0;10727:226:1;18960:68:0;-1:-1:-1;;;;;19047:21:0;;19039:68;;;;-1:-1:-1;;;19039:68:0;;7255:2:1;19039:68:0;;;7237:21:1;7294:2;7274:18;;;7267:30;7333:34;7313:18;;;7306:62;-1:-1:-1;;;7384:18:1;;;7377:32;7426:19;;19039:68:0;7227:224:1;19039:68:0;-1:-1:-1;;;;;19120:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;19172:32;;11459:25:1;;;19172:32:0;;11432:18:1;19172:32:0;;;;;;;18875:337;;;:::o;22972:1711::-;23059:4;-1:-1:-1;;;;;23084:20:0;;23076:70;;;;-1:-1:-1;;;23076:70:0;;10349:2:1;23076:70:0;;;10331:21:1;10388:2;10368:18;;;10361:30;10427:34;10407:18;;;10400:62;-1:-1:-1;;;10478:18:1;;;10471:35;10523:19;;23076:70:0;10321:227:1;23076:70:0;-1:-1:-1;;;;;23165:23:0;;23157:71;;;;-1:-1:-1;;;23157:71:0;;6444:2:1;23157:71:0;;;6426:21:1;6483:2;6463:18;;;6456:30;6522:34;6502:18;;;6495:62;-1:-1:-1;;;6573:18:1;;;6566:33;6616:19;;23157:71:0;6416:225:1;23157:71:0;23250:16;;-1:-1:-1;;;23250:16:0;;;;23247:1429;;;23300:41;23315:6;23323:9;23334:6;23300:14;:41::i;:::-;23293:48;;;;23247:1429;-1:-1:-1;;;;;23397:23:0;;;;;;:15;:23;;;;;;;;23396:24;:55;;;;-1:-1:-1;;;;;;23425:26:0;;;;;;:15;:26;;;;;;;;23424:27;23396:55;23393:170;;;23490:12;;23480:6;:22;;23472:75;;;;-1:-1:-1;;;23472:75:0;;9177:2:1;23472:75:0;;;9159:21:1;9216:2;9196:18;;;9189:30;9255:34;9235:18;;;9228:62;-1:-1:-1;;;9306:18:1;;;9299:38;9354:19;;23472:75:0;9149:230:1;23472:75:0;23640:4;23591:28;17889:18;;;:9;:18;;;;;;23716:23;;23692:47;;;;;;;23772:44;;-1:-1:-1;23800:16:0;;-1:-1:-1;;;23800:16:0;;;;23799:17;23772:44;:69;;;;-1:-1:-1;;;;;;23821:20:0;;;;;;:12;:20;;;;;;;;23820:21;23772:69;:94;;;;-1:-1:-1;23845:21:0;;-1:-1:-1;;;23845:21:0;;;;23772:94;23768:305;;;23904:25;;-1:-1:-1;;;23904:25:0;;;;23901:97;;;23975:23;;23952:46;;23901:97;24017:36;24032:20;24017:14;:36::i;:::-;24109:53;;;;;;;;;;;-1:-1:-1;;;24109:53:0;;;;;;;;-1:-1:-1;;;;;24109:17:0;;-1:-1:-1;24109:17:0;;;:9;:17;;;;;;;;:53;;24131:6;;24109:21;:53::i;:::-;-1:-1:-1;;;;;24089:17:0;;;;;;:9;:17;;;;;;;;:73;;;;24202:17;:25;;;;;;;;;:57;;-1:-1:-1;;;;;;24231:28:0;;;;;;:17;:28;;;;;;;;24202:57;24201:148;;24315:34;24323:6;24331:9;24342:6;24315:7;:34::i;:::-;24201:148;;;24306:6;24201:148;24369:16;;24179:170;;-1:-1:-1;;;;24369:16:0;;;;:51;;;;-1:-1:-1;;;;;;24390:30:0;;;;;;:19;:30;;;;;;;;24389:31;24369:51;24366:133;;;24488:10;;24447:37;24472:11;24447:20;24457:9;-1:-1:-1;;;;;17889:18:0;17862:7;17889:18;;;:9;:18;;;;;;;17796:119;24447:20;:24;;:37::i;:::-;:51;;24439:60;;;;;;-1:-1:-1;;;;;24539:20:0;;;;;;:9;:20;;;;;;:37;;24564:11;24539:24;:37::i;:::-;-1:-1:-1;;;;;24516:20:0;;;;;;;:9;:20;;;;;;;:60;;;;24598:40;;;;;;;;;;24626:11;11459:25:1;;11447:2;11432:18;;11414:76;24598:40:0;;;;;;;;24660:4;24653:11;;;;;;;1380:192;1466:7;1502:12;1494:6;;;;1486:29;;;;-1:-1:-1;;;1486:29:0;;;;;;;;:::i;:::-;-1:-1:-1;1526:9:0;1538:5;1542:1;1538;:5;:::i;:::-;1526:17;1380:192;-1:-1:-1;;;;;1380:192:0:o;1978:278::-;2064:7;2099:12;2092:5;2084:28;;;;-1:-1:-1;;;2084:28:0;;;;;;;;:::i;:::-;-1:-1:-1;2123:9:0;2135:5;2139:1;2135;:5;:::i;24691:330::-;24821:53;;;;;;;;;;;-1:-1:-1;;;24821:53:0;;;;;;;;-1:-1:-1;;;;;24821:17:0;;24784:4;24821:17;;;:9;:17;;;;;;;:53;;24843:6;;24821:21;:53::i;:::-;-1:-1:-1;;;;;24801:17:0;;;;;;;:9;:17;;;;;;:73;;;;24908:20;;;;;;;:32;;24933:6;24908:24;:32::i;:::-;-1:-1:-1;;;;;24885:20:0;;;;;;;:9;:20;;;;;;;:55;;;;24956:35;;;;;;;;;;24984:6;11459:25:1;;11447:2;11432:18;;11414:76;24956:35:0;;;;;;;;-1:-1:-1;25009:4:0;24691:330;;;;;:::o;25029:849::-;16159:16;:23;;-1:-1:-1;;;;16159:23:0;-1:-1:-1;;;16159:23:0;;;25166:24:::1;::::0;25145:15:::1;::::0;16159:23;;25133:65:::1;::::0;25196:1:::1;::::0;25133:58:::1;::::0;;;:7;;:11:::1;:28::i;:::-;:32:::0;::::1;:58::i;:65::-;25111:87:::0;-1:-1:-1;25209:21:0::1;25233:24;:7:::0;25111:87;25233:11:::1;:24::i;:::-;25209:48;;25270:31;25287:13;25270:16;:31::i;:::-;25422:15;::::0;25337:21:::1;::::0;25312:22:::1;::::0;25393:52:::1;::::0;25422:22:::1;::::0;25442:1:::1;25422:19;:22::i;:::-;25393:24;::::0;;:28:::1;:52::i;:::-;25371:74;;25466:26;25495:59;25552:1;25495:52;25535:11;25495:35;25514:15;;25495:14;:18;;:35;;;;:::i;:59::-;25466:88:::0;-1:-1:-1;25567:26:0::1;25596:38;:14:::0;25466:88;25596:18:::1;:38::i;:::-;25567:67:::0;-1:-1:-1;25650:22:0;;25647:104:::1;;25708:22;::::0;25687:64:::1;::::0;-1:-1:-1;;;;;25708:22:0::1;25732:18:::0;25687:20:::1;:64::i;:::-;25790:1;25769:18;:22;:41;;;;;25809:1;25795:11;:15;25769:41;25766:104;;;25825:45;25838:11;25851:18;25825:12;:45::i;:::-;-1:-1:-1::0;;16205:16:0;:24;;-1:-1:-1;;;;16205:24:0;;;-1:-1:-1;;;;;25029:849:0:o;27085:622::-;-1:-1:-1;;;;;27246:20:0;;27171:7;27246:20;;;:12;:20;;;;;;27171:7;;27246:20;;27243:223;;;27295:38;27329:3;27295:29;27306:17;;27295:6;:10;;:29;;;;:::i;:38::-;27283:50;;27243:223;;;-1:-1:-1;;;;;27363:23:0;;;;;;:12;:23;;;;;;;;27360:106;;;27415:39;27450:3;27415:30;27426:18;;27415:6;:10;;:30;;;;:::i;:39::-;27403:51;;27360:106;27489:13;;27486:173;;27564:4;27546:24;;;;:9;:24;;;;;;:39;;27575:9;27546:28;:39::i;:::-;27537:4;27519:24;;;;:9;:24;;;;;;;:66;;;;27605:42;;-1:-1:-1;;;;;27605:42:0;;;;;;;27637:9;11459:25:1;;11447:2;11432:18;;11414:76;27605:42:0;;;;;;;;27486:173;27678:21;:6;27689:9;27678:10;:21::i;1580:250::-;1638:7;1662:6;1658:47;;-1:-1:-1;1692:1:0;1685:8;;1658:47;1717:9;1729:5;1733:1;1729;:5;:::i;:::-;1717:17;-1:-1:-1;1762:1:0;1753:5;1757:1;1717:17;1753:5;:::i;:::-;:10;1745:56;;;;-1:-1:-1;;;1745:56:0;;9586:2:1;1745:56:0;;;9568:21:1;9625:2;9605:18;;;9598:30;9664:34;9644:18;;;9637:62;-1:-1:-1;;;9715:18:1;;;9708:31;9756:19;;1745:56:0;9558:223:1;1236:136:0;1294:7;1321:43;1325:1;1328;1321:43;;;;;;;;;;;;;;;;;:3;:43::i;25890:666::-;26040:16;;;26054:1;26040:16;;;;;;;;26016:21;;26040:16;;;;;;;;;;-1:-1:-1;26040:16:0;26016:40;;26085:4;26067;26072:1;26067:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;26067:23:0;;;:7;;;;;;;;;;:23;;;;26111:15;;:22;;;-1:-1:-1;;;26111:22:0;;;;:15;;;;;:20;;:22;;;;;26067:7;;26111:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26101:4;26106:1;26101:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;26101:32:0;;;:7;;;;;;;;;:32;26178:15;;26146:62;;26163:4;;26178:15;26196:11;26146:8;:62::i;:::-;26247:15;;:240;;-1:-1:-1;;;26247:240:0;;-1:-1:-1;;;;;26247:15:0;;;;:66;;:240;;26328:11;;26247:15;;26398:4;;26425;;26461:15;;26247:240;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26513:35;26530:11;26543:4;26513:35;;;;;;;:::i;:::-;;;;;;;;25945:611;25890:666;:::o;21429:126::-;21521:26;;-1:-1:-1;;;;;21521:18:0;;;:26;;;;;21540:6;;21521:26;;;;21540:6;21521:18;:26;;;;;;;;;;;;;;;;;;;;;21429:126;;:::o;26564:513::-;26744:15;;26712:62;;26729:4;;-1:-1:-1;;;;;26744:15:0;26762:11;26712:8;:62::i;:::-;26817:15;;-1:-1:-1;;;;;26817:15:0;:31;26856:9;26889:4;26909:11;26817:15;;27021:7;5646;5673:6;-1:-1:-1;;;;;5673:6:0;;5608:79;27021:7;26817:252;;;;;;-1:-1:-1;;;;;;26817:252:0;;;-1:-1:-1;;;;;4960:15:1;;;26817:252:0;;;4942:34:1;4992:18;;;4985:34;;;;5035:18;;;5028:34;;;;5078:18;;;5071:34;5142:15;;;5121:19;;;5114:44;27043:15:0;5174:19:1;;;5167:35;4876:19;;26817:252:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;26564:513;;:::o;14:247:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:2;;;142:1;139;132:12;94:2;181:9;168:23;200:31;225:5;200:31;:::i;266:251::-;336:6;389:2;377:9;368:7;364:23;360:32;357:2;;;405:1;402;395:12;357:2;437:9;431:16;456:31;481:5;456:31;:::i;522:388::-;590:6;598;651:2;639:9;630:7;626:23;622:32;619:2;;;667:1;664;657:12;619:2;706:9;693:23;725:31;750:5;725:31;:::i;:::-;775:5;-1:-1:-1;832:2:1;817:18;;804:32;845:33;804:32;845:33;:::i;:::-;897:7;887:17;;;609:301;;;;;:::o;915:456::-;992:6;1000;1008;1061:2;1049:9;1040:7;1036:23;1032:32;1029:2;;;1077:1;1074;1067:12;1029:2;1116:9;1103:23;1135:31;1160:5;1135:31;:::i;:::-;1185:5;-1:-1:-1;1242:2:1;1227:18;;1214:32;1255:33;1214:32;1255:33;:::i;:::-;1019:352;;1307:7;;-1:-1:-1;;;1361:2:1;1346:18;;;;1333:32;;1019:352::o;1376:416::-;1441:6;1449;1502:2;1490:9;1481:7;1477:23;1473:32;1470:2;;;1518:1;1515;1508:12;1470:2;1557:9;1544:23;1576:31;1601:5;1576:31;:::i;:::-;1626:5;-1:-1:-1;1683:2:1;1668:18;;1655:32;1725:15;;1718:23;1706:36;;1696:2;;1756:1;1753;1746:12;1797:315;1865:6;1873;1926:2;1914:9;1905:7;1901:23;1897:32;1894:2;;;1942:1;1939;1932:12;1894:2;1981:9;1968:23;2000:31;2025:5;2000:31;:::i;:::-;2050:5;2102:2;2087:18;;;;2074:32;;-1:-1:-1;;;1884:228:1:o;2117:180::-;2176:6;2229:2;2217:9;2208:7;2204:23;2200:32;2197:2;;;2245:1;2242;2235:12;2197:2;-1:-1:-1;2268:23:1;;2187:110;-1:-1:-1;2187:110:1:o;2302:248::-;2370:6;2378;2431:2;2419:9;2410:7;2406:23;2402:32;2399:2;;;2447:1;2444;2437:12;2399:2;-1:-1:-1;;2470:23:1;;;2540:2;2525:18;;;2512:32;;-1:-1:-1;2389:161:1:o;2555:306::-;2643:6;2651;2659;2712:2;2700:9;2691:7;2687:23;2683:32;2680:2;;;2728:1;2725;2718:12;2680:2;2757:9;2751:16;2741:26;;2807:2;2796:9;2792:18;2786:25;2776:35;;2851:2;2840:9;2836:18;2830:25;2820:35;;2670:191;;;;;:::o;2866:523::-;2970:6;2978;2986;2994;3002;3010;3063:3;3051:9;3042:7;3038:23;3034:33;3031:2;;;3080:1;3077;3070:12;3031:2;-1:-1:-1;;3103:23:1;;;3173:2;3158:18;;3145:32;;-1:-1:-1;3224:2:1;3209:18;;3196:32;;3275:2;3260:18;;3247:32;;-1:-1:-1;3326:3:1;3311:19;;3298:33;;-1:-1:-1;3378:3:1;3363:19;3350:33;;-1:-1:-1;3021:368:1;-1:-1:-1;3021:368:1:o;3394:461::-;3447:3;3485:5;3479:12;3512:6;3507:3;3500:19;3538:4;3567:2;3562:3;3558:12;3551:19;;3604:2;3597:5;3593:14;3625:1;3635:195;3649:6;3646:1;3643:13;3635:195;;;3714:13;;-1:-1:-1;;;;;3710:39:1;3698:52;;3770:12;;;;3805:15;;;;3746:1;3664:9;3635:195;;;-1:-1:-1;3846:3:1;;3455:400;-1:-1:-1;;;;;3455:400:1:o;5640:597::-;5752:4;5781:2;5810;5799:9;5792:21;5842:6;5836:13;5885:6;5880:2;5869:9;5865:18;5858:34;5910:1;5920:140;5934:6;5931:1;5928:13;5920:140;;;6029:14;;;6025:23;;6019:30;5995:17;;;6014:2;5991:26;5984:66;5949:10;;5920:140;;;6078:6;6075:1;6072:13;6069:2;;;6148:1;6143:2;6134:6;6123:9;6119:22;6115:31;6108:42;6069:2;-1:-1:-1;6221:2:1;6200:15;-1:-1:-1;;6196:29:1;6181:45;;;;6228:2;6177:54;;5761:476;-1:-1:-1;;;5761:476:1:o;9786:356::-;9988:2;9970:21;;;10007:18;;;10000:30;10066:34;10061:2;10046:18;;10039:62;10133:2;10118:18;;9960:182::o;11495:332::-;11702:6;11691:9;11684:25;11745:2;11740;11729:9;11725:18;11718:30;11665:4;11765:56;11817:2;11806:9;11802:18;11794:6;11765:56;:::i;:::-;11757:64;11674:153;-1:-1:-1;;;;11674:153:1:o;11832:582::-;12131:6;12120:9;12113:25;12174:6;12169:2;12158:9;12154:18;12147:34;12217:3;12212:2;12201:9;12197:18;12190:31;12094:4;12238:57;12290:3;12279:9;12275:19;12267:6;12238:57;:::i;:::-;-1:-1:-1;;;;;12331:32:1;;;;12326:2;12311:18;;12304:60;-1:-1:-1;12395:3:1;12380:19;12373:35;12230:65;12103:311;-1:-1:-1;;;12103:311:1:o;12608:128::-;12648:3;12679:1;12675:6;12672:1;12669:13;12666:2;;;12685:18;;:::i;:::-;-1:-1:-1;12721:9:1;;12656:80::o;12741:217::-;12781:1;12807;12797:2;;12851:10;12846:3;12842:20;12839:1;12832:31;12886:4;12883:1;12876:15;12914:4;12911:1;12904:15;12797:2;-1:-1:-1;12943:9:1;;12787:171::o;12963:168::-;13003:7;13069:1;13065;13061:6;13057:14;13054:1;13051:21;13046:1;13039:9;13032:17;13028:45;13025:2;;;13076:18;;:::i;:::-;-1:-1:-1;13116:9:1;;13015:116::o;13136:125::-;13176:4;13204:1;13201;13198:8;13195:2;;;13209:18;;:::i;:::-;-1:-1:-1;13246:9:1;;13185:76::o;13266:380::-;13345:1;13341:12;;;;13388;;;13409:2;;13463:4;13455:6;13451:17;13441:27;;13409:2;13516;13508:6;13505:14;13485:18;13482:38;13479:2;;;13562:10;13557:3;13553:20;13550:1;13543:31;13597:4;13594:1;13587:15;13625:4;13622:1;13615:15;13479:2;;13321:325;;;:::o;13651:127::-;13712:10;13707:3;13703:20;13700:1;13693:31;13743:4;13740:1;13733:15;13767:4;13764:1;13757:15;13783:127;13844:10;13839:3;13835:20;13832:1;13825:31;13875:4;13872:1;13865:15;13899:4;13896:1;13889:15;14047:131;-1:-1:-1;;;;;14122:31:1;;14112:42;;14102:2;;14168:1;14165;14158:12;14102:2;14092:86;:::o

Swarm Source

ipfs://40848e20cdae7533fd4b71cc0c4fe590383a6b3b99caf1c6979be48d4f997ebb
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.