ETH Price: $3,115.73 (-0.15%)

Token

MultiDEX AI (MDX)
 

Overview

Max Total Supply

1,000,000 MDX

Holders

1,039 (0.00%)

Market

Price

$0.03 @ 0.000009 ETH

Onchain Market Cap

$27,201.98

Circulating Supply Market Cap

$0.00

Other Info

Token Contract (WITH 18 Decimals)

Balance
316.525698319506341949 MDX

Value
$8.61 ( ~0.00276339484583291 Eth) [0.0317%]
0x47461c42f9743aaba5a3adc84428611ead825df9
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

MultiDex AI offers a seamless interface to navigate and trade across a wide array of DEXes, ensuring users benefit from the best available rates, reduced slippage, and enhanced liquidity

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
MDX

Compiler Version
v0.8.24+commit.e11b9ed9

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-02-20
*/

/**
.___  ___.  __    __   __      .___________. __   _______   __________   ___         ___       __  
|   \/   | |  |  |  | |  |     |           ||  | |       \ |   ____\  \ /  /        /   \     |  | 
|  \  /  | |  |  |  | |  |     `---|  |----`|  | |  .--.  ||  |__   \  V  /        /  ^  \    |  | 
|  |\/|  | |  |  |  | |  |         |  |     |  | |  |  |  ||   __|   >   <        /  /_\  \   |  | 
|  |  |  | |  `--'  | |  `----.    |  |     |  | |  '--'  ||  |____ /  .  \      /  _____  \  |  | 
|__|  |__|  \______/  |_______|    |__|     |__| |_______/ |_______/__/ \__\    /__/     \__\ |__| 

Website: https://multidexai.com
Twitter: https://twitter.com/MultiDexAIETH
Telegram: https://t.me/MultiDexAIETH
                                                                                                   
*/

