ETH Price: $3,308.92 (-9.99%)

Token

GROYPER (GPER)
 

Overview

Max Total Supply

69,420,000,000 GPER

Holders

34

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.000000054991763616 GPER

Value
$0.00
0x294e377df96b4f6ee6e1d91baa28c935b3bca231
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:
Groyper

Compiler Version
v0.8.21+commit.d9974bed

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion
File 1 of 1 : groyper.sol
// www.groyper.life
// t.me/groyper_portal
// twitter.com/GROYPER_ERC

// SPDX-License-Identifier: MIT
pragma solidity =0.8.21;
pragma experimental ABIEncoderV2;

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

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

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

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

    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 _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 _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

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

library SafeMath {
   
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

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

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

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

    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

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

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

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

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

    bool private swapping;

    address public marketingWallet;
    address public devWallet;

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

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;

    mapping(address => uint256) private _holderLastTransferTimestamp; 
    bool public transferDelayEnabled = true;

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

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

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

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

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

    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 SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    event AutoNukeLP();

    event ManualNukeLP();

    constructor() ERC20("GROYPER", "GPER") {
        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 = 30;
        uint256 _buyLiquidityFee = 0;
        uint256 _buyDevFee = 0;

        uint256 _sellMarketingFee = 30;
        uint256 _sellLiquidityFee = 0;
        uint256 _sellDevFee = 0;

        uint256 totalSupply = 69_420_000_000 * 1e18;

        maxTransactionAmount = 694_200_000 * 1e18; // 1% from total supply maxTransactionAmountTxn
        maxWallet = 694_200_000 * 1e18; // 1% from total supply maxWallet
        swapTokensAtAmount = (totalSupply * 5) / 10000; // 0.05% swap wallet

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

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

        marketingWallet = address(0x100B527A0f22611a27d0A88D2B90E3a3bF13B89C);
        devWallet = address(0x100B527A0f22611a27d0A88D2B90E3a3bF13B89C); 

        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);

        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);

        _mint(msg.sender, totalSupply);
    }

    receive() external payable {}

    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
    }

    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect = false;
        return true;
    }

    function disableTransferDelay() external onlyOwner returns (bool) {
        transferDelayEnabled = false;
        return true;
    }

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

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

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

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

    function updateSwapEnabled(bool enabled) external onlyOwner {
        swapEnabled = enabled;
    }

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

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

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

    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 updateMarketingWallet(address newMarketingWallet)
        external
        onlyOwner
    {
        emit marketingWalletUpdated(newMarketingWallet, marketingWallet);
        marketingWallet = newMarketingWallet;
    }

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

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

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "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."
                    );
                }

                if (transferDelayEnabled) {
                    if (
                        to != owner() &&
                        to != address(uniswapV2Router) &&
                        to != address(uniswapV2Pair)
                    ) {
                        require(
                            _holderLastTransferTimestamp[tx.origin] <
                                block.number,
                            "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed."
                        );
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }

                if (
                    automatedMarketMakerPairs[from] &&
                    !_isExcludedMaxTransactionAmount[to]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Buy transfer amount exceeds the maxTransactionAmount."
                    );
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
                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 (
            canSwap &&
            swapEnabled &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;

            swapBack();

            swapping = false;
        }

        bool takeFee = !swapping;

        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

        uint256 fees = 0;
        if (takeFee) {
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees;
                tokensForDev += (fees * sellDevFee) / sellTotalFees;
                tokensForMarketing += (fees * sellMarketingFee) / sellTotalFees;
            }
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                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 {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, 
            path,
            address(this),
            block.timestamp
        );
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, 
            0,
            deadAddress,
            block.timestamp
        );
    }

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

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

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

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

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

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

}

Settings
{
  "optimizer": {
    "enabled": false,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  }
}

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":[],"name":"AutoNukeLP","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":"ManualNukeLP","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":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","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":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"newWallet","type":"address"}],"name":"updateDevWallet","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"},{"stateMutability":"payable","type":"receive"}]

