ETH Price: $3,265.37 (+2.49%)
 

Overview

Max Total Supply

100,000,000 ZKEX

Holders

1,283

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

zkExchange a next-generation trading platform redefining how users interact with centralized and decentralized finance. By combining zero-knowledge privacy, walletless swaps, and decentralization, zkExchange enables seamless trading across global liquidity pools.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
zkExchange

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 2025-01-08
*/

/** 
Website: https://zkexchange.org
Docs: https://docs.zkexchange.org
X: https://x.com/zkexchangeapp
TG: https://t.me/zk_exchange
**/

// 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 zkExchange 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 devWallet;

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

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

    constructor() ERC20("zkExchange", unicode"ZKEX") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);

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

        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        setExcludedFromMaxTX(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;

        marketerWallet = address(0x215690C5119F9e3e8887072Bd7c690e3e8FD9B20);
        devWallet = address(0x215690C5119F9e3e8887072Bd7c690e3e8FD9B20);

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

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

        _mint(msg.sender, totalSupply);
    }

    receive() external payable {}

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

    function setLimits(bool limit) external onlyOwner returns (bool) {
        limitsInEffect = limit;
        return true;
    }

    function pauseTransferDelays() 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 setMaxTxn(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 1) / 1000) / 1e18,
            "Cannot set maxTx lower than 0.1%"
        );
        maxTx = newNum * (10**18);
    }

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

    function setMarketingWallet(address newmarketerWallet) external onlyOwner {
        emit marketerWalletUpdated(newmarketerWallet, marketerWallet);
        marketerWallet = newmarketerWallet;
    }

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

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

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

    function blockMultipleAddresses(address[] memory bots_) public onlyOwner {
        for (uint256 i = 0; i < bots_.length; i++) {
            _isBlackList[bots_[i]] = true;
        }
    }

    function restrictAddress(address addr) external onlyOwner {
        _isBlackList[addr] = true;
    }

    function unblockAddress(address addr) external onlyOwner {
        _isBlackList[addr] = false;
    }

    function changeBuySellFee(
        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 70% or less");
        require(sellTotalFees <= 75, "Must keep fees at 70% 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 isExcludedFromFees(address account) public view returns (bool) {
        return _isExcludedFromFees[account];
    }

    event tagBot(address indexed bot);

    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(devWallet).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":"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":"devWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldevWalletallet","type":"address"}],"name":"marketerWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"bot","type":"address"}],"name":"tagBot","type":"event"},{"inputs":[],"name":"Launch","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"address[]","name":"bots_","type":"address[]"}],"name":"blockMultipleAddresses","outputs":[],"stateMutability":"nonpayable","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":[{"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":"changeBuySellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","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":"pauseTransferDelays","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"restrictAddress","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":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"setDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"setExcludedFromMaxTX","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"limit","type":"bool"}],"name":"setLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newmarketerWallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"setMaxTxn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"setMaxWalletSize","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":[{"internalType":"address","name":"addr","type":"address"}],"name":"unblockAddress","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":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526001600c5f6101000a81548160ff0219169083151502179055505f600c60016101000a81548160ff0219169083151502179055505f600c60026101000a81548160ff0219169083151502179055505f600e5f6101000a81548160ff021916908315150217905550348015610076575f80fd5b506040518060400160405280600a81526020017f7a6b45786368616e6765000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f5a4b45580000000000000000000000000000000000000000000000000000000081525081600390816100f29190610ca7565b5080600490816101029190610ca7565b50505061012161011661056260201b60201c565b61056960201b60201c565b5f737a250d5630b4cf539739df2c5dacb4c659f2488d905061014a81600161062c60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101c7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101eb9190610dd4565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610250573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102749190610dd4565b6040518363ffffffff1660e01b8152600401610291929190610e0e565b6020604051808303815f875af11580156102ad573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102d19190610dd4565b60065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061034260065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600161062c60201b60201c565b61037460065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600161070c60201b60201c565b5f600590505f600590505f805f6a52b7d2dcc80cd2e400000090506a01a784379d99db420000006009819055506a01a784379d99db42000000600b819055506127106003826103c39190610e62565b6103cd9190610ed0565b600a8190555073215690c5119f9e3e8887072bd7c690e3e8fd9b2060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073215690c5119f9e3e8887072bd7c690e3e8fd9b2060085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084601081905550826011819055506011546010546104999190610f00565b600f8190555083601381905550816014819055506014546013546104bd9190610f00565b6012819055506104e16104d46107aa60201b60201c565b60016107d260201b60201c565b6104f23060016107d260201b60201c565b61050561dead60016107d260201b60201c565b6105236105166107aa60201b60201c565b600161062c60201b60201c565b61053430600161062c60201b60201c565b61054761dead600161062c60201b60201c565b610557338261090060201b60201c565b50505050505061106e565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61063a61056260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1661065e6107aa60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146106b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ab90610f8d565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6107e061056260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166108046107aa60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161461085a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161085190610f8d565b60405180910390fd5b8060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516108f49190610fc5565b60405180910390a25050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361096e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096590611028565b60405180910390fd5b61097f5f8383610a6360201b60201c565b8060025f8282546109909190610f00565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546109e29190610f00565b925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610a469190611055565b60405180910390a3610a5f5f8383610a6860201b60201c565b5050565b505050565b505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680610ae857607f821691505b602082108103610afb57610afa610aa4565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302610b5d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610b22565b610b678683610b22565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f610bab610ba6610ba184610b7f565b610b88565b610b7f565b9050919050565b5f819050919050565b610bc483610b91565b610bd8610bd082610bb2565b848454610b2e565b825550505050565b5f90565b610bec610be0565b610bf7818484610bbb565b505050565b5b81811015610c1a57610c0f5f82610be4565b600181019050610bfd565b5050565b601f821115610c5f57610c3081610b01565b610c3984610b13565b81016020851015610c48578190505b610c5c610c5485610b13565b830182610bfc565b50505b505050565b5f82821c905092915050565b5f610c7f5f1984600802610c64565b1980831691505092915050565b5f610c978383610c70565b9150826002028217905092915050565b610cb082610a6d565b67ffffffffffffffff811115610cc957610cc8610a77565b5b610cd38254610ad1565b610cde828285610c1e565b5f60209050601f831160018114610d0f575f8415610cfd578287015190505b610d078582610c8c565b865550610d6e565b601f198416610d1d86610b01565b5f5b82811015610d4457848901518255600182019150602085019450602081019050610d1f565b86831015610d615784890151610d5d601f891682610c70565b8355505b6001600288020188555050505b505050505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610da382610d7a565b9050919050565b610db381610d99565b8114610dbd575f80fd5b50565b5f81519050610dce81610daa565b92915050565b5f60208284031215610de957610de8610d76565b5b5f610df684828501610dc0565b91505092915050565b610e0881610d99565b82525050565b5f604082019050610e215f830185610dff565b610e2e6020830184610dff565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610e6c82610b7f565b9150610e7783610b7f565b9250828202610e8581610b7f565b91508282048414831517610e9c57610e9b610e35565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f610eda82610b7f565b9150610ee583610b7f565b925082610ef557610ef4610ea3565b5b828204905092915050565b5f610f0a82610b7f565b9150610f1583610b7f565b9250828201905080821115610f2d57610f2c610e35565b5b92915050565b5f82825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f610f77602083610f33565b9150610f8282610f43565b602082019050919050565b5f6020820190508181035f830152610fa481610f6b565b9050919050565b5f8115159050919050565b610fbf81610fab565b82525050565b5f602082019050610fd85f830184610fb6565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f611012601f83610f33565b915061101d82610fde565b602082019050919050565b5f6020820190508181035f83015261103f81611006565b9050919050565b61104f81610b7f565b82525050565b5f6020820190506110685f830184611046565b92915050565b6080516151566110a25f395f8181610e1601528181612b2b015281816135c9015281816136a801526136cf01526151565ff3fe608060405260043610610338575f3560e01c806392136913116101aa578063ac2ac064116100f6578063d85ba06311610094578063e6819ba71161006e578063e6819ba714610bff578063ea1644d514610c3b578063f2fde38b14610c63578063fc588c0414610c8b5761033f565b8063d85ba06314610b6f578063dd62ed3e14610b99578063e2f4560514610bd55761033f565b8063bbc0c742116100d0578063bbc0c74214610ab7578063c024666814610ae1578063c876d0b914610b09578063d257b34f14610b335761033f565b8063ac2ac06414610a2b578063b62496f514610a53578063b70143c914610a8f5761033f565b80639c3b4fdc11610163578063a457c2d71161013d578063a457c2d714610961578063a72f45861461099d578063a9059cbb146109c7578063a99dca3b14610a035761033f565b80639c3b4fdc146108e35780639fccce321461090d578063a0d82dc5146109375761033f565b806392136913146107d9578063924de9b71461080357806395d89b411461082b5780639989ee21146108555780639a7a23d61461087f5780639adce734146108a75761033f565b806349bd5a5e116102845780636ddd1713116102225780637437681e116101fc5780637437681e146107315780637bce5a041461075b5780638da5cb5b146107855780638ea5220f146107af5761033f565b80636ddd1713146106b557806370a08231146106df578063715018a61461071b5761033f565b80635d098b381161025e5780635d098b381461061157806361528e271461063957806361fa6254146106635780636a486a8e1461068b5761033f565b806349bd5a5e146105815780634a62bb65146105ab5780634fbee193146105d55761033f565b80631f53ac02116102f15780632c7def61116102cb5780632c7def61146104c957806330a136ad146104f1578063313ce5671461051b57806339509351146105455761033f565b80631f53ac021461043b57806323b872dd1461046357806327c8f8351461049f5761033f565b806302ac81681461034357806306fdde0314610359578063095ea7b3146103835780631694505e146103bf57806318160ddd146103e9578063186d9d88146104135761033f565b3661033f57005b5f80fd5b34801561034e575f80fd5b50610357610cb3565b005b348015610364575f80fd5b5061036d610d67565b60405161037a9190613c5c565b60405180910390f35b34801561038e575f80fd5b506103a960048036038101906103a49190613d1a565b610df7565b6040516103b69190613d72565b60405180910390f35b3480156103ca575f80fd5b506103d3610e14565b6040516103e09190613de6565b60405180910390f35b3480156103f4575f80fd5b506103fd610e38565b60405161040a9190613e0e565b60405180910390f35b34801561041e575f80fd5b5061043960048036038101906104349190613e27565b610e41565b005b348015610446575f80fd5b50610461600480360381019061045c9190613e27565b610f14565b005b34801561046e575f80fd5b5061048960048036038101906104849190613e52565b61104e565b6040516104969190613d72565b60405180910390f35b3480156104aa575f80fd5b506104b3611140565b6040516104c09190613eb1565b60405180910390f35b3480156104d4575f80fd5b506104ef60048036038101906104ea919061400a565b611146565b005b3480156104fc575f80fd5b5061050561124d565b6040516105129190613e0e565b60405180910390f35b348015610526575f80fd5b5061052f611253565b60405161053c919061406c565b60405180910390f35b348015610550575f80fd5b5061056b60048036038101906105669190613d1a565b61125b565b6040516105789190613d72565b60405180910390f35b34801561058c575f80fd5b50610595611302565b6040516105a29190613eb1565b60405180910390f35b3480156105b6575f80fd5b506105bf611327565b6040516105cc9190613d72565b60405180910390f35b3480156105e0575f80fd5b506105fb60048036038101906105f69190613e27565b611339565b6040516106089190613d72565b60405180910390f35b34801561061c575f80fd5b5061063760048036038101906106329190613e27565b61138b565b005b348015610644575f80fd5b5061064d6114c5565b60405161065a9190613e0e565b60405180910390f35b34801561066e575f80fd5b50610689600480360381019061068491906140af565b6114cb565b005b348015610696575f80fd5b5061069f61159f565b6040516106ac9190613e0e565b60405180910390f35b3480156106c0575f80fd5b506106c96115a5565b6040516106d69190613d72565b60405180910390f35b3480156106ea575f80fd5b5061070560048036038101906107009190613e27565b6115b8565b6040516107129190613e0e565b60405180910390f35b348015610726575f80fd5b5061072f6115fd565b005b34801561073c575f80fd5b50610745611684565b6040516107529190613e0e565b60405180910390f35b348015610766575f80fd5b5061076f61168a565b60405161077c9190613e0e565b60405180910390f35b348015610790575f80fd5b50610799611690565b6040516107a69190613eb1565b60405180910390f35b3480156107ba575f80fd5b506107c36116b8565b6040516107d09190613eb1565b60405180910390f35b3480156107e4575f80fd5b506107ed6116dd565b6040516107fa9190613e0e565b60405180910390f35b34801561080e575f80fd5b50610829600480360381019061082491906140ed565b6116e3565b005b348015610836575f80fd5b5061083f61177c565b60405161084c9190613c5c565b60405180910390f35b348015610860575f80fd5b5061086961180c565b6040516108769190613d72565b60405180910390f35b34801561088a575f80fd5b506108a560048036038101906108a091906140af565b6118a9565b005b3480156108b2575f80fd5b506108cd60048036038101906108c891906140ed565b6119c2565b6040516108da9190613d72565b60405180910390f35b3480156108ee575f80fd5b506108f7611a61565b6040516109049190613e0e565b60405180910390f35b348015610918575f80fd5b50610921611a67565b60405161092e9190613e0e565b60405180910390f35b348015610942575f80fd5b5061094b611a6d565b6040516109589190613e0e565b60405180910390f35b34801561096c575f80fd5b5061098760048036038101906109829190613d1a565b611a73565b6040516109949190613d72565b60405180910390f35b3480156109a8575f80fd5b506109b1611b59565b6040516109be9190613eb1565b60405180910390f35b3480156109d2575f80fd5b506109ed60048036038101906109e89190613d1a565b611b7e565b6040516109fa9190613d72565b60405180910390f35b348015610a0e575f80fd5b50610a296004803603810190610a249190614118565b611b9b565b005b348015610a36575f80fd5b50610a516004803603810190610a4c9190613e27565b611cf1565b005b348015610a5e575f80fd5b50610a796004803603810190610a749190613e27565b611dc5565b604051610a869190613d72565b60405180910390f35b348015610a9a575f80fd5b50610ab56004803603810190610ab0919061417c565b611de2565b005b348015610ac2575f80fd5b50610acb611ea3565b604051610ad89190613d72565b60405180910390f35b348015610aec575f80fd5b50610b076004803603810190610b0291906140af565b611eb6565b005b348015610b14575f80fd5b50610b1d611fd8565b604051610b2a9190613d72565b60405180910390f35b348015610b3e575f80fd5b50610b596004803603810190610b54919061417c565b611fea565b604051610b669190613d72565b60405180910390f35b348015610b7a575f80fd5b50610b8361213e565b604051610b909190613e0e565b60405180910390f35b348015610ba4575f80fd5b50610bbf6004803603810190610bba91906141a7565b612144565b604051610bcc9190613e0e565b60405180910390f35b348015610be0575f80fd5b50610be96121c6565b604051610bf69190613e0e565b60405180910390f35b348015610c0a575f80fd5b50610c256004803603810190610c209190613e27565b6121cc565b604051610c329190613d72565b60405180910390f35b348015610c46575f80fd5b50610c616004803603810190610c5c919061417c565b6121e9565b005b348015610c6e575f80fd5b50610c896004803603810190610c849190613e27565b6122f8565b005b348015610c96575f80fd5b50610cb16004803603810190610cac919061417c565b6123ee565b005b610cbb6124fd565b73ffffffffffffffffffffffffffffffffffffffff16610cd9611690565b73ffffffffffffffffffffffffffffffffffffffff1614610d2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d269061422f565b60405180910390fd5b6001600c60016101000a81548160ff0219169083151502179055506001600c60026101000a81548160ff021916908315150217905550565b606060038054610d769061427a565b80601f0160208091040260200160405190810160405280929190818152602001828054610da29061427a565b8015610ded5780601f10610dc457610100808354040283529160200191610ded565b820191905f5260205f20905b815481529060010190602001808311610dd057829003601f168201915b5050505050905090565b5f610e0a610e036124fd565b8484612504565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f600254905090565b610e496124fd565b73ffffffffffffffffffffffffffffffffffffffff16610e67611690565b73ffffffffffffffffffffffffffffffffffffffff1614610ebd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb49061422f565b60405180910390fd5b5f60175f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b610f1c6124fd565b73ffffffffffffffffffffffffffffffffffffffff16610f3a611690565b73ffffffffffffffffffffffffffffffffffffffff1614610f90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f879061422f565b60405180910390fd5b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a38060085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f61105a8484846126c7565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6110a16124fd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611120576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111179061431a565b60405180910390fd5b6111348561112c6124fd565b858403612504565b60019150509392505050565b61dead81565b61114e6124fd565b73ffffffffffffffffffffffffffffffffffffffff1661116c611690565b73ffffffffffffffffffffffffffffffffffffffff16146111c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b99061422f565b60405180910390fd5b5f5b815181101561124957600160175f8484815181106111e5576111e4614338565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555080806001019150506111c4565b5050565b600b5481565b5f6012905090565b5f6112f86112676124fd565b848460015f6112746124fd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546112f39190614392565b612504565b6001905092915050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c5f9054906101000a900460ff1681565b5f60185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b6113936124fd565b73ffffffffffffffffffffffffffffffffffffffff166113b1611690565b73ffffffffffffffffffffffffffffffffffffffff1614611407576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113fe9061422f565b60405180910390fd5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f455cf943964d06e77e44126ecca5a66b2c9721f4576a31f8693127282c55700f60405160405180910390a38060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60155481565b6114d36124fd565b73ffffffffffffffffffffffffffffffffffffffff166114f1611690565b73ffffffffffffffffffffffffffffffffffffffff1614611547576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153e9061422f565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60125481565b600c60029054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6116056124fd565b73ffffffffffffffffffffffffffffffffffffffff16611623611690565b73ffffffffffffffffffffffffffffffffffffffff1614611679576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116709061422f565b60405180910390fd5b6116825f6133cb565b565b60095481565b60105481565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60135481565b6116eb6124fd565b73ffffffffffffffffffffffffffffffffffffffff16611709611690565b73ffffffffffffffffffffffffffffffffffffffff161461175f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117569061422f565b60405180910390fd5b80600c60026101000a81548160ff02191690831515021790555050565b60606004805461178b9061427a565b80601f01602080910402602001604051908101604052809291908181526020018280546117b79061427a565b80156118025780601f106117d957610100808354040283529160200191611802565b820191905f5260205f20905b8154815290600101906020018083116117e557829003601f168201915b5050505050905090565b5f6118156124fd565b73ffffffffffffffffffffffffffffffffffffffff16611833611690565b73ffffffffffffffffffffffffffffffffffffffff1614611889576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118809061422f565b60405180910390fd5b5f600e5f6101000a81548160ff0219169083151502179055506001905090565b6118b16124fd565b73ffffffffffffffffffffffffffffffffffffffff166118cf611690565b73ffffffffffffffffffffffffffffffffffffffff1614611925576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191c9061422f565b60405180910390fd5b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036119b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ab90614435565b60405180910390fd5b6119be828261348e565b5050565b5f6119cb6124fd565b73ffffffffffffffffffffffffffffffffffffffff166119e9611690565b73ffffffffffffffffffffffffffffffffffffffff1614611a3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a369061422f565b60405180910390fd5b81600c5f6101000a81548160ff02191690831515021790555060019050919050565b60115481565b60165481565b60145481565b5f8060015f611a806124fd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611b3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b31906144c3565b60405180910390fd5b611b4e611b456124fd565b85858403612504565b600191505092915050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f611b91611b8a6124fd565b84846126c7565b6001905092915050565b611ba36124fd565b73ffffffffffffffffffffffffffffffffffffffff16611bc1611690565b73ffffffffffffffffffffffffffffffffffffffff1614611c17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0e9061422f565b60405180910390fd5b8360108190555082601181905550601154601054611c359190614392565b600f819055508160138190555080601481905550601454601354611c599190614392565b601281905550604b600f541115611ca5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9c9061452b565b60405180910390fd5b604b6012541115611ceb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce29061452b565b60405180910390fd5b50505050565b611cf96124fd565b73ffffffffffffffffffffffffffffffffffffffff16611d17611690565b73ffffffffffffffffffffffffffffffffffffffff1614611d6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d649061422f565b60405180910390fd5b600160175f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b601a602052805f5260405f205f915054906101000a900460ff1681565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611e226124fd565b73ffffffffffffffffffffffffffffffffffffffff1614611e41575f80fd5b611e4a306115b8565b8111158015611e5857505f81115b611e97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8e90614593565b60405180910390fd5b611ea08161352c565b50565b600c60019054906101000a900460ff1681565b611ebe6124fd565b73ffffffffffffffffffffffffffffffffffffffff16611edc611690565b73ffffffffffffffffffffffffffffffffffffffff1614611f32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f299061422f565b60405180910390fd5b8060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611fcc9190613d72565b60405180910390a25050565b600e5f9054906101000a900460ff1681565b5f611ff36124fd565b73ffffffffffffffffffffffffffffffffffffffff16612011611690565b73ffffffffffffffffffffffffffffffffffffffff1614612067576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205e9061422f565b60405180910390fd5b620186a06001612075610e38565b61207f91906145b1565b612089919061461f565b8210156120cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c2906146bf565b60405180910390fd5b6103e860056120d8610e38565b6120e291906145b1565b6120ec919061461f565b82111561212e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121259061474d565b60405180910390fd5b81600a8190555060019050919050565b600f5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b600a5481565b6019602052805f5260405f205f915054906101000a900460ff1681565b6121f16124fd565b73ffffffffffffffffffffffffffffffffffffffff1661220f611690565b73ffffffffffffffffffffffffffffffffffffffff1614612265576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225c9061422f565b60405180910390fd5b670de0b6b3a76400006103e8600561227b610e38565b61228591906145b1565b61228f919061461f565b612299919061461f565b8110156122db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d2906147db565b60405180910390fd5b670de0b6b3a7640000816122ef91906145b1565b600b8190555050565b6123006124fd565b73ffffffffffffffffffffffffffffffffffffffff1661231e611690565b73ffffffffffffffffffffffffffffffffffffffff1614612374576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236b9061422f565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036123e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d990614869565b60405180910390fd5b6123eb816133cb565b50565b6123f66124fd565b73ffffffffffffffffffffffffffffffffffffffff16612414611690565b73ffffffffffffffffffffffffffffffffffffffff161461246a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124619061422f565b60405180910390fd5b670de0b6b3a76400006103e86001612480610e38565b61248a91906145b1565b612494919061461f565b61249e919061461f565b8110156124e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d7906148d1565b60405180910390fd5b670de0b6b3a7640000816124f491906145b1565b60098190555050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612572576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125699061495f565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036125e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125d7906149ed565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516126ba9190613e0e565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612735576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272c90614a7b565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036127a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279a90614b09565b60405180910390fd5b60175f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161561282d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282490614b71565b60405180910390fd5b60175f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156128b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ae90614bd9565b60405180910390fd5b5f81036128ce576128c983835f61375f565b6133c6565b600c5f9054906101000a900460ff1615612f76576128ea611690565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156129585750612928611690565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561299057505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129ca575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129e35750600660149054906101000a900460ff16155b15612f7557600c60019054906101000a900460ff16612ad75760185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612a97575060185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b612ad6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612acd90614c41565b60405180910390fd5b5b600e5f9054906101000a900460ff1615612c9b57612af3611690565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612b7a57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612bd3575060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612c9a5743600d5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410612c57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4e90614cf5565b60405180910390fd5b43600d5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b5b601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612d38575060195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612ddf57600954811115612d82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7990614d83565b60405180910390fd5b600b54612d8e836115b8565b82612d999190614392565b1115612dda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dd190614deb565b60405180910390fd5b612f74565b601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612e7c575060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612ecb57600954811115612ec6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ebd90614e79565b60405180910390fd5b612f73565b60195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16612f7257600b54612f25836115b8565b82612f309190614392565b1115612f71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f6890614deb565b60405180910390fd5b5b5b5b5b5b5f612f80306115b8565b90505f600a548210159050808015612fa45750600c60029054906101000a900460ff165b8015612fbd5750600660149054906101000a900460ff16155b80156130105750601a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015613063575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156130b6575060185f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156130f9576001600660146101000a81548160ff0219169083151502179055506130de6139d4565b5f600660146101000a81548160ff0219169083151502179055505b5f600660149054906101000a900460ff1615905060185f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806131a8575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b156131b1575f90505b5f81156133b657601a5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561320f57505f601254115b156132a75761323c606461322e60125488613ba390919063ffffffff16565b613bb890919063ffffffff16565b90506012546014548261324f91906145b1565b613259919061461f565b60165f8282546132699190614392565b925050819055506012546013548261328191906145b1565b61328b919061461f565b60155f82825461329b9190614392565b92505081905550613393565b601a5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156132fe57505f600f54115b156133925761332b606461331d600f5488613ba390919063ffffffff16565b613bb890919063ffffffff16565b9050600f546011548261333e91906145b1565b613348919061461f565b60165f8282546133589190614392565b92505081905550600f546010548261337091906145b1565b61337a919061461f565b60155f82825461338a9190614392565b925050819055505b5b5f8111156133a7576133a687308361375f565b5b80856133b39190614e97565b94505b6133c187878761375f565b505050505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f600267ffffffffffffffff81111561354857613547613ece565b5b6040519080825280602002602001820160405280156135765781602001602082028036833780820191505090505b50905030815f8151811061358d5761358c614338565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613630573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136549190614ede565b8160018151811061366857613667614338565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506136cd307f000000000000000000000000000000000000000000000000000000000000000084612504565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b815260040161372e959493929190614ff9565b5f604051808303815f87803b158015613745575f80fd5b505af1158015613757573d5f803e3d5ffd5b505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036137cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137c490614a7b565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361383b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161383290614b09565b60405180910390fd5b613846838383613bcd565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156138c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138c0906150c1565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546139579190614392565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516139bb9190613e0e565b60405180910390a36139ce848484613bd2565b50505050565b5f6139de306115b8565b90505f6016546015546139f19190614392565b90505f808303613a0357505050613ba1565b6014600a54613a1291906145b1565b831115613a2b576014600a54613a2891906145b1565b92505b5f479050613a388461352c565b5f613a4c8247613bd790919063ffffffff16565b90505f613a7685613a6860165485613ba390919063ffffffff16565b613bb890919063ffffffff16565b90505f6015819055505f60168190555060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681604051613acb9061510c565b5f6040518083038185875af1925050503d805f8114613b05576040519150601f19603f3d011682016040523d82523d5f602084013e613b0a565b606091505b50508094505060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613b559061510c565b5f6040518083038185875af1925050503d805f8114613b8f576040519150601f19603f3d011682016040523d82523d5f602084013e613b94565b606091505b5050809450505050505050505b565b5f8183613bb091906145b1565b905092915050565b5f8183613bc5919061461f565b905092915050565b505050565b505050565b5f8183613be49190614e97565b905092915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f613c2e82613bec565b613c388185613bf6565b9350613c48818560208601613c06565b613c5181613c14565b840191505092915050565b5f6020820190508181035f830152613c748184613c24565b905092915050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613cb682613c8d565b9050919050565b613cc681613cac565b8114613cd0575f80fd5b50565b5f81359050613ce181613cbd565b92915050565b5f819050919050565b613cf981613ce7565b8114613d03575f80fd5b50565b5f81359050613d1481613cf0565b92915050565b5f8060408385031215613d3057613d2f613c85565b5b5f613d3d85828601613cd3565b9250506020613d4e85828601613d06565b9150509250929050565b5f8115159050919050565b613d6c81613d58565b82525050565b5f602082019050613d855f830184613d63565b92915050565b5f819050919050565b5f613dae613da9613da484613c8d565b613d8b565b613c8d565b9050919050565b5f613dbf82613d94565b9050919050565b5f613dd082613db5565b9050919050565b613de081613dc6565b82525050565b5f602082019050613df95f830184613dd7565b92915050565b613e0881613ce7565b82525050565b5f602082019050613e215f830184613dff565b92915050565b5f60208284031215613e3c57613e3b613c85565b5b5f613e4984828501613cd3565b91505092915050565b5f805f60608486031215613e6957613e68613c85565b5b5f613e7686828701613cd3565b9350506020613e8786828701613cd3565b9250506040613e9886828701613d06565b9150509250925092565b613eab81613cac565b82525050565b5f602082019050613ec45f830184613ea2565b92915050565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b613f0482613c14565b810181811067ffffffffffffffff82111715613f2357613f22613ece565b5b80604052505050565b5f613f35613c7c565b9050613f418282613efb565b919050565b5f67ffffffffffffffff821115613f6057613f5f613ece565b5b602082029050602081019050919050565b5f80fd5b5f613f87613f8284613f46565b613f2c565b90508083825260208201905060208402830185811115613faa57613fa9613f71565b5b835b81811015613fd35780613fbf8882613cd3565b845260208401935050602081019050613fac565b5050509392505050565b5f82601f830112613ff157613ff0613eca565b5b8135614001848260208601613f75565b91505092915050565b5f6020828403121561401f5761401e613c85565b5b5f82013567ffffffffffffffff81111561403c5761403b613c89565b5b61404884828501613fdd565b91505092915050565b5f60ff82169050919050565b61406681614051565b82525050565b5f60208201905061407f5f83018461405d565b92915050565b61408e81613d58565b8114614098575f80fd5b50565b5f813590506140a981614085565b92915050565b5f80604083850312156140c5576140c4613c85565b5b5f6140d285828601613cd3565b92505060206140e38582860161409b565b9150509250929050565b5f6020828403121561410257614101613c85565b5b5f61410f8482850161409b565b91505092915050565b5f805f80608085870312156141305761412f613c85565b5b5f61413d87828801613d06565b945050602061414e87828801613d06565b935050604061415f87828801613d06565b925050606061417087828801613d06565b91505092959194509250565b5f6020828403121561419157614190613c85565b5b5f61419e84828501613d06565b91505092915050565b5f80604083850312156141bd576141bc613c85565b5b5f6141ca85828601613cd3565b92505060206141db85828601613cd3565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f614219602083613bf6565b9150614224826141e5565b602082019050919050565b5f6020820190508181035f8301526142468161420d565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061429157607f821691505b6020821081036142a4576142a361424d565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f614304602883613bf6565b915061430f826142aa565b604082019050919050565b5f6020820190508181035f830152614331816142f8565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61439c82613ce7565b91506143a783613ce7565b92508282019050808211156143bf576143be614365565b5b92915050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f61441f603983613bf6565b915061442a826143c5565b604082019050919050565b5f6020820190508181035f83015261444c81614413565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f6144ad602583613bf6565b91506144b882614453565b604082019050919050565b5f6020820190508181035f8301526144da816144a1565b9050919050565b7f4d757374206b656570206665657320617420373025206f72206c6573730000005f82015250565b5f614515601d83613bf6565b9150614520826144e1565b602082019050919050565b5f6020820190508181035f83015261454281614509565b9050919050565b7f57726f6e6720616d6f756e7400000000000000000000000000000000000000005f82015250565b5f61457d600c83613bf6565b915061458882614549565b602082019050919050565b5f6020820190508181035f8301526145aa81614571565b9050919050565b5f6145bb82613ce7565b91506145c683613ce7565b92508282026145d481613ce7565b915082820484148315176145eb576145ea614365565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61462982613ce7565b915061463483613ce7565b925082614644576146436145f2565b5b828204905092915050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b5f6146a9603583613bf6565b91506146b48261464f565b604082019050919050565b5f6020820190508181035f8301526146d68161469d565b9050919050565b7f5377617020616d6f756e742063616e6e6f7420626520686967686572207468615f8201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b5f614737603483613bf6565b9150614742826146dd565b604082019050919050565b5f6020820190508181035f8301526147648161472b565b9050919050565b7f43616e6e6f7420736574206d617857616c6c657473206c6f776572207468616e5f8201527f20302e3525000000000000000000000000000000000000000000000000000000602082015250565b5f6147c5602583613bf6565b91506147d08261476b565b604082019050919050565b5f6020820190508181035f8301526147f2816147b9565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f614853602683613bf6565b915061485e826147f9565b604082019050919050565b5f6020820190508181035f83015261488081614847565b9050919050565b7f43616e6e6f7420736574206d61785478206c6f776572207468616e20302e31255f82015250565b5f6148bb602083613bf6565b91506148c682614887565b602082019050919050565b5f6020820190508181035f8301526148e8816148af565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f614949602483613bf6565b9150614954826148ef565b604082019050919050565b5f6020820190508181035f8301526149768161493d565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6149d7602283613bf6565b91506149e28261497d565b604082019050919050565b5f6020820190508181035f830152614a04816149cb565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f614a65602583613bf6565b9150614a7082614a0b565b604082019050919050565b5f6020820190508181035f830152614a9281614a59565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f614af3602383613bf6565b9150614afe82614a99565b604082019050919050565b5f6020820190508181035f830152614b2081614ae7565b9050919050565b7f5b66726f6d5d20626c61636b206c6973740000000000000000000000000000005f82015250565b5f614b5b601183613bf6565b9150614b6682614b27565b602082019050919050565b5f6020820190508181035f830152614b8881614b4f565b9050919050565b7f5b746f5d20626c61636b206c69737400000000000000000000000000000000005f82015250565b5f614bc3600f83613bf6565b9150614bce82614b8f565b602082019050919050565b5f6020820190508181035f830152614bf081614bb7565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f614c2b601683613bf6565b9150614c3682614bf7565b602082019050919050565b5f6020820190508181035f830152614c5881614c1f565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c5f8201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b5f614cdf604983613bf6565b9150614cea82614c5f565b606082019050919050565b5f6020820190508181035f830152614d0c81614cd3565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d617854782e0000000000000000000000000000000000000000000000000000602082015250565b5f614d6d602683613bf6565b9150614d7882614d13565b604082019050919050565b5f6020820190508181035f830152614d9a81614d61565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f614dd5601383613bf6565b9150614de082614da1565b602082019050919050565b5f6020820190508181035f830152614e0281614dc9565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d617854782e00000000000000000000000000000000000000000000000000602082015250565b5f614e63602783613bf6565b9150614e6e82614e09565b604082019050919050565b5f6020820190508181035f830152614e9081614e57565b9050919050565b5f614ea182613ce7565b9150614eac83613ce7565b9250828203905081811115614ec457614ec3614365565b5b92915050565b5f81519050614ed881613cbd565b92915050565b5f60208284031215614ef357614ef2613c85565b5b5f614f0084828501614eca565b91505092915050565b5f819050919050565b5f614f2c614f27614f2284614f09565b613d8b565b613ce7565b9050919050565b614f3c81614f12565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b614f7481613cac565b82525050565b5f614f858383614f6b565b60208301905092915050565b5f602082019050919050565b5f614fa782614f42565b614fb18185614f4c565b9350614fbc83614f5c565b805f5b83811015614fec578151614fd38882614f7a565b9750614fde83614f91565b925050600181019050614fbf565b5085935050505092915050565b5f60a08201905061500c5f830188613dff565b6150196020830187614f33565b818103604083015261502b8186614f9d565b905061503a6060830185613ea2565b6150476080830184613dff565b9695505050505050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f6150ab602683613bf6565b91506150b682615051565b604082019050919050565b5f6020820190508181035f8301526150d88161509f565b9050919050565b5f81905092915050565b50565b5f6150f75f836150df565b9150615102826150e9565b5f82019050919050565b5f615116826150ec565b915081905091905056fea264697066735822122013dff1bf13eaa18d617ea30f321fb29197a673bbb7e691d05758d5053689610264736f6c634300081a0033

