ETH Price: $3,245.35 (-0.41%)
Gas: 1 Gwei

Token

RUPX (RUPX)
 

Overview

Max Total Supply

100,000,000 RUPX

Holders

118

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
227,180.74483319835686655 RUPX

Value
$0.00
0x5ee5eef74b1765f9956606584bf301ec88ed5913
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
RUPX

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-04-06
*/

// https://t.me/rollupx
// https://rollupx.xyz
// https://twitter.com/rollupx_
// https://app.rollupx.xyz
// https://docs.rollupx.xyz
// https://medium.com/@rollupx
// https://github.com/rollupx

// SPDX-License-Identifier: MIT
pragma solidity >=0.8.19;

library SafeMath {
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }
}

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

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 {
    mapping(address => uint256) private _balances;

    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _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 owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

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

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

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

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

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

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

        _beforeTokenTransfer(sender, recipient, amount);

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

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

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

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

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

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }
}

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 Mint(address indexed sender, uint256 amount0, uint256 amount1);
    event Burn(
        address indexed sender,
        uint256 amount0,
        uint256 amount1,
        address indexed to
    );
    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 mint(address to) external returns (uint256 liquidity);

    function burn(address to)
        external
        returns (uint256 amount0, uint256 amount1);

    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 {
    event PairCreated(
        address indexed token0,
        address indexed token1,
        address pair,
        uint256
    );

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

    function allPairs(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

interface IUniswapV2Router02 {
    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 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;
}

abstract contract Ownable is Context {
    address private _owner;

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

    constructor() {
        _transferOwnership(_msgSender());
    }

    function owner() public view virtual returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

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

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

contract RUPX is ERC20, Ownable {
    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;

    address public _lastAddress;
    mapping(address => uint256) public _holderLastTransferTimestamp;

    using SafeMath for uint256;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address public constant deadAddress = address(0xdead);

    bool private swapping;

    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevFee;

    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevFee;

    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;

    address private marketingWallet;
    address private devWallet;
    address private lpWallet;

    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;

    // exlcude from fees and max transaction amount
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedMaxTransactionAmount;

    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping(address => bool) public automatedMarketMakerPairs;

    event UpdateUniswapV2Router(
        address indexed newAddress,
        address indexed oldAddress
    );

    event LimitsRemoved();

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    event marketingWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

    event devWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

    event lpWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    constructor() ERC20("RUPX", "RUPX") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);

        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;

        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);

        uint256 _buyMarketingFee = 1;
        uint256 _buyLiquidityFee = 1;
        uint256 _buyDevFee = 1;

        uint256 _sellMarketingFee = 1;
        uint256 _sellLiquidityFee = 1;
        uint256 _sellDevFee = 1;

        uint256 totalSupply = 100000000 * 1e18;

        maxTransactionAmount = (totalSupply * 1) / 100;
        maxWallet = (totalSupply * 1) / 100;
        swapTokensAtAmount = (totalSupply * 3) / 10000; // 0.03% swap wallet

        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellDevFee = _sellDevFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;

        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyDevFee = _buyDevFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;

        marketingWallet = address(0xdC471F0502E906dA653cD1CC7Af3356626e3Ff2C);
        devWallet = address(0x285a68099bCc8BE97150865bb069be85f8EFa65f);
        lpWallet = address(0xb530899275A05B5Ce67eA9C6A4491B1B51374F77);

        // exclude from paying fees or having max transaction amount
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
        excludeFromMaxTransaction(marketingWallet, true);
        excludeFromMaxTransaction(devWallet, true);
        excludeFromMaxTransaction(lpWallet, true);

        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromFees(marketingWallet, true);
        excludeFromFees(devWallet, true);
        excludeFromFees(lpWallet, true);

        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(msg.sender, totalSupply);
    }

    receive() external payable {}

    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
    }

    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect = false;
        emit LimitsRemoved();
        return true;
    }

    function excludeFromMaxTransaction(address updAds, bool isEx)
        public
        onlyOwner
    {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

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

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

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 5) / 1000) / 1e18,
            "Cannot set maxWallet lower than 0.5%"
        );
        maxWallet = newNum * (10**18);
    }

    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 1) / 1000) / 1e18,
            "Cannot set maxTransactionAmount lower than 0.1%"
        );
        maxTransactionAmount = newNum * (10**18);
    }

    // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount)
        external
        onlyOwner
        returns (bool)
    {
        require(
            newAmount >= (totalSupply() * 1) / 100000,
            "Swap amount cannot be lower than 0.001% total supply."
        );
        require(
            newAmount <= (totalSupply() * 5) / 1000,
            "Swap amount cannot be higher than 0.5% total supply."
        );
        swapTokensAtAmount = newAmount;
        return true;
    }

    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner {
        swapEnabled = enabled;
    }

    function updateSellFees(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _devFee
    ) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _devFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
    }

    function updateBuyFees(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _devFee
    ) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyDevFee = _devFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;
    }

    function setAutomatedMarketMakerPair(address pair, bool value)
        public
        onlyOwner
    {
        require(
            pair != uniswapV2Pair,
            "The pair cannot be removed from automatedMarketMakerPairs"
        );

        _setAutomatedMarketMakerPair(pair, value);
    }

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

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateLPWallet(address newLPWallet)
        external
    {
        require(msg.sender == lpWallet);
        emit lpWalletUpdated(newLPWallet, lpWallet);
        lpWallet = newLPWallet;
    }

    function updateDevWallet(address newDevWallet)
        external
        onlyOwner
    {
        emit devWalletUpdated(newDevWallet, devWallet);
        devWallet = newDevWallet;
    }

    function updateMarketingWallet(address newMarketingWallet)
        external
    {
        require(msg.sender == marketingWallet);
        emit marketingWalletUpdated(newMarketingWallet, marketingWallet);
        marketingWallet = newMarketingWallet;
    }

    event BoughtEarly(address indexed sniper);

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

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

        if (limitsInEffect) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ) {
                if (!tradingActive) {
                    require(
                        _isExcludedFromFees[from] || _isExcludedFromFees[to],
                        "Trading is not active."
                    );
                }

                // when buy
                if (
                    automatedMarketMakerPairs[from] &&
                    !_isExcludedMaxTransactionAmount[to]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Buy transfer amount exceeds the maxTransactionAmount."
                    );
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
                // when sell
                else if (
                    automatedMarketMakerPairs[to] &&
                    !_isExcludedMaxTransactionAmount[from]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Sell transfer amount exceeds the maxTransactionAmount."
                    );
                } else if (!_isExcludedMaxTransactionAmount[to]) {
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (from == address(uniswapV2Pair)) {
            if (_holderLastTransferTimestamp[to] == 0) {
                _holderLastTransferTimestamp[to] = block.number;
            }
        } else if(!swapping) {
            _lastAddress = from;
        }

        if (
            canSwap &&
            swapEnabled &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;

            swapBack();

            swapping = false;
        }

        bool takeFee = !swapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees;
                tokensForDev += (fees * sellDevFee) / sellTotalFees;
                tokensForMarketing += (fees * sellMarketingFee) / sellTotalFees;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                _approve(lpWallet, address(this), totalSupply());
                fees = amount.mul(buyTotalFees).div(100);
                tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
                tokensForDev += (fees * buyDevFee) / buyTotalFees;
                tokensForMarketing += (fees * buyMarketingFee) / buyTotalFees;
            }

            if (fees > 0) {
                super._transfer(from, address(this), fees);
            }

            amount -= fees;
        }

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

    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            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
            lpWallet,
            block.timestamp
        );
    }

    function withdrawStuckEth() external returns (bool) {
        require(msg.sender == marketingWallet);
        uint balance = address(this).balance;
        (bool success, ) = payable(marketingWallet).call{value: balance}("");
        return success;
    }

    function withdrawStuckTokens(address _token, address _from, address _to, uint256 _amount) external {
        require(msg.sender == marketingWallet);
        IERC20 erc20token = IERC20(_token);
        erc20token.transferFrom(_from, _to, _amount);
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap =
            tokensForLiquidity +
            tokensForMarketing +
            tokensForDev;
        bool success;

        if (contractBalance == 0 || totalTokensToSwap == 0) {
            return;
        }

        if(contractBalance > swapTokensAtAmount * 2){
          contractBalance = swapTokensAtAmount * 2;
        }

        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = (contractBalance * tokensForLiquidity) / totalTokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);

        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH);

        uint256 ethBalance = address(this).balance.sub(initialETHBalance);

        uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div(totalTokensToSwap);
        uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap);

        uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev;

        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDev = 0;

        (success, ) = address(devWallet).call{value: ethForDev}("");
        require(success);

        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(
                amountToSwapForETH,
                ethForLiquidity,
                tokensForLiquidity
            );
        }

        (success, ) = address(marketingWallet).call{ value: address(this).balance }("");
        require(success);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sniper","type":"address"}],"name":"BoughtEarly","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":[],"name":"LimitsRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","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":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","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":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"lpWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_holderLastTransferTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_lastAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","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":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"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":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","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":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","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":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","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":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"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":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newDevWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newLPWallet","type":"address"}],"name":"updateLPWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckEth","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawStuckTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526005805462ffffff60a01b1916600160a01b1790553480156200002657600080fd5b506040805180820182526004808252630a4aaa0b60e31b6020808401829052845180860190955291845290830152906003620000638382620007e0565b506004620000728282620007e0565b5050506200008f620000896200048460201b60201c565b62000488565b737a250d5630b4cf539739df2c5dacb4c659f2488d620000b1816001620004da565b6001600160a01b03811660808190526040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa158015620000fc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001229190620008ac565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000170573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001969190620008ac565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620001e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200020a9190620008ac565b6001600160a01b031660a081905262000225906001620004da565b60a0516200023590600162000554565b600180808080806a52b7d2dcc80cd2e40000006064620002568284620008f4565b62000262919062000914565b601755606462000274826001620008f4565b62000280919062000914565b60195561271062000293826003620008f4565b6200029f919062000914565b601855600a849055600b839055600c82905581620002be848662000937565b620002ca919062000937565b600955600e879055600f869055601085905584620002e9878962000937565b620002f5919062000937565b600d55601480546001600160a01b031990811673dc471f0502e906da653cd1cc7af3356626e3ff2c1790915560158054821673285a68099bcc8be97150865bb069be85f8efa65f1790556016805490911673b530899275a05b5ce67ea9c6a4491b1b51374f771790556200037d620003756005546001600160a01b031690565b6001620004da565b6200038a306001620004da565b6200039961dead6001620004da565b601454620003b2906001600160a01b03166001620004da565b601554620003cb906001600160a01b03166001620004da565b601654620003e4906001600160a01b03166001620004da565b62000403620003fb6005546001600160a01b031690565b6001620005a8565b62000410306001620005a8565b6200041f61dead6001620005a8565b60145462000438906001600160a01b03166001620005a8565b60155462000451906001600160a01b03166001620005a8565b6016546200046a906001600160a01b03166001620005a8565b62000476338262000652565b50505050505050506200094d565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6005546001600160a01b03163314620005295760405162461bcd60e51b815260206004820181905260248201526000805160206200348083398151915260448201526064015b60405180910390fd5b6001600160a01b03919091166000908152601b60205260409020805460ff1916911515919091179055565b6001600160a01b0382166000818152601c6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6005546001600160a01b03163314620005f35760405162461bcd60e51b8152602060048201819052602482015260008051602062003480833981519152604482015260640162000520565b6001600160a01b0382166000818152601a6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620006aa5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000520565b8060026000828254620006be919062000937565b90915550506001600160a01b03821660009081526020819052604081208054839290620006ed90849062000937565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200076757607f821691505b6020821081036200078857634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200073757600081815260208120601f850160051c81016020861015620007b75750805b601f850160051c820191505b81811015620007d857828155600101620007c3565b505050505050565b81516001600160401b03811115620007fc57620007fc6200073c565b62000814816200080d845462000752565b846200078e565b602080601f8311600181146200084c5760008415620008335750858301515b600019600386901b1c1916600185901b178555620007d8565b600085815260208120601f198616915b828110156200087d578886015182559484019460019091019084016200085c565b50858210156200089c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208284031215620008bf57600080fd5b81516001600160a01b0381168114620008d757600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176200090e576200090e620008de565b92915050565b6000826200093257634e487b7160e01b600052601260045260246000fd5b500490565b808201808211156200090e576200090e620008de565b60805160a051612adc620009a4600039600081816105680152818161106f0152611b6e01526000818161041f015281816123ef015281816124a8015281816124e40152818161255601526125be0152612adc6000f3fe6080604052600436106103545760003560e01c80638da5cb5b116101c6578063c0246668116100f7578063dd62ed3e11610095578063f2fde38b1161006f578063f2fde38b146109e2578063f637434214610a02578063f8b45b0514610a18578063fbc10c5514610a2e57600080fd5b8063dd62ed3e14610970578063e2f45605146109b6578063f11a24d3146109cc57600080fd5b8063c8c8ebe4116100d1578063c8c8ebe4146108f7578063cd5f101d1461090d578063d257b34f1461093a578063d85ba0631461095a57600080fd5b8063c024666814610897578063c17b5b8c146108b7578063c18bc195146108d757600080fd5b8063a07873f211610164578063a9059cbb1161013e578063a9059cbb14610806578063aacebbe314610826578063b62496f514610846578063bbc0c7421461087657600080fd5b8063a07873f2146107b0578063a0d82dc5146107d0578063a457c2d7146107e657600080fd5b806395d89b41116101a057806395d89b411461074f5780639a7a23d6146107645780639c3b4fdc146107845780639fccce321461079a57600080fd5b80638da5cb5b146106fb5780639213691314610719578063924de9b71461072f57600080fd5b806339509351116102a0578063715018a61161023e5780637bce5a04116102185780637bce5a041461069b5780637fa787ba146106b15780638095d564146106c65780638a8c523c146106e657600080fd5b8063715018a614610651578063751039fc146106665780637571336a1461067b57600080fd5b80634fbee1931161027a5780634fbee193146105ab5780636a486a8e146105e45780636ddd1713146105fa57806370a082311461061b57600080fd5b8063395093511461053657806349bd5a5e146105565780634a62bb651461058a57600080fd5b80631816467f1161030d578063203e727e116102e7578063203e727e146104c457806323b872dd146104e457806327c8f83514610504578063313ce5671461051a57600080fd5b80631816467f146104785780631a8145bb146104985780631f3fed8f146104ae57600080fd5b806306fdde03146103605780630772abcd1461038b578063095ea7b3146103ad57806310d5de53146103dd5780631694505e1461040d57806318160ddd1461045957600080fd5b3661035b57005b600080fd5b34801561036c57600080fd5b50610375610a4e565b6040516103829190612636565b60405180910390f35b34801561039757600080fd5b506103ab6103a6366004612699565b610ae0565b005b3480156103b957600080fd5b506103cd6103c83660046126ea565b610b7d565b6040519015158152602001610382565b3480156103e957600080fd5b506103cd6103f8366004612716565b601b6020526000908152604090205460ff1681565b34801561041957600080fd5b506104417f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610382565b34801561046557600080fd5b506002545b604051908152602001610382565b34801561048457600080fd5b506103ab610493366004612716565b610b94565b3480156104a457600080fd5b5061046a60125481565b3480156104ba57600080fd5b5061046a60115481565b3480156104d057600080fd5b506103ab6104df366004612733565b610c24565b3480156104f057600080fd5b506103cd6104ff36600461274c565b610d01565b34801561051057600080fd5b5061044161dead81565b34801561052657600080fd5b5060405160128152602001610382565b34801561054257600080fd5b506103cd6105513660046126ea565b610dab565b34801561056257600080fd5b506104417f000000000000000000000000000000000000000000000000000000000000000081565b34801561059657600080fd5b506005546103cd90600160a01b900460ff1681565b3480156105b757600080fd5b506103cd6105c6366004612716565b6001600160a01b03166000908152601a602052604090205460ff1690565b3480156105f057600080fd5b5061046a60095481565b34801561060657600080fd5b506005546103cd90600160b01b900460ff1681565b34801561062757600080fd5b5061046a610636366004612716565b6001600160a01b031660009081526020819052604090205490565b34801561065d57600080fd5b506103ab610de7565b34801561067257600080fd5b506103cd610e1d565b34801561068757600080fd5b506103ab61069636600461279b565b610e86565b3480156106a757600080fd5b5061046a600e5481565b3480156106bd57600080fd5b506103cd610edb565b3480156106d257600080fd5b506103ab6106e13660046127d4565b610f55565b3480156106f257600080fd5b506103ab610fab565b34801561070757600080fd5b506005546001600160a01b0316610441565b34801561072557600080fd5b5061046a600a5481565b34801561073b57600080fd5b506103ab61074a366004612800565b610fec565b34801561075b57600080fd5b50610375611034565b34801561077057600080fd5b506103ab61077f36600461279b565b611043565b34801561079057600080fd5b5061046a60105481565b3480156107a657600080fd5b5061046a60135481565b3480156107bc57600080fd5b50600654610441906001600160a01b031681565b3480156107dc57600080fd5b5061046a600c5481565b3480156107f257600080fd5b506103cd6108013660046126ea565b611122565b34801561081257600080fd5b506103cd6108213660046126ea565b6111bb565b34801561083257600080fd5b506103ab610841366004612716565b6111c8565b34801561085257600080fd5b506103cd610861366004612716565b601c6020526000908152604090205460ff1681565b34801561088257600080fd5b506005546103cd90600160a81b900460ff1681565b3480156108a357600080fd5b506103ab6108b236600461279b565b61123c565b3480156108c357600080fd5b506103ab6108d23660046127d4565b6112c5565b3480156108e357600080fd5b506103ab6108f2366004612733565b61131b565b34801561090357600080fd5b5061046a60175481565b34801561091957600080fd5b5061046a610928366004612716565b60076020526000908152604090205481565b34801561094657600080fd5b506103cd610955366004612733565b6113ec565b34801561096657600080fd5b5061046a600d5481565b34801561097c57600080fd5b5061046a61098b36600461281d565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156109c257600080fd5b5061046a60185481565b3480156109d857600080fd5b5061046a600f5481565b3480156109ee57600080fd5b506103ab6109fd366004612716565b61153e565b348015610a0e57600080fd5b5061046a600b5481565b348015610a2457600080fd5b5061046a60195481565b348015610a3a57600080fd5b506103ab610a49366004612716565b6115d9565b606060038054610a5d9061284b565b80601f0160208091040260200160405190810160405280929190818152602001828054610a899061284b565b8015610ad65780601f10610aab57610100808354040283529160200191610ad6565b820191906000526020600020905b815481529060010190602001808311610ab957829003601f168201915b5050505050905090565b6014546001600160a01b03163314610af757600080fd5b6040516323b872dd60e01b81526001600160a01b0384811660048301528381166024830152604482018390528591908216906323b872dd906064016020604051808303816000875af1158015610b51573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b759190612885565b505050505050565b6000610b8a33848461164d565b5060015b92915050565b6005546001600160a01b03163314610bc75760405162461bcd60e51b8152600401610bbe906128a2565b60405180910390fd5b6015546040516001600160a01b03918216918316907f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74390600090a3601580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610c4e5760405162461bcd60e51b8152600401610bbe906128a2565b670de0b6b3a76400006103e8610c6360025490565b610c6e9060016128ed565b610c789190612904565b610c829190612904565b811015610ce95760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526e6c6f776572207468616e20302e312560881b6064820152608401610bbe565b610cfb81670de0b6b3a76400006128ed565b60175550565b6000610d0e848484611771565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610d935760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610bbe565b610da0853385840361164d565b506001949350505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610b8a918590610de2908690612926565b61164d565b6005546001600160a01b03163314610e115760405162461bcd60e51b8152600401610bbe906128a2565b610e1b6000611f1f565b565b6005546000906001600160a01b03163314610e4a5760405162461bcd60e51b8152600401610bbe906128a2565b6005805460ff60a01b191690556040517f7bfa7bacf025baa75e5308bf15bcf2948f406c7ebe3eb1a8bb611862b9d647ef90600090a150600190565b6005546001600160a01b03163314610eb05760405162461bcd60e51b8152600401610bbe906128a2565b6001600160a01b03919091166000908152601b60205260409020805460ff1916911515919091179055565b6014546000906001600160a01b03163314610ef557600080fd5b60145460405147916000916001600160a01b039091169083908381818185875af1925050503d8060008114610f46576040519150601f19603f3d011682016040523d82523d6000602084013e610f4b565b606091505b5090949350505050565b6005546001600160a01b03163314610f7f5760405162461bcd60e51b8152600401610bbe906128a2565b600e839055600f829055601081905580610f998385612926565b610fa39190612926565b600d55505050565b6005546001600160a01b03163314610fd55760405162461bcd60e51b8152600401610bbe906128a2565b6005805461ffff60a81b191661010160a81b179055565b6005546001600160a01b031633146110165760405162461bcd60e51b8152600401610bbe906128a2565b60058054911515600160b01b0260ff60b01b19909216919091179055565b606060048054610a5d9061284b565b6005546001600160a01b0316331461106d5760405162461bcd60e51b8152600401610bbe906128a2565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316036111145760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610bbe565b61111e8282611f71565b5050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156111a45760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610bbe565b6111b1338585840361164d565b5060019392505050565b6000610b8a338484611771565b6014546001600160a01b031633146111df57600080fd5b6014546040516001600160a01b03918216918316907fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567490600090a3601480546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146112665760405162461bcd60e51b8152600401610bbe906128a2565b6001600160a01b0382166000818152601a6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146112ef5760405162461bcd60e51b8152600401610bbe906128a2565b600a839055600b829055600c819055806113098385612926565b6113139190612926565b600955505050565b6005546001600160a01b031633146113455760405162461bcd60e51b8152600401610bbe906128a2565b670de0b6b3a76400006103e861135a60025490565b6113659060056128ed565b61136f9190612904565b6113799190612904565b8110156113d45760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e352560e01b6064820152608401610bbe565b6113e681670de0b6b3a76400006128ed565b60195550565b6005546000906001600160a01b031633146114195760405162461bcd60e51b8152600401610bbe906128a2565b620186a061142660025490565b6114319060016128ed565b61143b9190612904565b8210156114a85760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610bbe565b6103e86114b460025490565b6114bf9060056128ed565b6114c99190612904565b8211156115355760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610bbe565b50601855600190565b6005546001600160a01b031633146115685760405162461bcd60e51b8152600401610bbe906128a2565b6001600160a01b0381166115cd5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610bbe565b6115d681611f1f565b50565b6016546001600160a01b031633146115f057600080fd5b6016546040516001600160a01b03918216918316907f8e4fb3162b55d3fcdb7507ecfed5ab4ea5d2bd7494d0bb621d698a52ea3f74b490600090a3601680546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166116af5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610bbe565b6001600160a01b0382166117105760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610bbe565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166117975760405162461bcd60e51b8152600401610bbe90612939565b6001600160a01b0382166117bd5760405162461bcd60e51b8152600401610bbe9061297e565b806000036117d6576117d183836000611fc5565b505050565b600554600160a01b900460ff1615611b4e576005546001600160a01b0384811691161480159061181457506005546001600160a01b03838116911614155b801561182857506001600160a01b03821615155b801561183f57506001600160a01b03821661dead14155b801561184e575060085460ff16155b15611b4e57600554600160a81b900460ff166118e8576001600160a01b0383166000908152601a602052604090205460ff16806118a357506001600160a01b0382166000908152601a602052604090205460ff165b6118e85760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610bbe565b6001600160a01b0383166000908152601c602052604090205460ff16801561192957506001600160a01b0382166000908152601b602052604090205460ff16155b15611a0d5760175481111561199e5760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610bbe565b6019546001600160a01b0383166000908152602081905260409020546119c49083612926565b1115611a085760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610bbe565b611b4e565b6001600160a01b0382166000908152601c602052604090205460ff168015611a4e57506001600160a01b0383166000908152601b602052604090205460ff16155b15611ac457601754811115611a085760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610bbe565b6001600160a01b0382166000908152601b602052604090205460ff16611b4e576019546001600160a01b038316600090815260208190526040902054611b0a9083612926565b1115611b4e5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610bbe565b306000908152602081905260409020546018548110156001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811690861603611bd7576001600160a01b0384166000908152600760205260408120549003611bd2576001600160a01b03841660009081526007602052604090204390555b611bfd565b60085460ff16611bfd57600680546001600160a01b0319166001600160a01b0387161790555b808015611c135750600554600160b01b900460ff165b8015611c22575060085460ff16155b8015611c4757506001600160a01b0385166000908152601c602052604090205460ff16155b8015611c6c57506001600160a01b0385166000908152601a602052604090205460ff16155b8015611c9157506001600160a01b0384166000908152601a602052604090205460ff16155b15611cb6576008805460ff19166001179055611cab61211a565b6008805460ff191690555b6008546001600160a01b0386166000908152601a602052604090205460ff91821615911680611cfd57506001600160a01b0385166000908152601a602052604090205460ff165b15611d06575060005b60008115611f0b576001600160a01b0386166000908152601c602052604090205460ff168015611d3857506000600954115b15611df657611d5d6064611d576009548861236d90919063ffffffff16565b90612380565b9050600954600b5482611d7091906128ed565b611d7a9190612904565b60126000828254611d8b9190612926565b9091555050600954600c54611da090836128ed565b611daa9190612904565b60136000828254611dbb9190612926565b9091555050600954600a54611dd090836128ed565b611dda9190612904565b60116000828254611deb9190612926565b90915550611eed9050565b6001600160a01b0387166000908152601c602052604090205460ff168015611e2057506000600d54115b15611eed57601654611e3f906001600160a01b031630610de260025490565b611e596064611d57600d548861236d90919063ffffffff16565b9050600d54600f5482611e6c91906128ed565b611e769190612904565b60126000828254611e879190612926565b9091555050600d54601054611e9c90836128ed565b611ea69190612904565b60136000828254611eb79190612926565b9091555050600d54600e54611ecc90836128ed565b611ed69190612904565b60116000828254611ee79190612926565b90915550505b8015611efe57611efe873083611fc5565b611f0881866129c1565b94505b611f16878787611fc5565b50505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0382166000818152601c6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b038316611feb5760405162461bcd60e51b8152600401610bbe90612939565b6001600160a01b0382166120115760405162461bcd60e51b8152600401610bbe9061297e565b6001600160a01b038316600090815260208190526040902054818110156120895760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610bbe565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906120c0908490612926565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161210c91815260200190565b60405180910390a350505050565b30600090815260208190526040812054905060006013546011546012546121419190612926565b61214b9190612926565b9050600082158061215a575081155b1561216457505050565b6018546121729060026128ed565b83111561218a576018546121879060026128ed565b92505b60006002836012548661219d91906128ed565b6121a79190612904565b6121b19190612904565b905060006121bf858361238c565b9050476121cb82612398565b60006121d7478361238c565b905060006121f487611d576011548561236d90919063ffffffff16565b9050600061221188611d576013548661236d90919063ffffffff16565b905060008161222084866129c1565b61222a91906129c1565b60006012819055601181905560138190556015546040519293506001600160a01b031691849181818185875af1925050503d8060008114612287576040519150601f19603f3d011682016040523d82523d6000602084013e61228c565b606091505b5050809850508761229c57600080fd5b6000871180156122ac5750600081115b156122ff576122bb8782612550565b601254604080518881526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b6014546040516001600160a01b03909116904790600081818185875af1925050503d806000811461234c576040519150601f19603f3d011682016040523d82523d6000602084013e612351565b606091505b5050809850508761236157600080fd5b50505050505050505050565b600061237982846128ed565b9392505050565b60006123798284612904565b600061237982846129c1565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106123cd576123cd6129d4565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561244b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061246f91906129ea565b81600181518110612482576124826129d4565b60200260200101906001600160a01b031690816001600160a01b0316815250506124cd307f00000000000000000000000000000000000000000000000000000000000000008461164d565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac94790612522908590600090869030904290600401612a07565b600060405180830381600087803b15801561253c57600080fd5b505af1158015610b75573d6000803e3d6000fd5b61257b307f00000000000000000000000000000000000000000000000000000000000000008461164d565b60165460405163f305d71960e01b81523060048201526024810184905260006044820181905260648201526001600160a01b0391821660848201524260a48201527f00000000000000000000000000000000000000000000000000000000000000009091169063f305d71990839060c40160606040518083038185885af115801561260a573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061262f9190612a78565b5050505050565b600060208083528351808285015260005b8181101561266357858101830151858201604001528201612647565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146115d657600080fd5b600080600080608085870312156126af57600080fd5b84356126ba81612684565b935060208501356126ca81612684565b925060408501356126da81612684565b9396929550929360600135925050565b600080604083850312156126fd57600080fd5b823561270881612684565b946020939093013593505050565b60006020828403121561272857600080fd5b813561237981612684565b60006020828403121561274557600080fd5b5035919050565b60008060006060848603121561276157600080fd5b833561276c81612684565b9250602084013561277c81612684565b929592945050506040919091013590565b80151581146115d657600080fd5b600080604083850312156127ae57600080fd5b82356127b981612684565b915060208301356127c98161278d565b809150509250929050565b6000806000606084860312156127e957600080fd5b505081359360208301359350604090920135919050565b60006020828403121561281257600080fd5b81356123798161278d565b6000806040838503121561283057600080fd5b823561283b81612684565b915060208301356127c981612684565b600181811c9082168061285f57607f821691505b60208210810361287f57634e487b7160e01b600052602260045260246000fd5b50919050565b60006020828403121561289757600080fd5b81516123798161278d565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610b8e57610b8e6128d7565b60008261292157634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610b8e57610b8e6128d7565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610b8e57610b8e6128d7565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156129fc57600080fd5b815161237981612684565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612a575784516001600160a01b031683529383019391830191600101612a32565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612a8d57600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220a68b2996a7fe4231c3dee531e3b538ad05986f2c80b8d9c81c30916aa3f8608e64736f6c634300081300334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572

