ETH Price: $3,395.85 (+0.78%)

Token

FreeRoss (ROSS)
 

Overview

Max Total Supply

420,690,000 ROSS

Holders

392

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
2,103,990.283094858966709923 ROSS

Value
$0.00
0x39bF5c92Ce1F06706640Df6d48E3EDBBce2738Af
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Meet $ROSS, a new type of memecoin (culture coin anyone?) created to support one of the TRUE degen OG’s and pioneers of this space, Ross Ulbricht.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
FreeRoss

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-05-11
*/

/*
       
print 
*/

// SPDX-License-Identifier: MIT
pragma solidity 0.8.17;

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

    function _msgData() internal view virtual returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

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

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

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}

contract ERC20 is Context, IERC20, IERC20Metadata{
    using SafeMath for uint256;
    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;
    uint256 internal _totalSupply;
    string private _name;
    string private _symbol;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

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

    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

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

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

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

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

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

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

    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,
                "BEP20: decreased allowance below zero"));
        return true;
    }

    function _transfer(address sender, address recipient, uint256 amount) internal virtual {
        require(sender != address(0), "BEP20: transfer from the zero address");
        require(recipient != address(0), "BEP20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        _balances[sender] = _balances[sender].sub(amount,"BEP20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "BEP20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }

    function _approve(address owner, address spender, uint256 amount) internal virtual {
        require(owner != address(0), "BEP20: approve from the zero address");
        require(spender != address(0), "BEP20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {}
}

abstract 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 renounceOwnership() 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 IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint256 value);
    event Transfer(address indexed from, address indexed to, uint256 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 (uint256);
    function balanceOf(address owner) external view returns (uint256);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 value) external returns (bool);
    function transfer(address to, uint256 value) external returns (bool);
    function transferFrom(address from, address to, uint256 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 (uint256);

    function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r,
                    bytes32 s) external;

    event Swap(address indexed sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out,
               uint256 amount1Out, address indexed to);
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint256);
    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 (uint256);
    function price1CumulativeLast() external view returns (uint256);
    function kLast() external view returns (uint256);

    function swap(uint256 amount0Out, uint256 amount1Out, address to, bytes calldata data) external;

    function skim(address to) external;
    function sync() external;
    function initialize(address, address) external;
}