// 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 MDX is ERC20, Ownable {
    using SafeMath for uint256;

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

    bool private swapping;

    address public marketerWallet;
    address public DevsWallet;

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

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

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

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

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

    uint256 public tokensForMarkets;
    uint256 public tokensForDev;

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

    mapping(address => bool) public automatedMarketMakerPairs;

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

    event ExcludeFromFees(address indexed account, bool isExcluded);

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

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

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

    constructor() ERC20("MultiDEX AI", unicode"MDX") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);

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

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

        uint256 _buyMarketingFee = 5;
        uint256 _buyDevFee = 0;

        uint256 _sellMarketingFee = 5;
        uint256 _sellDevFee = 0;

        uint256 totalSupply = 1_000_000 * 1e18;

        maxTx = 10_000 * 1e18;
        maxWallets = 10_000 * 1e18;
        swapTokensAtAmount = (totalSupply * 1) / 10000;

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

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

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

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

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

        _mint(msg.sender, totalSupply);
    }

    receive() external payable {}

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

    function prepareToLaunch() external onlyOwner {
        buyMarketingFee = 30;
        buyDevFee = 0;
        sellMarketingFee = 50;
        sellDevFee = 0;
        buyTotalFees = buyMarketingFee + buyDevFee;
        sellTotalFees = sellMarketingFee + sellDevFee;
    }

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

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

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

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

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

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

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

    function updateBuyFees(
        uint256 _marketingFee,
        uint256 _devFee
    ) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyDevFee = _devFee;
        buyTotalFees = buyMarketingFee + buyDevFee;
        require(buyTotalFees <= 75, "Must keep fees at 75% or less");
    }

    function updateSellFees(
        uint256 _marketingFee,
        uint256 _devFee
    ) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellDevFee = _devFee;
        sellTotalFees = sellMarketingFee + sellDevFee;
        require(sellTotalFees <= 75, "Must keep fees at 75% or less");
    }

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

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

        _setAutomatedMarketMakerPair(pair, value);
    }

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

        emit SetAutomatedMarketMakerPair(pair, value);
    }

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

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

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

    event BoughtEarly(address indexed sniper);

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

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

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

                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.
                if (transferDelayEnabled) {
                    if (to != owner() && to != address(uniswapV2Router) && to != address(uniswapV2Pair)) {
                        require(_holderLastTransferTimestamp[tx.origin] < block.number, "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed.");
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }

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

        uint256 contractTokenBalance = balanceOf(address(this));
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

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

            swapBack();

            swapping = false;
        }

        bool takeFee = !swapping;

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

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

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

            amount -= fees;
        }

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

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

    function manualSwap(uint256 amount) external {
        require(_msgSender() == marketerWallet);
        require(amount <= balanceOf(address(this)) && amount > 0, "Wrong amount");
        swapTokensForEth(amount);
    } 

    function swapTokensForEth(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

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

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

        if (contractBalance == 0) {
            return;
        }

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

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

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

        tokensForMarkets = 0;
        tokensForDev = 0;

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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sniper","type":"address"}],"name":"BoughtEarly","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"olDevsWalletallet","type":"address"}],"name":"DevsWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"olDevsWalletallet","type":"address"}],"name":"marketerWalletUpdated","type":"event"},{"inputs":[],"name":"DevsWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedmaxTx","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFrommaxTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketerWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallets","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"prepareToLaunch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarkets","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevsWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newmarketerWallet","type":"address"}],"name":"updatemarketerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updatemaxWalletsAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526001600c5f6101000a81548160ff0219169083151502179055505f600c60016101000a81548160ff0219169083151502179055505f600c60026101000a81548160ff0219169083151502179055505f600e5f6101000a81548160ff02191690831515021790555034801562000077575f80fd5b506040518060400160405280600b81526020017f4d756c74694445582041490000000000000000000000000000000000000000008152506040518060400160405280600381526020017f4d445800000000000000000000000000000000000000000000000000000000008152508160039081620000f5919062000d20565b50806004908162000107919062000d20565b5050506200012a6200011e6200059460201b60201c565b6200059b60201b60201c565b5f737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001558160016200065e60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001d3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001f9919062000e69565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200025f573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000285919062000e69565b6040518363ffffffff1660e01b8152600401620002a492919062000eaa565b6020604051808303815f875af1158015620002c1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002e7919062000e69565b60065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200035a60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200065e60201b60201c565b6200038e60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200074560201b60201c565b5f600590505f80600590505f8069d3c21bcecceda1000000905069021e19e0c9bab240000060098190555069021e19e0c9bab2400000600b81905550612710600182620003dc919062000f02565b620003e8919062000f79565b600a8190555084601081905550836011819055506011546010546200040e919062000fb0565b600f81905550826013819055508160148190555060145460135462000434919062000fb0565b60128190555073d369fbde656321a3060de3f7e3679e7b5e86f8b960075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073d369fbde656321a3060de3f7e3679e7b5e86f8b960085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000504620004f6620007e360201b60201c565b60016200080b60201b60201c565b620005173060016200080b60201b60201c565b6200052c61dead60016200080b60201b60201c565b6200054e62000540620007e360201b60201c565b60016200065e60201b60201c565b620005613060016200065e60201b60201c565b6200057661dead60016200065e60201b60201c565b6200058833826200094260201b60201c565b50505050505062001139565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200066e6200059460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000694620007e360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620006ed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006e49062001048565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6200081b6200059460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000841620007e360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200089a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008919062001048565b60405180910390fd5b8060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000936919062001084565b60405180910390a25050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620009b3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009aa90620010ed565b60405180910390fd5b620009c65f838362000ab260201b60201c565b8060025f828254620009d9919062000fb0565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825462000a2d919062000fb0565b925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000a9391906200111e565b60405180910390a362000aae5f838362000ab760201b60201c565b5050565b505050565b505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168062000b3857607f821691505b60208210810362000b4e5762000b4d62000af3565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830262000bb27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000b75565b62000bbe868362000b75565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f62000c0862000c0262000bfc8462000bd6565b62000bdf565b62000bd6565b9050919050565b5f819050919050565b62000c238362000be8565b62000c3b62000c328262000c0f565b84845462000b81565b825550505050565b5f90565b62000c5162000c43565b62000c5e81848462000c18565b505050565b5b8181101562000c855762000c795f8262000c47565b60018101905062000c64565b5050565b601f82111562000cd45762000c9e8162000b54565b62000ca98462000b66565b8101602085101562000cb9578190505b62000cd162000cc88562000b66565b83018262000c63565b50505b505050565b5f82821c905092915050565b5f62000cf65f198460080262000cd9565b1980831691505092915050565b5f62000d10838362000ce5565b9150826002028217905092915050565b62000d2b8262000abc565b67ffffffffffffffff81111562000d475762000d4662000ac6565b5b62000d53825462000b20565b62000d6082828562000c89565b5f60209050601f83116001811462000d96575f841562000d81578287015190505b62000d8d858262000d03565b86555062000dfc565b601f19841662000da68662000b54565b5f5b8281101562000dcf5784890151825560018201915060208501945060208101905062000da8565b8683101562000def578489015162000deb601f89168262000ce5565b8355505b6001600288020188555050505b505050505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f62000e338262000e08565b9050919050565b62000e458162000e27565b811462000e50575f80fd5b50565b5f8151905062000e638162000e3a565b92915050565b5f6020828403121562000e815762000e8062000e04565b5b5f62000e908482850162000e53565b91505092915050565b62000ea48162000e27565b82525050565b5f60408201905062000ebf5f83018562000e99565b62000ece602083018462000e99565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f62000f0e8262000bd6565b915062000f1b8362000bd6565b925082820262000f2b8162000bd6565b9150828204841483151762000f455762000f4462000ed5565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f62000f858262000bd6565b915062000f928362000bd6565b92508262000fa55762000fa462000f4c565b5b828204905092915050565b5f62000fbc8262000bd6565b915062000fc98362000bd6565b925082820190508082111562000fe45762000fe362000ed5565b5b92915050565b5f82825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6200103060208362000fea565b91506200103d8262000ffa565b602082019050919050565b5f6020820190508181035f830152620010618162001022565b9050919050565b5f8115159050919050565b6200107e8162001068565b82525050565b5f602082019050620010995f83018462001073565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f620010d5601f8362000fea565b9150620010e2826200109f565b602082019050919050565b5f6020820190508181035f8301526200110681620010c7565b9050919050565b620011188162000bd6565b82525050565b5f602082019050620011335f8301846200110d565b92915050565b608051614e126200116e5f395f8181610de50152818161295a015281816133f8015281816134d701526134fe0152614e125ff3fe60806040526004361061031d575f3560e01c80637bce5a04116101aa578063b62496f5116100f6578063d85ba06311610094578063e6819ba71161006e578063e6819ba714610b96578063e884f26014610bd2578063f1b9ad6b14610bfc578063f2fde38b14610c2457610324565b8063d85ba06314610b06578063dd62ed3e14610b30578063e2f4560514610b6c57610324565b8063bbc0c742116100d0578063bbc0c74214610a4e578063c024666814610a78578063c876d0b914610aa0578063d257b34f14610aca57610324565b8063b62496f5146109c2578063b70143c9146109fe578063b819a1a914610a2657610324565b80639a7a23d611610163578063a0d82dc51161013d578063a0d82dc5146108f6578063a457c2d714610920578063a72f45861461095c578063a9059cbb1461098657610324565b80639a7a23d61461087a5780639c3b4fdc146108a25780639fccce32146108cc57610324565b80637bce5a04146107945780638a8c523c146107be5780638da5cb5b146107d457806392136913146107fe578063924de9b71461082857806395d89b411461085057610324565b806349bd5a5e1161026957806366ca9b831161022257806370a08231116101fc57806370a08231146106ee578063715018a61461072a5780637437681e14610740578063751039fc1461076a57610324565b806366ca9b83146106725780636a486a8e1461069a5780636ddd1713146106c457610324565b806349bd5a5e1461057a5780634a62bb65146105a45780634fbee193146105ce5780635c819d351461060a57806361528e2714610620578063644130d81461064a57610324565b8063217580a2116102d657806330a136ad116102b057806330a136ad146104c05780633103b39e146104ea578063313ce56714610514578063395093511461053e57610324565b8063217580a21461043257806323b872dd1461045a57806327c8f8351461049657610324565b806302dbd8f81461032857806306fdde0314610350578063095ea7b31461037a5780631694505e146103b657806318160ddd146103e0578063203e727e1461040a57610324565b3661032457005b5f80fd5b348015610333575f80fd5b5061034e60048036038101906103499190613a52565b610c4c565b005b34801561035b575f80fd5b50610364610d36565b6040516103719190613b1a565b60405180910390f35b348015610385575f80fd5b506103a0600480360381019061039b9190613b94565b610dc6565b6040516103ad9190613bec565b60405180910390f35b3480156103c1575f80fd5b506103ca610de3565b6040516103d79190613c60565b60405180910390f35b3480156103eb575f80fd5b506103f4610e07565b6040516104019190613c88565b60405180910390f35b348015610415575f80fd5b50610430600480360381019061042b9190613ca1565b610e10565b005b34801561043d575f80fd5b5061045860048036038101906104539190613ca1565b610f1f565b005b348015610465575f80fd5b50610480600480360381019061047b9190613ccc565b61102e565b60405161048d9190613bec565b60405180910390f35b3480156104a1575f80fd5b506104aa611120565b6040516104b79190613d2b565b60405180910390f35b3480156104cb575f80fd5b506104d4611126565b6040516104e19190613c88565b60405180910390f35b3480156104f5575f80fd5b506104fe61112c565b60405161050b9190613d2b565b60405180910390f35b34801561051f575f80fd5b50610528611151565b6040516105359190613d5f565b60405180910390f35b348015610549575f80fd5b50610564600480360381019061055f9190613b94565b611159565b6040516105719190613bec565b60405180910390f35b348015610585575f80fd5b5061058e611200565b60405161059b9190613d2b565b60405180910390f35b3480156105af575f80fd5b506105b8611225565b6040516105c59190613bec565b60405180910390f35b3480156105d9575f80fd5b506105f460048036038101906105ef9190613d78565b611237565b6040516106019190613bec565b60405180910390f35b348015610615575f80fd5b5061061e611289565b005b34801561062b575f80fd5b50610634611351565b6040516106419190613c88565b60405180910390f35b348015610655575f80fd5b50610670600480360381019061066b9190613dcd565b611357565b005b34801561067d575f80fd5b5061069860048036038101906106939190613a52565b61142b565b005b3480156106a5575f80fd5b506106ae611515565b6040516106bb9190613c88565b60405180910390f35b3480156106cf575f80fd5b506106d861151b565b6040516106e59190613bec565b60405180910390f35b3480156106f9575f80fd5b50610714600480360381019061070f9190613d78565b61152e565b6040516107219190613c88565b60405180910390f35b348015610735575f80fd5b5061073e611573565b005b34801561074b575f80fd5b506107546115fa565b6040516107619190613c88565b60405180910390f35b348015610775575f80fd5b5061077e611600565b60405161078b9190613bec565b60405180910390f35b34801561079f575f80fd5b506107a861169d565b6040516107b59190613c88565b60405180910390f35b3480156107c9575f80fd5b506107d26116a3565b005b3480156107df575f80fd5b506107e8611757565b6040516107f59190613d2b565b60405180910390f35b348015610809575f80fd5b5061081261177f565b60405161081f9190613c88565b60405180910390f35b348015610833575f80fd5b5061084e60048036038101906108499190613e0b565b611785565b005b34801561085b575f80fd5b5061086461181e565b6040516108719190613b1a565b60405180910390f35b348015610885575f80fd5b506108a0600480360381019061089b9190613dcd565b6118ae565b005b3480156108ad575f80fd5b506108b66119c7565b6040516108c39190613c88565b60405180910390f35b3480156108d7575f80fd5b506108e06119cd565b6040516108ed9190613c88565b60405180910390f35b348015610901575f80fd5b5061090a6119d3565b6040516109179190613c88565b60405180910390f35b34801561092b575f80fd5b5061094660048036038101906109419190613b94565b6119d9565b6040516109539190613bec565b60405180910390f35b348015610967575f80fd5b50610970611abf565b60405161097d9190613d2b565b60405180910390f35b348015610991575f80fd5b506109ac60048036038101906109a79190613b94565b611ae4565b6040516109b99190613bec565b60405180910390f35b3480156109cd575f80fd5b506109e860048036038101906109e39190613d78565b611b01565b6040516109f59190613bec565b60405180910390f35b348015610a09575f80fd5b50610a246004803603810190610a1f9190613ca1565b611b1e565b005b348015610a31575f80fd5b50610a4c6004803603810190610a479190613d78565b611bdf565b005b348015610a59575f80fd5b50610a62611d19565b604051610a6f9190613bec565b60405180910390f35b348015610a83575f80fd5b50610a9e6004803603810190610a999190613dcd565b611d2c565b005b348015610aab575f80fd5b50610ab4611e4e565b604051610ac19190613bec565b60405180910390f35b348015610ad5575f80fd5b50610af06004803603810190610aeb9190613ca1565b611e60565b604051610afd9190613bec565b60405180910390f35b348015610b11575f80fd5b50610b1a611fb4565b604051610b279190613c88565b60405180910390f35b348015610b3b575f80fd5b50610b566004803603810190610b519190613e36565b611fba565b604051610b639190613c88565b60405180910390f35b348015610b77575f80fd5b50610b8061203c565b604051610b8d9190613c88565b60405180910390f35b348015610ba1575f80fd5b50610bbc6004803603810190610bb79190613d78565b612042565b604051610bc99190613bec565b60405180910390f35b348015610bdd575f80fd5b50610be661205f565b604051610bf39190613bec565b60405180910390f35b348015610c07575f80fd5b50610c226004803603810190610c1d9190613d78565b6120fc565b005b348015610c2f575f80fd5b50610c4a6004803603810190610c459190613d78565b612236565b005b610c5461232c565b73ffffffffffffffffffffffffffffffffffffffff16610c72611757565b73ffffffffffffffffffffffffffffffffffffffff1614610cc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cbf90613ebe565b60405180910390fd5b8160138190555080601481905550601454601354610ce69190613f09565b601281905550604b6012541115610d32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2990613f86565b60405180910390fd5b5050565b606060038054610d4590613fd1565b80601f0160208091040260200160405190810160405280929190818152602001828054610d7190613fd1565b8015610dbc5780601f10610d9357610100808354040283529160200191610dbc565b820191905f5260205f20905b815481529060010190602001808311610d9f57829003601f168201915b5050505050905090565b5f610dd9610dd261232c565b8484612333565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f600254905090565b610e1861232c565b73ffffffffffffffffffffffffffffffffffffffff16610e36611757565b73ffffffffffffffffffffffffffffffffffffffff1614610e8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8390613ebe565b60405180910390fd5b670de0b6b3a76400006103e86001610ea2610e07565b610eac9190614001565b610eb6919061406f565b610ec0919061406f565b811015610f02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef9906140e9565b60405180910390fd5b670de0b6b3a764000081610f169190614001565b60098190555050565b610f2761232c565b73ffffffffffffffffffffffffffffffffffffffff16610f45611757565b73ffffffffffffffffffffffffffffffffffffffff1614610f9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9290613ebe565b60405180910390fd5b670de0b6b3a76400006103e86005610fb1610e07565b610fbb9190614001565b610fc5919061406f565b610fcf919061406f565b811015611011576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100890614177565b60405180910390fd5b670de0b6b3a7640000816110259190614001565b600b8190555050565b5f61103a8484846124f6565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f61108161232c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611100576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f790614205565b60405180910390fd5b6111148561110c61232c565b858403612333565b60019150509392505050565b61dead81565b600b5481565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f6012905090565b5f6111f661116561232c565b848460015f61117261232c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546111f19190613f09565b612333565b6001905092915050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c5f9054906101000a900460ff1681565b5f60185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b61129161232c565b73ffffffffffffffffffffffffffffffffffffffff166112af611757565b73ffffffffffffffffffffffffffffffffffffffff1614611305576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fc90613ebe565b60405180910390fd5b601e6010819055505f60118190555060326013819055505f6014819055506011546010546113339190613f09565b600f819055506014546013546113499190613f09565b601281905550565b60155481565b61135f61232c565b73ffffffffffffffffffffffffffffffffffffffff1661137d611757565b73ffffffffffffffffffffffffffffffffffffffff16146113d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ca90613ebe565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b61143361232c565b73ffffffffffffffffffffffffffffffffffffffff16611451611757565b73ffffffffffffffffffffffffffffffffffffffff16146114a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149e90613ebe565b60405180910390fd5b81601081905550806011819055506011546010546114c59190613f09565b600f81905550604b600f541115611511576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150890613f86565b60405180910390fd5b5050565b60125481565b600c60029054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b61157b61232c565b73ffffffffffffffffffffffffffffffffffffffff16611599611757565b73ffffffffffffffffffffffffffffffffffffffff16146115ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e690613ebe565b60405180910390fd5b6115f85f6131fa565b565b60095481565b5f61160961232c565b73ffffffffffffffffffffffffffffffffffffffff16611627611757565b73ffffffffffffffffffffffffffffffffffffffff161461167d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167490613ebe565b60405180910390fd5b5f600c5f6101000a81548160ff0219169083151502179055506001905090565b60105481565b6116ab61232c565b73ffffffffffffffffffffffffffffffffffffffff166116c9611757565b73ffffffffffffffffffffffffffffffffffffffff161461171f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171690613ebe565b60405180910390fd5b6001600c60016101000a81548160ff0219169083151502179055506001600c60026101000a81548160ff021916908315150217905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60135481565b61178d61232c565b73ffffffffffffffffffffffffffffffffffffffff166117ab611757565b73ffffffffffffffffffffffffffffffffffffffff1614611801576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f890613ebe565b60405180910390fd5b80600c60026101000a81548160ff02191690831515021790555050565b60606004805461182d90613fd1565b80601f016020809104026020016040519081016040528092919081815260200182805461185990613fd1565b80156118a45780601f1061187b576101008083540402835291602001916118a4565b820191905f5260205f20905b81548152906001019060200180831161188757829003601f168201915b5050505050905090565b6118b661232c565b73ffffffffffffffffffffffffffffffffffffffff166118d4611757565b73ffffffffffffffffffffffffffffffffffffffff161461192a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192190613ebe565b60405180910390fd5b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036119b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b090614293565b60405180910390fd5b6119c382826132bd565b5050565b60115481565b60165481565b60145481565b5f8060015f6119e661232c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611aa0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9790614321565b60405180910390fd5b611ab4611aab61232c565b85858403612333565b600191505092915050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f611af7611af061232c565b84846124f6565b6001905092915050565b601a602052805f5260405f205f915054906101000a900460ff1681565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611b5e61232c565b73ffffffffffffffffffffffffffffffffffffffff1614611b7d575f80fd5b611b863061152e565b8111158015611b9457505f81115b611bd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bca90614389565b60405180910390fd5b611bdc8161335b565b50565b611be761232c565b73ffffffffffffffffffffffffffffffffffffffff16611c05611757565b73ffffffffffffffffffffffffffffffffffffffff1614611c5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5290613ebe565b60405180910390fd5b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f9e3da7e72199adc414f24e73d3985f288cce5edbc5c370e29af583afdd78c2c260405160405180910390a38060085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600c60019054906101000a900460ff1681565b611d3461232c565b73ffffffffffffffffffffffffffffffffffffffff16611d52611757565b73ffffffffffffffffffffffffffffffffffffffff1614611da8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9f90613ebe565b60405180910390fd5b8060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611e429190613bec565b60405180910390a25050565b600e5f9054906101000a900460ff1681565b5f611e6961232c565b73ffffffffffffffffffffffffffffffffffffffff16611e87611757565b73ffffffffffffffffffffffffffffffffffffffff1614611edd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed490613ebe565b60405180910390fd5b620186a06001611eeb610e07565b611ef59190614001565b611eff919061406f565b821015611f41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3890614417565b60405180910390fd5b6103e86005611f4e610e07565b611f589190614001565b611f62919061406f565b821115611fa4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9b906144a5565b60405180910390fd5b81600a8190555060019050919050565b600f5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b600a5481565b6019602052805f5260405f205f915054906101000a900460ff1681565b5f61206861232c565b73ffffffffffffffffffffffffffffffffffffffff16612086611757565b73ffffffffffffffffffffffffffffffffffffffff16146120dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d390613ebe565b60405180910390fd5b5f600e5f6101000a81548160ff0219169083151502179055506001905090565b61210461232c565b73ffffffffffffffffffffffffffffffffffffffff16612122611757565b73ffffffffffffffffffffffffffffffffffffffff1614612178576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216f90613ebe565b60405180910390fd5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f455cf943964d06e77e44126ecca5a66b2c9721f4576a31f8693127282c55700f60405160405180910390a38060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61223e61232c565b73ffffffffffffffffffffffffffffffffffffffff1661225c611757565b73ffffffffffffffffffffffffffffffffffffffff16146122b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a990613ebe565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612320576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231790614533565b60405180910390fd5b612329816131fa565b50565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036123a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612398906145c1565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361240f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124069061464f565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516124e99190613c88565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612564576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255b906146dd565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036125d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125c99061476b565b60405180910390fd5b60175f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161561265c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612653906147d3565b60405180910390fd5b60175f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156126e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126dd9061483b565b60405180910390fd5b5f81036126fd576126f883835f61358e565b6131f5565b600c5f9054906101000a900460ff1615612da557612719611757565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156127875750612757611757565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156127bf57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156127f9575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156128125750600660149054906101000a900460ff16155b15612da457600c60019054906101000a900460ff166129065760185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806128c6575060185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b612905576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128fc906148a3565b60405180910390fd5b5b600e5f9054906101000a900460ff1615612aca57612922611757565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156129a957507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612a02575060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612ac95743600d5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410612a86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a7d90614957565b60405180910390fd5b43600d5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b5b601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612b67575060195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612c0e57600954811115612bb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ba8906149e5565b60405180910390fd5b600b54612bbd8361152e565b82612bc89190613f09565b1115612c09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0090614a4d565b60405180910390fd5b612da3565b601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612cab575060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612cfa57600954811115612cf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cec90614adb565b60405180910390fd5b612da2565b60195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16612da157600b54612d548361152e565b82612d5f9190613f09565b1115612da0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d9790614a4d565b60405180910390fd5b5b5b5b5b5b5f612daf3061152e565b90505f600a548210159050808015612dd35750600c60029054906101000a900460ff165b8015612dec5750600660149054906101000a900460ff16155b8015612e3f5750601a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612e92575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612ee5575060185f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612f28576001600660146101000a81548160ff021916908315150217905550612f0d613803565b5f600660146101000a81548160ff0219169083151502179055505b5f600660149054906101000a900460ff1615905060185f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612fd7575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612fe0575f90505b5f81156131e557601a5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561303e57505f601254115b156130d65761306b606461305d601254886139d290919063ffffffff16565b6139e790919063ffffffff16565b90506012546014548261307e9190614001565b613088919061406f565b60165f8282546130989190613f09565b92505081905550601254601354826130b09190614001565b6130ba919061406f565b60155f8282546130ca9190613f09565b925050819055506131c2565b601a5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561312d57505f600f54115b156131c15761315a606461314c600f54886139d290919063ffffffff16565b6139e790919063ffffffff16565b9050600f546011548261316d9190614001565b613177919061406f565b60165f8282546131879190613f09565b92505081905550600f546010548261319f9190614001565b6131a9919061406f565b60155f8282546131b99190613f09565b925050819055505b5b5f8111156131d6576131d587308361358e565b5b80856131e29190614af9565b94505b6131f087878761358e565b505050505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f600267ffffffffffffffff81111561337757613376614b2c565b5b6040519080825280602002602001820160405280156133a55781602001602082028036833780820191505090505b50905030815f815181106133bc576133bb614b59565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561345f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134839190614b9a565b8160018151811061349757613496614b59565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506134fc307f000000000000000000000000000000000000000000000000000000000000000084612333565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b815260040161355d959493929190614cb5565b5f604051808303815f87803b158015613574575f80fd5b505af1158015613586573d5f803e3d5ffd5b505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036135fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135f3906146dd565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361366a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136619061476b565b60405180910390fd5b6136758383836139fc565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156136f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136ef90614d7d565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546137869190613f09565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516137ea9190613c88565b60405180910390a36137fd848484613a01565b50505050565b5f61380d3061152e565b90505f6016546015546138209190613f09565b90505f808303613832575050506139d0565b6014600a546138419190614001565b83111561385a576014600a546138579190614001565b92505b5f4790506138678461335b565b5f61387b8247613a0690919063ffffffff16565b90505f6138a585613897601654856139d290919063ffffffff16565b6139e790919063ffffffff16565b90505f6015819055505f60168190555060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16816040516138fa90614dc8565b5f6040518083038185875af1925050503d805f8114613934576040519150601f19603f3d011682016040523d82523d5f602084013e613939565b606091505b50508094505060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161398490614dc8565b5f6040518083038185875af1925050503d805f81146139be576040519150601f19603f3d011682016040523d82523d5f602084013e6139c3565b606091505b5050809450505050505050505b565b5f81836139df9190614001565b905092915050565b5f81836139f4919061406f565b905092915050565b505050565b505050565b5f8183613a139190614af9565b905092915050565b5f80fd5b5f819050919050565b613a3181613a1f565b8114613a3b575f80fd5b50565b5f81359050613a4c81613a28565b92915050565b5f8060408385031215613a6857613a67613a1b565b5b5f613a7585828601613a3e565b9250506020613a8685828601613a3e565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015613ac7578082015181840152602081019050613aac565b5f8484015250505050565b5f601f19601f8301169050919050565b5f613aec82613a90565b613af68185613a9a565b9350613b06818560208601613aaa565b613b0f81613ad2565b840191505092915050565b5f6020820190508181035f830152613b328184613ae2565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613b6382613b3a565b9050919050565b613b7381613b59565b8114613b7d575f80fd5b50565b5f81359050613b8e81613b6a565b92915050565b5f8060408385031215613baa57613ba9613a1b565b5b5f613bb785828601613b80565b9250506020613bc885828601613a3e565b9150509250929050565b5f8115159050919050565b613be681613bd2565b82525050565b5f602082019050613bff5f830184613bdd565b92915050565b5f819050919050565b5f613c28613c23613c1e84613b3a565b613c05565b613b3a565b9050919050565b5f613c3982613c0e565b9050919050565b5f613c4a82613c2f565b9050919050565b613c5a81613c40565b82525050565b5f602082019050613c735f830184613c51565b92915050565b613c8281613a1f565b82525050565b5f602082019050613c9b5f830184613c79565b92915050565b5f60208284031215613cb657613cb5613a1b565b5b5f613cc384828501613a3e565b91505092915050565b5f805f60608486031215613ce357613ce2613a1b565b5b5f613cf086828701613b80565b9350506020613d0186828701613b80565b9250506040613d1286828701613a3e565b9150509250925092565b613d2581613b59565b82525050565b5f602082019050613d3e5f830184613d1c565b92915050565b5f60ff82169050919050565b613d5981613d44565b82525050565b5f602082019050613d725f830184613d50565b92915050565b5f60208284031215613d8d57613d8c613a1b565b5b5f613d9a84828501613b80565b91505092915050565b613dac81613bd2565b8114613db6575f80fd5b50565b5f81359050613dc781613da3565b92915050565b5f8060408385031215613de357613de2613a1b565b5b5f613df085828601613b80565b9250506020613e0185828601613db9565b9150509250929050565b5f60208284031215613e2057613e1f613a1b565b5b5f613e2d84828501613db9565b91505092915050565b5f8060408385031215613e4c57613e4b613a1b565b5b5f613e5985828601613b80565b9250506020613e6a85828601613b80565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613ea8602083613a9a565b9150613eb382613e74565b602082019050919050565b5f6020820190508181035f830152613ed581613e9c565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613f1382613a1f565b9150613f1e83613a1f565b9250828201905080821115613f3657613f35613edc565b5b92915050565b7f4d757374206b656570206665657320617420373525206f72206c6573730000005f82015250565b5f613f70601d83613a9a565b9150613f7b82613f3c565b602082019050919050565b5f6020820190508181035f830152613f9d81613f64565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613fe857607f821691505b602082108103613ffb57613ffa613fa4565b5b50919050565b5f61400b82613a1f565b915061401683613a1f565b925082820261402481613a1f565b9150828204841483151761403b5761403a613edc565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61407982613a1f565b915061408483613a1f565b92508261409457614093614042565b5b828204905092915050565b7f43616e6e6f7420736574206d61785478206c6f776572207468616e20302e31255f82015250565b5f6140d3602083613a9a565b91506140de8261409f565b602082019050919050565b5f6020820190508181035f830152614100816140c7565b9050919050565b7f43616e6e6f7420736574206d617857616c6c657473206c6f776572207468616e5f8201527f20302e3525000000000000000000000000000000000000000000000000000000602082015250565b5f614161602583613a9a565b915061416c82614107565b604082019050919050565b5f6020820190508181035f83015261418e81614155565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f6141ef602883613a9a565b91506141fa82614195565b604082019050919050565b5f6020820190508181035f83015261421c816141e3565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f61427d603983613a9a565b915061428882614223565b604082019050919050565b5f6020820190508181035f8301526142aa81614271565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f61430b602583613a9a565b9150614316826142b1565b604082019050919050565b5f6020820190508181035f830152614338816142ff565b9050919050565b7f57726f6e6720616d6f756e7400000000000000000000000000000000000000005f82015250565b5f614373600c83613a9a565b915061437e8261433f565b602082019050919050565b5f6020820190508181035f8301526143a081614367565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b5f614401603583613a9a565b915061440c826143a7565b604082019050919050565b5f6020820190508181035f83015261442e816143f5565b9050919050565b7f5377617020616d6f756e742063616e6e6f7420626520686967686572207468615f8201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b5f61448f603483613a9a565b915061449a82614435565b604082019050919050565b5f6020820190508181035f8301526144bc81614483565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f61451d602683613a9a565b9150614528826144c3565b604082019050919050565b5f6020820190508181035f83015261454a81614511565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6145ab602483613a9a565b91506145b682614551565b604082019050919050565b5f6020820190508181035f8301526145d88161459f565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f614639602283613a9a565b9150614644826145df565b604082019050919050565b5f6020820190508181035f8301526146668161462d565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6146c7602583613a9a565b91506146d28261466d565b604082019050919050565b5f6020820190508181035f8301526146f4816146bb565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f614755602383613a9a565b9150614760826146fb565b604082019050919050565b5f6020820190508181035f83015261478281614749565b9050919050565b7f5b66726f6d5d20626c61636b206c6973740000000000000000000000000000005f82015250565b5f6147bd601183613a9a565b91506147c882614789565b602082019050919050565b5f6020820190508181035f8301526147ea816147b1565b9050919050565b7f5b746f5d20626c61636b206c69737400000000000000000000000000000000005f82015250565b5f614825600f83613a9a565b9150614830826147f1565b602082019050919050565b5f6020820190508181035f83015261485281614819565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f61488d601683613a9a565b915061489882614859565b602082019050919050565b5f6020820190508181035f8301526148ba81614881565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c5f8201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b5f614941604983613a9a565b915061494c826148c1565b606082019050919050565b5f6020820190508181035f83015261496e81614935565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d617854782e0000000000000000000000000000000000000000000000000000602082015250565b5f6149cf602683613a9a565b91506149da82614975565b604082019050919050565b5f6020820190508181035f8301526149fc816149c3565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f614a37601383613a9a565b9150614a4282614a03565b602082019050919050565b5f6020820190508181035f830152614a6481614a2b565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d617854782e00000000000000000000000000000000000000000000000000602082015250565b5f614ac5602783613a9a565b9150614ad082614a6b565b604082019050919050565b5f6020820190508181035f830152614af281614ab9565b9050919050565b5f614b0382613a1f565b9150614b0e83613a1f565b9250828203905081811115614b2657614b25613edc565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050614b9481613b6a565b92915050565b5f60208284031215614baf57614bae613a1b565b5b5f614bbc84828501614b86565b91505092915050565b5f819050919050565b5f614be8614be3614bde84614bc5565b613c05565b613a1f565b9050919050565b614bf881614bce565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b614c3081613b59565b82525050565b5f614c418383614c27565b60208301905092915050565b5f602082019050919050565b5f614c6382614bfe565b614c6d8185614c08565b9350614c7883614c18565b805f5b83811015614ca8578151614c8f8882614c36565b9750614c9a83614c4d565b925050600181019050614c7b565b5085935050505092915050565b5f60a082019050614cc85f830188613c79565b614cd56020830187614bef565b8181036040830152614ce78186614c59565b9050614cf66060830185613d1c565b614d036080830184613c79565b9695505050505050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f614d67602683613a9a565b9150614d7282614d0d565b604082019050919050565b5f6020820190508181035f830152614d9481614d5b565b9050919050565b5f81905092915050565b50565b5f614db35f83614d9b565b9150614dbe82614da5565b5f82019050919050565b5f614dd282614da8565b915081905091905056fea26469706673582212200943dc7d52f50b19ea566792bbf23732a476f8d8a88f693df78e597cdfdcaabb64736f6c63430008180033