Deployed Bytecode

0x6080604052600436106103545760003560e01c80638da5cb5b116101c6578063c0246668116100f7578063dd62ed3e11610095578063f2fde38b1161006f578063f2fde38b146109e2578063f637434214610a02578063f8b45b0514610a18578063fbc10c5514610a2e57600080fd5b8063dd62ed3e14610970578063e2f45605146109b6578063f11a24d3146109cc57600080fd5b8063c8c8ebe4116100d1578063c8c8ebe4146108f7578063cd5f101d1461090d578063d257b34f1461093a578063d85ba0631461095a57600080fd5b8063c024666814610897578063c17b5b8c146108b7578063c18bc195146108d757600080fd5b8063a07873f211610164578063a9059cbb1161013e578063a9059cbb14610806578063aacebbe314610826578063b62496f514610846578063bbc0c7421461087657600080fd5b8063a07873f2146107b0578063a0d82dc5146107d0578063a457c2d7146107e657600080fd5b806395d89b41116101a057806395d89b411461074f5780639a7a23d6146107645780639c3b4fdc146107845780639fccce321461079a57600080fd5b80638da5cb5b146106fb5780639213691314610719578063924de9b71461072f57600080fd5b806339509351116102a0578063715018a61161023e5780637bce5a04116102185780637bce5a041461069b5780637fa787ba146106b15780638095d564146106c65780638a8c523c146106e657600080fd5b8063715018a614610651578063751039fc146106665780637571336a1461067b57600080fd5b80634fbee1931161027a5780634fbee193146105ab5780636a486a8e146105e45780636ddd1713146105fa57806370a082311461061b57600080fd5b8063395093511461053657806349bd5a5e146105565780634a62bb651461058a57600080fd5b80631816467f1161030d578063203e727e116102e7578063203e727e146104c457806323b872dd146104e457806327c8f83514610504578063313ce5671461051a57600080fd5b80631816467f146104785780631a8145bb146104985780631f3fed8f146104ae57600080fd5b806306fdde03146103605780630772abcd1461038b578063095ea7b3146103ad57806310d5de53146103dd5780631694505e1461040d57806318160ddd1461045957600080fd5b3661035b57005b600080fd5b34801561036c57600080fd5b50610375610a4e565b6040516103829190612636565b60405180910390f35b34801561039757600080fd5b506103ab6103a6366004612699565b610ae0565b005b3480156103b957600080fd5b506103cd6103c83660046126ea565b610b7d565b6040519015158152602001610382565b3480156103e957600080fd5b506103cd6103f8366004612716565b601b6020526000908152604090205460ff1681565b34801561041957600080fd5b506104417f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b039091168152602001610382565b34801561046557600080fd5b506002545b604051908152602001610382565b34801561048457600080fd5b506103ab610493366004612716565b610b94565b3480156104a457600080fd5b5061046a60125481565b3480156104ba57600080fd5b5061046a60115481565b3480156104d057600080fd5b506103ab6104df366004612733565b610c24565b3480156104f057600080fd5b506103cd6104ff36600461274c565b610d01565b34801561051057600080fd5b5061044161dead81565b34801561052657600080fd5b5060405160128152602001610382565b34801561054257600080fd5b506103cd6105513660046126ea565b610dab565b34801561056257600080fd5b506104417f00000000000000000000000032593fd13530eae06cd8c269e3df3d7001edc46581565b34801561059657600080fd5b506005546103cd90600160a01b900460ff1681565b3480156105b757600080fd5b506103cd6105c6366004612716565b6001600160a01b03166000908152601a602052604090205460ff1690565b3480156105f057600080fd5b5061046a60095481565b34801561060657600080fd5b506005546103cd90600160b01b900460ff1681565b34801561062757600080fd5b5061046a610636366004612716565b6001600160a01b031660009081526020819052604090205490565b34801561065d57600080fd5b506103ab610de7565b34801561067257600080fd5b506103cd610e1d565b34801561068757600080fd5b506103ab61069636600461279b565b610e86565b3480156106a757600080fd5b5061046a600e5481565b3480156106bd57600080fd5b506103cd610edb565b3480156106d257600080fd5b506103ab6106e13660046127d4565b610f55565b3480156106f257600080fd5b506103ab610fab565b34801561070757600080fd5b506005546001600160a01b0316610441565b34801561072557600080fd5b5061046a600a5481565b34801561073b57600080fd5b506103ab61074a366004612800565b610fec565b34801561075b57600080fd5b50610375611034565b34801561077057600080fd5b506103ab61077f36600461279b565b611043565b34801561079057600080fd5b5061046a60105481565b3480156107a657600080fd5b5061046a60135481565b3480156107bc57600080fd5b50600654610441906001600160a01b031681565b3480156107dc57600080fd5b5061046a600c5481565b3480156107f257600080fd5b506103cd6108013660046126ea565b611122565b34801561081257600080fd5b506103cd6108213660046126ea565b6111bb565b34801561083257600080fd5b506103ab610841366004612716565b6111c8565b34801561085257600080fd5b506103cd610861366004612716565b601c6020526000908152604090205460ff1681565b34801561088257600080fd5b506005546103cd90600160a81b900460ff1681565b3480156108a357600080fd5b506103ab6108b236600461279b565b61123c565b3480156108c357600080fd5b506103ab6108d23660046127d4565b6112c5565b3480156108e357600080fd5b506103ab6108f2366004612733565b61131b565b34801561090357600080fd5b5061046a60175481565b34801561091957600080fd5b5061046a610928366004612716565b60076020526000908152604090205481565b34801561094657600080fd5b506103cd610955366004612733565b6113ec565b34801561096657600080fd5b5061046a600d5481565b34801561097c57600080fd5b5061046a61098b36600461281d565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156109c257600080fd5b5061046a60185481565b3480156109d857600080fd5b5061046a600f5481565b3480156109ee57600080fd5b506103ab6109fd366004612716565b61153e565b348015610a0e57600080fd5b5061046a600b5481565b348015610a2457600080fd5b5061046a60195481565b348015610a3a57600080fd5b506103ab610a49366004612716565b6115d9565b606060038054610a5d9061284b565b80601f0160208091040260200160405190810160405280929190818152602001828054610a899061284b565b8015610ad65780601f10610aab57610100808354040283529160200191610ad6565b820191906000526020600020905b815481529060010190602001808311610ab957829003601f168201915b5050505050905090565b6014546001600160a01b03163314610af757600080fd5b6040516323b872dd60e01b81526001600160a01b0384811660048301528381166024830152604482018390528591908216906323b872dd906064016020604051808303816000875af1158015610b51573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b759190612885565b505050505050565b6000610b8a33848461164d565b5060015b92915050565b6005546001600160a01b03163314610bc75760405162461bcd60e51b8152600401610bbe906128a2565b60405180910390fd5b6015546040516001600160a01b03918216918316907f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74390600090a3601580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610c4e5760405162461bcd60e51b8152600401610bbe906128a2565b670de0b6b3a76400006103e8610c6360025490565b610c6e9060016128ed565b610c789190612904565b610c829190612904565b811015610ce95760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526e6c6f776572207468616e20302e312560881b6064820152608401610bbe565b610cfb81670de0b6b3a76400006128ed565b60175550565b6000610d0e848484611771565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610d935760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610bbe565b610da0853385840361164d565b506001949350505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610b8a918590610de2908690612926565b61164d565b6005546001600160a01b03163314610e115760405162461bcd60e51b8152600401610bbe906128a2565b610e1b6000611f1f565b565b6005546000906001600160a01b03163314610e4a5760405162461bcd60e51b8152600401610bbe906128a2565b6005805460ff60a01b191690556040517f7bfa7bacf025baa75e5308bf15bcf2948f406c7ebe3eb1a8bb611862b9d647ef90600090a150600190565b6005546001600160a01b03163314610eb05760405162461bcd60e51b8152600401610bbe906128a2565b6001600160a01b03919091166000908152601b60205260409020805460ff1916911515919091179055565b6014546000906001600160a01b03163314610ef557600080fd5b60145460405147916000916001600160a01b039091169083908381818185875af1925050503d8060008114610f46576040519150601f19603f3d011682016040523d82523d6000602084013e610f4b565b606091505b5090949350505050565b6005546001600160a01b03163314610f7f5760405162461bcd60e51b8152600401610bbe906128a2565b600e839055600f829055601081905580610f998385612926565b610fa39190612926565b600d55505050565b6005546001600160a01b03163314610fd55760405162461bcd60e51b8152600401610bbe906128a2565b6005805461ffff60a81b191661010160a81b179055565b6005546001600160a01b031633146110165760405162461bcd60e51b8152600401610bbe906128a2565b60058054911515600160b01b0260ff60b01b19909216919091179055565b606060048054610a5d9061284b565b6005546001600160a01b0316331461106d5760405162461bcd60e51b8152600401610bbe906128a2565b7f00000000000000000000000032593fd13530eae06cd8c269e3df3d7001edc4656001600160a01b0316826001600160a01b0316036111145760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610bbe565b61111e8282611f71565b5050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156111a45760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610bbe565b6111b1338585840361164d565b5060019392505050565b6000610b8a338484611771565b6014546001600160a01b031633146111df57600080fd5b6014546040516001600160a01b03918216918316907fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567490600090a3601480546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146112665760405162461bcd60e51b8152600401610bbe906128a2565b6001600160a01b0382166000818152601a6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146112ef5760405162461bcd60e51b8152600401610bbe906128a2565b600a839055600b829055600c819055806113098385612926565b6113139190612926565b600955505050565b6005546001600160a01b031633146113455760405162461bcd60e51b8152600401610bbe906128a2565b670de0b6b3a76400006103e861135a60025490565b6113659060056128ed565b61136f9190612904565b6113799190612904565b8110156113d45760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e352560e01b6064820152608401610bbe565b6113e681670de0b6b3a76400006128ed565b60195550565b6005546000906001600160a01b031633146114195760405162461bcd60e51b8152600401610bbe906128a2565b620186a061142660025490565b6114319060016128ed565b61143b9190612904565b8210156114a85760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610bbe565b6103e86114b460025490565b6114bf9060056128ed565b6114c99190612904565b8211156115355760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610bbe565b50601855600190565b6005546001600160a01b031633146115685760405162461bcd60e51b8152600401610bbe906128a2565b6001600160a01b0381166115cd5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610bbe565b6115d681611f1f565b50565b6016546001600160a01b031633146115f057600080fd5b6016546040516001600160a01b03918216918316907f8e4fb3162b55d3fcdb7507ecfed5ab4ea5d2bd7494d0bb621d698a52ea3f74b490600090a3601680546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166116af5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610bbe565b6001600160a01b0382166117105760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610bbe565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166117975760405162461bcd60e51b8152600401610bbe90612939565b6001600160a01b0382166117bd5760405162461bcd60e51b8152600401610bbe9061297e565b806000036117d6576117d183836000611fc5565b505050565b600554600160a01b900460ff1615611b4e576005546001600160a01b0384811691161480159061181457506005546001600160a01b03838116911614155b801561182857506001600160a01b03821615155b801561183f57506001600160a01b03821661dead14155b801561184e575060085460ff16155b15611b4e57600554600160a81b900460ff166118e8576001600160a01b0383166000908152601a602052604090205460ff16806118a357506001600160a01b0382166000908152601a602052604090205460ff165b6118e85760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610bbe565b6001600160a01b0383166000908152601c602052604090205460ff16801561192957506001600160a01b0382166000908152601b602052604090205460ff16155b15611a0d5760175481111561199e5760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610bbe565b6019546001600160a01b0383166000908152602081905260409020546119c49083612926565b1115611a085760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610bbe565b611b4e565b6001600160a01b0382166000908152601c602052604090205460ff168015611a4e57506001600160a01b0383166000908152601b602052604090205460ff16155b15611ac457601754811115611a085760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610bbe565b6001600160a01b0382166000908152601b602052604090205460ff16611b4e576019546001600160a01b038316600090815260208190526040902054611b0a9083612926565b1115611b4e5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610bbe565b306000908152602081905260409020546018548110156001600160a01b037f00000000000000000000000032593fd13530eae06cd8c269e3df3d7001edc465811690861603611bd7576001600160a01b0384166000908152600760205260408120549003611bd2576001600160a01b03841660009081526007602052604090204390555b611bfd565b60085460ff16611bfd57600680546001600160a01b0319166001600160a01b0387161790555b808015611c135750600554600160b01b900460ff165b8015611c22575060085460ff16155b8015611c4757506001600160a01b0385166000908152601c602052604090205460ff16155b8015611c6c57506001600160a01b0385166000908152601a602052604090205460ff16155b8015611c9157506001600160a01b0384166000908152601a602052604090205460ff16155b15611cb6576008805460ff19166001179055611cab61211a565b6008805460ff191690555b6008546001600160a01b0386166000908152601a602052604090205460ff91821615911680611cfd57506001600160a01b0385166000908152601a602052604090205460ff165b15611d06575060005b60008115611f0b576001600160a01b0386166000908152601c602052604090205460ff168015611d3857506000600954115b15611df657611d5d6064611d576009548861236d90919063ffffffff16565b90612380565b9050600954600b5482611d7091906128ed565b611d7a9190612904565b60126000828254611d8b9190612926565b9091555050600954600c54611da090836128ed565b611daa9190612904565b60136000828254611dbb9190612926565b9091555050600954600a54611dd090836128ed565b611dda9190612904565b60116000828254611deb9190612926565b90915550611eed9050565b6001600160a01b0387166000908152601c602052604090205460ff168015611e2057506000600d54115b15611eed57601654611e3f906001600160a01b031630610de260025490565b611e596064611d57600d548861236d90919063ffffffff16565b9050600d54600f5482611e6c91906128ed565b611e769190612904565b60126000828254611e879190612926565b9091555050600d54601054611e9c90836128ed565b611ea69190612904565b60136000828254611eb79190612926565b9091555050600d54600e54611ecc90836128ed565b611ed69190612904565b60116000828254611ee79190612926565b90915550505b8015611efe57611efe873083611fc5565b611f0881866129c1565b94505b611f16878787611fc5565b50505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0382166000818152601c6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b038316611feb5760405162461bcd60e51b8152600401610bbe90612939565b6001600160a01b0382166120115760405162461bcd60e51b8152600401610bbe9061297e565b6001600160a01b038316600090815260208190526040902054818110156120895760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610bbe565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906120c0908490612926565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161210c91815260200190565b60405180910390a350505050565b30600090815260208190526040812054905060006013546011546012546121419190612926565b61214b9190612926565b9050600082158061215a575081155b1561216457505050565b6018546121729060026128ed565b83111561218a576018546121879060026128ed565b92505b60006002836012548661219d91906128ed565b6121a79190612904565b6121b19190612904565b905060006121bf858361238c565b9050476121cb82612398565b60006121d7478361238c565b905060006121f487611d576011548561236d90919063ffffffff16565b9050600061221188611d576013548661236d90919063ffffffff16565b905060008161222084866129c1565b61222a91906129c1565b60006012819055601181905560138190556015546040519293506001600160a01b031691849181818185875af1925050503d8060008114612287576040519150601f19603f3d011682016040523d82523d6000602084013e61228c565b606091505b5050809850508761229c57600080fd5b6000871180156122ac5750600081115b156122ff576122bb8782612550565b601254604080518881526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b6014546040516001600160a01b03909116904790600081818185875af1925050503d806000811461234c576040519150601f19603f3d011682016040523d82523d6000602084013e612351565b606091505b5050809850508761236157600080fd5b50505050505050505050565b600061237982846128ed565b9392505050565b60006123798284612904565b600061237982846129c1565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106123cd576123cd6129d4565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561244b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061246f91906129ea565b81600181518110612482576124826129d4565b60200260200101906001600160a01b031690816001600160a01b0316815250506124cd307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461164d565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac94790612522908590600090869030904290600401612a07565b600060405180830381600087803b15801561253c57600080fd5b505af1158015610b75573d6000803e3d6000fd5b61257b307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461164d565b60165460405163f305d71960e01b81523060048201526024810184905260006044820181905260648201526001600160a01b0391821660848201524260a48201527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d9091169063f305d71990839060c40160606040518083038185885af115801561260a573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061262f9190612a78565b5050505050565b600060208083528351808285015260005b8181101561266357858101830151858201604001528201612647565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146115d657600080fd5b600080600080608085870312156126af57600080fd5b84356126ba81612684565b935060208501356126ca81612684565b925060408501356126da81612684565b9396929550929360600135925050565b600080604083850312156126fd57600080fd5b823561270881612684565b946020939093013593505050565b60006020828403121561272857600080fd5b813561237981612684565b60006020828403121561274557600080fd5b5035919050565b60008060006060848603121561276157600080fd5b833561276c81612684565b9250602084013561277c81612684565b929592945050506040919091013590565b80151581146115d657600080fd5b600080604083850312156127ae57600080fd5b82356127b981612684565b915060208301356127c98161278d565b809150509250929050565b6000806000606084860312156127e957600080fd5b505081359360208301359350604090920135919050565b60006020828403121561281257600080fd5b81356123798161278d565b6000806040838503121561283057600080fd5b823561283b81612684565b915060208301356127c981612684565b600181811c9082168061285f57607f821691505b60208210810361287f57634e487b7160e01b600052602260045260246000fd5b50919050565b60006020828403121561289757600080fd5b81516123798161278d565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610b8e57610b8e6128d7565b60008261292157634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610b8e57610b8e6128d7565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610b8e57610b8e6128d7565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156129fc57600080fd5b815161237981612684565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612a575784516001600160a01b031683529383019391830191600101612a32565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612a8d57600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220a68b2996a7fe4231c3dee531e3b538ad05986f2c80b8d9c81c30916aa3f8608e64736f6c63430008130033