interface IUniswapV2Factory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

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

    function addLiquidity(address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired,
                          uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline)
                          external returns (uint256 amountA, uint256 amountB, uint256 liquidity);

    function addLiquidityETH(address token, uint256 amountTokenDesired, uint256 amountTokenMin,
                             uint256 amountETHMin, address to, uint256 deadline)
                             external payable returns (uint256 amountToken, uint256 amountETH,
                             uint256 liquidity);

    function removeLiquidity(address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin,
                             uint256 amountBMin, address to, uint256 deadline) 
                             external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETH(address token, uint256 liquidity, uint256 amountTokenMin,
                                uint256 amountETHMin, address to, uint256 deadline) 
                                external returns (uint256 amountToken, uint256 amountETH);

    function removeLiquidityWithPermit(address tokenA, address tokenB, uint256 liquidity,
                                       uint256 amountAMin, uint256 amountBMin, address to,
                                       uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s) 
                                       external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETHWithPermit(address token, uint256 liquidity, uint256 amountTokenMin,
                                          uint256 amountETHMin, address to, uint256 deadline,
                                          bool approveMax, uint8 v, bytes32 r, bytes32 s) 
                                          external returns (uint256 amountToken, uint256 amountETH);

    function swapExactTokensForTokens(uint256 amountIn, uint256 amountOutMin, address[] calldata path,
                                      address to, uint256 deadline) 
                                      external returns (uint256[] memory amounts);

    function swapTokensForExactTokens(uint256 amountOut, uint256 amountInMax, address[] calldata path,
                                      address to, uint256 deadline) 
                                      external returns (uint256[] memory amounts);

    function swapExactETHForTokens(uint256 amountOutMin, address[] calldata path, address to,
                                   uint256 deadline) 
                                   external payable returns (uint256[] memory amounts);

    function swapTokensForExactETH(uint256 amountOut, uint256 amountInMax, address[] calldata path,
                                   address to, uint256 deadline) 
                                   external returns (uint256[] memory amounts);

    function swapExactTokensForETH(uint256 amountIn, uint256 amountOutMin, address[] calldata path,
                                   address to, uint256 deadline) 
                                   external returns (uint256[] memory amounts);

    function swapETHForExactTokens(uint256 amountOut, address[] calldata path, address to,
                                   uint256 deadline) 
                                   external payable returns (uint256[] memory amounts);

    function quote(uint256 amountA, uint256 reserveA, uint256 reserveB) 
                   external pure returns (uint256 amountB);

    function getAmountOut(uint256 amountIn, uint256 reserveIn, uint256 reserveOut) 
                          external pure returns (uint256 amountOut);

    function getAmountIn(uint256 amountOut, uint256 reserveIn, uint256 reserveOut) 
                         external pure returns (uint256 amountIn);

    function getAmountsOut(uint256 amountIn, address[] calldata path)
                           external view returns (uint256[] memory amounts);

    function getAmountsIn(uint256 amountOut, address[] calldata path)
                          external view returns (uint256[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(address token, uint256 liquidity,
        uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline) 
        external returns (uint256 amountETH);

    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(address token, uint256 liquidity,
        uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax,
        uint8 v, bytes32 r, bytes32 s) external returns (uint256 amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(uint256 amountIn, uint256 amountOutMin,
        address[] calldata path, address to, uint256 deadline) external;

    function swapExactETHForTokensSupportingFeeOnTransferTokens(uint256 amountOutMin,
        address[] calldata path, address to, uint256 deadline) external payable;

    function swapExactTokensForETHSupportingFeeOnTransferTokens(uint256 amountIn, uint256 amountOutMin,
        address[] calldata path, address to, uint256 deadline) external;
}

contract FreeRoss is ERC20, Ownable { 
    using SafeMath for uint256;

    IUniswapV2Router02 public uniswapV2Router;

    address public uniswapV2Pair;
    address public DEAD = 0x000000000000000000000000000000000000dEaD;
    bool private swapping;
    bool public tradingEnabled = false;

    uint256 internal sellAmount = 1;
    uint256 internal buyAmount = 1;

    uint256 private totalSellFees;
    uint256 private totalBuyFees;

    address payable public marketingWallet; 
    address payable public DonationWallet;


    uint256 public maxWallet;
    uint256 public maxTX;
    uint256 public swapTokensAtAmount;
    uint256 public sellMarketingFees;
    uint256 public sellBurnFee;
    uint256 public buyMarketingFees;
    uint256 public buyBurnFee;
    uint256 public buyDonationFee;
    uint256 public sellDonationFee;


    bool public swapAndLiquifyEnabled = false;

    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public automatedMarketMakerPairs;
    mapping(address => bool) private canTransferBeforeTradingIsEnabled;

    bool public limitsInEffect = true; 
    uint256 private gasPriceLimit; // MAX GWEI
    mapping(address => uint256) private _holderLastTransferBlock; // FOR 1TX PER BLOCK
    mapping(address => uint256) private _holderLastTransferTimestamp; // FOR COOLDOWN
    uint256 public launchblock; // FOR DEADBLOCKS
    uint256 public delay;
    uint256 private deadblocks;
    uint256 public launchtimestamp; 
    uint256 public cooldowntimer = 30; // DEFAULT COOLDOWN TIMER

    event EnableSwapAndLiquify(bool enabled);
    event SetPreSaleWallet(address wallet);
    event updateMarketingWallet(address wallet);
    event updateDonationWallet(address wallet);
    event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress);
    event TradingEnabled();

    event UpdateFees(uint256 sellMarketingFees, uint256 sellBurnFee, uint256 buyMarketingFees,
                     uint256 buyBurnFee, uint256 buyDonationFee, uint256 sellDonationFee);

    event Airdrop(address holder, uint256 amount);
    event ExcludeFromFees(address indexed account, bool isExcluded);
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event SwapAndLiquify(uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity);
    event SendDividends(uint256 opAmount, bool success);

    constructor() ERC20("FreeRoss", "ROSS") { 
        marketingWallet = payable(0x4e660b34c1174F6F70efc063e83A97838ee37FfF); 
        DonationWallet = payable(0x823743E15E780e7c78d2da526cF26420daF33e0e); 
        address router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;

        
        buyMarketingFees = 1;
        sellMarketingFees = 1;
        buyBurnFee = 0;
        sellBurnFee = 0;
        buyDonationFee = 2;
        sellDonationFee = 2;


        
        totalBuyFees = buyMarketingFees.add(buyDonationFee);
        totalSellFees = sellMarketingFees.add(sellDonationFee);

        uniswapV2Router = IUniswapV2Router02(router);
        uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(
                address(this), uniswapV2Router.WETH());

        _setAutomatedMarketMakerPair(uniswapV2Pair, true);

        _isExcludedFromFees[address(this)] = true;
        _isExcludedFromFees[msg.sender] = true;
        _isExcludedFromFees[marketingWallet] = true;

        uint256 totalSupply = (420_690_000) * (10**18); // TOTAL SUPPLY IS SET HERE
        _mint(owner(), totalSupply); // only time internal mint function is ever called is to create supply
        swapTokensAtAmount = _totalSupply / 1000;
        canTransferBeforeTradingIsEnabled[owner()] = true;
        canTransferBeforeTradingIsEnabled[address(this)] = true;
    }

    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    receive() external payable {}

    function enableTrading(uint256 initialMaxGwei, uint256 initialMaxWallet, uint256 initialMaxTX,
                           uint256 setDelay) external onlyOwner {
        initialMaxWallet = initialMaxWallet * (10**18);
        initialMaxTX = initialMaxTX * (10**18);
        require(!tradingEnabled);
        require(initialMaxWallet >= _totalSupply / 1000,"cannot set below 0.1%");
        require(initialMaxTX >= _totalSupply / 1000,"cannot set below 0.1%");
        maxWallet = initialMaxWallet;
        maxTX = initialMaxTX;
        gasPriceLimit = initialMaxGwei * 1 gwei;
        tradingEnabled = true;
        launchblock = block.number;
        launchtimestamp = block.timestamp;
        delay = setDelay;
        emit TradingEnabled();
    }
    
    function setMarketingWallet(address wallet) external onlyOwner {
        _isExcludedFromFees[wallet] = true;
        marketingWallet = payable(wallet);
        emit updateMarketingWallet(wallet);
    }

    function setDonationWallet(address wallet) external onlyOwner {
        _isExcludedFromFees[wallet] = true;
        DonationWallet = payable(wallet);
        emit updateDonationWallet(wallet);
    }


    
    function setExcludeFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    function setCanTransferBefore(address wallet, bool enable) external onlyOwner {
        canTransferBeforeTradingIsEnabled[wallet] = enable;
    }

    function setLimitsInEffect(bool value) external onlyOwner {
        limitsInEffect = value;
    }

      function setmaxWallet(uint256 value) external onlyOwner {
        value = value * (10**18);
        require(value >= _totalSupply / 1000, "max wallet cannot be set to less than 0.1%");
        maxWallet = value;
    }

        function setmaxTX(uint256 value) external onlyOwner {
        value = value * (10**18);
        require(value >= _totalSupply / 1000, "max tx cannot be set to less than 0.1%");
        maxTX = value;
    }

    function setGasPriceLimit(uint256 GWEI) external onlyOwner {
        require(GWEI >= 50, "can never be set below 50");
        gasPriceLimit = GWEI * 1 gwei;
    }

    function setcooldowntimer(uint256 value) external onlyOwner {
        require(value <= 300, "cooldown timer cannot exceed 5 minutes");
        cooldowntimer = value;
    }

    

    function Sweep() external onlyOwner {
        uint256 amountETH = address(this).balance;
        payable(msg.sender).transfer(amountETH);
    }

    function setSwapTriggerAmount(uint256 amount) public onlyOwner {
        swapTokensAtAmount = amount * (10**18);
    }

    function enableSwapAndLiquify(bool enabled) public onlyOwner {
        require(swapAndLiquifyEnabled != enabled);
        swapAndLiquifyEnabled = enabled;
        emit EnableSwapAndLiquify(enabled);
    }

    function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner {
        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function transferAdmin(address newOwner) public onlyOwner {
        _isExcludedFromFees[newOwner] = true;
        canTransferBeforeTradingIsEnabled[newOwner] = true;
        transferOwnership(newOwner);
    }

    function updateFees(uint256 marketingBuy, uint256 marketingSell, uint256 burnBuy,
                        uint256 burnSell, uint256 DonationBuy, uint256 DonationSell) public onlyOwner {

        buyMarketingFees = marketingBuy;
        buyBurnFee = burnBuy;
        sellMarketingFees = marketingSell;
        sellBurnFee = burnSell;
        buyDonationFee = DonationBuy;
        sellDonationFee = DonationSell;


        totalSellFees = sellMarketingFees.add(sellDonationFee);
        totalBuyFees = buyMarketingFees.add(buyDonationFee);


        require(burnBuy <= 1 && burnSell <= 1, "Burn Fees cannot exceed 1%");
        require(totalSellFees <= 4 && totalBuyFees <= 4, "total fees cannot be higher than 4%");

        emit UpdateFees(sellMarketingFees, sellBurnFee, sellDonationFee, buyMarketingFees,
                        buyBurnFee, buyDonationFee);
    }

    function isExcludedFromFees(address account) public view returns (bool) {
        return _isExcludedFromFees[account];
    }

    function _transfer(address from, address to, uint256 amount) internal override {

        
        require(from != address(0), "IBEP20: transfer from the zero address");
        require(to != address(0), "IBEP20: transfer to the zero address");

        uint256 marketingFees;
        uint256 burnFee;
        uint256 DonationFee;
 

        if (!canTransferBeforeTradingIsEnabled[from]) {
            require(tradingEnabled, "Trading has not yet been enabled");          
        }

        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        } 

        if (to == DEAD) {
            super._transfer(from, to, amount);
            _totalSupply = _totalSupply.sub(amount);
            return;
        }
        
        else if (
            !swapping && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]) {
            bool isSelling = automatedMarketMakerPairs[to];
            if (isSelling) {
                marketingFees = sellMarketingFees;
                burnFee = sellBurnFee;
                DonationFee = sellDonationFee;
 

                 if (limitsInEffect) {
                require(block.timestamp >= _holderLastTransferTimestamp[tx.origin] + cooldowntimer,
                        "cooldown period active");
                require(amount <= maxTX,"above max transaction limit");
                _holderLastTransferTimestamp[tx.origin] = block.timestamp;

                }
            } 
            
            else {
                marketingFees = buyMarketingFees;
                burnFee = buyBurnFee;
                DonationFee = buyDonationFee;
 

               if (limitsInEffect) {
                require(block.timestamp > launchtimestamp + delay,"you shall not pass");
                require(tx.gasprice <= gasPriceLimit,"Gas price exceeds limit.");
                require(_holderLastTransferBlock[tx.origin] != block.number,"Too many TX in block");
                require(amount <= maxTX,"above max transaction limit");
                _holderLastTransferBlock[tx.origin] = block.number;
            }

           
                uint256 contractBalanceRecipient = balanceOf(to);
                require(contractBalanceRecipient + amount <= maxWallet,"Exceeds maximum wallet token amount." );
            
            }

            uint256 totalFees = marketingFees.add(DonationFee);

            uint256 contractTokenBalance = balanceOf(address(this));

            bool canSwap = contractTokenBalance >= swapTokensAtAmount;

            if (canSwap && isSelling) {
                swapping = true;
             
                uint256 swapBalance = balanceOf(address(this));
                swapAndSendDividends(swapBalance);
                buyAmount = 1;
                sellAmount = 1;
                swapping = false;
            }

            uint256 fees = amount.mul(totalFees).div(100);
            uint256 burntokens = amount.mul(burnFee).div(100);


            amount = amount.sub(fees + burntokens) ;

            if (isSelling) {
                sellAmount = sellAmount.add(fees);
            } else {
                buyAmount = buyAmount.add(fees);
            }

            super._transfer(from, address(this), fees);

            if (burntokens > 0) {
                super._transfer(from, DEAD, burntokens);
                _totalSupply = _totalSupply.sub(burntokens);
            }


           
        }

        super._transfer(from, to, amount);
        
    }

    function swapAndLiquify(uint256 tokens) private {
        uint256 half = tokens.div(2);
        uint256 otherHalf = tokens.sub(half);
        uint256 initialBalance = address(this).balance;
        swapTokensForEth(half); // <- this breaks the ETH -> HATE swap when swap+liquify is triggered
        uint256 newBalance = address(this).balance.sub(initialBalance);
        addLiquidity(otherHalf, newBalance);
        emit SwapAndLiquify(half, newBalance, otherHalf);
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    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 forceSwapAndSendDividends(uint256 tokens) public onlyOwner {
        tokens = tokens * (10**18);
        uint256 totalAmount = buyAmount.add(sellAmount);
        uint256 fromBuy = tokens.mul(buyAmount).div(totalAmount);
        uint256 fromSell = tokens.mul(sellAmount).div(totalAmount);

        swapAndSendDividends(tokens);

        buyAmount = buyAmount.sub(fromBuy);
        sellAmount = sellAmount.sub(fromSell);
    }

    // TAX PAYOUT CODE 
    function swapAndSendDividends(uint256 tokens) private {
        if (tokens == 0) {
            return;
        }
        swapTokensForEth(tokens);

        bool success = true;
        bool successOp1 = true;
        
        uint256 _completeFees = sellMarketingFees.add(sellDonationFee) + buyMarketingFees.add(buyDonationFee);

        uint256 feePortions;
        if (_completeFees > 0) {
            feePortions = address(this).balance.div(_completeFees);
        }
        uint256 marketingPayout = buyMarketingFees.add(sellMarketingFees) * feePortions;
        uint256 DonationPayout = buyDonationFee.add(sellDonationFee) * feePortions;
        
        if (marketingPayout > 0) {
            (success, ) = address(marketingWallet).call{value: marketingPayout}("");
        }
        
        if (DonationPayout > 0) {
            (successOp1, ) = address(DonationWallet).call{value: DonationPayout}("");
        }

        emit SendDividends(
            marketingPayout + DonationPayout,
            success && successOp1
        );
    }

    function airdropToWallets(
        address[] memory airdropWallets,
        uint256[] memory amount
    ) external onlyOwner {
        require(airdropWallets.length == amount.length, "Arrays must be the same length");
        require(airdropWallets.length <= 200, "Wallets list length must be <= 200");
        for (uint256 i = 0; i < airdropWallets.length; i++) {
            address wallet = airdropWallets[i];
            uint256 airdropAmount = amount[i] * (10**18);
            super._transfer(msg.sender, wallet, airdropAmount);
        }
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"holder","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Airdrop","type":"event"},{"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":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"EnableSwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","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":"opAmount","type":"uint256"},{"indexed":false,"internalType":"bool","name":"success","type":"bool"}],"name":"SendDividends","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"wallet","type":"address"}],"name":"SetPreSaleWallet","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":[],"name":"TradingEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"sellMarketingFees","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellBurnFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyMarketingFees","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyBurnFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyDonationFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellDonationFee","type":"uint256"}],"name":"UpdateFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"wallet","type":"address"}],"name":"updateDonationWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"wallet","type":"address"}],"name":"updateMarketingWallet","type":"event"},{"inputs":[],"name":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DonationWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Sweep","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"airdropWallets","type":"address[]"},{"internalType":"uint256[]","name":"amount","type":"uint256[]"}],"name":"airdropToWallets","outputs":[],"stateMutability":"nonpayable","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":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDonationFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cooldowntimer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[],"name":"delay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"enableSwapAndLiquify","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"initialMaxGwei","type":"uint256"},{"internalType":"uint256","name":"initialMaxWallet","type":"uint256"},{"internalType":"uint256","name":"initialMaxTX","type":"uint256"},{"internalType":"uint256","name":"setDelay","type":"uint256"}],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"forceSwapAndSendDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchblock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchtimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellDonationFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"bool","name":"enable","type":"bool"}],"name":"setCanTransferBefore","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"setDonationWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"setExcludeFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"GWEI","type":"uint256"}],"name":"setGasPriceLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"setLimitsInEffect","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setSwapTriggerAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setcooldowntimer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setmaxTX","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setmaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferAdmin","outputs":[],"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":"uniswapV2Pair","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":[{"internalType":"uint256","name":"marketingBuy","type":"uint256"},{"internalType":"uint256","name":"marketingSell","type":"uint256"},{"internalType":"uint256","name":"burnBuy","type":"uint256"},{"internalType":"uint256","name":"burnSell","type":"uint256"},{"internalType":"uint256","name":"DonationBuy","type":"uint256"},{"internalType":"uint256","name":"DonationSell","type":"uint256"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405260088054600161ff0160a01b03191661dead17905560016009819055600a8190556018805460ff19908116909155601c80549091169091179055601e6024553480156200005057600080fd5b506040518060400160405280600881526020016746726565526f737360c01b81525060405180604001604052806004815260200163524f535360e01b8152508160039081620000a09190620006d3565b506004620000af8282620006d3565b5050506000620000c46200046660201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600d8054734e660b34c1174f6f70efc063e83a97838ee37fff6001600160a01b031991821617909155600e805473823743e15e780e7c78d2da526cf26420daf33e0e921691909117905560016014819055601281905560006015819055601355600260168190556017819055737a250d5630b4cf539739df2c5dacb4c659f2488d91620001ab916200046a602090811b6200190a17901c565b600c81905550620001cf6017546012546200046a60201b6200190a1790919060201c565b600b55600680546001600160a01b0319166001600160a01b0383169081179091556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa1580156200022c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200025291906200079f565b6001600160a01b031663c9c6539630600660009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002b5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002db91906200079f565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000329573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200034f91906200079f565b600780546001600160a01b0319166001600160a01b039290921691821790556200037b906001620004da565b306000908152601960205260408082208054600160ff1991821681179092553384528284208054821683179055600d546001600160a01b0316845291909220805490911690911790556b015bfc9298de952e2f400000620003ef620003e86005546001600160a01b031690565b826200052e565b6103e8600254620004019190620007ca565b6011556001601b60006200041d6005546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff19958616179055308152601b909252902080549091166001179055506200080f9050565b3390565b600080620004798385620007ed565b905083811015620004d15760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064015b60405180910390fd5b90505b92915050565b6001600160a01b0382166000818152601a6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b038216620005865760405162461bcd60e51b815260206004820152601f60248201527f42455032303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620004c8565b620005a2816002546200046a60201b6200190a1790919060201c565b6002556001600160a01b03821660009081526020818152604090912054620005d59183906200190a6200046a821b17901c565b6001600160a01b038316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200065a57607f821691505b6020821081036200067b57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200062a57600081815260208120601f850160051c81016020861015620006aa5750805b601f850160051c820191505b81811015620006cb57828155600101620006b6565b505050505050565b81516001600160401b03811115620006ef57620006ef6200062f565b620007078162000700845462000645565b8462000681565b602080601f8311600181146200073f5760008415620007265750858301515b600019600386901b1c1916600185901b178555620006cb565b600085815260208120601f198616915b8281101562000770578886015182559484019460019091019084016200074f565b50858210156200078f5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208284031215620007b257600080fd5b81516001600160a01b0381168114620004d157600080fd5b600082620007e857634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115620004d457634e487b7160e01b600052601160045260246000fd5b612d13806200081f6000396000f3fe6080604052600436106103545760003560e01c806370a08231116101c6578063b4942988116100f7578063e14a93d611610095578063ebae7c1c1161006f578063ebae7c1c146109b5578063f2fde38b146109cb578063f8b45b05146109eb578063fc6b151c14610a0157600080fd5b8063e14a93d614610969578063e2f4560514610989578063e71dc3f51461099f57600080fd5b8063d5e37251116100d1578063d5e37251146108cd578063d6a51466146108ed578063dbe47fe91461090d578063dd62ed3e1461092357600080fd5b8063b494298814610867578063b62496f51461087d578063b74e3b11146108ad57600080fd5b806395451c29116101645780639a7a23d61161013e5780639a7a23d6146107f1578063a457c2d714610811578063a9059cbb14610831578063adb873bd1461085157600080fd5b806395451c29146107a657806395d89b41146107bc578063992c58e4146107d157600080fd5b806375f0a874116101a057806375f0a874146107325780637fdde05c146107525780638c3c82b2146107725780638da5cb5b1461078857600080fd5b806370a08231146106c7578063715018a6146106fd57806375829def1461071257600080fd5b806349bd5a5e116102a05780635a96cdd71161023e57806366236b4a1161021857806366236b4a1461065c578063679ca6e91461067c5780636a42b8f81461069c5780637088fb7f146106b257600080fd5b80635a96cdd7146105fc5780635d098b381461061c5780635eee4bae1461063c57600080fd5b80634ada218b1161027a5780634ada218b146105765780634fbee193146105975780635124f874146105d0578063536bcd8a146105e657600080fd5b806349bd5a5e146105225780634a62bb65146105425780634a74bb021461055c57600080fd5b80631694505e1161030d5780632307b441116102e75780632307b441146104a657806323b872dd146104c6578063313ce567146104e6578063395093511461050257600080fd5b80631694505e1461045157806318160ddd146104715780631d7b1fb41461049057600080fd5b806303fd2a451461036057806305ca5f081461039d57806306fdde03146103bf57806308dfe8a5146103e15780630923160214610401578063095ea7b31461042157600080fd5b3661035b57005b600080fd5b34801561036c57600080fd5b50600854610380906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156103a957600080fd5b506103bd6103b8366004612718565b610a21565b005b3480156103cb57600080fd5b506103d4610af2565b6040516103949190612731565b3480156103ed57600080fd5b506103bd6103fc3660046127a9565b610b84565b34801561040d57600080fd5b506103bd61041c366004612718565b610c0d565b34801561042d57600080fd5b5061044161043c3660046127de565b610c9c565b6040519015158152602001610394565b34801561045d57600080fd5b50600654610380906001600160a01b031681565b34801561047d57600080fd5b506002545b604051908152602001610394565b34801561049c57600080fd5b5061048260245481565b3480156104b257600080fd5b506103bd6104c13660046128e0565b610cb3565b3480156104d257600080fd5b506104416104e13660046129a2565b610e0b565b3480156104f257600080fd5b5060405160128152602001610394565b34801561050e57600080fd5b5061044161051d3660046127de565b610e74565b34801561052e57600080fd5b50600754610380906001600160a01b031681565b34801561054e57600080fd5b50601c546104419060ff1681565b34801561056857600080fd5b506018546104419060ff1681565b34801561058257600080fd5b5060085461044190600160a81b900460ff1681565b3480156105a357600080fd5b506104416105b23660046129e3565b6001600160a01b031660009081526019602052604090205460ff1690565b3480156105dc57600080fd5b5061048260145481565b3480156105f257600080fd5b5061048260175481565b34801561060857600080fd5b506103bd6106173660046129e3565b610eaa565b34801561062857600080fd5b506103bd6106373660046129e3565b610f41565b34801561064857600080fd5b506103bd610657366004612718565b610fd1565b34801561066857600080fd5b506103bd610677366004612718565b611013565b34801561068857600080fd5b506103bd610697366004612a00565b6110c4565b3480156106a857600080fd5b5061048260215481565b3480156106be57600080fd5b506103bd611101565b3480156106d357600080fd5b506104826106e23660046129e3565b6001600160a01b031660009081526020819052604090205490565b34801561070957600080fd5b506103bd61115e565b34801561071e57600080fd5b506103bd61072d3660046129e3565b6111d2565b34801561073e57600080fd5b50600d54610380906001600160a01b031681565b34801561075e57600080fd5b506103bd61076d3660046127a9565b611243565b34801561077e57600080fd5b5061048260235481565b34801561079457600080fd5b506005546001600160a01b0316610380565b3480156107b257600080fd5b5061048260125481565b3480156107c857600080fd5b506103d4611298565b3480156107dd57600080fd5b506103bd6107ec366004612a1b565b6112a7565b3480156107fd57600080fd5b506103bd61080c3660046127a9565b611446565b34801561081d57600080fd5b5061044161082c3660046127de565b61147a565b34801561083d57600080fd5b5061044161084c3660046127de565b6114c9565b34801561085d57600080fd5b5061048260135481565b34801561087357600080fd5b5061048260205481565b34801561088957600080fd5b506104416108983660046129e3565b601a6020526000908152604090205460ff1681565b3480156108b957600080fd5b506103bd6108c8366004612718565b6114d6565b3480156108d957600080fd5b506103bd6108e8366004612a00565b611566565b3480156108f957600080fd5b50600e54610380906001600160a01b031681565b34801561091957600080fd5b5061048260165481565b34801561092f57600080fd5b5061048261093e366004612a5e565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561097557600080fd5b506103bd610984366004612a97565b6115e8565b34801561099557600080fd5b5061048260115481565b3480156109ab57600080fd5b5061048260155481565b3480156109c157600080fd5b5061048260105481565b3480156109d757600080fd5b506103bd6109e63660046129e3565b61176a565b3480156109f757600080fd5b50610482600f5481565b348015610a0d57600080fd5b506103bd610a1c366004612718565b611855565b6005546001600160a01b03163314610a545760405162461bcd60e51b8152600401610a4b90612ac9565b60405180910390fd5b610a6681670de0b6b3a7640000612b14565b90506000610a81600954600a5461190a90919063ffffffff16565b90506000610aa482610a9e600a548661197090919063ffffffff16565b906119f2565b90506000610ac183610a9e6009548761197090919063ffffffff16565b9050610acc84611a34565b600a54610ad99083611bee565b600a55600954610ae99082611bee565b60095550505050565b606060038054610b0190612b2b565b80601f0160208091040260200160405190810160405280929190818152602001828054610b2d90612b2b565b8015610b7a5780601f10610b4f57610100808354040283529160200191610b7a565b820191906000526020600020905b815481529060010190602001808311610b5d57829003601f168201915b5050505050905090565b6005546001600160a01b03163314610bae5760405162461bcd60e51b8152600401610a4b90612ac9565b6001600160a01b038216600081815260196020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314610c375760405162461bcd60e51b8152600401610a4b90612ac9565b6032811015610c885760405162461bcd60e51b815260206004820152601960248201527f63616e206e65766572206265207365742062656c6f77203530000000000000006044820152606401610a4b565b610c9681633b9aca00612b14565b601d5550565b6000610ca9338484611c30565b5060015b92915050565b6005546001600160a01b03163314610cdd5760405162461bcd60e51b8152600401610a4b90612ac9565b8051825114610d2e5760405162461bcd60e51b815260206004820152601e60248201527f417272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610a4b565b60c882511115610d8b5760405162461bcd60e51b815260206004820152602260248201527f57616c6c657473206c697374206c656e677468206d757374206265203c3d2032604482015261030360f41b6064820152608401610a4b565b60005b8251811015610e06576000838281518110610dab57610dab612b65565b602002602001015190506000838381518110610dc957610dc9612b65565b6020026020010151670de0b6b3a7640000610de49190612b14565b9050610df1338383611d55565b50508080610dfe90612b7b565b915050610d8e565b505050565b6000610e18848484611ed8565b610e6a8433610e6585604051806060016040528060288152602001612c6b602891396001600160a01b038a166000908152600160209081526040808320338452909152902054919061250a565b611c30565b5060019392505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610ca9918590610e65908661190a565b6005546001600160a01b03163314610ed45760405162461bcd60e51b8152600401610a4b90612ac9565b6001600160a01b038116600081815260196020908152604091829020805460ff19166001179055600e80546001600160a01b0319168417905590519182527f2a088da61c87ce48f816be3118449d451e4e587ef240986420a8763855c3e07b91015b60405180910390a150565b6005546001600160a01b03163314610f6b5760405162461bcd60e51b8152600401610a4b90612ac9565b6001600160a01b038116600081815260196020908152604091829020805460ff19166001179055600d80546001600160a01b0319168417905590519182527faacebbe32c0dbd14817cfb53e3cc8be68c7e133928317145be50a0d86c2244339101610f36565b6005546001600160a01b03163314610ffb5760405162461bcd60e51b8152600401610a4b90612ac9565b61100d81670de0b6b3a7640000612b14565b60115550565b6005546001600160a01b0316331461103d5760405162461bcd60e51b8152600401610a4b90612ac9565b61104f81670de0b6b3a7640000612b14565b90506103e86002546110619190612b94565b8110156110bf5760405162461bcd60e51b815260206004820152602660248201527f6d61782074782063616e6e6f742062652073657420746f206c657373207468616044820152656e20302e312560d01b6064820152608401610a4b565b601055565b6005546001600160a01b031633146110ee5760405162461bcd60e51b8152600401610a4b90612ac9565b601c805460ff1916911515919091179055565b6005546001600160a01b0316331461112b5760405162461bcd60e51b8152600401610a4b90612ac9565b6040514790339082156108fc029083906000818181858888f1935050505015801561115a573d6000803e3d6000fd5b5050565b6005546001600160a01b031633146111885760405162461bcd60e51b8152600401610a4b90612ac9565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146111fc5760405162461bcd60e51b8152600401610a4b90612ac9565b6001600160a01b03811660009081526019602090815260408083208054600160ff199182168117909255601b9093529220805490911690911790556112408161176a565b50565b6005546001600160a01b0316331461126d5760405162461bcd60e51b8152600401610a4b90612ac9565b6001600160a01b03919091166000908152601b60205260409020805460ff1916911515919091179055565b606060048054610b0190612b2b565b6005546001600160a01b031633146112d15760405162461bcd60e51b8152600401610a4b90612ac9565b6014869055601584905560128590556013839055601682905560178190556112f9858261190a565b600b5560165460145461130b9161190a565b600c5560018411801590611320575060018311155b61136c5760405162461bcd60e51b815260206004820152601a60248201527f4275726e20466565732063616e6e6f74206578636565642031250000000000006044820152606401610a4b565b6004600b541115801561138257506004600c5411155b6113da5760405162461bcd60e51b815260206004820152602360248201527f746f74616c20666565732063616e6e6f7420626520686967686572207468616e60448201526220342560e81b6064820152608401610a4b565b601254601354601754601454601554601654604080519687526020870195909552938501929092526060840152608083015260a08201527ffb0d6f48717e74b9ad8ae84d152197402ac50bd6431ea28437926861021948ff9060c00160405180910390a1505050505050565b6005546001600160a01b031633146114705760405162461bcd60e51b8152600401610a4b90612ac9565b61115a8282612544565b6000610ca93384610e6585604051806060016040528060258152602001612cb9602591393360009081526001602090815260408083206001600160a01b038d168452909152902054919061250a565b6000610ca9338484611ed8565b6005546001600160a01b031633146115005760405162461bcd60e51b8152600401610a4b90612ac9565b61012c8111156115615760405162461bcd60e51b815260206004820152602660248201527f636f6f6c646f776e2074696d65722063616e6e6f74206578636565642035206d604482015265696e7574657360d01b6064820152608401610a4b565b602455565b6005546001600160a01b031633146115905760405162461bcd60e51b8152600401610a4b90612ac9565b60185481151560ff9091161515036115a757600080fd5b6018805460ff19168215159081179091556040519081527fff5917043f8453af413305b2dbd1ed9748a37df481beb71ba4b9b212a07b9bef90602001610f36565b6005546001600160a01b031633146116125760405162461bcd60e51b8152600401610a4b90612ac9565b61162483670de0b6b3a7640000612b14565b925061163882670de0b6b3a7640000612b14565b600854909250600160a81b900460ff161561165257600080fd5b6103e86002546116629190612b94565b8310156116a95760405162461bcd60e51b815260206004820152601560248201527463616e6e6f74207365742062656c6f7720302e312560581b6044820152606401610a4b565b6103e86002546116b99190612b94565b8210156117005760405162461bcd60e51b815260206004820152601560248201527463616e6e6f74207365742062656c6f7720302e312560581b6044820152606401610a4b565b600f839055601082905561171884633b9aca00612b14565b601d556008805460ff60a81b1916600160a81b179055436020554260235560218190556040517f799663458a5ef2936f7fa0c99b3336c69c25890f82974f04e811e5bb359186c790600090a150505050565b6005546001600160a01b031633146117945760405162461bcd60e51b8152600401610a4b90612ac9565b6001600160a01b0381166117f95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a4b565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0316331461187f5760405162461bcd60e51b8152600401610a4b90612ac9565b61189181670de0b6b3a7640000612b14565b90506103e86002546118a39190612b94565b8110156119055760405162461bcd60e51b815260206004820152602a60248201527f6d61782077616c6c65742063616e6e6f742062652073657420746f206c657373604482015269207468616e20302e312560b01b6064820152608401610a4b565b600f55565b6000806119178385612bb6565b9050838110156119695760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610a4b565b9392505050565b60008260000361198257506000610cad565b600061198e8385612b14565b90508261199b8583612b94565b146119695760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610a4b565b600061196983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612598565b80600003611a3f5750565b611a48816125c6565b6016546014546001918291600091611a60919061190a565b601754601254611a6f9161190a565b611a799190612bb6565b905060008115611a9057611a8d47836119f2565b90505b600081611aaa60125460145461190a90919063ffffffff16565b611ab49190612b14565b9050600082611ad060175460165461190a90919063ffffffff16565b611ada9190612b14565b90508115611b3a57600d546040516001600160a01b03909116908390600081818185875af1925050503d8060008114611b2f576040519150601f19603f3d011682016040523d82523d6000602084013e611b34565b606091505b50909650505b8015611b9857600e546040516001600160a01b03909116908290600081818185875af1925050503d8060008114611b8d576040519150601f19603f3d011682016040523d82523d6000602084013e611b92565b606091505b50909550505b7f31ea026303a62d39c4ad14716f9621f1afe3242309c2ed761d4e241ae4bf2ea9611bc38284612bb6565b878015611bcd5750865b6040805192835290151560208301520160405180910390a150505050505050565b600061196983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061250a565b6001600160a01b038316611c925760405162461bcd60e51b8152602060048201526024808201527f42455032303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a4b565b6001600160a01b038216611cf35760405162461bcd60e51b815260206004820152602260248201527f42455032303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a4b565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316611db95760405162461bcd60e51b815260206004820152602560248201527f42455032303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610a4b565b6001600160a01b038216611e1b5760405162461bcd60e51b815260206004820152602360248201527f42455032303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610a4b565b611e5881604051806060016040528060268152602001612c93602691396001600160a01b038616600090815260208190526040902054919061250a565b6001600160a01b038085166000908152602081905260408082209390935590841681522054611e87908261190a565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611d48565b6001600160a01b038316611f3d5760405162461bcd60e51b815260206004820152602660248201527f4942455032303a207472616e736665722066726f6d20746865207a65726f206160448201526564647265737360d01b6064820152608401610a4b565b6001600160a01b038216611f9f5760405162461bcd60e51b8152602060048201526024808201527f4942455032303a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610a4b565b6001600160a01b0383166000908152601b60205260408120548190819060ff1661201c57600854600160a81b900460ff1661201c5760405162461bcd60e51b815260206004820181905260248201527f54726164696e6720686173206e6f7420796574206265656e20656e61626c65646044820152606401610a4b565b836000036120385761203086866000611d55565b505050505050565b6008546001600160a01b039081169086160361207157612059868686611d55565b6002546120669085611bee565b600255505050505050565b600854600160a01b900460ff161580156120a457506001600160a01b03861660009081526019602052604090205460ff16155b80156120c957506001600160a01b03851660009081526019602052604090205460ff16155b156124ff576001600160a01b0385166000908152601a602052604090205460ff1680156121db57601254601354601754601c54929650909450925060ff16156121d657602454326000908152601f60205260409020546121299190612bb6565b4210156121715760405162461bcd60e51b8152602060048201526016602482015275636f6f6c646f776e20706572696f642061637469766560501b6044820152606401610a4b565b6010548511156121c35760405162461bcd60e51b815260206004820152601b60248201527f61626f7665206d6178207472616e73616374696f6e206c696d697400000000006044820152606401610a4b565b326000908152601f602052604090204290555b6123d9565b601454601554601654601c54929650909450925060ff1615612357576021546023546122079190612bb6565b421161224a5760405162461bcd60e51b8152602060048201526012602482015271796f75207368616c6c206e6f74207061737360701b6044820152606401610a4b565b601d543a111561229c5760405162461bcd60e51b815260206004820152601860248201527f4761732070726963652065786365656473206c696d69742e00000000000000006044820152606401610a4b565b326000908152601e60205260409020544390036122f25760405162461bcd60e51b8152602060048201526014602482015273546f6f206d616e7920545820696e20626c6f636b60601b6044820152606401610a4b565b6010548511156123445760405162461bcd60e51b815260206004820152601b60248201527f61626f7665206d6178207472616e73616374696f6e206c696d697400000000006044820152606401610a4b565b326000908152601e602052604090204390555b6001600160a01b038616600090815260208190526040902054600f5461237d8783612bb6565b11156123d75760405162461bcd60e51b8152602060048201526024808201527f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f6044820152633ab73a1760e11b6064820152608401610a4b565b505b60006123e5858461190a565b30600090815260208190526040902054601154919250908110801590819061240a5750835b15612456576008805460ff60a01b1916600160a01b17905530600090815260208190526040812054905061243d81611a34565b506001600a8190556009556008805460ff60a01b191690555b60006124676064610a9e8b87611970565b9050600061247a6064610a9e8c8b611970565b90506124906124898284612bb6565b8b90611bee565b995085156124ad576009546124a5908361190a565b6009556124be565b600a546124ba908361190a565b600a555b6124c98c3084611d55565b80156124f8576008546124e7908d906001600160a01b031683611d55565b6002546124f49082611bee565b6002555b5050505050505b612030868686611d55565b6000818484111561252e5760405162461bcd60e51b8152600401610a4b9190612731565b50600061253b8486612bc9565b95945050505050565b6001600160a01b0382166000818152601a6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b600081836125b95760405162461bcd60e51b8152600401610a4b9190612731565b50600061253b8486612b94565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106125fb576125fb612b65565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612654573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126789190612bdc565b8160018151811061268b5761268b612b65565b6001600160a01b0392831660209182029290920101526006546126b19130911684611c30565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac947906126ea908590600090869030904290600401612bf9565b600060405180830381600087803b15801561270457600080fd5b505af1158015612030573d6000803e3d6000fd5b60006020828403121561272a57600080fd5b5035919050565b600060208083528351808285015260005b8181101561275e57858101830151858201604001528201612742565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461124057600080fd5b803580151581146127a457600080fd5b919050565b600080604083850312156127bc57600080fd5b82356127c78161277f565b91506127d560208401612794565b90509250929050565b600080604083850312156127f157600080fd5b82356127fc8161277f565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156128495761284961280a565b604052919050565b600067ffffffffffffffff82111561286b5761286b61280a565b5060051b60200190565b600082601f83011261288657600080fd5b8135602061289b61289683612851565b612820565b82815260059290921b840181019181810190868411156128ba57600080fd5b8286015b848110156128d557803583529183019183016128be565b509695505050505050565b600080604083850312156128f357600080fd5b823567ffffffffffffffff8082111561290b57600080fd5b818501915085601f83011261291f57600080fd5b8135602061292f61289683612851565b82815260059290921b8401810191818101908984111561294e57600080fd5b948201945b838610156129755785356129668161277f565b82529482019490820190612953565b9650508601359250508082111561298b57600080fd5b5061299885828601612875565b9150509250929050565b6000806000606084860312156129b757600080fd5b83356129c28161277f565b925060208401356129d28161277f565b929592945050506040919091013590565b6000602082840312156129f557600080fd5b81356119698161277f565b600060208284031215612a1257600080fd5b61196982612794565b60008060008060008060c08789031215612a3457600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b60008060408385031215612a7157600080fd5b8235612a7c8161277f565b91506020830135612a8c8161277f565b809150509250929050565b60008060008060808587031215612aad57600080fd5b5050823594602084013594506040840135936060013592509050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610cad57610cad612afe565b600181811c90821680612b3f57607f821691505b602082108103612b5f57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b600060018201612b8d57612b8d612afe565b5060010190565b600082612bb157634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610cad57610cad612afe565b81810381811115610cad57610cad612afe565b600060208284031215612bee57600080fd5b81516119698161277f565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612c495784516001600160a01b031683529383019391830191600101612c24565b50506001600160a01b0396909616606085015250505060800152939250505056fe42455032303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636542455032303a207472616e7366657220616d6f756e7420657863656564732062616c616e636542455032303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220368389f3b4fa3873a41c79017b64906c6757936c46890785150f8478a124d6bb64736f6c63430008110033

