ETH Price: $3,360.01 (+0.37%)
Gas: 8.46 Gwei

Token

ChainNet (CNET)
 

Overview

Max Total Supply

100,000,000 CNET

Holders

1,029

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.000000000000000001 CNET

Value
$0.00
0xd06a5bc088ea3402b8e32ab882e204066b4bf396
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

ChainNet is a groundbreaking web3 browser that empowers users to access, host, and interact with decentralized content directly on the blockchain.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
CHAINNET

Compiler Version
v0.8.26+commit.8a97fa7a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-09-26
*/

/**
ChainNet: The New Protocol Redefining Web3 Exploration
➤ How It Works: ChainNet allows you to embed specific functions within your contract, enabling us to build a fully functional web page for you—completely on-chain. 
Prefer to host elsewhere? Simply link your site within the contract, and ChainNet will automatically detect and attach it to your contract's profile.

Website:  https://chainnet.cloud
X:  https://x.com/chainnetapp
Telegram: https://t.me/chainnetapp
Docs: https://docs.chainnet.cloud

Download the latest version of our browser from the website.

**/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.23;

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 _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

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

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), 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 CHAINNET is ERC20, Ownable {
    using SafeMath for uint256;

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

    bool private swapping;

    address public marketerWallet;
    address public DevsWallet;

    uint256 public maxTx;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallets;

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

    // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp;
    bool public transferDelayEnabled = false;

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

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

    uint256 public tokensForMarkets;
    uint256 public tokensForDev;

    mapping(address => bool) private _isBlackList;
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedmaxTx;

    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 marketerWalletUpdated(
        address indexed newWallet,
        address indexed olDevsWalletallet
    );

    event DevsWalletUpdated(
        address indexed newWallet,
        address indexed olDevsWalletallet
    );

    constructor() ERC20("ChainNet", unicode"CNET") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);

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

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

        uint256 _buyMarketingFee = 5;
        uint256 _sellMarketingFee = 5;
        uint256 _buyDevFee = 0;
        uint256 _sellDevFee = 0;

        uint256 totalSupply = 100_000_000 * 1e18;

        maxTx = 2_000_000 * 1e18;
        maxWallets = 2_000_000 * 1e18;
        swapTokensAtAmount = (totalSupply * 3) / 10000;

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

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

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

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

        marketerWallet = address(0x334FD0c5aBb982325a294c2345505Ab0D7B14921);
        DevsWallet = address(0x334FD0c5aBb982325a294c2345505Ab0D7B14921);

        _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 maxTx lower than 0.1%"
        );
        maxTx = newNum * (10**18);
    }

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

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

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

    function updateFees(
        uint256 _buyMarketingFee,
        uint256 _buyDevFee,
        uint256 _sellMarketingFee,
        uint256 _sellDevFee) external onlyOwner {
        buyMarketingFee = _buyMarketingFee;
        buyDevFee = _buyDevFee;
        buyTotalFees = buyMarketingFee + buyDevFee;
        sellMarketingFee = _sellMarketingFee;
        sellDevFee = _sellDevFee;
        sellTotalFees = sellMarketingFee + sellDevFee;
        require(buyTotalFees <= 75, "Must keep fees at 75% or less");
        require(sellTotalFees <= 75, "Must keep fees at 75% or less");
    }

    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 updatemarketerWallet(address newmarketerWallet) external onlyOwner {
        emit marketerWalletUpdated(newmarketerWallet, marketerWallet);
        marketerWallet = newmarketerWallet;
    }

    function updateDevsWallet(address newWallet) external onlyOwner {
        emit DevsWalletUpdated(newWallet, DevsWallet);
        DevsWallet = newWallet;
    }

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

    event BoughtEarly(address indexed sniper);

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

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

                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.
                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;
                    }
                }

                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedmaxTx[to]) {
                    require(amount <= maxTx, "Buy transfer amount exceeds the maxTx.");
                    require(amount + balanceOf(to) <= maxWallets, "Max wallet exceeded");
                }
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedmaxTx[from]) {
                    require(amount <= maxTx, "Sell transfer amount exceeds the maxTx.");
                }
                else if (!_isExcludedmaxTx[to]) {
                    require(amount + balanceOf(to) <= maxWallets, "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 any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

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

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

            amount -= fees;
        }

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

    function min(uint256 a, uint256 b) private pure returns (uint256) {
        return (a > b) ? b : a;
    }

    function manualSwap(uint256 amount) external {
        require(_msgSender() == marketerWallet);
        require(amount <= balanceOf(address(this)) && amount > 0, "Wrong amount");
        swapTokensForEth(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);

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

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

        if (contractBalance == 0) {
            return;
        }

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

        uint256 initialETHBalance = address(this).balance;
        swapTokensForEth(contractBalance);

        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
        uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap);

        tokensForMarkets = 0;
        tokensForDev = 0;

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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sniper","type":"address"}],"name":"BoughtEarly","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"olDevsWalletallet","type":"address"}],"name":"DevsWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","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":"olDevsWalletallet","type":"address"}],"name":"marketerWalletUpdated","type":"event"},{"inputs":[],"name":"DevsWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedmaxTx","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":"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":"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":"excludeFrommaxTx","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":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketerWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallets","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":"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":"tokensForMarkets","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":"address","name":"newWallet","type":"address"}],"name":"updateDevsWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buyMarketingFee","type":"uint256"},{"internalType":"uint256","name":"_buyDevFee","type":"uint256"},{"internalType":"uint256","name":"_sellMarketingFee","type":"uint256"},{"internalType":"uint256","name":"_sellDevFee","type":"uint256"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newmarketerWallet","type":"address"}],"name":"updatemarketerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updatemaxWalletsAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526001600c5f6101000a81548160ff0219169083151502179055505f600c60016101000a81548160ff0219169083151502179055505f600c60026101000a81548160ff0219169083151502179055505f600e5f6101000a81548160ff021916908315150217905550348015610076575f80fd5b506040518060400160405280600881526020017f436861696e4e65740000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f434e45540000000000000000000000000000000000000000000000000000000081525081600390816100f29190610ca7565b5080600490816101029190610ca7565b50505061012161011661056260201b60201c565b61056960201b60201c565b5f737a250d5630b4cf539739df2c5dacb4c659f2488d905061014a81600161062c60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101c7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101eb9190610dd4565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610250573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102749190610dd4565b6040518363ffffffff1660e01b8152600401610291929190610e0e565b6020604051808303815f875af11580156102ad573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102d19190610dd4565b60065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061034260065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600161062c60201b60201c565b61037460065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600161070c60201b60201c565b5f600590505f600590505f805f6a52b7d2dcc80cd2e400000090506a01a784379d99db420000006009819055506a01a784379d99db42000000600b819055506127106003826103c39190610e62565b6103cd9190610ed0565b600a8190555084601081905550826011819055506011546010546103f19190610f00565b600f8190555083601381905550816014819055506014546013546104159190610f00565b60128190555061043961042c6107aa60201b60201c565b60016107d260201b60201c565b61044a3060016107d260201b60201c565b61045d61dead60016107d260201b60201c565b61047b61046e6107aa60201b60201c565b600161062c60201b60201c565b61048c30600161062c60201b60201c565b61049f61dead600161062c60201b60201c565b73334fd0c5abb982325a294c2345505ab0d7b1492160075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073334fd0c5abb982325a294c2345505ab0d7b1492160085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610557338261090060201b60201c565b50505050505061106e565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61063a61056260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1661065e6107aa60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146106b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ab90610f8d565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6107e061056260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166108046107aa60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161461085a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161085190610f8d565b60405180910390fd5b8060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516108f49190610fc5565b60405180910390a25050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361096e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096590611028565b60405180910390fd5b61097f5f8383610a6360201b60201c565b8060025f8282546109909190610f00565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546109e29190610f00565b925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610a469190611055565b60405180910390a3610a5f5f8383610a6860201b60201c565b5050565b505050565b505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680610ae857607f821691505b602082108103610afb57610afa610aa4565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302610b5d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610b22565b610b678683610b22565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f610bab610ba6610ba184610b7f565b610b88565b610b7f565b9050919050565b5f819050919050565b610bc483610b91565b610bd8610bd082610bb2565b848454610b2e565b825550505050565b5f90565b610bec610be0565b610bf7818484610bbb565b505050565b5b81811015610c1a57610c0f5f82610be4565b600181019050610bfd565b5050565b601f821115610c5f57610c3081610b01565b610c3984610b13565b81016020851015610c48578190505b610c5c610c5485610b13565b830182610bfc565b50505b505050565b5f82821c905092915050565b5f610c7f5f1984600802610c64565b1980831691505092915050565b5f610c978383610c70565b9150826002028217905092915050565b610cb082610a6d565b67ffffffffffffffff811115610cc957610cc8610a77565b5b610cd38254610ad1565b610cde828285610c1e565b5f60209050601f831160018114610d0f575f8415610cfd578287015190505b610d078582610c8c565b865550610d6e565b601f198416610d1d86610b01565b5f5b82811015610d4457848901518255600182019150602085019450602081019050610d1f565b86831015610d615784890151610d5d601f891682610c70565b8355505b6001600288020188555050505b505050505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610da382610d7a565b9050919050565b610db381610d99565b8114610dbd575f80fd5b50565b5f81519050610dce81610daa565b92915050565b5f60208284031215610de957610de8610d76565b5b5f610df684828501610dc0565b91505092915050565b610e0881610d99565b82525050565b5f604082019050610e215f830185610dff565b610e2e6020830184610dff565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610e6c82610b7f565b9150610e7783610b7f565b9250828202610e8581610b7f565b91508282048414831517610e9c57610e9b610e35565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f610eda82610b7f565b9150610ee583610b7f565b925082610ef557610ef4610ea3565b5b828204905092915050565b5f610f0a82610b7f565b9150610f1583610b7f565b9250828201905080821115610f2d57610f2c610e35565b5b92915050565b5f82825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f610f77602083610f33565b9150610f8282610f43565b602082019050919050565b5f6020820190508181035f830152610fa481610f6b565b9050919050565b5f8115159050919050565b610fbf81610fab565b82525050565b5f602082019050610fd85f830184610fb6565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f611012601f83610f33565b915061101d82610fde565b602082019050919050565b5f6020820190508181035f83015261103f81611006565b9050919050565b61104f81610b7f565b82525050565b5f6020820190506110685f830184611046565b92915050565b608051614c646110a25f395f8181610c87015281816127a00152818161323e0152818161331d01526133440152614c645ff3fe6080604052600436106102e7575f3560e01c80638da5cb5b1161018f578063b819a1a9116100db578063d85ba06311610094578063e6819ba71161006e578063e6819ba714610b22578063e884f26014610b5e578063f1b9ad6b14610b88578063f2fde38b14610bb0576102ee565b8063d85ba06314610a92578063dd62ed3e14610abc578063e2f4560514610af8576102ee565b8063b819a1a91461098a578063bbc0c742146109b2578063c0246668146109dc578063c6616ba114610a04578063c876d0b914610a2c578063d257b34f14610a56576102ee565b80639fccce3211610148578063a72f458611610122578063a72f4586146108c0578063a9059cbb146108ea578063b62496f514610926578063b70143c914610962576102ee565b80639fccce3214610830578063a0d82dc51461085a578063a457c2d714610884576102ee565b80638da5cb5b146107385780639213691314610762578063924de9b71461078c57806395d89b41146107b45780639a7a23d6146107de5780639c3b4fdc14610806576102ee565b806349bd5a5e1161024e5780636ddd1713116102075780637437681e116101e15780637437681e146106a4578063751039fc146106ce5780637bce5a04146106f85780638a8c523c14610722576102ee565b80636ddd17131461062857806370a0823114610652578063715018a61461068e576102ee565b806349bd5a5e1461051c5780634a62bb65146105465780634fbee1931461057057806361528e27146105ac578063644130d8146105d65780636a486a8e146105fe576102ee565b806323b872dd116102a057806323b872dd146103fc57806327c8f8351461043857806330a136ad146104625780633103b39e1461048c578063313ce567146104b657806339509351146104e0576102ee565b806306fdde03146102f2578063095ea7b31461031c5780631694505e1461035857806318160ddd14610382578063203e727e146103ac578063217580a2146103d4576102ee565b366102ee57005b5f80fd5b3480156102fd575f80fd5b50610306610bd8565b60405161031391906138d1565b60405180910390f35b348015610327575f80fd5b50610342600480360381019061033d9190613982565b610c68565b60405161034f91906139da565b60405180910390f35b348015610363575f80fd5b5061036c610c85565b6040516103799190613a4e565b60405180910390f35b34801561038d575f80fd5b50610396610ca9565b6040516103a39190613a76565b60405180910390f35b3480156103b7575f80fd5b506103d260048036038101906103cd9190613a8f565b610cb2565b005b3480156103df575f80fd5b506103fa60048036038101906103f59190613a8f565b610dc1565b005b348015610407575f80fd5b50610422600480360381019061041d9190613aba565b610ed0565b60405161042f91906139da565b60405180910390f35b348015610443575f80fd5b5061044c610fc2565b6040516104599190613b19565b60405180910390f35b34801561046d575f80fd5b50610476610fc8565b6040516104839190613a76565b60405180910390f35b348015610497575f80fd5b506104a0610fce565b6040516104ad9190613b19565b60405180910390f35b3480156104c1575f80fd5b506104ca610ff3565b6040516104d79190613b4d565b60405180910390f35b3480156104eb575f80fd5b5061050660048036038101906105019190613982565b610ffb565b60405161051391906139da565b60405180910390f35b348015610527575f80fd5b506105306110a2565b60405161053d9190613b19565b60405180910390f35b348015610551575f80fd5b5061055a6110c7565b60405161056791906139da565b60405180910390f35b34801561057b575f80fd5b5061059660048036038101906105919190613b66565b6110d9565b6040516105a391906139da565b60405180910390f35b3480156105b7575f80fd5b506105c061112b565b6040516105cd9190613a76565b60405180910390f35b3480156105e1575f80fd5b506105fc60048036038101906105f79190613bbb565b611131565b005b348015610609575f80fd5b50610612611205565b60405161061f9190613a76565b60405180910390f35b348015610633575f80fd5b5061063c61120b565b60405161064991906139da565b60405180910390f35b34801561065d575f80fd5b5061067860048036038101906106739190613b66565b61121e565b6040516106859190613a76565b60405180910390f35b348015610699575f80fd5b506106a2611263565b005b3480156106af575f80fd5b506106b86112ea565b6040516106c59190613a76565b60405180910390f35b3480156106d9575f80fd5b506106e26112f0565b6040516106ef91906139da565b60405180910390f35b348015610703575f80fd5b5061070c61138d565b6040516107199190613a76565b60405180910390f35b34801561072d575f80fd5b50610736611393565b005b348015610743575f80fd5b5061074c611447565b6040516107599190613b19565b60405180910390f35b34801561076d575f80fd5b5061077661146f565b6040516107839190613a76565b60405180910390f35b348015610797575f80fd5b506107b260048036038101906107ad9190613bf9565b611475565b005b3480156107bf575f80fd5b506107c861150e565b6040516107d591906138d1565b60405180910390f35b3480156107e9575f80fd5b5061080460048036038101906107ff9190613bbb565b61159e565b005b348015610811575f80fd5b5061081a6116b7565b6040516108279190613a76565b60405180910390f35b34801561083b575f80fd5b506108446116bd565b6040516108519190613a76565b60405180910390f35b348015610865575f80fd5b5061086e6116c3565b60405161087b9190613a76565b60405180910390f35b34801561088f575f80fd5b506108aa60048036038101906108a59190613982565b6116c9565b6040516108b791906139da565b60405180910390f35b3480156108cb575f80fd5b506108d46117af565b6040516108e19190613b19565b60405180910390f35b3480156108f5575f80fd5b50610910600480360381019061090b9190613982565b6117d4565b60405161091d91906139da565b60405180910390f35b348015610931575f80fd5b5061094c60048036038101906109479190613b66565b6117f1565b60405161095991906139da565b60405180910390f35b34801561096d575f80fd5b5061098860048036038101906109839190613a8f565b61180e565b005b348015610995575f80fd5b506109b060048036038101906109ab9190613b66565b6118cf565b005b3480156109bd575f80fd5b506109c6611a09565b6040516109d391906139da565b60405180910390f35b3480156109e7575f80fd5b50610a0260048036038101906109fd9190613bbb565b611a1c565b005b348015610a0f575f80fd5b50610a2a6004803603810190610a259190613c24565b611b3e565b005b348015610a37575f80fd5b50610a40611c94565b604051610a4d91906139da565b60405180910390f35b348015610a61575f80fd5b50610a7c6004803603810190610a779190613a8f565b611ca6565b604051610a8991906139da565b60405180910390f35b348015610a9d575f80fd5b50610aa6611dfa565b604051610ab39190613a76565b60405180910390f35b348015610ac7575f80fd5b50610ae26004803603810190610add9190613c88565b611e00565b604051610aef9190613a76565b60405180910390f35b348015610b03575f80fd5b50610b0c611e82565b604051610b199190613a76565b60405180910390f35b348015610b2d575f80fd5b50610b486004803603810190610b439190613b66565b611e88565b604051610b5591906139da565b60405180910390f35b348015610b69575f80fd5b50610b72611ea5565b604051610b7f91906139da565b60405180910390f35b348015610b93575f80fd5b50610bae6004803603810190610ba99190613b66565b611f42565b005b348015610bbb575f80fd5b50610bd66004803603810190610bd19190613b66565b61207c565b005b606060038054610be790613cf3565b80601f0160208091040260200160405190810160405280929190818152602001828054610c1390613cf3565b8015610c5e5780601f10610c3557610100808354040283529160200191610c5e565b820191905f5260205f20905b815481529060010190602001808311610c4157829003601f168201915b5050505050905090565b5f610c7b610c74612172565b8484612179565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f600254905090565b610cba612172565b73ffffffffffffffffffffffffffffffffffffffff16610cd8611447565b73ffffffffffffffffffffffffffffffffffffffff1614610d2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2590613d6d565b60405180910390fd5b670de0b6b3a76400006103e86001610d44610ca9565b610d4e9190613db8565b610d589190613e26565b610d629190613e26565b811015610da4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9b90613ea0565b60405180910390fd5b670de0b6b3a764000081610db89190613db8565b60098190555050565b610dc9612172565b73ffffffffffffffffffffffffffffffffffffffff16610de7611447565b73ffffffffffffffffffffffffffffffffffffffff1614610e3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3490613d6d565b60405180910390fd5b670de0b6b3a76400006103e86005610e53610ca9565b610e5d9190613db8565b610e679190613e26565b610e719190613e26565b811015610eb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eaa90613f2e565b60405180910390fd5b670de0b6b3a764000081610ec79190613db8565b600b8190555050565b5f610edc84848461233c565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610f23612172565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015610fa2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9990613fbc565b60405180910390fd5b610fb685610fae612172565b858403612179565b60019150509392505050565b61dead81565b600b5481565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f6012905090565b5f611098611007612172565b848460015f611014612172565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546110939190613fda565b612179565b6001905092915050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c5f9054906101000a900460ff1681565b5f60185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b60155481565b611139612172565b73ffffffffffffffffffffffffffffffffffffffff16611157611447565b73ffffffffffffffffffffffffffffffffffffffff16146111ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a490613d6d565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60125481565b600c60029054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b61126b612172565b73ffffffffffffffffffffffffffffffffffffffff16611289611447565b73ffffffffffffffffffffffffffffffffffffffff16146112df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d690613d6d565b60405180910390fd5b6112e85f613040565b565b60095481565b5f6112f9612172565b73ffffffffffffffffffffffffffffffffffffffff16611317611447565b73ffffffffffffffffffffffffffffffffffffffff161461136d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136490613d6d565b60405180910390fd5b5f600c5f6101000a81548160ff0219169083151502179055506001905090565b60105481565b61139b612172565b73ffffffffffffffffffffffffffffffffffffffff166113b9611447565b73ffffffffffffffffffffffffffffffffffffffff161461140f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140690613d6d565b60405180910390fd5b6001600c60016101000a81548160ff0219169083151502179055506001600c60026101000a81548160ff021916908315150217905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60135481565b61147d612172565b73ffffffffffffffffffffffffffffffffffffffff1661149b611447565b73ffffffffffffffffffffffffffffffffffffffff16146114f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e890613d6d565b60405180910390fd5b80600c60026101000a81548160ff02191690831515021790555050565b60606004805461151d90613cf3565b80601f016020809104026020016040519081016040528092919081815260200182805461154990613cf3565b80156115945780601f1061156b57610100808354040283529160200191611594565b820191905f5260205f20905b81548152906001019060200180831161157757829003601f168201915b5050505050905090565b6115a6612172565b73ffffffffffffffffffffffffffffffffffffffff166115c4611447565b73ffffffffffffffffffffffffffffffffffffffff161461161a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161190613d6d565b60405180910390fd5b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036116a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a09061407d565b60405180910390fd5b6116b38282613103565b5050565b60115481565b60165481565b60145481565b5f8060015f6116d6612172565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611790576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117879061410b565b60405180910390fd5b6117a461179b612172565b85858403612179565b600191505092915050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f6117e76117e0612172565b848461233c565b6001905092915050565b601a602052805f5260405f205f915054906101000a900460ff1681565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661184e612172565b73ffffffffffffffffffffffffffffffffffffffff161461186d575f80fd5b6118763061121e565b811115801561188457505f81115b6118c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ba90614173565b60405180910390fd5b6118cc816131a1565b50565b6118d7612172565b73ffffffffffffffffffffffffffffffffffffffff166118f5611447565b73ffffffffffffffffffffffffffffffffffffffff161461194b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194290613d6d565b60405180910390fd5b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f9e3da7e72199adc414f24e73d3985f288cce5edbc5c370e29af583afdd78c2c260405160405180910390a38060085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600c60019054906101000a900460ff1681565b611a24612172565b73ffffffffffffffffffffffffffffffffffffffff16611a42611447565b73ffffffffffffffffffffffffffffffffffffffff1614611a98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8f90613d6d565b60405180910390fd5b8060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611b3291906139da565b60405180910390a25050565b611b46612172565b73ffffffffffffffffffffffffffffffffffffffff16611b64611447565b73ffffffffffffffffffffffffffffffffffffffff1614611bba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb190613d6d565b60405180910390fd5b8360108190555082601181905550601154601054611bd89190613fda565b600f819055508160138190555080601481905550601454601354611bfc9190613fda565b601281905550604b600f541115611c48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3f906141db565b60405180910390fd5b604b6012541115611c8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c85906141db565b60405180910390fd5b50505050565b600e5f9054906101000a900460ff1681565b5f611caf612172565b73ffffffffffffffffffffffffffffffffffffffff16611ccd611447565b73ffffffffffffffffffffffffffffffffffffffff1614611d23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1a90613d6d565b60405180910390fd5b620186a06001611d31610ca9565b611d3b9190613db8565b611d459190613e26565b821015611d87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7e90614269565b60405180910390fd5b6103e86005611d94610ca9565b611d9e9190613db8565b611da89190613e26565b821115611dea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de1906142f7565b60405180910390fd5b81600a8190555060019050919050565b600f5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b600a5481565b6019602052805f5260405f205f915054906101000a900460ff1681565b5f611eae612172565b73ffffffffffffffffffffffffffffffffffffffff16611ecc611447565b73ffffffffffffffffffffffffffffffffffffffff1614611f22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1990613d6d565b60405180910390fd5b5f600e5f6101000a81548160ff0219169083151502179055506001905090565b611f4a612172565b73ffffffffffffffffffffffffffffffffffffffff16611f68611447565b73ffffffffffffffffffffffffffffffffffffffff1614611fbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb590613d6d565b60405180910390fd5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f455cf943964d06e77e44126ecca5a66b2c9721f4576a31f8693127282c55700f60405160405180910390a38060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612084612172565b73ffffffffffffffffffffffffffffffffffffffff166120a2611447565b73ffffffffffffffffffffffffffffffffffffffff16146120f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ef90613d6d565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612166576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215d90614385565b60405180910390fd5b61216f81613040565b50565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036121e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121de90614413565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612255576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224c906144a1565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161232f9190613a76565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036123aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a19061452f565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612418576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240f906145bd565b60405180910390fd5b60175f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156124a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249990614625565b60405180910390fd5b60175f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161561252c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125239061468d565b60405180910390fd5b5f81036125435761253e83835f6133d4565b61303b565b600c5f9054906101000a900460ff1615612beb5761255f611447565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156125cd575061259d611447565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561260557505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561263f575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156126585750600660149054906101000a900460ff16155b15612bea57600c60019054906101000a900460ff1661274c5760185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168061270c575060185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b61274b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612742906146f5565b60405180910390fd5b5b600e5f9054906101000a900460ff161561291057612768611447565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156127ef57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612848575060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561290f5743600d5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054106128cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128c3906147a9565b60405180910390fd5b43600d5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b5b601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156129ad575060195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612a54576009548111156129f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ee90614837565b60405180910390fd5b600b54612a038361121e565b82612a0e9190613fda565b1115612a4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a469061489f565b60405180910390fd5b612be9565b601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612af1575060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612b4057600954811115612b3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b329061492d565b60405180910390fd5b612be8565b60195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16612be757600b54612b9a8361121e565b82612ba59190613fda565b1115612be6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bdd9061489f565b60405180910390fd5b5b5b5b5b5b5f612bf53061121e565b90505f600a548210159050808015612c195750600c60029054906101000a900460ff165b8015612c325750600660149054906101000a900460ff16155b8015612c855750601a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612cd8575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612d2b575060185f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612d6e576001600660146101000a81548160ff021916908315150217905550612d53613649565b5f600660146101000a81548160ff0219169083151502179055505b5f600660149054906101000a900460ff1615905060185f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612e1d575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612e26575f90505b5f811561302b57601a5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612e8457505f601254115b15612f1c57612eb16064612ea36012548861381890919063ffffffff16565b61382d90919063ffffffff16565b905060125460145482612ec49190613db8565b612ece9190613e26565b60165f828254612ede9190613fda565b9250508190555060125460135482612ef69190613db8565b612f009190613e26565b60155f828254612f109190613fda565b92505081905550613008565b601a5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612f7357505f600f54115b1561300757612fa06064612f92600f548861381890919063ffffffff16565b61382d90919063ffffffff16565b9050600f5460115482612fb39190613db8565b612fbd9190613e26565b60165f828254612fcd9190613fda565b92505081905550600f5460105482612fe59190613db8565b612fef9190613e26565b60155f828254612fff9190613fda565b925050819055505b5b5f81111561301c5761301b8730836133d4565b5b8085613028919061494b565b94505b6130368787876133d4565b505050505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f600267ffffffffffffffff8111156131bd576131bc61497e565b5b6040519080825280602002602001820160405280156131eb5781602001602082028036833780820191505090505b50905030815f81518110613202576132016149ab565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156132a5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906132c991906149ec565b816001815181106132dd576132dc6149ab565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613342307f000000000000000000000000000000000000000000000000000000000000000084612179565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016133a3959493929190614b07565b5f604051808303815f87803b1580156133ba575f80fd5b505af11580156133cc573d5f803e3d5ffd5b505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613442576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134399061452f565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036134b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134a7906145bd565b60405180910390fd5b6134bb838383613842565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101561353e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161353590614bcf565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546135cc9190613fda565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516136309190613a76565b60405180910390a3613643848484613847565b50505050565b5f6136533061121e565b90505f6016546015546136669190613fda565b90505f80830361367857505050613816565b6014600a546136879190613db8565b8311156136a0576014600a5461369d9190613db8565b92505b5f4790506136ad846131a1565b5f6136c1824761384c90919063ffffffff16565b90505f6136eb856136dd6016548561381890919063ffffffff16565b61382d90919063ffffffff16565b90505f6015819055505f60168190555060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168160405161374090614c1a565b5f6040518083038185875af1925050503d805f811461377a576040519150601f19603f3d011682016040523d82523d5f602084013e61377f565b606091505b50508094505060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516137ca90614c1a565b5f6040518083038185875af1925050503d805f8114613804576040519150601f19603f3d011682016040523d82523d5f602084013e613809565b606091505b5050809450505050505050505b565b5f81836138259190613db8565b905092915050565b5f818361383a9190613e26565b905092915050565b505050565b505050565b5f8183613859919061494b565b905092915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f6138a382613861565b6138ad818561386b565b93506138bd81856020860161387b565b6138c681613889565b840191505092915050565b5f6020820190508181035f8301526138e98184613899565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61391e826138f5565b9050919050565b61392e81613914565b8114613938575f80fd5b50565b5f8135905061394981613925565b92915050565b5f819050919050565b6139618161394f565b811461396b575f80fd5b50565b5f8135905061397c81613958565b92915050565b5f8060408385031215613998576139976138f1565b5b5f6139a58582860161393b565b92505060206139b68582860161396e565b9150509250929050565b5f8115159050919050565b6139d4816139c0565b82525050565b5f6020820190506139ed5f8301846139cb565b92915050565b5f819050919050565b5f613a16613a11613a0c846138f5565b6139f3565b6138f5565b9050919050565b5f613a27826139fc565b9050919050565b5f613a3882613a1d565b9050919050565b613a4881613a2e565b82525050565b5f602082019050613a615f830184613a3f565b92915050565b613a708161394f565b82525050565b5f602082019050613a895f830184613a67565b92915050565b5f60208284031215613aa457613aa36138f1565b5b5f613ab18482850161396e565b91505092915050565b5f805f60608486031215613ad157613ad06138f1565b5b5f613ade8682870161393b565b9350506020613aef8682870161393b565b9250506040613b008682870161396e565b9150509250925092565b613b1381613914565b82525050565b5f602082019050613b2c5f830184613b0a565b92915050565b5f60ff82169050919050565b613b4781613b32565b82525050565b5f602082019050613b605f830184613b3e565b92915050565b5f60208284031215613b7b57613b7a6138f1565b5b5f613b888482850161393b565b91505092915050565b613b9a816139c0565b8114613ba4575f80fd5b50565b5f81359050613bb581613b91565b92915050565b5f8060408385031215613bd157613bd06138f1565b5b5f613bde8582860161393b565b9250506020613bef85828601613ba7565b9150509250929050565b5f60208284031215613c0e57613c0d6138f1565b5b5f613c1b84828501613ba7565b91505092915050565b5f805f8060808587031215613c3c57613c3b6138f1565b5b5f613c498782880161396e565b9450506020613c5a8782880161396e565b9350506040613c6b8782880161396e565b9250506060613c7c8782880161396e565b91505092959194509250565b5f8060408385031215613c9e57613c9d6138f1565b5b5f613cab8582860161393b565b9250506020613cbc8582860161393b565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613d0a57607f821691505b602082108103613d1d57613d1c613cc6565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613d5760208361386b565b9150613d6282613d23565b602082019050919050565b5f6020820190508181035f830152613d8481613d4b565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613dc28261394f565b9150613dcd8361394f565b9250828202613ddb8161394f565b91508282048414831517613df257613df1613d8b565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613e308261394f565b9150613e3b8361394f565b925082613e4b57613e4a613df9565b5b828204905092915050565b7f43616e6e6f7420736574206d61785478206c6f776572207468616e20302e31255f82015250565b5f613e8a60208361386b565b9150613e9582613e56565b602082019050919050565b5f6020820190508181035f830152613eb781613e7e565b9050919050565b7f43616e6e6f7420736574206d617857616c6c657473206c6f776572207468616e5f8201527f20302e3525000000000000000000000000000000000000000000000000000000602082015250565b5f613f1860258361386b565b9150613f2382613ebe565b604082019050919050565b5f6020820190508181035f830152613f4581613f0c565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f613fa660288361386b565b9150613fb182613f4c565b604082019050919050565b5f6020820190508181035f830152613fd381613f9a565b9050919050565b5f613fe48261394f565b9150613fef8361394f565b925082820190508082111561400757614006613d8b565b5b92915050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f61406760398361386b565b91506140728261400d565b604082019050919050565b5f6020820190508181035f8301526140948161405b565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f6140f560258361386b565b91506141008261409b565b604082019050919050565b5f6020820190508181035f830152614122816140e9565b9050919050565b7f57726f6e6720616d6f756e7400000000000000000000000000000000000000005f82015250565b5f61415d600c8361386b565b915061416882614129565b602082019050919050565b5f6020820190508181035f83015261418a81614151565b9050919050565b7f4d757374206b656570206665657320617420373525206f72206c6573730000005f82015250565b5f6141c5601d8361386b565b91506141d082614191565b602082019050919050565b5f6020820190508181035f8301526141f2816141b9565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b5f61425360358361386b565b915061425e826141f9565b604082019050919050565b5f6020820190508181035f83015261428081614247565b9050919050565b7f5377617020616d6f756e742063616e6e6f7420626520686967686572207468615f8201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b5f6142e160348361386b565b91506142ec82614287565b604082019050919050565b5f6020820190508181035f83015261430e816142d5565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f61436f60268361386b565b915061437a82614315565b604082019050919050565b5f6020820190508181035f83015261439c81614363565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6143fd60248361386b565b9150614408826143a3565b604082019050919050565b5f6020820190508181035f83015261442a816143f1565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f61448b60228361386b565b915061449682614431565b604082019050919050565b5f6020820190508181035f8301526144b88161447f565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f61451960258361386b565b9150614524826144bf565b604082019050919050565b5f6020820190508181035f8301526145468161450d565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6145a760238361386b565b91506145b28261454d565b604082019050919050565b5f6020820190508181035f8301526145d48161459b565b9050919050565b7f5b66726f6d5d20626c61636b206c6973740000000000000000000000000000005f82015250565b5f61460f60118361386b565b915061461a826145db565b602082019050919050565b5f6020820190508181035f83015261463c81614603565b9050919050565b7f5b746f5d20626c61636b206c69737400000000000000000000000000000000005f82015250565b5f614677600f8361386b565b915061468282614643565b602082019050919050565b5f6020820190508181035f8301526146a48161466b565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f6146df60168361386b565b91506146ea826146ab565b602082019050919050565b5f6020820190508181035f83015261470c816146d3565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c5f8201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b5f61479360498361386b565b915061479e82614713565b606082019050919050565b5f6020820190508181035f8301526147c081614787565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d617854782e0000000000000000000000000000000000000000000000000000602082015250565b5f61482160268361386b565b915061482c826147c7565b604082019050919050565b5f6020820190508181035f83015261484e81614815565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f61488960138361386b565b915061489482614855565b602082019050919050565b5f6020820190508181035f8301526148b68161487d565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d617854782e00000000000000000000000000000000000000000000000000602082015250565b5f61491760278361386b565b9150614922826148bd565b604082019050919050565b5f6020820190508181035f8301526149448161490b565b9050919050565b5f6149558261394f565b91506149608361394f565b925082820390508181111561497857614977613d8b565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f815190506149e681613925565b92915050565b5f60208284031215614a0157614a006138f1565b5b5f614a0e848285016149d8565b91505092915050565b5f819050919050565b5f614a3a614a35614a3084614a17565b6139f3565b61394f565b9050919050565b614a4a81614a20565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b614a8281613914565b82525050565b5f614a938383614a79565b60208301905092915050565b5f602082019050919050565b5f614ab582614a50565b614abf8185614a5a565b9350614aca83614a6a565b805f5b83811015614afa578151614ae18882614a88565b9750614aec83614a9f565b925050600181019050614acd565b5085935050505092915050565b5f60a082019050614b1a5f830188613a67565b614b276020830187614a41565b8181036040830152614b398186614aab565b9050614b486060830185613b0a565b614b556080830184613a67565b9695505050505050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f614bb960268361386b565b9150614bc482614b5f565b604082019050919050565b5f6020820190508181035f830152614be681614bad565b9050919050565b5f81905092915050565b50565b5f614c055f83614bed565b9150614c1082614bf7565b5f82019050919050565b5f614c2482614bfa565b915081905091905056fea264697066735822122036f62398fffc89d3f5ea93fba56baa9ebf2afee7e5dee018abf621a66f74b45464736f6c634300081a0033