60c06040526001600b5f6101000a81548160ff0219169083151502179055505f600b60016101000a81548160ff0219169083151502179055505f600b60026101000a81548160ff0219169083151502179055506001600d5f6101000a81548160ff02191690831515021790555034801562000078575f80fd5b506040518060400160405280600781526020017f47524f59504552000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f47504552000000000000000000000000000000000000000000000000000000008152508160039081620000f6919062000d0d565b50806004908162000108919062000d0d565b5050506200012b6200011f6200058160201b60201c565b6200058860201b60201c565b5f737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001568160016200064b60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001d4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001fa919062000e56565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000260573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000286919062000e56565b6040518363ffffffff1660e01b8152600401620002a592919062000e97565b6020604051808303815f875af1158015620002c2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002e8919062000e56565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200033060a05160016200064b60201b60201c565b6200034560a05160016200073260201b60201c565b5f601e90505f805f601e90505f805f6be04ee0ccb27ac646ac00000090506b023e3a91682f4ec8630000006008819055506b023e3a91682f4ec863000000600a819055506127106005826200039b919062000eef565b620003a7919062000f66565b60098190555086600f819055508560108190555084601181905550601154601054600f54620003d7919062000f9d565b620003e3919062000f9d565b600e8190555083601381905550826014819055508160158190555060155460145460135462000413919062000f9d565b6200041f919062000f9d565b60128190555073100b527a0f22611a27d0a88d2b90e3a3bf13b89c60065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073100b527a0f22611a27d0a88d2b90e3a3bf13b89c60075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620004ef620004e1620007d060201b60201c565b6001620007f860201b60201c565b62000502306001620007f860201b60201c565b6200051761dead6001620007f860201b60201c565b620005396200052b620007d060201b60201c565b60016200064b60201b60201c565b6200054c3060016200064b60201b60201c565b6200056161dead60016200064b60201b60201c565b6200057333826200092f60201b60201c565b505050505050505062001126565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200065b6200058160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000681620007d060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620006da576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006d19062001035565b60405180910390fd5b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b80601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620008086200058160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200082e620007d060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000887576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200087e9062001035565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000923919062001071565b60405180910390a25050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620009a0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200099790620010da565b60405180910390fd5b620009b35f838362000a9f60201b60201c565b8060025f828254620009c6919062000f9d565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825462000a1a919062000f9d565b925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000a8091906200110b565b60405180910390a362000a9b5f838362000aa460201b60201c565b5050565b505050565b505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168062000b2557607f821691505b60208210810362000b3b5762000b3a62000ae0565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830262000b9f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000b62565b62000bab868362000b62565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f62000bf562000bef62000be98462000bc3565b62000bcc565b62000bc3565b9050919050565b5f819050919050565b62000c108362000bd5565b62000c2862000c1f8262000bfc565b84845462000b6e565b825550505050565b5f90565b62000c3e62000c30565b62000c4b81848462000c05565b505050565b5b8181101562000c725762000c665f8262000c34565b60018101905062000c51565b5050565b601f82111562000cc15762000c8b8162000b41565b62000c968462000b53565b8101602085101562000ca6578190505b62000cbe62000cb58562000b53565b83018262000c50565b50505b505050565b5f82821c905092915050565b5f62000ce35f198460080262000cc6565b1980831691505092915050565b5f62000cfd838362000cd2565b9150826002028217905092915050565b62000d188262000aa9565b67ffffffffffffffff81111562000d345762000d3362000ab3565b5b62000d40825462000b0d565b62000d4d82828562000c76565b5f60209050601f83116001811462000d83575f841562000d6e578287015190505b62000d7a858262000cf0565b86555062000de9565b601f19841662000d938662000b41565b5f5b8281101562000dbc5784890151825560018201915060208501945060208101905062000d95565b8683101562000ddc578489015162000dd8601f89168262000cd2565b8355505b6001600288020188555050505b505050505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f62000e208262000df5565b9050919050565b62000e328162000e14565b811462000e3d575f80fd5b50565b5f8151905062000e508162000e27565b92915050565b5f6020828403121562000e6e5762000e6d62000df1565b5b5f62000e7d8482850162000e40565b91505092915050565b62000e918162000e14565b82525050565b5f60408201905062000eac5f83018562000e86565b62000ebb602083018462000e86565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f62000efb8262000bc3565b915062000f088362000bc3565b925082820262000f188162000bc3565b9150828204841483151762000f325762000f3162000ec2565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f62000f728262000bc3565b915062000f7f8362000bc3565b92508262000f925762000f9162000f39565b5b828204905092915050565b5f62000fa98262000bc3565b915062000fb68362000bc3565b925082820190508082111562000fd15762000fd062000ec2565b5b92915050565b5f82825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6200101d60208362000fd7565b91506200102a8262000fe7565b602082019050919050565b5f6020820190508181035f8301526200104e816200100f565b9050919050565b5f8115159050919050565b6200106b8162001055565b82525050565b5f602082019050620010865f83018462001060565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f620010c2601f8362000fd7565b9150620010cf826200108c565b602082019050919050565b5f6020820190508181035f830152620010f381620010b4565b9050919050565b620011058162000bc3565b82525050565b5f602082019050620011205f830184620010fa565b92915050565b60805160a051614d4a620011805f395f818161119c0152818161180a015261271e01525f8181610d73015281816126c601528181613754015281816138330152818161385a015281816138f001526139170152614d4a5ff3fe608060405260043610610338575f3560e01c80638ea5220f116101aa578063c0246668116100f6578063dd62ed3e11610094578063f11a24d31161006e578063f11a24d314610c01578063f2fde38b14610c2b578063f637434214610c53578063f8b45b0514610c7d5761033f565b8063dd62ed3e14610b71578063e2f4560514610bad578063e884f26014610bd75761033f565b8063c876d0b9116100d0578063c876d0b914610ab7578063c8c8ebe414610ae1578063d257b34f14610b0b578063d85ba06314610b475761033f565b8063c024666814610a3f578063c17b5b8c14610a67578063c18bc19514610a8f5761033f565b80639fccce3211610163578063a9059cbb1161013d578063a9059cbb14610975578063aacebbe3146109b1578063b62496f5146109d9578063bbc0c74214610a155761033f565b80639fccce32146108e5578063a0d82dc51461090f578063a457c2d7146109395761033f565b80638ea5220f146107ed5780639213691314610817578063924de9b71461084157806395d89b41146108695780639a7a23d6146108935780639c3b4fdc146108bb5761033f565b806349bd5a5e11610284578063751039fc116102225780637bce5a04116101fc5780637bce5a041461075b5780638095d564146107855780638a8c523c146107ad5780638da5cb5b146107c35761033f565b8063751039fc146106df5780637571336a1461070957806375f0a874146107315761033f565b80636a486a8e1161025e5780636a486a8e146106395780636ddd17131461066357806370a082311461068d578063715018a6146106c95761033f565b806349bd5a5e146105a95780634a62bb65146105d35780634fbee193146105fd5761033f565b80631a8145bb116102f157806323b872dd116102cb57806323b872dd146104dd57806327c8f83514610519578063313ce56714610543578063395093511461056d5761033f565b80631a8145bb146104615780631f3fed8f1461048b578063203e727e146104b55761033f565b806306fdde0314610343578063095ea7b31461036d57806310d5de53146103a95780631694505e146103e557806318160ddd1461040f5780631816467f146104395761033f565b3661033f57005b5f80fd5b34801561034e575f80fd5b50610357610ca7565b6040516103649190613a4d565b60405180910390f35b348015610378575f80fd5b50610393600480360381019061038e9190613afe565b610d37565b6040516103a09190613b56565b60405180910390f35b3480156103b4575f80fd5b506103cf60048036038101906103ca9190613b6f565b610d54565b6040516103dc9190613b56565b60405180910390f35b3480156103f0575f80fd5b506103f9610d71565b6040516104069190613bf5565b60405180910390f35b34801561041a575f80fd5b50610423610d95565b6040516104309190613c1d565b60405180910390f35b348015610444575f80fd5b5061045f600480360381019061045a9190613b6f565b610d9e565b005b34801561046c575f80fd5b50610475610ed8565b6040516104829190613c1d565b60405180910390f35b348015610496575f80fd5b5061049f610ede565b6040516104ac9190613c1d565b60405180910390f35b3480156104c0575f80fd5b506104db60048036038101906104d69190613c36565b610ee4565b005b3480156104e8575f80fd5b5061050360048036038101906104fe9190613c61565b610ff3565b6040516105109190613b56565b60405180910390f35b348015610524575f80fd5b5061052d6110e5565b60405161053a9190613cc0565b60405180910390f35b34801561054e575f80fd5b506105576110eb565b6040516105649190613cf4565b60405180910390f35b348015610578575f80fd5b50610593600480360381019061058e9190613afe565b6110f3565b6040516105a09190613b56565b60405180910390f35b3480156105b4575f80fd5b506105bd61119a565b6040516105ca9190613cc0565b60405180910390f35b3480156105de575f80fd5b506105e76111be565b6040516105f49190613b56565b60405180910390f35b348015610608575f80fd5b50610623600480360381019061061e9190613b6f565b6111d0565b6040516106309190613b56565b60405180910390f35b348015610644575f80fd5b5061064d611222565b60405161065a9190613c1d565b60405180910390f35b34801561066e575f80fd5b50610677611228565b6040516106849190613b56565b60405180910390f35b348015610698575f80fd5b506106b360048036038101906106ae9190613b6f565b61123b565b6040516106c09190613c1d565b60405180910390f35b3480156106d4575f80fd5b506106dd611280565b005b3480156106ea575f80fd5b506106f3611307565b6040516107009190613b56565b60405180910390f35b348015610714575f80fd5b5061072f600480360381019061072a9190613d37565b6113a4565b005b34801561073c575f80fd5b50610745611478565b6040516107529190613cc0565b60405180910390f35b348015610766575f80fd5b5061076f61149d565b60405161077c9190613c1d565b60405180910390f35b348015610790575f80fd5b506107ab60048036038101906107a69190613d75565b6114a3565b005b3480156107b8575f80fd5b506107c161155c565b005b3480156107ce575f80fd5b506107d7611610565b6040516107e49190613cc0565b60405180910390f35b3480156107f8575f80fd5b50610801611638565b60405161080e9190613cc0565b60405180910390f35b348015610822575f80fd5b5061082b61165d565b6040516108389190613c1d565b60405180910390f35b34801561084c575f80fd5b5061086760048036038101906108629190613dc5565b611663565b005b348015610874575f80fd5b5061087d6116fc565b60405161088a9190613a4d565b60405180910390f35b34801561089e575f80fd5b506108b960048036038101906108b49190613d37565b61178c565b005b3480156108c6575f80fd5b506108cf6118a4565b6040516108dc9190613c1d565b60405180910390f35b3480156108f0575f80fd5b506108f96118aa565b6040516109069190613c1d565b60405180910390f35b34801561091a575f80fd5b506109236118b0565b6040516109309190613c1d565b60405180910390f35b348015610944575f80fd5b5061095f600480360381019061095a9190613afe565b6118b6565b60405161096c9190613b56565b60405180910390f35b348015610980575f80fd5b5061099b60048036038101906109969190613afe565b61199c565b6040516109a89190613b56565b60405180910390f35b3480156109bc575f80fd5b506109d760048036038101906109d29190613b6f565b6119b9565b005b3480156109e4575f80fd5b506109ff60048036038101906109fa9190613b6f565b611af3565b604051610a0c9190613b56565b60405180910390f35b348015610a20575f80fd5b50610a29611b10565b604051610a369190613b56565b60405180910390f35b348015610a4a575f80fd5b50610a656004803603810190610a609190613d37565b611b23565b005b348015610a72575f80fd5b50610a8d6004803603810190610a889190613d75565b611c45565b005b348015610a9a575f80fd5b50610ab56004803603810190610ab09190613c36565b611cfe565b005b348015610ac2575f80fd5b50610acb611e0d565b604051610ad89190613b56565b60405180910390f35b348015610aec575f80fd5b50610af5611e1f565b604051610b029190613c1d565b60405180910390f35b348015610b16575f80fd5b50610b316004803603810190610b2c9190613c36565b611e25565b604051610b3e9190613b56565b60405180910390f35b348015610b52575f80fd5b50610b5b611f79565b604051610b689190613c1d565b60405180910390f35b348015610b7c575f80fd5b50610b976004803603810190610b929190613df0565b611f7f565b604051610ba49190613c1d565b60405180910390f35b348015610bb8575f80fd5b50610bc1612001565b604051610bce9190613c1d565b60405180910390f35b348015610be2575f80fd5b50610beb612007565b604051610bf89190613b56565b60405180910390f35b348015610c0c575f80fd5b50610c156120a4565b604051610c229190613c1d565b60405180910390f35b348015610c36575f80fd5b50610c516004803603810190610c4c9190613b6f565b6120aa565b005b348015610c5e575f80fd5b50610c676121a0565b604051610c749190613c1d565b60405180910390f35b348015610c88575f80fd5b50610c916121a6565b604051610c9e9190613c1d565b60405180910390f35b606060038054610cb690613e5b565b80601f0160208091040260200160405190810160405280929190818152602001828054610ce290613e5b565b8015610d2d5780601f10610d0457610100808354040283529160200191610d2d565b820191905f5260205f20905b815481529060010190602001808311610d1057829003601f168201915b5050505050905090565b5f610d4a610d436121ac565b84846121b3565b6001905092915050565b601a602052805f5260405f205f915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f600254905090565b610da66121ac565b73ffffffffffffffffffffffffffffffffffffffff16610dc4611610565b73ffffffffffffffffffffffffffffffffffffffff1614610e1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1190613ed5565b60405180910390fd5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a38060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60175481565b60165481565b610eec6121ac565b73ffffffffffffffffffffffffffffffffffffffff16610f0a611610565b73ffffffffffffffffffffffffffffffffffffffff1614610f60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5790613ed5565b60405180910390fd5b670de0b6b3a76400006103e86001610f76610d95565b610f809190613f20565b610f8a9190613f8e565b610f949190613f8e565b811015610fd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fcd9061402e565b60405180910390fd5b670de0b6b3a764000081610fea9190613f20565b60088190555050565b5f610fff848484612376565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6110466121ac565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050828110156110c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110bc906140bc565b60405180910390fd5b6110d9856110d16121ac565b8584036121b3565b60019150509392505050565b61dead81565b5f6012905090565b5f6111906110ff6121ac565b848460015f61110c6121ac565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461118b91906140da565b6121b3565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600b5f9054906101000a900460ff1681565b5f60195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b60125481565b600b60029054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6112886121ac565b73ffffffffffffffffffffffffffffffffffffffff166112a6611610565b73ffffffffffffffffffffffffffffffffffffffff16146112fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f390613ed5565b60405180910390fd5b6113055f612fc9565b565b5f6113106121ac565b73ffffffffffffffffffffffffffffffffffffffff1661132e611610565b73ffffffffffffffffffffffffffffffffffffffff1614611384576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137b90613ed5565b60405180910390fd5b5f600b5f6101000a81548160ff0219169083151502179055506001905090565b6113ac6121ac565b73ffffffffffffffffffffffffffffffffffffffff166113ca611610565b73ffffffffffffffffffffffffffffffffffffffff1614611420576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141790613ed5565b60405180910390fd5b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f5481565b6114ab6121ac565b73ffffffffffffffffffffffffffffffffffffffff166114c9611610565b73ffffffffffffffffffffffffffffffffffffffff161461151f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151690613ed5565b60405180910390fd5b82600f819055508160108190555080601181905550601154601054600f5461154791906140da565b61155191906140da565b600e81905550505050565b6115646121ac565b73ffffffffffffffffffffffffffffffffffffffff16611582611610565b73ffffffffffffffffffffffffffffffffffffffff16146115d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115cf90613ed5565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff021916908315150217905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60135481565b61166b6121ac565b73ffffffffffffffffffffffffffffffffffffffff16611689611610565b73ffffffffffffffffffffffffffffffffffffffff16146116df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d690613ed5565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b60606004805461170b90613e5b565b80601f016020809104026020016040519081016040528092919081815260200182805461173790613e5b565b80156117825780601f1061175957610100808354040283529160200191611782565b820191905f5260205f20905b81548152906001019060200180831161176557829003601f168201915b5050505050905090565b6117946121ac565b73ffffffffffffffffffffffffffffffffffffffff166117b2611610565b73ffffffffffffffffffffffffffffffffffffffff1614611808576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ff90613ed5565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611896576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188d9061417d565b60405180910390fd5b6118a0828261308c565b5050565b60115481565b60185481565b60155481565b5f8060015f6118c36121ac565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508281101561197d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119749061420b565b60405180910390fd5b6119916119886121ac565b858584036121b3565b600191505092915050565b5f6119af6119a86121ac565b8484612376565b6001905092915050565b6119c16121ac565b73ffffffffffffffffffffffffffffffffffffffff166119df611610565b73ffffffffffffffffffffffffffffffffffffffff1614611a35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2c90613ed5565b60405180910390fd5b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a38060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601b602052805f5260405f205f915054906101000a900460ff1681565b600b60019054906101000a900460ff1681565b611b2b6121ac565b73ffffffffffffffffffffffffffffffffffffffff16611b49611610565b73ffffffffffffffffffffffffffffffffffffffff1614611b9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9690613ed5565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611c399190613b56565b60405180910390a25050565b611c4d6121ac565b73ffffffffffffffffffffffffffffffffffffffff16611c6b611610565b73ffffffffffffffffffffffffffffffffffffffff1614611cc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb890613ed5565b60405180910390fd5b826013819055508160148190555080601581905550601554601454601354611ce991906140da565b611cf391906140da565b601281905550505050565b611d066121ac565b73ffffffffffffffffffffffffffffffffffffffff16611d24611610565b73ffffffffffffffffffffffffffffffffffffffff1614611d7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7190613ed5565b60405180910390fd5b670de0b6b3a76400006103e86005611d90610d95565b611d9a9190613f20565b611da49190613f8e565b611dae9190613f8e565b811015611df0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de790614299565b60405180910390fd5b670de0b6b3a764000081611e049190613f20565b600a8190555050565b600d5f9054906101000a900460ff1681565b60085481565b5f611e2e6121ac565b73ffffffffffffffffffffffffffffffffffffffff16611e4c611610565b73ffffffffffffffffffffffffffffffffffffffff1614611ea2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9990613ed5565b60405180910390fd5b620186a06001611eb0610d95565b611eba9190613f20565b611ec49190613f8e565b821015611f06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611efd90614327565b60405180910390fd5b6103e86005611f13610d95565b611f1d9190613f20565b611f279190613f8e565b821115611f69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f60906143b5565b60405180910390fd5b8160098190555060019050919050565b600e5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60095481565b5f6120106121ac565b73ffffffffffffffffffffffffffffffffffffffff1661202e611610565b73ffffffffffffffffffffffffffffffffffffffff1614612084576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207b90613ed5565b60405180910390fd5b5f600d5f6101000a81548160ff0219169083151502179055506001905090565b60105481565b6120b26121ac565b73ffffffffffffffffffffffffffffffffffffffff166120d0611610565b73ffffffffffffffffffffffffffffffffffffffff1614612126576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211d90613ed5565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612194576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218b90614443565b60405180910390fd5b61219d81612fc9565b50565b60145481565b600a5481565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612221576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612218906144d1565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361228f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122869061455f565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516123699190613c1d565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036123e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123db906145ed565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612452576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124499061467b565b60405180910390fd5b5f81036124695761246483835f61312a565b612fc4565b600b5f9054906101000a900460ff1615612b1057612485611610565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156124f357506124c3611610565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561252b57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612565575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561257e5750600560149054906101000a900460ff16155b15612b0f57600b60019054906101000a900460ff166126725760195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612632575060195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b612671576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612668906146e3565b60405180910390fd5b5b600d5f9054906101000a900460ff16156128355761268e611610565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561271557507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561276d57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156128345743600c5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054106127f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127e890614797565b60405180910390fd5b43600c5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b5b601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156128d25750601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156129795760085481111561291c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291390614825565b60405180910390fd5b600a546129288361123b565b8261293391906140da565b1115612974576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161296b9061488d565b60405180910390fd5b612b0e565b601b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612a165750601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612a6557600854811115612a60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a579061491b565b60405180910390fd5b612b0d565b601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16612b0c57600a54612abf8361123b565b82612aca91906140da565b1115612b0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b029061488d565b60405180910390fd5b5b5b5b5b5b5f612b1a3061123b565b90505f6009548210159050808015612b3e5750600b60029054906101000a900460ff165b8015612b575750600560149054906101000a900460ff16155b8015612baa5750601b5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612bfd575060195f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612c50575060195f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612c93576001600560146101000a81548160ff021916908315150217905550612c7861339f565b5f600560146101000a81548160ff0219169083151502179055505b5f600560149054906101000a900460ff1615905060195f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612d42575060195f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612d4b575f90505b5f8115612fb457601b5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612da957505f601254115b15612e7357612dd66064612dc86012548861366e90919063ffffffff16565b61368390919063ffffffff16565b905060125460145482612de99190613f20565b612df39190613f8e565b60175f828254612e0391906140da565b9250508190555060125460155482612e1b9190613f20565b612e259190613f8e565b60185f828254612e3591906140da565b9250508190555060125460135482612e4d9190613f20565b612e579190613f8e565b60165f828254612e6791906140da565b92505081905550612f91565b601b5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612eca57505f600e54115b15612f9057612ef76064612ee9600e548861366e90919063ffffffff16565b61368390919063ffffffff16565b9050600e5460105482612f0a9190613f20565b612f149190613f8e565b60175f828254612f2491906140da565b92505081905550600e5460115482612f3c9190613f20565b612f469190613f8e565b60185f828254612f5691906140da565b92505081905550600e54600f5482612f6e9190613f20565b612f789190613f8e565b60165f828254612f8891906140da565b925050819055505b5b5f811115612fa557612fa487308361312a565b5b8085612fb19190614939565b94505b612fbf87878761312a565b505050505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613198576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161318f906145ed565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613206576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131fd9061467b565b60405180910390fd5b613211838383613698565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015613294576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161328b906149dc565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461332291906140da565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516133869190613c1d565b60405180910390a361339984848461369d565b50505050565b5f6133a93061123b565b90505f6018546016546017546133bf91906140da565b6133c991906140da565b90505f808314806133d957505f82145b156133e65750505061366c565b60146009546133f59190613f20565b83111561340e57601460095461340b9190613f20565b92505b5f600283601754866134209190613f20565b61342a9190613f8e565b6134349190613f8e565b90505f61344a82866136a290919063ffffffff16565b90505f479050613459826136b7565b5f61346d82476136a290919063ffffffff16565b90505f613497876134896016548561366e90919063ffffffff16565b61368390919063ffffffff16565b90505f6134c1886134b36018548661366e90919063ffffffff16565b61368390919063ffffffff16565b90505f8183856134d19190614939565b6134db9190614939565b90505f6017819055505f6016819055505f60188190555060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161353790614a27565b5f6040518083038185875af1925050503d805f8114613571576040519150601f19603f3d011682016040523d82523d5f602084013e613576565b606091505b5050809850505f8711801561358a57505f81115b156135d75761359987826138ea565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56186826017546040516135ce93929190614a3b565b60405180910390a15b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161361c90614a27565b5f6040518083038185875af1925050503d805f8114613656576040519150601f19603f3d011682016040523d82523d5f602084013e61365b565b606091505b505080985050505050505050505050505b565b5f818361367b9190613f20565b905092915050565b5f81836136909190613f8e565b905092915050565b505050565b505050565b5f81836136af9190614939565b905092915050565b5f600267ffffffffffffffff8111156136d3576136d2614a70565b5b6040519080825280602002602001820160405280156137015781602001602082028036833780820191505090505b50905030815f8151811061371857613717614a9d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156137bb573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137df9190614ade565b816001815181106137f3576137f2614a9d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613858307f0000000000000000000000000000000000000000000000000000000000000000846121b3565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016138b9959493929190614bf9565b5f604051808303815f87803b1580156138d0575f80fd5b505af11580156138e2573d5f803e3d5ffd5b505050505050565b613915307f0000000000000000000000000000000000000000000000000000000000000000846121b3565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f8061dead426040518863ffffffff1660e01b815260040161397b96959493929190614c51565b60606040518083038185885af1158015613997573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906139bc9190614cc4565b5050505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156139fa5780820151818401526020810190506139df565b5f8484015250505050565b5f601f19601f8301169050919050565b5f613a1f826139c3565b613a2981856139cd565b9350613a398185602086016139dd565b613a4281613a05565b840191505092915050565b5f6020820190508181035f830152613a658184613a15565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613a9a82613a71565b9050919050565b613aaa81613a90565b8114613ab4575f80fd5b50565b5f81359050613ac581613aa1565b92915050565b5f819050919050565b613add81613acb565b8114613ae7575f80fd5b50565b5f81359050613af881613ad4565b92915050565b5f8060408385031215613b1457613b13613a6d565b5b5f613b2185828601613ab7565b9250506020613b3285828601613aea565b9150509250929050565b5f8115159050919050565b613b5081613b3c565b82525050565b5f602082019050613b695f830184613b47565b92915050565b5f60208284031215613b8457613b83613a6d565b5b5f613b9184828501613ab7565b91505092915050565b5f819050919050565b5f613bbd613bb8613bb384613a71565b613b9a565b613a71565b9050919050565b5f613bce82613ba3565b9050919050565b5f613bdf82613bc4565b9050919050565b613bef81613bd5565b82525050565b5f602082019050613c085f830184613be6565b92915050565b613c1781613acb565b82525050565b5f602082019050613c305f830184613c0e565b92915050565b5f60208284031215613c4b57613c4a613a6d565b5b5f613c5884828501613aea565b91505092915050565b5f805f60608486031215613c7857613c77613a6d565b5b5f613c8586828701613ab7565b9350506020613c9686828701613ab7565b9250506040613ca786828701613aea565b9150509250925092565b613cba81613a90565b82525050565b5f602082019050613cd35f830184613cb1565b92915050565b5f60ff82169050919050565b613cee81613cd9565b82525050565b5f602082019050613d075f830184613ce5565b92915050565b613d1681613b3c565b8114613d20575f80fd5b50565b5f81359050613d3181613d0d565b92915050565b5f8060408385031215613d4d57613d4c613a6d565b5b5f613d5a85828601613ab7565b9250506020613d6b85828601613d23565b9150509250929050565b5f805f60608486031215613d8c57613d8b613a6d565b5b5f613d9986828701613aea565b9350506020613daa86828701613aea565b9250506040613dbb86828701613aea565b9150509250925092565b5f60208284031215613dda57613dd9613a6d565b5b5f613de784828501613d23565b91505092915050565b5f8060408385031215613e0657613e05613a6d565b5b5f613e1385828601613ab7565b9250506020613e2485828601613ab7565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613e7257607f821691505b602082108103613e8557613e84613e2e565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613ebf6020836139cd565b9150613eca82613e8b565b602082019050919050565b5f6020820190508181035f830152613eec81613eb3565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613f2a82613acb565b9150613f3583613acb565b9250828202613f4381613acb565b91508282048414831517613f5a57613f59613ef3565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613f9882613acb565b9150613fa383613acb565b925082613fb357613fb2613f61565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e74205f8201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b5f614018602f836139cd565b915061402382613fbe565b604082019050919050565b5f6020820190508181035f8301526140458161400c565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f6140a66028836139cd565b91506140b18261404c565b604082019050919050565b5f6020820190508181035f8301526140d38161409a565b9050919050565b5f6140e482613acb565b91506140ef83613acb565b925082820190508082111561410757614106613ef3565b5b92915050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f6141676039836139cd565b91506141728261410d565b604082019050919050565b5f6020820190508181035f8301526141948161415b565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f6141f56025836139cd565b91506142008261419b565b604082019050919050565b5f6020820190508181035f830152614222816141e9565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e205f8201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b5f6142836024836139cd565b915061428e82614229565b604082019050919050565b5f6020820190508181035f8301526142b081614277565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b5f6143116035836139cd565b915061431c826142b7565b604082019050919050565b5f6020820190508181035f83015261433e81614305565b9050919050565b7f5377617020616d6f756e742063616e6e6f7420626520686967686572207468615f8201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b5f61439f6034836139cd565b91506143aa82614345565b604082019050919050565b5f6020820190508181035f8301526143cc81614393565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f61442d6026836139cd565b9150614438826143d3565b604082019050919050565b5f6020820190508181035f83015261445a81614421565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6144bb6024836139cd565b91506144c682614461565b604082019050919050565b5f6020820190508181035f8301526144e8816144af565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6145496022836139cd565b9150614554826144ef565b604082019050919050565b5f6020820190508181035f8301526145768161453d565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6145d76025836139cd565b91506145e28261457d565b604082019050919050565b5f6020820190508181035f830152614604816145cb565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6146656023836139cd565b91506146708261460b565b604082019050919050565b5f6020820190508181035f83015261469281614659565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f6146cd6016836139cd565b91506146d882614699565b602082019050919050565b5f6020820190508181035f8301526146fa816146c1565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c5f8201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b5f6147816049836139cd565b915061478c82614701565b606082019050919050565b5f6020820190508181035f8301526147ae81614775565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f61480f6035836139cd565b915061481a826147b5565b604082019050919050565b5f6020820190508181035f83015261483c81614803565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f6148776013836139cd565b915061488282614843565b602082019050919050565b5f6020820190508181035f8301526148a48161486b565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f6149056036836139cd565b9150614910826148ab565b604082019050919050565b5f6020820190508181035f830152614932816148f9565b9050919050565b5f61494382613acb565b915061494e83613acb565b925082820390508181111561496657614965613ef3565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f6149c66026836139cd565b91506149d18261496c565b604082019050919050565b5f6020820190508181035f8301526149f3816149ba565b9050919050565b5f81905092915050565b50565b5f614a125f836149fa565b9150614a1d82614a04565b5f82019050919050565b5f614a3182614a07565b9150819050919050565b5f606082019050614a4e5f830186613c0e565b614a5b6020830185613c0e565b614a686040830184613c0e565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050614ad881613aa1565b92915050565b5f60208284031215614af357614af2613a6d565b5b5f614b0084828501614aca565b91505092915050565b5f819050919050565b5f614b2c614b27614b2284614b09565b613b9a565b613acb565b9050919050565b614b3c81614b12565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b614b7481613a90565b82525050565b5f614b858383614b6b565b60208301905092915050565b5f602082019050919050565b5f614ba782614b42565b614bb18185614b4c565b9350614bbc83614b5c565b805f5b83811015614bec578151614bd38882614b7a565b9750614bde83614b91565b925050600181019050614bbf565b5085935050505092915050565b5f60a082019050614c0c5f830188613c0e565b614c196020830187614b33565b8181036040830152614c2b8186614b9d565b9050614c3a6060830185613cb1565b614c476080830184613c0e565b9695505050505050565b5f60c082019050614c645f830189613cb1565b614c716020830188613c0e565b614c7e6040830187614b33565b614c8b6060830186614b33565b614c986080830185613cb1565b614ca560a0830184613c0e565b979650505050505050565b5f81519050614cbe81613ad4565b92915050565b5f805f60608486031215614cdb57614cda613a6d565b5b5f614ce886828701614cb0565b9350506020614cf986828701614cb0565b9250506040614d0a86828701614cb0565b915050925092509256fea2646970667358221220827b2299d777da0821a20fbba3660b0e30c8f34d2e6e8847d7619941c236e7ff64736f6c63430008150033