Deployed Bytecode

0x6080604052600436106103545760003560e01c806370a08231116101c6578063b4942988116100f7578063e14a93d611610095578063ebae7c1c1161006f578063ebae7c1c146109b5578063f2fde38b146109cb578063f8b45b05146109eb578063fc6b151c14610a0157600080fd5b8063e14a93d614610969578063e2f4560514610989578063e71dc3f51461099f57600080fd5b8063d5e37251116100d1578063d5e37251146108cd578063d6a51466146108ed578063dbe47fe91461090d578063dd62ed3e1461092357600080fd5b8063b494298814610867578063b62496f51461087d578063b74e3b11146108ad57600080fd5b806395451c29116101645780639a7a23d61161013e5780639a7a23d6146107f1578063a457c2d714610811578063a9059cbb14610831578063adb873bd1461085157600080fd5b806395451c29146107a657806395d89b41146107bc578063992c58e4146107d157600080fd5b806375f0a874116101a057806375f0a874146107325780637fdde05c146107525780638c3c82b2146107725780638da5cb5b1461078857600080fd5b806370a08231146106c7578063715018a6146106fd57806375829def1461071257600080fd5b806349bd5a5e116102a05780635a96cdd71161023e57806366236b4a1161021857806366236b4a1461065c578063679ca6e91461067c5780636a42b8f81461069c5780637088fb7f146106b257600080fd5b80635a96cdd7146105fc5780635d098b381461061c5780635eee4bae1461063c57600080fd5b80634ada218b1161027a5780634ada218b146105765780634fbee193146105975780635124f874146105d0578063536bcd8a146105e657600080fd5b806349bd5a5e146105225780634a62bb65146105425780634a74bb021461055c57600080fd5b80631694505e1161030d5780632307b441116102e75780632307b441146104a657806323b872dd146104c6578063313ce567146104e6578063395093511461050257600080fd5b80631694505e1461045157806318160ddd146104715780631d7b1fb41461049057600080fd5b806303fd2a451461036057806305ca5f081461039d57806306fdde03146103bf57806308dfe8a5146103e15780630923160214610401578063095ea7b31461042157600080fd5b3661035b57005b600080fd5b34801561036c57600080fd5b50600854610380906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156103a957600080fd5b506103bd6103b8366004612718565b610a21565b005b3480156103cb57600080fd5b506103d4610af2565b6040516103949190612731565b3480156103ed57600080fd5b506103bd6103fc3660046127a9565b610b84565b34801561040d57600080fd5b506103bd61041c366004612718565b610c0d565b34801561042d57600080fd5b5061044161043c3660046127de565b610c9c565b6040519015158152602001610394565b34801561045d57600080fd5b50600654610380906001600160a01b031681565b34801561047d57600080fd5b506002545b604051908152602001610394565b34801561049c57600080fd5b5061048260245481565b3480156104b257600080fd5b506103bd6104c13660046128e0565b610cb3565b3480156104d257600080fd5b506104416104e13660046129a2565b610e0b565b3480156104f257600080fd5b5060405160128152602001610394565b34801561050e57600080fd5b5061044161051d3660046127de565b610e74565b34801561052e57600080fd5b50600754610380906001600160a01b031681565b34801561054e57600080fd5b50601c546104419060ff1681565b34801561056857600080fd5b506018546104419060ff1681565b34801561058257600080fd5b5060085461044190600160a81b900460ff1681565b3480156105a357600080fd5b506104416105b23660046129e3565b6001600160a01b031660009081526019602052604090205460ff1690565b3480156105dc57600080fd5b5061048260145481565b3480156105f257600080fd5b5061048260175481565b34801561060857600080fd5b506103bd6106173660046129e3565b610eaa565b34801561062857600080fd5b506103bd6106373660046129e3565b610f41565b34801561064857600080fd5b506103bd610657366004612718565b610fd1565b34801561066857600080fd5b506103bd610677366004612718565b611013565b34801561068857600080fd5b506103bd610697366004612a00565b6110c4565b3480156106a857600080fd5b5061048260215481565b3480156106be57600080fd5b506103bd611101565b3480156106d357600080fd5b506104826106e23660046129e3565b6001600160a01b031660009081526020819052604090205490565b34801561070957600080fd5b506103bd61115e565b34801561071e57600080fd5b506103bd61072d3660046129e3565b6111d2565b34801561073e57600080fd5b50600d54610380906001600160a01b031681565b34801561075e57600080fd5b506103bd61076d3660046127a9565b611243565b34801561077e57600080fd5b5061048260235481565b34801561079457600080fd5b506005546001600160a01b0316610380565b3480156107b257600080fd5b5061048260125481565b3480156107c857600080fd5b506103d4611298565b3480156107dd57600080fd5b506103bd6107ec366004612a1b565b6112a7565b3480156107fd57600080fd5b506103bd61080c3660046127a9565b611446565b34801561081d57600080fd5b5061044161082c3660046127de565b61147a565b34801561083d57600080fd5b5061044161084c3660046127de565b6114c9565b34801561085d57600080fd5b5061048260135481565b34801561087357600080fd5b5061048260205481565b34801561088957600080fd5b506104416108983660046129e3565b601a6020526000908152604090205460ff1681565b3480156108b957600080fd5b506103bd6108c8366004612718565b6114d6565b3480156108d957600080fd5b506103bd6108e8366004612a00565b611566565b3480156108f957600080fd5b50600e54610380906001600160a01b031681565b34801561091957600080fd5b5061048260165481565b34801561092f57600080fd5b5061048261093e366004612a5e565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561097557600080fd5b506103bd610984366004612a97565b6115e8565b34801561099557600080fd5b5061048260115481565b3480156109ab57600080fd5b5061048260155481565b3480156109c157600080fd5b5061048260105481565b3480156109d757600080fd5b506103bd6109e63660046129e3565b61176a565b3480156109f757600080fd5b50610482600f5481565b348015610a0d57600080fd5b506103bd610a1c366004612718565b611855565b6005546001600160a01b03163314610a545760405162461bcd60e51b8152600401610a4b90612ac9565b60405180910390fd5b610a6681670de0b6b3a7640000612b14565b90506000610a81600954600a5461190a90919063ffffffff16565b90506000610aa482610a9e600a548661197090919063ffffffff16565b906119f2565b90506000610ac183610a9e6009548761197090919063ffffffff16565b9050610acc84611a34565b600a54610ad99083611bee565b600a55600954610ae99082611bee565b60095550505050565b606060038054610b0190612b2b565b80601f0160208091040260200160405190810160405280929190818152602001828054610b2d90612b2b565b8015610b7a5780601f10610b4f57610100808354040283529160200191610b7a565b820191906000526020600020905b815481529060010190602001808311610b5d57829003601f168201915b5050505050905090565b6005546001600160a01b03163314610bae5760405162461bcd60e51b8152600401610a4b90612ac9565b6001600160a01b038216600081815260196020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314610c375760405162461bcd60e51b8152600401610a4b90612ac9565b6032811015610c885760405162461bcd60e51b815260206004820152601960248201527f63616e206e65766572206265207365742062656c6f77203530000000000000006044820152606401610a4b565b610c9681633b9aca00612b14565b601d5550565b6000610ca9338484611c30565b5060015b92915050565b6005546001600160a01b03163314610cdd5760405162461bcd60e51b8152600401610a4b90612ac9565b8051825114610d2e5760405162461bcd60e51b815260206004820152601e60248201527f417272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610a4b565b60c882511115610d8b5760405162461bcd60e51b815260206004820152602260248201527f57616c6c657473206c697374206c656e677468206d757374206265203c3d2032604482015261030360f41b6064820152608401610a4b565b60005b8251811015610e06576000838281518110610dab57610dab612b65565b602002602001015190506000838381518110610dc957610dc9612b65565b6020026020010151670de0b6b3a7640000610de49190612b14565b9050610df1338383611d55565b50508080610dfe90612b7b565b915050610d8e565b505050565b6000610e18848484611ed8565b610e6a8433610e6585604051806060016040528060288152602001612c6b602891396001600160a01b038a166000908152600160209081526040808320338452909152902054919061250a565b611c30565b5060019392505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610ca9918590610e65908661190a565b6005546001600160a01b03163314610ed45760405162461bcd60e51b8152600401610a4b90612ac9565b6001600160a01b038116600081815260196020908152604091829020805460ff19166001179055600e80546001600160a01b0319168417905590519182527f2a088da61c87ce48f816be3118449d451e4e587ef240986420a8763855c3e07b91015b60405180910390a150565b6005546001600160a01b03163314610f6b5760405162461bcd60e51b8152600401610a4b90612ac9565b6001600160a01b038116600081815260196020908152604091829020805460ff19166001179055600d80546001600160a01b0319168417905590519182527faacebbe32c0dbd14817cfb53e3cc8be68c7e133928317145be50a0d86c2244339101610f36565b6005546001600160a01b03163314610ffb5760405162461bcd60e51b8152600401610a4b90612ac9565b61100d81670de0b6b3a7640000612b14565b60115550565b6005546001600160a01b0316331461103d5760405162461bcd60e51b8152600401610a4b90612ac9565b61104f81670de0b6b3a7640000612b14565b90506103e86002546110619190612b94565b8110156110bf5760405162461bcd60e51b815260206004820152602660248201527f6d61782074782063616e6e6f742062652073657420746f206c657373207468616044820152656e20302e312560d01b6064820152608401610a4b565b601055565b6005546001600160a01b031633146110ee5760405162461bcd60e51b8152600401610a4b90612ac9565b601c805460ff1916911515919091179055565b6005546001600160a01b0316331461112b5760405162461bcd60e51b8152600401610a4b90612ac9565b6040514790339082156108fc029083906000818181858888f1935050505015801561115a573d6000803e3d6000fd5b5050565b6005546001600160a01b031633146111885760405162461bcd60e51b8152600401610a4b90612ac9565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146111fc5760405162461bcd60e51b8152600401610a4b90612ac9565b6001600160a01b03811660009081526019602090815260408083208054600160ff199182168117909255601b9093529220805490911690911790556112408161176a565b50565b6005546001600160a01b0316331461126d5760405162461bcd60e51b8152600401610a4b90612ac9565b6001600160a01b03919091166000908152601b60205260409020805460ff1916911515919091179055565b606060048054610b0190612b2b565b6005546001600160a01b031633146112d15760405162461bcd60e51b8152600401610a4b90612ac9565b6014869055601584905560128590556013839055601682905560178190556112f9858261190a565b600b5560165460145461130b9161190a565b600c5560018411801590611320575060018311155b61136c5760405162461bcd60e51b815260206004820152601a60248201527f4275726e20466565732063616e6e6f74206578636565642031250000000000006044820152606401610a4b565b6004600b541115801561138257506004600c5411155b6113da5760405162461bcd60e51b815260206004820152602360248201527f746f74616c20666565732063616e6e6f7420626520686967686572207468616e60448201526220342560e81b6064820152608401610a4b565b601254601354601754601454601554601654604080519687526020870195909552938501929092526060840152608083015260a08201527ffb0d6f48717e74b9ad8ae84d152197402ac50bd6431ea28437926861021948ff9060c00160405180910390a1505050505050565b6005546001600160a01b031633146114705760405162461bcd60e51b8152600401610a4b90612ac9565b61115a8282612544565b6000610ca93384610e6585604051806060016040528060258152602001612cb9602591393360009081526001602090815260408083206001600160a01b038d168452909152902054919061250a565b6000610ca9338484611ed8565b6005546001600160a01b031633146115005760405162461bcd60e51b8152600401610a4b90612ac9565b61012c8111156115615760405162461bcd60e51b815260206004820152602660248201527f636f6f6c646f776e2074696d65722063616e6e6f74206578636565642035206d604482015265696e7574657360d01b6064820152608401610a4b565b602455565b6005546001600160a01b031633146115905760405162461bcd60e51b8152600401610a4b90612ac9565b60185481151560ff9091161515036115a757600080fd5b6018805460ff19168215159081179091556040519081527fff5917043f8453af413305b2dbd1ed9748a37df481beb71ba4b9b212a07b9bef90602001610f36565b6005546001600160a01b031633146116125760405162461bcd60e51b8152600401610a4b90612ac9565b61162483670de0b6b3a7640000612b14565b925061163882670de0b6b3a7640000612b14565b600854909250600160a81b900460ff161561165257600080fd5b6103e86002546116629190612b94565b8310156116a95760405162461bcd60e51b815260206004820152601560248201527463616e6e6f74207365742062656c6f7720302e312560581b6044820152606401610a4b565b6103e86002546116b99190612b94565b8210156117005760405162461bcd60e51b815260206004820152601560248201527463616e6e6f74207365742062656c6f7720302e312560581b6044820152606401610a4b565b600f839055601082905561171884633b9aca00612b14565b601d556008805460ff60a81b1916600160a81b179055436020554260235560218190556040517f799663458a5ef2936f7fa0c99b3336c69c25890f82974f04e811e5bb359186c790600090a150505050565b6005546001600160a01b031633146117945760405162461bcd60e51b8152600401610a4b90612ac9565b6001600160a01b0381166117f95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a4b565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0316331461187f5760405162461bcd60e51b8152600401610a4b90612ac9565b61189181670de0b6b3a7640000612b14565b90506103e86002546118a39190612b94565b8110156119055760405162461bcd60e51b815260206004820152602a60248201527f6d61782077616c6c65742063616e6e6f742062652073657420746f206c657373604482015269207468616e20302e312560b01b6064820152608401610a4b565b600f55565b6000806119178385612bb6565b9050838110156119695760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610a4b565b9392505050565b60008260000361198257506000610cad565b600061198e8385612b14565b90508261199b8583612b94565b146119695760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610a4b565b600061196983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612598565b80600003611a3f5750565b611a48816125c6565b6016546014546001918291600091611a60919061190a565b601754601254611a6f9161190a565b611a799190612bb6565b905060008115611a9057611a8d47836119f2565b90505b600081611aaa60125460145461190a90919063ffffffff16565b611ab49190612b14565b9050600082611ad060175460165461190a90919063ffffffff16565b611ada9190612b14565b90508115611b3a57600d546040516001600160a01b03909116908390600081818185875af1925050503d8060008114611b2f576040519150601f19603f3d011682016040523d82523d6000602084013e611b34565b606091505b50909650505b8015611b9857600e546040516001600160a01b03909116908290600081818185875af1925050503d8060008114611b8d576040519150601f19603f3d011682016040523d82523d6000602084013e611b92565b606091505b50909550505b7f31ea026303a62d39c4ad14716f9621f1afe3242309c2ed761d4e241ae4bf2ea9611bc38284612bb6565b878015611bcd5750865b6040805192835290151560208301520160405180910390a150505050505050565b600061196983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061250a565b6001600160a01b038316611c925760405162461bcd60e51b8152602060048201526024808201527f42455032303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a4b565b6001600160a01b038216611cf35760405162461bcd60e51b815260206004820152602260248201527f42455032303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a4b565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316611db95760405162461bcd60e51b815260206004820152602560248201527f42455032303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610a4b565b6001600160a01b038216611e1b5760405162461bcd60e51b815260206004820152602360248201527f42455032303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610a4b565b611e5881604051806060016040528060268152602001612c93602691396001600160a01b038616600090815260208190526040902054919061250a565b6001600160a01b038085166000908152602081905260408082209390935590841681522054611e87908261190a565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611d48565b6001600160a01b038316611f3d5760405162461bcd60e51b815260206004820152602660248201527f4942455032303a207472616e736665722066726f6d20746865207a65726f206160448201526564647265737360d01b6064820152608401610a4b565b6001600160a01b038216611f9f5760405162461bcd60e51b8152602060048201526024808201527f4942455032303a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610a4b565b6001600160a01b0383166000908152601b60205260408120548190819060ff1661201c57600854600160a81b900460ff1661201c5760405162461bcd60e51b815260206004820181905260248201527f54726164696e6720686173206e6f7420796574206265656e20656e61626c65646044820152606401610a4b565b836000036120385761203086866000611d55565b505050505050565b6008546001600160a01b039081169086160361207157612059868686611d55565b6002546120669085611bee565b600255505050505050565b600854600160a01b900460ff161580156120a457506001600160a01b03861660009081526019602052604090205460ff16155b80156120c957506001600160a01b03851660009081526019602052604090205460ff16155b156124ff576001600160a01b0385166000908152601a602052604090205460ff1680156121db57601254601354601754601c54929650909450925060ff16156121d657602454326000908152601f60205260409020546121299190612bb6565b4210156121715760405162461bcd60e51b8152602060048201526016602482015275636f6f6c646f776e20706572696f642061637469766560501b6044820152606401610a4b565b6010548511156121c35760405162461bcd60e51b815260206004820152601b60248201527f61626f7665206d6178207472616e73616374696f6e206c696d697400000000006044820152606401610a4b565b326000908152601f602052604090204290555b6123d9565b601454601554601654601c54929650909450925060ff1615612357576021546023546122079190612bb6565b421161224a5760405162461bcd60e51b8152602060048201526012602482015271796f75207368616c6c206e6f74207061737360701b6044820152606401610a4b565b601d543a111561229c5760405162461bcd60e51b815260206004820152601860248201527f4761732070726963652065786365656473206c696d69742e00000000000000006044820152606401610a4b565b326000908152601e60205260409020544390036122f25760405162461bcd60e51b8152602060048201526014602482015273546f6f206d616e7920545820696e20626c6f636b60601b6044820152606401610a4b565b6010548511156123445760405162461bcd60e51b815260206004820152601b60248201527f61626f7665206d6178207472616e73616374696f6e206c696d697400000000006044820152606401610a4b565b326000908152601e602052604090204390555b6001600160a01b038616600090815260208190526040902054600f5461237d8783612bb6565b11156123d75760405162461bcd60e51b8152602060048201526024808201527f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f6044820152633ab73a1760e11b6064820152608401610a4b565b505b60006123e5858461190a565b30600090815260208190526040902054601154919250908110801590819061240a5750835b15612456576008805460ff60a01b1916600160a01b17905530600090815260208190526040812054905061243d81611a34565b506001600a8190556009556008805460ff60a01b191690555b60006124676064610a9e8b87611970565b9050600061247a6064610a9e8c8b611970565b90506124906124898284612bb6565b8b90611bee565b995085156124ad576009546124a5908361190a565b6009556124be565b600a546124ba908361190a565b600a555b6124c98c3084611d55565b80156124f8576008546124e7908d906001600160a01b031683611d55565b6002546124f49082611bee565b6002555b5050505050505b612030868686611d55565b6000818484111561252e5760405162461bcd60e51b8152600401610a4b9190612731565b50600061253b8486612bc9565b95945050505050565b6001600160a01b0382166000818152601a6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b600081836125b95760405162461bcd60e51b8152600401610a4b9190612731565b50600061253b8486612b94565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106125fb576125fb612b65565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612654573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126789190612bdc565b8160018151811061268b5761268b612b65565b6001600160a01b0392831660209182029290920101526006546126b19130911684611c30565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac947906126ea908590600090869030904290600401612bf9565b600060405180830381600087803b15801561270457600080fd5b505af1158015612030573d6000803e3d6000fd5b60006020828403121561272a57600080fd5b5035919050565b600060208083528351808285015260005b8181101561275e57858101830151858201604001528201612742565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461124057600080fd5b803580151581146127a457600080fd5b919050565b600080604083850312156127bc57600080fd5b82356127c78161277f565b91506127d560208401612794565b90509250929050565b600080604083850312156127f157600080fd5b82356127fc8161277f565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156128495761284961280a565b604052919050565b600067ffffffffffffffff82111561286b5761286b61280a565b5060051b60200190565b600082601f83011261288657600080fd5b8135602061289b61289683612851565b612820565b82815260059290921b840181019181810190868411156128ba57600080fd5b8286015b848110156128d557803583529183019183016128be565b509695505050505050565b600080604083850312156128f357600080fd5b823567ffffffffffffffff8082111561290b57600080fd5b818501915085601f83011261291f57600080fd5b8135602061292f61289683612851565b82815260059290921b8401810191818101908984111561294e57600080fd5b948201945b838610156129755785356129668161277f565b82529482019490820190612953565b9650508601359250508082111561298b57600080fd5b5061299885828601612875565b9150509250929050565b6000806000606084860312156129b757600080fd5b83356129c28161277f565b925060208401356129d28161277f565b929592945050506040919091013590565b6000602082840312156129f557600080fd5b81356119698161277f565b600060208284031215612a1257600080fd5b61196982612794565b60008060008060008060c08789031215612a3457600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b60008060408385031215612a7157600080fd5b8235612a7c8161277f565b91506020830135612a8c8161277f565b809150509250929050565b60008060008060808587031215612aad57600080fd5b5050823594602084013594506040840135936060013592509050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610cad57610cad612afe565b600181811c90821680612b3f57607f821691505b602082108103612b5f57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b600060018201612b8d57612b8d612afe565b5060010190565b600082612bb157634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610cad57610cad612afe565b81810381811115610cad57610cad612afe565b600060208284031215612bee57600080fd5b81516119698161277f565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612c495784516001600160a01b031683529383019391830191600101612c24565b50506001600160a01b0396909616606085015250505060800152939250505056fe42455032303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636542455032303a207472616e7366657220616d6f756e7420657863656564732062616c616e636542455032303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220368389f3b4fa3873a41c79017b64906c6757936c46890785150f8478a124d6bb64736f6c63430008110033