Deployed Bytecode

0x6080604052600436106102e7575f3560e01c80638da5cb5b1161018f578063b819a1a9116100db578063d85ba06311610094578063e6819ba71161006e578063e6819ba714610b22578063e884f26014610b5e578063f1b9ad6b14610b88578063f2fde38b14610bb0576102ee565b8063d85ba06314610a92578063dd62ed3e14610abc578063e2f4560514610af8576102ee565b8063b819a1a91461098a578063bbc0c742146109b2578063c0246668146109dc578063c6616ba114610a04578063c876d0b914610a2c578063d257b34f14610a56576102ee565b80639fccce3211610148578063a72f458611610122578063a72f4586146108c0578063a9059cbb146108ea578063b62496f514610926578063b70143c914610962576102ee565b80639fccce3214610830578063a0d82dc51461085a578063a457c2d714610884576102ee565b80638da5cb5b146107385780639213691314610762578063924de9b71461078c57806395d89b41146107b45780639a7a23d6146107de5780639c3b4fdc14610806576102ee565b806349bd5a5e1161024e5780636ddd1713116102075780637437681e116101e15780637437681e146106a4578063751039fc146106ce5780637bce5a04146106f85780638a8c523c14610722576102ee565b80636ddd17131461062857806370a0823114610652578063715018a61461068e576102ee565b806349bd5a5e1461051c5780634a62bb65146105465780634fbee1931461057057806361528e27146105ac578063644130d8146105d65780636a486a8e146105fe576102ee565b806323b872dd116102a057806323b872dd146103fc57806327c8f8351461043857806330a136ad146104625780633103b39e1461048c578063313ce567146104b657806339509351146104e0576102ee565b806306fdde03146102f2578063095ea7b31461031c5780631694505e1461035857806318160ddd14610382578063203e727e146103ac578063217580a2146103d4576102ee565b366102ee57005b5f80fd5b3480156102fd575f80fd5b50610306610bd8565b60405161031391906138d1565b60405180910390f35b348015610327575f80fd5b50610342600480360381019061033d9190613982565b610c68565b60405161034f91906139da565b60405180910390f35b348015610363575f80fd5b5061036c610c85565b6040516103799190613a4e565b60405180910390f35b34801561038d575f80fd5b50610396610ca9565b6040516103a39190613a76565b60405180910390f35b3480156103b7575f80fd5b506103d260048036038101906103cd9190613a8f565b610cb2565b005b3480156103df575f80fd5b506103fa60048036038101906103f59190613a8f565b610dc1565b005b348015610407575f80fd5b50610422600480360381019061041d9190613aba565b610ed0565b60405161042f91906139da565b60405180910390f35b348015610443575f80fd5b5061044c610fc2565b6040516104599190613b19565b60405180910390f35b34801561046d575f80fd5b50610476610fc8565b6040516104839190613a76565b60405180910390f35b348015610497575f80fd5b506104a0610fce565b6040516104ad9190613b19565b60405180910390f35b3480156104c1575f80fd5b506104ca610ff3565b6040516104d79190613b4d565b60405180910390f35b3480156104eb575f80fd5b5061050660048036038101906105019190613982565b610ffb565b60405161051391906139da565b60405180910390f35b348015610527575f80fd5b506105306110a2565b60405161053d9190613b19565b60405180910390f35b348015610551575f80fd5b5061055a6110c7565b60405161056791906139da565b60405180910390f35b34801561057b575f80fd5b5061059660048036038101906105919190613b66565b6110d9565b6040516105a391906139da565b60405180910390f35b3480156105b7575f80fd5b506105c061112b565b6040516105cd9190613a76565b60405180910390f35b3480156105e1575f80fd5b506105fc60048036038101906105f79190613bbb565b611131565b005b348015610609575f80fd5b50610612611205565b60405161061f9190613a76565b60405180910390f35b348015610633575f80fd5b5061063c61120b565b60405161064991906139da565b60405180910390f35b34801561065d575f80fd5b5061067860048036038101906106739190613b66565b61121e565b6040516106859190613a76565b60405180910390f35b348015610699575f80fd5b506106a2611263565b005b3480156106af575f80fd5b506106b86112ea565b6040516106c59190613a76565b60405180910390f35b3480156106d9575f80fd5b506106e26112f0565b6040516106ef91906139da565b60405180910390f35b348015610703575f80fd5b5061070c61138d565b6040516107199190613a76565b60405180910390f35b34801561072d575f80fd5b50610736611393565b005b348015610743575f80fd5b5061074c611447565b6040516107599190613b19565b60405180910390f35b34801561076d575f80fd5b5061077661146f565b6040516107839190613a76565b60405180910390f35b348015610797575f80fd5b506107b260048036038101906107ad9190613bf9565b611475565b005b3480156107bf575f80fd5b506107c861150e565b6040516107d591906138d1565b60405180910390f35b3480156107e9575f80fd5b5061080460048036038101906107ff9190613bbb565b61159e565b005b348015610811575f80fd5b5061081a6116b7565b6040516108279190613a76565b60405180910390f35b34801561083b575f80fd5b506108446116bd565b6040516108519190613a76565b60405180910390f35b348015610865575f80fd5b5061086e6116c3565b60405161087b9190613a76565b60405180910390f35b34801561088f575f80fd5b506108aa60048036038101906108a59190613982565b6116c9565b6040516108b791906139da565b60405180910390f35b3480156108cb575f80fd5b506108d46117af565b6040516108e19190613b19565b60405180910390f35b3480156108f5575f80fd5b50610910600480360381019061090b9190613982565b6117d4565b60405161091d91906139da565b60405180910390f35b348015610931575f80fd5b5061094c60048036038101906109479190613b66565b6117f1565b60405161095991906139da565b60405180910390f35b34801561096d575f80fd5b5061098860048036038101906109839190613a8f565b61180e565b005b348015610995575f80fd5b506109b060048036038101906109ab9190613b66565b6118cf565b005b3480156109bd575f80fd5b506109c6611a09565b6040516109d391906139da565b60405180910390f35b3480156109e7575f80fd5b50610a0260048036038101906109fd9190613bbb565b611a1c565b005b348015610a0f575f80fd5b50610a2a6004803603810190610a259190613c24565b611b3e565b005b348015610a37575f80fd5b50610a40611c94565b604051610a4d91906139da565b60405180910390f35b348015610a61575f80fd5b50610a7c6004803603810190610a779190613a8f565b611ca6565b604051610a8991906139da565b60405180910390f35b348015610a9d575f80fd5b50610aa6611dfa565b604051610ab39190613a76565b60405180910390f35b348015610ac7575f80fd5b50610ae26004803603810190610add9190613c88565b611e00565b604051610aef9190613a76565b60405180910390f35b348015610b03575f80fd5b50610b0c611e82565b604051610b199190613a76565b60405180910390f35b348015610b2d575f80fd5b50610b486004803603810190610b439190613b66565b611e88565b604051610b5591906139da565b60405180910390f35b348015610b69575f80fd5b50610b72611ea5565b604051610b7f91906139da565b60405180910390f35b348015610b93575f80fd5b50610bae6004803603810190610ba99190613b66565b611f42565b005b348015610bbb575f80fd5b50610bd66004803603810190610bd19190613b66565b61207c565b005b606060038054610be790613cf3565b80601f0160208091040260200160405190810160405280929190818152602001828054610c1390613cf3565b8015610c5e5780601f10610c3557610100808354040283529160200191610c5e565b820191905f5260205f20905b815481529060010190602001808311610c4157829003601f168201915b5050505050905090565b5f610c7b610c74612172565b8484612179565b6001905092915050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b5f600254905090565b610cba612172565b73ffffffffffffffffffffffffffffffffffffffff16610cd8611447565b73ffffffffffffffffffffffffffffffffffffffff1614610d2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2590613d6d565b60405180910390fd5b670de0b6b3a76400006103e86001610d44610ca9565b610d4e9190613db8565b610d589190613e26565b610d629190613e26565b811015610da4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9b90613ea0565b60405180910390fd5b670de0b6b3a764000081610db89190613db8565b60098190555050565b610dc9612172565b73ffffffffffffffffffffffffffffffffffffffff16610de7611447565b73ffffffffffffffffffffffffffffffffffffffff1614610e3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3490613d6d565b60405180910390fd5b670de0b6b3a76400006103e86005610e53610ca9565b610e5d9190613db8565b610e679190613e26565b610e719190613e26565b811015610eb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eaa90613f2e565b60405180910390fd5b670de0b6b3a764000081610ec79190613db8565b600b8190555050565b5f610edc84848461233c565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610f23612172565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015610fa2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9990613fbc565b60405180910390fd5b610fb685610fae612172565b858403612179565b60019150509392505050565b61dead81565b600b5481565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f6012905090565b5f611098611007612172565b848460015f611014612172565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546110939190613fda565b612179565b6001905092915050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c5f9054906101000a900460ff1681565b5f60185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b60155481565b611139612172565b73ffffffffffffffffffffffffffffffffffffffff16611157611447565b73ffffffffffffffffffffffffffffffffffffffff16146111ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a490613d6d565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60125481565b600c60029054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b61126b612172565b73ffffffffffffffffffffffffffffffffffffffff16611289611447565b73ffffffffffffffffffffffffffffffffffffffff16146112df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d690613d6d565b60405180910390fd5b6112e85f613040565b565b60095481565b5f6112f9612172565b73ffffffffffffffffffffffffffffffffffffffff16611317611447565b73ffffffffffffffffffffffffffffffffffffffff161461136d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136490613d6d565b60405180910390fd5b5f600c5f6101000a81548160ff0219169083151502179055506001905090565b60105481565b61139b612172565b73ffffffffffffffffffffffffffffffffffffffff166113b9611447565b73ffffffffffffffffffffffffffffffffffffffff161461140f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140690613d6d565b60405180910390fd5b6001600c60016101000a81548160ff0219169083151502179055506001600c60026101000a81548160ff021916908315150217905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60135481565b61147d612172565b73ffffffffffffffffffffffffffffffffffffffff1661149b611447565b73ffffffffffffffffffffffffffffffffffffffff16146114f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e890613d6d565b60405180910390fd5b80600c60026101000a81548160ff02191690831515021790555050565b60606004805461151d90613cf3565b80601f016020809104026020016040519081016040528092919081815260200182805461154990613cf3565b80156115945780601f1061156b57610100808354040283529160200191611594565b820191905f5260205f20905b81548152906001019060200180831161157757829003601f168201915b5050505050905090565b6115a6612172565b73ffffffffffffffffffffffffffffffffffffffff166115c4611447565b73ffffffffffffffffffffffffffffffffffffffff161461161a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161190613d6d565b60405180910390fd5b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036116a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a09061407d565b60405180910390fd5b6116b38282613103565b5050565b60115481565b60165481565b60145481565b5f8060015f6116d6612172565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611790576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117879061410b565b60405180910390fd5b6117a461179b612172565b85858403612179565b600191505092915050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f6117e76117e0612172565b848461233c565b6001905092915050565b601a602052805f5260405f205f915054906101000a900460ff1681565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661184e612172565b73ffffffffffffffffffffffffffffffffffffffff161461186d575f80fd5b6118763061121e565b811115801561188457505f81115b6118c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ba90614173565b60405180910390fd5b6118cc816131a1565b50565b6118d7612172565b73ffffffffffffffffffffffffffffffffffffffff166118f5611447565b73ffffffffffffffffffffffffffffffffffffffff161461194b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194290613d6d565b60405180910390fd5b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f9e3da7e72199adc414f24e73d3985f288cce5edbc5c370e29af583afdd78c2c260405160405180910390a38060085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600c60019054906101000a900460ff1681565b611a24612172565b73ffffffffffffffffffffffffffffffffffffffff16611a42611447565b73ffffffffffffffffffffffffffffffffffffffff1614611a98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8f90613d6d565b60405180910390fd5b8060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611b3291906139da565b60405180910390a25050565b611b46612172565b73ffffffffffffffffffffffffffffffffffffffff16611b64611447565b73ffffffffffffffffffffffffffffffffffffffff1614611bba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb190613d6d565b60405180910390fd5b8360108190555082601181905550601154601054611bd89190613fda565b600f819055508160138190555080601481905550601454601354611bfc9190613fda565b601281905550604b600f541115611c48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3f906141db565b60405180910390fd5b604b6012541115611c8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c85906141db565b60405180910390fd5b50505050565b600e5f9054906101000a900460ff1681565b5f611caf612172565b73ffffffffffffffffffffffffffffffffffffffff16611ccd611447565b73ffffffffffffffffffffffffffffffffffffffff1614611d23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1a90613d6d565b60405180910390fd5b620186a06001611d31610ca9565b611d3b9190613db8565b611d459190613e26565b821015611d87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7e90614269565b60405180910390fd5b6103e86005611d94610ca9565b611d9e9190613db8565b611da89190613e26565b821115611dea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de1906142f7565b60405180910390fd5b81600a8190555060019050919050565b600f5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b600a5481565b6019602052805f5260405f205f915054906101000a900460ff1681565b5f611eae612172565b73ffffffffffffffffffffffffffffffffffffffff16611ecc611447565b73ffffffffffffffffffffffffffffffffffffffff1614611f22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1990613d6d565b60405180910390fd5b5f600e5f6101000a81548160ff0219169083151502179055506001905090565b611f4a612172565b73ffffffffffffffffffffffffffffffffffffffff16611f68611447565b73ffffffffffffffffffffffffffffffffffffffff1614611fbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb590613d6d565b60405180910390fd5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f455cf943964d06e77e44126ecca5a66b2c9721f4576a31f8693127282c55700f60405160405180910390a38060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612084612172565b73ffffffffffffffffffffffffffffffffffffffff166120a2611447565b73ffffffffffffffffffffffffffffffffffffffff16146120f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ef90613d6d565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612166576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215d90614385565b60405180910390fd5b61216f81613040565b50565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036121e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121de90614413565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612255576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224c906144a1565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161232f9190613a76565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036123aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a19061452f565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612418576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240f906145bd565b60405180910390fd5b60175f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156124a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249990614625565b60405180910390fd5b60175f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161561252c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125239061468d565b60405180910390fd5b5f81036125435761253e83835f6133d4565b61303b565b600c5f9054906101000a900460ff1615612beb5761255f611447565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156125cd575061259d611447565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561260557505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561263f575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156126585750600660149054906101000a900460ff16155b15612bea57600c60019054906101000a900460ff1661274c5760185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168061270c575060185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b61274b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612742906146f5565b60405180910390fd5b5b600e5f9054906101000a900460ff161561291057612768611447565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156127ef57507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612848575060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561290f5743600d5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054106128cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128c3906147a9565b60405180910390fd5b43600d5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b5b601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156129ad575060195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612a54576009548111156129f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ee90614837565b60405180910390fd5b600b54612a038361121e565b82612a0e9190613fda565b1115612a4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a469061489f565b60405180910390fd5b612be9565b601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612af1575060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612b4057600954811115612b3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b329061492d565b60405180910390fd5b612be8565b60195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16612be757600b54612b9a8361121e565b82612ba59190613fda565b1115612be6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bdd9061489f565b60405180910390fd5b5b5b5b5b5b5f612bf53061121e565b90505f600a548210159050808015612c195750600c60029054906101000a900460ff165b8015612c325750600660149054906101000a900460ff16155b8015612c855750601a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612cd8575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612d2b575060185f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612d6e576001600660146101000a81548160ff021916908315150217905550612d53613649565b5f600660146101000a81548160ff0219169083151502179055505b5f600660149054906101000a900460ff1615905060185f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612e1d575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612e26575f90505b5f811561302b57601a5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612e8457505f601254115b15612f1c57612eb16064612ea36012548861381890919063ffffffff16565b61382d90919063ffffffff16565b905060125460145482612ec49190613db8565b612ece9190613e26565b60165f828254612ede9190613fda565b9250508190555060125460135482612ef69190613db8565b612f009190613e26565b60155f828254612f109190613fda565b92505081905550613008565b601a5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612f7357505f600f54115b1561300757612fa06064612f92600f548861381890919063ffffffff16565b61382d90919063ffffffff16565b9050600f5460115482612fb39190613db8565b612fbd9190613e26565b60165f828254612fcd9190613fda565b92505081905550600f5460105482612fe59190613db8565b612fef9190613e26565b60155f828254612fff9190613fda565b925050819055505b5b5f81111561301c5761301b8730836133d4565b5b8085613028919061494b565b94505b6130368787876133d4565b505050505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f600267ffffffffffffffff8111156131bd576131bc61497e565b5b6040519080825280602002602001820160405280156131eb5781602001602082028036833780820191505090505b50905030815f81518110613202576132016149ab565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156132a5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906132c991906149ec565b816001815181106132dd576132dc6149ab565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613342307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612179565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016133a3959493929190614b07565b5f604051808303815f87803b1580156133ba575f80fd5b505af11580156133cc573d5f803e3d5ffd5b505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613442576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134399061452f565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036134b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134a7906145bd565b60405180910390fd5b6134bb838383613842565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101561353e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161353590614bcf565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546135cc9190613fda565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516136309190613a76565b60405180910390a3613643848484613847565b50505050565b5f6136533061121e565b90505f6016546015546136669190613fda565b90505f80830361367857505050613816565b6014600a546136879190613db8565b8311156136a0576014600a5461369d9190613db8565b92505b5f4790506136ad846131a1565b5f6136c1824761384c90919063ffffffff16565b90505f6136eb856136dd6016548561381890919063ffffffff16565b61382d90919063ffffffff16565b90505f6015819055505f60168190555060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168160405161374090614c1a565b5f6040518083038185875af1925050503d805f811461377a576040519150601f19603f3d011682016040523d82523d5f602084013e61377f565b606091505b50508094505060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516137ca90614c1a565b5f6040518083038185875af1925050503d805f8114613804576040519150601f19603f3d011682016040523d82523d5f602084013e613809565b606091505b5050809450505050505050505b565b5f81836138259190613db8565b905092915050565b5f818361383a9190613e26565b905092915050565b505050565b505050565b5f8183613859919061494b565b905092915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f6138a382613861565b6138ad818561386b565b93506138bd81856020860161387b565b6138c681613889565b840191505092915050565b5f6020820190508181035f8301526138e98184613899565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61391e826138f5565b9050919050565b61392e81613914565b8114613938575f80fd5b50565b5f8135905061394981613925565b92915050565b5f819050919050565b6139618161394f565b811461396b575f80fd5b50565b5f8135905061397c81613958565b92915050565b5f8060408385031215613998576139976138f1565b5b5f6139a58582860161393b565b92505060206139b68582860161396e565b9150509250929050565b5f8115159050919050565b6139d4816139c0565b82525050565b5f6020820190506139ed5f8301846139cb565b92915050565b5f819050919050565b5f613a16613a11613a0c846138f5565b6139f3565b6138f5565b9050919050565b5f613a27826139fc565b9050919050565b5f613a3882613a1d565b9050919050565b613a4881613a2e565b82525050565b5f602082019050613a615f830184613a3f565b92915050565b613a708161394f565b82525050565b5f602082019050613a895f830184613a67565b92915050565b5f60208284031215613aa457613aa36138f1565b5b5f613ab18482850161396e565b91505092915050565b5f805f60608486031215613ad157613ad06138f1565b5b5f613ade8682870161393b565b9350506020613aef8682870161393b565b9250506040613b008682870161396e565b9150509250925092565b613b1381613914565b82525050565b5f602082019050613b2c5f830184613b0a565b92915050565b5f60ff82169050919050565b613b4781613b32565b82525050565b5f602082019050613b605f830184613b3e565b92915050565b5f60208284031215613b7b57613b7a6138f1565b5b5f613b888482850161393b565b91505092915050565b613b9a816139c0565b8114613ba4575f80fd5b50565b5f81359050613bb581613b91565b92915050565b5f8060408385031215613bd157613bd06138f1565b5b5f613bde8582860161393b565b9250506020613bef85828601613ba7565b9150509250929050565b5f60208284031215613c0e57613c0d6138f1565b5b5f613c1b84828501613ba7565b91505092915050565b5f805f8060808587031215613c3c57613c3b6138f1565b5b5f613c498782880161396e565b9450506020613c5a8782880161396e565b9350506040613c6b8782880161396e565b9250506060613c7c8782880161396e565b91505092959194509250565b5f8060408385031215613c9e57613c9d6138f1565b5b5f613cab8582860161393b565b9250506020613cbc8582860161393b565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613d0a57607f821691505b602082108103613d1d57613d1c613cc6565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613d5760208361386b565b9150613d6282613d23565b602082019050919050565b5f6020820190508181035f830152613d8481613d4b565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613dc28261394f565b9150613dcd8361394f565b9250828202613ddb8161394f565b91508282048414831517613df257613df1613d8b565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613e308261394f565b9150613e3b8361394f565b925082613e4b57613e4a613df9565b5b828204905092915050565b7f43616e6e6f7420736574206d61785478206c6f776572207468616e20302e31255f82015250565b5f613e8a60208361386b565b9150613e9582613e56565b602082019050919050565b5f6020820190508181035f830152613eb781613e7e565b9050919050565b7f43616e6e6f7420736574206d617857616c6c657473206c6f776572207468616e5f8201527f20302e3525000000000000000000000000000000000000000000000000000000602082015250565b5f613f1860258361386b565b9150613f2382613ebe565b604082019050919050565b5f6020820190508181035f830152613f4581613f0c565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f613fa660288361386b565b9150613fb182613f4c565b604082019050919050565b5f6020820190508181035f830152613fd381613f9a565b9050919050565b5f613fe48261394f565b9150613fef8361394f565b925082820190508082111561400757614006613d8b565b5b92915050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f61406760398361386b565b91506140728261400d565b604082019050919050565b5f6020820190508181035f8301526140948161405b565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f6140f560258361386b565b91506141008261409b565b604082019050919050565b5f6020820190508181035f830152614122816140e9565b9050919050565b7f57726f6e6720616d6f756e7400000000000000000000000000000000000000005f82015250565b5f61415d600c8361386b565b915061416882614129565b602082019050919050565b5f6020820190508181035f83015261418a81614151565b9050919050565b7f4d757374206b656570206665657320617420373525206f72206c6573730000005f82015250565b5f6141c5601d8361386b565b91506141d082614191565b602082019050919050565b5f6020820190508181035f8301526141f2816141b9565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b5f61425360358361386b565b915061425e826141f9565b604082019050919050565b5f6020820190508181035f83015261428081614247565b9050919050565b7f5377617020616d6f756e742063616e6e6f7420626520686967686572207468615f8201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b5f6142e160348361386b565b91506142ec82614287565b604082019050919050565b5f6020820190508181035f83015261430e816142d5565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f61436f60268361386b565b915061437a82614315565b604082019050919050565b5f6020820190508181035f83015261439c81614363565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6143fd60248361386b565b9150614408826143a3565b604082019050919050565b5f6020820190508181035f83015261442a816143f1565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f61448b60228361386b565b915061449682614431565b604082019050919050565b5f6020820190508181035f8301526144b88161447f565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f61451960258361386b565b9150614524826144bf565b604082019050919050565b5f6020820190508181035f8301526145468161450d565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6145a760238361386b565b91506145b28261454d565b604082019050919050565b5f6020820190508181035f8301526145d48161459b565b9050919050565b7f5b66726f6d5d20626c61636b206c6973740000000000000000000000000000005f82015250565b5f61460f60118361386b565b915061461a826145db565b602082019050919050565b5f6020820190508181035f83015261463c81614603565b9050919050565b7f5b746f5d20626c61636b206c69737400000000000000000000000000000000005f82015250565b5f614677600f8361386b565b915061468282614643565b602082019050919050565b5f6020820190508181035f8301526146a48161466b565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f6146df60168361386b565b91506146ea826146ab565b602082019050919050565b5f6020820190508181035f83015261470c816146d3565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c5f8201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b5f61479360498361386b565b915061479e82614713565b606082019050919050565b5f6020820190508181035f8301526147c081614787565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d617854782e0000000000000000000000000000000000000000000000000000602082015250565b5f61482160268361386b565b915061482c826147c7565b604082019050919050565b5f6020820190508181035f83015261484e81614815565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f61488960138361386b565b915061489482614855565b602082019050919050565b5f6020820190508181035f8301526148b68161487d565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d617854782e00000000000000000000000000000000000000000000000000602082015250565b5f61491760278361386b565b9150614922826148bd565b604082019050919050565b5f6020820190508181035f8301526149448161490b565b9050919050565b5f6149558261394f565b91506149608361394f565b925082820390508181111561497857614977613d8b565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f815190506149e681613925565b92915050565b5f60208284031215614a0157614a006138f1565b5b5f614a0e848285016149d8565b91505092915050565b5f819050919050565b5f614a3a614a35614a3084614a17565b6139f3565b61394f565b9050919050565b614a4a81614a20565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b614a8281613914565b82525050565b5f614a938383614a79565b60208301905092915050565b5f602082019050919050565b5f614ab582614a50565b614abf8185614a5a565b9350614aca83614a6a565b805f5b83811015614afa578151614ae18882614a88565b9750614aec83614a9f565b925050600181019050614acd565b5085935050505092915050565b5f60a082019050614b1a5f830188613a67565b614b276020830187614a41565b8181036040830152614b398186614aab565b9050614b486060830185613b0a565b614b556080830184613a67565b9695505050505050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f614bb960268361386b565b9150614bc482614b5f565b604082019050919050565b5f6020820190508181035f830152614be681614bad565b9050919050565b5f81905092915050565b50565b5f614c055f83614bed565b9150614c1082614bf7565b5f82019050919050565b5f614c2482614bfa565b915081905091905056fea264697066735822122036f62398fffc89d3f5ea93fba56baa9ebf2afee7e5dee018abf621a66f74b45464736f6c634300081a0033