Deployed Bytecode Sourcemap

12373:16611:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2101:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26972:256;;;;;;;;;;-1:-1:-1;26972:256:0;;;;;:::i;:::-;;:::i;:::-;;3403:169;;;;;;;;;;-1:-1:-1;3403:169:0;;;;;:::i;:::-;;:::i;:::-;;;1791:14:1;;1784:22;1766:41;;1754:2;1739:18;3403:169:0;1626:187:1;13600:63:0;;;;;;;;;;-1:-1:-1;13600:63:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;12673:51;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2260:32:1;;;2242:51;;2230:2;2215:18;12673:51:0;2070:229:1;2422:108:0;;;;;;;;;;-1:-1:-1;2510:12:0;;2422:108;;;2450:25:1;;;2438:2;2423:18;2422:108:0;2304:177:1;20803:189:0;;;;;;;;;;-1:-1:-1;20803:189:0;;;;;:::i;:::-;;:::i;13194:33::-;;;;;;;;;;;;;;;;13154;;;;;;;;;;;;;;;;18348:275;;;;;;;;;;-1:-1:-1;18348:275:0;;;;;:::i;:::-;;:::i;3580:492::-;;;;;;;;;;-1:-1:-1;3580:492:0;;;;;:::i;:::-;;:::i;12776:53::-;;;;;;;;;;;;12822:6;12776:53;;2321:93;;;;;;;;;;-1:-1:-1;2321:93:0;;2404:2;3482:36:1;;3470:2;3455:18;2321:93:0;3340:184:1;5493:215:0;;;;;;;;;;-1:-1:-1;5493:215:0;;;;;:::i;:::-;;:::i;12731:38::-;;;;;;;;;;;;;;;12412:33;;;;;;;;;;-1:-1:-1;12412:33:0;;;;-1:-1:-1;;;12412:33:0;;;;;;17950:126;;;;;;;;;;-1:-1:-1;17950:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;18040:28:0;18016:4;18040:28;;;:19;:28;;;;;;;;;17950:126;12868:28;;;;;;;;;;;;;;;;12492:31;;;;;;;;;;-1:-1:-1;12492:31:0;;;;-1:-1:-1;;;12492:31:0;;;;;;2538:127;;;;;;;;;;-1:-1:-1;2538:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;2639:18:0;2612:7;2639:18;;;;;;;;;;;;2538:127;11855:103;;;;;;;;;;;;;:::i;17425:152::-;;;;;;;;;;;;;:::i;17585:167::-;;;;;;;;;;-1:-1:-1;17585:167:0;;;;;:::i;:::-;;:::i;13047:30::-;;;;;;;;;;;;;;;;26704:260;;;;;;;;;;;;;:::i;19742:332::-;;;;;;;;;;-1:-1:-1;19742:332:0;;;;;:::i;:::-;;:::i;17261:112::-;;;;;;;;;;;;;:::i;11632:87::-;;;;;;;;;;-1:-1:-1;11705:6:0;;-1:-1:-1;;;;;11705:6:0;11632:87;;12903:31;;;;;;;;;;;;;;;;19286:100;;;;;;;;;;-1:-1:-1;19286:100:0;;;;;:::i;:::-;;:::i;2209:104::-;;;;;;;;;;;;;:::i;20082:304::-;;;;;;;;;;-1:-1:-1;20082:304:0;;;;;:::i;:::-;;:::i;13121:24::-;;;;;;;;;;;;;;;;13234:27;;;;;;;;;;;;;;;;12532;;;;;;;;;;-1:-1:-1;12532:27:0;;;;-1:-1:-1;;;;;12532:27:0;;;12979:25;;;;;;;;;;;;;;;;5716:413;;;;;;;;;;-1:-1:-1;5716:413:0;;;;;:::i;:::-;;:::i;2673:175::-;;;;;;;;;;-1:-1:-1;2673:175:0;;;;;:::i;:::-;;:::i;21000:261::-;;;;;;;;;;-1:-1:-1;21000:261:0;;;;;:::i;:::-;;:::i;13821:57::-;;;;;;;;;;-1:-1:-1;13821:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;12452:33;;;;;;;;;;-1:-1:-1;12452:33:0;;;;-1:-1:-1;;;12452:33:0;;;;;;17760:182;;;;;;;;;;-1:-1:-1;17760:182:0;;;;;:::i;:::-;;:::i;19394:340::-;;;;;;;;;;-1:-1:-1;19394:340:0;;;;;:::i;:::-;;:::i;18084:256::-;;;;;;;;;;-1:-1:-1;18084:256:0;;;;;:::i;:::-;;:::i;13373:35::-;;;;;;;;;;;;;;;;12566:63;;;;;;;;;;-1:-1:-1;12566:63:0;;;;;:::i;:::-;;;;;;;;;;;;;;18693:497;;;;;;;;;;-1:-1:-1;18693:497:0;;;;;:::i;:::-;;:::i;13013:27::-;;;;;;;;;;;;;;;;2856:151;;;;;;;;;;-1:-1:-1;2856:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;2972:18:0;;;2945:7;2972:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;2856:151;13415:33;;;;;;;;;;;;;;;;13084:30;;;;;;;;;;;;;;;;11966:201;;;;;;;;;;-1:-1:-1;11966:201:0;;;;;:::i;:::-;;:::i;12941:31::-;;;;;;;;;;;;;;;;13455:24;;;;;;;;;;;;;;;;20590:205;;;;;;;;;;-1:-1:-1;20590:205:0;;;;;:::i;:::-;;:::i;2101:100::-;2155:13;2188:5;2181:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2101:100;:::o;26972:256::-;27104:15;;-1:-1:-1;;;;;27104:15:0;27090:10;:29;27082:38;;;;;;27176:44;;-1:-1:-1;;;27176:44:0;;-1:-1:-1;;;;;5642:15:1;;;27176:44:0;;;5624:34:1;5694:15;;;5674:18;;;5667:43;5726:18;;;5719:34;;;27158:6:0;;27176:23;;;;;;5559:18:1;;27176:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27071:157;26972:256;;;;:::o;3403:169::-;3486:4;3503:39;720:10;3526:7;3535:6;3503:8;:39::i;:::-;-1:-1:-1;3560:4:0;3403:169;;;;;:::o;20803:189::-;11705:6;;-1:-1:-1;;;;;11705:6:0;720:10;11767:23;11759:68;;;;-1:-1:-1;;;11759:68:0;;;;;;;:::i;:::-;;;;;;;;;20939:9:::1;::::0;20908:41:::1;::::0;-1:-1:-1;;;;;20939:9:0;;::::1;::::0;20908:41;::::1;::::0;::::1;::::0;20939:9:::1;::::0;20908:41:::1;20960:9;:24:::0;;-1:-1:-1;;;;;;20960:24:0::1;-1:-1:-1::0;;;;;20960:24:0;;;::::1;::::0;;;::::1;::::0;;20803:189::o;18348:275::-;11705:6;;-1:-1:-1;;;;;11705:6:0;720:10;11767:23;11759:68;;;;-1:-1:-1;;;11759:68:0;;;;;;;:::i;:::-;18485:4:::1;18477;18456:13;2510:12:::0;;;2422:108;18456:13:::1;:17;::::0;18472:1:::1;18456:17;:::i;:::-;18455:26;;;;:::i;:::-;18454:35;;;;:::i;:::-;18444:6;:45;;18422:142;;;::::0;-1:-1:-1;;;18422:142:0;;7104:2:1;18422:142:0::1;::::0;::::1;7086:21:1::0;7143:2;7123:18;;;7116:30;7182:34;7162:18;;;7155:62;-1:-1:-1;;;7233:18:1;;;7226:45;7288:19;;18422:142:0::1;6902:411:1::0;18422:142:0::1;18598:17;:6:::0;18608::::1;18598:17;:::i;:::-;18575:20;:40:::0;-1:-1:-1;18348:275:0:o;3580:492::-;3720:4;3737:36;3747:6;3755:9;3766:6;3737:9;:36::i;:::-;-1:-1:-1;;;;;3813:19:0;;3786:24;3813:19;;;:11;:19;;;;;;;;720:10;3813:33;;;;;;;;3865:26;;;;3857:79;;;;-1:-1:-1;;;3857:79:0;;7520:2:1;3857:79:0;;;7502:21:1;7559:2;7539:18;;;7532:30;7598:34;7578:18;;;7571:62;-1:-1:-1;;;7649:18:1;;;7642:38;7697:19;;3857:79:0;7318:404:1;3857:79:0;3972:57;3981:6;720:10;4022:6;4003:16;:25;3972:8;:57::i;:::-;-1:-1:-1;4060:4:0;;3580:492;-1:-1:-1;;;;3580:492:0:o;5493:215::-;720:10;5581:4;5630:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;5630:34:0;;;;;;;;;;5581:4;;5598:80;;5621:7;;5630:47;;5667:10;;5630:47;:::i;:::-;5598:8;:80::i;11855:103::-;11705:6;;-1:-1:-1;;;;;11705:6:0;720:10;11767:23;11759:68;;;;-1:-1:-1;;;11759:68:0;;;;;;;:::i;:::-;11920:30:::1;11947:1;11920:18;:30::i;:::-;11855:103::o:0;17425:152::-;11705:6;;17477:4;;-1:-1:-1;;;;;11705:6:0;720:10;11767:23;11759:68;;;;-1:-1:-1;;;11759:68:0;;;;;;;:::i;:::-;17494:14:::1;:22:::0;;-1:-1:-1;;;;17494:22:0::1;::::0;;17532:15:::1;::::0;::::1;::::0;17511:5:::1;::::0;17532:15:::1;-1:-1:-1::0;17565:4:0::1;17425:152:::0;:::o;17585:167::-;11705:6;;-1:-1:-1;;;;;11705:6:0;720:10;11767:23;11759:68;;;;-1:-1:-1;;;11759:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17698:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;17698:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;17585:167::o;26704:260::-;26789:15;;26750:4;;-1:-1:-1;;;;;26789:15:0;26775:10;:29;26767:38;;;;;;26890:15;;26882:49;;26831:21;;26816:12;;-1:-1:-1;;;;;26890:15:0;;;;26831:21;;26816:12;26882:49;26816:12;26882:49;26831:21;26890:15;26882:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26863:68:0;;26704:260;-1:-1:-1;;;;26704:260:0:o;19742:332::-;11705:6;;-1:-1:-1;;;;;11705:6:0;720:10;11767:23;11759:68;;;;-1:-1:-1;;;11759:68:0;;;;;;;:::i;:::-;19892:15:::1;:31:::0;;;19934:15:::1;:31:::0;;;19976:9:::1;:19:::0;;;19988:7;20021:33:::1;19952:13:::0;19910;20021:33:::1;:::i;:::-;:45;;;;:::i;:::-;20006:12;:60:::0;-1:-1:-1;;;19742:332:0:o;17261:112::-;11705:6;;-1:-1:-1;;;;;11705:6:0;720:10;11767:23;11759:68;;;;-1:-1:-1;;;11759:68:0;;;;;;;:::i;:::-;17316:13:::1;:20:::0;;-1:-1:-1;;;;17347:18:0;-1:-1:-1;;;17347:18:0;;;17261:112::o;19286:100::-;11705:6;;-1:-1:-1;;;;;11705:6:0;720:10;11767:23;11759:68;;;;-1:-1:-1;;;11759:68:0;;;;;;;:::i;:::-;19357:11:::1;:21:::0;;;::::1;;-1:-1:-1::0;;;19357:21:0::1;-1:-1:-1::0;;;;19357:21:0;;::::1;::::0;;;::::1;::::0;;19286:100::o;2209:104::-;2265:13;2298:7;2291:14;;;;;:::i;20082:304::-;11705:6;;-1:-1:-1;;;;;11705:6:0;720:10;11767:23;11759:68;;;;-1:-1:-1;;;11759:68:0;;;;;;;:::i;:::-;20226:13:::1;-1:-1:-1::0;;;;;20218:21:0::1;:4;-1:-1:-1::0;;;;;20218:21:0::1;::::0;20196:128:::1;;;::::0;-1:-1:-1;;;20196:128:0;;8269:2:1;20196:128:0::1;::::0;::::1;8251:21:1::0;8308:2;8288:18;;;8281:30;8347:34;8327:18;;;8320:62;8418:27;8398:18;;;8391:55;8463:19;;20196:128:0::1;8067:421:1::0;20196:128:0::1;20337:41;20366:4;20372:5;20337:28;:41::i;:::-;20082:304:::0;;:::o;5716:413::-;720:10;5809:4;5853:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;5853:34:0;;;;;;;;;;5906:35;;;;5898:85;;;;-1:-1:-1;;;5898:85:0;;8695:2:1;5898:85:0;;;8677:21:1;8734:2;8714:18;;;8707:30;8773:34;8753:18;;;8746:62;-1:-1:-1;;;8824:18:1;;;8817:35;8869:19;;5898:85:0;8493:401:1;5898:85:0;6019:67;720:10;6042:7;6070:15;6051:16;:34;6019:8;:67::i;:::-;-1:-1:-1;6117:4:0;;5716:413;-1:-1:-1;;;5716:413:0:o;2673:175::-;2759:4;2776:42;720:10;2800:9;2811:6;2776:9;:42::i;21000:261::-;21115:15;;-1:-1:-1;;;;;21115:15:0;21101:10;:29;21093:38;;;;;;21190:15;;21147:59;;-1:-1:-1;;;;;21190:15:0;;;;21147:59;;;;;21190:15;;21147:59;21217:15;:36;;-1:-1:-1;;;;;;21217:36:0;-1:-1:-1;;;;;21217:36:0;;;;;;;;;;21000:261::o;17760:182::-;11705:6;;-1:-1:-1;;;;;11705:6:0;720:10;11767:23;11759:68;;;;-1:-1:-1;;;11759:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17845:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;17845:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;17900:34;;1766:41:1;;;17900:34:0::1;::::0;1739:18:1;17900:34:0::1;;;;;;;17760:182:::0;;:::o;19394:340::-;11705:6;;-1:-1:-1;;;;;11705:6:0;720:10;11767:23;11759:68;;;;-1:-1:-1;;;11759:68:0;;;;;;;:::i;:::-;19545:16:::1;:32:::0;;;19588:16:::1;:32:::0;;;19631:10:::1;:20:::0;;;19644:7;19678:35:::1;19607:13:::0;19564;19678:35:::1;:::i;:::-;:48;;;;:::i;:::-;19662:13;:64:::0;-1:-1:-1;;;19394:340:0:o;18084:256::-;11705:6;;-1:-1:-1;;;;;11705:6:0;720:10;11767:23;11759:68;;;;-1:-1:-1;;;11759:68:0;;;;;;;:::i;:::-;18224:4:::1;18216;18195:13;2510:12:::0;;;2422:108;18195:13:::1;:17;::::0;18211:1:::1;18195:17;:::i;:::-;18194:26;;;;:::i;:::-;18193:35;;;;:::i;:::-;18183:6;:45;;18161:131;;;::::0;-1:-1:-1;;;18161:131:0;;9101:2:1;18161:131:0::1;::::0;::::1;9083:21:1::0;9140:2;9120:18;;;9113:30;9179:34;9159:18;;;9152:62;-1:-1:-1;;;9230:18:1;;;9223:34;9274:19;;18161:131:0::1;8899:400:1::0;18161:131:0::1;18315:17;:6:::0;18325::::1;18315:17;:::i;:::-;18303:9;:29:::0;-1:-1:-1;18084:256:0:o;18693:497::-;11705:6;;18801:4;;-1:-1:-1;;;;;11705:6:0;720:10;11767:23;11759:68;;;;-1:-1:-1;;;11759:68:0;;;;;;;:::i;:::-;18880:6:::1;18859:13;2510:12:::0;;;2422:108;18859:13:::1;:17;::::0;18875:1:::1;18859:17;:::i;:::-;18858:28;;;;:::i;:::-;18845:9;:41;;18823:144;;;::::0;-1:-1:-1;;;18823:144:0;;9506:2:1;18823:144:0::1;::::0;::::1;9488:21:1::0;9545:2;9525:18;;;9518:30;9584:34;9564:18;;;9557:62;-1:-1:-1;;;9635:18:1;;;9628:51;9696:19;;18823:144:0::1;9304:417:1::0;18823:144:0::1;19035:4;19014:13;2510:12:::0;;;2422:108;19014:13:::1;:17;::::0;19030:1:::1;19014:17;:::i;:::-;19013:26;;;;:::i;:::-;19000:9;:39;;18978:141;;;::::0;-1:-1:-1;;;18978:141:0;;9928:2:1;18978:141:0::1;::::0;::::1;9910:21:1::0;9967:2;9947:18;;;9940:30;10006:34;9986:18;;;9979:62;-1:-1:-1;;;10057:18:1;;;10050:50;10117:19;;18978:141:0::1;9726:416:1::0;18978:141:0::1;-1:-1:-1::0;19130:18:0::1;:30:::0;19178:4:::1;::::0;18693:497::o;11966:201::-;11705:6;;-1:-1:-1;;;;;11705:6:0;720:10;11767:23;11759:68;;;;-1:-1:-1;;;11759:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12055:22:0;::::1;12047:73;;;::::0;-1:-1:-1;;;12047:73:0;;10349:2:1;12047:73:0::1;::::0;::::1;10331:21:1::0;10388:2;10368:18;;;10361:30;10427:34;10407:18;;;10400:62;-1:-1:-1;;;10478:18:1;;;10471:36;10524:19;;12047:73:0::1;10147:402:1::0;12047:73:0::1;12131:28;12150:8;12131:18;:28::i;:::-;11966:201:::0;:::o;20590:205::-;20691:8;;-1:-1:-1;;;;;20691:8:0;20677:10;:22;20669:31;;;;;;20745:8;;20716:38;;-1:-1:-1;;;;;20745:8:0;;;;20716:38;;;;;20745:8;;20716:38;20765:8;:22;;-1:-1:-1;;;;;;20765:22:0;-1:-1:-1;;;;;20765:22:0;;;;;;;;;;20590:205::o;3015:380::-;-1:-1:-1;;;;;3151:19:0;;3143:68;;;;-1:-1:-1;;;3143:68:0;;10756:2:1;3143:68:0;;;10738:21:1;10795:2;10775:18;;;10768:30;10834:34;10814:18;;;10807:62;-1:-1:-1;;;10885:18:1;;;10878:34;10929:19;;3143:68:0;10554:400:1;3143:68:0;-1:-1:-1;;;;;3230:21:0;;3222:68;;;;-1:-1:-1;;;3222:68:0;;11161:2:1;3222:68:0;;;11143:21:1;11200:2;11180:18;;;11173:30;11239:34;11219:18;;;11212:62;-1:-1:-1;;;11290:18:1;;;11283:32;11332:19;;3222:68:0;10959:398:1;3222:68:0;-1:-1:-1;;;;;3303:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;3355:32;;2450:25:1;;;3355:32:0;;2423:18:1;3355:32:0;;;;;;;3015:380;;;:::o;21319:4258::-;-1:-1:-1;;;;;21451:18:0;;21443:68;;;;-1:-1:-1;;;21443:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21530:16:0;;21522:64;;;;-1:-1:-1;;;21522:64:0;;;;;;;:::i;:::-;21603:6;21613:1;21603:11;21599:93;;21631:28;21647:4;21653:2;21657:1;21631:15;:28::i;:::-;21319:4258;;;:::o;21599:93::-;21708:14;;-1:-1:-1;;;21708:14:0;;;;21704:1696;;;11705:6;;-1:-1:-1;;;;;21761:15:0;;;11705:6;;21761:15;;;;:49;;-1:-1:-1;11705:6:0;;-1:-1:-1;;;;;21797:13:0;;;11705:6;;21797:13;;21761:49;:86;;;;-1:-1:-1;;;;;;21831:16:0;;;;21761:86;:128;;;;-1:-1:-1;;;;;;21868:21:0;;21882:6;21868:21;;21761:128;:158;;;;-1:-1:-1;21911:8:0;;;;21910:9;21761:158;21739:1650;;;21959:13;;-1:-1:-1;;;21959:13:0;;;;21954:223;;-1:-1:-1;;;;;22031:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;22060:23:0;;;;;;:19;:23;;;;;;;;22031:52;21997:160;;;;-1:-1:-1;;;21997:160:0;;12374:2:1;21997:160:0;;;12356:21:1;12413:2;12393:18;;;12386:30;-1:-1:-1;;;12432:18:1;;;12425:52;12494:18;;21997:160:0;12172:346:1;21997:160:0;-1:-1:-1;;;;;22252:31:0;;;;;;:25;:31;;;;;;;;:92;;;;-1:-1:-1;;;;;;22309:35:0;;;;;;:31;:35;;;;;;;;22308:36;22252:92;22226:1148;;;22431:20;;22421:6;:30;;22387:169;;;;-1:-1:-1;;;22387:169:0;;12725:2:1;22387:169:0;;;12707:21:1;12764:2;12744:18;;;12737:30;12803:34;12783:18;;;12776:62;-1:-1:-1;;;12854:18:1;;;12847:51;12915:19;;22387:169:0;12523:417:1;22387:169:0;22639:9;;-1:-1:-1;;;;;2639:18:0;;2612:7;2639:18;;;;;;;;;;;22613:22;;:6;:22;:::i;:::-;:35;;22579:140;;;;-1:-1:-1;;;22579:140:0;;13147:2:1;22579:140:0;;;13129:21:1;13186:2;13166:18;;;13159:30;-1:-1:-1;;;13205:18:1;;;13198:49;13264:18;;22579:140:0;12945:343:1;22579:140:0;22226:1148;;;-1:-1:-1;;;;;22818:29:0;;;;;;:25;:29;;;;;;;;:92;;;;-1:-1:-1;;;;;;22873:37:0;;;;;;:31;:37;;;;;;;;22872:38;22818:92;22792:582;;;22997:20;;22987:6;:30;;22953:170;;;;-1:-1:-1;;;22953:170:0;;13495:2:1;22953:170:0;;;13477:21:1;13534:2;13514:18;;;13507:30;13573:34;13553:18;;;13546:62;-1:-1:-1;;;13624:18:1;;;13617:52;13686:19;;22953:170:0;13293:418:1;22792:582:0;-1:-1:-1;;;;;23154:35:0;;;;;;:31;:35;;;;;;;;23149:225;;23274:9;;-1:-1:-1;;;;;2639:18:0;;2612:7;2639:18;;;;;;;;;;;23248:22;;:6;:22;:::i;:::-;:35;;23214:140;;;;-1:-1:-1;;;23214:140:0;;13147:2:1;23214:140:0;;;13129:21:1;13186:2;13166:18;;;13159:30;-1:-1:-1;;;13205:18:1;;;13198:49;13264:18;;23214:140:0;12945:343:1;23214:140:0;23461:4;23412:28;2639:18;;;;;;;;;;;23519;;23495:42;;;-1:-1:-1;;;;;23570:13:0;23554:30;;;;;;23550:253;;-1:-1:-1;;;;;23605:32:0;;;;;;:28;:32;;;;;;:37;;23601:125;;-1:-1:-1;;;;;23663:32:0;;;;;;:28;:32;;;;;23698:12;23663:47;;23601:125;23550:253;;;23747:8;;;;23743:60;;23772:12;:19;;-1:-1:-1;;;;;;23772:19:0;-1:-1:-1;;;;;23772:19:0;;;;;23743:60;23833:7;:35;;;;-1:-1:-1;23857:11:0;;-1:-1:-1;;;23857:11:0;;;;23833:35;:61;;;;-1:-1:-1;23886:8:0;;;;23885:9;23833:61;:110;;;;-1:-1:-1;;;;;;23912:31:0;;;;;;:25;:31;;;;;;;;23911:32;23833:110;:153;;;;-1:-1:-1;;;;;;23961:25:0;;;;;;:19;:25;;;;;;;;23960:26;23833:153;:194;;;;-1:-1:-1;;;;;;24004:23:0;;;;;;:19;:23;;;;;;;;24003:24;23833:194;23815:326;;;24054:8;:15;;-1:-1:-1;;24054:15:0;24065:4;24054:15;;;24086:10;:8;:10::i;:::-;24113:8;:16;;-1:-1:-1;;24113:16:0;;;23815:326;24169:8;;-1:-1:-1;;;;;24279:25:0;;24153:12;24279:25;;;:19;:25;;;;;;24169:8;;;;24168:9;;24279:25;;:52;;-1:-1:-1;;;;;;24308:23:0;;;;;;:19;:23;;;;;;;;24279:52;24275:100;;;-1:-1:-1;24358:5:0;24275:100;24387:12;24492:7;24488:1036;;;-1:-1:-1;;;;;24544:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;24593:1;24577:13;;:17;24544:50;24540:835;;;24622:34;24652:3;24622:25;24633:13;;24622:6;:10;;:25;;;;:::i;:::-;:29;;:34::i;:::-;24615:41;;24725:13;;24705:16;;24698:4;:23;;;;:::i;:::-;24697:41;;;;:::i;:::-;24675:18;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;24795:13:0;;24781:10;;24774:17;;:4;:17;:::i;:::-;24773:35;;;;:::i;:::-;24757:12;;:51;;;;;;;:::i;:::-;;;;-1:-1:-1;;24877:13:0;;24857:16;;24850:23;;:4;:23;:::i;:::-;24849:41;;;;:::i;:::-;24827:18;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;24540:835:0;;-1:-1:-1;24540:835:0;;-1:-1:-1;;;;;24952:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;25002:1;24987:12;;:16;24952:51;24948:427;;;25033:8;;25024:48;;-1:-1:-1;;;;;25033:8:0;25051:4;25058:13;2510:12;;;2422:108;25024:48;25098:33;25127:3;25098:24;25109:12;;25098:6;:10;;:24;;;;:::i;:33::-;25091:40;;25199:12;;25180:15;;25173:4;:22;;;;:::i;:::-;25172:39;;;;:::i;:::-;25150:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;25267:12:0;;25254:9;;25247:16;;:4;:16;:::i;:::-;25246:33;;;;:::i;:::-;25230:12;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;25347:12:0;;25328:15;;25321:22;;:4;:22;:::i;:::-;25320:39;;;;:::i;:::-;25298:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;24948:427:0;25395:8;;25391:91;;25424:42;25440:4;25454;25461;25424:15;:42::i;:::-;25498:14;25508:4;25498:14;;:::i;:::-;;;24488:1036;25536:33;25552:4;25558:2;25562:6;25536:15;:33::i;:::-;21432:4145;;;;21319:4258;;;:::o;12175:191::-;12268:6;;;-1:-1:-1;;;;;12285:17:0;;;-1:-1:-1;;;;;;12285:17:0;;;;;;;12318:40;;12268:6;;;12285:17;12268:6;;12318:40;;12249:16;;12318:40;12238:128;12175:191;:::o;20394:188::-;-1:-1:-1;;;;;20477:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;20477:39:0;;;;;;;;;;20534:40;;20477:39;;:31;20534:40;;;20394:188;;:::o;4345:733::-;-1:-1:-1;;;;;4485:20:0;;4477:70;;;;-1:-1:-1;;;4477:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;4566:23:0;;4558:71;;;;-1:-1:-1;;;4558:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;4726:17:0;;4702:21;4726:17;;;;;;;;;;;4762:23;;;;4754:74;;;;-1:-1:-1;;;4754:74:0;;14051:2:1;4754:74:0;;;14033:21:1;14090:2;14070:18;;;14063:30;14129:34;14109:18;;;14102:62;-1:-1:-1;;;14180:18:1;;;14173:36;14226:19;;4754:74:0;13849:402:1;4754:74:0;-1:-1:-1;;;;;4864:17:0;;;:9;:17;;;;;;;;;;;4884:22;;;4864:42;;4928:20;;;;;;;;:30;;4900:6;;4864:9;4928:30;;4900:6;;4928:30;:::i;:::-;;;;;;;;4993:9;-1:-1:-1;;;;;4976:35:0;4985:6;-1:-1:-1;;;;;4976:35:0;;5004:6;4976:35;;;;2450:25:1;;2438:2;2423:18;;2304:177;4976:35:0;;;;;;;;4466:612;4345:733;;;:::o;27236:1745::-;27319:4;27275:23;2639:18;;;;;;;;;;;27275:50;;27336:25;27445:12;;27411:18;;27377;;:52;;;;:::i;:::-;:80;;;;:::i;:::-;27336:121;-1:-1:-1;27468:12:0;27497:20;;;:46;;-1:-1:-1;27521:22:0;;27497:46;27493:85;;;27560:7;;;27236:1745::o;27493:85::-;27611:18;;:22;;27632:1;27611:22;:::i;:::-;27593:15;:40;27590:109;;;27665:18;;:22;;27686:1;27665:22;:::i;:::-;27647:40;;27590:109;27760:23;27847:1;27827:17;27805:18;;27787:15;:36;;;;:::i;:::-;27786:58;;;;:::i;:::-;:62;;;;:::i;:::-;27760:88;-1:-1:-1;27859:26:0;27888:36;:15;27760:88;27888:19;:36::i;:::-;27859:65;-1:-1:-1;27965:21:0;27999:36;27859:65;27999:16;:36::i;:::-;28048:18;28069:44;:21;28095:17;28069:25;:44::i;:::-;28048:65;;28126:23;28152:57;28191:17;28152:34;28167:18;;28152:10;:14;;:34;;;;:::i;:57::-;28126:83;;28220:17;28240:51;28273:17;28240:28;28255:12;;28240:10;:14;;:28;;;;:::i;:51::-;28220:71;-1:-1:-1;28304:23:0;28220:71;28330:28;28343:15;28330:10;:28;:::i;:::-;:40;;;;:::i;:::-;28404:1;28383:18;:22;;;28416:18;:22;;;28449:12;:16;;;28500:9;;28492:45;;28304:66;;-1:-1:-1;;;;;;28500:9:0;;28523;;28492:45;28404:1;28492:45;28523:9;28500;28492:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28478:59;;;;;28556:7;28548:16;;;;;;28599:1;28581:15;:19;:42;;;;;28622:1;28604:15;:19;28581:42;28577:278;;;28640:46;28653:15;28670;28640:12;:46::i;:::-;28810:18;;28706:137;;;14458:25:1;;;14514:2;14499:18;;14492:34;;;14542:18;;;14535:34;;;;28706:137:0;;;;;;14446:2:1;28706:137:0;;;28577:278;28889:15;;28881:65;;-1:-1:-1;;;;;28889:15:0;;;;28919:21;;28881:65;;;;28919:21;28889:15;28881:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28867:79;;;;;28965:7;28957:16;;;;;;27264:1717;;;;;;;;;;27236:1745::o;396:98::-;454:7;481:5;485:1;481;:5;:::i;:::-;474:12;396:98;-1:-1:-1;;;396:98:0:o;502:::-;560:7;587:5;591:1;587;:5;:::i;290:98::-;348:7;375:5;379:1;375;:5;:::i;25585:589::-;25735:16;;;25749:1;25735:16;;;;;;;;25711:21;;25735:16;;;;;;;;;;-1:-1:-1;25735:16:0;25711:40;;25780:4;25762;25767:1;25762:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;25762:23:0;;;-1:-1:-1;;;;;25762:23:0;;;;;25806:15;-1:-1:-1;;;;;25806:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25796:4;25801:1;25796:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;25796:32:0;;;-1:-1:-1;;;;;25796:32:0;;;;;25841:62;25858:4;25873:15;25891:11;25841:8;:62::i;:::-;25942:224;;-1:-1:-1;;;25942:224:0;;-1:-1:-1;;;;;25942:15:0;:66;;;;:224;;26023:11;;26049:1;;26093:4;;26120;;26140:15;;25942:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26182:514;26330:62;26347:4;26362:15;26380:11;26330:8;:62::i;:::-;26639:8;;26435:253;;-1:-1:-1;;;26435:253:0;;26507:4;26435:253;;;16426:34:1;16476:18;;;16469:34;;;26553:1:0;16519:18:1;;;16512:34;;;16562:18;;;16555:34;-1:-1:-1;;;;;26639:8:0;;;16605:19:1;;;16598:44;26662:15:0;16658:19:1;;;16651:35;26435:15:0;:31;;;;;;26474:9;;16360:19:1;;26435:253:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;26182:514;;:::o;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;703:598;789:6;797;805;813;866:3;854:9;845:7;841:23;837:33;834:53;;;883:1;880;873:12;834:53;922:9;909:23;941:31;966:5;941:31;:::i;:::-;991:5;-1:-1:-1;1048:2:1;1033:18;;1020:32;1061:33;1020:32;1061:33;:::i;:::-;1113:7;-1:-1:-1;1172:2:1;1157:18;;1144:32;1185:33;1144:32;1185:33;:::i;:::-;703:598;;;;-1:-1:-1;1237:7:1;;1291:2;1276:18;1263:32;;-1:-1:-1;;703:598:1:o;1306:315::-;1374:6;1382;1435:2;1423:9;1414:7;1410:23;1406:32;1403:52;;;1451:1;1448;1441:12;1403:52;1490:9;1477:23;1509:31;1534:5;1509:31;:::i;:::-;1559:5;1611:2;1596:18;;;;1583:32;;-1:-1:-1;;;1306:315:1:o;1818:247::-;1877:6;1930:2;1918:9;1909:7;1905:23;1901:32;1898:52;;;1946:1;1943;1936:12;1898:52;1985:9;1972:23;2004:31;2029:5;2004:31;:::i;2486:180::-;2545:6;2598:2;2586:9;2577:7;2573:23;2569:32;2566:52;;;2614:1;2611;2604:12;2566:52;-1:-1:-1;2637:23:1;;2486:180;-1:-1:-1;2486:180:1:o;2671:456::-;2748:6;2756;2764;2817:2;2805:9;2796:7;2792:23;2788:32;2785:52;;;2833:1;2830;2823:12;2785:52;2872:9;2859:23;2891:31;2916:5;2891:31;:::i;:::-;2941:5;-1:-1:-1;2998:2:1;2983:18;;2970:32;3011:33;2970:32;3011:33;:::i;:::-;2671:456;;3063:7;;-1:-1:-1;;;3117:2:1;3102:18;;;;3089:32;;2671:456::o;3529:118::-;3615:5;3608:13;3601:21;3594:5;3591:32;3581:60;;3637:1;3634;3627:12;3652:382;3717:6;3725;3778:2;3766:9;3757:7;3753:23;3749:32;3746:52;;;3794:1;3791;3784:12;3746:52;3833:9;3820:23;3852:31;3877:5;3852:31;:::i;:::-;3902:5;-1:-1:-1;3959:2:1;3944:18;;3931:32;3972:30;3931:32;3972:30;:::i;:::-;4021:7;4011:17;;;3652:382;;;;;:::o;4039:316::-;4116:6;4124;4132;4185:2;4173:9;4164:7;4160:23;4156:32;4153:52;;;4201:1;4198;4191:12;4153:52;-1:-1:-1;;4224:23:1;;;4294:2;4279:18;;4266:32;;-1:-1:-1;4345:2:1;4330:18;;;4317:32;;4039:316;-1:-1:-1;4039:316:1:o;4360:241::-;4416:6;4469:2;4457:9;4448:7;4444:23;4440:32;4437:52;;;4485:1;4482;4475:12;4437:52;4524:9;4511:23;4543:28;4565:5;4543:28;:::i;4606:388::-;4674:6;4682;4735:2;4723:9;4714:7;4710:23;4706:32;4703:52;;;4751:1;4748;4741:12;4703:52;4790:9;4777:23;4809:31;4834:5;4809:31;:::i;:::-;4859:5;-1:-1:-1;4916:2:1;4901:18;;4888:32;4929:33;4888:32;4929:33;:::i;4999:380::-;5078:1;5074:12;;;;5121;;;5142:61;;5196:4;5188:6;5184:17;5174:27;;5142:61;5249:2;5241:6;5238:14;5218:18;5215:38;5212:161;;5295:10;5290:3;5286:20;5283:1;5276:31;5330:4;5327:1;5320:15;5358:4;5355:1;5348:15;5212:161;;4999:380;;;:::o;5764:245::-;5831:6;5884:2;5872:9;5863:7;5859:23;5855:32;5852:52;;;5900:1;5897;5890:12;5852:52;5932:9;5926:16;5951:28;5973:5;5951:28;:::i;6014:356::-;6216:2;6198:21;;;6235:18;;;6228:30;6294:34;6289:2;6274:18;;6267:62;6361:2;6346:18;;6014:356::o;6375:127::-;6436:10;6431:3;6427:20;6424:1;6417:31;6467:4;6464:1;6457:15;6491:4;6488:1;6481:15;6507:168;6580:9;;;6611;;6628:15;;;6622:22;;6608:37;6598:71;;6649:18;;:::i;6680:217::-;6720:1;6746;6736:132;;6790:10;6785:3;6781:20;6778:1;6771:31;6825:4;6822:1;6815:15;6853:4;6850:1;6843:15;6736:132;-1:-1:-1;6882:9:1;;6680:217::o;7727:125::-;7792:9;;;7813:10;;;7810:36;;;7826:18;;:::i;11362:401::-;11564:2;11546:21;;;11603:2;11583:18;;;11576:30;11642:34;11637:2;11622:18;;11615:62;-1:-1:-1;;;11708:2:1;11693:18;;11686:35;11753:3;11738:19;;11362:401::o;11768:399::-;11970:2;11952:21;;;12009:2;11989:18;;;11982:30;12048:34;12043:2;12028:18;;12021:62;-1:-1:-1;;;12114:2:1;12099:18;;12092:33;12157:3;12142:19;;11768:399::o;13716:128::-;13783:9;;;13804:11;;;13801:37;;;13818:18;;:::i;14712:127::-;14773:10;14768:3;14764:20;14761:1;14754:31;14804:4;14801:1;14794:15;14828:4;14825:1;14818:15;14844:251;14914:6;14967:2;14955:9;14946:7;14942:23;14938:32;14935:52;;;14983:1;14980;14973:12;14935:52;15015:9;15009:16;15034:31;15059:5;15034:31;:::i;15100:980::-;15362:4;15410:3;15399:9;15395:19;15441:6;15430:9;15423:25;15467:2;15505:6;15500:2;15489:9;15485:18;15478:34;15548:3;15543:2;15532:9;15528:18;15521:31;15572:6;15607;15601:13;15638:6;15630;15623:22;15676:3;15665:9;15661:19;15654:26;;15715:2;15707:6;15703:15;15689:29;;15736:1;15746:195;15760:6;15757:1;15754:13;15746:195;;;15825:13;;-1:-1:-1;;;;;15821:39:1;15809:52;;15916:15;;;;15881:12;;;;15857:1;15775:9;15746:195;;;-1:-1:-1;;;;;;;15997:32:1;;;;15992:2;15977:18;;15970:60;-1:-1:-1;;;16061:3:1;16046:19;16039:35;15958:3;15100:980;-1:-1:-1;;;15100:980:1:o;16697:306::-;16785:6;16793;16801;16854:2;16842:9;16833:7;16829:23;16825:32;16822:52;;;16870:1;16867;16860:12;16822:52;16899:9;16893:16;16883:26;;16949:2;16938:9;16934:18;16928:25;16918:35;;16993:2;16982:9;16978:18;16972:25;16962:35;;16697:306;;;;;:::o

Swarm Source

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