Deployed Bytecode Sourcemap

15378:15788:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15542:64;;;;;;;;;;-1:-1:-1;15542:64:0;;;;-1:-1:-1;;;;;15542:64:0;;;;;;-1:-1:-1;;;;;178:32:1;;;160:51;;148:2;133:18;15542:64:0;;;;;;;;29042:443;;;;;;;;;;-1:-1:-1;29042:443:0;;;;;:::i;:::-;;:::i;:::-;;3261:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;20585:181::-;;;;;;;;;;-1:-1:-1;20585:181:0;;;;;:::i;:::-;;:::i;21488:166::-;;;;;;;;;;-1:-1:-1;21488:166:0;;;;;:::i;:::-;;:::i;4175:169::-;;;;;;;;;;-1:-1:-1;4175:169:0;;;;;:::i;:::-;;:::i;:::-;;;2066:14:1;;2059:22;2041:41;;2029:2;2014:18;4175:169:0;1901:187:1;15457:41:0;;;;;;;;;;-1:-1:-1;15457:41:0;;;;-1:-1:-1;;;;;15457:41:0;;;3582:108;;;;;;;;;;-1:-1:-1;3670:12:0;;3582:108;;;2474:25:1;;;2462:2;2447:18;3582:108:0;2328:177:1;16906:33:0;;;;;;;;;;;;;;;;30602:561;;;;;;;;;;-1:-1:-1;30602:561:0;;;;;:::i;:::-;;:::i;4352:345::-;;;;;;;;;;-1:-1:-1;4352:345:0;;;;;:::i;:::-;;:::i;19241:93::-;;;;;;;;;;-1:-1:-1;19241:93:0;;19324:2;5600:36:1;;5588:2;5573:18;19241:93:0;5458:184:1;4705:218:0;;;;;;;;;;-1:-1:-1;4705:218:0;;;;;:::i;:::-;;:::i;15507:28::-;;;;;;;;;;-1:-1:-1;15507:28:0;;;;-1:-1:-1;;;;;15507:28:0;;;16493:33;;;;;;;;;;-1:-1:-1;16493:33:0;;;;;;;;16245:41;;;;;;;;;;-1:-1:-1;16245:41:0;;;;;;;;15641:34;;;;;;;;;;-1:-1:-1;15641:34:0;;;;-1:-1:-1;;;15641:34:0;;;;;;23807:126;;;;;;;;;;-1:-1:-1;23807:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;23897:28:0;23873:4;23897:28;;;:19;:28;;;;;;;;;23807:126;16098:31;;;;;;;;;;;;;;;;16204:30;;;;;;;;;;;;;;;;20367:202;;;;;;;;;;-1:-1:-1;20367:202:0;;;;;:::i;:::-;;:::i;20154:205::-;;;;;;;;;;-1:-1:-1;20154:205:0;;;;;:::i;:::-;;:::i;22006:120::-;;;;;;;;;;-1:-1:-1;22006:120:0;;;;;:::i;:::-;;:::i;21271:209::-;;;;;;;;;;-1:-1:-1;21271:209:0;;;;;:::i;:::-;;:::i;20929:99::-;;;;;;;;;;-1:-1:-1;20929:99:0;;;;;:::i;:::-;;:::i;16808:20::-;;;;;;;;;;;;;;;;21852:146;;;;;;;;;;;;;:::i;3698:127::-;;;;;;;;;;-1:-1:-1;3698:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;3799:18:0;3772:7;3799:18;;;;;;;;;;;;3698:127;7153:148;;;;;;;;;;;;;:::i;22694:212::-;;;;;;;;;;-1:-1:-1;22694:212:0;;;;;:::i;:::-;;:::i;15834:38::-;;;;;;;;;;-1:-1:-1;15834:38:0;;;;-1:-1:-1;;;;;15834:38:0;;;20774:147;;;;;;;;;;-1:-1:-1;20774:147:0;;;;;:::i;:::-;;:::i;16868:30::-;;;;;;;;;;;;;;;;6939:79;;;;;;;;;;-1:-1:-1;7004:6:0;;-1:-1:-1;;;;;7004:6:0;6939:79;;16026:32;;;;;;;;;;;;;;;;3369:104;;;;;;;;;;;;;:::i;22914:885::-;;;;;;;;;;-1:-1:-1;22914:885:0;;;;;:::i;:::-;;:::i;22350:140::-;;;;;;;;;;-1:-1:-1;22350:140:0;;;;;:::i;:::-;;:::i;4931:286::-;;;;;;;;;;-1:-1:-1;4931:286:0;;;;;:::i;:::-;;:::i;3833:175::-;;;;;;;;;;-1:-1:-1;3833:175:0;;;;;:::i;:::-;;:::i;16065:26::-;;;;;;;;;;;;;;;;16757;;;;;;;;;;;;;;;;16354:57;;;;;;;;;;-1:-1:-1;16354:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;21662:174;;;;;;;;;;-1:-1:-1;21662:174:0;;;;;:::i;:::-;;:::i;22134:208::-;;;;;;;;;;-1:-1:-1;22134:208:0;;;;;:::i;:::-;;:::i;15880:37::-;;;;;;;;;;-1:-1:-1;15880:37:0;;;;-1:-1:-1;;;;;15880:37:0;;;16168:29;;;;;;;;;;;;;;;;4016:151;;;;;;;;;;-1:-1:-1;4016:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;4132:18:0;;;4105:7;4132:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;4016:151;19379:763;;;;;;;;;;-1:-1:-1;19379:763:0;;;;;:::i;:::-;;:::i;15986:33::-;;;;;;;;;;;;;;;;16136:25;;;;;;;;;;;;;;;;15959:20;;;;;;;;;;;;;;;;7309:244;;;;;;;;;;-1:-1:-1;7309:244:0;;;;;:::i;:::-;;:::i;15928:24::-;;;;;;;;;;;;;;;;21038:221;;;;;;;;;;-1:-1:-1;21038:221:0;;;;;:::i;:::-;;:::i;29042:443::-;7066:6;;-1:-1:-1;;;;;7066:6:0;200:10;7066:22;7058:67;;;;-1:-1:-1;;;7058:67:0;;;;;;;:::i;:::-;;;;;;;;;29130:17:::1;:6:::0;29140::::1;29130:17;:::i;:::-;29121:26;;29158:19;29180:25;29194:10;;29180:9;;:13;;:25;;;;:::i;:::-;29158:47;;29216:15;29234:38;29260:11;29234:21;29245:9;;29234:6;:10;;:21;;;;:::i;:::-;:25:::0;::::1;:38::i;:::-;29216:56;;29283:16;29302:39;29329:11;29302:22;29313:10;;29302:6;:10;;:22;;;;:::i;:39::-;29283:58;;29354:28;29375:6;29354:20;:28::i;:::-;29407:9;::::0;:22:::1;::::0;29421:7;29407:13:::1;:22::i;:::-;29395:9;:34:::0;29453:10:::1;::::0;:24:::1;::::0;29468:8;29453:14:::1;:24::i;:::-;29440:10;:37:::0;-1:-1:-1;;;;29042:443:0:o;3261:100::-;3315:13;3348:5;3341:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3261:100;:::o;20585:181::-;7066:6;;-1:-1:-1;;;;;7066:6:0;200:10;7066:22;7058:67;;;;-1:-1:-1;;;7058:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20669:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;20669:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;20724:34;;2041:41:1;;;20724:34:0::1;::::0;2014:18:1;20724:34:0::1;;;;;;;20585:181:::0;;:::o;21488:166::-;7066:6;;-1:-1:-1;;;;;7066:6:0;200:10;7066:22;7058:67;;;;-1:-1:-1;;;7058:67:0;;;;;;;:::i;:::-;21574:2:::1;21566:4;:10;;21558:48;;;::::0;-1:-1:-1;;;21558:48:0;;8872:2:1;21558:48:0::1;::::0;::::1;8854:21:1::0;8911:2;8891:18;;;8884:30;8950:27;8930:18;;;8923:55;8995:18;;21558:48:0::1;8670:349:1::0;21558:48:0::1;21633:13;:4:::0;21640:6:::1;21633:13;:::i;:::-;21617;:29:::0;-1:-1:-1;21488:166:0:o;4175:169::-;4258:4;4275:39;200:10;4298:7;4307:6;4275:8;:39::i;:::-;-1:-1:-1;4332:4:0;4175:169;;;;;:::o;30602:561::-;7066:6;;-1:-1:-1;;;;;7066:6:0;200:10;7066:22;7058:67;;;;-1:-1:-1;;;7058:67:0;;;;;;;:::i;:::-;30774:6:::1;:13;30749:14;:21;:38;30741:81;;;::::0;-1:-1:-1;;;30741:81:0;;9226:2:1;30741:81:0::1;::::0;::::1;9208:21:1::0;9265:2;9245:18;;;9238:30;9304:32;9284:18;;;9277:60;9354:18;;30741:81:0::1;9024:354:1::0;30741:81:0::1;30866:3;30841:14;:21;:28;;30833:75;;;::::0;-1:-1:-1;;;30833:75:0;;9585:2:1;30833:75:0::1;::::0;::::1;9567:21:1::0;9624:2;9604:18;;;9597:30;9663:34;9643:18;;;9636:62;-1:-1:-1;;;9714:18:1;;;9707:32;9756:19;;30833:75:0::1;9383:398:1::0;30833:75:0::1;30924:9;30919:237;30943:14;:21;30939:1;:25;30919:237;;;30986:14;31003;31018:1;31003:17;;;;;;;;:::i;:::-;;;;;;;30986:34;;31035:21;31059:6;31066:1;31059:9;;;;;;;;:::i;:::-;;;;;;;31072:6;31059:20;;;;:::i;:::-;31035:44;;31094:50;31110:10;31122:6;31130:13;31094:15;:50::i;:::-;30971:185;;30966:3;;;;;:::i;:::-;;;;30919:237;;;;30602:561:::0;;:::o;4352:345::-;4465:4;4482:36;4492:6;4500:9;4511:6;4482:9;:36::i;:::-;4529:138;4538:6;200:10;4560:106;4598:6;4560:106;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4560:19:0;;;;;;:11;:19;;;;;;;;200:10;4560:33;;;;;;;;;;:37;:106::i;:::-;4529:8;:138::i;:::-;-1:-1:-1;4685:4:0;4352:345;;;;;:::o;4705:218::-;200:10;4793:4;4842:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;4842:34:0;;;;;;;;;;4793:4;;4810:83;;4833:7;;4842:50;;4881:10;4842:38;:50::i;20367:202::-;7066:6;;-1:-1:-1;;;;;7066:6:0;200:10;7066:22;7058:67;;;;-1:-1:-1;;;7058:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20440:27:0;::::1;;::::0;;;:19:::1;:27;::::0;;;;;;;;:34;;-1:-1:-1;;20440:34:0::1;20470:4;20440:34;::::0;;20485:14:::1;:32:::0;;-1:-1:-1;;;;;;20485:32:0::1;::::0;::::1;::::0;;20533:28;;160:51:1;;;20533:28:0::1;::::0;133:18:1;20533:28:0::1;;;;;;;;20367:202:::0;:::o;20154:205::-;7066:6;;-1:-1:-1;;;;;7066:6:0;200:10;7066:22;7058:67;;;;-1:-1:-1;;;7058:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20228:27:0;::::1;;::::0;;;:19:::1;:27;::::0;;;;;;;;:34;;-1:-1:-1;;20228:34:0::1;20258:4;20228:34;::::0;;20273:15:::1;:33:::0;;-1:-1:-1;;;;;;20273:33:0::1;::::0;::::1;::::0;;20322:29;;160:51:1;;;20322:29:0::1;::::0;133:18:1;20322:29:0::1;14:203:1::0;22006:120:0;7066:6;;-1:-1:-1;;;;;7066:6:0;200:10;7066:22;7058:67;;;;-1:-1:-1;;;7058:67:0;;;;;;;:::i;:::-;22101:17:::1;:6:::0;22111::::1;22101:17;:::i;:::-;22080:18;:38:::0;-1:-1:-1;22006:120:0:o;21271:209::-;7066:6;;-1:-1:-1;;;;;7066:6:0;200:10;7066:22;7058:67;;;;-1:-1:-1;;;7058:67:0;;;;;;;:::i;:::-;21342:16:::1;:5:::0;21351:6:::1;21342:16;:::i;:::-;21334:24;;21401:4;21386:12;;:19;;;;:::i;:::-;21377:5;:28;;21369:79;;;::::0;-1:-1:-1;;;21369:79:0;;10482:2:1;21369:79:0::1;::::0;::::1;10464:21:1::0;10521:2;10501:18;;;10494:30;10560:34;10540:18;;;10533:62;-1:-1:-1;;;10611:18:1;;;10604:36;10657:19;;21369:79:0::1;10280:402:1::0;21369:79:0::1;21459:5;:13:::0;21271:209::o;20929:99::-;7066:6;;-1:-1:-1;;;;;7066:6:0;200:10;7066:22;7058:67;;;;-1:-1:-1;;;7058:67:0;;;;;;;:::i;:::-;20998:14:::1;:22:::0;;-1:-1:-1;;20998:22:0::1;::::0;::::1;;::::0;;;::::1;::::0;;20929:99::o;21852:146::-;7066:6;;-1:-1:-1;;;;;7066:6:0;200:10;7066:22;7058:67;;;;-1:-1:-1;;;7058:67:0;;;;;;;:::i;:::-;21951:39:::1;::::0;21919:21:::1;::::0;21959:10:::1;::::0;21951:39;::::1;;;::::0;21919:21;;21899:17:::1;21951:39:::0;21899:17;21951:39;21919:21;21959:10;21951:39;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;21888:110;21852:146::o:0;7153:148::-;7066:6;;-1:-1:-1;;;;;7066:6:0;200:10;7066:22;7058:67;;;;-1:-1:-1;;;7058:67:0;;;;;;;:::i;:::-;7244:6:::1;::::0;7223:40:::1;::::0;7260:1:::1;::::0;-1:-1:-1;;;;;7244:6:0::1;::::0;7223:40:::1;::::0;7260:1;;7223:40:::1;7274:6;:19:::0;;-1:-1:-1;;;;;;7274:19:0::1;::::0;;7153:148::o;22694:212::-;7066:6;;-1:-1:-1;;;;;7066:6:0;200:10;7066:22;7058:67;;;;-1:-1:-1;;;7058:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22763:29:0;::::1;;::::0;;;:19:::1;:29;::::0;;;;;;;:36;;22795:4:::1;-1:-1:-1::0;;22763:36:0;;::::1;::::0;::::1;::::0;;;22810:33:::1;:43:::0;;;;;:50;;;;::::1;::::0;;::::1;::::0;;22871:27:::1;22763:29:::0;22871:17:::1;:27::i;:::-;22694:212:::0;:::o;20774:147::-;7066:6;;-1:-1:-1;;;;;7066:6:0;200:10;7066:22;7058:67;;;;-1:-1:-1;;;7058:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20863:41:0;;;::::1;;::::0;;;:33:::1;:41;::::0;;;;:50;;-1:-1:-1;;20863:50:0::1;::::0;::::1;;::::0;;;::::1;::::0;;20774:147::o;3369:104::-;3425:13;3458:7;3451:14;;;;;:::i;22914:885::-;7066:6;;-1:-1:-1;;;;;7066:6:0;200:10;7066:22;7058:67;;;;-1:-1:-1;;;7058:67:0;;;;;;;:::i;:::-;23112:16:::1;:31:::0;;;23154:10:::1;:20:::0;;;23185:17:::1;:33:::0;;;23229:11:::1;:22:::0;;;23262:14:::1;:28:::0;;;23301:15:::1;:30:::0;;;23362:38:::1;23205:13:::0;23319:12;23362:21:::1;:38::i;:::-;23346:13;:54:::0;23447:14:::1;::::0;23426:16:::1;::::0;:36:::1;::::0;:20:::1;:36::i;:::-;23411:12;:51:::0;23496:1:::1;23485:12:::0;::::1;::::0;::::1;::::0;:29:::1;;;23513:1;23501:8;:13;;23485:29;23477:68;;;::::0;-1:-1:-1;;;23477:68:0;;10889:2:1;23477:68:0::1;::::0;::::1;10871:21:1::0;10928:2;10908:18;;;10901:30;10967:28;10947:18;;;10940:56;11013:18;;23477:68:0::1;10687:350:1::0;23477:68:0::1;23581:1;23564:13;;:18;;:39;;;;;23602:1;23586:12;;:17;;23564:39;23556:87;;;::::0;-1:-1:-1;;;23556:87:0;;11244:2:1;23556:87:0::1;::::0;::::1;11226:21:1::0;11283:2;11263:18;;;11256:30;11322:34;11302:18;;;11295:62;-1:-1:-1;;;11373:18:1;;;11366:33;11416:19;;23556:87:0::1;11042:399:1::0;23556:87:0::1;23672:17;::::0;23691:11:::1;::::0;23704:15:::1;::::0;23721:16:::1;::::0;23764:10:::1;::::0;23776:14:::1;::::0;23661:130:::1;::::0;;11733:25:1;;;11789:2;11774:18;;11767:34;;;;11817:18;;;11810:34;;;;11875:2;11860:18;;11853:34;11918:3;11903:19;;11896:35;11962:3;11947:19;;11940:35;23661:130:0::1;::::0;11720:3:1;11705:19;23661:130:0::1;;;;;;;22914:885:::0;;;;;;:::o;22350:140::-;7066:6;;-1:-1:-1;;;;;7066:6:0;200:10;7066:22;7058:67;;;;-1:-1:-1;;;7058:67:0;;;;;;;:::i;:::-;22441:41:::1;22470:4;22476:5;22441:28;:41::i;4931:286::-:0;5024:4;5041:146;200:10;5064:7;5073:113;5112:15;5073:113;;;;;;;;;;;;;;;;;200:10;5073:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;5073:34:0;;;;;;;;;;;;:38;:113::i;3833:175::-;3919:4;3936:42;200:10;3960:9;3971:6;3936:9;:42::i;21662:174::-;7066:6;;-1:-1:-1;;;;;7066:6:0;200:10;7066:22;7058:67;;;;-1:-1:-1;;;7058:67:0;;;;;;;:::i;:::-;21750:3:::1;21741:5;:12;;21733:63;;;::::0;-1:-1:-1;;;21733:63:0;;12188:2:1;21733:63:0::1;::::0;::::1;12170:21:1::0;12227:2;12207:18;;;12200:30;12266:34;12246:18;;;12239:62;-1:-1:-1;;;12317:18:1;;;12310:36;12363:19;;21733:63:0::1;11986:402:1::0;21733:63:0::1;21807:13;:21:::0;21662:174::o;22134:208::-;7066:6;;-1:-1:-1;;;;;7066:6:0;200:10;7066:22;7058:67;;;;-1:-1:-1;;;7058:67:0;;;;;;;:::i;:::-;22214:21:::1;::::0;:32;::::1;;:21;::::0;;::::1;:32;;::::0;22206:41:::1;;;::::0;::::1;;22258:21;:31:::0;;-1:-1:-1;;22258:31:0::1;::::0;::::1;;::::0;;::::1;::::0;;;22305:29:::1;::::0;2041:41:1;;;22305:29:0::1;::::0;2029:2:1;2014:18;22305:29:0::1;1901:187:1::0;19379:763:0;7066:6;;-1:-1:-1;;;;;7066:6:0;200:10;7066:22;7058:67;;;;-1:-1:-1;;;7058:67:0;;;;;;;:::i;:::-;19569:27:::1;:16:::0;19589:6:::1;19569:27;:::i;:::-;19550:46:::0;-1:-1:-1;19622:23:0::1;:12:::0;19638:6:::1;19622:23;:::i;:::-;19665:14;::::0;19607:38;;-1:-1:-1;;;;19665:14:0;::::1;;;19664:15;19656:24;;;::::0;::::1;;19734:4;19719:12;;:19;;;;:::i;:::-;19699:16;:39;;19691:72;;;::::0;-1:-1:-1;;;19691:72:0;;12595:2:1;19691:72:0::1;::::0;::::1;12577:21:1::0;12634:2;12614:18;;;12607:30;-1:-1:-1;;;12653:18:1;;;12646:51;12714:18;;19691:72:0::1;12393:345:1::0;19691:72:0::1;19813:4;19798:12;;:19;;;;:::i;:::-;19782:12;:35;;19774:68;;;::::0;-1:-1:-1;;;19774:68:0;;12595:2:1;19774:68:0::1;::::0;::::1;12577:21:1::0;12634:2;12614:18;;;12607:30;-1:-1:-1;;;12653:18:1;;;12646:51;12714:18;;19774:68:0::1;12393:345:1::0;19774:68:0::1;19853:9;:28:::0;;;19892:5:::1;:20:::0;;;19939:23:::1;:14:::0;19956:6:::1;19939:23;:::i;:::-;19923:13;:39:::0;19973:14:::1;:21:::0;;-1:-1:-1;;;;19973:21:0::1;-1:-1:-1::0;;;19973:21:0::1;::::0;;20019:12:::1;20005:11;:26:::0;20060:15:::1;20042;:33:::0;20086:5:::1;:16:::0;;;20118::::1;::::0;::::1;::::0;19973:21;;20118:16:::1;19379:763:::0;;;;:::o;7309:244::-;7066:6;;-1:-1:-1;;;;;7066:6:0;200:10;7066:22;7058:67;;;;-1:-1:-1;;;7058:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7398:22:0;::::1;7390:73;;;::::0;-1:-1:-1;;;7390:73:0;;12945:2:1;7390:73:0::1;::::0;::::1;12927:21:1::0;12984:2;12964:18;;;12957:30;13023:34;13003:18;;;12996:62;-1:-1:-1;;;13074:18:1;;;13067:36;13120:19;;7390:73:0::1;12743:402:1::0;7390:73:0::1;7500:6;::::0;7479:38:::1;::::0;-1:-1:-1;;;;;7479:38:0;;::::1;::::0;7500:6:::1;::::0;7479:38:::1;::::0;7500:6:::1;::::0;7479:38:::1;7528:6;:17:::0;;-1:-1:-1;;;;;;7528:17:0::1;-1:-1:-1::0;;;;;7528:17:0;;;::::1;::::0;;;::::1;::::0;;7309:244::o;21038:221::-;7066:6;;-1:-1:-1;;;;;7066:6:0;200:10;7066:22;7058:67;;;;-1:-1:-1;;;7058:67:0;;;;;;;:::i;:::-;21113:16:::1;:5:::0;21122:6:::1;21113:16;:::i;:::-;21105:24;;21172:4;21157:12;;:19;;;;:::i;:::-;21148:5;:28;;21140:83;;;::::0;-1:-1:-1;;;21140:83:0;;13352:2:1;21140:83:0::1;::::0;::::1;13334:21:1::0;13391:2;13371:18;;;13364:30;13430:34;13410:18;;;13403:62;-1:-1:-1;;;13481:18:1;;;13474:40;13531:19;;21140:83:0::1;13150:406:1::0;21140:83:0::1;21234:9;:17:::0;21038:221::o;496:179::-;554:7;;586:5;590:1;586;:5;:::i;:::-;574:17;;615:1;610;:6;;602:46;;;;-1:-1:-1;;;602:46:0;;13893:2:1;602:46:0;;;13875:21:1;13932:2;13912:18;;;13905:30;13971:29;13951:18;;;13944:57;14018:18;;602:46:0;13691:351:1;602:46:0;666:1;496:179;-1:-1:-1;;;496:179:0:o;1025:248::-;1083:7;1107:1;1112;1107:6;1103:47;;-1:-1:-1;1137:1:0;1130:8;;1103:47;1162:9;1174:5;1178:1;1174;:5;:::i;:::-;1162:17;-1:-1:-1;1207:1:0;1198:5;1202:1;1162:17;1198:5;:::i;:::-;:10;1190:56;;;;-1:-1:-1;;;1190:56:0;;14249:2:1;1190:56:0;;;14231:21:1;14288:2;14268:18;;;14261:30;14327:34;14307:18;;;14300:62;-1:-1:-1;;;14378:18:1;;;14371:31;14419:19;;1190:56:0;14047:397:1;1281:132:0;1339:7;1366:39;1370:1;1373;1366:39;;;;;;;;;;;;;;;;;:3;:39::i;29518:1076::-;29587:6;29597:1;29587:11;29583:50;;29518:1076;:::o;29583:50::-;29643:24;29660:6;29643:16;:24::i;:::-;29839:14;;29818:16;;29695:4;;;;29680:12;;29818:36;;:16;:20;:36::i;:::-;29799:15;;29777:17;;:38;;:21;:38::i;:::-;:77;;;;:::i;:::-;29753:101;-1:-1:-1;29867:19:0;29901:17;;29897:104;;29949:40;:21;29975:13;29949:25;:40::i;:::-;29935:54;;29897:104;30011:23;30079:11;30037:39;30058:17;;30037:16;;:20;;:39;;;;:::i;:::-;:53;;;;:::i;:::-;30011:79;;30101:22;30164:11;30126:35;30145:15;;30126:14;;:18;;:35;;;;:::i;:::-;:49;;;;:::i;:::-;30101:74;-1:-1:-1;30200:19:0;;30196:123;;30258:15;;30250:57;;-1:-1:-1;;;;;30258:15:0;;;;30287;;30250:57;;;;30287:15;30258;30250:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30236:71:0;;-1:-1:-1;;30196:123:0;30343:18;;30339:123;;30403:14;;30395:55;;-1:-1:-1;;;;;30403:14:0;;;;30431;;30395:55;;;;30431:14;30403;30395:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30378:72:0;;-1:-1:-1;;30339:123:0;30479:107;30507:32;30525:14;30507:15;:32;:::i;:::-;30554:7;:21;;;;;30565:10;30554:21;30479:107;;;14827:25:1;;;14895:14;;14888:22;14883:2;14868:18;;14861:50;14800:18;30479:107:0;;;;;;;29572:1022;;;;;;29518:1076;:::o;683:136::-;741:7;768:43;772:1;775;768:43;;;;;;;;;;;;;;;;;:3;:43::i;6157:346::-;-1:-1:-1;;;;;6259:19:0;;6251:68;;;;-1:-1:-1;;;6251:68:0;;15124:2:1;6251:68:0;;;15106:21:1;15163:2;15143:18;;;15136:30;15202:34;15182:18;;;15175:62;-1:-1:-1;;;15253:18:1;;;15246:34;15297:19;;6251:68:0;14922:400:1;6251:68:0;-1:-1:-1;;;;;6338:21:0;;6330:68;;;;-1:-1:-1;;;6330:68:0;;15529:2:1;6330:68:0;;;15511:21:1;15568:2;15548:18;;;15541:30;15607:34;15587:18;;;15580:62;-1:-1:-1;;;15658:18:1;;;15651:32;15700:19;;6330:68:0;15327:398:1;6330:68:0;-1:-1:-1;;;;;6411:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;6463:32;;2474:25:1;;;6463:32:0;;2447:18:1;6463:32:0;;;;;;;;6157:346;;;:::o;5225:538::-;-1:-1:-1;;;;;5331:20:0;;5323:70;;;;-1:-1:-1;;;5323:70:0;;15932:2:1;5323:70:0;;;15914:21:1;15971:2;15951:18;;;15944:30;16010:34;15990:18;;;15983:62;-1:-1:-1;;;16061:18:1;;;16054:35;16106:19;;5323:70:0;15730:401:1;5323:70:0;-1:-1:-1;;;;;5412:23:0;;5404:71;;;;-1:-1:-1;;;5404:71:0;;16338:2:1;5404:71:0;;;16320:21:1;16377:2;16357:18;;;16350:30;16416:34;16396:18;;;16389:62;-1:-1:-1;;;16467:18:1;;;16460:33;16510:19;;5404:71:0;16136:399:1;5404:71:0;5568:70;5590:6;5568:70;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5568:17:0;;:9;:17;;;;;;;;;;;;:70;:21;:70::i;:::-;-1:-1:-1;;;;;5548:17:0;;;:9;:17;;;;;;;;;;;:90;;;;5672:20;;;;;;;:32;;5697:6;5672:24;:32::i;:::-;-1:-1:-1;;;;;5649:20:0;;;:9;:20;;;;;;;;;;;;:55;;;;5720:35;2474:25:1;;;5649:20:0;;5720:35;;;;;;2447:18:1;5720:35:0;2328:177:1;23941:3577:0;-1:-1:-1;;;;;24051:18:0;;24043:69;;;;-1:-1:-1;;;24043:69:0;;16742:2:1;24043:69:0;;;16724:21:1;16781:2;16761:18;;;16754:30;16820:34;16800:18;;;16793:62;-1:-1:-1;;;16871:18:1;;;16864:36;16917:19;;24043:69:0;16540:402:1;24043:69:0;-1:-1:-1;;;;;24131:16:0;;24123:65;;;;-1:-1:-1;;;24123:65:0;;17149:2:1;24123:65:0;;;17131:21:1;17188:2;17168:18;;;17161:30;17227:34;17207:18;;;17200:62;-1:-1:-1;;;17278:18:1;;;17271:34;17322:19;;24123:65:0;16947:400:1;24123:65:0;-1:-1:-1;;;;;24299:39:0;;24201:21;24299:39;;;:33;:39;;;;;;24201:21;;;;24299:39;;24294:142;;24363:14;;-1:-1:-1;;;24363:14:0;;;;24355:59;;;;-1:-1:-1;;;24355:59:0;;17554:2:1;24355:59:0;;;17536:21:1;;;17573:18;;;17566:30;17632:34;17612:18;;;17605:62;17684:18;;24355:59:0;17352:356:1;24355:59:0;24452:6;24462:1;24452:11;24448:93;;24480:28;24496:4;24502:2;24506:1;24480:15;:28::i;:::-;24523:7;;;23941:3577;;;:::o;24448:93::-;24564:4;;-1:-1:-1;;;;;24564:4:0;;;24558:10;;;;24554:2901;;24585:33;24601:4;24607:2;24611:6;24585:15;:33::i;:::-;24648:12;;:24;;24665:6;24648:16;:24::i;:::-;24633:12;:39;-1:-1:-1;;;;;;23941:3577:0:o;24554:2901::-;24749:8;;-1:-1:-1;;;24749:8:0;;;;24748:9;:39;;;;-1:-1:-1;;;;;;24762:25:0;;;;;;:19;:25;;;;;;;;24761:26;24748:39;:67;;;;-1:-1:-1;;;;;;24792:23:0;;;;;;:19;:23;;;;;;;;24791:24;24748:67;24730:2725;;;-1:-1:-1;;;;;24849:29:0;;24832:14;24849:29;;;:25;:29;;;;;;;;24893:1411;;;;24943:17;;24989:11;;25033:15;;25077:14;;24943:17;;-1:-1:-1;24989:11:0;;-1:-1:-1;25033:15:0;-1:-1:-1;25077:14:0;;25073:344;;;25181:13;;25168:9;25139:39;;;;:28;:39;;;;;;:55;;25181:13;25139:55;:::i;:::-;25120:15;:74;;25112:134;;;;-1:-1:-1;;;25112:134:0;;17915:2:1;25112:134:0;;;17897:21:1;17954:2;17934:18;;;17927:30;-1:-1:-1;;;17973:18:1;;;17966:52;18035:18;;25112:134:0;17713:346:1;25112:134:0;25283:5;;25273:6;:15;;25265:54;;;;-1:-1:-1;;;25265:54:0;;18266:2:1;25265:54:0;;;18248:21:1;18305:2;18285:18;;;18278:30;18344:29;18324:18;;;18317:57;18391:18;;25265:54:0;18064:351:1;25265:54:0;25367:9;25338:39;;;;:28;:39;;;;;25380:15;25338:57;;25073:344;24893:1411;;;25501:16;;25546:10;;25589:14;;25630;;25501:16;;-1:-1:-1;25546:10:0;;-1:-1:-1;25589:14:0;-1:-1:-1;25630:14:0;;25626:453;;;25709:5;;25691:15;;:23;;;;:::i;:::-;25673:15;:41;25665:71;;;;-1:-1:-1;;;25665:71:0;;18622:2:1;25665:71:0;;;18604:21:1;18661:2;18641:18;;;18634:30;-1:-1:-1;;;18680:18:1;;;18673:48;18738:18;;25665:71:0;18420:342:1;25665:71:0;25778:13;;25763:11;:28;;25755:64;;;;-1:-1:-1;;;25755:64:0;;18969:2:1;25755:64:0;;;18951:21:1;19008:2;18988:18;;;18981:30;19047:26;19027:18;;;19020:54;19091:18;;25755:64:0;18767:348:1;25755:64:0;25871:9;25846:35;;;;:24;:35;;;;;;25885:12;25846:51;;25838:83;;;;-1:-1:-1;;;25838:83:0;;19322:2:1;25838:83:0;;;19304:21:1;19361:2;19341:18;;;19334:30;-1:-1:-1;;;19380:18:1;;;19373:50;19440:18;;25838:83:0;19120:344:1;25838:83:0;25958:5;;25948:6;:15;;25940:54;;;;-1:-1:-1;;;25940:54:0;;18266:2:1;25940:54:0;;;18248:21:1;18305:2;18285:18;;;18278:30;18344:29;18324:18;;;18317:57;18391:18;;25940:54:0;18064:351:1;25940:54:0;26038:9;26013:35;;;;:24;:35;;;;;26051:12;26013:50;;25626:453;-1:-1:-1;;;;;3799:18:0;;26112:32;3799:18;;;;;;;;;;;26224:9;;26187:33;26214:6;3799:18;26187:33;:::i;:::-;:46;;26179:95;;;;-1:-1:-1;;;26179:95:0;;19671:2:1;26179:95:0;;;19653:21:1;19710:2;19690:18;;;19683:30;19749:34;19729:18;;;19722:62;-1:-1:-1;;;19800:18:1;;;19793:34;19844:19;;26179:95:0;19469:400:1;26179:95:0;25466:838;24893:1411;26320:17;26340:30;:13;26358:11;26340:17;:30::i;:::-;26436:4;26387:28;3799:18;;;;;;;;;;;26498;;26320:50;;-1:-1:-1;3799:18:0;26474:42;;;;;;;26537:20;;;26548:9;26537:20;26533:308;;;26578:8;:15;;-1:-1:-1;;;;26578:15:0;-1:-1:-1;;;26578:15:0;;;26667:4;-1:-1:-1;3799:18:0;;;;;;;;;;;26627:46;;26692:33;26713:11;26692:20;:33::i;:::-;-1:-1:-1;26756:1:0;26744:9;:13;;;26776:10;:14;26809:8;:16;;-1:-1:-1;;;;26809:16:0;;;26533:308;26857:12;26872:30;26898:3;26872:21;:6;26883:9;26872:10;:21::i;:30::-;26857:45;-1:-1:-1;26917:18:0;26938:28;26962:3;26938:19;:6;26949:7;26938:10;:19::i;:28::-;26917:49;-1:-1:-1;26994:29:0;27005:17;26917:49;27005:4;:17;:::i;:::-;26994:6;;:10;:29::i;:::-;26985:38;;27045:9;27041:155;;;27088:10;;:20;;27103:4;27088:14;:20::i;:::-;27075:10;:33;27041:155;;;27161:9;;:19;;27175:4;27161:13;:19::i;:::-;27149:9;:31;27041:155;27212:42;27228:4;27242;27249;27212:15;:42::i;:::-;27275:14;;27271:156;;27332:4;;27310:39;;27326:4;;-1:-1:-1;;;;;27332:4:0;27338:10;27310:15;:39::i;:::-;27383:12;;:28;;27400:10;27383:16;:28::i;:::-;27368:12;:43;27271:156;24817:2638;;;;;;24730:2725;27467:33;27483:4;27489:2;27493:6;27467:15;:33::i;827:190::-;913:7;949:12;941:6;;;;933:29;;;;-1:-1:-1;;;933:29:0;;;;;;;;:::i;:::-;-1:-1:-1;973:9:0;985:5;989:1;985;:5;:::i;:::-;973:17;827:190;-1:-1:-1;;;;;827:190:0:o;22498:188::-;-1:-1:-1;;;;;22581:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;22581:39:0;;;;;;;;;;22638:40;;22581:39;;:31;22638:40;;;22498:188;;:::o;1421:189::-;1507:7;1542:12;1535:5;1527:28;;;;-1:-1:-1;;;1527:28:0;;;;;;;;:::i;:::-;-1:-1:-1;1566:9:0;1578:5;1582:1;1578;:5;:::i;28014:499::-;28104:16;;;28118:1;28104:16;;;;;;;;28080:21;;28104:16;;;;;;;;;;-1:-1:-1;28104:16:0;28080:40;;28149:4;28131;28136:1;28131:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;28131:23:0;;;:7;;;;;;;;;;:23;;;;28175:15;;:22;;;-1:-1:-1;;;28175:22:0;;;;:15;;;;;:20;;:22;;;;;28131:7;;28175:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28165:4;28170:1;28165:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;28165:32:0;;;:7;;;;;;;;;:32;28240:15;;28208:62;;28225:4;;28240:15;28258:11;28208:8;:62::i;:::-;28281:15;;:224;;-1:-1:-1;;;28281:224:0;;-1:-1:-1;;;;;28281:15:0;;;;:66;;:224;;28362:11;;28281:15;;28432:4;;28459;;28479:15;;28281:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;222:180:1;281:6;334:2;322:9;313:7;309:23;305:32;302:52;;;350:1;347;340:12;302:52;-1:-1:-1;373:23:1;;222:180;-1:-1:-1;222:180:1:o;407:548::-;519:4;548:2;577;566:9;559:21;609:6;603:13;652:6;647:2;636:9;632:18;625:34;677:1;687:140;701:6;698:1;695:13;687:140;;;796:14;;;792:23;;786:30;762:17;;;781:2;758:26;751:66;716:10;;687:140;;;691:3;876:1;871:2;862:6;851:9;847:22;843:31;836:42;946:2;939;935:7;930:2;922:6;918:15;914:29;903:9;899:45;895:54;887:62;;;;407:548;;;;:::o;960:131::-;-1:-1:-1;;;;;1035:31:1;;1025:42;;1015:70;;1081:1;1078;1071:12;1096:160;1161:20;;1217:13;;1210:21;1200:32;;1190:60;;1246:1;1243;1236:12;1190:60;1096:160;;;:::o;1261:315::-;1326:6;1334;1387:2;1375:9;1366:7;1362:23;1358:32;1355:52;;;1403:1;1400;1393:12;1355:52;1442:9;1429:23;1461:31;1486:5;1461:31;:::i;:::-;1511:5;-1:-1:-1;1535:35:1;1566:2;1551:18;;1535:35;:::i;:::-;1525:45;;1261:315;;;;;:::o;1581:::-;1649:6;1657;1710:2;1698:9;1689:7;1685:23;1681:32;1678:52;;;1726:1;1723;1716:12;1678:52;1765:9;1752:23;1784:31;1809:5;1784:31;:::i;:::-;1834:5;1886:2;1871:18;;;;1858:32;;-1:-1:-1;;;1581:315:1:o;2510:127::-;2571:10;2566:3;2562:20;2559:1;2552:31;2602:4;2599:1;2592:15;2626:4;2623:1;2616:15;2642:275;2713:2;2707:9;2778:2;2759:13;;-1:-1:-1;;2755:27:1;2743:40;;2813:18;2798:34;;2834:22;;;2795:62;2792:88;;;2860:18;;:::i;:::-;2896:2;2889:22;2642:275;;-1:-1:-1;2642:275:1:o;2922:183::-;2982:4;3015:18;3007:6;3004:30;3001:56;;;3037:18;;:::i;:::-;-1:-1:-1;3082:1:1;3078:14;3094:4;3074:25;;2922:183::o;3110:662::-;3164:5;3217:3;3210:4;3202:6;3198:17;3194:27;3184:55;;3235:1;3232;3225:12;3184:55;3271:6;3258:20;3297:4;3321:60;3337:43;3377:2;3337:43;:::i;:::-;3321:60;:::i;:::-;3415:15;;;3501:1;3497:10;;;;3485:23;;3481:32;;;3446:12;;;;3525:15;;;3522:35;;;3553:1;3550;3543:12;3522:35;3589:2;3581:6;3577:15;3601:142;3617:6;3612:3;3609:15;3601:142;;;3683:17;;3671:30;;3721:12;;;;3634;;3601:142;;;-1:-1:-1;3761:5:1;3110:662;-1:-1:-1;;;;;;3110:662:1:o;3777:1215::-;3895:6;3903;3956:2;3944:9;3935:7;3931:23;3927:32;3924:52;;;3972:1;3969;3962:12;3924:52;4012:9;3999:23;4041:18;4082:2;4074:6;4071:14;4068:34;;;4098:1;4095;4088:12;4068:34;4136:6;4125:9;4121:22;4111:32;;4181:7;4174:4;4170:2;4166:13;4162:27;4152:55;;4203:1;4200;4193:12;4152:55;4239:2;4226:16;4261:4;4285:60;4301:43;4341:2;4301:43;:::i;4285:60::-;4379:15;;;4461:1;4457:10;;;;4449:19;;4445:28;;;4410:12;;;;4485:19;;;4482:39;;;4517:1;4514;4507:12;4482:39;4541:11;;;;4561:217;4577:6;4572:3;4569:15;4561:217;;;4657:3;4644:17;4674:31;4699:5;4674:31;:::i;:::-;4718:18;;4594:12;;;;4756;;;;4561:217;;;4797:5;-1:-1:-1;;4840:18:1;;4827:32;;-1:-1:-1;;4871:16:1;;;4868:36;;;4900:1;4897;4890:12;4868:36;;4923:63;4978:7;4967:8;4956:9;4952:24;4923:63;:::i;:::-;4913:73;;;3777:1215;;;;;:::o;4997:456::-;5074:6;5082;5090;5143:2;5131:9;5122:7;5118:23;5114:32;5111:52;;;5159:1;5156;5149:12;5111:52;5198:9;5185:23;5217:31;5242:5;5217:31;:::i;:::-;5267:5;-1:-1:-1;5324:2:1;5309:18;;5296:32;5337:33;5296:32;5337:33;:::i;:::-;4997:456;;5389:7;;-1:-1:-1;;;5443:2:1;5428:18;;;;5415:32;;4997:456::o;5647:247::-;5706:6;5759:2;5747:9;5738:7;5734:23;5730:32;5727:52;;;5775:1;5772;5765:12;5727:52;5814:9;5801:23;5833:31;5858:5;5833:31;:::i;5899:180::-;5955:6;6008:2;5996:9;5987:7;5983:23;5979:32;5976:52;;;6024:1;6021;6014:12;5976:52;6047:26;6063:9;6047:26;:::i;6308:523::-;6412:6;6420;6428;6436;6444;6452;6505:3;6493:9;6484:7;6480:23;6476:33;6473:53;;;6522:1;6519;6512:12;6473:53;-1:-1:-1;;6545:23:1;;;6615:2;6600:18;;6587:32;;-1:-1:-1;6666:2:1;6651:18;;6638:32;;6717:2;6702:18;;6689:32;;-1:-1:-1;6768:3:1;6753:19;;6740:33;;-1:-1:-1;6820:3:1;6805:19;6792:33;;-1:-1:-1;6308:523:1;-1:-1:-1;6308:523:1:o;6836:388::-;6904:6;6912;6965:2;6953:9;6944:7;6940:23;6936:32;6933:52;;;6981:1;6978;6971:12;6933:52;7020:9;7007:23;7039:31;7064:5;7039:31;:::i;:::-;7089:5;-1:-1:-1;7146:2:1;7131:18;;7118:32;7159:33;7118:32;7159:33;:::i;:::-;7211:7;7201:17;;;6836:388;;;;;:::o;7229:385::-;7315:6;7323;7331;7339;7392:3;7380:9;7371:7;7367:23;7363:33;7360:53;;;7409:1;7406;7399:12;7360:53;-1:-1:-1;;7432:23:1;;;7502:2;7487:18;;7474:32;;-1:-1:-1;7553:2:1;7538:18;;7525:32;;7604:2;7589:18;7576:32;;-1:-1:-1;7229:385:1;-1:-1:-1;7229:385:1:o;7619:356::-;7821:2;7803:21;;;7840:18;;;7833:30;7899:34;7894:2;7879:18;;7872:62;7966:2;7951:18;;7619:356::o;7980:127::-;8041:10;8036:3;8032:20;8029:1;8022:31;8072:4;8069:1;8062:15;8096:4;8093:1;8086:15;8112:168;8185:9;;;8216;;8233:15;;;8227:22;;8213:37;8203:71;;8254:18;;:::i;8285:380::-;8364:1;8360:12;;;;8407;;;8428:61;;8482:4;8474:6;8470:17;8460:27;;8428:61;8535:2;8527:6;8524:14;8504:18;8501:38;8498:161;;8581:10;8576:3;8572:20;8569:1;8562:31;8616:4;8613:1;8606:15;8644:4;8641:1;8634:15;8498:161;;8285:380;;;:::o;9786:127::-;9847:10;9842:3;9838:20;9835:1;9828:31;9878:4;9875:1;9868:15;9902:4;9899:1;9892:15;9918:135;9957:3;9978:17;;;9975:43;;9998:18;;:::i;:::-;-1:-1:-1;10045:1:1;10034:13;;9918:135::o;10058:217::-;10098:1;10124;10114:132;;10168:10;10163:3;10159:20;10156:1;10149:31;10203:4;10200:1;10193:15;10231:4;10228:1;10221:15;10114:132;-1:-1:-1;10260:9:1;;10058:217::o;13561:125::-;13626:9;;;13647:10;;;13644:36;;;13660:18;;:::i;19874:128::-;19941:9;;;19962:11;;;19959:37;;;19976:18;;:::i;20007:251::-;20077:6;20130:2;20118:9;20109:7;20105:23;20101:32;20098:52;;;20146:1;20143;20136:12;20098:52;20178:9;20172:16;20197:31;20222:5;20197:31;:::i;20263:980::-;20525:4;20573:3;20562:9;20558:19;20604:6;20593:9;20586:25;20630:2;20668:6;20663:2;20652:9;20648:18;20641:34;20711:3;20706:2;20695:9;20691:18;20684:31;20735:6;20770;20764:13;20801:6;20793;20786:22;20839:3;20828:9;20824:19;20817:26;;20878:2;20870:6;20866:15;20852:29;;20899:1;20909:195;20923:6;20920:1;20917:13;20909:195;;;20988:13;;-1:-1:-1;;;;;20984:39:1;20972:52;;21079:15;;;;21044:12;;;;21020:1;20938:9;20909:195;;;-1:-1:-1;;;;;;;21160:32:1;;;;21155:2;21140:18;;21133:60;-1:-1:-1;;;21224:3:1;21209:19;21202:35;21121:3;20263:980;-1:-1:-1;;;20263:980:1:o

Swarm Source

ipfs://368389f3b4fa3873a41c79017b64906c6757936c46890785150f8478a124d6bb
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.