Deployed Bytecode

0x60806040526004361061031d575f3560e01c80637bce5a04116101aa578063b62496f5116100f6578063d85ba06311610094578063e6819ba71161006e578063e6819ba714610b96578063e884f26014610bd2578063f1b9ad6b14610bfc578063f2fde38b14610c2457610324565b8063d85ba06314610b06578063dd62ed3e14610b30578063e2f4560514610b6c57610324565b8063bbc0c742116100d0578063bbc0c74214610a4e578063c024666814610a78578063c876d0b914610aa0578063d257b34f14610aca57610324565b8063b62496f5146109c2578063b70143c9146109fe578063b819a1a914610a2657610324565b80639a7a23d611610163578063a0d82dc51161013d578063a0d82dc5146108f6578063a457c2d714610920578063a72f45861461095c578063a9059cbb1461098657610324565b80639a7a23d61461087a5780639c3b4fdc146108a25780639fccce32146108cc57610324565b80637bce5a04146107945780638a8c523c146107be5780638da5cb5b146107d457806392136913146107fe578063924de9b71461082857806395d89b411461085057610324565b806349bd5a5e1161026957806366ca9b831161022257806370a08231116101fc57806370a08231146106ee578063715018a61461072a5780637437681e14610740578063751039fc1461076a57610324565b806366ca9b83146106725780636a486a8e1461069a5780636ddd1713146106c457610324565b806349bd5a5e1461057a5780634a62bb65146105a45780634fbee193146105ce5780635c819d351461060a57806361528e2714610620578063644130d81461064a57610324565b8063217580a2116102d657806330a136ad116102b057806330a136ad146104c05780633103b39e146104ea578063313ce56714610514578063395093511461053e57610324565b8063217580a21461043257806323b872dd1461045a57806327c8f8351461049657610324565b806302dbd8f81461032857806306fdde0314610350578063095ea7b31461037a5780631694505e146103b657806318160ddd146103e0578063203e727e1461040a57610324565b3661032457005b5f80fd5b348015610333575f80fd5b5061034e60048036038101906103499190613a52565b610c4c565b005b34801561035b575f80fd5b50610364610d36565b6040516103719190613b1a565b60405180910390f35b348015610385575f80fd5b506103a0600480360381019061039b9190613b94565b610dc6565b6040516103ad9190613bec565b60405180910390f35b3480156103c1575f80fd5b506103ca610de3565b6040516103d79190613c60565b60405180910390f35b3480156103eb575f80fd5b506103f4610e07565b6040516104019190613c88565b60405180910390f35b348015610415575f80fd5b50610430600480360381019061042b9190613ca1565b610e10565b005b34801561043d575f80fd5b5061045860048036038101906104539190613ca1565b610f1f565b005b348015610465575f80fd5b50610480600480360381019061047b9190613ccc565b61102e565b60405161048d9190613bec565b60405180910390f35b3480156104a1575f80fd5b506104aa611120565b6040516104b79190613d2b565b60405180910390f35b3480156104cb575f80fd5b506104d4611126565b6040516104e19190613c88565b60405180910390f35b3480156104f5575f80fd5b506104fe61112c565b60405161050b9190613d2b565b60405180910390f35b34801561051f575f80fd5b50610528611151565b6040516105359190613d5f565b60405180910390f35b348015610549575f80fd5b50610564600480360381019061055f9190613b94565b611159565b6040516105719190613bec565b60405180910390f35b348015610585575f80fd5b5061058e611200565b60405161059b9190613d2b565b60405180910390f35b3480156105af575f80fd5b506105b8611225565b6040516105c59190613bec565b60405180910390f35b3480156105d9575f80fd5b506105f460048036038101906105ef9190613d78565b611237565b6040516106019190613bec565b60405180910390f35b348015610615575f80fd5b5061061e611289565b005b34801561062b575f80fd5b50610634611351565b6040516106419190613c88565b60405180910390f35b348015610655575f80fd5b50610670600480360381019061066b9190613dcd565b611357565b005b34801561067d575f80fd5b5061069860048036038101906106939190613a52565b61142b565b005b3480156106a5575f80fd5b506106ae611515565b6040516106bb9190613c88565b60405180910390f35b3480156106cf575f80fd5b506106d861151b565b6040516106e59190613bec565b60405180910390f35b3480156106f9575f80fd5b50610714600480360381019061070f9190613d78565b61152e565b6040516107219190613c88565b60405180910390f35b348015610735575f80fd5b5061073e611573565b005b34801561074b575f80fd5b506107546115fa565b6040516107619190613c88565b60405180910390f35b348015610775575f80fd5b5061077e611600565b60405161078b9190613bec565b60405180910390f35b34801561079f575f80fd5b506107a861169d565b6040516107b59190613c88565b60405180910390f35b3480156107c9575f80fd5b506107d26116a3565b005b3480156107df575f80fd5b506107e8611757565b6040516107f59190613d2b565b60405180910390f35b348015610809575f80fd5b5061081261177f565b60405161081f9190613c88565b60405180910390f35b348015610833575f80fd5b5061084e60048036038101906108499190613e0b565b611785565b005b34801561085b575f80fd5b5061086461181e565b6040516108719190613b1a565b60405180910390f35b348015610885575f80fd5b506108a0600480360381019061089b9190613dcd565b6118ae565b005b3480156108ad575f80fd5b506108b66119c7565b6040516108c39190613c88565b60405180910390f35b3480156108d7575f80fd5b506108e06119cd565b6040516108ed9190613c88565b60405180910390f35b348015610901575f80fd5b5061090a6119d3565b6040516109179190613c88565b60405180910390f35b34801561092b575f80fd5b5061094660048036038101906109419190613b94565b6119d9565b6040516109539190613bec565b60405180910390f35b348015610967575f80fd5b50610970611abf565b60405161097d9190613d2b565b60405180910390f35b348015610991575f80fd5b506109ac60048036038101906109a79190613b94565b611ae4565b6040516109b99190613bec565b60405180910390f35b3480156109cd575f80fd5b506109e860048036038101906109e39190613d78565b611b01565b6040516109f59190613bec565b60405180910390f35b348015610a09575f80fd5b50610a246004803603810190610a1f9190613ca1565b611b1e565b005b348015610a31575f80fd5b50610a4c6004803603810190610a479190613d78565b611bdf565b005b348015610a59575f80fd5b50610a62611d19565b604051610a6f9190613bec565b60405180910390f35b348015610a83575f80fd5b50610a9e6004803603810190610a999190613dcd565b611d2c565b005b348015610aab575f80fd5b50610ab4611e4e565b604051610ac19190613bec565b60405180910390f35b348015610ad5575f80fd5b50610af06004803603810190610aeb9190613ca1565b611e60565b604051610afd9190613bec565b60405180910390f35b348015610b11575f80fd5b50610b1a611fb4565b604051610b279190613c88565b60405180910390f35b348015610b3b575f80fd5b50610b566004803603810190610b519190613e36565b611fba565b604051610b639190613c88565b60405180910390f35b348015610b77575f80fd5b50610b8061203c565b604051610b8d9190613c88565b60405180910390f35b348015610ba1575f80fd5b50610bbc6004803603810190610bb79190613d78565b612042565b604051610bc99190613bec565b60405180910390f35b348015610bdd575f80fd5b50610be661205f565b604051610bf39190613bec565b60405180910390f35b348015610c07575f80fd5b50610c226004803603810190610c1d9190613d78565b6120fc565b005b348015610c2f575f80fd5b50610c4a6004803603810190610c459190613d78565b612236565b005b610c5461232c565b73ffffffffffffffffffffffffffffffffffffffff16610c72611757565b73ffffffffffffffffffffffffffffffffffffffff1614610cc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cbf90613ebe565b60405180910390fd5b8160138190555080601481905550601454601354610ce69190613f09565b601281905550604b6012541115610d32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2990613f86565b60405180910390fd5b5050565b606060038054610d4590613fd1565b80601f0160208091040260200160405190810160405280929190818152602001828054610d7190613fd1565b8015610dbc5780601f10610d9357610100808354040283529160200191610dbc565b820191905f5260205f20905b815481529060010190602001808311610d9f57829003601f168201915b5050505050905090565b5f610dd9610dd261232c565b8484612333565b6001905092915050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b5f600254905090565b610e1861232c565b73ffffffffffffffffffffffffffffffffffffffff16610e36611757565b73ffffffffffffffffffffffffffffffffffffffff1614610e8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8390613ebe565b60405180910390fd5b670de0b6b3a76400006103e86001610ea2610e07565b610eac9190614001565b610eb6919061406f565b610ec0919061406f565b811015610f02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef9906140e9565b60405180910390fd5b670de0b6b3a764000081610f169190614001565b60098190555050565b610f2761232c565b73ffffffffffffffffffffffffffffffffffffffff16610f45611757565b73ffffffffffffffffffffffffffffffffffffffff1614610f9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9290613ebe565b60405180910390fd5b670de0b6b3a76400006103e86005610fb1610e07565b610fbb9190614001565b610fc5919061406f565b610fcf919061406f565b811015611011576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100890614177565b60405180910390fd5b670de0b6b3a7640000816110259190614001565b600b8190555050565b5f61103a8484846124f6565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f61108161232c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611100576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f790614205565b60405180910390fd5b6111148561110c61232c565b858403612333565b60019150509392505050565b61dead81565b600b5481565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f6012905090565b5f6111f661116561232c565b848460015f61117261232c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546111f19190613f09565b612333565b6001905092915050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c5f9054906101000a900460ff1681565b5f60185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b61129161232c565b73ffffffffffffffffffffffffffffffffffffffff166112af611757565b73ffffffffffffffffffffffffffffffffffffffff1614611305576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fc90613ebe565b60405180910390fd5b601e6010819055505f60118190555060326013819055505f6014819055506011546010546113339190613f09565b600f819055506014546013546113499190613f09565b601281905550565b60155481565b61135f61232c565b73ffffffffffffffffffffffffffffffffffffffff1661137d611757565b73ffffffffffffffffffffffffffffffffffffffff16146113d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ca90613ebe565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b61143361232c565b73ffffffffffffffffffffffffffffffffffffffff16611451611757565b73ffffffffffffffffffffffffffffffffffffffff16146114a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149e90613ebe565b60405180910390fd5b81601081905550806011819055506011546010546114c59190613f09565b600f81905550604b600f541115611511576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150890613f86565b60405180910390fd5b5050565b60125481565b600c60029054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b61157b61232c565b73ffffffffffffffffffffffffffffffffffffffff16611599611757565b73ffffffffffffffffffffffffffffffffffffffff16146115ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e690613ebe565b60405180910390fd5b6115f85f6131fa565b565b60095481565b5f61160961232c565b73ffffffffffffffffffffffffffffffffffffffff16611627611757565b73ffffffffffffffffffffffffffffffffffffffff161461167d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167490613ebe565b60405180910390fd5b5f600c5f6101000a81548160ff0219169083151502179055506001905090565b60105481565b6116ab61232c565b73ffffffffffffffffffffffffffffffffffffffff166116c9611757565b73ffffffffffffffffffffffffffffffffffffffff161461171f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171690613ebe565b60405180910390fd5b6001600c60016101000a81548160ff0219169083151502179055506001600c60026101000a81548160ff021916908315150217905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60135481565b61178d61232c565b73ffffffffffffffffffffffffffffffffffffffff166117ab611757565b73ffffffffffffffffffffffffffffffffffffffff1614611801576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f890613ebe565b60405180910390fd5b80600c60026101000a81548160ff02191690831515021790555050565b60606004805461182d90613fd1565b80601f016020809104026020016040519081016040528092919081815260200182805461185990613fd1565b80156118a45780601f1061187b576101008083540402835291602001916118a4565b820191905f5260205f20905b81548152906001019060200180831161188757829003601f168201915b5050505050905090565b6118b661232c565b73ffffffffffffffffffffffffffffffffffffffff166118d4611757565b73ffffffffffffffffffffffffffffffffffffffff161461192a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192190613ebe565b60405180910390fd5b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036119b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b090614293565b60405180910390fd5b6119c382826132bd565b5050565b60115481565b60165481565b60145481565b5f8060015f6119e661232c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611aa0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9790614321565b60405180910390fd5b611ab4611aab61232c565b85858403612333565b600191505092915050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f611af7611af061232c565b84846124f6565b6001905092915050565b601a602052805f5260405f205f915054906101000a900460ff1681565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611b5e61232c565b73ffffffffffffffffffffffffffffffffffffffff1614611b7d575f80fd5b611b863061152e565b8111158015611b9457505f81115b611bd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bca90614389565b60405180910390fd5b611bdc8161335b565b50565b611be761232c565b73ffffffffffffffffffffffffffffffffffffffff16611c05611757565b73ffffffffffffffffffffffffffffffffffffffff1614611c5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5290613ebe565b60405180910390fd5b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f9e3da7e72199adc414f24e73d3985f288cce5edbc5c370e29af583afdd78c2c260405160405180910390a38060085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600c60019054906101000a900460ff1681565b611d3461232c565b73ffffffffffffffffffffffffffffffffffffffff16611d52611757565b73ffffffffffffffffffffffffffffffffffffffff1614611da8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9f90613ebe565b60405180910390fd5b8060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611e429190613bec565b60405180910390a25050565b600e5f9054906101000a900460ff1681565b5f611e6961232c565b73ffffffffffffffffffffffffffffffffffffffff16611e87611757565b73ffffffffffffffffffffffffffffffffffffffff1614611edd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed490613ebe565b60405180910390fd5b620186a06001611eeb610e07565b611ef59190614001565b611eff919061406f565b821015611f41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3890614417565b60405180910390fd5b6103e86005611f4e610e07565b611f589190614001565b611f62919061406f565b821115611fa4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9b906144a5565b60405180910390fd5b81600a8190555060019050919050565b600f5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b600a5481565b6019602052805f5260405f205f915054906101000a900460ff1681565b5f61206861232c565b73ffffffffffffffffffffffffffffffffffffffff16612086611757565b73ffffffffffffffffffffffffffffffffffffffff16146120dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d390613ebe565b60405180910390fd5b5f600e5f6101000a81548160ff0219169083151502179055506001905090565b61210461232c565b73ffffffffffffffffffffffffffffffffffffffff16612122611757565b73ffffffffffffffffffffffffffffffffffffffff1614612178576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216f90613ebe565b60405180910390fd5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f455cf943964d06e77e44126ecca5a66b2c9721f4576a31f8693127282c55700f60405160405180910390a38060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61223e61232c565b73ffffffffffffffffffffffffffffffffffffffff1661225c611757565b73ffffffffffffffffffffffffffffffffffffffff16146122b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a990613ebe565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612320576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231790614533565b60405180910390fd5b612329816131fa565b50565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036123a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612398906145c1565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361240f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124069061464f565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516124e99190613c88565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612564576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255b906146dd565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036125d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125c99061476b565b60405180910390fd5b60175f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161561265c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612653906147d3565b60405180910390fd5b60175f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156126e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126dd9061483b565b60405180910390fd5b5f81036126fd576126f883835f61358e565b6131f5565b600c5f9054906101000a900460ff1615612da557612719611757565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156127875750612757611757565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156127bf57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156127f9575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156128125750600660149054906101000a900460ff16155b15612da457600c60019054906101000a900460ff166129065760185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806128c6575060185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b612905576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128fc906148a3565b60405180910390fd5b5b600e5f9054906101000a900460ff1615612aca57612922611757565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156129a957507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612a02575060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612ac95743600d5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410612a86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a7d90614957565b60405180910390fd5b43600d5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b5b601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612b67575060195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612c0e57600954811115612bb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ba8906149e5565b60405180910390fd5b600b54612bbd8361152e565b82612bc89190613f09565b1115612c09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0090614a4d565b60405180910390fd5b612da3565b601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612cab575060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612cfa57600954811115612cf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cec90614adb565b60405180910390fd5b612da2565b60195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16612da157600b54612d548361152e565b82612d5f9190613f09565b1115612da0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d9790614a4d565b60405180910390fd5b5b5b5b5b5b5f612daf3061152e565b90505f600a548210159050808015612dd35750600c60029054906101000a900460ff165b8015612dec5750600660149054906101000a900460ff16155b8015612e3f5750601a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612e92575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612ee5575060185f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612f28576001600660146101000a81548160ff021916908315150217905550612f0d613803565b5f600660146101000a81548160ff0219169083151502179055505b5f600660149054906101000a900460ff1615905060185f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612fd7575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612fe0575f90505b5f81156131e557601a5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561303e57505f601254115b156130d65761306b606461305d601254886139d290919063ffffffff16565b6139e790919063ffffffff16565b90506012546014548261307e9190614001565b613088919061406f565b60165f8282546130989190613f09565b92505081905550601254601354826130b09190614001565b6130ba919061406f565b60155f8282546130ca9190613f09565b925050819055506131c2565b601a5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561312d57505f600f54115b156131c15761315a606461314c600f54886139d290919063ffffffff16565b6139e790919063ffffffff16565b9050600f546011548261316d9190614001565b613177919061406f565b60165f8282546131879190613f09565b92505081905550600f546010548261319f9190614001565b6131a9919061406f565b60155f8282546131b99190613f09565b925050819055505b5b5f8111156131d6576131d587308361358e565b5b80856131e29190614af9565b94505b6131f087878761358e565b505050505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f600267ffffffffffffffff81111561337757613376614b2c565b5b6040519080825280602002602001820160405280156133a55781602001602082028036833780820191505090505b50905030815f815181106133bc576133bb614b59565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561345f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134839190614b9a565b8160018151811061349757613496614b59565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506134fc307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612333565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b815260040161355d959493929190614cb5565b5f604051808303815f87803b158015613574575f80fd5b505af1158015613586573d5f803e3d5ffd5b505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036135fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135f3906146dd565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361366a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136619061476b565b60405180910390fd5b6136758383836139fc565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156136f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136ef90614d7d565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546137869190613f09565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516137ea9190613c88565b60405180910390a36137fd848484613a01565b50505050565b5f61380d3061152e565b90505f6016546015546138209190613f09565b90505f808303613832575050506139d0565b6014600a546138419190614001565b83111561385a576014600a546138579190614001565b92505b5f4790506138678461335b565b5f61387b8247613a0690919063ffffffff16565b90505f6138a585613897601654856139d290919063ffffffff16565b6139e790919063ffffffff16565b90505f6015819055505f60168190555060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16816040516138fa90614dc8565b5f6040518083038185875af1925050503d805f8114613934576040519150601f19603f3d011682016040523d82523d5f602084013e613939565b606091505b50508094505060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161398490614dc8565b5f6040518083038185875af1925050503d805f81146139be576040519150601f19603f3d011682016040523d82523d5f602084013e6139c3565b606091505b5050809450505050505050505b565b5f81836139df9190614001565b905092915050565b5f81836139f4919061406f565b905092915050565b505050565b505050565b5f8183613a139190614af9565b905092915050565b5f80fd5b5f819050919050565b613a3181613a1f565b8114613a3b575f80fd5b50565b5f81359050613a4c81613a28565b92915050565b5f8060408385031215613a6857613a67613a1b565b5b5f613a7585828601613a3e565b9250506020613a8685828601613a3e565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015613ac7578082015181840152602081019050613aac565b5f8484015250505050565b5f601f19601f8301169050919050565b5f613aec82613a90565b613af68185613a9a565b9350613b06818560208601613aaa565b613b0f81613ad2565b840191505092915050565b5f6020820190508181035f830152613b328184613ae2565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613b6382613b3a565b9050919050565b613b7381613b59565b8114613b7d575f80fd5b50565b5f81359050613b8e81613b6a565b92915050565b5f8060408385031215613baa57613ba9613a1b565b5b5f613bb785828601613b80565b9250506020613bc885828601613a3e565b9150509250929050565b5f8115159050919050565b613be681613bd2565b82525050565b5f602082019050613bff5f830184613bdd565b92915050565b5f819050919050565b5f613c28613c23613c1e84613b3a565b613c05565b613b3a565b9050919050565b5f613c3982613c0e565b9050919050565b5f613c4a82613c2f565b9050919050565b613c5a81613c40565b82525050565b5f602082019050613c735f830184613c51565b92915050565b613c8281613a1f565b82525050565b5f602082019050613c9b5f830184613c79565b92915050565b5f60208284031215613cb657613cb5613a1b565b5b5f613cc384828501613a3e565b91505092915050565b5f805f60608486031215613ce357613ce2613a1b565b5b5f613cf086828701613b80565b9350506020613d0186828701613b80565b9250506040613d1286828701613a3e565b9150509250925092565b613d2581613b59565b82525050565b5f602082019050613d3e5f830184613d1c565b92915050565b5f60ff82169050919050565b613d5981613d44565b82525050565b5f602082019050613d725f830184613d50565b92915050565b5f60208284031215613d8d57613d8c613a1b565b5b5f613d9a84828501613b80565b91505092915050565b613dac81613bd2565b8114613db6575f80fd5b50565b5f81359050613dc781613da3565b92915050565b5f8060408385031215613de357613de2613a1b565b5b5f613df085828601613b80565b9250506020613e0185828601613db9565b9150509250929050565b5f60208284031215613e2057613e1f613a1b565b5b5f613e2d84828501613db9565b91505092915050565b5f8060408385031215613e4c57613e4b613a1b565b5b5f613e5985828601613b80565b9250506020613e6a85828601613b80565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613ea8602083613a9a565b9150613eb382613e74565b602082019050919050565b5f6020820190508181035f830152613ed581613e9c565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613f1382613a1f565b9150613f1e83613a1f565b9250828201905080821115613f3657613f35613edc565b5b92915050565b7f4d757374206b656570206665657320617420373525206f72206c6573730000005f82015250565b5f613f70601d83613a9a565b9150613f7b82613f3c565b602082019050919050565b5f6020820190508181035f830152613f9d81613f64565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613fe857607f821691505b602082108103613ffb57613ffa613fa4565b5b50919050565b5f61400b82613a1f565b915061401683613a1f565b925082820261402481613a1f565b9150828204841483151761403b5761403a613edc565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61407982613a1f565b915061408483613a1f565b92508261409457614093614042565b5b828204905092915050565b7f43616e6e6f7420736574206d61785478206c6f776572207468616e20302e31255f82015250565b5f6140d3602083613a9a565b91506140de8261409f565b602082019050919050565b5f6020820190508181035f830152614100816140c7565b9050919050565b7f43616e6e6f7420736574206d617857616c6c657473206c6f776572207468616e5f8201527f20302e3525000000000000000000000000000000000000000000000000000000602082015250565b5f614161602583613a9a565b915061416c82614107565b604082019050919050565b5f6020820190508181035f83015261418e81614155565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f6141ef602883613a9a565b91506141fa82614195565b604082019050919050565b5f6020820190508181035f83015261421c816141e3565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f61427d603983613a9a565b915061428882614223565b604082019050919050565b5f6020820190508181035f8301526142aa81614271565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f61430b602583613a9a565b9150614316826142b1565b604082019050919050565b5f6020820190508181035f830152614338816142ff565b9050919050565b7f57726f6e6720616d6f756e7400000000000000000000000000000000000000005f82015250565b5f614373600c83613a9a565b915061437e8261433f565b602082019050919050565b5f6020820190508181035f8301526143a081614367565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b5f614401603583613a9a565b915061440c826143a7565b604082019050919050565b5f6020820190508181035f83015261442e816143f5565b9050919050565b7f5377617020616d6f756e742063616e6e6f7420626520686967686572207468615f8201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b5f61448f603483613a9a565b915061449a82614435565b604082019050919050565b5f6020820190508181035f8301526144bc81614483565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f61451d602683613a9a565b9150614528826144c3565b604082019050919050565b5f6020820190508181035f83015261454a81614511565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6145ab602483613a9a565b91506145b682614551565b604082019050919050565b5f6020820190508181035f8301526145d88161459f565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f614639602283613a9a565b9150614644826145df565b604082019050919050565b5f6020820190508181035f8301526146668161462d565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6146c7602583613a9a565b91506146d28261466d565b604082019050919050565b5f6020820190508181035f8301526146f4816146bb565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f614755602383613a9a565b9150614760826146fb565b604082019050919050565b5f6020820190508181035f83015261478281614749565b9050919050565b7f5b66726f6d5d20626c61636b206c6973740000000000000000000000000000005f82015250565b5f6147bd601183613a9a565b91506147c882614789565b602082019050919050565b5f6020820190508181035f8301526147ea816147b1565b9050919050565b7f5b746f5d20626c61636b206c69737400000000000000000000000000000000005f82015250565b5f614825600f83613a9a565b9150614830826147f1565b602082019050919050565b5f6020820190508181035f83015261485281614819565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f61488d601683613a9a565b915061489882614859565b602082019050919050565b5f6020820190508181035f8301526148ba81614881565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c5f8201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b5f614941604983613a9a565b915061494c826148c1565b606082019050919050565b5f6020820190508181035f83015261496e81614935565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d617854782e0000000000000000000000000000000000000000000000000000602082015250565b5f6149cf602683613a9a565b91506149da82614975565b604082019050919050565b5f6020820190508181035f8301526149fc816149c3565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f614a37601383613a9a565b9150614a4282614a03565b602082019050919050565b5f6020820190508181035f830152614a6481614a2b565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d617854782e00000000000000000000000000000000000000000000000000602082015250565b5f614ac5602783613a9a565b9150614ad082614a6b565b604082019050919050565b5f6020820190508181035f830152614af281614ab9565b9050919050565b5f614b0382613a1f565b9150614b0e83613a1f565b9250828203905081811115614b2657614b25613edc565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050614b9481613b6a565b92915050565b5f60208284031215614baf57614bae613a1b565b5b5f614bbc84828501614b86565b91505092915050565b5f819050919050565b5f614be8614be3614bde84614bc5565b613c05565b613a1f565b9050919050565b614bf881614bce565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b614c3081613b59565b82525050565b5f614c418383614c27565b60208301905092915050565b5f602082019050919050565b5f614c6382614bfe565b614c6d8185614c08565b9350614c7883614c18565b805f5b83811015614ca8578151614c8f8882614c36565b9750614c9a83614c4d565b925050600181019050614c7b565b5085935050505092915050565b5f60a082019050614cc85f830188613c79565b614cd56020830187614bef565b8181036040830152614ce78186614c59565b9050614cf66060830185613d1c565b614d036080830184613c79565b9695505050505050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f614d67602683613a9a565b9150614d7282614d0d565b604082019050919050565b5f6020820190508181035f830152614d9481614d5b565b9050919050565b5f81905092915050565b50565b5f614db35f83614d9b565b9150614dbe82614da5565b5f82019050919050565b5f614dd282614da8565b915081905091905056fea26469706673582212200943dc7d52f50b19ea566792bbf23732a476f8d8a88f693df78e597cdfdcaabb64736f6c63430008180033