Deployed Bytecode

0x608060405260043610610338575f3560e01c80638ea5220f116101aa578063c0246668116100f6578063dd62ed3e11610094578063f11a24d31161006e578063f11a24d314610c01578063f2fde38b14610c2b578063f637434214610c53578063f8b45b0514610c7d5761033f565b8063dd62ed3e14610b71578063e2f4560514610bad578063e884f26014610bd75761033f565b8063c876d0b9116100d0578063c876d0b914610ab7578063c8c8ebe414610ae1578063d257b34f14610b0b578063d85ba06314610b475761033f565b8063c024666814610a3f578063c17b5b8c14610a67578063c18bc19514610a8f5761033f565b80639fccce3211610163578063a9059cbb1161013d578063a9059cbb14610975578063aacebbe3146109b1578063b62496f5146109d9578063bbc0c74214610a155761033f565b80639fccce32146108e5578063a0d82dc51461090f578063a457c2d7146109395761033f565b80638ea5220f146107ed5780639213691314610817578063924de9b71461084157806395d89b41146108695780639a7a23d6146108935780639c3b4fdc146108bb5761033f565b806349bd5a5e11610284578063751039fc116102225780637bce5a04116101fc5780637bce5a041461075b5780638095d564146107855780638a8c523c146107ad5780638da5cb5b146107c35761033f565b8063751039fc146106df5780637571336a1461070957806375f0a874146107315761033f565b80636a486a8e1161025e5780636a486a8e146106395780636ddd17131461066357806370a082311461068d578063715018a6146106c95761033f565b806349bd5a5e146105a95780634a62bb65146105d35780634fbee193146105fd5761033f565b80631a8145bb116102f157806323b872dd116102cb57806323b872dd146104dd57806327c8f83514610519578063313ce56714610543578063395093511461056d5761033f565b80631a8145bb146104615780631f3fed8f1461048b578063203e727e146104b55761033f565b806306fdde0314610343578063095ea7b31461036d57806310d5de53146103a95780631694505e146103e557806318160ddd1461040f5780631816467f146104395761033f565b3661033f57005b5f80fd5b34801561034e575f80fd5b50610357610ca7565b6040516103649190613a4d565b60405180910390f35b348015610378575f80fd5b50610393600480360381019061038e9190613afe565b610d37565b6040516103a09190613b56565b60405180910390f35b3480156103b4575f80fd5b506103cf60048036038101906103ca9190613b6f565b610d54565b6040516103dc9190613b56565b60405180910390f35b3480156103f0575f80fd5b506103f9610d71565b6040516104069190613bf5565b60405180910390f35b34801561041a575f80fd5b50610423610d95565b6040516104309190613c1d565b60405180910390f35b348015610444575f80fd5b5061045f600480360381019061045a9190613b6f565b610d9e565b005b34801561046c575f80fd5b50610475610ed8565b6040516104829190613c1d565b60405180910390f35b348015610496575f80fd5b5061049f610ede565b6040516104ac9190613c1d565b60405180910390f35b3480156104c0575f80fd5b506104db60048036038101906104d69190613c36565b610ee4565b005b3480156104e8575f80fd5b5061050360048036038101906104fe9190613c61565b610ff3565b6040516105109190613b56565b60405180910390f35b348015610524575f80fd5b5061052d6110e5565b60405161053a9190613cc0565b60405180910390f35b34801561054e575f80fd5b506105576110eb565b6040516105649190613cf4565b60405180910390f35b348015610578575f80fd5b50610593600480360381019061058e9190613afe565b6110f3565b6040516105a09190613b56565b60405180910390f35b3480156105b4575f80fd5b506105bd61119a565b6040516105ca9190613cc0565b60405180910390f35b3480156105de575f80fd5b506105e76111be565b6040516105f49190613b56565b60405180910390f35b348015610608575f80fd5b50610623600480360381019061061e9190613b6f565b6111d0565b6040516106309190613b56565b60405180910390f35b348015610644575f80fd5b5061064d611222565b60405161065a9190613c1d565b60405180910390f35b34801561066e575f80fd5b50610677611228565b6040516106849190613b56565b60405180910390f35b348015610698575f80fd5b506106b360048036038101906106ae9190613b6f565b61123b565b6040516106c09190613c1d565b60405180910390f35b3480156106d4575f80fd5b506106dd611280565b005b3480156106ea575f80fd5b506106f3611307565b6040516107009190613b56565b60405180910390f35b348015610714575f80fd5b5061072f600480360381019061072a9190613d37565b6113a4565b005b34801561073c575f80fd5b50610745611478565b6040516107529190613cc0565b60405180910390f35b348015610766575f80fd5b5061076f61149d565b60405161077c9190613c1d565b60405180910390f35b348015610790575f80fd5b506107ab60048036038101906107a69190613d75565b6114a3565b005b3480156107b8575f80fd5b506107c161155c565b005b3480156107ce575f80fd5b506107d7611610565b6040516107e49190613cc0565b60405180910390f35b3480156107f8575f80fd5b50610801611638565b60405161080e9190613cc0565b60405180910390f35b348015610822575f80fd5b5061082b61165d565b6040516108389190613c1d565b60405180910390f35b34801561084c575f80fd5b5061086760048036038101906108629190613dc5565b611663565b005b348015610874575f80fd5b5061087d6116fc565b60405161088a9190613a4d565b60405180910390f35b34801561089e575f80fd5b506108b960048036038101906108b49190613d37565b61178c565b005b3480156108c6575f80fd5b506108cf6118a4565b6040516108dc9190613c1d565b60405180910390f35b3480156108f0575f80fd5b506108f96118aa565b6040516109069190613c1d565b60405180910390f35b34801561091a575f80fd5b506109236118b0565b6040516109309190613c1d565b60405180910390f35b348015610944575f80fd5b5061095f600480360381019061095a9190613afe565b6118b6565b60405161096c9190613b56565b60405180910390f35b348015610980575f80fd5b5061099b60048036038101906109969190613afe565b61199c565b6040516109a89190613b56565b60405180910390f35b3480156109bc575f80fd5b506109d760048036038101906109d29190613b6f565b6119b9565b005b3480156109e4575f80fd5b506109ff60048036038101906109fa9190613b6f565b611af3565b604051610a0c9190613b56565b60405180910390f35b348015610a20575f80fd5b50610a29611b10565b604051610a369190613b56565b60405180910390f35b348015610a4a575f80fd5b50610a656004803603810190610a609190613d37565b611b23565b005b348015610a72575f80fd5b50610a8d6004803603810190610a889190613d75565b611c45565b005b348015610a9a575f80fd5b50610ab56004803603810190610ab09190613c36565b611cfe565b005b348015610ac2575f80fd5b50610acb611e0d565b604051610ad89190613b56565b60405180910390f35b348015610aec575f80fd5b50610af5611e1f565b604051610b029190613c1d565b60405180910390f35b348015610b16575f80fd5b50610b316004803603810190610b2c9190613c36565b611e25565b604051610b3e9190613b56565b60405180910390f35b348015610b52575f80fd5b50610b5b611f79565b604051610b689190613c1d565b60405180910390f35b348015610b7c575f80fd5b50610b976004803603810190610b929190613df0565b611f7f565b604051610ba49190613c1d565b60405180910390f35b348015610bb8575f80fd5b50610bc1612001565b604051610bce9190613c1d565b60405180910390f35b348015610be2575f80fd5b50610beb612007565b604051610bf89190613b56565b60405180910390f35b348015610c0c575f80fd5b50610c156120a4565b604051610c229190613c1d565b60405180910390f35b348015610c36575f80fd5b50610c516004803603810190610c4c9190613b6f565b6120aa565b005b348015610c5e575f80fd5b50610c676121a0565b604051610c749190613c1d565b60405180910390f35b348015610c88575f80fd5b50610c916121a6565b604051610c9e9190613c1d565b60405180910390f35b606060038054610cb690613e5b565b80601f0160208091040260200160405190810160405280929190818152602001828054610ce290613e5b565b8015610d2d5780601f10610d0457610100808354040283529160200191610d2d565b820191905f5260205f20905b815481529060010190602001808311610d1057829003601f168201915b5050505050905090565b5f610d4a610d436121ac565b84846121b3565b6001905092915050565b601a602052805f5260405f205f915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b5f600254905090565b610da66121ac565b73ffffffffffffffffffffffffffffffffffffffff16610dc4611610565b73ffffffffffffffffffffffffffffffffffffffff1614610e1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1190613ed5565b60405180910390fd5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a38060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60175481565b60165481565b610eec6121ac565b73ffffffffffffffffffffffffffffffffffffffff16610f0a611610565b73ffffffffffffffffffffffffffffffffffffffff1614610f60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5790613ed5565b60405180910390fd5b670de0b6b3a76400006103e86001610f76610d95565b610f809190613f20565b610f8a9190613f8e565b610f949190613f8e565b811015610fd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fcd9061402e565b60405180910390fd5b670de0b6b3a764000081610fea9190613f20565b60088190555050565b5f610fff848484612376565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6110466121ac565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050828110156110c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110bc906140bc565b60405180910390fd5b6110d9856110d16121ac565b8584036121b3565b60019150509392505050565b61dead81565b5f6012905090565b5f6111906110ff6121ac565b848460015f61110c6121ac565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461118b91906140da565b6121b3565b6001905092915050565b7f000000000000000000000000112f7338422f06ccfbac0e02ceb3c185a5aa24b181565b600b5f9054906101000a900460ff1681565b5f60195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b60125481565b600b60029054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6112886121ac565b73ffffffffffffffffffffffffffffffffffffffff166112a6611610565b73ffffffffffffffffffffffffffffffffffffffff16146112fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f390613ed5565b60405180910390fd5b6113055f612fc9565b565b5f6113106121ac565b73ffffffffffffffffffffffffffffffffffffffff1661132e611610565b73ffffffffffffffffffffffffffffffffffffffff1614611384576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137b90613ed5565b60405180910390fd5b5f600b5f6101000a81548160ff0219169083151502179055506001905090565b6113ac6121ac565b73ffffffffffffffffffffffffffffffffffffffff166113ca611610565b73ffffffffffffffffffffffffffffffffffffffff1614611420576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141790613ed5565b60405180910390fd5b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f5481565b6114ab6121ac565b73ffffffffffffffffffffffffffffffffffffffff166114c9611610565b73ffffffffffffffffffffffffffffffffffffffff161461151f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151690613ed5565b60405180910390fd5b82600f819055508160108190555080601181905550601154601054600f5461154791906140da565b61155191906140da565b600e81905550505050565b6115646121ac565b73ffffffffffffffffffffffffffffffffffffffff16611582611610565b73ffffffffffffffffffffffffffffffffffffffff16146115d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115cf90613ed5565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff021916908315150217905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60135481565b61166b6121ac565b73ffffffffffffffffffffffffffffffffffffffff16611689611610565b73ffffffffffffffffffffffffffffffffffffffff16146116df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d690613ed5565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b60606004805461170b90613e5b565b80601f016020809104026020016040519081016040528092919081815260200182805461173790613e5b565b80156117825780601f1061175957610100808354040283529160200191611782565b820191905f5260205f20905b81548152906001019060200180831161176557829003601f168201915b5050505050905090565b6117946121ac565b73ffffffffffffffffffffffffffffffffffffffff166117b2611610565b73ffffffffffffffffffffffffffffffffffffffff1614611808576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ff90613ed5565b60405180910390fd5b7f000000000000000000000000112f7338422f06ccfbac0e02ceb3c185a5aa24b173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611896576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188d9061417d565b60405180910390fd5b6118a0828261308c565b5050565b60115481565b60185481565b60155481565b5f8060015f6118c36121ac565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508281101561197d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119749061420b565b60405180910390fd5b6119916119886121ac565b858584036121b3565b600191505092915050565b5f6119af6119a86121ac565b8484612376565b6001905092915050565b6119c16121ac565b73ffffffffffffffffffffffffffffffffffffffff166119df611610565b73ffffffffffffffffffffffffffffffffffffffff1614611a35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2c90613ed5565b60405180910390fd5b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a38060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601b602052805f5260405f205f915054906101000a900460ff1681565b600b60019054906101000a900460ff1681565b611b2b6121ac565b73ffffffffffffffffffffffffffffffffffffffff16611b49611610565b73ffffffffffffffffffffffffffffffffffffffff1614611b9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9690613ed5565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611c399190613b56565b60405180910390a25050565b611c4d6121ac565b73ffffffffffffffffffffffffffffffffffffffff16611c6b611610565b73ffffffffffffffffffffffffffffffffffffffff1614611cc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb890613ed5565b60405180910390fd5b826013819055508160148190555080601581905550601554601454601354611ce991906140da565b611cf391906140da565b601281905550505050565b611d066121ac565b73ffffffffffffffffffffffffffffffffffffffff16611d24611610565b73ffffffffffffffffffffffffffffffffffffffff1614611d7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7190613ed5565b60405180910390fd5b670de0b6b3a76400006103e86005611d90610d95565b611d9a9190613f20565b611da49190613f8e565b611dae9190613f8e565b811015611df0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de790614299565b60405180910390fd5b670de0b6b3a764000081611e049190613f20565b600a8190555050565b600d5f9054906101000a900460ff1681565b60085481565b5f611e2e6121ac565b73ffffffffffffffffffffffffffffffffffffffff16611e4c611610565b73ffffffffffffffffffffffffffffffffffffffff1614611ea2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9990613ed5565b60405180910390fd5b620186a06001611eb0610d95565b611eba9190613f20565b611ec49190613f8e565b821015611f06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611efd90614327565b60405180910390fd5b6103e86005611f13610d95565b611f1d9190613f20565b611f279190613f8e565b821115611f69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f60906143b5565b60405180910390fd5b8160098190555060019050919050565b600e5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60095481565b5f6120106121ac565b73ffffffffffffffffffffffffffffffffffffffff1661202e611610565b73ffffffffffffffffffffffffffffffffffffffff1614612084576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207b90613ed5565b60405180910390fd5b5f600d5f6101000a81548160ff0219169083151502179055506001905090565b60105481565b6120b26121ac565b73ffffffffffffffffffffffffffffffffffffffff166120d0611610565b73ffffffffffffffffffffffffffffffffffffffff1614612126576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211d90613ed5565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612194576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218b90614443565b60405180910390fd5b61219d81612fc9565b50565b60145481565b600a5481565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612221576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612218906144d1565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361228f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122869061455f565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516123699190613c1d565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036123e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123db906145ed565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612452576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124499061467b565b60405180910390fd5b5f81036124695761246483835f61312a565b612fc4565b600b5f9054906101000a900460ff1615612b1057612485611610565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156124f357506124c3611610565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561252b57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612565575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561257e5750600560149054906101000a900460ff16155b15612b0f57600b60019054906101000a900460ff166126725760195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612632575060195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b612671576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612668906146e3565b60405180910390fd5b5b600d5f9054906101000a900460ff16156128355761268e611610565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561271557507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561276d57507f000000000000000000000000112f7338422f06ccfbac0e02ceb3c185a5aa24b173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156128345743600c5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054106127f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127e890614797565b60405180910390fd5b43600c5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b5b601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156128d25750601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156129795760085481111561291c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291390614825565b60405180910390fd5b600a546129288361123b565b8261293391906140da565b1115612974576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161296b9061488d565b60405180910390fd5b612b0e565b601b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612a165750601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612a6557600854811115612a60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a579061491b565b60405180910390fd5b612b0d565b601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16612b0c57600a54612abf8361123b565b82612aca91906140da565b1115612b0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b029061488d565b60405180910390fd5b5b5b5b5b5b5f612b1a3061123b565b90505f6009548210159050808015612b3e5750600b60029054906101000a900460ff165b8015612b575750600560149054906101000a900460ff16155b8015612baa5750601b5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612bfd575060195f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612c50575060195f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612c93576001600560146101000a81548160ff021916908315150217905550612c7861339f565b5f600560146101000a81548160ff0219169083151502179055505b5f600560149054906101000a900460ff1615905060195f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612d42575060195f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612d4b575f90505b5f8115612fb457601b5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612da957505f601254115b15612e7357612dd66064612dc86012548861366e90919063ffffffff16565b61368390919063ffffffff16565b905060125460145482612de99190613f20565b612df39190613f8e565b60175f828254612e0391906140da565b9250508190555060125460155482612e1b9190613f20565b612e259190613f8e565b60185f828254612e3591906140da565b9250508190555060125460135482612e4d9190613f20565b612e579190613f8e565b60165f828254612e6791906140da565b92505081905550612f91565b601b5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612eca57505f600e54115b15612f9057612ef76064612ee9600e548861366e90919063ffffffff16565b61368390919063ffffffff16565b9050600e5460105482612f0a9190613f20565b612f149190613f8e565b60175f828254612f2491906140da565b92505081905550600e5460115482612f3c9190613f20565b612f469190613f8e565b60185f828254612f5691906140da565b92505081905550600e54600f5482612f6e9190613f20565b612f789190613f8e565b60165f828254612f8891906140da565b925050819055505b5b5f811115612fa557612fa487308361312a565b5b8085612fb19190614939565b94505b612fbf87878761312a565b505050505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613198576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161318f906145ed565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613206576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131fd9061467b565b60405180910390fd5b613211838383613698565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015613294576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161328b906149dc565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461332291906140da565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516133869190613c1d565b60405180910390a361339984848461369d565b50505050565b5f6133a93061123b565b90505f6018546016546017546133bf91906140da565b6133c991906140da565b90505f808314806133d957505f82145b156133e65750505061366c565b60146009546133f59190613f20565b83111561340e57601460095461340b9190613f20565b92505b5f600283601754866134209190613f20565b61342a9190613f8e565b6134349190613f8e565b90505f61344a82866136a290919063ffffffff16565b90505f479050613459826136b7565b5f61346d82476136a290919063ffffffff16565b90505f613497876134896016548561366e90919063ffffffff16565b61368390919063ffffffff16565b90505f6134c1886134b36018548661366e90919063ffffffff16565b61368390919063ffffffff16565b90505f8183856134d19190614939565b6134db9190614939565b90505f6017819055505f6016819055505f60188190555060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161353790614a27565b5f6040518083038185875af1925050503d805f8114613571576040519150601f19603f3d011682016040523d82523d5f602084013e613576565b606091505b5050809850505f8711801561358a57505f81115b156135d75761359987826138ea565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56186826017546040516135ce93929190614a3b565b60405180910390a15b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161361c90614a27565b5f6040518083038185875af1925050503d805f8114613656576040519150601f19603f3d011682016040523d82523d5f602084013e61365b565b606091505b505080985050505050505050505050505b565b5f818361367b9190613f20565b905092915050565b5f81836136909190613f8e565b905092915050565b505050565b505050565b5f81836136af9190614939565b905092915050565b5f600267ffffffffffffffff8111156136d3576136d2614a70565b5b6040519080825280602002602001820160405280156137015781602001602082028036833780820191505090505b50905030815f8151811061371857613717614a9d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156137bb573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137df9190614ade565b816001815181106137f3576137f2614a9d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613858307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846121b3565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016138b9959493929190614bf9565b5f604051808303815f87803b1580156138d0575f80fd5b505af11580156138e2573d5f803e3d5ffd5b505050505050565b613915307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846121b3565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f8061dead426040518863ffffffff1660e01b815260040161397b96959493929190614c51565b60606040518083038185885af1158015613997573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906139bc9190614cc4565b5050505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156139fa5780820151818401526020810190506139df565b5f8484015250505050565b5f601f19601f8301169050919050565b5f613a1f826139c3565b613a2981856139cd565b9350613a398185602086016139dd565b613a4281613a05565b840191505092915050565b5f6020820190508181035f830152613a658184613a15565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613a9a82613a71565b9050919050565b613aaa81613a90565b8114613ab4575f80fd5b50565b5f81359050613ac581613aa1565b92915050565b5f819050919050565b613add81613acb565b8114613ae7575f80fd5b50565b5f81359050613af881613ad4565b92915050565b5f8060408385031215613b1457613b13613a6d565b5b5f613b2185828601613ab7565b9250506020613b3285828601613aea565b9150509250929050565b5f8115159050919050565b613b5081613b3c565b82525050565b5f602082019050613b695f830184613b47565b92915050565b5f60208284031215613b8457613b83613a6d565b5b5f613b9184828501613ab7565b91505092915050565b5f819050919050565b5f613bbd613bb8613bb384613a71565b613b9a565b613a71565b9050919050565b5f613bce82613ba3565b9050919050565b5f613bdf82613bc4565b9050919050565b613bef81613bd5565b82525050565b5f602082019050613c085f830184613be6565b92915050565b613c1781613acb565b82525050565b5f602082019050613c305f830184613c0e565b92915050565b5f60208284031215613c4b57613c4a613a6d565b5b5f613c5884828501613aea565b91505092915050565b5f805f60608486031215613c7857613c77613a6d565b5b5f613c8586828701613ab7565b9350506020613c9686828701613ab7565b9250506040613ca786828701613aea565b9150509250925092565b613cba81613a90565b82525050565b5f602082019050613cd35f830184613cb1565b92915050565b5f60ff82169050919050565b613cee81613cd9565b82525050565b5f602082019050613d075f830184613ce5565b92915050565b613d1681613b3c565b8114613d20575f80fd5b50565b5f81359050613d3181613d0d565b92915050565b5f8060408385031215613d4d57613d4c613a6d565b5b5f613d5a85828601613ab7565b9250506020613d6b85828601613d23565b9150509250929050565b5f805f60608486031215613d8c57613d8b613a6d565b5b5f613d9986828701613aea565b9350506020613daa86828701613aea565b9250506040613dbb86828701613aea565b9150509250925092565b5f60208284031215613dda57613dd9613a6d565b5b5f613de784828501613d23565b91505092915050565b5f8060408385031215613e0657613e05613a6d565b5b5f613e1385828601613ab7565b9250506020613e2485828601613ab7565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613e7257607f821691505b602082108103613e8557613e84613e2e565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613ebf6020836139cd565b9150613eca82613e8b565b602082019050919050565b5f6020820190508181035f830152613eec81613eb3565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613f2a82613acb565b9150613f3583613acb565b9250828202613f4381613acb565b91508282048414831517613f5a57613f59613ef3565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613f9882613acb565b9150613fa383613acb565b925082613fb357613fb2613f61565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e74205f8201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b5f614018602f836139cd565b915061402382613fbe565b604082019050919050565b5f6020820190508181035f8301526140458161400c565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f6140a66028836139cd565b91506140b18261404c565b604082019050919050565b5f6020820190508181035f8301526140d38161409a565b9050919050565b5f6140e482613acb565b91506140ef83613acb565b925082820190508082111561410757614106613ef3565b5b92915050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f6141676039836139cd565b91506141728261410d565b604082019050919050565b5f6020820190508181035f8301526141948161415b565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f6141f56025836139cd565b91506142008261419b565b604082019050919050565b5f6020820190508181035f830152614222816141e9565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e205f8201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b5f6142836024836139cd565b915061428e82614229565b604082019050919050565b5f6020820190508181035f8301526142b081614277565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b5f6143116035836139cd565b915061431c826142b7565b604082019050919050565b5f6020820190508181035f83015261433e81614305565b9050919050565b7f5377617020616d6f756e742063616e6e6f7420626520686967686572207468615f8201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b5f61439f6034836139cd565b91506143aa82614345565b604082019050919050565b5f6020820190508181035f8301526143cc81614393565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f61442d6026836139cd565b9150614438826143d3565b604082019050919050565b5f6020820190508181035f83015261445a81614421565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6144bb6024836139cd565b91506144c682614461565b604082019050919050565b5f6020820190508181035f8301526144e8816144af565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6145496022836139cd565b9150614554826144ef565b604082019050919050565b5f6020820190508181035f8301526145768161453d565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6145d76025836139cd565b91506145e28261457d565b604082019050919050565b5f6020820190508181035f830152614604816145cb565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6146656023836139cd565b91506146708261460b565b604082019050919050565b5f6020820190508181035f83015261469281614659565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f6146cd6016836139cd565b91506146d882614699565b602082019050919050565b5f6020820190508181035f8301526146fa816146c1565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c5f8201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b5f6147816049836139cd565b915061478c82614701565b606082019050919050565b5f6020820190508181035f8301526147ae81614775565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f61480f6035836139cd565b915061481a826147b5565b604082019050919050565b5f6020820190508181035f83015261483c81614803565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f6148776013836139cd565b915061488282614843565b602082019050919050565b5f6020820190508181035f8301526148a48161486b565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f6149056036836139cd565b9150614910826148ab565b604082019050919050565b5f6020820190508181035f830152614932816148f9565b9050919050565b5f61494382613acb565b915061494e83613acb565b925082820390508181111561496657614965613ef3565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f6149c66026836139cd565b91506149d18261496c565b604082019050919050565b5f6020820190508181035f8301526149f3816149ba565b9050919050565b5f81905092915050565b50565b5f614a125f836149fa565b9150614a1d82614a04565b5f82019050919050565b5f614a3182614a07565b9150819050919050565b5f606082019050614a4e5f830186613c0e565b614a5b6020830185613c0e565b614a686040830184613c0e565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050614ad881613aa1565b92915050565b5f60208284031215614af357614af2613a6d565b5b5f614b0084828501614aca565b91505092915050565b5f819050919050565b5f614b2c614b27614b2284614b09565b613b9a565b613acb565b9050919050565b614b3c81614b12565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b614b7481613a90565b82525050565b5f614b858383614b6b565b60208301905092915050565b5f602082019050919050565b5f614ba782614b42565b614bb18185614b4c565b9350614bbc83614b5c565b805f5b83811015614bec578151614bd38882614b7a565b9750614bde83614b91565b925050600181019050614bbf565b5085935050505092915050565b5f60a082019050614c0c5f830188613c0e565b614c196020830187614b33565b8181036040830152614c2b8186614b9d565b9050614c3a6060830185613cb1565b614c476080830184613c0e565b9695505050505050565b5f60c082019050614c645f830189613cb1565b614c716020830188613c0e565b614c7e6040830187614b33565b614c8b6060830186614b33565b614c986080830185613cb1565b614ca560a0830184613c0e565b979650505050505050565b5f81519050614cbe81613ad4565b92915050565b5f805f60608486031215614cdb57614cda613a6d565b5b5f614ce886828701614cb0565b9350506020614cf986828701614cb0565b9250506040614d0a86828701614cb0565b915050925092509256fea2646970667358221220827b2299d777da0821a20fbba3660b0e30c8f34d2e6e8847d7619941c236e7ff64736f6c63430008150033

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.