Deployed Bytecode

0x608060405260043610610338575f3560e01c806392136913116101aa578063ac2ac064116100f6578063d85ba06311610094578063e6819ba71161006e578063e6819ba714610bff578063ea1644d514610c3b578063f2fde38b14610c63578063fc588c0414610c8b5761033f565b8063d85ba06314610b6f578063dd62ed3e14610b99578063e2f4560514610bd55761033f565b8063bbc0c742116100d0578063bbc0c74214610ab7578063c024666814610ae1578063c876d0b914610b09578063d257b34f14610b335761033f565b8063ac2ac06414610a2b578063b62496f514610a53578063b70143c914610a8f5761033f565b80639c3b4fdc11610163578063a457c2d71161013d578063a457c2d714610961578063a72f45861461099d578063a9059cbb146109c7578063a99dca3b14610a035761033f565b80639c3b4fdc146108e35780639fccce321461090d578063a0d82dc5146109375761033f565b806392136913146107d9578063924de9b71461080357806395d89b411461082b5780639989ee21146108555780639a7a23d61461087f5780639adce734146108a75761033f565b806349bd5a5e116102845780636ddd1713116102225780637437681e116101fc5780637437681e146107315780637bce5a041461075b5780638da5cb5b146107855780638ea5220f146107af5761033f565b80636ddd1713146106b557806370a08231146106df578063715018a61461071b5761033f565b80635d098b381161025e5780635d098b381461061157806361528e271461063957806361fa6254146106635780636a486a8e1461068b5761033f565b806349bd5a5e146105815780634a62bb65146105ab5780634fbee193146105d55761033f565b80631f53ac02116102f15780632c7def61116102cb5780632c7def61146104c957806330a136ad146104f1578063313ce5671461051b57806339509351146105455761033f565b80631f53ac021461043b57806323b872dd1461046357806327c8f8351461049f5761033f565b806302ac81681461034357806306fdde0314610359578063095ea7b3146103835780631694505e146103bf57806318160ddd146103e9578063186d9d88146104135761033f565b3661033f57005b5f80fd5b34801561034e575f80fd5b50610357610cb3565b005b348015610364575f80fd5b5061036d610d67565b60405161037a9190613c5c565b60405180910390f35b34801561038e575f80fd5b506103a960048036038101906103a49190613d1a565b610df7565b6040516103b69190613d72565b60405180910390f35b3480156103ca575f80fd5b506103d3610e14565b6040516103e09190613de6565b60405180910390f35b3480156103f4575f80fd5b506103fd610e38565b60405161040a9190613e0e565b60405180910390f35b34801561041e575f80fd5b5061043960048036038101906104349190613e27565b610e41565b005b348015610446575f80fd5b50610461600480360381019061045c9190613e27565b610f14565b005b34801561046e575f80fd5b5061048960048036038101906104849190613e52565b61104e565b6040516104969190613d72565b60405180910390f35b3480156104aa575f80fd5b506104b3611140565b6040516104c09190613eb1565b60405180910390f35b3480156104d4575f80fd5b506104ef60048036038101906104ea919061400a565b611146565b005b3480156104fc575f80fd5b5061050561124d565b6040516105129190613e0e565b60405180910390f35b348015610526575f80fd5b5061052f611253565b60405161053c919061406c565b60405180910390f35b348015610550575f80fd5b5061056b60048036038101906105669190613d1a565b61125b565b6040516105789190613d72565b60405180910390f35b34801561058c575f80fd5b50610595611302565b6040516105a29190613eb1565b60405180910390f35b3480156105b6575f80fd5b506105bf611327565b6040516105cc9190613d72565b60405180910390f35b3480156105e0575f80fd5b506105fb60048036038101906105f69190613e27565b611339565b6040516106089190613d72565b60405180910390f35b34801561061c575f80fd5b5061063760048036038101906106329190613e27565b61138b565b005b348015610644575f80fd5b5061064d6114c5565b60405161065a9190613e0e565b60405180910390f35b34801561066e575f80fd5b50610689600480360381019061068491906140af565b6114cb565b005b348015610696575f80fd5b5061069f61159f565b6040516106ac9190613e0e565b60405180910390f35b3480156106c0575f80fd5b506106c96115a5565b6040516106d69190613d72565b60405180910390f35b3480156106ea575f80fd5b5061070560048036038101906107009190613e27565b6115b8565b6040516107129190613e0e565b60405180910390f35b348015610726575f80fd5b5061072f6115fd565b005b34801561073c575f80fd5b50610745611684565b6040516107529190613e0e565b60405180910390f35b348015610766575f80fd5b5061076f61168a565b60405161077c9190613e0e565b60405180910390f35b348015610790575f80fd5b50610799611690565b6040516107a69190613eb1565b60405180910390f35b3480156107ba575f80fd5b506107c36116b8565b6040516107d09190613eb1565b60405180910390f35b3480156107e4575f80fd5b506107ed6116dd565b6040516107fa9190613e0e565b60405180910390f35b34801561080e575f80fd5b50610829600480360381019061082491906140ed565b6116e3565b005b348015610836575f80fd5b5061083f61177c565b60405161084c9190613c5c565b60405180910390f35b348015610860575f80fd5b5061086961180c565b6040516108769190613d72565b60405180910390f35b34801561088a575f80fd5b506108a560048036038101906108a091906140af565b6118a9565b005b3480156108b2575f80fd5b506108cd60048036038101906108c891906140ed565b6119c2565b6040516108da9190613d72565b60405180910390f35b3480156108ee575f80fd5b506108f7611a61565b6040516109049190613e0e565b60405180910390f35b348015610918575f80fd5b50610921611a67565b60405161092e9190613e0e565b60405180910390f35b348015610942575f80fd5b5061094b611a6d565b6040516109589190613e0e565b60405180910390f35b34801561096c575f80fd5b5061098760048036038101906109829190613d1a565b611a73565b6040516109949190613d72565b60405180910390f35b3480156109a8575f80fd5b506109b1611b59565b6040516109be9190613eb1565b60405180910390f35b3480156109d2575f80fd5b506109ed60048036038101906109e89190613d1a565b611b7e565b6040516109fa9190613d72565b60405180910390f35b348015610a0e575f80fd5b50610a296004803603810190610a249190614118565b611b9b565b005b348015610a36575f80fd5b50610a516004803603810190610a4c9190613e27565b611cf1565b005b348015610a5e575f80fd5b50610a796004803603810190610a749190613e27565b611dc5565b604051610a869190613d72565b60405180910390f35b348015610a9a575f80fd5b50610ab56004803603810190610ab0919061417c565b611de2565b005b348015610ac2575f80fd5b50610acb611ea3565b604051610ad89190613d72565b60405180910390f35b348015610aec575f80fd5b50610b076004803603810190610b0291906140af565b611eb6565b005b348015610b14575f80fd5b50610b1d611fd8565b604051610b2a9190613d72565b60405180910390f35b348015610b3e575f80fd5b50610b596004803603810190610b54919061417c565b611fea565b604051610b669190613d72565b60405180910390f35b348015610b7a575f80fd5b50610b8361213e565b604051610b909190613e0e565b60405180910390f35b348015610ba4575f80fd5b50610bbf6004803603810190610bba91906141a7565b612144565b604051610bcc9190613e0e565b60405180910390f35b348015610be0575f80fd5b50610be96121c6565b604051610bf69190613e0e565b60405180910390f35b348015610c0a575f80fd5b50610c256004803603810190610c209190613e27565b6121cc565b604051610c329190613d72565b60405180910390f35b348015610c46575f80fd5b50610c616004803603810190610c5c919061417c565b6121e9565b005b348015610c6e575f80fd5b50610c896004803603810190610c849190613e27565b6122f8565b005b348015610c96575f80fd5b50610cb16004803603810190610cac919061417c565b6123ee565b005b610cbb6124fd565b73ffffffffffffffffffffffffffffffffffffffff16610cd9611690565b73ffffffffffffffffffffffffffffffffffffffff1614610d2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d269061422f565b60405180910390fd5b6001600c60016101000a81548160ff0219169083151502179055506001600c60026101000a81548160ff021916908315150217905550565b606060038054610d769061427a565b80601f0160208091040260200160405190810160405280929190818152602001828054610da29061427a565b8015610ded5780601f10610dc457610100808354040283529160200191610ded565b820191905f5260205f20905b815481529060010190602001808311610dd057829003601f168201915b5050505050905090565b5f610e0a610e036124fd565b8484612504565b6001905092915050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b5f600254905090565b610e496124fd565b73ffffffffffffffffffffffffffffffffffffffff16610e67611690565b73ffffffffffffffffffffffffffffffffffffffff1614610ebd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb49061422f565b60405180910390fd5b5f60175f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b610f1c6124fd565b73ffffffffffffffffffffffffffffffffffffffff16610f3a611690565b73ffffffffffffffffffffffffffffffffffffffff1614610f90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f879061422f565b60405180910390fd5b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a38060085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f61105a8484846126c7565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6110a16124fd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611120576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111179061431a565b60405180910390fd5b6111348561112c6124fd565b858403612504565b60019150509392505050565b61dead81565b61114e6124fd565b73ffffffffffffffffffffffffffffffffffffffff1661116c611690565b73ffffffffffffffffffffffffffffffffffffffff16146111c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b99061422f565b60405180910390fd5b5f5b815181101561124957600160175f8484815181106111e5576111e4614338565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555080806001019150506111c4565b5050565b600b5481565b5f6012905090565b5f6112f86112676124fd565b848460015f6112746124fd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546112f39190614392565b612504565b6001905092915050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c5f9054906101000a900460ff1681565b5f60185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b6113936124fd565b73ffffffffffffffffffffffffffffffffffffffff166113b1611690565b73ffffffffffffffffffffffffffffffffffffffff1614611407576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113fe9061422f565b60405180910390fd5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f455cf943964d06e77e44126ecca5a66b2c9721f4576a31f8693127282c55700f60405160405180910390a38060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60155481565b6114d36124fd565b73ffffffffffffffffffffffffffffffffffffffff166114f1611690565b73ffffffffffffffffffffffffffffffffffffffff1614611547576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153e9061422f565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60125481565b600c60029054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6116056124fd565b73ffffffffffffffffffffffffffffffffffffffff16611623611690565b73ffffffffffffffffffffffffffffffffffffffff1614611679576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116709061422f565b60405180910390fd5b6116825f6133cb565b565b60095481565b60105481565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60135481565b6116eb6124fd565b73ffffffffffffffffffffffffffffffffffffffff16611709611690565b73ffffffffffffffffffffffffffffffffffffffff161461175f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117569061422f565b60405180910390fd5b80600c60026101000a81548160ff02191690831515021790555050565b60606004805461178b9061427a565b80601f01602080910402602001604051908101604052809291908181526020018280546117b79061427a565b80156118025780601f106117d957610100808354040283529160200191611802565b820191905f5260205f20905b8154815290600101906020018083116117e557829003601f168201915b5050505050905090565b5f6118156124fd565b73ffffffffffffffffffffffffffffffffffffffff16611833611690565b73ffffffffffffffffffffffffffffffffffffffff1614611889576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118809061422f565b60405180910390fd5b5f600e5f6101000a81548160ff0219169083151502179055506001905090565b6118b16124fd565b73ffffffffffffffffffffffffffffffffffffffff166118cf611690565b73ffffffffffffffffffffffffffffffffffffffff1614611925576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191c9061422f565b60405180910390fd5b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036119b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ab90614435565b60405180910390fd5b6119be828261348e565b5050565b5f6119cb6124fd565b73ffffffffffffffffffffffffffffffffffffffff166119e9611690565b73ffffffffffffffffffffffffffffffffffffffff1614611a3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a369061422f565b60405180910390fd5b81600c5f6101000a81548160ff02191690831515021790555060019050919050565b60115481565b60165481565b60145481565b5f8060015f611a806124fd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611b3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b31906144c3565b60405180910390fd5b611b4e611b456124fd565b85858403612504565b600191505092915050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f611b91611b8a6124fd565b84846126c7565b6001905092915050565b611ba36124fd565b73ffffffffffffffffffffffffffffffffffffffff16611bc1611690565b73ffffffffffffffffffffffffffffffffffffffff1614611c17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0e9061422f565b60405180910390fd5b8360108190555082601181905550601154601054611c359190614392565b600f819055508160138190555080601481905550601454601354611c599190614392565b601281905550604b600f541115611ca5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9c9061452b565b60405180910390fd5b604b6012541115611ceb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce29061452b565b60405180910390fd5b50505050565b611cf96124fd565b73ffffffffffffffffffffffffffffffffffffffff16611d17611690565b73ffffffffffffffffffffffffffffffffffffffff1614611d6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d649061422f565b60405180910390fd5b600160175f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b601a602052805f5260405f205f915054906101000a900460ff1681565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611e226124fd565b73ffffffffffffffffffffffffffffffffffffffff1614611e41575f80fd5b611e4a306115b8565b8111158015611e5857505f81115b611e97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8e90614593565b60405180910390fd5b611ea08161352c565b50565b600c60019054906101000a900460ff1681565b611ebe6124fd565b73ffffffffffffffffffffffffffffffffffffffff16611edc611690565b73ffffffffffffffffffffffffffffffffffffffff1614611f32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f299061422f565b60405180910390fd5b8060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611fcc9190613d72565b60405180910390a25050565b600e5f9054906101000a900460ff1681565b5f611ff36124fd565b73ffffffffffffffffffffffffffffffffffffffff16612011611690565b73ffffffffffffffffffffffffffffffffffffffff1614612067576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205e9061422f565b60405180910390fd5b620186a06001612075610e38565b61207f91906145b1565b612089919061461f565b8210156120cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c2906146bf565b60405180910390fd5b6103e860056120d8610e38565b6120e291906145b1565b6120ec919061461f565b82111561212e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121259061474d565b60405180910390fd5b81600a8190555060019050919050565b600f5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b600a5481565b6019602052805f5260405f205f915054906101000a900460ff1681565b6121f16124fd565b73ffffffffffffffffffffffffffffffffffffffff1661220f611690565b73ffffffffffffffffffffffffffffffffffffffff1614612265576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225c9061422f565b60405180910390fd5b670de0b6b3a76400006103e8600561227b610e38565b61228591906145b1565b61228f919061461f565b612299919061461f565b8110156122db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d2906147db565b60405180910390fd5b670de0b6b3a7640000816122ef91906145b1565b600b8190555050565b6123006124fd565b73ffffffffffffffffffffffffffffffffffffffff1661231e611690565b73ffffffffffffffffffffffffffffffffffffffff1614612374576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236b9061422f565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036123e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d990614869565b60405180910390fd5b6123eb816133cb565b50565b6123f66124fd565b73ffffffffffffffffffffffffffffffffffffffff16612414611690565b73ffffffffffffffffffffffffffffffffffffffff161461246a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124619061422f565b60405180910390fd5b670de0b6b3a76400006103e86001612480610e38565b61248a91906145b1565b612494919061461f565b61249e919061461f565b8110156124e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d7906148d1565b60405180910390fd5b670de0b6b3a7640000816124f491906145b1565b60098190555050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612572576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125699061495f565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036125e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125d7906149ed565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516126ba9190613e0e565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612735576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272c90614a7b565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036127a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279a90614b09565b60405180910390fd5b60175f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161561282d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282490614b71565b60405180910390fd5b60175f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156128b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ae90614bd9565b60405180910390fd5b5f81036128ce576128c983835f61375f565b6133c6565b600c5f9054906101000a900460ff1615612f76576128ea611690565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156129585750612928611690565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561299057505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129ca575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129e35750600660149054906101000a900460ff16155b15612f7557600c60019054906101000a900460ff16612ad75760185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612a97575060185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b612ad6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612acd90614c41565b60405180910390fd5b5b600e5f9054906101000a900460ff1615612c9b57612af3611690565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612b7a57507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612bd3575060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612c9a5743600d5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410612c57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4e90614cf5565b60405180910390fd5b43600d5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b5b601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612d38575060195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612ddf57600954811115612d82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7990614d83565b60405180910390fd5b600b54612d8e836115b8565b82612d999190614392565b1115612dda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dd190614deb565b60405180910390fd5b612f74565b601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612e7c575060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612ecb57600954811115612ec6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ebd90614e79565b60405180910390fd5b612f73565b60195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16612f7257600b54612f25836115b8565b82612f309190614392565b1115612f71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f6890614deb565b60405180910390fd5b5b5b5b5b5b5f612f80306115b8565b90505f600a548210159050808015612fa45750600c60029054906101000a900460ff165b8015612fbd5750600660149054906101000a900460ff16155b80156130105750601a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015613063575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156130b6575060185f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156130f9576001600660146101000a81548160ff0219169083151502179055506130de6139d4565b5f600660146101000a81548160ff0219169083151502179055505b5f600660149054906101000a900460ff1615905060185f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806131a8575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b156131b1575f90505b5f81156133b657601a5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561320f57505f601254115b156132a75761323c606461322e60125488613ba390919063ffffffff16565b613bb890919063ffffffff16565b90506012546014548261324f91906145b1565b613259919061461f565b60165f8282546132699190614392565b925050819055506012546013548261328191906145b1565b61328b919061461f565b60155f82825461329b9190614392565b92505081905550613393565b601a5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156132fe57505f600f54115b156133925761332b606461331d600f5488613ba390919063ffffffff16565b613bb890919063ffffffff16565b9050600f546011548261333e91906145b1565b613348919061461f565b60165f8282546133589190614392565b92505081905550600f546010548261337091906145b1565b61337a919061461f565b60155f82825461338a9190614392565b925050819055505b5b5f8111156133a7576133a687308361375f565b5b80856133b39190614e97565b94505b6133c187878761375f565b505050505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f600267ffffffffffffffff81111561354857613547613ece565b5b6040519080825280602002602001820160405280156135765781602001602082028036833780820191505090505b50905030815f8151811061358d5761358c614338565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613630573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136549190614ede565b8160018151811061366857613667614338565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506136cd307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612504565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b815260040161372e959493929190614ff9565b5f604051808303815f87803b158015613745575f80fd5b505af1158015613757573d5f803e3d5ffd5b505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036137cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137c490614a7b565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361383b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161383290614b09565b60405180910390fd5b613846838383613bcd565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156138c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138c0906150c1565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546139579190614392565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516139bb9190613e0e565b60405180910390a36139ce848484613bd2565b50505050565b5f6139de306115b8565b90505f6016546015546139f19190614392565b90505f808303613a0357505050613ba1565b6014600a54613a1291906145b1565b831115613a2b576014600a54613a2891906145b1565b92505b5f479050613a388461352c565b5f613a4c8247613bd790919063ffffffff16565b90505f613a7685613a6860165485613ba390919063ffffffff16565b613bb890919063ffffffff16565b90505f6015819055505f60168190555060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681604051613acb9061510c565b5f6040518083038185875af1925050503d805f8114613b05576040519150601f19603f3d011682016040523d82523d5f602084013e613b0a565b606091505b50508094505060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613b559061510c565b5f6040518083038185875af1925050503d805f8114613b8f576040519150601f19603f3d011682016040523d82523d5f602084013e613b94565b606091505b5050809450505050505050505b565b5f8183613bb091906145b1565b905092915050565b5f8183613bc5919061461f565b905092915050565b505050565b505050565b5f8183613be49190614e97565b905092915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f613c2e82613bec565b613c388185613bf6565b9350613c48818560208601613c06565b613c5181613c14565b840191505092915050565b5f6020820190508181035f830152613c748184613c24565b905092915050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613cb682613c8d565b9050919050565b613cc681613cac565b8114613cd0575f80fd5b50565b5f81359050613ce181613cbd565b92915050565b5f819050919050565b613cf981613ce7565b8114613d03575f80fd5b50565b5f81359050613d1481613cf0565b92915050565b5f8060408385031215613d3057613d2f613c85565b5b5f613d3d85828601613cd3565b9250506020613d4e85828601613d06565b9150509250929050565b5f8115159050919050565b613d6c81613d58565b82525050565b5f602082019050613d855f830184613d63565b92915050565b5f819050919050565b5f613dae613da9613da484613c8d565b613d8b565b613c8d565b9050919050565b5f613dbf82613d94565b9050919050565b5f613dd082613db5565b9050919050565b613de081613dc6565b82525050565b5f602082019050613df95f830184613dd7565b92915050565b613e0881613ce7565b82525050565b5f602082019050613e215f830184613dff565b92915050565b5f60208284031215613e3c57613e3b613c85565b5b5f613e4984828501613cd3565b91505092915050565b5f805f60608486031215613e6957613e68613c85565b5b5f613e7686828701613cd3565b9350506020613e8786828701613cd3565b9250506040613e9886828701613d06565b9150509250925092565b613eab81613cac565b82525050565b5f602082019050613ec45f830184613ea2565b92915050565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b613f0482613c14565b810181811067ffffffffffffffff82111715613f2357613f22613ece565b5b80604052505050565b5f613f35613c7c565b9050613f418282613efb565b919050565b5f67ffffffffffffffff821115613f6057613f5f613ece565b5b602082029050602081019050919050565b5f80fd5b5f613f87613f8284613f46565b613f2c565b90508083825260208201905060208402830185811115613faa57613fa9613f71565b5b835b81811015613fd35780613fbf8882613cd3565b845260208401935050602081019050613fac565b5050509392505050565b5f82601f830112613ff157613ff0613eca565b5b8135614001848260208601613f75565b91505092915050565b5f6020828403121561401f5761401e613c85565b5b5f82013567ffffffffffffffff81111561403c5761403b613c89565b5b61404884828501613fdd565b91505092915050565b5f60ff82169050919050565b61406681614051565b82525050565b5f60208201905061407f5f83018461405d565b92915050565b61408e81613d58565b8114614098575f80fd5b50565b5f813590506140a981614085565b92915050565b5f80604083850312156140c5576140c4613c85565b5b5f6140d285828601613cd3565b92505060206140e38582860161409b565b9150509250929050565b5f6020828403121561410257614101613c85565b5b5f61410f8482850161409b565b91505092915050565b5f805f80608085870312156141305761412f613c85565b5b5f61413d87828801613d06565b945050602061414e87828801613d06565b935050604061415f87828801613d06565b925050606061417087828801613d06565b91505092959194509250565b5f6020828403121561419157614190613c85565b5b5f61419e84828501613d06565b91505092915050565b5f80604083850312156141bd576141bc613c85565b5b5f6141ca85828601613cd3565b92505060206141db85828601613cd3565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f614219602083613bf6565b9150614224826141e5565b602082019050919050565b5f6020820190508181035f8301526142468161420d565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061429157607f821691505b6020821081036142a4576142a361424d565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f614304602883613bf6565b915061430f826142aa565b604082019050919050565b5f6020820190508181035f830152614331816142f8565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61439c82613ce7565b91506143a783613ce7565b92508282019050808211156143bf576143be614365565b5b92915050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f61441f603983613bf6565b915061442a826143c5565b604082019050919050565b5f6020820190508181035f83015261444c81614413565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f6144ad602583613bf6565b91506144b882614453565b604082019050919050565b5f6020820190508181035f8301526144da816144a1565b9050919050565b7f4d757374206b656570206665657320617420373025206f72206c6573730000005f82015250565b5f614515601d83613bf6565b9150614520826144e1565b602082019050919050565b5f6020820190508181035f83015261454281614509565b9050919050565b7f57726f6e6720616d6f756e7400000000000000000000000000000000000000005f82015250565b5f61457d600c83613bf6565b915061458882614549565b602082019050919050565b5f6020820190508181035f8301526145aa81614571565b9050919050565b5f6145bb82613ce7565b91506145c683613ce7565b92508282026145d481613ce7565b915082820484148315176145eb576145ea614365565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61462982613ce7565b915061463483613ce7565b925082614644576146436145f2565b5b828204905092915050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b5f6146a9603583613bf6565b91506146b48261464f565b604082019050919050565b5f6020820190508181035f8301526146d68161469d565b9050919050565b7f5377617020616d6f756e742063616e6e6f7420626520686967686572207468615f8201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b5f614737603483613bf6565b9150614742826146dd565b604082019050919050565b5f6020820190508181035f8301526147648161472b565b9050919050565b7f43616e6e6f7420736574206d617857616c6c657473206c6f776572207468616e5f8201527f20302e3525000000000000000000000000000000000000000000000000000000602082015250565b5f6147c5602583613bf6565b91506147d08261476b565b604082019050919050565b5f6020820190508181035f8301526147f2816147b9565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f614853602683613bf6565b915061485e826147f9565b604082019050919050565b5f6020820190508181035f83015261488081614847565b9050919050565b7f43616e6e6f7420736574206d61785478206c6f776572207468616e20302e31255f82015250565b5f6148bb602083613bf6565b91506148c682614887565b602082019050919050565b5f6020820190508181035f8301526148e8816148af565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f614949602483613bf6565b9150614954826148ef565b604082019050919050565b5f6020820190508181035f8301526149768161493d565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6149d7602283613bf6565b91506149e28261497d565b604082019050919050565b5f6020820190508181035f830152614a04816149cb565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f614a65602583613bf6565b9150614a7082614a0b565b604082019050919050565b5f6020820190508181035f830152614a9281614a59565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f614af3602383613bf6565b9150614afe82614a99565b604082019050919050565b5f6020820190508181035f830152614b2081614ae7565b9050919050565b7f5b66726f6d5d20626c61636b206c6973740000000000000000000000000000005f82015250565b5f614b5b601183613bf6565b9150614b6682614b27565b602082019050919050565b5f6020820190508181035f830152614b8881614b4f565b9050919050565b7f5b746f5d20626c61636b206c69737400000000000000000000000000000000005f82015250565b5f614bc3600f83613bf6565b9150614bce82614b8f565b602082019050919050565b5f6020820190508181035f830152614bf081614bb7565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f614c2b601683613bf6565b9150614c3682614bf7565b602082019050919050565b5f6020820190508181035f830152614c5881614c1f565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c5f8201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b5f614cdf604983613bf6565b9150614cea82614c5f565b606082019050919050565b5f6020820190508181035f830152614d0c81614cd3565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d617854782e0000000000000000000000000000000000000000000000000000602082015250565b5f614d6d602683613bf6565b9150614d7882614d13565b604082019050919050565b5f6020820190508181035f830152614d9a81614d61565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f614dd5601383613bf6565b9150614de082614da1565b602082019050919050565b5f6020820190508181035f830152614e0281614dc9565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d617854782e00000000000000000000000000000000000000000000000000602082015250565b5f614e63602783613bf6565b9150614e6e82614e09565b604082019050919050565b5f6020820190508181035f830152614e9081614e57565b9050919050565b5f614ea182613ce7565b9150614eac83613ce7565b9250828203905081811115614ec457614ec3614365565b5b92915050565b5f81519050614ed881613cbd565b92915050565b5f60208284031215614ef357614ef2613c85565b5b5f614f0084828501614eca565b91505092915050565b5f819050919050565b5f614f2c614f27614f2284614f09565b613d8b565b613ce7565b9050919050565b614f3c81614f12565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b614f7481613cac565b82525050565b5f614f858383614f6b565b60208301905092915050565b5f602082019050919050565b5f614fa782614f42565b614fb18185614f4c565b9350614fbc83614f5c565b805f5b83811015614fec578151614fd38882614f7a565b9750614fde83614f91565b925050600181019050614fbf565b5085935050505092915050565b5f60a08201905061500c5f830188613dff565b6150196020830187614f33565b818103604083015261502b8186614f9d565b905061503a6060830185613ea2565b6150476080830184613dff565b9695505050505050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f6150ab602683613bf6565b91506150b682615051565b604082019050919050565b5f6020820190508181035f8301526150d88161509f565b9050919050565b5f81905092915050565b50565b5f6150f75f836150df565b9150615102826150e9565b5f82019050919050565b5f615116826150ec565b915081905091905056fea264697066735822122013dff1bf13eaa18d617ea30f321fb29197a673bbb7e691d05758d5053689610264736f6c634300081a0033