Deployed Bytecode Sourcemap

15547:12544:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3244:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4158:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15625:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3565:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19864:245;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20117:259;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4335:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15718:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15947:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15846;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3464:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4835:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15683:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15981:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22317:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16487:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20384:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16380:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16061:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3681:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1366:103;;;;;;;;;;;;;:::i;:::-;;15880:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19087:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16310:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18967:112;;;;;;;;;;;;;:::i;:::-;;1143:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16415:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20535:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3352:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21431:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16347:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16525:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16453:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5058:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15810:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3816:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16729:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26444:222;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22148:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16021:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21241:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20643:590;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16227:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19359:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16276:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3999:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15907:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16672:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19216:135;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21939:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1477;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3244:100;3298:13;3331:5;3324:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3244:100;:::o;4158:169::-;4241:4;4258:39;4267:12;:10;:12::i;:::-;4281:7;4290:6;4258:8;:39::i;:::-;4315:4;4308:11;;4158:169;;;;:::o;15625:51::-;;;:::o;3565:108::-;3626:7;3653:12;;3646:19;;3565:108;:::o;19864:245::-;1289:12;:10;:12::i;:::-;1278:23;;:7;:5;:7::i;:::-;:23;;;1270:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20001:4:::1;19993;19988:1;19972:13;:11;:13::i;:::-;:17;;;;:::i;:::-;19971:26;;;;:::i;:::-;19970:35;;;;:::i;:::-;19960:6;:45;;19938:127;;;;;;;;;;;;:::i;:::-;;;;;;;;;20094:6;20084;:17;;;;:::i;:::-;20076:5;:25;;;;19864:245:::0;:::o;20117:259::-;1289:12;:10;:12::i;:::-;1278:23;;:7;:5;:7::i;:::-;:23;;;1270:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20258:4:::1;20250;20245:1;20229:13;:11;:13::i;:::-;:17;;;;:::i;:::-;20228:26;;;;:::i;:::-;20227:35;;;;:::i;:::-;20217:6;:45;;20195:132;;;;;;;;;;;;:::i;:::-;;;;;;;;;20361:6;20351;:17;;;;:::i;:::-;20338:10;:30;;;;20117:259:::0;:::o;4335:492::-;4475:4;4492:36;4502:6;4510:9;4521:6;4492:9;:36::i;:::-;4541:24;4568:11;:19;4580:6;4568:19;;;;;;;;;;;;;;;:33;4588:12;:10;:12::i;:::-;4568:33;;;;;;;;;;;;;;;;4541:60;;4640:6;4620:16;:26;;4612:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;4727:57;4736:6;4744:12;:10;:12::i;:::-;4777:6;4758:16;:25;4727:8;:57::i;:::-;4815:4;4808:11;;;4335:492;;;;;:::o;15718:53::-;15764:6;15718:53;:::o;15947:25::-;;;;:::o;15846:::-;;;;;;;;;;;;;:::o;3464:93::-;3522:5;3547:2;3540:9;;3464:93;:::o;4835:215::-;4923:4;4940:80;4949:12;:10;:12::i;:::-;4963:7;5009:10;4972:11;:25;4984:12;:10;:12::i;:::-;4972:25;;;;;;;;;;;;;;;:34;4998:7;4972:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;4940:8;:80::i;:::-;5038:4;5031:11;;4835:215;;;;:::o;15683:28::-;;;;;;;;;;;;;:::o;15981:33::-;;;;;;;;;;;;;:::o;22317:126::-;22383:4;22407:19;:28;22427:7;22407:28;;;;;;;;;;;;;;;;;;;;;;;;;22400:35;;22317:126;;;:::o;16487:31::-;;;;:::o;20384:143::-;1289:12;:10;:12::i;:::-;1278:23;;:7;:5;:7::i;:::-;:23;;;1270:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20515:4:::1;20488:16;:24;20505:6;20488:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;20384:143:::0;;:::o;16380:28::-;;;;:::o;16061:31::-;;;;;;;;;;;;;:::o;3681:127::-;3755:7;3782:9;:18;3792:7;3782:18;;;;;;;;;;;;;;;;3775:25;;3681:127;;;:::o;1366:103::-;1289:12;:10;:12::i;:::-;1278:23;;:7;:5;:7::i;:::-;:23;;;1270:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1431:30:::1;1458:1;1431:18;:30::i;:::-;1366:103::o:0;15880:20::-;;;;:::o;19087:121::-;19139:4;1289:12;:10;:12::i;:::-;1278:23;;:7;:5;:7::i;:::-;:23;;;1270:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19173:5:::1;19156:14;;:22;;;;;;;;;;;;;;;;;;19196:4;19189:11;;19087:121:::0;:::o;16310:30::-;;;;:::o;18967:112::-;1289:12;:10;:12::i;:::-;1278:23;;:7;:5;:7::i;:::-;:23;;;1270:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19038:4:::1;19022:13;;:20;;;;;;;;;;;;;;;;;;19067:4;19053:11;;:18;;;;;;;;;;;;;;;;;;18967:112::o:0;1143:87::-;1189:7;1216:6;;;;;;;;;;;1209:13;;1143:87;:::o;16415:31::-;;;;:::o;20535:100::-;1289:12;:10;:12::i;:::-;1278:23;;:7;:5;:7::i;:::-;:23;;;1270:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20620:7:::1;20606:11;;:21;;;;;;;;;;;;;;;;;;20535:100:::0;:::o;3352:104::-;3408:13;3441:7;3434:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3352:104;:::o;21431:304::-;1289:12;:10;:12::i;:::-;1278:23;;:7;:5;:7::i;:::-;:23;;;1270:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21575:13:::1;;;;;;;;;;;21567:21;;:4;:21;;::::0;21545:128:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;21686:41;21715:4;21721:5;21686:28;:41::i;:::-;21431:304:::0;;:::o;16347:24::-;;;;:::o;16525:27::-;;;;:::o;16453:25::-;;;;:::o;5058:413::-;5151:4;5168:24;5195:11;:25;5207:12;:10;:12::i;:::-;5195:25;;;;;;;;;;;;;;;:34;5221:7;5195:34;;;;;;;;;;;;;;;;5168:61;;5268:15;5248:16;:35;;5240:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;5361:67;5370:12;:10;:12::i;:::-;5384:7;5412:15;5393:16;:34;5361:8;:67::i;:::-;5459:4;5452:11;;;5058:413;;;;:::o;15810:29::-;;;;;;;;;;;;;:::o;3816:175::-;3902:4;3919:42;3929:12;:10;:12::i;:::-;3943:9;3954:6;3919:9;:42::i;:::-;3979:4;3972:11;;3816:175;;;;:::o;16729:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;26444:222::-;26524:14;;;;;;;;;;;26508:30;;:12;:10;:12::i;:::-;:30;;;26500:39;;;;;;26568:24;26586:4;26568:9;:24::i;:::-;26558:6;:34;;:48;;;;;26605:1;26596:6;:10;26558:48;26550:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26634:24;26651:6;26634:16;:24::i;:::-;26444:222;:::o;22148:161::-;1289:12;:10;:12::i;:::-;1278:23;;:7;:5;:7::i;:::-;:23;;;1270:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22257:10:::1;;;;;;;;;;;22228:40;;22246:9;22228:40;;;;;;;;;;;;22292:9;22279:10;;:22;;;;;;;;;;;;;;;;;;22148:161:::0;:::o;16021:33::-;;;;;;;;;;;;;:::o;21241:182::-;1289:12;:10;:12::i;:::-;1278:23;;:7;:5;:7::i;:::-;:23;;;1270:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21357:8:::1;21326:19;:28;21346:7;21326:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;21397:7;21381:34;;;21406:8;21381:34;;;;;;:::i;:::-;;;;;;;;21241:182:::0;;:::o;20643:590::-;1289:12;:10;:12::i;:::-;1278:23;;:7;:5;:7::i;:::-;:23;;;1270:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20842:16:::1;20824:15;:34;;;;20881:10;20869:9;:22;;;;20935:9;;20917:15;;:27;;;;:::i;:::-;20902:12;:42;;;;20974:17;20955:16;:36;;;;21015:11;21002:10;:24;;;;21072:10;;21053:16;;:29;;;;:::i;:::-;21037:13;:45;;;;21117:2;21101:12;;:18;;21093:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;21189:2;21172:13;;:19;;21164:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;20643:590:::0;;;;:::o;16227:40::-;;;;;;;;;;;;;:::o;19359:497::-;19467:4;1289:12;:10;:12::i;:::-;1278:23;;:7;:5;:7::i;:::-;:23;;;1270:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19546:6:::1;19541:1;19525:13;:11;:13::i;:::-;:17;;;;:::i;:::-;19524:28;;;;:::i;:::-;19511:9;:41;;19489:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;19701:4;19696:1;19680:13;:11;:13::i;:::-;:17;;;;:::i;:::-;19679:26;;;;:::i;:::-;19666:9;:39;;19644:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;19817:9;19796:18;:30;;;;19844:4;19837:11;;19359:497:::0;;;:::o;16276:27::-;;;;:::o;3999:151::-;4088:7;4115:11;:18;4127:5;4115:18;;;;;;;;;;;;;;;:27;4134:7;4115:27;;;;;;;;;;;;;;;;4108:34;;3999:151;;;;:::o;15907:33::-;;;;:::o;16672:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;19216:135::-;19276:4;1289:12;:10;:12::i;:::-;1278:23;;:7;:5;:7::i;:::-;:23;;;1270:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19316:5:::1;19293:20;;:28;;;;;;;;;;;;;;;;;;19339:4;19332:11;;19216:135:::0;:::o;21939:201::-;1289:12;:10;:12::i;:::-;1278:23;;:7;:5;:7::i;:::-;:23;;;1270:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22072:14:::1;;;;;;;;;;;22031:56;;22053:17;22031:56;;;;;;;;;;;;22115:17;22098:14;;:34;;;;;;;;;;;;;;;;;;21939:201:::0;:::o;1477:::-;1289:12;:10;:12::i;:::-;1278:23;;:7;:5;:7::i;:::-;:23;;;1270:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1586:1:::1;1566:22;;:8;:22;;::::0;1558:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;1642:28;1661:8;1642:18;:28::i;:::-;1477:201:::0;:::o;689:98::-;742:7;769:10;762:17;;689:98;:::o;7226:380::-;7379:1;7362:19;;:5;:19;;;7354:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7460:1;7441:21;;:7;:21;;;7433:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7544:6;7514:11;:18;7526:5;7514:18;;;;;;;;;;;;;;;:27;7533:7;7514:27;;;;;;;;;;;;;;;:36;;;;7582:7;7566:32;;7575:5;7566:32;;;7591:6;7566:32;;;;;;:::i;:::-;;;;;;;;7226:380;;;:::o;22501:3820::-;22649:1;22633:18;;:4;:18;;;22625:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22726:1;22712:16;;:2;:16;;;22704:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;22788:12;:18;22801:4;22788:18;;;;;;;;;;;;;;;;;;;;;;;;;22787:19;22779:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;22848:12;:16;22861:2;22848:16;;;;;;;;;;;;;;;;;;;;;;;;;22847:17;22839:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;22911:1;22901:6;:11;22897:93;;22929:28;22945:4;22951:2;22955:1;22929:15;:28::i;:::-;22972:7;;22897:93;23006:14;;;;;;;;;;;23002:1666;;;23049:7;:5;:7::i;:::-;23041:15;;:4;:15;;;;:49;;;;;23083:7;:5;:7::i;:::-;23077:13;;:2;:13;;;;23041:49;:86;;;;;23125:1;23111:16;;:2;:16;;;;23041:86;:128;;;;;23162:6;23148:21;;:2;:21;;;;23041:128;:158;;;;;23191:8;;;;;;;;;;;23190:9;23041:158;23037:1620;;;23225:13;;;;;;;;;;;23220:150;;23271:19;:25;23291:4;23271:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;23300:19;:23;23320:2;23300:23;;;;;;;;;;;;;;;;;;;;;;;;;23271:52;23263:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;23220:150;23526:20;;;;;;;;;;;23522:425;;;23581:7;:5;:7::i;:::-;23575:13;;:2;:13;;;;:47;;;;;23606:15;23592:30;;:2;:30;;;;23575:47;:79;;;;;23640:13;;;;;;;;;;;23626:28;;:2;:28;;;;23575:79;23571:357;;;23733:12;23691:28;:39;23720:9;23691:39;;;;;;;;;;;;;;;;:54;23683:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;23892:12;23850:28;:39;23879:9;23850:39;;;;;;;;;;;;;;;:54;;;;23571:357;23522:425;23999:25;:31;24025:4;23999:31;;;;;;;;;;;;;;;;;;;;;;;;;:56;;;;;24035:16;:20;24052:2;24035:20;;;;;;;;;;;;;;;;;;;;;;;;;24034:21;23999:56;23995:647;;;24098:5;;24088:6;:15;;24080:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;24203:10;;24186:13;24196:2;24186:9;:13::i;:::-;24177:6;:22;;;;:::i;:::-;:36;;24169:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23995:647;;;24313:25;:29;24339:2;24313:29;;;;;;;;;;;;;;;;;;;;;;;;;:56;;;;;24347:16;:22;24364:4;24347:22;;;;;;;;;;;;;;;;;;;;;;;;;24346:23;24313:56;24309:333;;;24412:5;;24402:6;:15;;24394:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24309:333;;;24509:16;:20;24526:2;24509:20;;;;;;;;;;;;;;;;;;;;;;;;;24504:138;;24588:10;;24571:13;24581:2;24571:9;:13::i;:::-;24562:6;:22;;;;:::i;:::-;:36;;24554:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24504:138;24309:333;23995:647;23037:1620;23002:1666;24680:28;24711:24;24729:4;24711:9;:24::i;:::-;24680:55;;24746:12;24785:18;;24761:20;:42;;24746:57;;24820:7;:35;;;;;24844:11;;;;;;;;;;;24820:35;:61;;;;;24873:8;;;;;;;;;;;24872:9;24820:61;:110;;;;;24899:25;:31;24925:4;24899:31;;;;;;;;;;;;;;;;;;;;;;;;;24898:32;24820:110;:153;;;;;24948:19;:25;24968:4;24948:25;;;;;;;;;;;;;;;;;;;;;;;;;24947:26;24820:153;:194;;;;;24991:19;:23;25011:2;24991:23;;;;;;;;;;;;;;;;;;;;;;;;;24990:24;24820:194;24816:302;;;25042:4;25031:8;;:15;;;;;;;;;;;;;;;;;;25063:10;:8;:10::i;:::-;25101:5;25090:8;;:16;;;;;;;;;;;;;;;;;;24816:302;25130:12;25146:8;;;;;;;;;;;25145:9;25130:24;;25256:19;:25;25276:4;25256:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;25285:19;:23;25305:2;25285:23;;;;;;;;;;;;;;;;;;;;;;;;;25256:52;25252:100;;;25335:5;25325:15;;25252:100;25364:12;25469:7;25465:803;;;25521:25;:29;25547:2;25521:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;25570:1;25554:13;;:17;25521:50;25517:602;;;25599:34;25629:3;25599:25;25610:13;;25599:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;25592:41;;25690:13;;25676:10;;25669:4;:17;;;;:::i;:::-;25668:35;;;;:::i;:::-;25652:12;;:51;;;;;;;:::i;:::-;;;;;;;;25770:13;;25750:16;;25743:4;:23;;;;:::i;:::-;25742:41;;;;:::i;:::-;25722:16;;:61;;;;;;;:::i;:::-;;;;;;;;25517:602;;;25845:25;:31;25871:4;25845:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;25895:1;25880:12;;:16;25845:51;25841:278;;;25924:33;25953:3;25924:24;25935:12;;25924:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;25917:40;;26013:12;;26000:9;;25993:4;:16;;;;:::i;:::-;25992:33;;;;:::i;:::-;25976:12;;:49;;;;;;;:::i;:::-;;;;;;;;26091:12;;26072:15;;26065:4;:22;;;;:::i;:::-;26064:39;;;;:::i;:::-;26044:16;;:59;;;;;;;:::i;:::-;;;;;;;;25841:278;25517:602;26146:1;26139:4;:8;26135:91;;;26168:42;26184:4;26198;26205;26168:15;:42::i;:::-;26135:91;26252:4;26242:14;;;;;:::i;:::-;;;25465:803;26280:33;26296:4;26302:2;26306:6;26280:15;:33::i;:::-;22614:3707;;;;22501:3820;;;;:::o;1686:191::-;1760:16;1779:6;;;;;;;;;;;1760:25;;1805:8;1796:6;;:17;;;;;;;;;;;;;;;;;;1860:8;1829:40;;1850:8;1829:40;;;;;;;;;;;;1749:128;1686:191;:::o;21743:188::-;21860:5;21826:25;:31;21852:4;21826:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;21917:5;21883:40;;21911:4;21883:40;;;;;;;;;;;;21743:188;;:::o;26675:529::-;26741:21;26779:1;26765:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26741:40;;26810:4;26792;26797:1;26792:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;26836:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26826:4;26831:1;26826:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;26871:62;26888:4;26903:15;26921:11;26871:8;:62::i;:::-;26972:15;:66;;;27053:11;27079:1;27123:4;27150;27170:15;26972:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26730:474;26675:529;:::o;5479:733::-;5637:1;5619:20;;:6;:20;;;5611:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;5721:1;5700:23;;:9;:23;;;5692:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;5776:47;5797:6;5805:9;5816:6;5776:20;:47::i;:::-;5836:21;5860:9;:17;5870:6;5860:17;;;;;;;;;;;;;;;;5836:41;;5913:6;5896:13;:23;;5888:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;6034:6;6018:13;:22;5998:9;:17;6008:6;5998:17;;;;;;;;;;;;;;;:42;;;;6086:6;6062:9;:20;6072:9;6062:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;6127:9;6110:35;;6119:6;6110:35;;;6138:6;6110:35;;;;;;:::i;:::-;;;;;;;;6158:46;6178:6;6186:9;6197:6;6158:19;:46::i;:::-;5600:612;5479:733;;;:::o;27212:876::-;27251:23;27277:24;27295:4;27277:9;:24::i;:::-;27251:50;;27312:25;27359:12;;27340:16;;:31;;;;:::i;:::-;27312:59;;27382:12;27430:1;27411:15;:20;27407:59;;27448:7;;;;;27407:59;27521:2;27500:18;;:23;;;;:::i;:::-;27482:15;:41;27478:115;;;27579:2;27558:18;;:23;;;;:::i;:::-;27540:41;;27478:115;27605:25;27633:21;27605:49;;27665:33;27682:15;27665:16;:33::i;:::-;27711:18;27732:44;27758:17;27732:21;:25;;:44;;;;:::i;:::-;27711:65;;27787:17;27807:51;27840:17;27807:28;27822:12;;27807:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;27787:71;;27890:1;27871:16;:20;;;;27917:1;27902:12;:16;;;;27953:10;;;;;;;;;;;27945:24;;27977:9;27945:46;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27931:60;;;;;28024:14;;;;;;;;;;;28016:28;;28053:21;28016:64;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28002:78;;;;;27240:848;;;;;;27212:876;:::o;9232:98::-;9290:7;9321:1;9317;:5;;;;:::i;:::-;9310:12;;9232:98;;;;:::o;9338:::-;9396:7;9427:1;9423;:5;;;;:::i;:::-;9416:12;;9338:98;;;;:::o;7614:125::-;;;;:::o;7747:124::-;;;;:::o;9126:98::-;9184:7;9215:1;9211;:5;;;;:::i;:::-;9204:12;;9126:98;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:139::-;376:6;371:3;366;360:23;417:1;408:6;403:3;399:16;392:27;287:139;;;:::o;432:102::-;473:6;524:2;520:7;515:2;508:5;504:14;500:28;490:38;;432:102;;;:::o;540:377::-;628:3;656:39;689:5;656:39;:::i;:::-;711:71;775:6;770:3;711:71;:::i;:::-;704:78;;791:65;849:6;844:3;837:4;830:5;826:16;791:65;:::i;:::-;881:29;903:6;881:29;:::i;:::-;876:3;872:39;865:46;;632:285;540:377;;;;:::o;923:313::-;1036:4;1074:2;1063:9;1059:18;1051:26;;1123:9;1117:4;1113:20;1109:1;1098:9;1094:17;1087:47;1151:78;1224:4;1215:6;1151:78;:::i;:::-;1143:86;;923:313;;;;:::o;1323:117::-;1432:1;1429;1422:12;1569:126;1606:7;1646:42;1639:5;1635:54;1624:65;;1569:126;;;:::o;1701:96::-;1738:7;1767:24;1785:5;1767:24;:::i;:::-;1756:35;;1701:96;;;:::o;1803:122::-;1876:24;1894:5;1876:24;:::i;:::-;1869:5;1866:35;1856:63;;1915:1;1912;1905:12;1856:63;1803:122;:::o;1931:139::-;1977:5;2015:6;2002:20;1993:29;;2031:33;2058:5;2031:33;:::i;:::-;1931:139;;;;:::o;2076:77::-;2113:7;2142:5;2131:16;;2076:77;;;:::o;2159:122::-;2232:24;2250:5;2232:24;:::i;:::-;2225:5;2222:35;2212:63;;2271:1;2268;2261:12;2212:63;2159:122;:::o;2287:139::-;2333:5;2371:6;2358:20;2349:29;;2387:33;2414:5;2387:33;:::i;:::-;2287:139;;;;:::o;2432:474::-;2500:6;2508;2557:2;2545:9;2536:7;2532:23;2528:32;2525:119;;;2563:79;;:::i;:::-;2525:119;2683:1;2708:53;2753:7;2744:6;2733:9;2729:22;2708:53;:::i;:::-;2698:63;;2654:117;2810:2;2836:53;2881:7;2872:6;2861:9;2857:22;2836:53;:::i;:::-;2826:63;;2781:118;2432:474;;;;;:::o;2912:90::-;2946:7;2989:5;2982:13;2975:21;2964:32;;2912:90;;;:::o;3008:109::-;3089:21;3104:5;3089:21;:::i;:::-;3084:3;3077:34;3008:109;;:::o;3123:210::-;3210:4;3248:2;3237:9;3233:18;3225:26;;3261:65;3323:1;3312:9;3308:17;3299:6;3261:65;:::i;:::-;3123:210;;;;:::o;3339:60::-;3367:3;3388:5;3381:12;;3339:60;;;:::o;3405:142::-;3455:9;3488:53;3506:34;3515:24;3533:5;3515:24;:::i;:::-;3506:34;:::i;:::-;3488:53;:::i;:::-;3475:66;;3405:142;;;:::o;3553:126::-;3603:9;3636:37;3667:5;3636:37;:::i;:::-;3623:50;;3553:126;;;:::o;3685:153::-;3762:9;3795:37;3826:5;3795:37;:::i;:::-;3782:50;;3685:153;;;:::o;3844:185::-;3958:64;4016:5;3958:64;:::i;:::-;3953:3;3946:77;3844:185;;:::o;4035:276::-;4155:4;4193:2;4182:9;4178:18;4170:26;;4206:98;4301:1;4290:9;4286:17;4277:6;4206:98;:::i;:::-;4035:276;;;;:::o;4317:118::-;4404:24;4422:5;4404:24;:::i;:::-;4399:3;4392:37;4317:118;;:::o;4441:222::-;4534:4;4572:2;4561:9;4557:18;4549:26;;4585:71;4653:1;4642:9;4638:17;4629:6;4585:71;:::i;:::-;4441:222;;;;:::o;4669:329::-;4728:6;4777:2;4765:9;4756:7;4752:23;4748:32;4745:119;;;4783:79;;:::i;:::-;4745:119;4903:1;4928:53;4973:7;4964:6;4953:9;4949:22;4928:53;:::i;:::-;4918:63;;4874:117;4669:329;;;;:::o;5004:619::-;5081:6;5089;5097;5146:2;5134:9;5125:7;5121:23;5117:32;5114:119;;;5152:79;;:::i;:::-;5114:119;5272:1;5297:53;5342:7;5333:6;5322:9;5318:22;5297:53;:::i;:::-;5287:63;;5243:117;5399:2;5425:53;5470:7;5461:6;5450:9;5446:22;5425:53;:::i;:::-;5415:63;;5370:118;5527:2;5553:53;5598:7;5589:6;5578:9;5574:22;5553:53;:::i;:::-;5543:63;;5498:118;5004:619;;;;;:::o;5629:118::-;5716:24;5734:5;5716:24;:::i;:::-;5711:3;5704:37;5629:118;;:::o;5753:222::-;5846:4;5884:2;5873:9;5869:18;5861:26;;5897:71;5965:1;5954:9;5950:17;5941:6;5897:71;:::i;:::-;5753:222;;;;:::o;5981:86::-;6016:7;6056:4;6049:5;6045:16;6034:27;;5981:86;;;:::o;6073:112::-;6156:22;6172:5;6156:22;:::i;:::-;6151:3;6144:35;6073:112;;:::o;6191:214::-;6280:4;6318:2;6307:9;6303:18;6295:26;;6331:67;6395:1;6384:9;6380:17;6371:6;6331:67;:::i;:::-;6191:214;;;;:::o;6411:329::-;6470:6;6519:2;6507:9;6498:7;6494:23;6490:32;6487:119;;;6525:79;;:::i;:::-;6487:119;6645:1;6670:53;6715:7;6706:6;6695:9;6691:22;6670:53;:::i;:::-;6660:63;;6616:117;6411:329;;;;:::o;6746:116::-;6816:21;6831:5;6816:21;:::i;:::-;6809:5;6806:32;6796:60;;6852:1;6849;6842:12;6796:60;6746:116;:::o;6868:133::-;6911:5;6949:6;6936:20;6927:29;;6965:30;6989:5;6965:30;:::i;:::-;6868:133;;;;:::o;7007:468::-;7072:6;7080;7129:2;7117:9;7108:7;7104:23;7100:32;7097:119;;;7135:79;;:::i;:::-;7097:119;7255:1;7280:53;7325:7;7316:6;7305:9;7301:22;7280:53;:::i;:::-;7270:63;;7226:117;7382:2;7408:50;7450:7;7441:6;7430:9;7426:22;7408:50;:::i;:::-;7398:60;;7353:115;7007:468;;;;;:::o;7481:323::-;7537:6;7586:2;7574:9;7565:7;7561:23;7557:32;7554:119;;;7592:79;;:::i;:::-;7554:119;7712:1;7737:50;7779:7;7770:6;7759:9;7755:22;7737:50;:::i;:::-;7727:60;;7683:114;7481:323;;;;:::o;7810:765::-;7896:6;7904;7912;7920;7969:3;7957:9;7948:7;7944:23;7940:33;7937:120;;;7976:79;;:::i;:::-;7937:120;8096:1;8121:53;8166:7;8157:6;8146:9;8142:22;8121:53;:::i;:::-;8111:63;;8067:117;8223:2;8249:53;8294:7;8285:6;8274:9;8270:22;8249:53;:::i;:::-;8239:63;;8194:118;8351:2;8377:53;8422:7;8413:6;8402:9;8398:22;8377:53;:::i;:::-;8367:63;;8322:118;8479:2;8505:53;8550:7;8541:6;8530:9;8526:22;8505:53;:::i;:::-;8495:63;;8450:118;7810:765;;;;;;;:::o;8581:474::-;8649:6;8657;8706:2;8694:9;8685:7;8681:23;8677:32;8674:119;;;8712:79;;:::i;:::-;8674:119;8832:1;8857:53;8902:7;8893:6;8882:9;8878:22;8857:53;:::i;:::-;8847:63;;8803:117;8959:2;8985:53;9030:7;9021:6;9010:9;9006:22;8985:53;:::i;:::-;8975:63;;8930:118;8581:474;;;;;:::o;9061:180::-;9109:77;9106:1;9099:88;9206:4;9203:1;9196:15;9230:4;9227:1;9220:15;9247:320;9291:6;9328:1;9322:4;9318:12;9308:22;;9375:1;9369:4;9365:12;9396:18;9386:81;;9452:4;9444:6;9440:17;9430:27;;9386:81;9514:2;9506:6;9503:14;9483:18;9480:38;9477:84;;9533:18;;:::i;:::-;9477:84;9298:269;9247:320;;;:::o;9573:182::-;9713:34;9709:1;9701:6;9697:14;9690:58;9573:182;:::o;9761:366::-;9903:3;9924:67;9988:2;9983:3;9924:67;:::i;:::-;9917:74;;10000:93;10089:3;10000:93;:::i;:::-;10118:2;10113:3;10109:12;10102:19;;9761:366;;;:::o;10133:419::-;10299:4;10337:2;10326:9;10322:18;10314:26;;10386:9;10380:4;10376:20;10372:1;10361:9;10357:17;10350:47;10414:131;10540:4;10414:131;:::i;:::-;10406:139;;10133:419;;;:::o;10558:180::-;10606:77;10603:1;10596:88;10703:4;10700:1;10693:15;10727:4;10724:1;10717:15;10744:410;10784:7;10807:20;10825:1;10807:20;:::i;:::-;10802:25;;10841:20;10859:1;10841:20;:::i;:::-;10836:25;;10896:1;10893;10889:9;10918:30;10936:11;10918:30;:::i;:::-;10907:41;;11097:1;11088:7;11084:15;11081:1;11078:22;11058:1;11051:9;11031:83;11008:139;;11127:18;;:::i;:::-;11008:139;10792:362;10744:410;;;;:::o;11160:180::-;11208:77;11205:1;11198:88;11305:4;11302:1;11295:15;11329:4;11326:1;11319:15;11346:185;11386:1;11403:20;11421:1;11403:20;:::i;:::-;11398:25;;11437:20;11455:1;11437:20;:::i;:::-;11432:25;;11476:1;11466:35;;11481:18;;:::i;:::-;11466:35;11523:1;11520;11516:9;11511:14;;11346:185;;;;:::o;11537:182::-;11677:34;11673:1;11665:6;11661:14;11654:58;11537:182;:::o;11725:366::-;11867:3;11888:67;11952:2;11947:3;11888:67;:::i;:::-;11881:74;;11964:93;12053:3;11964:93;:::i;:::-;12082:2;12077:3;12073:12;12066:19;;11725:366;;;:::o;12097:419::-;12263:4;12301:2;12290:9;12286:18;12278:26;;12350:9;12344:4;12340:20;12336:1;12325:9;12321:17;12314:47;12378:131;12504:4;12378:131;:::i;:::-;12370:139;;12097:419;;;:::o;12522:224::-;12662:34;12658:1;12650:6;12646:14;12639:58;12731:7;12726:2;12718:6;12714:15;12707:32;12522:224;:::o;12752:366::-;12894:3;12915:67;12979:2;12974:3;12915:67;:::i;:::-;12908:74;;12991:93;13080:3;12991:93;:::i;:::-;13109:2;13104:3;13100:12;13093:19;;12752:366;;;:::o;13124:419::-;13290:4;13328:2;13317:9;13313:18;13305:26;;13377:9;13371:4;13367:20;13363:1;13352:9;13348:17;13341:47;13405:131;13531:4;13405:131;:::i;:::-;13397:139;;13124:419;;;:::o;13549:227::-;13689:34;13685:1;13677:6;13673:14;13666:58;13758:10;13753:2;13745:6;13741:15;13734:35;13549:227;:::o;13782:366::-;13924:3;13945:67;14009:2;14004:3;13945:67;:::i;:::-;13938:74;;14021:93;14110:3;14021:93;:::i;:::-;14139:2;14134:3;14130:12;14123:19;;13782:366;;;:::o;14154:419::-;14320:4;14358:2;14347:9;14343:18;14335:26;;14407:9;14401:4;14397:20;14393:1;14382:9;14378:17;14371:47;14435:131;14561:4;14435:131;:::i;:::-;14427:139;;14154:419;;;:::o;14579:191::-;14619:3;14638:20;14656:1;14638:20;:::i;:::-;14633:25;;14672:20;14690:1;14672:20;:::i;:::-;14667:25;;14715:1;14712;14708:9;14701:16;;14736:3;14733:1;14730:10;14727:36;;;14743:18;;:::i;:::-;14727:36;14579:191;;;;:::o;14776:244::-;14916:34;14912:1;14904:6;14900:14;14893:58;14985:27;14980:2;14972:6;14968:15;14961:52;14776:244;:::o;15026:366::-;15168:3;15189:67;15253:2;15248:3;15189:67;:::i;:::-;15182:74;;15265:93;15354:3;15265:93;:::i;:::-;15383:2;15378:3;15374:12;15367:19;;15026:366;;;:::o;15398:419::-;15564:4;15602:2;15591:9;15587:18;15579:26;;15651:9;15645:4;15641:20;15637:1;15626:9;15622:17;15615:47;15679:131;15805:4;15679:131;:::i;:::-;15671:139;;15398:419;;;:::o;15823:224::-;15963:34;15959:1;15951:6;15947:14;15940:58;16032:7;16027:2;16019:6;16015:15;16008:32;15823:224;:::o;16053:366::-;16195:3;16216:67;16280:2;16275:3;16216:67;:::i;:::-;16209:74;;16292:93;16381:3;16292:93;:::i;:::-;16410:2;16405:3;16401:12;16394:19;;16053:366;;;:::o;16425:419::-;16591:4;16629:2;16618:9;16614:18;16606:26;;16678:9;16672:4;16668:20;16664:1;16653:9;16649:17;16642:47;16706:131;16832:4;16706:131;:::i;:::-;16698:139;;16425:419;;;:::o;16850:162::-;16990:14;16986:1;16978:6;16974:14;16967:38;16850:162;:::o;17018:366::-;17160:3;17181:67;17245:2;17240:3;17181:67;:::i;:::-;17174:74;;17257:93;17346:3;17257:93;:::i;:::-;17375:2;17370:3;17366:12;17359:19;;17018:366;;;:::o;17390:419::-;17556:4;17594:2;17583:9;17579:18;17571:26;;17643:9;17637:4;17633:20;17629:1;17618:9;17614:17;17607:47;17671:131;17797:4;17671:131;:::i;:::-;17663:139;;17390:419;;;:::o;17815:179::-;17955:31;17951:1;17943:6;17939:14;17932:55;17815:179;:::o;18000:366::-;18142:3;18163:67;18227:2;18222:3;18163:67;:::i;:::-;18156:74;;18239:93;18328:3;18239:93;:::i;:::-;18357:2;18352:3;18348:12;18341:19;;18000:366;;;:::o;18372:419::-;18538:4;18576:2;18565:9;18561:18;18553:26;;18625:9;18619:4;18615:20;18611:1;18600:9;18596:17;18589:47;18653:131;18779:4;18653:131;:::i;:::-;18645:139;;18372:419;;;:::o;18797:240::-;18937:34;18933:1;18925:6;18921:14;18914:58;19006:23;19001:2;18993:6;18989:15;18982:48;18797:240;:::o;19043:366::-;19185:3;19206:67;19270:2;19265:3;19206:67;:::i;:::-;19199:74;;19282:93;19371:3;19282:93;:::i;:::-;19400:2;19395:3;19391:12;19384:19;;19043:366;;;:::o;19415:419::-;19581:4;19619:2;19608:9;19604:18;19596:26;;19668:9;19662:4;19658:20;19654:1;19643:9;19639:17;19632:47;19696:131;19822:4;19696:131;:::i;:::-;19688:139;;19415:419;;;:::o;19840:239::-;19980:34;19976:1;19968:6;19964:14;19957:58;20049:22;20044:2;20036:6;20032:15;20025:47;19840:239;:::o;20085:366::-;20227:3;20248:67;20312:2;20307:3;20248:67;:::i;:::-;20241:74;;20324:93;20413:3;20324:93;:::i;:::-;20442:2;20437:3;20433:12;20426:19;;20085:366;;;:::o;20457:419::-;20623:4;20661:2;20650:9;20646:18;20638:26;;20710:9;20704:4;20700:20;20696:1;20685:9;20681:17;20674:47;20738:131;20864:4;20738:131;:::i;:::-;20730:139;;20457:419;;;:::o;20882:225::-;21022:34;21018:1;21010:6;21006:14;20999:58;21091:8;21086:2;21078:6;21074:15;21067:33;20882:225;:::o;21113:366::-;21255:3;21276:67;21340:2;21335:3;21276:67;:::i;:::-;21269:74;;21352:93;21441:3;21352:93;:::i;:::-;21470:2;21465:3;21461:12;21454:19;;21113:366;;;:::o;21485:419::-;21651:4;21689:2;21678:9;21674:18;21666:26;;21738:9;21732:4;21728:20;21724:1;21713:9;21709:17;21702:47;21766:131;21892:4;21766:131;:::i;:::-;21758:139;;21485:419;;;:::o;21910:223::-;22050:34;22046:1;22038:6;22034:14;22027:58;22119:6;22114:2;22106:6;22102:15;22095:31;21910:223;:::o;22139:366::-;22281:3;22302:67;22366:2;22361:3;22302:67;:::i;:::-;22295:74;;22378:93;22467:3;22378:93;:::i;:::-;22496:2;22491:3;22487:12;22480:19;;22139:366;;;:::o;22511:419::-;22677:4;22715:2;22704:9;22700:18;22692:26;;22764:9;22758:4;22754:20;22750:1;22739:9;22735:17;22728:47;22792:131;22918:4;22792:131;:::i;:::-;22784:139;;22511:419;;;:::o;22936:221::-;23076:34;23072:1;23064:6;23060:14;23053:58;23145:4;23140:2;23132:6;23128:15;23121:29;22936:221;:::o;23163:366::-;23305:3;23326:67;23390:2;23385:3;23326:67;:::i;:::-;23319:74;;23402:93;23491:3;23402:93;:::i;:::-;23520:2;23515:3;23511:12;23504:19;;23163:366;;;:::o;23535:419::-;23701:4;23739:2;23728:9;23724:18;23716:26;;23788:9;23782:4;23778:20;23774:1;23763:9;23759:17;23752:47;23816:131;23942:4;23816:131;:::i;:::-;23808:139;;23535:419;;;:::o;23960:224::-;24100:34;24096:1;24088:6;24084:14;24077:58;24169:7;24164:2;24156:6;24152:15;24145:32;23960:224;:::o;24190:366::-;24332:3;24353:67;24417:2;24412:3;24353:67;:::i;:::-;24346:74;;24429:93;24518:3;24429:93;:::i;:::-;24547:2;24542:3;24538:12;24531:19;;24190:366;;;:::o;24562:419::-;24728:4;24766:2;24755:9;24751:18;24743:26;;24815:9;24809:4;24805:20;24801:1;24790:9;24786:17;24779:47;24843:131;24969:4;24843:131;:::i;:::-;24835:139;;24562:419;;;:::o;24987:222::-;25127:34;25123:1;25115:6;25111:14;25104:58;25196:5;25191:2;25183:6;25179:15;25172:30;24987:222;:::o;25215:366::-;25357:3;25378:67;25442:2;25437:3;25378:67;:::i;:::-;25371:74;;25454:93;25543:3;25454:93;:::i;:::-;25572:2;25567:3;25563:12;25556:19;;25215:366;;;:::o;25587:419::-;25753:4;25791:2;25780:9;25776:18;25768:26;;25840:9;25834:4;25830:20;25826:1;25815:9;25811:17;25804:47;25868:131;25994:4;25868:131;:::i;:::-;25860:139;;25587:419;;;:::o;26012:167::-;26152:19;26148:1;26140:6;26136:14;26129:43;26012:167;:::o;26185:366::-;26327:3;26348:67;26412:2;26407:3;26348:67;:::i;:::-;26341:74;;26424:93;26513:3;26424:93;:::i;:::-;26542:2;26537:3;26533:12;26526:19;;26185:366;;;:::o;26557:419::-;26723:4;26761:2;26750:9;26746:18;26738:26;;26810:9;26804:4;26800:20;26796:1;26785:9;26781:17;26774:47;26838:131;26964:4;26838:131;:::i;:::-;26830:139;;26557:419;;;:::o;26982:165::-;27122:17;27118:1;27110:6;27106:14;27099:41;26982:165;:::o;27153:366::-;27295:3;27316:67;27380:2;27375:3;27316:67;:::i;:::-;27309:74;;27392:93;27481:3;27392:93;:::i;:::-;27510:2;27505:3;27501:12;27494:19;;27153:366;;;:::o;27525:419::-;27691:4;27729:2;27718:9;27714:18;27706:26;;27778:9;27772:4;27768:20;27764:1;27753:9;27749:17;27742:47;27806:131;27932:4;27806:131;:::i;:::-;27798:139;;27525:419;;;:::o;27950:172::-;28090:24;28086:1;28078:6;28074:14;28067:48;27950:172;:::o;28128:366::-;28270:3;28291:67;28355:2;28350:3;28291:67;:::i;:::-;28284:74;;28367:93;28456:3;28367:93;:::i;:::-;28485:2;28480:3;28476:12;28469:19;;28128:366;;;:::o;28500:419::-;28666:4;28704:2;28693:9;28689:18;28681:26;;28753:9;28747:4;28743:20;28739:1;28728:9;28724:17;28717:47;28781:131;28907:4;28781:131;:::i;:::-;28773:139;;28500:419;;;:::o;28925:297::-;29065:34;29061:1;29053:6;29049:14;29042:58;29134:34;29129:2;29121:6;29117:15;29110:59;29203:11;29198:2;29190:6;29186:15;29179:36;28925:297;:::o;29228:366::-;29370:3;29391:67;29455:2;29450:3;29391:67;:::i;:::-;29384:74;;29467:93;29556:3;29467:93;:::i;:::-;29585:2;29580:3;29576:12;29569:19;;29228:366;;;:::o;29600:419::-;29766:4;29804:2;29793:9;29789:18;29781:26;;29853:9;29847:4;29843:20;29839:1;29828:9;29824:17;29817:47;29881:131;30007:4;29881:131;:::i;:::-;29873:139;;29600:419;;;:::o;30025:225::-;30165:34;30161:1;30153:6;30149:14;30142:58;30234:8;30229:2;30221:6;30217:15;30210:33;30025:225;:::o;30256:366::-;30398:3;30419:67;30483:2;30478:3;30419:67;:::i;:::-;30412:74;;30495:93;30584:3;30495:93;:::i;:::-;30613:2;30608:3;30604:12;30597:19;;30256:366;;;:::o;30628:419::-;30794:4;30832:2;30821:9;30817:18;30809:26;;30881:9;30875:4;30871:20;30867:1;30856:9;30852:17;30845:47;30909:131;31035:4;30909:131;:::i;:::-;30901:139;;30628:419;;;:::o;31053:169::-;31193:21;31189:1;31181:6;31177:14;31170:45;31053:169;:::o;31228:366::-;31370:3;31391:67;31455:2;31450:3;31391:67;:::i;:::-;31384:74;;31467:93;31556:3;31467:93;:::i;:::-;31585:2;31580:3;31576:12;31569:19;;31228:366;;;:::o;31600:419::-;31766:4;31804:2;31793:9;31789:18;31781:26;;31853:9;31847:4;31843:20;31839:1;31828:9;31824:17;31817:47;31881:131;32007:4;31881:131;:::i;:::-;31873:139;;31600:419;;;:::o;32025:226::-;32165:34;32161:1;32153:6;32149:14;32142:58;32234:9;32229:2;32221:6;32217:15;32210:34;32025:226;:::o;32257:366::-;32399:3;32420:67;32484:2;32479:3;32420:67;:::i;:::-;32413:74;;32496:93;32585:3;32496:93;:::i;:::-;32614:2;32609:3;32605:12;32598:19;;32257:366;;;:::o;32629:419::-;32795:4;32833:2;32822:9;32818:18;32810:26;;32882:9;32876:4;32872:20;32868:1;32857:9;32853:17;32846:47;32910:131;33036:4;32910:131;:::i;:::-;32902:139;;32629:419;;;:::o;33054:194::-;33094:4;33114:20;33132:1;33114:20;:::i;:::-;33109:25;;33148:20;33166:1;33148:20;:::i;:::-;33143:25;;33192:1;33189;33185:9;33177:17;;33216:1;33210:4;33207:11;33204:37;;;33221:18;;:::i;:::-;33204:37;33054:194;;;;:::o;33254:180::-;33302:77;33299:1;33292:88;33399:4;33396:1;33389:15;33423:4;33420:1;33413:15;33440:180;33488:77;33485:1;33478:88;33585:4;33582:1;33575:15;33609:4;33606:1;33599:15;33626:143;33683:5;33714:6;33708:13;33699:22;;33730:33;33757:5;33730:33;:::i;:::-;33626:143;;;;:::o;33775:351::-;33845:6;33894:2;33882:9;33873:7;33869:23;33865:32;33862:119;;;33900:79;;:::i;:::-;33862:119;34020:1;34045:64;34101:7;34092:6;34081:9;34077:22;34045:64;:::i;:::-;34035:74;;33991:128;33775:351;;;;:::o;34132:85::-;34177:7;34206:5;34195:16;;34132:85;;;:::o;34223:158::-;34281:9;34314:61;34332:42;34341:32;34367:5;34341:32;:::i;:::-;34332:42;:::i;:::-;34314:61;:::i;:::-;34301:74;;34223:158;;;:::o;34387:147::-;34482:45;34521:5;34482:45;:::i;:::-;34477:3;34470:58;34387:147;;:::o;34540:114::-;34607:6;34641:5;34635:12;34625:22;;34540:114;;;:::o;34660:184::-;34759:11;34793:6;34788:3;34781:19;34833:4;34828:3;34824:14;34809:29;;34660:184;;;;:::o;34850:132::-;34917:4;34940:3;34932:11;;34970:4;34965:3;34961:14;34953:22;;34850:132;;;:::o;34988:108::-;35065:24;35083:5;35065:24;:::i;:::-;35060:3;35053:37;34988:108;;:::o;35102:179::-;35171:10;35192:46;35234:3;35226:6;35192:46;:::i;:::-;35270:4;35265:3;35261:14;35247:28;;35102:179;;;;:::o;35287:113::-;35357:4;35389;35384:3;35380:14;35372:22;;35287:113;;;:::o;35436:732::-;35555:3;35584:54;35632:5;35584:54;:::i;:::-;35654:86;35733:6;35728:3;35654:86;:::i;:::-;35647:93;;35764:56;35814:5;35764:56;:::i;:::-;35843:7;35874:1;35859:284;35884:6;35881:1;35878:13;35859:284;;;35960:6;35954:13;35987:63;36046:3;36031:13;35987:63;:::i;:::-;35980:70;;36073:60;36126:6;36073:60;:::i;:::-;36063:70;;35919:224;35906:1;35903;35899:9;35894:14;;35859:284;;;35863:14;36159:3;36152:10;;35560:608;;;35436:732;;;;:::o;36174:831::-;36437:4;36475:3;36464:9;36460:19;36452:27;;36489:71;36557:1;36546:9;36542:17;36533:6;36489:71;:::i;:::-;36570:80;36646:2;36635:9;36631:18;36622:6;36570:80;:::i;:::-;36697:9;36691:4;36687:20;36682:2;36671:9;36667:18;36660:48;36725:108;36828:4;36819:6;36725:108;:::i;:::-;36717:116;;36843:72;36911:2;36900:9;36896:18;36887:6;36843:72;:::i;:::-;36925:73;36993:3;36982:9;36978:19;36969:6;36925:73;:::i;:::-;36174:831;;;;;;;;:::o;37011:225::-;37151:34;37147:1;37139:6;37135:14;37128:58;37220:8;37215:2;37207:6;37203:15;37196:33;37011:225;:::o;37242:366::-;37384:3;37405:67;37469:2;37464:3;37405:67;:::i;:::-;37398:74;;37481:93;37570:3;37481:93;:::i;:::-;37599:2;37594:3;37590:12;37583:19;;37242:366;;;:::o;37614:419::-;37780:4;37818:2;37807:9;37803:18;37795:26;;37867:9;37861:4;37857:20;37853:1;37842:9;37838:17;37831:47;37895:131;38021:4;37895:131;:::i;:::-;37887:139;;37614:419;;;:::o;38039:147::-;38140:11;38177:3;38162:18;;38039:147;;;;:::o;38192:114::-;;:::o;38312:398::-;38471:3;38492:83;38573:1;38568:3;38492:83;:::i;:::-;38485:90;;38584:93;38673:3;38584:93;:::i;:::-;38702:1;38697:3;38693:11;38686:18;;38312:398;;;:::o;38716:379::-;38900:3;38922:147;39065:3;38922:147;:::i;:::-;38915:154;;39086:3;39079:10;;38716:379;;;:::o

Swarm Source

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