Deployed Bytecode Sourcemap

15789:12865:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21478:318;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3486:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4400:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15862:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3807:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20380:245;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20633:259;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4577:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15955:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16184:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16083;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3706:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5077:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15920:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16218:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22880:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19320:275;;;;;;;;;;;;;:::i;:::-;;16724:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20900:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21159:311;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16617:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16298:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3923:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1608:103;;;;;;;;;;;;;:::i;:::-;;16117:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19603:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16547:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19200:112;;;;;;;;;;;;;:::i;:::-;;1385:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16652:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21051:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3594:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21994:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16584:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16762:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16690:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5300:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16047:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4058:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16966:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27007:222;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22711:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16258:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21804:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16464:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19875:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16513:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4241:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16144:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16909:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19732:135;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22502:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1719;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21478:318;1531:12;:10;:12::i;:::-;1520:23;;:7;:5;:7::i;:::-;:23;;;1512:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21616:13:::1;21597:16;:32;;;;21653:7;21640:10;:20;;;;21706:10;;21687:16;;:29;;;;:::i;:::-;21671:13;:45;;;;21752:2;21735:13;;:19;;21727:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;21478:318:::0;;:::o;3486:100::-;3540:13;3573:5;3566:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3486:100;:::o;4400:169::-;4483:4;4500:39;4509:12;:10;:12::i;:::-;4523:7;4532:6;4500:8;:39::i;:::-;4557:4;4550:11;;4400:169;;;;:::o;15862:51::-;;;:::o;3807:108::-;3868:7;3895:12;;3888:19;;3807:108;:::o;20380:245::-;1531:12;:10;:12::i;:::-;1520:23;;:7;:5;:7::i;:::-;:23;;;1512:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20517:4:::1;20509;20504:1;20488:13;:11;:13::i;:::-;:17;;;;:::i;:::-;20487:26;;;;:::i;:::-;20486:35;;;;:::i;:::-;20476:6;:45;;20454:127;;;;;;;;;;;;:::i;:::-;;;;;;;;;20610:6;20600;:17;;;;:::i;:::-;20592:5;:25;;;;20380:245:::0;:::o;20633:259::-;1531:12;:10;:12::i;:::-;1520:23;;:7;:5;:7::i;:::-;:23;;;1512:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20774:4:::1;20766;20761:1;20745:13;:11;:13::i;:::-;:17;;;;:::i;:::-;20744:26;;;;:::i;:::-;20743:35;;;;:::i;:::-;20733:6;:45;;20711:132;;;;;;;;;;;;:::i;:::-;;;;;;;;;20877:6;20867;:17;;;;:::i;:::-;20854:10;:30;;;;20633:259:::0;:::o;4577:492::-;4717:4;4734:36;4744:6;4752:9;4763:6;4734:9;:36::i;:::-;4783:24;4810:11;:19;4822:6;4810:19;;;;;;;;;;;;;;;:33;4830:12;:10;:12::i;:::-;4810:33;;;;;;;;;;;;;;;;4783:60;;4882:6;4862:16;:26;;4854:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;4969:57;4978:6;4986:12;:10;:12::i;:::-;5019:6;5000:16;:25;4969:8;:57::i;:::-;5057:4;5050:11;;;4577:492;;;;;:::o;15955:53::-;16001:6;15955:53;:::o;16184:25::-;;;;:::o;16083:::-;;;;;;;;;;;;;:::o;3706:93::-;3764:5;3789:2;3782:9;;3706:93;:::o;5077:215::-;5165:4;5182:80;5191:12;:10;:12::i;:::-;5205:7;5251:10;5214:11;:25;5226:12;:10;:12::i;:::-;5214:25;;;;;;;;;;;;;;;:34;5240:7;5214:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;5182:8;:80::i;:::-;5280:4;5273:11;;5077:215;;;;:::o;15920:28::-;;;;;;;;;;;;;:::o;16218:33::-;;;;;;;;;;;;;:::o;22880:126::-;22946:4;22970:19;:28;22990:7;22970:28;;;;;;;;;;;;;;;;;;;;;;;;;22963:35;;22880:126;;;:::o;19320:275::-;1531:12;:10;:12::i;:::-;1520:23;;:7;:5;:7::i;:::-;:23;;;1512:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19395:2:::1;19377:15;:20;;;;19420:1;19408:9;:13;;;;19451:2;19432:16;:21;;;;19477:1;19464:10;:14;;;;19522:9;;19504:15;;:27;;;;:::i;:::-;19489:12;:42;;;;19577:10;;19558:16;;:29;;;;:::i;:::-;19542:13;:45;;;;19320:275::o:0;16724:31::-;;;;:::o;20900:143::-;1531:12;:10;:12::i;:::-;1520:23;;:7;:5;:7::i;:::-;:23;;;1512:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21031:4:::1;21004:16;:24;21021:6;21004:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;20900:143:::0;;:::o;21159:311::-;1531:12;:10;:12::i;:::-;1520:23;;:7;:5;:7::i;:::-;:23;;;1512:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21295:13:::1;21277:15;:31;;;;21331:7;21319:9;:19;;;;21382:9;;21364:15;;:27;;;;:::i;:::-;21349:12;:42;;;;21426:2;21410:12;;:18;;21402:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;21159:311:::0;;:::o;16617:28::-;;;;:::o;16298:31::-;;;;;;;;;;;;;:::o;3923:127::-;3997:7;4024:9;:18;4034:7;4024:18;;;;;;;;;;;;;;;;4017:25;;3923:127;;;:::o;1608:103::-;1531:12;:10;:12::i;:::-;1520:23;;:7;:5;:7::i;:::-;:23;;;1512:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1673:30:::1;1700:1;1673:18;:30::i;:::-;1608:103::o:0;16117:20::-;;;;:::o;19603:121::-;19655:4;1531:12;:10;:12::i;:::-;1520:23;;:7;:5;:7::i;:::-;:23;;;1512:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19689:5:::1;19672:14;;:22;;;;;;;;;;;;;;;;;;19712:4;19705:11;;19603:121:::0;:::o;16547:30::-;;;;:::o;19200:112::-;1531:12;:10;:12::i;:::-;1520:23;;:7;:5;:7::i;:::-;:23;;;1512:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19271:4:::1;19255:13;;:20;;;;;;;;;;;;;;;;;;19300:4;19286:11;;:18;;;;;;;;;;;;;;;;;;19200:112::o:0;1385:87::-;1431:7;1458:6;;;;;;;;;;;1451:13;;1385:87;:::o;16652:31::-;;;;:::o;21051:100::-;1531:12;:10;:12::i;:::-;1520:23;;:7;:5;:7::i;:::-;:23;;;1512:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21136:7:::1;21122:11;;:21;;;;;;;;;;;;;;;;;;21051:100:::0;:::o;3594:104::-;3650:13;3683:7;3676:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3594:104;:::o;21994:304::-;1531:12;:10;:12::i;:::-;1520:23;;:7;:5;:7::i;:::-;:23;;;1512:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22138:13:::1;;;;;;;;;;;22130:21;;:4;:21;;::::0;22108:128:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22249:41;22278:4;22284:5;22249:28;:41::i;:::-;21994:304:::0;;:::o;16584:24::-;;;;:::o;16762:27::-;;;;:::o;16690:25::-;;;;:::o;5300:413::-;5393:4;5410:24;5437:11;:25;5449:12;:10;:12::i;:::-;5437:25;;;;;;;;;;;;;;;:34;5463:7;5437:34;;;;;;;;;;;;;;;;5410:61;;5510:15;5490:16;:35;;5482:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;5603:67;5612:12;:10;:12::i;:::-;5626:7;5654:15;5635:16;:34;5603:8;:67::i;:::-;5701:4;5694:11;;;5300:413;;;;:::o;16047:29::-;;;;;;;;;;;;;:::o;4058:175::-;4144:4;4161:42;4171:12;:10;:12::i;:::-;4185:9;4196:6;4161:9;:42::i;:::-;4221:4;4214:11;;4058:175;;;;:::o;16966:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;27007:222::-;27087:14;;;;;;;;;;;27071:30;;:12;:10;:12::i;:::-;:30;;;27063:39;;;;;;27131:24;27149:4;27131:9;:24::i;:::-;27121:6;:34;;:48;;;;;27168:1;27159:6;:10;27121:48;27113:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27197:24;27214:6;27197:16;:24::i;:::-;27007:222;:::o;22711:161::-;1531:12;:10;:12::i;:::-;1520:23;;:7;:5;:7::i;:::-;:23;;;1512:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22820:10:::1;;;;;;;;;;;22791:40;;22809:9;22791:40;;;;;;;;;;;;22855:9;22842:10;;:22;;;;;;;;;;;;;;;;;;22711:161:::0;:::o;16258:33::-;;;;;;;;;;;;;:::o;21804:182::-;1531:12;:10;:12::i;:::-;1520:23;;:7;:5;:7::i;:::-;:23;;;1512:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21920:8:::1;21889:19;:28;21909:7;21889:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;21960:7;21944:34;;;21969:8;21944:34;;;;;;:::i;:::-;;;;;;;;21804:182:::0;;:::o;16464:40::-;;;;;;;;;;;;;:::o;19875:497::-;19983:4;1531:12;:10;:12::i;:::-;1520:23;;:7;:5;:7::i;:::-;:23;;;1512:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20062:6:::1;20057:1;20041:13;:11;:13::i;:::-;:17;;;;:::i;:::-;20040:28;;;;:::i;:::-;20027:9;:41;;20005:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;20217:4;20212:1;20196:13;:11;:13::i;:::-;:17;;;;:::i;:::-;20195:26;;;;:::i;:::-;20182:9;:39;;20160:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;20333:9;20312:18;:30;;;;20360:4;20353:11;;19875:497:::0;;;:::o;16513:27::-;;;;:::o;4241:151::-;4330:7;4357:11;:18;4369:5;4357:18;;;;;;;;;;;;;;;:27;4376:7;4357:27;;;;;;;;;;;;;;;;4350:34;;4241:151;;;;:::o;16144:33::-;;;;:::o;16909:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;19732:135::-;19792:4;1531:12;:10;:12::i;:::-;1520:23;;:7;:5;:7::i;:::-;:23;;;1512:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19832:5:::1;19809:20;;:28;;;;;;;;;;;;;;;;;;19855:4;19848:11;;19732:135:::0;:::o;22502:201::-;1531:12;:10;:12::i;:::-;1520:23;;:7;:5;:7::i;:::-;:23;;;1512:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22635:14:::1;;;;;;;;;;;22594:56;;22616:17;22594:56;;;;;;;;;;;;22678:17;22661:14;;:34;;;;;;;;;;;;;;;;;;22502:201:::0;:::o;1719:::-;1531:12;:10;:12::i;:::-;1520:23;;:7;:5;:7::i;:::-;:23;;;1512:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1828:1:::1;1808:22;;:8;:22;;::::0;1800:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;1884:28;1903:8;1884:18;:28::i;:::-;1719:201:::0;:::o;931:98::-;984:7;1011:10;1004:17;;931:98;:::o;7468:380::-;7621:1;7604:19;;:5;:19;;;7596:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7702:1;7683:21;;:7;:21;;;7675:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7786:6;7756:11;:18;7768:5;7756:18;;;;;;;;;;;;;;;:27;7775:7;7756:27;;;;;;;;;;;;;;;:36;;;;7824:7;7808:32;;7817:5;7808:32;;;7833:6;7808:32;;;;;;:::i;:::-;;;;;;;;7468:380;;;:::o;23064:3820::-;23212:1;23196:18;;:4;:18;;;23188:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23289:1;23275:16;;:2;:16;;;23267:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;23351:12;:18;23364:4;23351:18;;;;;;;;;;;;;;;;;;;;;;;;;23350:19;23342:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;23411:12;:16;23424:2;23411:16;;;;;;;;;;;;;;;;;;;;;;;;;23410:17;23402:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;23474:1;23464:6;:11;23460:93;;23492:28;23508:4;23514:2;23518:1;23492:15;:28::i;:::-;23535:7;;23460:93;23569:14;;;;;;;;;;;23565:1666;;;23612:7;:5;:7::i;:::-;23604:15;;:4;:15;;;;:49;;;;;23646:7;:5;:7::i;:::-;23640:13;;:2;:13;;;;23604:49;:86;;;;;23688:1;23674:16;;:2;:16;;;;23604:86;:128;;;;;23725:6;23711:21;;:2;:21;;;;23604:128;:158;;;;;23754:8;;;;;;;;;;;23753:9;23604:158;23600:1620;;;23788:13;;;;;;;;;;;23783:150;;23834:19;:25;23854:4;23834:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;23863:19;:23;23883:2;23863:23;;;;;;;;;;;;;;;;;;;;;;;;;23834:52;23826:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;23783:150;24089:20;;;;;;;;;;;24085:425;;;24144:7;:5;:7::i;:::-;24138:13;;:2;:13;;;;:47;;;;;24169:15;24155:30;;:2;:30;;;;24138:47;:79;;;;;24203:13;;;;;;;;;;;24189:28;;:2;:28;;;;24138:79;24134:357;;;24296:12;24254:28;:39;24283:9;24254:39;;;;;;;;;;;;;;;;:54;24246:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;24455:12;24413:28;:39;24442:9;24413:39;;;;;;;;;;;;;;;:54;;;;24134:357;24085:425;24562:25;:31;24588:4;24562:31;;;;;;;;;;;;;;;;;;;;;;;;;:56;;;;;24598:16;:20;24615:2;24598:20;;;;;;;;;;;;;;;;;;;;;;;;;24597:21;24562:56;24558:647;;;24661:5;;24651:6;:15;;24643:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;24766:10;;24749:13;24759:2;24749:9;:13::i;:::-;24740:6;:22;;;;:::i;:::-;:36;;24732:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24558:647;;;24876:25;:29;24902:2;24876:29;;;;;;;;;;;;;;;;;;;;;;;;;:56;;;;;24910:16;:22;24927:4;24910:22;;;;;;;;;;;;;;;;;;;;;;;;;24909:23;24876:56;24872:333;;;24975:5;;24965:6;:15;;24957:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24872:333;;;25072:16;:20;25089:2;25072:20;;;;;;;;;;;;;;;;;;;;;;;;;25067:138;;25151:10;;25134:13;25144:2;25134:9;:13::i;:::-;25125:6;:22;;;;:::i;:::-;:36;;25117:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25067:138;24872:333;24558:647;23600:1620;23565:1666;25243:28;25274:24;25292:4;25274:9;:24::i;:::-;25243:55;;25309:12;25348:18;;25324:20;:42;;25309:57;;25383:7;:35;;;;;25407:11;;;;;;;;;;;25383:35;:61;;;;;25436:8;;;;;;;;;;;25435:9;25383:61;:110;;;;;25462:25;:31;25488:4;25462:31;;;;;;;;;;;;;;;;;;;;;;;;;25461:32;25383:110;:153;;;;;25511:19;:25;25531:4;25511:25;;;;;;;;;;;;;;;;;;;;;;;;;25510:26;25383:153;:194;;;;;25554:19;:23;25574:2;25554:23;;;;;;;;;;;;;;;;;;;;;;;;;25553:24;25383:194;25379:302;;;25605:4;25594:8;;:15;;;;;;;;;;;;;;;;;;25626:10;:8;:10::i;:::-;25664:5;25653:8;;:16;;;;;;;;;;;;;;;;;;25379:302;25693:12;25709:8;;;;;;;;;;;25708:9;25693:24;;25819:19;:25;25839:4;25819:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;25848:19;:23;25868:2;25848:23;;;;;;;;;;;;;;;;;;;;;;;;;25819:52;25815:100;;;25898:5;25888:15;;25815:100;25927:12;26032:7;26028:803;;;26084:25;:29;26110:2;26084:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;26133:1;26117:13;;:17;26084:50;26080:602;;;26162:34;26192:3;26162:25;26173:13;;26162:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;26155:41;;26253:13;;26239:10;;26232:4;:17;;;;:::i;:::-;26231:35;;;;:::i;:::-;26215:12;;:51;;;;;;;:::i;:::-;;;;;;;;26333:13;;26313:16;;26306:4;:23;;;;:::i;:::-;26305:41;;;;:::i;:::-;26285:16;;:61;;;;;;;:::i;:::-;;;;;;;;26080:602;;;26408:25;:31;26434:4;26408:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;26458:1;26443:12;;:16;26408:51;26404:278;;;26487:33;26516:3;26487:24;26498:12;;26487:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;26480:40;;26576:12;;26563:9;;26556:4;:16;;;;:::i;:::-;26555:33;;;;:::i;:::-;26539:12;;:49;;;;;;;:::i;:::-;;;;;;;;26654:12;;26635:15;;26628:4;:22;;;;:::i;:::-;26627:39;;;;:::i;:::-;26607:16;;:59;;;;;;;:::i;:::-;;;;;;;;26404:278;26080:602;26709:1;26702:4;:8;26698:91;;;26731:42;26747:4;26761;26768;26731:15;:42::i;:::-;26698:91;26815:4;26805:14;;;;;:::i;:::-;;;26028:803;26843:33;26859:4;26865:2;26869:6;26843:15;:33::i;:::-;23177:3707;;;;23064:3820;;;;:::o;1928:191::-;2002:16;2021:6;;;;;;;;;;;2002:25;;2047:8;2038:6;;:17;;;;;;;;;;;;;;;;;;2102:8;2071:40;;2092:8;2071:40;;;;;;;;;;;;1991:128;1928:191;:::o;22306:188::-;22423:5;22389:25;:31;22415:4;22389:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;22480:5;22446:40;;22474:4;22446:40;;;;;;;;;;;;22306:188;;:::o;27238:529::-;27304:21;27342:1;27328:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27304:40;;27373:4;27355;27360:1;27355:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;27399:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27389:4;27394:1;27389:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;27434:62;27451:4;27466:15;27484:11;27434:8;:62::i;:::-;27535:15;:66;;;27616:11;27642:1;27686:4;27713;27733:15;27535:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27293:474;27238:529;:::o;5721:733::-;5879:1;5861:20;;:6;:20;;;5853:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;5963:1;5942:23;;:9;:23;;;5934:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;6018:47;6039:6;6047:9;6058:6;6018:20;:47::i;:::-;6078:21;6102:9;:17;6112:6;6102:17;;;;;;;;;;;;;;;;6078:41;;6155:6;6138:13;:23;;6130:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;6276:6;6260:13;:22;6240:9;:17;6250:6;6240:17;;;;;;;;;;;;;;;:42;;;;6328:6;6304:9;:20;6314:9;6304:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;6369:9;6352:35;;6361:6;6352:35;;;6380:6;6352:35;;;;;;:::i;:::-;;;;;;;;6400:46;6420:6;6428:9;6439:6;6400:19;:46::i;:::-;5842:612;5721:733;;;:::o;27775:876::-;27814:23;27840:24;27858:4;27840:9;:24::i;:::-;27814:50;;27875:25;27922:12;;27903:16;;:31;;;;:::i;:::-;27875:59;;27945:12;27993:1;27974:15;:20;27970:59;;28011:7;;;;;27970:59;28084:2;28063:18;;:23;;;;:::i;:::-;28045:15;:41;28041:115;;;28142:2;28121:18;;:23;;;;:::i;:::-;28103:41;;28041:115;28168:25;28196:21;28168:49;;28228:33;28245:15;28228:16;:33::i;:::-;28274:18;28295:44;28321:17;28295:21;:25;;:44;;;;:::i;:::-;28274:65;;28350:17;28370:51;28403:17;28370:28;28385:12;;28370:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;28350:71;;28453:1;28434:16;:20;;;;28480:1;28465:12;:16;;;;28516:10;;;;;;;;;;;28508:24;;28540:9;28508:46;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28494:60;;;;;28587:14;;;;;;;;;;;28579:28;;28616:21;28579:64;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28565:78;;;;;27803:848;;;;;;27775:876;:::o;9474:98::-;9532:7;9563:1;9559;:5;;;;:::i;:::-;9552:12;;9474:98;;;;:::o;9580:::-;9638:7;9669:1;9665;:5;;;;:::i;:::-;9658:12;;9580:98;;;;:::o;7856:125::-;;;;:::o;7989:124::-;;;;:::o;9368:98::-;9426:7;9457:1;9453;:5;;;;:::i;:::-;9446:12;;9368:98;;;;:::o;88:117:1:-;197:1;194;187:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:474::-;758:6;766;815:2;803:9;794:7;790:23;786:32;783:119;;;821:79;;:::i;:::-;783:119;941:1;966:53;1011:7;1002:6;991:9;987:22;966:53;:::i;:::-;956:63;;912:117;1068:2;1094:53;1139:7;1130:6;1119:9;1115:22;1094:53;:::i;:::-;1084:63;;1039:118;690:474;;;;;:::o;1170:99::-;1222:6;1256:5;1250:12;1240:22;;1170:99;;;:::o;1275:169::-;1359:11;1393:6;1388:3;1381:19;1433:4;1428:3;1424:14;1409:29;;1275:169;;;;:::o;1450:246::-;1531:1;1541:113;1555:6;1552:1;1549:13;1541:113;;;1640:1;1635:3;1631:11;1625:18;1621:1;1616:3;1612:11;1605:39;1577:2;1574:1;1570:10;1565:15;;1541:113;;;1688:1;1679:6;1674:3;1670:16;1663:27;1512:184;1450:246;;;:::o;1702:102::-;1743:6;1794:2;1790:7;1785:2;1778:5;1774:14;1770:28;1760:38;;1702:102;;;:::o;1810:377::-;1898:3;1926:39;1959:5;1926:39;:::i;:::-;1981:71;2045:6;2040:3;1981:71;:::i;:::-;1974:78;;2061:65;2119:6;2114:3;2107:4;2100:5;2096:16;2061:65;:::i;:::-;2151:29;2173:6;2151:29;:::i;:::-;2146:3;2142:39;2135:46;;1902:285;1810:377;;;;:::o;2193:313::-;2306:4;2344:2;2333:9;2329:18;2321:26;;2393:9;2387:4;2383:20;2379:1;2368:9;2364:17;2357:47;2421:78;2494:4;2485:6;2421:78;:::i;:::-;2413:86;;2193:313;;;;:::o;2512:126::-;2549:7;2589:42;2582:5;2578:54;2567:65;;2512:126;;;:::o;2644:96::-;2681:7;2710:24;2728:5;2710:24;:::i;:::-;2699:35;;2644:96;;;:::o;2746:122::-;2819:24;2837:5;2819:24;:::i;:::-;2812:5;2809:35;2799:63;;2858:1;2855;2848:12;2799:63;2746:122;:::o;2874:139::-;2920:5;2958:6;2945:20;2936:29;;2974:33;3001:5;2974:33;:::i;:::-;2874:139;;;;:::o;3019:474::-;3087:6;3095;3144:2;3132:9;3123:7;3119:23;3115:32;3112:119;;;3150:79;;:::i;:::-;3112:119;3270:1;3295:53;3340:7;3331:6;3320:9;3316:22;3295:53;:::i;:::-;3285:63;;3241:117;3397:2;3423:53;3468:7;3459:6;3448:9;3444:22;3423:53;:::i;:::-;3413:63;;3368:118;3019:474;;;;;:::o;3499:90::-;3533:7;3576:5;3569:13;3562:21;3551:32;;3499:90;;;:::o;3595:109::-;3676:21;3691:5;3676:21;:::i;:::-;3671:3;3664:34;3595:109;;:::o;3710:210::-;3797:4;3835:2;3824:9;3820:18;3812:26;;3848:65;3910:1;3899:9;3895:17;3886:6;3848:65;:::i;:::-;3710:210;;;;:::o;3926:60::-;3954:3;3975:5;3968:12;;3926:60;;;:::o;3992:142::-;4042:9;4075:53;4093:34;4102:24;4120:5;4102:24;:::i;:::-;4093:34;:::i;:::-;4075:53;:::i;:::-;4062:66;;3992:142;;;:::o;4140:126::-;4190:9;4223:37;4254:5;4223:37;:::i;:::-;4210:50;;4140:126;;;:::o;4272:153::-;4349:9;4382:37;4413:5;4382:37;:::i;:::-;4369:50;;4272:153;;;:::o;4431:185::-;4545:64;4603:5;4545:64;:::i;:::-;4540:3;4533:77;4431:185;;:::o;4622:276::-;4742:4;4780:2;4769:9;4765:18;4757:26;;4793:98;4888:1;4877:9;4873:17;4864:6;4793:98;:::i;:::-;4622:276;;;;:::o;4904:118::-;4991:24;5009:5;4991:24;:::i;:::-;4986:3;4979:37;4904:118;;:::o;5028:222::-;5121:4;5159:2;5148:9;5144:18;5136:26;;5172:71;5240:1;5229:9;5225:17;5216:6;5172:71;:::i;:::-;5028:222;;;;:::o;5256:329::-;5315:6;5364:2;5352:9;5343:7;5339:23;5335:32;5332:119;;;5370:79;;:::i;:::-;5332:119;5490:1;5515:53;5560:7;5551:6;5540:9;5536:22;5515:53;:::i;:::-;5505:63;;5461:117;5256:329;;;;:::o;5591:619::-;5668:6;5676;5684;5733:2;5721:9;5712:7;5708:23;5704:32;5701:119;;;5739:79;;:::i;:::-;5701:119;5859:1;5884:53;5929:7;5920:6;5909:9;5905:22;5884:53;:::i;:::-;5874:63;;5830:117;5986:2;6012:53;6057:7;6048:6;6037:9;6033:22;6012:53;:::i;:::-;6002:63;;5957:118;6114:2;6140:53;6185:7;6176:6;6165:9;6161:22;6140:53;:::i;:::-;6130:63;;6085:118;5591:619;;;;;:::o;6216:118::-;6303:24;6321:5;6303:24;:::i;:::-;6298:3;6291:37;6216:118;;:::o;6340:222::-;6433:4;6471:2;6460:9;6456:18;6448:26;;6484:71;6552:1;6541:9;6537:17;6528:6;6484:71;:::i;:::-;6340:222;;;;:::o;6568:86::-;6603:7;6643:4;6636:5;6632:16;6621:27;;6568:86;;;:::o;6660:112::-;6743:22;6759:5;6743:22;:::i;:::-;6738:3;6731:35;6660:112;;:::o;6778:214::-;6867:4;6905:2;6894:9;6890:18;6882:26;;6918:67;6982:1;6971:9;6967:17;6958:6;6918:67;:::i;:::-;6778:214;;;;:::o;6998:329::-;7057:6;7106:2;7094:9;7085:7;7081:23;7077:32;7074:119;;;7112:79;;:::i;:::-;7074:119;7232:1;7257:53;7302:7;7293:6;7282:9;7278:22;7257:53;:::i;:::-;7247:63;;7203:117;6998:329;;;;:::o;7333:116::-;7403:21;7418:5;7403:21;:::i;:::-;7396:5;7393:32;7383:60;;7439:1;7436;7429:12;7383:60;7333:116;:::o;7455:133::-;7498:5;7536:6;7523:20;7514:29;;7552:30;7576:5;7552:30;:::i;:::-;7455:133;;;;:::o;7594:468::-;7659:6;7667;7716:2;7704:9;7695:7;7691:23;7687:32;7684:119;;;7722:79;;:::i;:::-;7684:119;7842:1;7867:53;7912:7;7903:6;7892:9;7888:22;7867:53;:::i;:::-;7857:63;;7813:117;7969:2;7995:50;8037:7;8028:6;8017:9;8013:22;7995:50;:::i;:::-;7985:60;;7940:115;7594:468;;;;;:::o;8068:323::-;8124:6;8173:2;8161:9;8152:7;8148:23;8144:32;8141:119;;;8179:79;;:::i;:::-;8141:119;8299:1;8324:50;8366:7;8357:6;8346:9;8342:22;8324:50;:::i;:::-;8314:60;;8270:114;8068:323;;;;:::o;8397:474::-;8465:6;8473;8522:2;8510:9;8501:7;8497:23;8493:32;8490:119;;;8528:79;;:::i;:::-;8490:119;8648:1;8673:53;8718:7;8709:6;8698:9;8694:22;8673:53;:::i;:::-;8663:63;;8619:117;8775:2;8801:53;8846:7;8837:6;8826:9;8822:22;8801:53;:::i;:::-;8791:63;;8746:118;8397:474;;;;;:::o;8877:182::-;9017:34;9013:1;9005:6;9001:14;8994:58;8877:182;:::o;9065:366::-;9207:3;9228:67;9292:2;9287:3;9228:67;:::i;:::-;9221:74;;9304:93;9393:3;9304:93;:::i;:::-;9422:2;9417:3;9413:12;9406:19;;9065:366;;;:::o;9437:419::-;9603:4;9641:2;9630:9;9626:18;9618:26;;9690:9;9684:4;9680:20;9676:1;9665:9;9661:17;9654:47;9718:131;9844:4;9718:131;:::i;:::-;9710:139;;9437:419;;;:::o;9862:180::-;9910:77;9907:1;9900:88;10007:4;10004:1;9997:15;10031:4;10028:1;10021:15;10048:191;10088:3;10107:20;10125:1;10107:20;:::i;:::-;10102:25;;10141:20;10159:1;10141:20;:::i;:::-;10136:25;;10184:1;10181;10177:9;10170:16;;10205:3;10202:1;10199:10;10196:36;;;10212:18;;:::i;:::-;10196:36;10048:191;;;;:::o;10245:179::-;10385:31;10381:1;10373:6;10369:14;10362:55;10245:179;:::o;10430:366::-;10572:3;10593:67;10657:2;10652:3;10593:67;:::i;:::-;10586:74;;10669:93;10758:3;10669:93;:::i;:::-;10787:2;10782:3;10778:12;10771:19;;10430:366;;;:::o;10802:419::-;10968:4;11006:2;10995:9;10991:18;10983:26;;11055:9;11049:4;11045:20;11041:1;11030:9;11026:17;11019:47;11083:131;11209:4;11083:131;:::i;:::-;11075:139;;10802:419;;;:::o;11227:180::-;11275:77;11272:1;11265:88;11372:4;11369:1;11362:15;11396:4;11393:1;11386:15;11413:320;11457:6;11494:1;11488:4;11484:12;11474:22;;11541:1;11535:4;11531:12;11562:18;11552:81;;11618:4;11610:6;11606:17;11596:27;;11552:81;11680:2;11672:6;11669:14;11649:18;11646:38;11643:84;;11699:18;;:::i;:::-;11643:84;11464:269;11413:320;;;:::o;11739:410::-;11779:7;11802:20;11820:1;11802:20;:::i;:::-;11797:25;;11836:20;11854:1;11836:20;:::i;:::-;11831:25;;11891:1;11888;11884:9;11913:30;11931:11;11913:30;:::i;:::-;11902:41;;12092:1;12083:7;12079:15;12076:1;12073:22;12053:1;12046:9;12026:83;12003:139;;12122:18;;:::i;:::-;12003:139;11787:362;11739:410;;;;:::o;12155:180::-;12203:77;12200:1;12193:88;12300:4;12297:1;12290:15;12324:4;12321:1;12314:15;12341:185;12381:1;12398:20;12416:1;12398:20;:::i;:::-;12393:25;;12432:20;12450:1;12432:20;:::i;:::-;12427:25;;12471:1;12461:35;;12476:18;;:::i;:::-;12461:35;12518:1;12515;12511:9;12506:14;;12341:185;;;;:::o;12532:182::-;12672:34;12668:1;12660:6;12656:14;12649:58;12532:182;:::o;12720:366::-;12862:3;12883:67;12947:2;12942:3;12883:67;:::i;:::-;12876:74;;12959:93;13048:3;12959:93;:::i;:::-;13077:2;13072:3;13068:12;13061:19;;12720:366;;;:::o;13092:419::-;13258:4;13296:2;13285:9;13281:18;13273:26;;13345:9;13339:4;13335:20;13331:1;13320:9;13316:17;13309:47;13373:131;13499:4;13373:131;:::i;:::-;13365:139;;13092:419;;;:::o;13517:224::-;13657:34;13653:1;13645:6;13641:14;13634:58;13726:7;13721:2;13713:6;13709:15;13702:32;13517:224;:::o;13747:366::-;13889:3;13910:67;13974:2;13969:3;13910:67;:::i;:::-;13903:74;;13986:93;14075:3;13986:93;:::i;:::-;14104:2;14099:3;14095:12;14088:19;;13747:366;;;:::o;14119:419::-;14285:4;14323:2;14312:9;14308:18;14300:26;;14372:9;14366:4;14362:20;14358:1;14347:9;14343:17;14336:47;14400:131;14526:4;14400:131;:::i;:::-;14392:139;;14119:419;;;:::o;14544:227::-;14684:34;14680:1;14672:6;14668:14;14661:58;14753:10;14748:2;14740:6;14736:15;14729:35;14544:227;:::o;14777:366::-;14919:3;14940:67;15004:2;14999:3;14940:67;:::i;:::-;14933:74;;15016:93;15105:3;15016:93;:::i;:::-;15134:2;15129:3;15125:12;15118:19;;14777:366;;;:::o;15149:419::-;15315:4;15353:2;15342:9;15338:18;15330:26;;15402:9;15396:4;15392:20;15388:1;15377:9;15373:17;15366:47;15430:131;15556:4;15430:131;:::i;:::-;15422:139;;15149:419;;;:::o;15574:244::-;15714:34;15710:1;15702:6;15698:14;15691:58;15783:27;15778:2;15770:6;15766:15;15759:52;15574:244;:::o;15824:366::-;15966:3;15987:67;16051:2;16046:3;15987:67;:::i;:::-;15980:74;;16063:93;16152:3;16063:93;:::i;:::-;16181:2;16176:3;16172:12;16165:19;;15824:366;;;:::o;16196:419::-;16362:4;16400:2;16389:9;16385:18;16377:26;;16449:9;16443:4;16439:20;16435:1;16424:9;16420:17;16413:47;16477:131;16603:4;16477:131;:::i;:::-;16469:139;;16196:419;;;:::o;16621:224::-;16761:34;16757:1;16749:6;16745:14;16738:58;16830:7;16825:2;16817:6;16813:15;16806:32;16621:224;:::o;16851:366::-;16993:3;17014:67;17078:2;17073:3;17014:67;:::i;:::-;17007:74;;17090:93;17179:3;17090:93;:::i;:::-;17208:2;17203:3;17199:12;17192:19;;16851:366;;;:::o;17223:419::-;17389:4;17427:2;17416:9;17412:18;17404:26;;17476:9;17470:4;17466:20;17462:1;17451:9;17447:17;17440:47;17504:131;17630:4;17504:131;:::i;:::-;17496:139;;17223:419;;;:::o;17648:162::-;17788:14;17784:1;17776:6;17772:14;17765:38;17648:162;:::o;17816:366::-;17958:3;17979:67;18043:2;18038:3;17979:67;:::i;:::-;17972:74;;18055:93;18144:3;18055:93;:::i;:::-;18173:2;18168:3;18164:12;18157:19;;17816:366;;;:::o;18188:419::-;18354:4;18392:2;18381:9;18377:18;18369:26;;18441:9;18435:4;18431:20;18427:1;18416:9;18412:17;18405:47;18469:131;18595:4;18469:131;:::i;:::-;18461:139;;18188:419;;;:::o;18613:240::-;18753:34;18749:1;18741:6;18737:14;18730:58;18822:23;18817:2;18809:6;18805:15;18798:48;18613:240;:::o;18859:366::-;19001:3;19022:67;19086:2;19081:3;19022:67;:::i;:::-;19015:74;;19098:93;19187:3;19098:93;:::i;:::-;19216:2;19211:3;19207:12;19200:19;;18859:366;;;:::o;19231:419::-;19397:4;19435:2;19424:9;19420:18;19412:26;;19484:9;19478:4;19474:20;19470:1;19459:9;19455:17;19448:47;19512:131;19638:4;19512:131;:::i;:::-;19504:139;;19231:419;;;:::o;19656:239::-;19796:34;19792:1;19784:6;19780:14;19773:58;19865:22;19860:2;19852:6;19848:15;19841:47;19656:239;:::o;19901:366::-;20043:3;20064:67;20128:2;20123:3;20064:67;:::i;:::-;20057:74;;20140:93;20229:3;20140:93;:::i;:::-;20258:2;20253:3;20249:12;20242:19;;19901:366;;;:::o;20273:419::-;20439:4;20477:2;20466:9;20462:18;20454:26;;20526:9;20520:4;20516:20;20512:1;20501:9;20497:17;20490:47;20554:131;20680:4;20554:131;:::i;:::-;20546:139;;20273:419;;;:::o;20698:225::-;20838:34;20834:1;20826:6;20822:14;20815:58;20907:8;20902:2;20894:6;20890:15;20883:33;20698:225;:::o;20929:366::-;21071:3;21092:67;21156:2;21151:3;21092:67;:::i;:::-;21085:74;;21168:93;21257:3;21168:93;:::i;:::-;21286:2;21281:3;21277:12;21270:19;;20929:366;;;:::o;21301:419::-;21467:4;21505:2;21494:9;21490:18;21482:26;;21554:9;21548:4;21544:20;21540:1;21529:9;21525:17;21518:47;21582:131;21708:4;21582:131;:::i;:::-;21574:139;;21301:419;;;:::o;21726:223::-;21866:34;21862:1;21854:6;21850:14;21843:58;21935:6;21930:2;21922:6;21918:15;21911:31;21726:223;:::o;21955:366::-;22097:3;22118:67;22182:2;22177:3;22118:67;:::i;:::-;22111:74;;22194:93;22283:3;22194:93;:::i;:::-;22312:2;22307:3;22303:12;22296:19;;21955:366;;;:::o;22327:419::-;22493:4;22531:2;22520:9;22516:18;22508:26;;22580:9;22574:4;22570:20;22566:1;22555:9;22551:17;22544:47;22608:131;22734:4;22608:131;:::i;:::-;22600:139;;22327:419;;;:::o;22752:221::-;22892:34;22888:1;22880:6;22876:14;22869:58;22961:4;22956:2;22948:6;22944:15;22937:29;22752:221;:::o;22979:366::-;23121:3;23142:67;23206:2;23201:3;23142:67;:::i;:::-;23135:74;;23218:93;23307:3;23218:93;:::i;:::-;23336:2;23331:3;23327:12;23320:19;;22979:366;;;:::o;23351:419::-;23517:4;23555:2;23544:9;23540:18;23532:26;;23604:9;23598:4;23594:20;23590:1;23579:9;23575:17;23568:47;23632:131;23758:4;23632:131;:::i;:::-;23624:139;;23351:419;;;:::o;23776:224::-;23916:34;23912:1;23904:6;23900:14;23893:58;23985:7;23980:2;23972:6;23968:15;23961:32;23776:224;:::o;24006:366::-;24148:3;24169:67;24233:2;24228:3;24169:67;:::i;:::-;24162:74;;24245:93;24334:3;24245:93;:::i;:::-;24363:2;24358:3;24354:12;24347:19;;24006:366;;;:::o;24378:419::-;24544:4;24582:2;24571:9;24567:18;24559:26;;24631:9;24625:4;24621:20;24617:1;24606:9;24602:17;24595:47;24659:131;24785:4;24659:131;:::i;:::-;24651:139;;24378:419;;;:::o;24803:222::-;24943:34;24939:1;24931:6;24927:14;24920:58;25012:5;25007:2;24999:6;24995:15;24988:30;24803:222;:::o;25031:366::-;25173:3;25194:67;25258:2;25253:3;25194:67;:::i;:::-;25187:74;;25270:93;25359:3;25270:93;:::i;:::-;25388:2;25383:3;25379:12;25372:19;;25031:366;;;:::o;25403:419::-;25569:4;25607:2;25596:9;25592:18;25584:26;;25656:9;25650:4;25646:20;25642:1;25631:9;25627:17;25620:47;25684:131;25810:4;25684:131;:::i;:::-;25676:139;;25403:419;;;:::o;25828:167::-;25968:19;25964:1;25956:6;25952:14;25945:43;25828:167;:::o;26001:366::-;26143:3;26164:67;26228:2;26223:3;26164:67;:::i;:::-;26157:74;;26240:93;26329:3;26240:93;:::i;:::-;26358:2;26353:3;26349:12;26342:19;;26001:366;;;:::o;26373:419::-;26539:4;26577:2;26566:9;26562:18;26554:26;;26626:9;26620:4;26616:20;26612:1;26601:9;26597:17;26590:47;26654:131;26780:4;26654:131;:::i;:::-;26646:139;;26373:419;;;:::o;26798:165::-;26938:17;26934:1;26926:6;26922:14;26915:41;26798:165;:::o;26969:366::-;27111:3;27132:67;27196:2;27191:3;27132:67;:::i;:::-;27125:74;;27208:93;27297:3;27208:93;:::i;:::-;27326:2;27321:3;27317:12;27310:19;;26969:366;;;:::o;27341:419::-;27507:4;27545:2;27534:9;27530:18;27522:26;;27594:9;27588:4;27584:20;27580:1;27569:9;27565:17;27558:47;27622:131;27748:4;27622:131;:::i;:::-;27614:139;;27341:419;;;:::o;27766:172::-;27906:24;27902:1;27894:6;27890:14;27883:48;27766:172;:::o;27944:366::-;28086:3;28107:67;28171:2;28166:3;28107:67;:::i;:::-;28100:74;;28183:93;28272:3;28183:93;:::i;:::-;28301:2;28296:3;28292:12;28285:19;;27944:366;;;:::o;28316:419::-;28482:4;28520:2;28509:9;28505:18;28497:26;;28569:9;28563:4;28559:20;28555:1;28544:9;28540:17;28533:47;28597:131;28723:4;28597:131;:::i;:::-;28589:139;;28316:419;;;:::o;28741:297::-;28881:34;28877:1;28869:6;28865:14;28858:58;28950:34;28945:2;28937:6;28933:15;28926:59;29019:11;29014:2;29006:6;29002:15;28995:36;28741:297;:::o;29044:366::-;29186:3;29207:67;29271:2;29266:3;29207:67;:::i;:::-;29200:74;;29283:93;29372:3;29283:93;:::i;:::-;29401:2;29396:3;29392:12;29385:19;;29044:366;;;:::o;29416:419::-;29582:4;29620:2;29609:9;29605:18;29597:26;;29669:9;29663:4;29659:20;29655:1;29644:9;29640:17;29633:47;29697:131;29823:4;29697:131;:::i;:::-;29689:139;;29416:419;;;:::o;29841:225::-;29981:34;29977:1;29969:6;29965:14;29958:58;30050:8;30045:2;30037:6;30033:15;30026:33;29841:225;:::o;30072:366::-;30214:3;30235:67;30299:2;30294:3;30235:67;:::i;:::-;30228:74;;30311:93;30400:3;30311:93;:::i;:::-;30429:2;30424:3;30420:12;30413:19;;30072:366;;;:::o;30444:419::-;30610:4;30648:2;30637:9;30633:18;30625:26;;30697:9;30691:4;30687:20;30683:1;30672:9;30668:17;30661:47;30725:131;30851:4;30725:131;:::i;:::-;30717:139;;30444:419;;;:::o;30869:169::-;31009:21;31005:1;30997:6;30993:14;30986:45;30869:169;:::o;31044:366::-;31186:3;31207:67;31271:2;31266:3;31207:67;:::i;:::-;31200:74;;31283:93;31372:3;31283:93;:::i;:::-;31401:2;31396:3;31392:12;31385:19;;31044:366;;;:::o;31416:419::-;31582:4;31620:2;31609:9;31605:18;31597:26;;31669:9;31663:4;31659:20;31655:1;31644:9;31640:17;31633:47;31697:131;31823:4;31697:131;:::i;:::-;31689:139;;31416:419;;;:::o;31841:226::-;31981:34;31977:1;31969:6;31965:14;31958:58;32050:9;32045:2;32037:6;32033:15;32026:34;31841:226;:::o;32073:366::-;32215:3;32236:67;32300:2;32295:3;32236:67;:::i;:::-;32229:74;;32312:93;32401:3;32312:93;:::i;:::-;32430:2;32425:3;32421:12;32414:19;;32073:366;;;:::o;32445:419::-;32611:4;32649:2;32638:9;32634:18;32626:26;;32698:9;32692:4;32688:20;32684:1;32673:9;32669:17;32662:47;32726:131;32852:4;32726:131;:::i;:::-;32718:139;;32445:419;;;:::o;32870:194::-;32910:4;32930:20;32948:1;32930:20;:::i;:::-;32925:25;;32964:20;32982:1;32964:20;:::i;:::-;32959:25;;33008:1;33005;33001:9;32993:17;;33032:1;33026:4;33023:11;33020:37;;;33037:18;;:::i;:::-;33020:37;32870:194;;;;:::o;33070:180::-;33118:77;33115:1;33108:88;33215:4;33212:1;33205:15;33239:4;33236:1;33229:15;33256:180;33304:77;33301:1;33294:88;33401:4;33398:1;33391:15;33425:4;33422:1;33415:15;33442:143;33499:5;33530:6;33524:13;33515:22;;33546:33;33573:5;33546:33;:::i;:::-;33442:143;;;;:::o;33591:351::-;33661:6;33710:2;33698:9;33689:7;33685:23;33681:32;33678:119;;;33716:79;;:::i;:::-;33678:119;33836:1;33861:64;33917:7;33908:6;33897:9;33893:22;33861:64;:::i;:::-;33851:74;;33807:128;33591:351;;;;:::o;33948:85::-;33993:7;34022:5;34011:16;;33948:85;;;:::o;34039:158::-;34097:9;34130:61;34148:42;34157:32;34183:5;34157:32;:::i;:::-;34148:42;:::i;:::-;34130:61;:::i;:::-;34117:74;;34039:158;;;:::o;34203:147::-;34298:45;34337:5;34298:45;:::i;:::-;34293:3;34286:58;34203:147;;:::o;34356:114::-;34423:6;34457:5;34451:12;34441:22;;34356:114;;;:::o;34476:184::-;34575:11;34609:6;34604:3;34597:19;34649:4;34644:3;34640:14;34625:29;;34476:184;;;;:::o;34666:132::-;34733:4;34756:3;34748:11;;34786:4;34781:3;34777:14;34769:22;;34666:132;;;:::o;34804:108::-;34881:24;34899:5;34881:24;:::i;:::-;34876:3;34869:37;34804:108;;:::o;34918:179::-;34987:10;35008:46;35050:3;35042:6;35008:46;:::i;:::-;35086:4;35081:3;35077:14;35063:28;;34918:179;;;;:::o;35103:113::-;35173:4;35205;35200:3;35196:14;35188:22;;35103:113;;;:::o;35252:732::-;35371:3;35400:54;35448:5;35400:54;:::i;:::-;35470:86;35549:6;35544:3;35470:86;:::i;:::-;35463:93;;35580:56;35630:5;35580:56;:::i;:::-;35659:7;35690:1;35675:284;35700:6;35697:1;35694:13;35675:284;;;35776:6;35770:13;35803:63;35862:3;35847:13;35803:63;:::i;:::-;35796:70;;35889:60;35942:6;35889:60;:::i;:::-;35879:70;;35735:224;35722:1;35719;35715:9;35710:14;;35675:284;;;35679:14;35975:3;35968:10;;35376:608;;;35252:732;;;;:::o;35990:831::-;36253:4;36291:3;36280:9;36276:19;36268:27;;36305:71;36373:1;36362:9;36358:17;36349:6;36305:71;:::i;:::-;36386:80;36462:2;36451:9;36447:18;36438:6;36386:80;:::i;:::-;36513:9;36507:4;36503:20;36498:2;36487:9;36483:18;36476:48;36541:108;36644:4;36635:6;36541:108;:::i;:::-;36533:116;;36659:72;36727:2;36716:9;36712:18;36703:6;36659:72;:::i;:::-;36741:73;36809:3;36798:9;36794:19;36785:6;36741:73;:::i;:::-;35990:831;;;;;;;;:::o;36827:225::-;36967:34;36963:1;36955:6;36951:14;36944:58;37036:8;37031:2;37023:6;37019:15;37012:33;36827:225;:::o;37058:366::-;37200:3;37221:67;37285:2;37280:3;37221:67;:::i;:::-;37214:74;;37297:93;37386:3;37297:93;:::i;:::-;37415:2;37410:3;37406:12;37399:19;;37058:366;;;:::o;37430:419::-;37596:4;37634:2;37623:9;37619:18;37611:26;;37683:9;37677:4;37673:20;37669:1;37658:9;37654:17;37647:47;37711:131;37837:4;37711:131;:::i;:::-;37703:139;;37430:419;;;:::o;37855:147::-;37956:11;37993:3;37978:18;;37855:147;;;;:::o;38008:114::-;;:::o;38128:398::-;38287:3;38308:83;38389:1;38384:3;38308:83;:::i;:::-;38301:90;;38400:93;38489:3;38400:93;:::i;:::-;38518:1;38513:3;38509:11;38502:18;;38128:398;;;:::o;38532:379::-;38716:3;38738:147;38881:3;38738:147;:::i;:::-;38731:154;;38902:3;38895:10;;38532:379;;;:::o

Swarm Source

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