Deployed Bytecode Sourcemap

15799:13683:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19263:105;;;;;;;;;;;;;:::i;:::-;;2931:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3986:210;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15879:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3252:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21581:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20871:154;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4204:529;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15972:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21273:190;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16200:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3151:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4741:297;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15937:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16234:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22999:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20664:199;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16740:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21033:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16633:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16314:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3368:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;941:103;;;;;;;;;;;;;:::i;:::-;;16133:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16563:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;718:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16100:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16668:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21165:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3039:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19512:134;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22491:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19376:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16600:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16778:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16706:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5046:482;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16064:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3553:216;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21691:602;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21471:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16982:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27778:259;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16274:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22301:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16480:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19654:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16529:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3777:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16160:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16925:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20403:253;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1052:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20159:236;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19263:105;864:12;:10;:12::i;:::-;853:23;;:7;:5;:7::i;:::-;:23;;;845:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19327:4:::1;19311:13;;:20;;;;;;;;;;;;;;;;;;19356:4;19342:11;;:18;;;;;;;;;;;;;;;;;;19263:105::o:0;2931:100::-;2985:13;3018:5;3011:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2931:100;:::o;3986:210::-;4105:4;4127:39;4136:12;:10;:12::i;:::-;4150:7;4159:6;4127:8;:39::i;:::-;4184:4;4177:11;;3986:210;;;;:::o;15879:51::-;;;:::o;3252:108::-;3313:7;3340:12;;3333:19;;3252:108;:::o;21581:102::-;864:12;:10;:12::i;:::-;853:23;;:7;:5;:7::i;:::-;:23;;;845:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21670:5:::1;21649:12;:18;21662:4;21649:18;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;21581:102:::0;:::o;20871:154::-;864:12;:10;:12::i;:::-;853:23;;:7;:5;:7::i;:::-;:23;;;845:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20975:9:::1;;;;;;;;;;;20947:38;;20964:9;20947:38;;;;;;;;;;;;21008:9;20996;;:21;;;;;;;;;;;;;;;;;;20871:154:::0;:::o;4204:529::-;4344:4;4361:36;4371:6;4379:9;4390:6;4361:9;:36::i;:::-;4410:24;4437:11;:19;4449:6;4437:19;;;;;;;;;;;;;;;:33;4457:12;:10;:12::i;:::-;4437:33;;;;;;;;;;;;;;;;4410:60;;4523:6;4503:16;:26;;4481:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;4633:57;4642:6;4650:12;:10;:12::i;:::-;4683:6;4664:16;:25;4633:8;:57::i;:::-;4721:4;4714:11;;;4204:529;;;;;:::o;15972:53::-;16018:6;15972:53;:::o;21273:190::-;864:12;:10;:12::i;:::-;853:23;;:7;:5;:7::i;:::-;:23;;;845:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21362:9:::1;21357:99;21381:5;:12;21377:1;:16;21357:99;;;21440:4;21415:12;:22;21428:5;21434:1;21428:8;;;;;;;;:::i;:::-;;;;;;;;21415:22;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;21395:3;;;;;;;21357:99;;;;21273:190:::0;:::o;16200:25::-;;;;:::o;3151:93::-;3209:5;3234:2;3227:9;;3151:93;:::o;4741:297::-;4856:4;4878:130;4901:12;:10;:12::i;:::-;4928:7;4987:10;4950:11;:25;4962:12;:10;:12::i;:::-;4950:25;;;;;;;;;;;;;;;:34;4976:7;4950:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;4878:8;:130::i;:::-;5026:4;5019:11;;4741:297;;;;:::o;15937:28::-;;;;;;;;;;;;;:::o;16234:33::-;;;;;;;;;;;;;:::o;22999:126::-;23065:4;23089:19;:28;23109:7;23089:28;;;;;;;;;;;;;;;;;;;;;;;;;23082:35;;22999:126;;;:::o;20664:199::-;864:12;:10;:12::i;:::-;853:23;;:7;:5;:7::i;:::-;:23;;;845:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20795:14:::1;;;;;;;;;;;20754:56;;20776:17;20754:56;;;;;;;;;;;;20838:17;20821:14;;:34;;;;;;;;;;;;;;;;;;20664:199:::0;:::o;16740:31::-;;;;:::o;21033:124::-;864:12;:10;:12::i;:::-;853:23;;:7;:5;:7::i;:::-;:23;;;845:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21145:4:::1;21118:16;:24;21135:6;21118:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;21033:124:::0;;:::o;16633:28::-;;;;:::o;16314:31::-;;;;;;;;;;;;;:::o;3368:177::-;3487:7;3519:9;:18;3529:7;3519:18;;;;;;;;;;;;;;;;3512:25;;3368:177;;;:::o;941:103::-;864:12;:10;:12::i;:::-;853:23;;:7;:5;:7::i;:::-;:23;;;845:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1006:30:::1;1033:1;1006:18;:30::i;:::-;941:103::o:0;16133:20::-;;;;:::o;16563:30::-;;;;:::o;718:87::-;764:7;791:6;;;;;;;;;;;784:13;;718:87;:::o;16100:24::-;;;;;;;;;;;;;:::o;16668:31::-;;;;:::o;21165:100::-;864:12;:10;:12::i;:::-;853:23;;:7;:5;:7::i;:::-;:23;;;845:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21250:7:::1;21236:11;;:21;;;;;;;;;;;;;;;;;;21165:100:::0;:::o;3039:104::-;3095:13;3128:7;3121:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3039:104;:::o;19512:134::-;19571:4;864:12;:10;:12::i;:::-;853:23;;:7;:5;:7::i;:::-;:23;;;845:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19611:5:::1;19588:20;;:28;;;;;;;;;;;;;;;;;;19634:4;19627:11;;19512:134:::0;:::o;22491:304::-;864:12;:10;:12::i;:::-;853:23;;:7;:5;:7::i;:::-;:23;;;845:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22635:13:::1;;;;;;;;;;;22627:21;;:4;:21;;::::0;22605:128:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22746:41;22775:4;22781:5;22746:28;:41::i;:::-;22491:304:::0;;:::o;19376:128::-;19435:4;864:12;:10;:12::i;:::-;853:23;;:7;:5;:7::i;:::-;:23;;;845:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19469:5:::1;19452:14;;:22;;;;;;;;;;;;;;;;;;19492:4;19485:11;;19376:128:::0;;;:::o;16600:24::-;;;;:::o;16778:27::-;;;;:::o;16706:25::-;;;;:::o;5046:482::-;5166:4;5188:24;5215:11;:25;5227:12;:10;:12::i;:::-;5215:25;;;;;;;;;;;;;;;:34;5241:7;5215:34;;;;;;;;;;;;;;;;5188:61;;5302:15;5282:16;:35;;5260:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;5418:67;5427:12;:10;:12::i;:::-;5441:7;5469:15;5450:16;:34;5418:8;:67::i;:::-;5516:4;5509:11;;;5046:482;;;;:::o;16064:29::-;;;;;;;;;;;;;:::o;3553:216::-;3675:4;3697:42;3707:12;:10;:12::i;:::-;3721:9;3732:6;3697:9;:42::i;:::-;3757:4;3750:11;;3553:216;;;;:::o;21691:602::-;864:12;:10;:12::i;:::-;853:23;;:7;:5;:7::i;:::-;:23;;;845:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21902:16:::1;21884:15;:34;;;;21941:10;21929:9;:22;;;;21995:9;;21977:15;;:27;;;;:::i;:::-;21962:12;:42;;;;22034:17;22015:16;:36;;;;22075:11;22062:10;:24;;;;22132:10;;22113:16;;:29;;;;:::i;:::-;22097:13;:45;;;;22177:2;22161:12;;:18;;22153:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;22249:2;22232:13;;:19;;22224:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;21691:602:::0;;;;:::o;21471:102::-;864:12;:10;:12::i;:::-;853:23;;:7;:5;:7::i;:::-;:23;;;845:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21561:4:::1;21540:12;:18;21553:4;21540:18;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;21471:102:::0;:::o;16982:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;27778:259::-;27858:14;;;;;;;;;;;27842:30;;:12;:10;:12::i;:::-;:30;;;27834:39;;;;;;27916:24;27934:4;27916:9;:24::i;:::-;27906:6;:34;;:48;;;;;27953:1;27944:6;:10;27906:48;27884:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;28005:24;28022:6;28005:16;:24::i;:::-;27778:259;:::o;16274:33::-;;;;;;;;;;;;;:::o;22301:182::-;864:12;:10;:12::i;:::-;853:23;;:7;:5;:7::i;:::-;:23;;;845:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22417:8:::1;22386:19;:28;22406:7;22386:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;22457:7;22441:34;;;22466:8;22441:34;;;;;;:::i;:::-;;;;;;;;22301:182:::0;;:::o;16480:40::-;;;;;;;;;;;;;:::o;19654:497::-;19762:4;864:12;:10;:12::i;:::-;853:23;;:7;:5;:7::i;:::-;:23;;;845:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19841:6:::1;19836:1;19820:13;:11;:13::i;:::-;:17;;;;:::i;:::-;19819:28;;;;:::i;:::-;19806:9;:41;;19784:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;19996:4;19991:1;19975:13;:11;:13::i;:::-;:17;;;;:::i;:::-;19974:26;;;;:::i;:::-;19961:9;:39;;19939:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;20112:9;20091:18;:30;;;;20139:4;20132:11;;19654:497:::0;;;:::o;16529:27::-;;;;:::o;3777:201::-;3911:7;3943:11;:18;3955:5;3943:18;;;;;;;;;;;;;;;:27;3962:7;3943:27;;;;;;;;;;;;;;;;3936:34;;3777:201;;;;:::o;16160:33::-;;;;:::o;16925:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;20403:253::-;864:12;:10;:12::i;:::-;853:23;;:7;:5;:7::i;:::-;:23;;;845:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20538:4:::1;20530;20525:1;20509:13;:11;:13::i;:::-;:17;;;;:::i;:::-;20508:26;;;;:::i;:::-;20507:35;;;;:::i;:::-;20497:6;:45;;20475:132;;;;;;;;;;;;:::i;:::-;;;;;;;;;20641:6;20631;:17;;;;:::i;:::-;20618:10;:30;;;;20403:253:::0;:::o;1052:238::-;864:12;:10;:12::i;:::-;853:23;;:7;:5;:7::i;:::-;:23;;;845:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1175:1:::1;1155:22;;:8;:22;;::::0;1133:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;1254:28;1273:8;1254:18;:28::i;:::-;1052:238:::0;:::o;20159:236::-;864:12;:10;:12::i;:::-;853:23;;:7;:5;:7::i;:::-;:23;;;845:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20287:4:::1;20279;20274:1;20258:13;:11;:13::i;:::-;:17;;;;:::i;:::-;20257:26;;;;:::i;:::-;20256:35;;;;:::i;:::-;20246:6;:45;;20224:127;;;;;;;;;;;;:::i;:::-;;;;;;;;;20380:6;20370;:17;;;;:::i;:::-;20362:5;:25;;;;20159:236:::0;:::o;239:98::-;292:7;319:10;312:17;;239:98;:::o;7320:380::-;7473:1;7456:19;;:5;:19;;;7448:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7554:1;7535:21;;:7;:21;;;7527:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7638:6;7608:11;:18;7620:5;7608:18;;;;;;;;;;;;;;;:27;7627:7;7608:27;;;;;;;;;;;;;;;:36;;;;7676:7;7660:32;;7669:5;7660:32;;;7685:6;7660:32;;;;;;:::i;:::-;;;;;;;;7320:380;;;:::o;23175:4480::-;23323:1;23307:18;;:4;:18;;;23299:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23400:1;23386:16;;:2;:16;;;23378:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;23462:12;:18;23475:4;23462:18;;;;;;;;;;;;;;;;;;;;;;;;;23461:19;23453:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;23522:12;:16;23535:2;23522:16;;;;;;;;;;;;;;;;;;;;;;;;;23521:17;23513:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;23585:1;23575:6;:11;23571:93;;23603:28;23619:4;23625:2;23629:1;23603:15;:28::i;:::-;23646:7;;23571:93;23680:14;;;;;;;;;;;23676:2302;;;23741:7;:5;:7::i;:::-;23733:15;;:4;:15;;;;:49;;;;;23775:7;:5;:7::i;:::-;23769:13;;:2;:13;;;;23733:49;:86;;;;;23817:1;23803:16;;:2;:16;;;;23733:86;:128;;;;;23854:6;23840:21;;:2;:21;;;;23733:128;:158;;;;;23883:8;;;;;;;;;;;23882:9;23733:158;23711:2256;;;23931:13;;;;;;;;;;;23926:223;;24003:19;:25;24023:4;24003:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;24032:19;:23;24052:2;24032:23;;;;;;;;;;;;;;;;;;;;;;;;;24003:52;23969:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;23926:223;24305:20;;;;;;;;;;;24301:641;;;24386:7;:5;:7::i;:::-;24380:13;;:2;:13;;;;:72;;;;;24436:15;24422:30;;:2;:30;;;;24380:72;:129;;;;;24495:13;;;;;;;;;;;24481:28;;:2;:28;;;;24380:129;24350:573;;;24673:12;24598:28;:39;24627:9;24598:39;;;;;;;;;;;;;;;;:87;24560:258;;;;;;;;;;;;:::i;:::-;;;;;;;;;24887:12;24845:28;:39;24874:9;24845:39;;;;;;;;;;;;;;;:54;;;;24350:573;24301:641;24994:25;:31;25020:4;24994:31;;;;;;;;;;;;;;;;;;;;;;;;;:56;;;;;25030:16;:20;25047:2;25030:20;;;;;;;;;;;;;;;;;;;;;;;;;25029:21;24994:56;24990:962;;;25119:5;;25109:6;:15;;25075:139;;;;;;;;;;;;:::i;:::-;;;;;;;;;25297:10;;25280:13;25290:2;25280:9;:13::i;:::-;25271:6;:22;;;;:::i;:::-;:36;;25237:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;24990:962;;;25476:25;:29;25502:2;25476:29;;;;;;;;;;;;;;;;;;;;;;;;;:56;;;;;25510:16;:22;25527:4;25510:22;;;;;;;;;;;;;;;;;;;;;;;;;25509:23;25476:56;25450:502;;;25619:5;;25609:6;:15;;25575:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;25450:502;;;25746:16;:20;25763:2;25746:20;;;;;;;;;;;;;;;;;;;;;;;;;25741:211;;25851:10;;25834:13;25844:2;25834:9;:13::i;:::-;25825:6;:22;;;;:::i;:::-;:36;;25791:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;25741:211;25450:502;24990:962;23711:2256;23676:2302;25990:28;26021:24;26039:4;26021:9;:24::i;:::-;25990:55;;26056:12;26095:18;;26071:20;:42;;26056:57;;26144:7;:35;;;;;26168:11;;;;;;;;;;;26144:35;:61;;;;;26197:8;;;;;;;;;;;26196:9;26144:61;:110;;;;;26223:25;:31;26249:4;26223:31;;;;;;;;;;;;;;;;;;;;;;;;;26222:32;26144:110;:153;;;;;26272:19;:25;26292:4;26272:25;;;;;;;;;;;;;;;;;;;;;;;;;26271:26;26144:153;:194;;;;;26315:19;:23;26335:2;26315:23;;;;;;;;;;;;;;;;;;;;;;;;;26314:24;26144:194;26126:326;;;26376:4;26365:8;;:15;;;;;;;;;;;;;;;;;;26397:10;:8;:10::i;:::-;26435:5;26424:8;;:16;;;;;;;;;;;;;;;;;;26126:326;26464:12;26480:8;;;;;;;;;;;26479:9;26464:24;;26590:19;:25;26610:4;26590:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;26619:19;:23;26639:2;26619:23;;;;;;;;;;;;;;;;;;;;;;;;;26590:52;26586:100;;;26669:5;26659:15;;26586:100;26698:12;26803:7;26799:803;;;26855:25;:29;26881:2;26855:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;26904:1;26888:13;;:17;26855:50;26851:602;;;26933:34;26963:3;26933:25;26944:13;;26933:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;26926:41;;27024:13;;27010:10;;27003:4;:17;;;;:::i;:::-;27002:35;;;;:::i;:::-;26986:12;;:51;;;;;;;:::i;:::-;;;;;;;;27104:13;;27084:16;;27077:4;:23;;;;:::i;:::-;27076:41;;;;:::i;:::-;27056:16;;:61;;;;;;;:::i;:::-;;;;;;;;26851:602;;;27179:25;:31;27205:4;27179:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;27229:1;27214:12;;:16;27179:51;27175:278;;;27258:33;27287:3;27258:24;27269:12;;27258:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;27251:40;;27347:12;;27334:9;;27327:4;:16;;;;:::i;:::-;27326:33;;;;:::i;:::-;27310:12;;:49;;;;;;;:::i;:::-;;;;;;;;27425:12;;27406:15;;27399:4;:22;;;;:::i;:::-;27398:39;;;;:::i;:::-;27378:16;;:59;;;;;;;:::i;:::-;;;;;;;;27175:278;26851:602;27480:1;27473:4;:8;27469:91;;;27502:42;27518:4;27532;27539;27502:15;:42::i;:::-;27469:91;27586:4;27576:14;;;;;:::i;:::-;;;26799:803;27614:33;27630:4;27636:2;27640:6;27614:15;:33::i;:::-;23288:4367;;;;23175:4480;;;;:::o;1298:191::-;1372:16;1391:6;;;;;;;;;;;1372:25;;1417:8;1408:6;;:17;;;;;;;;;;;;;;;;;;1472:8;1441:40;;1462:8;1441:40;;;;;;;;;;;;1361:128;1298:191;:::o;22803:188::-;22920:5;22886:25;:31;22912:4;22886:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;22977:5;22943:40;;22971:4;22943:40;;;;;;;;;;;;22803:188;;:::o;28045:529::-;28111:21;28149:1;28135:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28111:40;;28180:4;28162;28167:1;28162:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;28206:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28196:4;28201:1;28196:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;28241:62;28258:4;28273:15;28291:11;28241:8;:62::i;:::-;28342:15;:66;;;28423:11;28449:1;28493:4;28520;28540:15;28342:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28100:474;28045:529;:::o;5536:770::-;5694:1;5676:20;;:6;:20;;;5668:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;5778:1;5757:23;;:9;:23;;;5749:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;5833:47;5854:6;5862:9;5873:6;5833:20;:47::i;:::-;5893:21;5917:9;:17;5927:6;5917:17;;;;;;;;;;;;;;;;5893:41;;5984:6;5967:13;:23;;5945:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;6128:6;6112:13;:22;6092:9;:17;6102:6;6092:17;;;;;;;;;;;;;;;:42;;;;6180:6;6156:9;:20;6166:9;6156:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;6221:9;6204:35;;6213:6;6204:35;;;6232:6;6204:35;;;;;;:::i;:::-;;;;;;;;6252:46;6272:6;6280:9;6291:6;6252:19;:46::i;:::-;5657:649;5536:770;;;:::o;28582:897::-;28621:23;28647:24;28665:4;28647:9;:24::i;:::-;28621:50;;28682:25;28729:12;;28710:16;;:31;;;;:::i;:::-;28682:59;;28752:12;28800:1;28781:15;:20;28777:59;;28818:7;;;;;28777:59;28891:2;28870:18;;:23;;;;:::i;:::-;28852:15;:41;28848:115;;;28949:2;28928:18;;:23;;;;:::i;:::-;28910:41;;28848:115;28975:25;29003:21;28975:49;;29035:33;29052:15;29035:16;:33::i;:::-;29081:18;29102:44;29128:17;29102:21;:25;;:44;;;;:::i;:::-;29081:65;;29157:17;29177:51;29210:17;29177:28;29192:12;;29177:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;29157:71;;29260:1;29241:16;:20;;;;29287:1;29272:12;:16;;;;29323:9;;;;;;;;;;;29315:23;;29346:9;29315:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29301:59;;;;;29393:14;;;;;;;;;;;29385:28;;29435:21;29385:86;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29371:100;;;;;28610:869;;;;;;28582:897;:::o;9484:98::-;9542:7;9573:1;9569;:5;;;;:::i;:::-;9562:12;;9484:98;;;;:::o;9590:::-;9648:7;9679:1;9675;:5;;;;:::i;:::-;9668:12;;9590:98;;;;:::o;7708:125::-;;;;:::o;7841:124::-;;;;:::o;9378:98::-;9436:7;9467:1;9463;:5;;;;:::i;:::-;9456:12;;9378: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;1242:75::-;1275:6;1308:2;1302:9;1292:19;;1242:75;:::o;1323:117::-;1432:1;1429;1422:12;1446:117;1555:1;1552;1545: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:117::-;6090:1;6087;6080:12;6104:180;6152:77;6149:1;6142:88;6249:4;6246:1;6239:15;6273:4;6270:1;6263:15;6290:281;6373:27;6395:4;6373:27;:::i;:::-;6365:6;6361:40;6503:6;6491:10;6488:22;6467:18;6455:10;6452:34;6449:62;6446:88;;;6514:18;;:::i;:::-;6446:88;6554:10;6550:2;6543:22;6333:238;6290:281;;:::o;6577:129::-;6611:6;6638:20;;:::i;:::-;6628:30;;6667:33;6695:4;6687:6;6667:33;:::i;:::-;6577:129;;;:::o;6712:311::-;6789:4;6879:18;6871:6;6868:30;6865:56;;;6901:18;;:::i;:::-;6865:56;6951:4;6943:6;6939:17;6931:25;;7011:4;7005;7001:15;6993:23;;6712:311;;;:::o;7029:117::-;7138:1;7135;7128:12;7169:710;7265:5;7290:81;7306:64;7363:6;7306:64;:::i;:::-;7290:81;:::i;:::-;7281:90;;7391:5;7420:6;7413:5;7406:21;7454:4;7447:5;7443:16;7436:23;;7507:4;7499:6;7495:17;7487:6;7483:30;7536:3;7528:6;7525:15;7522:122;;;7555:79;;:::i;:::-;7522:122;7670:6;7653:220;7687:6;7682:3;7679:15;7653:220;;;7762:3;7791:37;7824:3;7812:10;7791:37;:::i;:::-;7786:3;7779:50;7858:4;7853:3;7849:14;7842:21;;7729:144;7713:4;7708:3;7704:14;7697:21;;7653:220;;;7657:21;7271:608;;7169:710;;;;;:::o;7902:370::-;7973:5;8022:3;8015:4;8007:6;8003:17;7999:27;7989:122;;8030:79;;:::i;:::-;7989:122;8147:6;8134:20;8172:94;8262:3;8254:6;8247:4;8239:6;8235:17;8172:94;:::i;:::-;8163:103;;7979:293;7902:370;;;;:::o;8278:539::-;8362:6;8411:2;8399:9;8390:7;8386:23;8382:32;8379:119;;;8417:79;;:::i;:::-;8379:119;8565:1;8554:9;8550:17;8537:31;8595:18;8587:6;8584:30;8581:117;;;8617:79;;:::i;:::-;8581:117;8722:78;8792:7;8783:6;8772:9;8768:22;8722:78;:::i;:::-;8712:88;;8508:302;8278:539;;;;:::o;8823:86::-;8858:7;8898:4;8891:5;8887:16;8876:27;;8823:86;;;:::o;8915:112::-;8998:22;9014:5;8998:22;:::i;:::-;8993:3;8986:35;8915:112;;:::o;9033:214::-;9122:4;9160:2;9149:9;9145:18;9137:26;;9173:67;9237:1;9226:9;9222:17;9213:6;9173:67;:::i;:::-;9033:214;;;;:::o;9253:116::-;9323:21;9338:5;9323:21;:::i;:::-;9316:5;9313:32;9303:60;;9359:1;9356;9349:12;9303:60;9253:116;:::o;9375:133::-;9418:5;9456:6;9443:20;9434:29;;9472:30;9496:5;9472:30;:::i;:::-;9375:133;;;;:::o;9514:468::-;9579:6;9587;9636:2;9624:9;9615:7;9611:23;9607:32;9604:119;;;9642:79;;:::i;:::-;9604:119;9762:1;9787:53;9832:7;9823:6;9812:9;9808:22;9787:53;:::i;:::-;9777:63;;9733:117;9889:2;9915:50;9957:7;9948:6;9937:9;9933:22;9915:50;:::i;:::-;9905:60;;9860:115;9514:468;;;;;:::o;9988:323::-;10044:6;10093:2;10081:9;10072:7;10068:23;10064:32;10061:119;;;10099:79;;:::i;:::-;10061:119;10219:1;10244:50;10286:7;10277:6;10266:9;10262:22;10244:50;:::i;:::-;10234:60;;10190:114;9988:323;;;;:::o;10317:765::-;10403:6;10411;10419;10427;10476:3;10464:9;10455:7;10451:23;10447:33;10444:120;;;10483:79;;:::i;:::-;10444:120;10603:1;10628:53;10673:7;10664:6;10653:9;10649:22;10628:53;:::i;:::-;10618:63;;10574:117;10730:2;10756:53;10801:7;10792:6;10781:9;10777:22;10756:53;:::i;:::-;10746:63;;10701:118;10858:2;10884:53;10929:7;10920:6;10909:9;10905:22;10884:53;:::i;:::-;10874:63;;10829:118;10986:2;11012:53;11057:7;11048:6;11037:9;11033:22;11012:53;:::i;:::-;11002:63;;10957:118;10317:765;;;;;;;:::o;11088:329::-;11147:6;11196:2;11184:9;11175:7;11171:23;11167:32;11164:119;;;11202:79;;:::i;:::-;11164:119;11322:1;11347:53;11392:7;11383:6;11372:9;11368:22;11347:53;:::i;:::-;11337:63;;11293:117;11088:329;;;;:::o;11423:474::-;11491:6;11499;11548:2;11536:9;11527:7;11523:23;11519:32;11516:119;;;11554:79;;:::i;:::-;11516:119;11674:1;11699:53;11744:7;11735:6;11724:9;11720:22;11699:53;:::i;:::-;11689:63;;11645:117;11801:2;11827:53;11872:7;11863:6;11852:9;11848:22;11827:53;:::i;:::-;11817:63;;11772:118;11423:474;;;;;:::o;11903:182::-;12043:34;12039:1;12031:6;12027:14;12020:58;11903:182;:::o;12091:366::-;12233:3;12254:67;12318:2;12313:3;12254:67;:::i;:::-;12247:74;;12330:93;12419:3;12330:93;:::i;:::-;12448:2;12443:3;12439:12;12432:19;;12091:366;;;:::o;12463:419::-;12629:4;12667:2;12656:9;12652:18;12644:26;;12716:9;12710:4;12706:20;12702:1;12691:9;12687:17;12680:47;12744:131;12870:4;12744:131;:::i;:::-;12736:139;;12463:419;;;:::o;12888:180::-;12936:77;12933:1;12926:88;13033:4;13030:1;13023:15;13057:4;13054:1;13047:15;13074:320;13118:6;13155:1;13149:4;13145:12;13135:22;;13202:1;13196:4;13192:12;13223:18;13213:81;;13279:4;13271:6;13267:17;13257:27;;13213:81;13341:2;13333:6;13330:14;13310:18;13307:38;13304:84;;13360:18;;:::i;:::-;13304:84;13125:269;13074:320;;;:::o;13400:227::-;13540:34;13536:1;13528:6;13524:14;13517:58;13609:10;13604:2;13596:6;13592:15;13585:35;13400:227;:::o;13633:366::-;13775:3;13796:67;13860:2;13855:3;13796:67;:::i;:::-;13789:74;;13872:93;13961:3;13872:93;:::i;:::-;13990:2;13985:3;13981:12;13974:19;;13633:366;;;:::o;14005:419::-;14171:4;14209:2;14198:9;14194:18;14186:26;;14258:9;14252:4;14248:20;14244:1;14233:9;14229:17;14222:47;14286:131;14412:4;14286:131;:::i;:::-;14278:139;;14005:419;;;:::o;14430:180::-;14478:77;14475:1;14468:88;14575:4;14572:1;14565:15;14599:4;14596:1;14589:15;14616:180;14664:77;14661:1;14654:88;14761:4;14758:1;14751:15;14785:4;14782:1;14775:15;14802:191;14842:3;14861:20;14879:1;14861:20;:::i;:::-;14856:25;;14895:20;14913:1;14895:20;:::i;:::-;14890:25;;14938:1;14935;14931:9;14924:16;;14959:3;14956:1;14953:10;14950:36;;;14966:18;;:::i;:::-;14950:36;14802:191;;;;:::o;14999:244::-;15139:34;15135:1;15127:6;15123:14;15116:58;15208:27;15203:2;15195:6;15191:15;15184:52;14999:244;:::o;15249:366::-;15391:3;15412:67;15476:2;15471:3;15412:67;:::i;:::-;15405:74;;15488:93;15577:3;15488:93;:::i;:::-;15606:2;15601:3;15597:12;15590:19;;15249:366;;;:::o;15621:419::-;15787:4;15825:2;15814:9;15810:18;15802:26;;15874:9;15868:4;15864:20;15860:1;15849:9;15845:17;15838:47;15902:131;16028:4;15902:131;:::i;:::-;15894:139;;15621:419;;;:::o;16046:224::-;16186:34;16182:1;16174:6;16170:14;16163:58;16255:7;16250:2;16242:6;16238:15;16231:32;16046:224;:::o;16276:366::-;16418:3;16439:67;16503:2;16498:3;16439:67;:::i;:::-;16432:74;;16515:93;16604:3;16515:93;:::i;:::-;16633:2;16628:3;16624:12;16617:19;;16276:366;;;:::o;16648:419::-;16814:4;16852:2;16841:9;16837:18;16829:26;;16901:9;16895:4;16891:20;16887:1;16876:9;16872:17;16865:47;16929:131;17055:4;16929:131;:::i;:::-;16921:139;;16648:419;;;:::o;17073:179::-;17213:31;17209:1;17201:6;17197:14;17190:55;17073:179;:::o;17258:366::-;17400:3;17421:67;17485:2;17480:3;17421:67;:::i;:::-;17414:74;;17497:93;17586:3;17497:93;:::i;:::-;17615:2;17610:3;17606:12;17599:19;;17258:366;;;:::o;17630:419::-;17796:4;17834:2;17823:9;17819:18;17811:26;;17883:9;17877:4;17873:20;17869:1;17858:9;17854:17;17847:47;17911:131;18037:4;17911:131;:::i;:::-;17903:139;;17630:419;;;:::o;18055:162::-;18195:14;18191:1;18183:6;18179:14;18172:38;18055:162;:::o;18223:366::-;18365:3;18386:67;18450:2;18445:3;18386:67;:::i;:::-;18379:74;;18462:93;18551:3;18462:93;:::i;:::-;18580:2;18575:3;18571:12;18564:19;;18223:366;;;:::o;18595:419::-;18761:4;18799:2;18788:9;18784:18;18776:26;;18848:9;18842:4;18838:20;18834:1;18823:9;18819:17;18812:47;18876:131;19002:4;18876:131;:::i;:::-;18868:139;;18595:419;;;:::o;19020:410::-;19060:7;19083:20;19101:1;19083:20;:::i;:::-;19078:25;;19117:20;19135:1;19117:20;:::i;:::-;19112:25;;19172:1;19169;19165:9;19194:30;19212:11;19194:30;:::i;:::-;19183:41;;19373:1;19364:7;19360:15;19357:1;19354:22;19334:1;19327:9;19307:83;19284:139;;19403:18;;:::i;:::-;19284:139;19068:362;19020:410;;;;:::o;19436:180::-;19484:77;19481:1;19474:88;19581:4;19578:1;19571:15;19605:4;19602:1;19595:15;19622:185;19662:1;19679:20;19697:1;19679:20;:::i;:::-;19674:25;;19713:20;19731:1;19713:20;:::i;:::-;19708:25;;19752:1;19742:35;;19757:18;;:::i;:::-;19742:35;19799:1;19796;19792:9;19787:14;;19622:185;;;;:::o;19813:240::-;19953:34;19949:1;19941:6;19937:14;19930:58;20022:23;20017:2;20009:6;20005:15;19998:48;19813:240;:::o;20059:366::-;20201:3;20222:67;20286:2;20281:3;20222:67;:::i;:::-;20215:74;;20298:93;20387:3;20298:93;:::i;:::-;20416:2;20411:3;20407:12;20400:19;;20059:366;;;:::o;20431:419::-;20597:4;20635:2;20624:9;20620:18;20612:26;;20684:9;20678:4;20674:20;20670:1;20659:9;20655:17;20648:47;20712:131;20838:4;20712:131;:::i;:::-;20704:139;;20431:419;;;:::o;20856:239::-;20996:34;20992:1;20984:6;20980:14;20973:58;21065:22;21060:2;21052:6;21048:15;21041:47;20856:239;:::o;21101:366::-;21243:3;21264:67;21328:2;21323:3;21264:67;:::i;:::-;21257:74;;21340:93;21429:3;21340:93;:::i;:::-;21458:2;21453:3;21449:12;21442:19;;21101:366;;;:::o;21473:419::-;21639:4;21677:2;21666:9;21662:18;21654:26;;21726:9;21720:4;21716:20;21712:1;21701:9;21697:17;21690:47;21754:131;21880:4;21754:131;:::i;:::-;21746:139;;21473:419;;;:::o;21898:224::-;22038:34;22034:1;22026:6;22022:14;22015:58;22107:7;22102:2;22094:6;22090:15;22083:32;21898:224;:::o;22128:366::-;22270:3;22291:67;22355:2;22350:3;22291:67;:::i;:::-;22284:74;;22367:93;22456:3;22367:93;:::i;:::-;22485:2;22480:3;22476:12;22469:19;;22128:366;;;:::o;22500:419::-;22666:4;22704:2;22693:9;22689:18;22681:26;;22753:9;22747:4;22743:20;22739:1;22728:9;22724:17;22717:47;22781:131;22907:4;22781:131;:::i;:::-;22773:139;;22500:419;;;:::o;22925:225::-;23065:34;23061:1;23053:6;23049:14;23042:58;23134:8;23129:2;23121:6;23117:15;23110:33;22925:225;:::o;23156:366::-;23298:3;23319:67;23383:2;23378:3;23319:67;:::i;:::-;23312:74;;23395:93;23484:3;23395:93;:::i;:::-;23513:2;23508:3;23504:12;23497:19;;23156:366;;;:::o;23528:419::-;23694:4;23732:2;23721:9;23717:18;23709:26;;23781:9;23775:4;23771:20;23767:1;23756:9;23752:17;23745:47;23809:131;23935:4;23809:131;:::i;:::-;23801:139;;23528:419;;;:::o;23953:182::-;24093:34;24089:1;24081:6;24077:14;24070:58;23953:182;:::o;24141:366::-;24283:3;24304:67;24368:2;24363:3;24304:67;:::i;:::-;24297:74;;24380:93;24469:3;24380:93;:::i;:::-;24498:2;24493:3;24489:12;24482:19;;24141:366;;;:::o;24513:419::-;24679:4;24717:2;24706:9;24702:18;24694:26;;24766:9;24760:4;24756:20;24752:1;24741:9;24737:17;24730:47;24794:131;24920:4;24794:131;:::i;:::-;24786:139;;24513:419;;;:::o;24938:223::-;25078:34;25074:1;25066:6;25062:14;25055:58;25147:6;25142:2;25134:6;25130:15;25123:31;24938:223;:::o;25167:366::-;25309:3;25330:67;25394:2;25389:3;25330:67;:::i;:::-;25323:74;;25406:93;25495:3;25406:93;:::i;:::-;25524:2;25519:3;25515:12;25508:19;;25167:366;;;:::o;25539:419::-;25705:4;25743:2;25732:9;25728:18;25720:26;;25792:9;25786:4;25782:20;25778:1;25767:9;25763:17;25756:47;25820:131;25946:4;25820:131;:::i;:::-;25812:139;;25539:419;;;:::o;25964:221::-;26104:34;26100:1;26092:6;26088:14;26081:58;26173:4;26168:2;26160:6;26156:15;26149:29;25964:221;:::o;26191:366::-;26333:3;26354:67;26418:2;26413:3;26354:67;:::i;:::-;26347:74;;26430:93;26519:3;26430:93;:::i;:::-;26548:2;26543:3;26539:12;26532:19;;26191:366;;;:::o;26563:419::-;26729:4;26767:2;26756:9;26752:18;26744:26;;26816:9;26810:4;26806:20;26802:1;26791:9;26787:17;26780:47;26844:131;26970:4;26844:131;:::i;:::-;26836:139;;26563:419;;;:::o;26988:224::-;27128:34;27124:1;27116:6;27112:14;27105:58;27197:7;27192:2;27184:6;27180:15;27173:32;26988:224;:::o;27218:366::-;27360:3;27381:67;27445:2;27440:3;27381:67;:::i;:::-;27374:74;;27457:93;27546:3;27457:93;:::i;:::-;27575:2;27570:3;27566:12;27559:19;;27218:366;;;:::o;27590:419::-;27756:4;27794:2;27783:9;27779:18;27771:26;;27843:9;27837:4;27833:20;27829:1;27818:9;27814:17;27807:47;27871:131;27997:4;27871:131;:::i;:::-;27863:139;;27590:419;;;:::o;28015:222::-;28155:34;28151:1;28143:6;28139:14;28132:58;28224:5;28219:2;28211:6;28207:15;28200:30;28015:222;:::o;28243:366::-;28385:3;28406:67;28470:2;28465:3;28406:67;:::i;:::-;28399:74;;28482:93;28571:3;28482:93;:::i;:::-;28600:2;28595:3;28591:12;28584:19;;28243:366;;;:::o;28615:419::-;28781:4;28819:2;28808:9;28804:18;28796:26;;28868:9;28862:4;28858:20;28854:1;28843:9;28839:17;28832:47;28896:131;29022:4;28896:131;:::i;:::-;28888:139;;28615:419;;;:::o;29040:167::-;29180:19;29176:1;29168:6;29164:14;29157:43;29040:167;:::o;29213:366::-;29355:3;29376:67;29440:2;29435:3;29376:67;:::i;:::-;29369:74;;29452:93;29541:3;29452:93;:::i;:::-;29570:2;29565:3;29561:12;29554:19;;29213:366;;;:::o;29585:419::-;29751:4;29789:2;29778:9;29774:18;29766:26;;29838:9;29832:4;29828:20;29824:1;29813:9;29809:17;29802:47;29866:131;29992:4;29866:131;:::i;:::-;29858:139;;29585:419;;;:::o;30010:165::-;30150:17;30146:1;30138:6;30134:14;30127:41;30010:165;:::o;30181:366::-;30323:3;30344:67;30408:2;30403:3;30344:67;:::i;:::-;30337:74;;30420:93;30509:3;30420:93;:::i;:::-;30538:2;30533:3;30529:12;30522:19;;30181:366;;;:::o;30553:419::-;30719:4;30757:2;30746:9;30742:18;30734:26;;30806:9;30800:4;30796:20;30792:1;30781:9;30777:17;30770:47;30834:131;30960:4;30834:131;:::i;:::-;30826:139;;30553:419;;;:::o;30978:172::-;31118:24;31114:1;31106:6;31102:14;31095:48;30978:172;:::o;31156:366::-;31298:3;31319:67;31383:2;31378:3;31319:67;:::i;:::-;31312:74;;31395:93;31484:3;31395:93;:::i;:::-;31513:2;31508:3;31504:12;31497:19;;31156:366;;;:::o;31528:419::-;31694:4;31732:2;31721:9;31717:18;31709:26;;31781:9;31775:4;31771:20;31767:1;31756:9;31752:17;31745:47;31809:131;31935:4;31809:131;:::i;:::-;31801:139;;31528:419;;;:::o;31953:297::-;32093:34;32089:1;32081:6;32077:14;32070:58;32162:34;32157:2;32149:6;32145:15;32138:59;32231:11;32226:2;32218:6;32214:15;32207:36;31953:297;:::o;32256:366::-;32398:3;32419:67;32483:2;32478:3;32419:67;:::i;:::-;32412:74;;32495:93;32584:3;32495:93;:::i;:::-;32613:2;32608:3;32604:12;32597:19;;32256:366;;;:::o;32628:419::-;32794:4;32832:2;32821:9;32817:18;32809:26;;32881:9;32875:4;32871:20;32867:1;32856:9;32852:17;32845:47;32909:131;33035:4;32909:131;:::i;:::-;32901:139;;32628:419;;;:::o;33053:225::-;33193:34;33189:1;33181:6;33177:14;33170:58;33262:8;33257:2;33249:6;33245:15;33238:33;33053:225;:::o;33284:366::-;33426:3;33447:67;33511:2;33506:3;33447:67;:::i;:::-;33440:74;;33523:93;33612:3;33523:93;:::i;:::-;33641:2;33636:3;33632:12;33625:19;;33284:366;;;:::o;33656:419::-;33822:4;33860:2;33849:9;33845:18;33837:26;;33909:9;33903:4;33899:20;33895:1;33884:9;33880:17;33873:47;33937:131;34063:4;33937:131;:::i;:::-;33929:139;;33656:419;;;:::o;34081:169::-;34221:21;34217:1;34209:6;34205:14;34198:45;34081:169;:::o;34256:366::-;34398:3;34419:67;34483:2;34478:3;34419:67;:::i;:::-;34412:74;;34495:93;34584:3;34495:93;:::i;:::-;34613:2;34608:3;34604:12;34597:19;;34256:366;;;:::o;34628:419::-;34794:4;34832:2;34821:9;34817:18;34809:26;;34881:9;34875:4;34871:20;34867:1;34856:9;34852:17;34845:47;34909:131;35035:4;34909:131;:::i;:::-;34901:139;;34628:419;;;:::o;35053:226::-;35193:34;35189:1;35181:6;35177:14;35170:58;35262:9;35257:2;35249:6;35245:15;35238:34;35053:226;:::o;35285:366::-;35427:3;35448:67;35512:2;35507:3;35448:67;:::i;:::-;35441:74;;35524:93;35613:3;35524:93;:::i;:::-;35642:2;35637:3;35633:12;35626:19;;35285:366;;;:::o;35657:419::-;35823:4;35861:2;35850:9;35846:18;35838:26;;35910:9;35904:4;35900:20;35896:1;35885:9;35881:17;35874:47;35938:131;36064:4;35938:131;:::i;:::-;35930:139;;35657:419;;;:::o;36082:194::-;36122:4;36142:20;36160:1;36142:20;:::i;:::-;36137:25;;36176:20;36194:1;36176:20;:::i;:::-;36171:25;;36220:1;36217;36213:9;36205:17;;36244:1;36238:4;36235:11;36232:37;;;36249:18;;:::i;:::-;36232:37;36082:194;;;;:::o;36282:143::-;36339:5;36370:6;36364:13;36355:22;;36386:33;36413:5;36386:33;:::i;:::-;36282:143;;;;:::o;36431:351::-;36501:6;36550:2;36538:9;36529:7;36525:23;36521:32;36518:119;;;36556:79;;:::i;:::-;36518:119;36676:1;36701:64;36757:7;36748:6;36737:9;36733:22;36701:64;:::i;:::-;36691:74;;36647:128;36431:351;;;;:::o;36788:85::-;36833:7;36862:5;36851:16;;36788:85;;;:::o;36879:158::-;36937:9;36970:61;36988:42;36997:32;37023:5;36997:32;:::i;:::-;36988:42;:::i;:::-;36970:61;:::i;:::-;36957:74;;36879:158;;;:::o;37043:147::-;37138:45;37177:5;37138:45;:::i;:::-;37133:3;37126:58;37043:147;;:::o;37196:114::-;37263:6;37297:5;37291:12;37281:22;;37196:114;;;:::o;37316:184::-;37415:11;37449:6;37444:3;37437:19;37489:4;37484:3;37480:14;37465:29;;37316:184;;;;:::o;37506:132::-;37573:4;37596:3;37588:11;;37626:4;37621:3;37617:14;37609:22;;37506:132;;;:::o;37644:108::-;37721:24;37739:5;37721:24;:::i;:::-;37716:3;37709:37;37644:108;;:::o;37758:179::-;37827:10;37848:46;37890:3;37882:6;37848:46;:::i;:::-;37926:4;37921:3;37917:14;37903:28;;37758:179;;;;:::o;37943:113::-;38013:4;38045;38040:3;38036:14;38028:22;;37943:113;;;:::o;38092:732::-;38211:3;38240:54;38288:5;38240:54;:::i;:::-;38310:86;38389:6;38384:3;38310:86;:::i;:::-;38303:93;;38420:56;38470:5;38420:56;:::i;:::-;38499:7;38530:1;38515:284;38540:6;38537:1;38534:13;38515:284;;;38616:6;38610:13;38643:63;38702:3;38687:13;38643:63;:::i;:::-;38636:70;;38729:60;38782:6;38729:60;:::i;:::-;38719:70;;38575:224;38562:1;38559;38555:9;38550:14;;38515:284;;;38519:14;38815:3;38808:10;;38216:608;;;38092:732;;;;:::o;38830:831::-;39093:4;39131:3;39120:9;39116:19;39108:27;;39145:71;39213:1;39202:9;39198:17;39189:6;39145:71;:::i;:::-;39226:80;39302:2;39291:9;39287:18;39278:6;39226:80;:::i;:::-;39353:9;39347:4;39343:20;39338:2;39327:9;39323:18;39316:48;39381:108;39484:4;39475:6;39381:108;:::i;:::-;39373:116;;39499:72;39567:2;39556:9;39552:18;39543:6;39499:72;:::i;:::-;39581:73;39649:3;39638:9;39634:19;39625:6;39581:73;:::i;:::-;38830:831;;;;;;;;:::o;39667:225::-;39807:34;39803:1;39795:6;39791:14;39784:58;39876:8;39871:2;39863:6;39859:15;39852:33;39667:225;:::o;39898:366::-;40040:3;40061:67;40125:2;40120:3;40061:67;:::i;:::-;40054:74;;40137:93;40226:3;40137:93;:::i;:::-;40255:2;40250:3;40246:12;40239:19;;39898:366;;;:::o;40270:419::-;40436:4;40474:2;40463:9;40459:18;40451:26;;40523:9;40517:4;40513:20;40509:1;40498:9;40494:17;40487:47;40551:131;40677:4;40551:131;:::i;:::-;40543:139;;40270:419;;;:::o;40695:147::-;40796:11;40833:3;40818:18;;40695:147;;;;:::o;40848:114::-;;:::o;40968:398::-;41127:3;41148:83;41229:1;41224:3;41148:83;:::i;:::-;41141:90;;41240:93;41329:3;41240:93;:::i;:::-;41358:1;41353:3;41349:11;41342:18;;40968:398;;;:::o;41372:379::-;41556:3;41578:147;41721:3;41578:147;:::i;:::-;41571:154;;41742:3;41735:10;;41372:379;;;:::o

Swarm Source

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