ETH Price: $3,082.97 (-0.18%)
Gas: 5 Gwei

Token

European Cup Inu (ECI)
 

Overview

Max Total Supply

1,000,000,000 ECI

Holders

182 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0 ECI

Value
$0.00
0x2169d9d12f4945484327D3f6b5DA5760FE275E11
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Join us as we bring excitement to the European Cup with European Cup Inu ($ECI). Our platform combines the thrill of soccer with the innovative world of cryptocurrency. Get ready to experience the European Cup like never before!

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
ECI

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-05-28
*/

/**
 *                    
           ___
       .:::---:::.
     .'--:     :--'.
    /.'   \   /   `.\
   | /'._ /:::\ _.'\ |
   |/    |:::::|    \|
   |:\ .''-:::-''. /:|
    \:|    `|`    |:/
     '.'._.:::._.'.'
       '-:::::::-' 
                                           
 * European Cup Inu : BetFi
 * 
 * Telegram: https://t.me/EuropeanCupInu
 * Twitter: twitter.com/EuropeanCupInu
 * Homepage: https://europeancupinu.com
 * 
 * Total Supply: 1,000,000,000 $ECI
 * Transaction Tax: 0%
 * Buy/Sell Tax: 5%
*/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.17;

interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

    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(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);
    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, uint value);
    event Transfer(address indexed from, address indexed to, uint 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 (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint 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 (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;

    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    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 (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

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

library Address {
    function sendValue(address payable recipient, uint256 amount) internal returns(bool){
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        return success;
    }
}

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

    function _msgData() internal view virtual returns (bytes calldata) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

abstract contract Ownable is Context {
    address private _owner;

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

    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

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

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) {
        uint256 currentAllowance = _allowances[sender][_msgSender()];
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
            unchecked {
                _approve(sender, _msgSender(), currentAllowance - amount);
            }
        }

        _transfer(sender, recipient, 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 {}
}

contract ECI is ERC20, Ownable {
    using Address for address payable;

    IUniswapV2Router02 public uniswapV2Router;
    address public  uniswapV2Pair;

    mapping (address => bool) private _isExcludedFromFees;

    uint256 public  ECIFeeOnBuy;
    uint256 public  ECIFeeOnSell;

    address public  ECIVault;

    uint256 public  swapTokensAtAmount;
    bool    private swapping;

    bool    public swapEnabled;

    event ExcludeFromFees(address indexed account, bool isExcluded);
    event ECIVaultChanged(address ECIVault);
    event UpdateFees(uint256 ECIFeeOnBuy, uint256 ECIFeeOnSell);
    event SwapAndSendECI(uint256 tokensSwapped, uint256 bnbSend);
    event SwapTokensAtAmountUpdated(uint256 swapTokensAtAmount);

    constructor () ERC20("European Cup Inu", "ECI") 
    {   
        address router;
        if (block.chainid == 56) {
            router = 0x10ED43C718714eb63d5aA57B78B54704E256024E; // BSC Pancake Mainnet Router
        } else if (block.chainid == 97) {
            router = 0xD99D1c33F9fC3444f8101754aBC46c52416550D1; // BSC Pancake Testnet Router
        } else if (block.chainid == 1 || block.chainid == 5) {
            router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; // ETH Uniswap Mainnet % Testnet
        } else {
            revert();
        }

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(router);
        address _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair   = _uniswapV2Pair;

        _approve(address(this), address(uniswapV2Router), type(uint256).max);

        ECIFeeOnBuy  = 5;
        ECIFeeOnSell = 5;

        ECIVault = 0x639D48fB134f39b89696bC74214B0d61AFba4bc1;

        maxTransactionLimitEnabled = true;

        _isExcludedFromMaxTxLimit[owner()] = true;
        _isExcludedFromMaxTxLimit[address(this)] = true;
        _isExcludedFromMaxTxLimit[address(0xdead)] = true;
        _isExcludedFromMaxTxLimit[ECIVault] = true;
        _isExcludedFromMaxTxLimit[0x407993575c91ce7643a4d4cCACc9A98c36eE1BBE] = true; //pinklock

        maxWalletLimitEnabled = true;

        _isExcludedFromMaxWalletLimit[owner()] = true;
        _isExcludedFromMaxWalletLimit[address(this)] = true;
        _isExcludedFromMaxWalletLimit[address(0xdead)] = true;
        _isExcludedFromMaxWalletLimit[ECIVault] = true;
        _isExcludedFromMaxWalletLimit[0x407993575c91ce7643a4d4cCACc9A98c36eE1BBE] = true; //pinklock

        _isExcludedFromFees[owner()] = true;
        _isExcludedFromFees[address(0xdead)] = true;
        _isExcludedFromFees[address(this)] = true;
        _isExcludedFromFees[0x407993575c91ce7643a4d4cCACc9A98c36eE1BBE] = true; //pinklock

        _mint(owner(), 1e9 * (10 ** decimals()));
        swapTokensAtAmount = totalSupply() / 5_000;

        maxTransactionAmountBuy     = totalSupply() * 20 / 1000;
        maxTransactionAmountSell    = totalSupply() * 20 / 1000;

        maxWalletAmount = totalSupply() * 20 / 1000;

        tradingEnabled = false;
        swapEnabled = false;
    }

    receive() external payable {

  	}

    function claimStuckTokens(address token) external onlyOwner {
        require(token != address(this), "Owner cannot claim contract's balance of its own tokens");
        if (token == address(0x0)) {
            payable(msg.sender).sendValue(address(this).balance);
            return;
        }
        IERC20 ERC20token = IERC20(token);
        uint256 balance = ERC20token.balanceOf(address(this));
        ERC20token.transfer(msg.sender, balance);
    }

    function excludeFromFees(address account, bool excluded) external onlyOwner{
        require(_isExcludedFromFees[account] != excluded,"Account is already the value of 'excluded'");
        _isExcludedFromFees[account] = excluded;

        emit ExcludeFromFees(account, excluded);
    }

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

    function updateFees(uint256 _ECIFeeOnSell, uint256 _ECIFeeOnBuy) external onlyOwner {
        require(_ECIFeeOnSell <= 5, "Fee cannot exceed 5%.");
        require(_ECIFeeOnBuy <= 5, "Fee cannot exceed 5%.");

        ECIFeeOnSell = _ECIFeeOnSell;
        ECIFeeOnBuy = _ECIFeeOnBuy;

        emit UpdateFees(ECIFeeOnSell, ECIFeeOnBuy);
    }

    function changeECIVault(address _ECIVault) external onlyOwner{
        require(_ECIVault != ECIVault, "ECI wallet is already that address");
        require(_ECIVault != address(0),"ECI wallet cannot be the zero address");
        ECIVault = _ECIVault;

        emit ECIVaultChanged(ECIVault);
    }

    bool public tradingEnabled;
    uint256 public tradingBlock;
    uint256 public tradingTime;

    function enableTrading() external onlyOwner{
        require(!tradingEnabled, "Trading already enabled.");
        tradingEnabled = true;
        swapEnabled = true;
        tradingBlock = block.number;
        tradingTime = block.timestamp;
    }

    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(tradingEnabled || _isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading not yet enabled!");
       
        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        if (maxTransactionLimitEnabled) 
        {
            if ((from == uniswapV2Pair || to == uniswapV2Pair) &&
                !_isExcludedFromMaxTxLimit[from] && 
                !_isExcludedFromMaxTxLimit[to]
            ) {
                if (from == uniswapV2Pair) {
                    require(
                        amount <= maxTransactionAmountBuy,  
                        "AntiWhale: Transfer amount exceeds the maxTransactionAmount"
                    );
                } else {
                    require(
                        amount <= maxTransactionAmountSell, 
                        "AntiWhale: Transfer amount exceeds the maxTransactionAmount"
                    );
                }
            }
        }

		uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (canSwap &&
            !swapping &&
            to == uniswapV2Pair &&
            swapEnabled
        ) {
            swapping = true;

            swapAndSendECI(contractTokenBalance);     

            swapping = false;
        }

        uint256 _totalFees;
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to] || swapping) {
            _totalFees = 0;
        } else if (from == uniswapV2Pair) {
            if (block.number < tradingBlock + 4){
                _totalFees = 99;
            } else if(block.timestamp > tradingTime + 300){
                _totalFees = ECIFeeOnBuy;
            } else{
                _totalFees =  19;
            }
        } else if (to == uniswapV2Pair) {
            if(block.timestamp > tradingTime + 300){
                _totalFees = ECIFeeOnSell;
            } else{
                _totalFees =  19;
            }
        } else {
            _totalFees = 0;
        }

        if (_totalFees > 0) {
            uint256 fees = (amount * _totalFees) / 100;
            amount = amount - fees;
            super._transfer(from, address(this), fees);
        }

        if (maxWalletLimitEnabled) 
        {
            if (!_isExcludedFromMaxWalletLimit[from] && 
                !_isExcludedFromMaxWalletLimit[to] &&
                to != uniswapV2Pair
            ) {
                uint256 balance  = balanceOf(to);
                require(
                    balance + amount <= maxWalletAmount, 
                    "MaxWallet: Recipient exceeds the maxWalletAmount"
                );
            }
        }

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

    function setSwapEnabled(bool _enabled) external onlyOwner{
        require(swapEnabled != _enabled, "swapEnabled already at this state.");
        swapEnabled = _enabled;
    }

    function setSwapTokensAtAmount(uint256 newAmount) external onlyOwner{
        require(newAmount > totalSupply() / 1_000_000, "SwapTokensAtAmount must be greater than 0.0001% of total supply");
        swapTokensAtAmount = newAmount;

        emit SwapTokensAtAmountUpdated(swapTokensAtAmount);
    }

    function swapAndSendECI(uint256 tokenAmount) private {
        uint256 initialBalance = address(this).balance;

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

        uint256 newBalance = address(this).balance - initialBalance;

        payable(ECIVault).sendValue(newBalance);

        emit SwapAndSendECI(tokenAmount, newBalance);
    }

    mapping(address => bool) private _isExcludedFromMaxWalletLimit;
    bool    public maxWalletLimitEnabled;
    uint256 public maxWalletAmount;

    event ExcludedFromMaxWalletLimit(address indexed account, bool isExcluded);
    event MaxWalletLimitStateChanged(bool maxWalletLimit);
    event MaxWalletLimitAmountChanged(uint256 maxWalletAmount);

    function setEnableMaxWalletLimit(bool enable) external onlyOwner {
        require(enable != maxWalletLimitEnabled,"Max wallet limit is already set to that state");
        maxWalletLimitEnabled = enable;

        emit MaxWalletLimitStateChanged(maxWalletLimitEnabled);
    }

    function setMaxWalletAmount(uint256 _maxWalletAmount) external onlyOwner {
        require(_maxWalletAmount >= (totalSupply() / (10 ** decimals())) / 100, "Max wallet percentage cannot be lower than 1%");
        maxWalletAmount = _maxWalletAmount * (10 ** decimals());

        emit MaxWalletLimitAmountChanged(maxWalletAmount);
    }

    function excludeFromMaxWallet(address account, bool exclude) external onlyOwner {
        require( _isExcludedFromMaxWalletLimit[account] != exclude,"Account is already set to that state");
        require(account != address(this), "Can't set this address.");

        _isExcludedFromMaxWalletLimit[account] = exclude;

        emit ExcludedFromMaxWalletLimit(account, exclude);
    }

    function isExcludedFromMaxWalletLimit(address account) public view returns(bool) {
        return _isExcludedFromMaxWalletLimit[account];
    }

    mapping(address => bool) private _isExcludedFromMaxTxLimit;
    bool    public  maxTransactionLimitEnabled;
    uint256 public  maxTransactionAmountBuy;
    uint256 public  maxTransactionAmountSell;

    event ExcludedFromMaxTransactionLimit(address indexed account, bool isExcluded);
    event MaxTransactionLimitStateChanged(bool maxTransactionLimit);
    event MaxTransactionLimitAmountChanged(uint256 maxTransactionAmountBuy, uint256 maxTransactionAmountSell);

    function setEnableMaxTransactionLimit(bool enable) external onlyOwner {
        require(enable != maxTransactionLimitEnabled, "Max transaction limit is already set to that state");
        maxTransactionLimitEnabled = enable;

        emit MaxTransactionLimitStateChanged(maxTransactionLimitEnabled);
    }

    function setMaxTransactionAmounts(uint256 _maxTransactionAmountBuy, uint256 _maxTransactionAmountSell) external onlyOwner {
        require(
            _maxTransactionAmountBuy  >= (totalSupply() / (10 ** decimals())) / 1_000 && 
            _maxTransactionAmountSell >= (totalSupply() / (10 ** decimals())) / 1_000, 
            "Max Transaction limis cannot be lower than 0.1% of total supply"
        ); 
        maxTransactionAmountBuy  = _maxTransactionAmountBuy  * (10 ** decimals());
        maxTransactionAmountSell = _maxTransactionAmountSell * (10 ** decimals());

        emit MaxTransactionLimitAmountChanged(maxTransactionAmountBuy, maxTransactionAmountSell);
    }

    function excludeFromMaxTransactionLimit(address account, bool exclude) external onlyOwner {
        require( _isExcludedFromMaxTxLimit[account] != exclude, "Account is already set to that state");
        require(account != address(this), "Can't set this address.");

        _isExcludedFromMaxTxLimit[account] = exclude;

        emit ExcludedFromMaxTransactionLimit(account, exclude);
    }

    function isExcludedFromMaxTransaction(address account) public view returns(bool) {
        return _isExcludedFromMaxTxLimit[account];
    }
}

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":false,"internalType":"address","name":"ECIVault","type":"address"}],"name":"ECIVaultChanged","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":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludedFromMaxTransactionLimit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludedFromMaxWalletLimit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxTransactionAmountBuy","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"maxTransactionAmountSell","type":"uint256"}],"name":"MaxTransactionLimitAmountChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"maxTransactionLimit","type":"bool"}],"name":"MaxTransactionLimitStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxWalletAmount","type":"uint256"}],"name":"MaxWalletLimitAmountChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"maxWalletLimit","type":"bool"}],"name":"MaxWalletLimitStateChanged","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":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bnbSend","type":"uint256"}],"name":"SwapAndSendECI","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"swapTokensAtAmount","type":"uint256"}],"name":"SwapTokensAtAmountUpdated","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":false,"internalType":"uint256","name":"ECIFeeOnBuy","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ECIFeeOnSell","type":"uint256"}],"name":"UpdateFees","type":"event"},{"inputs":[],"name":"ECIFeeOnBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ECIFeeOnSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ECIVault","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_ECIVault","type":"address"}],"name":"changeECIVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"claimStuckTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"exclude","type":"bool"}],"name":"excludeFromMaxTransactionLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"exclude","type":"bool"}],"name":"excludeFromMaxWallet","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":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromMaxTransaction","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromMaxWalletLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmountBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmountSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionLimitEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletLimitEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[{"internalType":"bool","name":"enable","type":"bool"}],"name":"setEnableMaxTransactionLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enable","type":"bool"}],"name":"setEnableMaxWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTransactionAmountBuy","type":"uint256"},{"internalType":"uint256","name":"_maxTransactionAmountSell","type":"uint256"}],"name":"setMaxTransactionAmounts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxWalletAmount","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"setSwapTokensAtAmount","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":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_ECIFeeOnSell","type":"uint256"},{"internalType":"uint256","name":"_ECIFeeOnBuy","type":"uint256"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040523480156200001157600080fd5b506040518060400160405280601081526020017f4575726f7065616e2043757020496e75000000000000000000000000000000008152506040518060400160405280600381526020017f454349000000000000000000000000000000000000000000000000000000000081525081600390816200008f91906200119e565b508060049081620000a191906200119e565b5050506000620000b662000b8c60201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000603846036200017d577310ed43c718714eb63d5aa57b78b54704e256024e9050620001dd565b60614603620001a35773d99d1c33f9fc3444f8101754abc46c52416550d19050620001dc565b6001461480620001b35750600546145b15620001d657737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001db565b600080fd5b5b5b600081905060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000230573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002569190620012ef565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002be573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002e49190620012ef565b6040518363ffffffff1660e01b81526004016200030392919062001332565b6020604051808303816000875af115801562000323573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003499190620012ef565b905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200042230600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62000b9460201b60201c565b60056009819055506005600a8190555073639d48fb134f39b89696bc74214b0d61afba4bc1600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601460006101000a81548160ff021916908315150217905550600160136000620004b862000d6560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016013600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160136000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016013600073407993575c91ce7643a4d4ccacc9a98c36ee1bbe73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601160006101000a81548160ff021916908315150217905550600160106000620006d262000d6560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601060003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016010600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160106000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016010600073407993575c91ce7643a4d4ccacc9a98c36ee1bbe73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160086000620008d162000d6560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016008600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016008600073407993575c91ce7643a4d4ccacc9a98c36ee1bbe73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000a8f62000a5462000d6560201b60201c565b62000a6462000d8f60201b60201c565b600a62000a729190620014ef565b633b9aca0062000a83919062001540565b62000d9860201b60201c565b61138862000aa262000f1060201b60201c565b62000aae9190620015ba565b600c819055506103e8601462000ac962000f1060201b60201c565b62000ad5919062001540565b62000ae19190620015ba565b6015819055506103e8601462000afc62000f1060201b60201c565b62000b08919062001540565b62000b149190620015ba565b6016819055506103e8601462000b2f62000f1060201b60201c565b62000b3b919062001540565b62000b479190620015ba565b6012819055506000600d60026101000a81548160ff0219169083151502179055506000600d60016101000a81548160ff0219169083151502179055505050506200180e565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160362000c06576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000bfd9062001679565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000c78576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c6f9062001711565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405162000d58919062001744565b60405180910390a3505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006012905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000e0a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000e0190620017b1565b60405180910390fd5b62000e1e6000838362000f1a60201b60201c565b806002600082825462000e329190620017d3565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000e899190620017d3565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000ef0919062001744565b60405180910390a362000f0c6000838362000f1f60201b60201c565b5050565b6000600254905090565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000fa657607f821691505b60208210810362000fbc5762000fbb62000f5e565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620010267fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000fe7565b62001032868362000fe7565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b60006200107f6200107962001073846200104a565b62001054565b6200104a565b9050919050565b6000819050919050565b6200109b836200105e565b620010b3620010aa8262001086565b84845462000ff4565b825550505050565b600090565b620010ca620010bb565b620010d781848462001090565b505050565b5b81811015620010ff57620010f3600082620010c0565b600181019050620010dd565b5050565b601f8211156200114e57620011188162000fc2565b620011238462000fd7565b8101602085101562001133578190505b6200114b620011428562000fd7565b830182620010dc565b50505b505050565b600082821c905092915050565b6000620011736000198460080262001153565b1980831691505092915050565b60006200118e838362001160565b9150826002028217905092915050565b620011a98262000f24565b67ffffffffffffffff811115620011c557620011c462000f2f565b5b620011d1825462000f8d565b620011de82828562001103565b600060209050601f83116001811462001216576000841562001201578287015190505b6200120d858262001180565b8655506200127d565b601f198416620012268662000fc2565b60005b82811015620012505784890151825560018201915060208501945060208101905062001229565b868310156200127057848901516200126c601f89168262001160565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620012b7826200128a565b9050919050565b620012c981620012aa565b8114620012d557600080fd5b50565b600081519050620012e981620012be565b92915050565b60006020828403121562001308576200130762001285565b5b60006200131884828501620012d8565b91505092915050565b6200132c81620012aa565b82525050565b600060408201905062001349600083018562001321565b62001358602083018462001321565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115620013ed57808604811115620013c557620013c46200135f565b5b6001851615620013d55780820291505b8081029050620013e5856200138e565b9450620013a5565b94509492505050565b600082620014085760019050620014db565b81620014185760009050620014db565b81600181146200143157600281146200143c5762001472565b6001915050620014db565b60ff8411156200145157620014506200135f565b5b8360020a9150848211156200146b576200146a6200135f565b5b50620014db565b5060208310610133831016604e8410600b8410161715620014ac5782820a905083811115620014a657620014a56200135f565b5b620014db565b620014bb84848460016200139b565b92509050818404811115620014d557620014d46200135f565b5b81810290505b9392505050565b600060ff82169050919050565b6000620014fc826200104a565b91506200150983620014e2565b9250620015387fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484620013f6565b905092915050565b60006200154d826200104a565b91506200155a836200104a565b92508282026200156a816200104a565b915082820484148315176200158457620015836200135f565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620015c7826200104a565b9150620015d4836200104a565b925082620015e757620015e66200158b565b5b828204905092915050565b600082825260208201905092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600062001661602483620015f2565b91506200166e8262001603565b604082019050919050565b60006020820190508181036000830152620016948162001652565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000620016f9602283620015f2565b915062001706826200169b565b604082019050919050565b600060208201905081810360008301526200172c81620016ea565b9050919050565b6200173e816200104a565b82525050565b60006020820190506200175b600083018462001733565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062001799601f83620015f2565b9150620017a68262001761565b602082019050919050565b60006020820190508181036000830152620017cc816200178a565b9050919050565b6000620017e0826200104a565b9150620017ed836200104a565b92508282019050808211156200180857620018076200135f565b5b92915050565b6152f9806200181e6000396000f3fe60806040526004361061026b5760003560e01c806370a0823111610144578063afa4f3b2116100b6578063d2fcc0011161007a578063d2fcc00114610955578063dd62ed3e1461097e578063e01af92c146109bb578063e2f45605146109e4578063f2fde38b14610a0f578063f9d0831a14610a3857610272565b8063afa4f3b214610884578063b6f7f681146108ad578063b8158d60146108d6578063c024666814610901578063cd51e6d41461092a57610272565b8063a156c25b11610108578063a156c25b1461074c578063a40a3b7314610777578063a457c2d7146107a2578063a8a69b9d146107df578063a9059cbb1461081c578063aa4bde281461085957610272565b806370a0823114610679578063880bcbc1146106b65780638a8c523c146106df5780638da5cb5b146106f657806395d89b411461072157610272565b8063313ce567116101dd5780634fbee193116101a15780634fbee1931461056957806356a6cabf146105a657806359136fa5146105cf57806366e46d51146105fa5780636db79437146106255780636ddd17131461064e57610272565b8063313ce5671461048257806339509351146104ad57806341f10dc4146104ea57806349bd5a5e146105135780634ada218b1461053e57610272565b806318d9ceae1161022f57806318d9ceae1461036057806321a9d82a1461039d57806323b872dd146103c857806327a14fc2146104055780632a6c7dba1461042e5780632ba86bf21461045757610272565b80630105d0fd1461027757806306fdde03146102a2578063095ea7b3146102cd5780631694505e1461030a57806318160ddd1461033557610272565b3661027257005b600080fd5b34801561028357600080fd5b5061028c610a61565b60405161029991906139a8565b60405180910390f35b3480156102ae57600080fd5b506102b7610a67565b6040516102c49190613a53565b60405180910390f35b3480156102d957600080fd5b506102f460048036038101906102ef9190613b04565b610af9565b6040516103019190613b5f565b60405180910390f35b34801561031657600080fd5b5061031f610b17565b60405161032c9190613bd9565b60405180910390f35b34801561034157600080fd5b5061034a610b3d565b60405161035791906139a8565b60405180910390f35b34801561036c57600080fd5b5061038760048036038101906103829190613bf4565b610b47565b6040516103949190613b5f565b60405180910390f35b3480156103a957600080fd5b506103b2610b9d565b6040516103bf9190613b5f565b60405180910390f35b3480156103d457600080fd5b506103ef60048036038101906103ea9190613c21565b610bb0565b6040516103fc9190613b5f565b60405180910390f35b34801561041157600080fd5b5061042c60048036038101906104279190613c74565b610ccf565b005b34801561043a57600080fd5b5061045560048036038101906104509190613ccd565b610e3b565b005b34801561046357600080fd5b5061046c610f8a565b6040516104799190613b5f565b60405180910390f35b34801561048e57600080fd5b50610497610f9d565b6040516104a49190613d16565b60405180910390f35b3480156104b957600080fd5b506104d460048036038101906104cf9190613b04565b610fa6565b6040516104e19190613b5f565b60405180910390f35b3480156104f657600080fd5b50610511600480360381019061050c9190613bf4565b611052565b005b34801561051f57600080fd5b50610528611285565b6040516105359190613d40565b60405180910390f35b34801561054a57600080fd5b506105536112ab565b6040516105609190613b5f565b60405180910390f35b34801561057557600080fd5b50610590600480360381019061058b9190613bf4565b6112be565b60405161059d9190613b5f565b60405180910390f35b3480156105b257600080fd5b506105cd60048036038101906105c89190613ccd565b611314565b005b3480156105db57600080fd5b506105e4611463565b6040516105f191906139a8565b60405180910390f35b34801561060657600080fd5b5061060f611469565b60405161061c91906139a8565b60405180910390f35b34801561063157600080fd5b5061064c60048036038101906106479190613d5b565b61146f565b005b34801561065a57600080fd5b506106636115dd565b6040516106709190613b5f565b60405180910390f35b34801561068557600080fd5b506106a0600480360381019061069b9190613bf4565b6115f0565b6040516106ad91906139a8565b60405180910390f35b3480156106c257600080fd5b506106dd60048036038101906106d89190613d9b565b611638565b005b3480156106eb57600080fd5b506106f4611878565b005b34801561070257600080fd5b5061070b6119a5565b6040516107189190613d40565b60405180910390f35b34801561072d57600080fd5b506107366119cf565b6040516107439190613a53565b60405180910390f35b34801561075857600080fd5b50610761611a61565b60405161076e9190613d40565b60405180910390f35b34801561078357600080fd5b5061078c611a87565b60405161079991906139a8565b60405180910390f35b3480156107ae57600080fd5b506107c960048036038101906107c49190613b04565b611a8d565b6040516107d69190613b5f565b60405180910390f35b3480156107eb57600080fd5b5061080660048036038101906108019190613bf4565b611b78565b6040516108139190613b5f565b60405180910390f35b34801561082857600080fd5b50610843600480360381019061083e9190613b04565b611bce565b6040516108509190613b5f565b60405180910390f35b34801561086557600080fd5b5061086e611bec565b60405161087b91906139a8565b60405180910390f35b34801561089057600080fd5b506108ab60048036038101906108a69190613c74565b611bf2565b005b3480156108b957600080fd5b506108d460048036038101906108cf9190613d5b565b611d23565b005b3480156108e257600080fd5b506108eb611ef8565b6040516108f891906139a8565b60405180910390f35b34801561090d57600080fd5b5061092860048036038101906109239190613d9b565b611efe565b005b34801561093657600080fd5b5061093f6120d0565b60405161094c91906139a8565b60405180910390f35b34801561096157600080fd5b5061097c60048036038101906109779190613d9b565b6120d6565b005b34801561098a57600080fd5b506109a560048036038101906109a09190613ddb565b612316565b6040516109b291906139a8565b60405180910390f35b3480156109c757600080fd5b506109e260048036038101906109dd9190613ccd565b61239d565b005b3480156109f057600080fd5b506109f96124a6565b604051610a0691906139a8565b60405180910390f35b348015610a1b57600080fd5b50610a366004803603810190610a319190613bf4565b6124ac565b005b348015610a4457600080fd5b50610a5f6004803603810190610a5a9190613bf4565b612672565b005b60155481565b606060038054610a7690613e4a565b80601f0160208091040260200160405190810160405280929190818152602001828054610aa290613e4a565b8015610aef5780601f10610ac457610100808354040283529160200191610aef565b820191906000526020600020905b815481529060010190602001808311610ad257829003601f168201915b5050505050905090565b6000610b0d610b066128e2565b84846128ea565b6001905092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b601160009054906101000a900460ff1681565b600080600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610bfc6128e2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610cb85782811015610ca3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9a90613eed565b60405180910390fd5b610cb785610caf6128e2565b8584036128ea565b5b610cc3858585612ab3565b60019150509392505050565b610cd76128e2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5d90613f59565b60405180910390fd5b6064610d70610f9d565b600a610d7c91906140db565b610d84610b3d565b610d8e9190614155565b610d989190614155565b811015610dda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd1906141f8565b60405180910390fd5b610de2610f9d565b600a610dee91906140db565b81610df99190614218565b6012819055507f21bc0ea3406acb92d4449ab33befb4ae82f873a22f3b6cf0e466b2710beb5942601254604051610e3091906139a8565b60405180910390a150565b610e436128e2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ed2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec990613f59565b60405180910390fd5b601160009054906101000a900460ff16151581151503610f27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1e906142cc565b60405180910390fd5b80601160006101000a81548160ff0219169083151502179055507f670f884265aba2d05e7c26efbc42f8365effc4cb3fcfcefddba0c0b71a6231f1601160009054906101000a900460ff16604051610f7f9190613b5f565b60405180910390a150565b601460009054906101000a900460ff1681565b60006012905090565b6000611048610fb36128e2565b848460016000610fc16128e2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461104391906142ec565b6128ea565b6001905092915050565b61105a6128e2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e090613f59565b60405180910390fd5b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611179576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117090614392565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036111e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111df90614424565b60405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f9339b30badba18d3425dd12af6db2b7b0ea4b28d6240a10befb5bddb14cf6acf600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660405161127a9190613d40565b60405180910390a150565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d60029054906101000a900460ff1681565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61131c6128e2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a290613f59565b60405180910390fd5b601460009054906101000a900460ff16151581151503611400576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f7906144b6565b60405180910390fd5b80601460006101000a81548160ff0219169083151502179055507fe81be35e61864c26afd7a4655e99f321378d0aaae1e5af8ee67b658a7460f3cf601460009054906101000a900460ff166040516114589190613b5f565b60405180910390a150565b60165481565b600a5481565b6114776128e2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611506576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fd90613f59565b60405180910390fd5b600582111561154a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154190614522565b60405180910390fd5b600581111561158e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158590614522565b60405180910390fd5b81600a81905550806009819055507f53482196ef67ac615caab1c3eca2c270acbfdcd75e57c5f24c1b98b10c8e6e04600a546009546040516115d1929190614542565b60405180910390a15050565b600d60019054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6116406128e2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c690613f59565b60405180910390fd5b801515601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503611761576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611758906145dd565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036117cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c690614649565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f8727c4afe988887760e8db0bbad9f9fcceee6428545956832f67c8fdbd589c108260405161186c9190613b5f565b60405180910390a25050565b6118806128e2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461190f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190690613f59565b60405180910390fd5b600d60029054906101000a900460ff161561195f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611956906146b5565b60405180910390fd5b6001600d60026101000a81548160ff0219169083151502179055506001600d60016101000a81548160ff02191690831515021790555043600e8190555042600f81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546119de90613e4a565b80601f0160208091040260200160405190810160405280929190818152602001828054611a0a90613e4a565b8015611a575780601f10611a2c57610100808354040283529160200191611a57565b820191906000526020600020905b815481529060010190602001808311611a3a57829003601f168201915b5050505050905090565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60095481565b60008060016000611a9c6128e2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611b59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5090614747565b60405180910390fd5b611b6d611b646128e2565b858584036128ea565b600191505092915050565b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000611be2611bdb6128e2565b8484612ab3565b6001905092915050565b60125481565b611bfa6128e2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8090613f59565b60405180910390fd5b620f4240611c95610b3d565b611c9f9190614155565b8111611ce0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd7906147d9565b60405180910390fd5b80600c819055507f7c26bfee26f82e8cb57af48f4019cc64582db6fac7bad778433f10572ae8b145600c54604051611d1891906139a8565b60405180910390a150565b611d2b6128e2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611dba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db190613f59565b60405180910390fd5b6103e8611dc5610f9d565b600a611dd191906140db565b611dd9610b3d565b611de39190614155565b611ded9190614155565b8210158015611e2e57506103e8611e02610f9d565b600a611e0e91906140db565b611e16610b3d565b611e209190614155565b611e2a9190614155565b8110155b611e6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e649061486b565b60405180910390fd5b611e75610f9d565b600a611e8191906140db565b82611e8c9190614218565b601581905550611e9a610f9d565b600a611ea691906140db565b81611eb19190614218565b6016819055507f8c8cbc911b80df94332ececb8eb0945274d76fa965600a0f01f42af3f8afb131601554601654604051611eec929190614542565b60405180910390a15050565b600f5481565b611f066128e2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8c90613f59565b60405180910390fd5b801515600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503612027576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201e906148fd565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516120c49190613b5f565b60405180910390a25050565b600e5481565b6120de6128e2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461216d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216490613f59565b60405180910390fd5b801515601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515036121ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f6906145dd565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361226d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226490614649565b60405180910390fd5b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f1d9a11e204b58ad56c619c61600e42167624659d218f0143f1f64956b0daae6c8260405161230a9190613b5f565b60405180910390a25050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6123a56128e2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612434576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242b90613f59565b60405180910390fd5b801515600d60019054906101000a900460ff16151503612489576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124809061498f565b60405180910390fd5b80600d60016101000a81548160ff02191690831515021790555050565b600c5481565b6124b46128e2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612543576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253a90613f59565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036125b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a990614a21565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61267a6128e2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612709576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270090613f59565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612777576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276e90614ab3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036127da576127d4473373ffffffffffffffffffffffffffffffffffffffff1661339990919063ffffffff16565b506128df565b600081905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161281a9190613d40565b602060405180830381865afa158015612837573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061285b9190614ae8565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401612898929190614b15565b6020604051808303816000875af11580156128b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128db9190614b53565b5050505b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612959576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161295090614bf2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036129c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129bf90614c84565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612aa691906139a8565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612b22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b1990614d16565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612b91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b8890614da8565b60405180910390fd5b600d60029054906101000a900460ff1680612bf55750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80612c495750600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612c88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c7f90614e14565b60405180910390fd5b60008103612ca157612c9c83836000613454565b613394565b601460009054906101000a900460ff1615612ef757600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480612d5f5750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b8015612db55750601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612e0b5750601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612ef657600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612eaf57601554811115612eaa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ea190614ea6565b60405180910390fd5b612ef5565b601654811115612ef4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eeb90614ea6565b60405180910390fd5b5b5b5b6000612f02306115f0565b90506000600c548210159050808015612f285750600d60009054906101000a900460ff16155b8015612f815750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b8015612f995750600d60019054906101000a900460ff165b15612fde576001600d60006101000a81548160ff021916908315150217905550612fc2826136d3565b6000600d60006101000a81548160ff0219169083151502179055505b6000600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806130815750600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806130985750600d60009054906101000a900460ff165b156130a657600090506131cd565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1603613146576004600e5461310a91906142ec565b43101561311a5760639050613141565b61012c600f5461312a91906142ec565b42111561313b576009549050613140565b601390505b5b6131cc565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16036131c65761012c600f546131ab91906142ec565b4211156131bc57600a5490506131c1565b601390505b6131cb565b600090505b5b5b600081111561320d576000606482866131e69190614218565b6131f09190614155565b905080856131fe9190614ec6565b945061320b873083613454565b505b601160009054906101000a900460ff161561338557601060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156132c65750601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156133205750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b15613384576000613330866115f0565b9050601254858261334191906142ec565b1115613382576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161337990614f6c565b60405180910390fd5b505b5b613390868686613454565b5050505b505050565b6000814710156133de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133d590614fd8565b60405180910390fd5b60008373ffffffffffffffffffffffffffffffffffffffff168360405161340490615029565b60006040518083038185875af1925050503d8060008114613441576040519150601f19603f3d011682016040523d82523d6000602084013e613446565b606091505b505090508091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036134c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134ba90614d16565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613532576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161352990614da8565b60405180910390fd5b61353d838383613985565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156135c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135ba906150b0565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461365691906142ec565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516136ba91906139a8565b60405180910390a36136cd84848461398a565b50505050565b60004790506000600267ffffffffffffffff8111156136f5576136f46150d0565b5b6040519080825280602002602001820160405280156137235781602001602082028036833780820191505090505b509050308160008151811061373b5761373a6150ff565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156137e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138069190615143565b8160018151811061381a576138196150ff565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008430426040518663ffffffff1660e01b81526004016138b8959493929190615269565b600060405180830381600087803b1580156138d257600080fd5b505af11580156138e6573d6000803e3d6000fd5b50505050600082476138f89190614ec6565b905061394581600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661339990919063ffffffff16565b507f14e391b2e5e513e504ae2c417d969bd74548f96476fbae126418434c53dd228a8482604051613977929190614542565b60405180910390a150505050565b505050565b505050565b6000819050919050565b6139a28161398f565b82525050565b60006020820190506139bd6000830184613999565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156139fd5780820151818401526020810190506139e2565b60008484015250505050565b6000601f19601f8301169050919050565b6000613a25826139c3565b613a2f81856139ce565b9350613a3f8185602086016139df565b613a4881613a09565b840191505092915050565b60006020820190508181036000830152613a6d8184613a1a565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613aa582613a7a565b9050919050565b613ab581613a9a565b8114613ac057600080fd5b50565b600081359050613ad281613aac565b92915050565b613ae18161398f565b8114613aec57600080fd5b50565b600081359050613afe81613ad8565b92915050565b60008060408385031215613b1b57613b1a613a75565b5b6000613b2985828601613ac3565b9250506020613b3a85828601613aef565b9150509250929050565b60008115159050919050565b613b5981613b44565b82525050565b6000602082019050613b746000830184613b50565b92915050565b6000819050919050565b6000613b9f613b9a613b9584613a7a565b613b7a565b613a7a565b9050919050565b6000613bb182613b84565b9050919050565b6000613bc382613ba6565b9050919050565b613bd381613bb8565b82525050565b6000602082019050613bee6000830184613bca565b92915050565b600060208284031215613c0a57613c09613a75565b5b6000613c1884828501613ac3565b91505092915050565b600080600060608486031215613c3a57613c39613a75565b5b6000613c4886828701613ac3565b9350506020613c5986828701613ac3565b9250506040613c6a86828701613aef565b9150509250925092565b600060208284031215613c8a57613c89613a75565b5b6000613c9884828501613aef565b91505092915050565b613caa81613b44565b8114613cb557600080fd5b50565b600081359050613cc781613ca1565b92915050565b600060208284031215613ce357613ce2613a75565b5b6000613cf184828501613cb8565b91505092915050565b600060ff82169050919050565b613d1081613cfa565b82525050565b6000602082019050613d2b6000830184613d07565b92915050565b613d3a81613a9a565b82525050565b6000602082019050613d556000830184613d31565b92915050565b60008060408385031215613d7257613d71613a75565b5b6000613d8085828601613aef565b9250506020613d9185828601613aef565b9150509250929050565b60008060408385031215613db257613db1613a75565b5b6000613dc085828601613ac3565b9250506020613dd185828601613cb8565b9150509250929050565b60008060408385031215613df257613df1613a75565b5b6000613e0085828601613ac3565b9250506020613e1185828601613ac3565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613e6257607f821691505b602082108103613e7557613e74613e1b565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613ed76028836139ce565b9150613ee282613e7b565b604082019050919050565b60006020820190508181036000830152613f0681613eca565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613f436020836139ce565b9150613f4e82613f0d565b602082019050919050565b60006020820190508181036000830152613f7281613f36565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115613fff57808604811115613fdb57613fda613f79565b5b6001851615613fea5780820291505b8081029050613ff885613fa8565b9450613fbf565b94509492505050565b60008261401857600190506140d4565b8161402657600090506140d4565b816001811461403c576002811461404657614075565b60019150506140d4565b60ff84111561405857614057613f79565b5b8360020a91508482111561406f5761406e613f79565b5b506140d4565b5060208310610133831016604e8410600b84101617156140aa5782820a9050838111156140a5576140a4613f79565b5b6140d4565b6140b78484846001613fb5565b925090508184048111156140ce576140cd613f79565b5b81810290505b9392505050565b60006140e68261398f565b91506140f183613cfa565b925061411e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484614008565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006141608261398f565b915061416b8361398f565b92508261417b5761417a614126565b5b828204905092915050565b7f4d61782077616c6c65742070657263656e746167652063616e6e6f742062652060008201527f6c6f776572207468616e20312500000000000000000000000000000000000000602082015250565b60006141e2602d836139ce565b91506141ed82614186565b604082019050919050565b60006020820190508181036000830152614211816141d5565b9050919050565b60006142238261398f565b915061422e8361398f565b925082820261423c8161398f565b9150828204841483151761425357614252613f79565b5b5092915050565b7f4d61782077616c6c6574206c696d697420697320616c7265616479207365742060008201527f746f207468617420737461746500000000000000000000000000000000000000602082015250565b60006142b6602d836139ce565b91506142c18261425a565b604082019050919050565b600060208201905081810360008301526142e5816142a9565b9050919050565b60006142f78261398f565b91506143028361398f565b925082820190508082111561431a57614319613f79565b5b92915050565b7f4543492077616c6c657420697320616c7265616479207468617420616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061437c6022836139ce565b915061438782614320565b604082019050919050565b600060208201905081810360008301526143ab8161436f565b9050919050565b7f4543492077616c6c65742063616e6e6f7420626520746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061440e6025836139ce565b9150614419826143b2565b604082019050919050565b6000602082019050818103600083015261443d81614401565b9050919050565b7f4d6178207472616e73616374696f6e206c696d697420697320616c726561647960008201527f2073657420746f20746861742073746174650000000000000000000000000000602082015250565b60006144a06032836139ce565b91506144ab82614444565b604082019050919050565b600060208201905081810360008301526144cf81614493565b9050919050565b7f4665652063616e6e6f74206578636565642035252e0000000000000000000000600082015250565b600061450c6015836139ce565b9150614517826144d6565b602082019050919050565b6000602082019050818103600083015261453b816144ff565b9050919050565b60006040820190506145576000830185613999565b6145646020830184613999565b9392505050565b7f4163636f756e7420697320616c72656164792073657420746f2074686174207360008201527f7461746500000000000000000000000000000000000000000000000000000000602082015250565b60006145c76024836139ce565b91506145d28261456b565b604082019050919050565b600060208201905081810360008301526145f6816145ba565b9050919050565b7f43616e277420736574207468697320616464726573732e000000000000000000600082015250565b60006146336017836139ce565b915061463e826145fd565b602082019050919050565b6000602082019050818103600083015261466281614626565b9050919050565b7f54726164696e6720616c726561647920656e61626c65642e0000000000000000600082015250565b600061469f6018836139ce565b91506146aa82614669565b602082019050919050565b600060208201905081810360008301526146ce81614692565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006147316025836139ce565b915061473c826146d5565b604082019050919050565b6000602082019050818103600083015261476081614724565b9050919050565b7f53776170546f6b656e734174416d6f756e74206d75737420626520677265617460008201527f6572207468616e20302e3030303125206f6620746f74616c20737570706c7900602082015250565b60006147c3603f836139ce565b91506147ce82614767565b604082019050919050565b600060208201905081810360008301526147f2816147b6565b9050919050565b7f4d6178205472616e73616374696f6e206c696d69732063616e6e6f742062652060008201527f6c6f776572207468616e20302e3125206f6620746f74616c20737570706c7900602082015250565b6000614855603f836139ce565b9150614860826147f9565b604082019050919050565b6000602082019050818103600083015261488481614848565b9050919050565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f662060008201527f276578636c756465642700000000000000000000000000000000000000000000602082015250565b60006148e7602a836139ce565b91506148f28261488b565b604082019050919050565b60006020820190508181036000830152614916816148da565b9050919050565b7f73776170456e61626c656420616c72656164792061742074686973207374617460008201527f652e000000000000000000000000000000000000000000000000000000000000602082015250565b60006149796022836139ce565b91506149848261491d565b604082019050919050565b600060208201905081810360008301526149a88161496c565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614a0b6026836139ce565b9150614a16826149af565b604082019050919050565b60006020820190508181036000830152614a3a816149fe565b9050919050565b7f4f776e65722063616e6e6f7420636c61696d20636f6e7472616374277320626160008201527f6c616e6365206f6620697473206f776e20746f6b656e73000000000000000000602082015250565b6000614a9d6037836139ce565b9150614aa882614a41565b604082019050919050565b60006020820190508181036000830152614acc81614a90565b9050919050565b600081519050614ae281613ad8565b92915050565b600060208284031215614afe57614afd613a75565b5b6000614b0c84828501614ad3565b91505092915050565b6000604082019050614b2a6000830185613d31565b614b376020830184613999565b9392505050565b600081519050614b4d81613ca1565b92915050565b600060208284031215614b6957614b68613a75565b5b6000614b7784828501614b3e565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614bdc6024836139ce565b9150614be782614b80565b604082019050919050565b60006020820190508181036000830152614c0b81614bcf565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614c6e6022836139ce565b9150614c7982614c12565b604082019050919050565b60006020820190508181036000830152614c9d81614c61565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614d006025836139ce565b9150614d0b82614ca4565b604082019050919050565b60006020820190508181036000830152614d2f81614cf3565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614d926023836139ce565b9150614d9d82614d36565b604082019050919050565b60006020820190508181036000830152614dc181614d85565b9050919050565b7f54726164696e67206e6f742079657420656e61626c6564210000000000000000600082015250565b6000614dfe6018836139ce565b9150614e0982614dc8565b602082019050919050565b60006020820190508181036000830152614e2d81614df1565b9050919050565b7f416e74695768616c653a205472616e7366657220616d6f756e7420657863656560008201527f647320746865206d61785472616e73616374696f6e416d6f756e740000000000602082015250565b6000614e90603b836139ce565b9150614e9b82614e34565b604082019050919050565b60006020820190508181036000830152614ebf81614e83565b9050919050565b6000614ed18261398f565b9150614edc8361398f565b9250828203905081811115614ef457614ef3613f79565b5b92915050565b7f4d617857616c6c65743a20526563697069656e7420657863656564732074686560008201527f206d617857616c6c6574416d6f756e7400000000000000000000000000000000602082015250565b6000614f566030836139ce565b9150614f6182614efa565b604082019050919050565b60006020820190508181036000830152614f8581614f49565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b6000614fc2601d836139ce565b9150614fcd82614f8c565b602082019050919050565b60006020820190508181036000830152614ff181614fb5565b9050919050565b600081905092915050565b50565b6000615013600083614ff8565b915061501e82615003565b600082019050919050565b600061503482615006565b9150819050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061509a6026836139ce565b91506150a58261503e565b604082019050919050565b600060208201905081810360008301526150c98161508d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061513d81613aac565b92915050565b60006020828403121561515957615158613a75565b5b60006151678482850161512e565b91505092915050565b6000819050919050565b600061519561519061518b84615170565b613b7a565b61398f565b9050919050565b6151a58161517a565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6151e081613a9a565b82525050565b60006151f283836151d7565b60208301905092915050565b6000602082019050919050565b6000615216826151ab565b61522081856151b6565b935061522b836151c7565b8060005b8381101561525c57815161524388826151e6565b975061524e836151fe565b92505060018101905061522f565b5085935050505092915050565b600060a08201905061527e6000830188613999565b61528b602083018761519c565b818103604083015261529d818661520b565b90506152ac6060830185613d31565b6152b96080830184613999565b969550505050505056fea2646970667358221220c9fc98a5b4e70a3981580ce84d21cd95524ab13bb02487f83bc5d7dbe181171864736f6c63430008110033

Deployed Bytecode

0x60806040526004361061026b5760003560e01c806370a0823111610144578063afa4f3b2116100b6578063d2fcc0011161007a578063d2fcc00114610955578063dd62ed3e1461097e578063e01af92c146109bb578063e2f45605146109e4578063f2fde38b14610a0f578063f9d0831a14610a3857610272565b8063afa4f3b214610884578063b6f7f681146108ad578063b8158d60146108d6578063c024666814610901578063cd51e6d41461092a57610272565b8063a156c25b11610108578063a156c25b1461074c578063a40a3b7314610777578063a457c2d7146107a2578063a8a69b9d146107df578063a9059cbb1461081c578063aa4bde281461085957610272565b806370a0823114610679578063880bcbc1146106b65780638a8c523c146106df5780638da5cb5b146106f657806395d89b411461072157610272565b8063313ce567116101dd5780634fbee193116101a15780634fbee1931461056957806356a6cabf146105a657806359136fa5146105cf57806366e46d51146105fa5780636db79437146106255780636ddd17131461064e57610272565b8063313ce5671461048257806339509351146104ad57806341f10dc4146104ea57806349bd5a5e146105135780634ada218b1461053e57610272565b806318d9ceae1161022f57806318d9ceae1461036057806321a9d82a1461039d57806323b872dd146103c857806327a14fc2146104055780632a6c7dba1461042e5780632ba86bf21461045757610272565b80630105d0fd1461027757806306fdde03146102a2578063095ea7b3146102cd5780631694505e1461030a57806318160ddd1461033557610272565b3661027257005b600080fd5b34801561028357600080fd5b5061028c610a61565b60405161029991906139a8565b60405180910390f35b3480156102ae57600080fd5b506102b7610a67565b6040516102c49190613a53565b60405180910390f35b3480156102d957600080fd5b506102f460048036038101906102ef9190613b04565b610af9565b6040516103019190613b5f565b60405180910390f35b34801561031657600080fd5b5061031f610b17565b60405161032c9190613bd9565b60405180910390f35b34801561034157600080fd5b5061034a610b3d565b60405161035791906139a8565b60405180910390f35b34801561036c57600080fd5b5061038760048036038101906103829190613bf4565b610b47565b6040516103949190613b5f565b60405180910390f35b3480156103a957600080fd5b506103b2610b9d565b6040516103bf9190613b5f565b60405180910390f35b3480156103d457600080fd5b506103ef60048036038101906103ea9190613c21565b610bb0565b6040516103fc9190613b5f565b60405180910390f35b34801561041157600080fd5b5061042c60048036038101906104279190613c74565b610ccf565b005b34801561043a57600080fd5b5061045560048036038101906104509190613ccd565b610e3b565b005b34801561046357600080fd5b5061046c610f8a565b6040516104799190613b5f565b60405180910390f35b34801561048e57600080fd5b50610497610f9d565b6040516104a49190613d16565b60405180910390f35b3480156104b957600080fd5b506104d460048036038101906104cf9190613b04565b610fa6565b6040516104e19190613b5f565b60405180910390f35b3480156104f657600080fd5b50610511600480360381019061050c9190613bf4565b611052565b005b34801561051f57600080fd5b50610528611285565b6040516105359190613d40565b60405180910390f35b34801561054a57600080fd5b506105536112ab565b6040516105609190613b5f565b60405180910390f35b34801561057557600080fd5b50610590600480360381019061058b9190613bf4565b6112be565b60405161059d9190613b5f565b60405180910390f35b3480156105b257600080fd5b506105cd60048036038101906105c89190613ccd565b611314565b005b3480156105db57600080fd5b506105e4611463565b6040516105f191906139a8565b60405180910390f35b34801561060657600080fd5b5061060f611469565b60405161061c91906139a8565b60405180910390f35b34801561063157600080fd5b5061064c60048036038101906106479190613d5b565b61146f565b005b34801561065a57600080fd5b506106636115dd565b6040516106709190613b5f565b60405180910390f35b34801561068557600080fd5b506106a0600480360381019061069b9190613bf4565b6115f0565b6040516106ad91906139a8565b60405180910390f35b3480156106c257600080fd5b506106dd60048036038101906106d89190613d9b565b611638565b005b3480156106eb57600080fd5b506106f4611878565b005b34801561070257600080fd5b5061070b6119a5565b6040516107189190613d40565b60405180910390f35b34801561072d57600080fd5b506107366119cf565b6040516107439190613a53565b60405180910390f35b34801561075857600080fd5b50610761611a61565b60405161076e9190613d40565b60405180910390f35b34801561078357600080fd5b5061078c611a87565b60405161079991906139a8565b60405180910390f35b3480156107ae57600080fd5b506107c960048036038101906107c49190613b04565b611a8d565b6040516107d69190613b5f565b60405180910390f35b3480156107eb57600080fd5b5061080660048036038101906108019190613bf4565b611b78565b6040516108139190613b5f565b60405180910390f35b34801561082857600080fd5b50610843600480360381019061083e9190613b04565b611bce565b6040516108509190613b5f565b60405180910390f35b34801561086557600080fd5b5061086e611bec565b60405161087b91906139a8565b60405180910390f35b34801561089057600080fd5b506108ab60048036038101906108a69190613c74565b611bf2565b005b3480156108b957600080fd5b506108d460048036038101906108cf9190613d5b565b611d23565b005b3480156108e257600080fd5b506108eb611ef8565b6040516108f891906139a8565b60405180910390f35b34801561090d57600080fd5b5061092860048036038101906109239190613d9b565b611efe565b005b34801561093657600080fd5b5061093f6120d0565b60405161094c91906139a8565b60405180910390f35b34801561096157600080fd5b5061097c60048036038101906109779190613d9b565b6120d6565b005b34801561098a57600080fd5b506109a560048036038101906109a09190613ddb565b612316565b6040516109b291906139a8565b60405180910390f35b3480156109c757600080fd5b506109e260048036038101906109dd9190613ccd565b61239d565b005b3480156109f057600080fd5b506109f96124a6565b604051610a0691906139a8565b60405180910390f35b348015610a1b57600080fd5b50610a366004803603810190610a319190613bf4565b6124ac565b005b348015610a4457600080fd5b50610a5f6004803603810190610a5a9190613bf4565b612672565b005b60155481565b606060038054610a7690613e4a565b80601f0160208091040260200160405190810160405280929190818152602001828054610aa290613e4a565b8015610aef5780601f10610ac457610100808354040283529160200191610aef565b820191906000526020600020905b815481529060010190602001808311610ad257829003601f168201915b5050505050905090565b6000610b0d610b066128e2565b84846128ea565b6001905092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b601160009054906101000a900460ff1681565b600080600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610bfc6128e2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610cb85782811015610ca3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9a90613eed565b60405180910390fd5b610cb785610caf6128e2565b8584036128ea565b5b610cc3858585612ab3565b60019150509392505050565b610cd76128e2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5d90613f59565b60405180910390fd5b6064610d70610f9d565b600a610d7c91906140db565b610d84610b3d565b610d8e9190614155565b610d989190614155565b811015610dda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd1906141f8565b60405180910390fd5b610de2610f9d565b600a610dee91906140db565b81610df99190614218565b6012819055507f21bc0ea3406acb92d4449ab33befb4ae82f873a22f3b6cf0e466b2710beb5942601254604051610e3091906139a8565b60405180910390a150565b610e436128e2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ed2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec990613f59565b60405180910390fd5b601160009054906101000a900460ff16151581151503610f27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1e906142cc565b60405180910390fd5b80601160006101000a81548160ff0219169083151502179055507f670f884265aba2d05e7c26efbc42f8365effc4cb3fcfcefddba0c0b71a6231f1601160009054906101000a900460ff16604051610f7f9190613b5f565b60405180910390a150565b601460009054906101000a900460ff1681565b60006012905090565b6000611048610fb36128e2565b848460016000610fc16128e2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461104391906142ec565b6128ea565b6001905092915050565b61105a6128e2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e090613f59565b60405180910390fd5b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611179576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117090614392565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036111e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111df90614424565b60405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f9339b30badba18d3425dd12af6db2b7b0ea4b28d6240a10befb5bddb14cf6acf600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660405161127a9190613d40565b60405180910390a150565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d60029054906101000a900460ff1681565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61131c6128e2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a290613f59565b60405180910390fd5b601460009054906101000a900460ff16151581151503611400576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f7906144b6565b60405180910390fd5b80601460006101000a81548160ff0219169083151502179055507fe81be35e61864c26afd7a4655e99f321378d0aaae1e5af8ee67b658a7460f3cf601460009054906101000a900460ff166040516114589190613b5f565b60405180910390a150565b60165481565b600a5481565b6114776128e2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611506576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fd90613f59565b60405180910390fd5b600582111561154a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154190614522565b60405180910390fd5b600581111561158e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158590614522565b60405180910390fd5b81600a81905550806009819055507f53482196ef67ac615caab1c3eca2c270acbfdcd75e57c5f24c1b98b10c8e6e04600a546009546040516115d1929190614542565b60405180910390a15050565b600d60019054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6116406128e2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c690613f59565b60405180910390fd5b801515601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503611761576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611758906145dd565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036117cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c690614649565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f8727c4afe988887760e8db0bbad9f9fcceee6428545956832f67c8fdbd589c108260405161186c9190613b5f565b60405180910390a25050565b6118806128e2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461190f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190690613f59565b60405180910390fd5b600d60029054906101000a900460ff161561195f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611956906146b5565b60405180910390fd5b6001600d60026101000a81548160ff0219169083151502179055506001600d60016101000a81548160ff02191690831515021790555043600e8190555042600f81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546119de90613e4a565b80601f0160208091040260200160405190810160405280929190818152602001828054611a0a90613e4a565b8015611a575780601f10611a2c57610100808354040283529160200191611a57565b820191906000526020600020905b815481529060010190602001808311611a3a57829003601f168201915b5050505050905090565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60095481565b60008060016000611a9c6128e2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611b59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5090614747565b60405180910390fd5b611b6d611b646128e2565b858584036128ea565b600191505092915050565b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000611be2611bdb6128e2565b8484612ab3565b6001905092915050565b60125481565b611bfa6128e2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8090613f59565b60405180910390fd5b620f4240611c95610b3d565b611c9f9190614155565b8111611ce0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd7906147d9565b60405180910390fd5b80600c819055507f7c26bfee26f82e8cb57af48f4019cc64582db6fac7bad778433f10572ae8b145600c54604051611d1891906139a8565b60405180910390a150565b611d2b6128e2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611dba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db190613f59565b60405180910390fd5b6103e8611dc5610f9d565b600a611dd191906140db565b611dd9610b3d565b611de39190614155565b611ded9190614155565b8210158015611e2e57506103e8611e02610f9d565b600a611e0e91906140db565b611e16610b3d565b611e209190614155565b611e2a9190614155565b8110155b611e6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e649061486b565b60405180910390fd5b611e75610f9d565b600a611e8191906140db565b82611e8c9190614218565b601581905550611e9a610f9d565b600a611ea691906140db565b81611eb19190614218565b6016819055507f8c8cbc911b80df94332ececb8eb0945274d76fa965600a0f01f42af3f8afb131601554601654604051611eec929190614542565b60405180910390a15050565b600f5481565b611f066128e2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8c90613f59565b60405180910390fd5b801515600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503612027576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201e906148fd565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516120c49190613b5f565b60405180910390a25050565b600e5481565b6120de6128e2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461216d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216490613f59565b60405180910390fd5b801515601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515036121ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f6906145dd565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361226d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226490614649565b60405180910390fd5b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f1d9a11e204b58ad56c619c61600e42167624659d218f0143f1f64956b0daae6c8260405161230a9190613b5f565b60405180910390a25050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6123a56128e2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612434576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242b90613f59565b60405180910390fd5b801515600d60019054906101000a900460ff16151503612489576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124809061498f565b60405180910390fd5b80600d60016101000a81548160ff02191690831515021790555050565b600c5481565b6124b46128e2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612543576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253a90613f59565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036125b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a990614a21565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61267a6128e2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612709576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270090613f59565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612777576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276e90614ab3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036127da576127d4473373ffffffffffffffffffffffffffffffffffffffff1661339990919063ffffffff16565b506128df565b600081905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161281a9190613d40565b602060405180830381865afa158015612837573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061285b9190614ae8565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401612898929190614b15565b6020604051808303816000875af11580156128b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128db9190614b53565b5050505b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612959576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161295090614bf2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036129c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129bf90614c84565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612aa691906139a8565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612b22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b1990614d16565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612b91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b8890614da8565b60405180910390fd5b600d60029054906101000a900460ff1680612bf55750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80612c495750600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612c88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c7f90614e14565b60405180910390fd5b60008103612ca157612c9c83836000613454565b613394565b601460009054906101000a900460ff1615612ef757600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480612d5f5750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b8015612db55750601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612e0b5750601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612ef657600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612eaf57601554811115612eaa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ea190614ea6565b60405180910390fd5b612ef5565b601654811115612ef4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eeb90614ea6565b60405180910390fd5b5b5b5b6000612f02306115f0565b90506000600c548210159050808015612f285750600d60009054906101000a900460ff16155b8015612f815750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b8015612f995750600d60019054906101000a900460ff165b15612fde576001600d60006101000a81548160ff021916908315150217905550612fc2826136d3565b6000600d60006101000a81548160ff0219169083151502179055505b6000600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806130815750600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806130985750600d60009054906101000a900460ff165b156130a657600090506131cd565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1603613146576004600e5461310a91906142ec565b43101561311a5760639050613141565b61012c600f5461312a91906142ec565b42111561313b576009549050613140565b601390505b5b6131cc565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16036131c65761012c600f546131ab91906142ec565b4211156131bc57600a5490506131c1565b601390505b6131cb565b600090505b5b5b600081111561320d576000606482866131e69190614218565b6131f09190614155565b905080856131fe9190614ec6565b945061320b873083613454565b505b601160009054906101000a900460ff161561338557601060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156132c65750601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156133205750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b15613384576000613330866115f0565b9050601254858261334191906142ec565b1115613382576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161337990614f6c565b60405180910390fd5b505b5b613390868686613454565b5050505b505050565b6000814710156133de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133d590614fd8565b60405180910390fd5b60008373ffffffffffffffffffffffffffffffffffffffff168360405161340490615029565b60006040518083038185875af1925050503d8060008114613441576040519150601f19603f3d011682016040523d82523d6000602084013e613446565b606091505b505090508091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036134c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134ba90614d16565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613532576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161352990614da8565b60405180910390fd5b61353d838383613985565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156135c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135ba906150b0565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461365691906142ec565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516136ba91906139a8565b60405180910390a36136cd84848461398a565b50505050565b60004790506000600267ffffffffffffffff8111156136f5576136f46150d0565b5b6040519080825280602002602001820160405280156137235781602001602082028036833780820191505090505b509050308160008151811061373b5761373a6150ff565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156137e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138069190615143565b8160018151811061381a576138196150ff565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008430426040518663ffffffff1660e01b81526004016138b8959493929190615269565b600060405180830381600087803b1580156138d257600080fd5b505af11580156138e6573d6000803e3d6000fd5b50505050600082476138f89190614ec6565b905061394581600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661339990919063ffffffff16565b507f14e391b2e5e513e504ae2c417d969bd74548f96476fbae126418434c53dd228a8482604051613977929190614542565b60405180910390a150505050565b505050565b505050565b6000819050919050565b6139a28161398f565b82525050565b60006020820190506139bd6000830184613999565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156139fd5780820151818401526020810190506139e2565b60008484015250505050565b6000601f19601f8301169050919050565b6000613a25826139c3565b613a2f81856139ce565b9350613a3f8185602086016139df565b613a4881613a09565b840191505092915050565b60006020820190508181036000830152613a6d8184613a1a565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613aa582613a7a565b9050919050565b613ab581613a9a565b8114613ac057600080fd5b50565b600081359050613ad281613aac565b92915050565b613ae18161398f565b8114613aec57600080fd5b50565b600081359050613afe81613ad8565b92915050565b60008060408385031215613b1b57613b1a613a75565b5b6000613b2985828601613ac3565b9250506020613b3a85828601613aef565b9150509250929050565b60008115159050919050565b613b5981613b44565b82525050565b6000602082019050613b746000830184613b50565b92915050565b6000819050919050565b6000613b9f613b9a613b9584613a7a565b613b7a565b613a7a565b9050919050565b6000613bb182613b84565b9050919050565b6000613bc382613ba6565b9050919050565b613bd381613bb8565b82525050565b6000602082019050613bee6000830184613bca565b92915050565b600060208284031215613c0a57613c09613a75565b5b6000613c1884828501613ac3565b91505092915050565b600080600060608486031215613c3a57613c39613a75565b5b6000613c4886828701613ac3565b9350506020613c5986828701613ac3565b9250506040613c6a86828701613aef565b9150509250925092565b600060208284031215613c8a57613c89613a75565b5b6000613c9884828501613aef565b91505092915050565b613caa81613b44565b8114613cb557600080fd5b50565b600081359050613cc781613ca1565b92915050565b600060208284031215613ce357613ce2613a75565b5b6000613cf184828501613cb8565b91505092915050565b600060ff82169050919050565b613d1081613cfa565b82525050565b6000602082019050613d2b6000830184613d07565b92915050565b613d3a81613a9a565b82525050565b6000602082019050613d556000830184613d31565b92915050565b60008060408385031215613d7257613d71613a75565b5b6000613d8085828601613aef565b9250506020613d9185828601613aef565b9150509250929050565b60008060408385031215613db257613db1613a75565b5b6000613dc085828601613ac3565b9250506020613dd185828601613cb8565b9150509250929050565b60008060408385031215613df257613df1613a75565b5b6000613e0085828601613ac3565b9250506020613e1185828601613ac3565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613e6257607f821691505b602082108103613e7557613e74613e1b565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613ed76028836139ce565b9150613ee282613e7b565b604082019050919050565b60006020820190508181036000830152613f0681613eca565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613f436020836139ce565b9150613f4e82613f0d565b602082019050919050565b60006020820190508181036000830152613f7281613f36565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115613fff57808604811115613fdb57613fda613f79565b5b6001851615613fea5780820291505b8081029050613ff885613fa8565b9450613fbf565b94509492505050565b60008261401857600190506140d4565b8161402657600090506140d4565b816001811461403c576002811461404657614075565b60019150506140d4565b60ff84111561405857614057613f79565b5b8360020a91508482111561406f5761406e613f79565b5b506140d4565b5060208310610133831016604e8410600b84101617156140aa5782820a9050838111156140a5576140a4613f79565b5b6140d4565b6140b78484846001613fb5565b925090508184048111156140ce576140cd613f79565b5b81810290505b9392505050565b60006140e68261398f565b91506140f183613cfa565b925061411e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484614008565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006141608261398f565b915061416b8361398f565b92508261417b5761417a614126565b5b828204905092915050565b7f4d61782077616c6c65742070657263656e746167652063616e6e6f742062652060008201527f6c6f776572207468616e20312500000000000000000000000000000000000000602082015250565b60006141e2602d836139ce565b91506141ed82614186565b604082019050919050565b60006020820190508181036000830152614211816141d5565b9050919050565b60006142238261398f565b915061422e8361398f565b925082820261423c8161398f565b9150828204841483151761425357614252613f79565b5b5092915050565b7f4d61782077616c6c6574206c696d697420697320616c7265616479207365742060008201527f746f207468617420737461746500000000000000000000000000000000000000602082015250565b60006142b6602d836139ce565b91506142c18261425a565b604082019050919050565b600060208201905081810360008301526142e5816142a9565b9050919050565b60006142f78261398f565b91506143028361398f565b925082820190508082111561431a57614319613f79565b5b92915050565b7f4543492077616c6c657420697320616c7265616479207468617420616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061437c6022836139ce565b915061438782614320565b604082019050919050565b600060208201905081810360008301526143ab8161436f565b9050919050565b7f4543492077616c6c65742063616e6e6f7420626520746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061440e6025836139ce565b9150614419826143b2565b604082019050919050565b6000602082019050818103600083015261443d81614401565b9050919050565b7f4d6178207472616e73616374696f6e206c696d697420697320616c726561647960008201527f2073657420746f20746861742073746174650000000000000000000000000000602082015250565b60006144a06032836139ce565b91506144ab82614444565b604082019050919050565b600060208201905081810360008301526144cf81614493565b9050919050565b7f4665652063616e6e6f74206578636565642035252e0000000000000000000000600082015250565b600061450c6015836139ce565b9150614517826144d6565b602082019050919050565b6000602082019050818103600083015261453b816144ff565b9050919050565b60006040820190506145576000830185613999565b6145646020830184613999565b9392505050565b7f4163636f756e7420697320616c72656164792073657420746f2074686174207360008201527f7461746500000000000000000000000000000000000000000000000000000000602082015250565b60006145c76024836139ce565b91506145d28261456b565b604082019050919050565b600060208201905081810360008301526145f6816145ba565b9050919050565b7f43616e277420736574207468697320616464726573732e000000000000000000600082015250565b60006146336017836139ce565b915061463e826145fd565b602082019050919050565b6000602082019050818103600083015261466281614626565b9050919050565b7f54726164696e6720616c726561647920656e61626c65642e0000000000000000600082015250565b600061469f6018836139ce565b91506146aa82614669565b602082019050919050565b600060208201905081810360008301526146ce81614692565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006147316025836139ce565b915061473c826146d5565b604082019050919050565b6000602082019050818103600083015261476081614724565b9050919050565b7f53776170546f6b656e734174416d6f756e74206d75737420626520677265617460008201527f6572207468616e20302e3030303125206f6620746f74616c20737570706c7900602082015250565b60006147c3603f836139ce565b91506147ce82614767565b604082019050919050565b600060208201905081810360008301526147f2816147b6565b9050919050565b7f4d6178205472616e73616374696f6e206c696d69732063616e6e6f742062652060008201527f6c6f776572207468616e20302e3125206f6620746f74616c20737570706c7900602082015250565b6000614855603f836139ce565b9150614860826147f9565b604082019050919050565b6000602082019050818103600083015261488481614848565b9050919050565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f662060008201527f276578636c756465642700000000000000000000000000000000000000000000602082015250565b60006148e7602a836139ce565b91506148f28261488b565b604082019050919050565b60006020820190508181036000830152614916816148da565b9050919050565b7f73776170456e61626c656420616c72656164792061742074686973207374617460008201527f652e000000000000000000000000000000000000000000000000000000000000602082015250565b60006149796022836139ce565b91506149848261491d565b604082019050919050565b600060208201905081810360008301526149a88161496c565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614a0b6026836139ce565b9150614a16826149af565b604082019050919050565b60006020820190508181036000830152614a3a816149fe565b9050919050565b7f4f776e65722063616e6e6f7420636c61696d20636f6e7472616374277320626160008201527f6c616e6365206f6620697473206f776e20746f6b656e73000000000000000000602082015250565b6000614a9d6037836139ce565b9150614aa882614a41565b604082019050919050565b60006020820190508181036000830152614acc81614a90565b9050919050565b600081519050614ae281613ad8565b92915050565b600060208284031215614afe57614afd613a75565b5b6000614b0c84828501614ad3565b91505092915050565b6000604082019050614b2a6000830185613d31565b614b376020830184613999565b9392505050565b600081519050614b4d81613ca1565b92915050565b600060208284031215614b6957614b68613a75565b5b6000614b7784828501614b3e565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614bdc6024836139ce565b9150614be782614b80565b604082019050919050565b60006020820190508181036000830152614c0b81614bcf565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614c6e6022836139ce565b9150614c7982614c12565b604082019050919050565b60006020820190508181036000830152614c9d81614c61565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614d006025836139ce565b9150614d0b82614ca4565b604082019050919050565b60006020820190508181036000830152614d2f81614cf3565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614d926023836139ce565b9150614d9d82614d36565b604082019050919050565b60006020820190508181036000830152614dc181614d85565b9050919050565b7f54726164696e67206e6f742079657420656e61626c6564210000000000000000600082015250565b6000614dfe6018836139ce565b9150614e0982614dc8565b602082019050919050565b60006020820190508181036000830152614e2d81614df1565b9050919050565b7f416e74695768616c653a205472616e7366657220616d6f756e7420657863656560008201527f647320746865206d61785472616e73616374696f6e416d6f756e740000000000602082015250565b6000614e90603b836139ce565b9150614e9b82614e34565b604082019050919050565b60006020820190508181036000830152614ebf81614e83565b9050919050565b6000614ed18261398f565b9150614edc8361398f565b9250828203905081811115614ef457614ef3613f79565b5b92915050565b7f4d617857616c6c65743a20526563697069656e7420657863656564732074686560008201527f206d617857616c6c6574416d6f756e7400000000000000000000000000000000602082015250565b6000614f566030836139ce565b9150614f6182614efa565b604082019050919050565b60006020820190508181036000830152614f8581614f49565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b6000614fc2601d836139ce565b9150614fcd82614f8c565b602082019050919050565b60006020820190508181036000830152614ff181614fb5565b9050919050565b600081905092915050565b50565b6000615013600083614ff8565b915061501e82615003565b600082019050919050565b600061503482615006565b9150819050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061509a6026836139ce565b91506150a58261503e565b604082019050919050565b600060208201905081810360008301526150c98161508d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061513d81613aac565b92915050565b60006020828403121561515957615158613a75565b5b60006151678482850161512e565b91505092915050565b6000819050919050565b600061519561519061518b84615170565b613b7a565b61398f565b9050919050565b6151a58161517a565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6151e081613a9a565b82525050565b60006151f283836151d7565b60208301905092915050565b6000602082019050919050565b6000615216826151ab565b61522081856151b6565b935061522b836151c7565b8060005b8381101561525c57815161524388826151e6565b975061524e836151fe565b92505060018101905061522f565b5085935050505092915050565b600060a08201905061527e6000830188613999565b61528b602083018761519c565b818103604083015261529d818661520b565b90506152ac6060830185613d31565b6152b96080830184613999565b969550505050505056fea2646970667358221220c9fc98a5b4e70a3981580ce84d21cd95524ab13bb02487f83bc5d7dbe181171864736f6c63430008110033

Deployed Bytecode Sourcemap

16091:12988:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27147:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11376:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12290:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16171:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11697:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28935:141;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25555:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12467:573;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26133:340;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25845:280;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27098:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11596:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13048:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20615:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16219:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20928:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20124:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27512:311;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27193:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16353:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20257:350;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16497:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11813:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28528:399;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21030:253;;;;;;;;;;;;;:::i;:::-;;10505:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11484:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16390:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16319:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13271:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26880:145;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11948:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25598:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24538:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27831:689;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20995:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19826:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20961:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26481:391;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12131:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24351:179;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16423:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10719:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19353:465;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27147:39;;;;:::o;11376:100::-;11430:13;11463:5;11456:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11376:100;:::o;12290:169::-;12373:4;12390:39;12399:12;:10;:12::i;:::-;12413:7;12422:6;12390:8;:39::i;:::-;12447:4;12440:11;;12290:169;;;;:::o;16171:41::-;;;;;;;;;;;;;:::o;11697:108::-;11758:7;11785:12;;11778:19;;11697:108;:::o;28935:141::-;29010:4;29034:25;:34;29060:7;29034:34;;;;;;;;;;;;;;;;;;;;;;;;;29027:41;;28935:141;;;:::o;25555:36::-;;;;;;;;;;;;;:::o;12467:573::-;12607:4;12624:24;12651:11;:19;12663:6;12651:19;;;;;;;;;;;;;;;:33;12671:12;:10;:12::i;:::-;12651:33;;;;;;;;;;;;;;;;12624:60;;12719:17;12699:16;:37;12695:265;;12781:6;12761:16;:26;;12753:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;12876:57;12885:6;12893:12;:10;:12::i;:::-;12926:6;12907:16;:25;12876:8;:57::i;:::-;12695:265;12972:36;12982:6;12990:9;13001:6;12972:9;:36::i;:::-;13028:4;13021:11;;;12467:573;;;;;:::o;26133:340::-;10642:12;:10;:12::i;:::-;10632:22;;:6;;;;;;;;;;;:22;;;10624:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26284:3:::1;26269:10;:8;:10::i;:::-;26263:2;:16;;;;:::i;:::-;26246:13;:11;:13::i;:::-;:34;;;;:::i;:::-;26245:42;;;;:::i;:::-;26225:16;:62;;26217:120;;;;;;;;;;;;:::i;:::-;;;;;;;;;26392:10;:8;:10::i;:::-;26386:2;:16;;;;:::i;:::-;26366;:37;;;;:::i;:::-;26348:15;:55;;;;26421:44;26449:15;;26421:44;;;;;;:::i;:::-;;;;;;;;26133:340:::0;:::o;25845:280::-;10642:12;:10;:12::i;:::-;10632:22;;:6;;;;;;;;;;;:22;;;10624:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25939:21:::1;;;;;;;;;;;25929:31;;:6;:31;;::::0;25921:88:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;26044:6;26020:21;;:30;;;;;;;;;;;;;;;;;;26068:49;26095:21;;;;;;;;;;;26068:49;;;;;;:::i;:::-;;;;;;;;25845:280:::0;:::o;27098:42::-;;;;;;;;;;;;;:::o;11596:93::-;11654:5;11679:2;11672:9;;11596:93;:::o;13048:215::-;13136:4;13153:80;13162:12;:10;:12::i;:::-;13176:7;13222:10;13185:11;:25;13197:12;:10;:12::i;:::-;13185:25;;;;;;;;;;;;;;;:34;13211:7;13185:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;13153:8;:80::i;:::-;13251:4;13244:11;;13048:215;;;;:::o;20615:305::-;10642:12;:10;:12::i;:::-;10632:22;;:6;;;;;;;;;;;:22;;;10624:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20708:8:::1;;;;;;;;;;;20695:21;;:9;:21;;::::0;20687:68:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;20795:1;20774:23;;:9;:23;;::::0;20766:72:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;20860:9;20849:8;;:20;;;;;;;;;;;;;;;;;;20887:25;20903:8;;;;;;;;;;;20887:25;;;;;;:::i;:::-;;;;;;;;20615:305:::0;:::o;16219:29::-;;;;;;;;;;;;;:::o;20928:26::-;;;;;;;;;;;;;:::o;20124:125::-;20189:4;20213:19;:28;20233:7;20213:28;;;;;;;;;;;;;;;;;;;;;;;;;20206:35;;20124:125;;;:::o;27512:311::-;10642:12;:10;:12::i;:::-;10632:22;;:6;;;;;;;;;;;:22;;;10624:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27611:26:::1;;;;;;;;;;;27601:36;;:6;:36;;::::0;27593:99:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;27732:6;27703:26;;:35;;;;;;;;;;;;;;;;;;27756:59;27788:26;;;;;;;;;;;27756:59;;;;;;:::i;:::-;;;;;;;;27512:311:::0;:::o;27193:40::-;;;;:::o;16353:28::-;;;;:::o;20257:350::-;10642:12;:10;:12::i;:::-;10632:22;;:6;;;;;;;;;;;:22;;;10624:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20377:1:::1;20360:13;:18;;20352:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;20439:1;20423:12;:17;;20415:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;20494:13;20479:12;:28;;;;20532:12;20518:11;:26;;;;20562:37;20573:12;;20587:11;;20562:37;;;;;;;:::i;:::-;;;;;;;;20257:350:::0;;:::o;16497:26::-;;;;;;;;;;;;;:::o;11813:127::-;11887:7;11914:9;:18;11924:7;11914:18;;;;;;;;;;;;;;;;11907:25;;11813:127;;;:::o;28528:399::-;10642:12;:10;:12::i;:::-;10632:22;;:6;;;;;;;;;;;:22;;;10624:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28676:7:::1;28638:45;;:25;:34;28664:7;28638:34;;;;;;;;;;;;;;;;;;;;;;;;;:45;;::::0;28629:95:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;28762:4;28743:24;;:7;:24;;::::0;28735:60:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;28845:7;28808:25;:34;28834:7;28808:34;;;;;;;;;;;;;;;;:44;;;;;;;;;;;;;;;;;;28902:7;28870:49;;;28911:7;28870:49;;;;;;:::i;:::-;;;;;;;;28528:399:::0;;:::o;21030:253::-;10642:12;:10;:12::i;:::-;10632:22;;:6;;;;;;;;;;;:22;;;10624:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21093:14:::1;;;;;;;;;;;21092:15;21084:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;21164:4;21147:14;;:21;;;;;;;;;;;;;;;;;;21193:4;21179:11;;:18;;;;;;;;;;;;;;;;;;21223:12;21208;:27;;;;21260:15;21246:11;:29;;;;21030:253::o:0;10505:79::-;10543:7;10570:6;;;;;;;;;;;10563:13;;10505:79;:::o;11484:104::-;11540:13;11573:7;11566:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11484:104;:::o;16390:24::-;;;;;;;;;;;;;:::o;16319:27::-;;;;:::o;13271:413::-;13364:4;13381:24;13408:11;:25;13420:12;:10;:12::i;:::-;13408:25;;;;;;;;;;;;;;;:34;13434:7;13408:34;;;;;;;;;;;;;;;;13381:61;;13481:15;13461:16;:35;;13453:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;13574:67;13583:12;:10;:12::i;:::-;13597:7;13625:15;13606:16;:34;13574:8;:67::i;:::-;13672:4;13665:11;;;13271:413;;;;:::o;26880:145::-;26955:4;26979:29;:38;27009:7;26979:38;;;;;;;;;;;;;;;;;;;;;;;;;26972:45;;26880:145;;;:::o;11948:175::-;12034:4;12051:42;12061:12;:10;:12::i;:::-;12075:9;12086:6;12051:9;:42::i;:::-;12111:4;12104:11;;11948:175;;;;:::o;25598:30::-;;;;:::o;24538:304::-;10642:12;:10;:12::i;:::-;10632:22;;:6;;;;;;;;;;;:22;;;10624:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24653:9:::1;24637:13;:11;:13::i;:::-;:25;;;;:::i;:::-;24625:9;:37;24617:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;24762:9;24741:18;:30;;;;24789:45;24815:18;;24789:45;;;;;;:::i;:::-;;;;;;;;24538:304:::0;:::o;27831:689::-;10642:12;:10;:12::i;:::-;10632:22;;:6;;;;;;;;;;;:22;;;10624:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28054:5:::1;28039:10;:8;:10::i;:::-;28033:2;:16;;;;:::i;:::-;28016:13;:11;:13::i;:::-;:34;;;;:::i;:::-;28015:44;;;;:::i;:::-;27986:24;:73;;:164;;;;;28145:5;28130:10;:8;:10::i;:::-;28124:2;:16;;;;:::i;:::-;28107:13;:11;:13::i;:::-;:34;;;;:::i;:::-;28106:44;;;;:::i;:::-;28077:25;:73;;27986:164;27964:278;;;;;;;;;;;;:::i;:::-;;;;;;;;;28316:10;:8;:10::i;:::-;28310:2;:16;;;;:::i;:::-;28281:24;:46;;;;:::i;:::-;28254:23;:73;;;;28400:10;:8;:10::i;:::-;28394:2;:16;;;;:::i;:::-;28365:25;:46;;;;:::i;:::-;28338:24;:73;;;;28429:83;28462:23;;28487:24;;28429:83;;;;;;;:::i;:::-;;;;;;;;27831:689:::0;;:::o;20995:26::-;;;;:::o;19826:290::-;10642:12;:10;:12::i;:::-;10632:22;;:6;;;;;;;;;;;:22;;;10624:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19952:8:::1;19920:40;;:19;:28;19940:7;19920:28;;;;;;;;;;;;;;;;;;;;;;;;;:40;;::::0;19912:94:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;20048:8;20017:19;:28;20037:7;20017:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;20090:7;20074:34;;;20099:8;20074:34;;;;;;:::i;:::-;;;;;;;;19826:290:::0;;:::o;20961:27::-;;;;:::o;26481:391::-;10642:12;:10;:12::i;:::-;10632:22;;:6;;;;;;;;;;;:22;;;10624:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26623:7:::1;26581:49;;:29;:38;26611:7;26581:38;;;;;;;;;;;;;;;;;;;;;;;;;:49;;::::0;26572:98:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;26708:4;26689:24;;:7;:24;;::::0;26681:60:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;26795:7;26754:29;:38;26784:7;26754:38;;;;;;;;;;;;;;;;:48;;;;;;;;;;;;;;;;;;26847:7;26820:44;;;26856:7;26820:44;;;;;;:::i;:::-;;;;;;;;26481:391:::0;;:::o;12131:151::-;12220:7;12247:11;:18;12259:5;12247:18;;;;;;;;;;;;;;;:27;12266:7;12247:27;;;;;;;;;;;;;;;;12240:34;;12131:151;;;;:::o;24351:179::-;10642:12;:10;:12::i;:::-;10632:22;;:6;;;;;;;;;;;:22;;;10624:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24442:8:::1;24427:23;;:11;;;;;;;;;;;:23;;::::0;24419:70:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;24514:8;24500:11;;:22;;;;;;;;;;;;;;;;;;24351:179:::0;:::o;16423:34::-;;;;:::o;10719:244::-;10642:12;:10;:12::i;:::-;10632:22;;:6;;;;;;;;;;;:22;;;10624:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;10828:1:::1;10808:22;;:8;:22;;::::0;10800:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;10918:8;10889:38;;10910:6;;;;;;;;;;;10889:38;;;;;;;;;;;;10947:8;10938:6;;:17;;;;;;;;;;;;;;;;;;10719:244:::0;:::o;19353:465::-;10642:12;:10;:12::i;:::-;10632:22;;:6;;;;;;;;;;;:22;;;10624:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19449:4:::1;19432:22;;:5;:22;;::::0;19424:90:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;19546:3;19529:21;;:5;:21;;::::0;19525:127:::1;;19567:52;19597:21;19575:10;19567:29;;;;:52;;;;:::i;:::-;;19634:7;;19525:127;19662:17;19689:5;19662:33;;19706:15;19724:10;:20;;;19753:4;19724:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19706:53;;19770:10;:19;;;19790:10;19802:7;19770:40;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;19413:405;;10702:1;19353:465:::0;:::o;9828:98::-;9881:7;9908:10;9901:17;;9828:98;:::o;15439:380::-;15592:1;15575:19;;:5;:19;;;15567:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15673:1;15654:21;;:7;:21;;;15646:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15757:6;15727:11;:18;15739:5;15727:18;;;;;;;;;;;;;;;:27;15746:7;15727:27;;;;;;;;;;;;;;;:36;;;;15795:7;15779:32;;15788:5;15779:32;;;15804:6;15779:32;;;;;;:::i;:::-;;;;;;;;15439:380;;;:::o;21291:3052::-;21404:1;21388:18;;:4;:18;;;21380:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21481:1;21467:16;;:2;:16;;;21459:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;21542:14;;;;;;;;;;;:43;;;;21560:19;:25;21580:4;21560:25;;;;;;;;;;;;;;;;;;;;;;;;;21542:43;:70;;;;21589:19;:23;21609:2;21589:23;;;;;;;;;;;;;;;;;;;;;;;;;21542:70;21534:107;;;;;;;;;;;;:::i;:::-;;;;;;;;;21675:1;21665:6;:11;21661:93;;21693:28;21709:4;21715:2;21719:1;21693:15;:28::i;:::-;21736:7;;21661:93;21770:26;;;;;;;;;;;21766:752;;;21836:13;;;;;;;;;;;21828:21;;:4;:21;;;:44;;;;21859:13;;;;;;;;;;;21853:19;;:2;:19;;;21828:44;21827:99;;;;;21895:25;:31;21921:4;21895:31;;;;;;;;;;;;;;;;;;;;;;;;;21894:32;21827:99;:151;;;;;21949:25;:29;21975:2;21949:29;;;;;;;;;;;;;;;;;;;;;;;;;21948:30;21827:151;21823:684;;;22025:13;;;;;;;;;;;22017:21;;:4;:21;;;22013:479;;22107:23;;22097:6;:33;;22063:180;;;;;;;;;;;;:::i;:::-;;;;;;;;;22013:479;;;22336:24;;22326:6;:34;;22292:180;;;;;;;;;;;;:::i;:::-;;;;;;;;;22013:479;21823:684;21766:752;22524:28;22555:24;22573:4;22555:9;:24::i;:::-;22524:55;;22592:12;22631:18;;22607:20;:42;;22592:57;;22666:7;:33;;;;;22691:8;;;;;;;;;;;22690:9;22666:33;:69;;;;;22722:13;;;;;;;;;;;22716:19;;:2;:19;;;22666:69;:97;;;;;22752:11;;;;;;;;;;;22666:97;22662:246;;;22801:4;22790:8;;:15;;;;;;;;;;;;;;;;;;22822:36;22837:20;22822:14;:36::i;:::-;22891:5;22880:8;;:16;;;;;;;;;;;;;;;;;;22662:246;22920:18;22953:19;:25;22973:4;22953:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;22982:19;:23;23002:2;22982:23;;;;;;;;;;;;;;;;;;;;;;;;;22953:52;:64;;;;23009:8;;;;;;;;;;;22953:64;22949:675;;;23047:1;23034:14;;22949:675;;;23078:13;;;;;;;;;;;23070:21;;:4;:21;;;23066:558;;23142:1;23127:12;;:16;;;;:::i;:::-;23112:12;:31;23108:246;;;23176:2;23163:15;;23108:246;;;23235:3;23221:11;;:17;;;;:::i;:::-;23203:15;:35;23200:154;;;23271:11;;23258:24;;23200:154;;;23336:2;23322:16;;23200:154;23108:246;23066:558;;;23381:13;;;;;;;;;;;23375:19;;:2;:19;;;23371:253;;23446:3;23432:11;;:17;;;;:::i;:::-;23414:15;:35;23411:155;;;23482:12;;23469:25;;23411:155;;;23548:2;23534:16;;23411:155;23371:253;;;23611:1;23598:14;;23371:253;23066:558;22949:675;23653:1;23640:10;:14;23636:183;;;23671:12;23710:3;23696:10;23687:6;:19;;;;:::i;:::-;23686:27;;;;:::i;:::-;23671:42;;23746:4;23737:6;:13;;;;:::i;:::-;23728:22;;23765:42;23781:4;23795;23802;23765:15;:42::i;:::-;23656:163;23636:183;23835:21;;;;;;;;;;;23831:459;;;23888:29;:35;23918:4;23888:35;;;;;;;;;;;;;;;;;;;;;;;;;23887:36;:92;;;;;23946:29;:33;23976:2;23946:33;;;;;;;;;;;;;;;;;;;;;;;;;23945:34;23887:92;:132;;;;;24006:13;;;;;;;;;;;24000:19;;:2;:19;;;;23887:132;23883:396;;;24054:15;24073:13;24083:2;24073:9;:13::i;:::-;24054:32;;24155:15;;24145:6;24135:7;:16;;;;:::i;:::-;:35;;24105:158;;;;;;;;;;;;:::i;:::-;;;;;;;;;24035:244;23883:396;23831:459;24302:33;24318:4;24324:2;24328:6;24302:15;:33::i;:::-;21369:2974;;;21291:3052;;;;:::o;9522:266::-;9601:4;9650:6;9625:21;:31;;9617:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;9704:12;9722:9;:14;;9744:6;9722:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9703:52;;;9773:7;9766:14;;;9522:266;;;;:::o;13692:733::-;13850:1;13832:20;;:6;:20;;;13824:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;13934:1;13913:23;;:9;:23;;;13905:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;13989:47;14010:6;14018:9;14029:6;13989:20;:47::i;:::-;14049:21;14073:9;:17;14083:6;14073:17;;;;;;;;;;;;;;;;14049:41;;14126:6;14109:13;:23;;14101:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;14247:6;14231:13;:22;14211:9;:17;14221:6;14211:17;;;;;;;;;;;;;;;:42;;;;14299:6;14275:9;:20;14285:9;14275:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;14340:9;14323:35;;14332:6;14323:35;;;14351:6;14323:35;;;;;;:::i;:::-;;;;;;;;14371:46;14391:6;14399:9;14410:6;14371:19;:46::i;:::-;13813:612;13692:733;;;:::o;24850:628::-;24914:22;24939:21;24914:46;;24973:21;25011:1;24997:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24973:40;;25042:4;25024;25029:1;25024:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;25068:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25058:4;25063:1;25058:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;25103:15;;;;;;;;;;;:66;;;25184:11;25210:1;25226:4;25253;25273:15;25103:186;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25302:18;25347:14;25323:21;:38;;;;:::i;:::-;25302:59;;25374:39;25402:10;25382:8;;;;;;;;;;;25374:27;;;;:39;;;;:::i;:::-;;25431;25446:11;25459:10;25431:39;;;;;;;:::i;:::-;;;;;;;;24903:575;;;24850:628;:::o;15827:125::-;;;;:::o;15960:124::-;;;;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;442:99::-;494:6;528:5;522:12;512:22;;442:99;;;:::o;547:169::-;631:11;665:6;660:3;653:19;705:4;700:3;696:14;681:29;;547:169;;;;:::o;722:246::-;803:1;813:113;827:6;824:1;821:13;813:113;;;912:1;907:3;903:11;897:18;893:1;888:3;884:11;877:39;849:2;846:1;842:10;837:15;;813:113;;;960:1;951:6;946:3;942:16;935:27;784:184;722:246;;;:::o;974:102::-;1015:6;1066:2;1062:7;1057:2;1050:5;1046:14;1042:28;1032:38;;974:102;;;:::o;1082:377::-;1170:3;1198:39;1231:5;1198:39;:::i;:::-;1253:71;1317:6;1312:3;1253:71;:::i;:::-;1246:78;;1333:65;1391:6;1386:3;1379:4;1372:5;1368:16;1333:65;:::i;:::-;1423:29;1445:6;1423:29;:::i;:::-;1418:3;1414:39;1407:46;;1174:285;1082:377;;;;:::o;1465:313::-;1578:4;1616:2;1605:9;1601:18;1593:26;;1665:9;1659:4;1655:20;1651:1;1640:9;1636:17;1629:47;1693:78;1766:4;1757:6;1693:78;:::i;:::-;1685:86;;1465:313;;;;:::o;1865:117::-;1974:1;1971;1964:12;2111:126;2148:7;2188:42;2181:5;2177:54;2166:65;;2111:126;;;:::o;2243:96::-;2280:7;2309:24;2327:5;2309:24;:::i;:::-;2298:35;;2243:96;;;:::o;2345:122::-;2418:24;2436:5;2418:24;:::i;:::-;2411:5;2408:35;2398:63;;2457:1;2454;2447:12;2398:63;2345:122;:::o;2473:139::-;2519:5;2557:6;2544:20;2535:29;;2573:33;2600:5;2573:33;:::i;:::-;2473:139;;;;:::o;2618:122::-;2691:24;2709:5;2691:24;:::i;:::-;2684:5;2681:35;2671:63;;2730:1;2727;2720:12;2671:63;2618:122;:::o;2746:139::-;2792:5;2830:6;2817:20;2808:29;;2846:33;2873:5;2846:33;:::i;:::-;2746:139;;;;:::o;2891:474::-;2959:6;2967;3016:2;3004:9;2995:7;2991:23;2987:32;2984:119;;;3022:79;;:::i;:::-;2984:119;3142:1;3167:53;3212:7;3203:6;3192:9;3188:22;3167:53;:::i;:::-;3157:63;;3113:117;3269:2;3295:53;3340:7;3331:6;3320:9;3316:22;3295:53;:::i;:::-;3285:63;;3240:118;2891:474;;;;;:::o;3371:90::-;3405:7;3448:5;3441:13;3434:21;3423:32;;3371:90;;;:::o;3467:109::-;3548:21;3563:5;3548:21;:::i;:::-;3543:3;3536:34;3467:109;;:::o;3582:210::-;3669:4;3707:2;3696:9;3692:18;3684:26;;3720:65;3782:1;3771:9;3767:17;3758:6;3720:65;:::i;:::-;3582:210;;;;:::o;3798:60::-;3826:3;3847:5;3840:12;;3798:60;;;:::o;3864:142::-;3914:9;3947:53;3965:34;3974:24;3992:5;3974:24;:::i;:::-;3965:34;:::i;:::-;3947:53;:::i;:::-;3934:66;;3864:142;;;:::o;4012:126::-;4062:9;4095:37;4126:5;4095:37;:::i;:::-;4082:50;;4012:126;;;:::o;4144:152::-;4220:9;4253:37;4284:5;4253:37;:::i;:::-;4240:50;;4144:152;;;:::o;4302:183::-;4415:63;4472:5;4415:63;:::i;:::-;4410:3;4403:76;4302:183;;:::o;4491:274::-;4610:4;4648:2;4637:9;4633:18;4625:26;;4661:97;4755:1;4744:9;4740:17;4731:6;4661:97;:::i;:::-;4491:274;;;;:::o;4771:329::-;4830:6;4879:2;4867:9;4858:7;4854:23;4850:32;4847:119;;;4885:79;;:::i;:::-;4847:119;5005:1;5030:53;5075:7;5066:6;5055:9;5051:22;5030:53;:::i;:::-;5020:63;;4976:117;4771:329;;;;:::o;5106:619::-;5183:6;5191;5199;5248:2;5236:9;5227:7;5223:23;5219:32;5216:119;;;5254:79;;:::i;:::-;5216:119;5374:1;5399:53;5444:7;5435:6;5424:9;5420:22;5399:53;:::i;:::-;5389:63;;5345:117;5501:2;5527:53;5572:7;5563:6;5552:9;5548:22;5527:53;:::i;:::-;5517:63;;5472:118;5629:2;5655:53;5700:7;5691:6;5680:9;5676:22;5655:53;:::i;:::-;5645:63;;5600:118;5106:619;;;;;:::o;5731:329::-;5790:6;5839:2;5827:9;5818:7;5814:23;5810:32;5807:119;;;5845:79;;:::i;:::-;5807:119;5965:1;5990:53;6035:7;6026:6;6015:9;6011:22;5990:53;:::i;:::-;5980:63;;5936:117;5731:329;;;;:::o;6066:116::-;6136:21;6151:5;6136:21;:::i;:::-;6129:5;6126:32;6116:60;;6172:1;6169;6162:12;6116:60;6066:116;:::o;6188:133::-;6231:5;6269:6;6256:20;6247:29;;6285:30;6309:5;6285:30;:::i;:::-;6188:133;;;;:::o;6327:323::-;6383:6;6432:2;6420:9;6411:7;6407:23;6403:32;6400:119;;;6438:79;;:::i;:::-;6400:119;6558:1;6583:50;6625:7;6616:6;6605:9;6601:22;6583:50;:::i;:::-;6573:60;;6529:114;6327:323;;;;:::o;6656:86::-;6691:7;6731:4;6724:5;6720:16;6709:27;;6656:86;;;:::o;6748:112::-;6831:22;6847:5;6831:22;:::i;:::-;6826:3;6819:35;6748:112;;:::o;6866:214::-;6955:4;6993:2;6982:9;6978:18;6970:26;;7006:67;7070:1;7059:9;7055:17;7046:6;7006:67;:::i;:::-;6866:214;;;;:::o;7086:118::-;7173:24;7191:5;7173:24;:::i;:::-;7168:3;7161:37;7086:118;;:::o;7210:222::-;7303:4;7341:2;7330:9;7326:18;7318:26;;7354:71;7422:1;7411:9;7407:17;7398:6;7354:71;:::i;:::-;7210:222;;;;:::o;7438:474::-;7506:6;7514;7563:2;7551:9;7542:7;7538:23;7534:32;7531:119;;;7569:79;;:::i;:::-;7531:119;7689:1;7714:53;7759:7;7750:6;7739:9;7735:22;7714:53;:::i;:::-;7704:63;;7660:117;7816:2;7842:53;7887:7;7878:6;7867:9;7863:22;7842:53;:::i;:::-;7832:63;;7787:118;7438:474;;;;;:::o;7918:468::-;7983:6;7991;8040:2;8028:9;8019:7;8015:23;8011:32;8008:119;;;8046:79;;:::i;:::-;8008:119;8166:1;8191:53;8236:7;8227:6;8216:9;8212:22;8191:53;:::i;:::-;8181:63;;8137:117;8293:2;8319:50;8361:7;8352:6;8341:9;8337:22;8319:50;:::i;:::-;8309:60;;8264:115;7918:468;;;;;:::o;8392:474::-;8460:6;8468;8517:2;8505:9;8496:7;8492:23;8488:32;8485:119;;;8523:79;;:::i;:::-;8485:119;8643:1;8668:53;8713:7;8704:6;8693:9;8689:22;8668:53;:::i;:::-;8658:63;;8614:117;8770:2;8796:53;8841:7;8832:6;8821:9;8817:22;8796:53;:::i;:::-;8786:63;;8741:118;8392:474;;;;;:::o;8872:180::-;8920:77;8917:1;8910:88;9017:4;9014:1;9007:15;9041:4;9038:1;9031:15;9058:320;9102:6;9139:1;9133:4;9129:12;9119:22;;9186:1;9180:4;9176:12;9207:18;9197:81;;9263:4;9255:6;9251:17;9241:27;;9197:81;9325:2;9317:6;9314:14;9294:18;9291:38;9288:84;;9344:18;;:::i;:::-;9288:84;9109:269;9058:320;;;:::o;9384:227::-;9524:34;9520:1;9512:6;9508:14;9501:58;9593:10;9588:2;9580:6;9576:15;9569:35;9384:227;:::o;9617:366::-;9759:3;9780:67;9844:2;9839:3;9780:67;:::i;:::-;9773:74;;9856:93;9945:3;9856:93;:::i;:::-;9974:2;9969:3;9965:12;9958:19;;9617:366;;;:::o;9989:419::-;10155:4;10193:2;10182:9;10178:18;10170:26;;10242:9;10236:4;10232:20;10228:1;10217:9;10213:17;10206:47;10270:131;10396:4;10270:131;:::i;:::-;10262:139;;9989:419;;;:::o;10414:182::-;10554:34;10550:1;10542:6;10538:14;10531:58;10414:182;:::o;10602:366::-;10744:3;10765:67;10829:2;10824:3;10765:67;:::i;:::-;10758:74;;10841:93;10930:3;10841:93;:::i;:::-;10959:2;10954:3;10950:12;10943:19;;10602:366;;;:::o;10974:419::-;11140:4;11178:2;11167:9;11163:18;11155:26;;11227:9;11221:4;11217:20;11213:1;11202:9;11198:17;11191:47;11255:131;11381:4;11255:131;:::i;:::-;11247:139;;10974:419;;;:::o;11399:180::-;11447:77;11444:1;11437:88;11544:4;11541:1;11534:15;11568:4;11565:1;11558:15;11585:102;11627:8;11674:5;11671:1;11667:13;11646:34;;11585:102;;;:::o;11693:848::-;11754:5;11761:4;11785:6;11776:15;;11809:5;11800:14;;11823:712;11844:1;11834:8;11831:15;11823:712;;;11939:4;11934:3;11930:14;11924:4;11921:24;11918:50;;;11948:18;;:::i;:::-;11918:50;11998:1;11988:8;11984:16;11981:451;;;12413:4;12406:5;12402:16;12393:25;;11981:451;12463:4;12457;12453:15;12445:23;;12493:32;12516:8;12493:32;:::i;:::-;12481:44;;11823:712;;;11693:848;;;;;;;:::o;12547:1073::-;12601:5;12792:8;12782:40;;12813:1;12804:10;;12815:5;;12782:40;12841:4;12831:36;;12858:1;12849:10;;12860:5;;12831:36;12927:4;12975:1;12970:27;;;;13011:1;13006:191;;;;12920:277;;12970:27;12988:1;12979:10;;12990:5;;;13006:191;13051:3;13041:8;13038:17;13035:43;;;13058:18;;:::i;:::-;13035:43;13107:8;13104:1;13100:16;13091:25;;13142:3;13135:5;13132:14;13129:40;;;13149:18;;:::i;:::-;13129:40;13182:5;;;12920:277;;13306:2;13296:8;13293:16;13287:3;13281:4;13278:13;13274:36;13256:2;13246:8;13243:16;13238:2;13232:4;13229:12;13225:35;13209:111;13206:246;;;13362:8;13356:4;13352:19;13343:28;;13397:3;13390:5;13387:14;13384:40;;;13404:18;;:::i;:::-;13384:40;13437:5;;13206:246;13477:42;13515:3;13505:8;13499:4;13496:1;13477:42;:::i;:::-;13462:57;;;;13551:4;13546:3;13542:14;13535:5;13532:25;13529:51;;;13560:18;;:::i;:::-;13529:51;13609:4;13602:5;13598:16;13589:25;;12547:1073;;;;;;:::o;13626:281::-;13684:5;13708:23;13726:4;13708:23;:::i;:::-;13700:31;;13752:25;13768:8;13752:25;:::i;:::-;13740:37;;13796:104;13833:66;13823:8;13817:4;13796:104;:::i;:::-;13787:113;;13626:281;;;;:::o;13913:180::-;13961:77;13958:1;13951:88;14058:4;14055:1;14048:15;14082:4;14079:1;14072:15;14099:185;14139:1;14156:20;14174:1;14156:20;:::i;:::-;14151:25;;14190:20;14208:1;14190:20;:::i;:::-;14185:25;;14229:1;14219:35;;14234:18;;:::i;:::-;14219:35;14276:1;14273;14269:9;14264:14;;14099:185;;;;:::o;14290:232::-;14430:34;14426:1;14418:6;14414:14;14407:58;14499:15;14494:2;14486:6;14482:15;14475:40;14290:232;:::o;14528:366::-;14670:3;14691:67;14755:2;14750:3;14691:67;:::i;:::-;14684:74;;14767:93;14856:3;14767:93;:::i;:::-;14885:2;14880:3;14876:12;14869:19;;14528:366;;;:::o;14900:419::-;15066:4;15104:2;15093:9;15089:18;15081:26;;15153:9;15147:4;15143:20;15139:1;15128:9;15124:17;15117:47;15181:131;15307:4;15181:131;:::i;:::-;15173:139;;14900:419;;;:::o;15325:410::-;15365:7;15388:20;15406:1;15388:20;:::i;:::-;15383:25;;15422:20;15440:1;15422:20;:::i;:::-;15417:25;;15477:1;15474;15470:9;15499:30;15517:11;15499:30;:::i;:::-;15488:41;;15678:1;15669:7;15665:15;15662:1;15659:22;15639:1;15632:9;15612:83;15589:139;;15708:18;;:::i;:::-;15589:139;15373:362;15325:410;;;;:::o;15741:232::-;15881:34;15877:1;15869:6;15865:14;15858:58;15950:15;15945:2;15937:6;15933:15;15926:40;15741:232;:::o;15979:366::-;16121:3;16142:67;16206:2;16201:3;16142:67;:::i;:::-;16135:74;;16218:93;16307:3;16218:93;:::i;:::-;16336:2;16331:3;16327:12;16320:19;;15979:366;;;:::o;16351:419::-;16517:4;16555:2;16544:9;16540:18;16532:26;;16604:9;16598:4;16594:20;16590:1;16579:9;16575:17;16568:47;16632:131;16758:4;16632:131;:::i;:::-;16624:139;;16351:419;;;:::o;16776:191::-;16816:3;16835:20;16853:1;16835:20;:::i;:::-;16830:25;;16869:20;16887:1;16869:20;:::i;:::-;16864:25;;16912:1;16909;16905:9;16898:16;;16933:3;16930:1;16927:10;16924:36;;;16940:18;;:::i;:::-;16924:36;16776:191;;;;:::o;16973:221::-;17113:34;17109:1;17101:6;17097:14;17090:58;17182:4;17177:2;17169:6;17165:15;17158:29;16973:221;:::o;17200:366::-;17342:3;17363:67;17427:2;17422:3;17363:67;:::i;:::-;17356:74;;17439:93;17528:3;17439:93;:::i;:::-;17557:2;17552:3;17548:12;17541:19;;17200:366;;;:::o;17572:419::-;17738:4;17776:2;17765:9;17761:18;17753:26;;17825:9;17819:4;17815:20;17811:1;17800:9;17796:17;17789:47;17853:131;17979:4;17853:131;:::i;:::-;17845:139;;17572:419;;;:::o;17997:224::-;18137:34;18133:1;18125:6;18121:14;18114:58;18206:7;18201:2;18193:6;18189:15;18182:32;17997:224;:::o;18227:366::-;18369:3;18390:67;18454:2;18449:3;18390:67;:::i;:::-;18383:74;;18466:93;18555:3;18466:93;:::i;:::-;18584:2;18579:3;18575:12;18568:19;;18227:366;;;:::o;18599:419::-;18765:4;18803:2;18792:9;18788:18;18780:26;;18852:9;18846:4;18842:20;18838:1;18827:9;18823:17;18816:47;18880:131;19006:4;18880:131;:::i;:::-;18872:139;;18599:419;;;:::o;19024:237::-;19164:34;19160:1;19152:6;19148:14;19141:58;19233:20;19228:2;19220:6;19216:15;19209:45;19024:237;:::o;19267:366::-;19409:3;19430:67;19494:2;19489:3;19430:67;:::i;:::-;19423:74;;19506:93;19595:3;19506:93;:::i;:::-;19624:2;19619:3;19615:12;19608:19;;19267:366;;;:::o;19639:419::-;19805:4;19843:2;19832:9;19828:18;19820:26;;19892:9;19886:4;19882:20;19878:1;19867:9;19863:17;19856:47;19920:131;20046:4;19920:131;:::i;:::-;19912:139;;19639:419;;;:::o;20064:171::-;20204:23;20200:1;20192:6;20188:14;20181:47;20064:171;:::o;20241:366::-;20383:3;20404:67;20468:2;20463:3;20404:67;:::i;:::-;20397:74;;20480:93;20569:3;20480:93;:::i;:::-;20598:2;20593:3;20589:12;20582:19;;20241:366;;;:::o;20613:419::-;20779:4;20817:2;20806:9;20802:18;20794:26;;20866:9;20860:4;20856:20;20852:1;20841:9;20837:17;20830:47;20894:131;21020:4;20894:131;:::i;:::-;20886:139;;20613:419;;;:::o;21038:332::-;21159:4;21197:2;21186:9;21182:18;21174:26;;21210:71;21278:1;21267:9;21263:17;21254:6;21210:71;:::i;:::-;21291:72;21359:2;21348:9;21344:18;21335:6;21291:72;:::i;:::-;21038:332;;;;;:::o;21376:223::-;21516:34;21512:1;21504:6;21500:14;21493:58;21585:6;21580:2;21572:6;21568:15;21561:31;21376:223;:::o;21605:366::-;21747:3;21768:67;21832:2;21827:3;21768:67;:::i;:::-;21761:74;;21844:93;21933:3;21844:93;:::i;:::-;21962:2;21957:3;21953:12;21946:19;;21605:366;;;:::o;21977:419::-;22143:4;22181:2;22170:9;22166:18;22158:26;;22230:9;22224:4;22220:20;22216:1;22205:9;22201:17;22194:47;22258:131;22384:4;22258:131;:::i;:::-;22250:139;;21977:419;;;:::o;22402:173::-;22542:25;22538:1;22530:6;22526:14;22519:49;22402:173;:::o;22581:366::-;22723:3;22744:67;22808:2;22803:3;22744:67;:::i;:::-;22737:74;;22820:93;22909:3;22820:93;:::i;:::-;22938:2;22933:3;22929:12;22922:19;;22581:366;;;:::o;22953:419::-;23119:4;23157:2;23146:9;23142:18;23134:26;;23206:9;23200:4;23196:20;23192:1;23181:9;23177:17;23170:47;23234:131;23360:4;23234:131;:::i;:::-;23226:139;;22953:419;;;:::o;23378:174::-;23518:26;23514:1;23506:6;23502:14;23495:50;23378:174;:::o;23558:366::-;23700:3;23721:67;23785:2;23780:3;23721:67;:::i;:::-;23714:74;;23797:93;23886:3;23797:93;:::i;:::-;23915:2;23910:3;23906:12;23899:19;;23558:366;;;:::o;23930:419::-;24096:4;24134:2;24123:9;24119:18;24111:26;;24183:9;24177:4;24173:20;24169:1;24158:9;24154:17;24147:47;24211:131;24337:4;24211:131;:::i;:::-;24203:139;;23930:419;;;:::o;24355:224::-;24495:34;24491:1;24483:6;24479:14;24472:58;24564:7;24559:2;24551:6;24547:15;24540:32;24355:224;:::o;24585:366::-;24727:3;24748:67;24812:2;24807:3;24748:67;:::i;:::-;24741:74;;24824:93;24913:3;24824:93;:::i;:::-;24942:2;24937:3;24933:12;24926:19;;24585:366;;;:::o;24957:419::-;25123:4;25161:2;25150:9;25146:18;25138:26;;25210:9;25204:4;25200:20;25196:1;25185:9;25181:17;25174:47;25238:131;25364:4;25238:131;:::i;:::-;25230:139;;24957:419;;;:::o;25382:250::-;25522:34;25518:1;25510:6;25506:14;25499:58;25591:33;25586:2;25578:6;25574:15;25567:58;25382:250;:::o;25638:366::-;25780:3;25801:67;25865:2;25860:3;25801:67;:::i;:::-;25794:74;;25877:93;25966:3;25877:93;:::i;:::-;25995:2;25990:3;25986:12;25979:19;;25638:366;;;:::o;26010:419::-;26176:4;26214:2;26203:9;26199:18;26191:26;;26263:9;26257:4;26253:20;26249:1;26238:9;26234:17;26227:47;26291:131;26417:4;26291:131;:::i;:::-;26283:139;;26010:419;;;:::o;26435:250::-;26575:34;26571:1;26563:6;26559:14;26552:58;26644:33;26639:2;26631:6;26627:15;26620:58;26435:250;:::o;26691:366::-;26833:3;26854:67;26918:2;26913:3;26854:67;:::i;:::-;26847:74;;26930:93;27019:3;26930:93;:::i;:::-;27048:2;27043:3;27039:12;27032:19;;26691:366;;;:::o;27063:419::-;27229:4;27267:2;27256:9;27252:18;27244:26;;27316:9;27310:4;27306:20;27302:1;27291:9;27287:17;27280:47;27344:131;27470:4;27344:131;:::i;:::-;27336:139;;27063:419;;;:::o;27488:229::-;27628:34;27624:1;27616:6;27612:14;27605:58;27697:12;27692:2;27684:6;27680:15;27673:37;27488:229;:::o;27723:366::-;27865:3;27886:67;27950:2;27945:3;27886:67;:::i;:::-;27879:74;;27962:93;28051:3;27962:93;:::i;:::-;28080:2;28075:3;28071:12;28064:19;;27723:366;;;:::o;28095:419::-;28261:4;28299:2;28288:9;28284:18;28276:26;;28348:9;28342:4;28338:20;28334:1;28323:9;28319:17;28312:47;28376:131;28502:4;28376:131;:::i;:::-;28368:139;;28095:419;;;:::o;28520:221::-;28660:34;28656:1;28648:6;28644:14;28637:58;28729:4;28724:2;28716:6;28712:15;28705:29;28520:221;:::o;28747:366::-;28889:3;28910:67;28974:2;28969:3;28910:67;:::i;:::-;28903:74;;28986:93;29075:3;28986:93;:::i;:::-;29104:2;29099:3;29095:12;29088:19;;28747:366;;;:::o;29119:419::-;29285:4;29323:2;29312:9;29308:18;29300:26;;29372:9;29366:4;29362:20;29358:1;29347:9;29343:17;29336:47;29400:131;29526:4;29400:131;:::i;:::-;29392:139;;29119:419;;;:::o;29544:225::-;29684:34;29680:1;29672:6;29668:14;29661:58;29753:8;29748:2;29740:6;29736:15;29729:33;29544:225;:::o;29775:366::-;29917:3;29938:67;30002:2;29997:3;29938:67;:::i;:::-;29931:74;;30014:93;30103:3;30014:93;:::i;:::-;30132:2;30127:3;30123:12;30116:19;;29775:366;;;:::o;30147:419::-;30313:4;30351:2;30340:9;30336:18;30328:26;;30400:9;30394:4;30390:20;30386:1;30375:9;30371:17;30364:47;30428:131;30554:4;30428:131;:::i;:::-;30420:139;;30147:419;;;:::o;30572:242::-;30712:34;30708:1;30700:6;30696:14;30689:58;30781:25;30776:2;30768:6;30764:15;30757:50;30572:242;:::o;30820:366::-;30962:3;30983:67;31047:2;31042:3;30983:67;:::i;:::-;30976:74;;31059:93;31148:3;31059:93;:::i;:::-;31177:2;31172:3;31168:12;31161:19;;30820:366;;;:::o;31192:419::-;31358:4;31396:2;31385:9;31381:18;31373:26;;31445:9;31439:4;31435:20;31431:1;31420:9;31416:17;31409:47;31473:131;31599:4;31473:131;:::i;:::-;31465:139;;31192:419;;;:::o;31617:143::-;31674:5;31705:6;31699:13;31690:22;;31721:33;31748:5;31721:33;:::i;:::-;31617:143;;;;:::o;31766:351::-;31836:6;31885:2;31873:9;31864:7;31860:23;31856:32;31853:119;;;31891:79;;:::i;:::-;31853:119;32011:1;32036:64;32092:7;32083:6;32072:9;32068:22;32036:64;:::i;:::-;32026:74;;31982:128;31766:351;;;;:::o;32123:332::-;32244:4;32282:2;32271:9;32267:18;32259:26;;32295:71;32363:1;32352:9;32348:17;32339:6;32295:71;:::i;:::-;32376:72;32444:2;32433:9;32429:18;32420:6;32376:72;:::i;:::-;32123:332;;;;;:::o;32461:137::-;32515:5;32546:6;32540:13;32531:22;;32562:30;32586:5;32562:30;:::i;:::-;32461:137;;;;:::o;32604:345::-;32671:6;32720:2;32708:9;32699:7;32695:23;32691:32;32688:119;;;32726:79;;:::i;:::-;32688:119;32846:1;32871:61;32924:7;32915:6;32904:9;32900:22;32871:61;:::i;:::-;32861:71;;32817:125;32604:345;;;;:::o;32955:223::-;33095:34;33091:1;33083:6;33079:14;33072:58;33164:6;33159:2;33151:6;33147:15;33140:31;32955:223;:::o;33184:366::-;33326:3;33347:67;33411:2;33406:3;33347:67;:::i;:::-;33340:74;;33423:93;33512:3;33423:93;:::i;:::-;33541:2;33536:3;33532:12;33525:19;;33184:366;;;:::o;33556:419::-;33722:4;33760:2;33749:9;33745:18;33737:26;;33809:9;33803:4;33799:20;33795:1;33784:9;33780:17;33773:47;33837:131;33963:4;33837:131;:::i;:::-;33829:139;;33556:419;;;:::o;33981:221::-;34121:34;34117:1;34109:6;34105:14;34098:58;34190:4;34185:2;34177:6;34173:15;34166:29;33981:221;:::o;34208:366::-;34350:3;34371:67;34435:2;34430:3;34371:67;:::i;:::-;34364:74;;34447:93;34536:3;34447:93;:::i;:::-;34565:2;34560:3;34556:12;34549:19;;34208:366;;;:::o;34580:419::-;34746:4;34784:2;34773:9;34769:18;34761:26;;34833:9;34827:4;34823:20;34819:1;34808:9;34804:17;34797:47;34861:131;34987:4;34861:131;:::i;:::-;34853:139;;34580:419;;;:::o;35005:224::-;35145:34;35141:1;35133:6;35129:14;35122:58;35214:7;35209:2;35201:6;35197:15;35190:32;35005:224;:::o;35235:366::-;35377:3;35398:67;35462:2;35457:3;35398:67;:::i;:::-;35391:74;;35474:93;35563:3;35474:93;:::i;:::-;35592:2;35587:3;35583:12;35576:19;;35235:366;;;:::o;35607:419::-;35773:4;35811:2;35800:9;35796:18;35788:26;;35860:9;35854:4;35850:20;35846:1;35835:9;35831:17;35824:47;35888:131;36014:4;35888:131;:::i;:::-;35880:139;;35607:419;;;:::o;36032:222::-;36172:34;36168:1;36160:6;36156:14;36149:58;36241:5;36236:2;36228:6;36224:15;36217:30;36032:222;:::o;36260:366::-;36402:3;36423:67;36487:2;36482:3;36423:67;:::i;:::-;36416:74;;36499:93;36588:3;36499:93;:::i;:::-;36617:2;36612:3;36608:12;36601:19;;36260:366;;;:::o;36632:419::-;36798:4;36836:2;36825:9;36821:18;36813:26;;36885:9;36879:4;36875:20;36871:1;36860:9;36856:17;36849:47;36913:131;37039:4;36913:131;:::i;:::-;36905:139;;36632:419;;;:::o;37057:174::-;37197:26;37193:1;37185:6;37181:14;37174:50;37057:174;:::o;37237:366::-;37379:3;37400:67;37464:2;37459:3;37400:67;:::i;:::-;37393:74;;37476:93;37565:3;37476:93;:::i;:::-;37594:2;37589:3;37585:12;37578:19;;37237:366;;;:::o;37609:419::-;37775:4;37813:2;37802:9;37798:18;37790:26;;37862:9;37856:4;37852:20;37848:1;37837:9;37833:17;37826:47;37890:131;38016:4;37890:131;:::i;:::-;37882:139;;37609:419;;;:::o;38034:246::-;38174:34;38170:1;38162:6;38158:14;38151:58;38243:29;38238:2;38230:6;38226:15;38219:54;38034:246;:::o;38286:366::-;38428:3;38449:67;38513:2;38508:3;38449:67;:::i;:::-;38442:74;;38525:93;38614:3;38525:93;:::i;:::-;38643:2;38638:3;38634:12;38627:19;;38286:366;;;:::o;38658:419::-;38824:4;38862:2;38851:9;38847:18;38839:26;;38911:9;38905:4;38901:20;38897:1;38886:9;38882:17;38875:47;38939:131;39065:4;38939:131;:::i;:::-;38931:139;;38658:419;;;:::o;39083:194::-;39123:4;39143:20;39161:1;39143:20;:::i;:::-;39138:25;;39177:20;39195:1;39177:20;:::i;:::-;39172:25;;39221:1;39218;39214:9;39206:17;;39245:1;39239:4;39236:11;39233:37;;;39250:18;;:::i;:::-;39233:37;39083:194;;;;:::o;39283:235::-;39423:34;39419:1;39411:6;39407:14;39400:58;39492:18;39487:2;39479:6;39475:15;39468:43;39283:235;:::o;39524:366::-;39666:3;39687:67;39751:2;39746:3;39687:67;:::i;:::-;39680:74;;39763:93;39852:3;39763:93;:::i;:::-;39881:2;39876:3;39872:12;39865:19;;39524:366;;;:::o;39896:419::-;40062:4;40100:2;40089:9;40085:18;40077:26;;40149:9;40143:4;40139:20;40135:1;40124:9;40120:17;40113:47;40177:131;40303:4;40177:131;:::i;:::-;40169:139;;39896:419;;;:::o;40321:179::-;40461:31;40457:1;40449:6;40445:14;40438:55;40321:179;:::o;40506:366::-;40648:3;40669:67;40733:2;40728:3;40669:67;:::i;:::-;40662:74;;40745:93;40834:3;40745:93;:::i;:::-;40863:2;40858:3;40854:12;40847:19;;40506:366;;;:::o;40878:419::-;41044:4;41082:2;41071:9;41067:18;41059:26;;41131:9;41125:4;41121:20;41117:1;41106:9;41102:17;41095:47;41159:131;41285:4;41159:131;:::i;:::-;41151:139;;40878:419;;;:::o;41303:147::-;41404:11;41441:3;41426:18;;41303:147;;;;:::o;41456:114::-;;:::o;41576:398::-;41735:3;41756:83;41837:1;41832:3;41756:83;:::i;:::-;41749:90;;41848:93;41937:3;41848:93;:::i;:::-;41966:1;41961:3;41957:11;41950:18;;41576:398;;;:::o;41980:379::-;42164:3;42186:147;42329:3;42186:147;:::i;:::-;42179:154;;42350:3;42343:10;;41980:379;;;:::o;42365:225::-;42505:34;42501:1;42493:6;42489:14;42482:58;42574:8;42569:2;42561:6;42557:15;42550:33;42365:225;:::o;42596:366::-;42738:3;42759:67;42823:2;42818:3;42759:67;:::i;:::-;42752:74;;42835:93;42924:3;42835:93;:::i;:::-;42953:2;42948:3;42944:12;42937:19;;42596:366;;;:::o;42968:419::-;43134:4;43172:2;43161:9;43157:18;43149:26;;43221:9;43215:4;43211:20;43207:1;43196:9;43192:17;43185:47;43249:131;43375:4;43249:131;:::i;:::-;43241:139;;42968:419;;;:::o;43393:180::-;43441:77;43438:1;43431:88;43538:4;43535:1;43528:15;43562:4;43559:1;43552:15;43579:180;43627:77;43624:1;43617:88;43724:4;43721:1;43714:15;43748:4;43745:1;43738:15;43765:143;43822:5;43853:6;43847:13;43838:22;;43869:33;43896:5;43869:33;:::i;:::-;43765:143;;;;:::o;43914:351::-;43984:6;44033:2;44021:9;44012:7;44008:23;44004:32;44001:119;;;44039:79;;:::i;:::-;44001:119;44159:1;44184:64;44240:7;44231:6;44220:9;44216:22;44184:64;:::i;:::-;44174:74;;44130:128;43914:351;;;;:::o;44271:85::-;44316:7;44345:5;44334:16;;44271:85;;;:::o;44362:158::-;44420:9;44453:61;44471:42;44480:32;44506:5;44480:32;:::i;:::-;44471:42;:::i;:::-;44453:61;:::i;:::-;44440:74;;44362:158;;;:::o;44526:147::-;44621:45;44660:5;44621:45;:::i;:::-;44616:3;44609:58;44526:147;;:::o;44679:114::-;44746:6;44780:5;44774:12;44764:22;;44679:114;;;:::o;44799:184::-;44898:11;44932:6;44927:3;44920:19;44972:4;44967:3;44963:14;44948:29;;44799:184;;;;:::o;44989:132::-;45056:4;45079:3;45071:11;;45109:4;45104:3;45100:14;45092:22;;44989:132;;;:::o;45127:108::-;45204:24;45222:5;45204:24;:::i;:::-;45199:3;45192:37;45127:108;;:::o;45241:179::-;45310:10;45331:46;45373:3;45365:6;45331:46;:::i;:::-;45409:4;45404:3;45400:14;45386:28;;45241:179;;;;:::o;45426:113::-;45496:4;45528;45523:3;45519:14;45511:22;;45426:113;;;:::o;45575:732::-;45694:3;45723:54;45771:5;45723:54;:::i;:::-;45793:86;45872:6;45867:3;45793:86;:::i;:::-;45786:93;;45903:56;45953:5;45903:56;:::i;:::-;45982:7;46013:1;45998:284;46023:6;46020:1;46017:13;45998:284;;;46099:6;46093:13;46126:63;46185:3;46170:13;46126:63;:::i;:::-;46119:70;;46212:60;46265:6;46212:60;:::i;:::-;46202:70;;46058:224;46045:1;46042;46038:9;46033:14;;45998:284;;;46002:14;46298:3;46291:10;;45699:608;;;45575:732;;;;:::o;46313:831::-;46576:4;46614:3;46603:9;46599:19;46591:27;;46628:71;46696:1;46685:9;46681:17;46672:6;46628:71;:::i;:::-;46709:80;46785:2;46774:9;46770:18;46761:6;46709:80;:::i;:::-;46836:9;46830:4;46826:20;46821:2;46810:9;46806:18;46799:48;46864:108;46967:4;46958:6;46864:108;:::i;:::-;46856:116;;46982:72;47050:2;47039:9;47035:18;47026:6;46982:72;:::i;:::-;47064:73;47132:3;47121:9;47117:19;47108:6;47064:73;:::i;:::-;46313:831;;;;;;;;:::o

Swarm Source

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