ETH Price: $2,626.28 (+0.49%)

Token

Toyotama (👑)
 

Overview

Max Total Supply

1,000,000,000,000 👑

Holders

36

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Filtered by Token Holder
Uniswap V2: 👑 5
Balance
8,490,316,281.042288038 👑

Value
$0.00
0xcfc2ed820e27826a7ee02011c04d1c4509ca5ea8
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
Toyotama

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-12-27
*/

// SPDX-License-Identifier: unlicensed
pragma solidity 0.8.10;

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

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 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 IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);
    
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}


contract ERC20 is Context, IERC20, IERC20Metadata {
    using SafeMath for uint256;

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

    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        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);

        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(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 = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(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);

        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(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 {}
}

library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

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

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

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

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 renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

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



library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);

    function mul(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a * b;

        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }

    function div(int256 a, int256 b) internal pure returns (int256) {
        require(b != -1 || a != MIN_INT256);

        return a / b;
    }

    function sub(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }

    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }

    function abs(int256 a) internal pure returns (int256) {
        require(a != MIN_INT256);
        return a < 0 ? -a : a;
    }

    function toUint256Safe(int256 a) internal pure returns (uint256) {
        require(a >= 0);
        return uint256(a);
    }
}

library SafeMathUint {
  function toInt256Safe(uint256 a) internal pure returns (int256) {
    int256 b = int256(a);
    require(b >= 0);
    return b;
  }
}

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

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

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;

    mapping (address => bool) private _isSniper;
    bool private _swapping;
    uint256 private _launchTime;

    address public feeWallet;
    
    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;
        
    bool public limitsInEffect = true;
    bool public tradingActive;
    
    // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
    bool public transferDelayEnabled = true;

    uint256 public buyTotalFees;
    uint256 private _buyDevFee;
    uint256 private _buyLiquidityFee;
    
    uint256 public sellTotalFees;
    uint256 private _sellDevFee;
    uint256 private _sellLiquidityFee;
    
    uint256 private _tokensForDev;
    uint256 private _tokensForLiquidity;
    
    // exclude from fees and max transaction amount
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) public _isExcludedMaxTransactionAmount;

    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping (address => bool) public automatedMarketMakerPairs;

    event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress);
    event ExcludeFromFees(address indexed account, bool isExcluded);
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event feeWalletUpdated(address indexed newWallet, address indexed oldWallet);
    event SwapAndLiquify(uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiquidity);
    event AutoNukeLP();
    event ManualNukeLP();

    constructor() ERC20("Toyotama", unicode"👑") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        
        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;
        
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
        
        uint256 buyDevFee = 1;
        uint256 buyLiquidityFee = 19;

        uint256 sellDevFee = 2;
        uint256 sellLiquidityFee = 28;
        
        uint256 totalSupply = 1000000000000 * 10**9; //Supply 1,000,000,000,000
        
        maxTransactionAmount = totalSupply * 2 / 100; // 2%
        maxWallet = totalSupply * 2 / 100; // 2%
        swapTokensAtAmount = totalSupply * 30 / 10000;

        _buyDevFee = buyDevFee;
        _buyLiquidityFee = buyLiquidityFee;
        buyTotalFees = _buyDevFee + _buyLiquidityFee;
        
        _sellDevFee = sellDevFee;
        _sellLiquidityFee = sellLiquidityFee;
        sellTotalFees = _sellDevFee + _sellLiquidityFee;
        
        feeWallet = address(owner()); // set as fee wallet

        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
        
        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(msg.sender, totalSupply);
    }

    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        tradingActive = true;
        _launchTime = block.timestamp;
    }
    
    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect = false;
        return true;
    }
    
    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner returns (bool) {
        transferDelayEnabled = false;
        return true;
    }
    
     // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool) {
  	    require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply.");
  	    require(newAmount <= totalSupply() * 5 / 1000, "Swap amount cannot be higher than 0.5% total supply.");
  	    swapTokensAtAmount = newAmount;
  	    return true;
  	}
    
    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 1000) / 1e9, "Cannot set maxTransactionAmount lower than 0.1%");
        maxTransactionAmount = newNum * 1e9;
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 5 / 1000)/1e9, "Cannot set maxWallet lower than 0.5%");
        maxWallet = newNum * 1e9;
    }
    
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }
    
    function updateBuyFees(uint256 devFee, uint256 liquidityFee) external onlyOwner {
        _buyDevFee = devFee;
        _buyLiquidityFee = liquidityFee;
        buyTotalFees = _buyDevFee + _buyLiquidityFee;
        require(buyTotalFees <= 5, "Must keep fees at 5% or less");
    }
    
    function updateSellFees(uint256 devFee, uint256 liquidityFee) external onlyOwner {
        _sellDevFee = devFee;
        _sellLiquidityFee = liquidityFee;
        sellTotalFees = _sellDevFee + _sellLiquidityFee;
        require(sellTotalFees <= 30, "Must keep fees at 30% or less");
    }

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

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

        _setAutomatedMarketMakerPair(pair, value);
    }

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

        emit SetAutomatedMarketMakerPair(pair, value);
    }
    
    function updateFeeWallet(address newWallet) external onlyOwner {
        emit feeWalletUpdated(newWallet, feeWallet);
        feeWallet = newWallet;
    }

    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }
    
    function setSnipers(address[] memory snipers_) public onlyOwner() {
        for (uint i = 0; i < snipers_.length; i++) {
            if (snipers_[i] != uniswapV2Pair && snipers_[i] != address(uniswapV2Router)) {
                _isSniper[snipers_[i]] = true;
            }
        }
    }
    
    function delSnipers(address[] memory snipers_) public onlyOwner() {
        for (uint i = 0; i < snipers_.length; i++) {
            _isSniper[snipers_[i]] = false;
        }
    }
    
    function isSniper(address addr) public view returns (bool) {
        return _isSniper[addr];
    }

    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(!_isSniper[from], "Your address has been marked as a sniper, you are unable to transfer or swap.");
        
         if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }
        
        if (block.timestamp == _launchTime) _isSniper[to] = true;
        
        if (limitsInEffect) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !_swapping
            ) {
                if (!tradingActive) {
                    require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
                }

                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.  
                if (transferDelayEnabled){
                    if (to != owner() && to != address(uniswapV2Router) && to != address(uniswapV2Pair)){
                        require(_holderLastTransferTimestamp[tx.origin] < block.number, "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed.");
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }
                 
                // when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                    require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount.");
                    require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
                
                // when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                    require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount.");
                }
                else if (!_isExcludedMaxTransactionAmount[to]){
                    require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
            }
        }
        
		uint256 contractTokenBalance = balanceOf(address(this));
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;
        if (
            canSwap &&
            !_swapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            _swapping = true;
            swapBack();
            _swapping = false;
        }

        bool takeFee = !_swapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
        
        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = amount.mul(sellTotalFees).div(100);
                _tokensForLiquidity += fees * _sellLiquidityFee / sellTotalFees;
                _tokensForDev += fees * _sellDevFee / sellTotalFees;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
        	    fees = amount.mul(buyTotalFees).div(100);
        	    _tokensForLiquidity += fees * _buyLiquidityFee / buyTotalFees;
                _tokensForDev += fees * _buyDevFee / buyTotalFees;
            }
            
            if (fees > 0) {
                super._transfer(from, address(this), fees);
            }
        	
        	amount -= fees;
        }

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

    function _swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }
    
    function _addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            owner(),
            block.timestamp
        );
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = _tokensForLiquidity + _tokensForDev;
        
        if (contractBalance == 0 || totalTokensToSwap == 0) return;
        if (contractBalance > swapTokensAtAmount * 20) {
          contractBalance = swapTokensAtAmount * 20;
        }
        
        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = contractBalance * _tokensForLiquidity / totalTokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);
        
        uint256 initialETHBalance = address(this).balance;

        _swapTokensForEth(amountToSwapForETH); 
        
        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
        uint256 ethForDev = ethBalance.mul(_tokensForDev).div(totalTokensToSwap);
        uint256 ethForLiquidity = ethBalance - ethForDev;
        
        _tokensForLiquidity = 0;
        _tokensForDev = 0;
                
        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            _addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, _tokensForLiquidity);
        }
    }

    function withdrawFees() external {
        payable(feeWallet).transfer(address(this).balance);
    }

    receive() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[],"name":"AutoNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[],"name":"ManualNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"feeWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"snipers_","type":"address[]"}],"name":"delSnipers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":"addr","type":"address"}],"name":"isSniper","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"snipers_","type":"address[]"}],"name":"setSnipers","outputs":[],"stateMutability":"nonpayable","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":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"devFee","type":"uint256"},{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateFeeWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"devFee","type":"uint256"},{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526001600d60006101000a81548160ff0219169083151502179055506001600f60006101000a81548160ff0219169083151502179055503480156200004757600080fd5b506040518060400160405280600881526020017f546f796f74616d610000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017ff09f9191000000000000000000000000000000000000000000000000000000008152508160039080519060200190620000cc92919062000acd565b508060049080519060200190620000e592919062000acd565b5050506000620000fa6200059960201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001c5816001620005a160201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000245573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200026b919062000be7565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002d3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002f9919062000be7565b6040518363ffffffff1660e01b81526004016200031892919062000c2a565b6020604051808303816000875af115801562000338573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200035e919062000be7565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620003a660a0516001620005a160201b60201c565b620003bb60a05160016200069e60201b60201c565b6000600190506000601390506000600290506000601c90506000683635c9adc5dea0000090506064600282620003f2919062000c90565b620003fe919062000d20565b600a81905550606460028262000415919062000c90565b62000421919062000d20565b600c81905550612710601e8262000439919062000c90565b62000445919062000d20565b600b8190555084601181905550836012819055506012546011546200046b919062000d58565b601081905550826014819055508160158190555060155460145462000491919062000d58565b601381905550620004a76200073f60201b60201c565b600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000509620004fb6200073f60201b60201c565b60016200076960201b60201c565b6200051c3060016200076960201b60201c565b6200053161dead60016200076960201b60201c565b62000553620005456200073f60201b60201c565b6001620005a160201b60201c565b62000566306001620005a160201b60201c565b6200057b61dead6001620005a160201b60201c565b6200058d3382620008b660201b60201c565b50505050505062000fe9565b600033905090565b620005b16200059960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000643576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200063a9062000e16565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620007796200059960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146200080b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008029062000e16565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620008aa919062000e55565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000929576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009209062000ec2565b60405180910390fd5b6200093d6000838362000a6560201b60201c565b620009598160025462000a6a60201b620024471790919060201c565b600281905550620009b7816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000a6a60201b620024471790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000a59919062000ef5565b60405180910390a35050565b505050565b600080828462000a7b919062000d58565b90508381101562000ac3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000aba9062000f62565b60405180910390fd5b8091505092915050565b82805462000adb9062000fb3565b90600052602060002090601f01602090048101928262000aff576000855562000b4b565b82601f1062000b1a57805160ff191683800117855562000b4b565b8280016001018555821562000b4b579182015b8281111562000b4a57825182559160200191906001019062000b2d565b5b50905062000b5a919062000b5e565b5090565b5b8082111562000b7957600081600090555060010162000b5f565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000baf8262000b82565b9050919050565b62000bc18162000ba2565b811462000bcd57600080fd5b50565b60008151905062000be18162000bb6565b92915050565b60006020828403121562000c005762000bff62000b7d565b5b600062000c108482850162000bd0565b91505092915050565b62000c248162000ba2565b82525050565b600060408201905062000c41600083018562000c19565b62000c50602083018462000c19565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000c9d8262000c57565b915062000caa8362000c57565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000ce65762000ce562000c61565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000d2d8262000c57565b915062000d3a8362000c57565b92508262000d4d5762000d4c62000cf1565b5b828204905092915050565b600062000d658262000c57565b915062000d728362000c57565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000daa5762000da962000c61565b5b828201905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000dfe60208362000db5565b915062000e0b8262000dc6565b602082019050919050565b6000602082019050818103600083015262000e318162000def565b9050919050565b60008115159050919050565b62000e4f8162000e38565b82525050565b600060208201905062000e6c600083018462000e44565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000eaa601f8362000db5565b915062000eb78262000e72565b602082019050919050565b6000602082019050818103600083015262000edd8162000e9b565b9050919050565b62000eef8162000c57565b82525050565b600060208201905062000f0c600083018462000ee4565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600062000f4a601b8362000db5565b915062000f578262000f12565b602082019050919050565b6000602082019050818103600083015262000f7d8162000f3b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000fcc57607f821691505b6020821081141562000fe35762000fe262000f84565b5b50919050565b60805160a0516154236200105560003960008181610fde0152818161110e01528181611b620152612b20015260008181610c8e0152818161117f01528181612ac801528181613a4d01528181613b2e01528181613b5501528181613bf10152613c1801526154236000f3fe60806040526004361061026b5760003560e01c80637571336a11610144578063c18bc195116100b6578063dd62ed3e1161007a578063dd62ed3e1461094f578063e2f456051461098c578063e884f260146109b7578063f25f4b56146109e2578063f2fde38b14610a0d578063f8b45b0514610a3657610272565b8063c18bc19514610868578063c876d0b914610891578063c8c8ebe4146108bc578063d257b34f146108e7578063d85ba0631461092457610272565b80639a7a23d6116101085780639a7a23d614610734578063a457c2d71461075d578063a9059cbb1461079a578063b62496f5146107d7578063bbc0c74214610814578063c02466681461083f57610272565b80637571336a14610675578063892ba4081461069e5780638a8c523c146106c75780638da5cb5b146106de57806395d89b411461070957610272565b8063476343ee116101dd57806366718524116101a1578063667185241461057957806366ca9b83146105a25780636a486a8e146105cb57806370a08231146105f6578063715018a614610633578063751039fc1461064a57610272565b8063476343ee146104a657806349bd5a5e146104bd5780634a62bb65146104e85780634fbee193146105135780635e80148e1461055057610272565b80631694505e1161022f5780631694505e1461038257806318160ddd146103ad578063203e727e146103d857806323b872dd14610401578063313ce5671461043e578063395093511461046957610272565b806302dbd8f81461027757806306fdde03146102a0578063095ea7b3146102cb5780630f3a325f1461030857806310d5de531461034557610272565b3661027257005b600080fd5b34801561028357600080fd5b5061029e60048036038101906102999190613d79565b610a61565b005b3480156102ac57600080fd5b506102b5610b66565b6040516102c29190613e52565b60405180910390f35b3480156102d757600080fd5b506102f260048036038101906102ed9190613ed2565b610bf8565b6040516102ff9190613f2d565b60405180910390f35b34801561031457600080fd5b5061032f600480360381019061032a9190613f48565b610c16565b60405161033c9190613f2d565b60405180910390f35b34801561035157600080fd5b5061036c60048036038101906103679190613f48565b610c6c565b6040516103799190613f2d565b60405180910390f35b34801561038e57600080fd5b50610397610c8c565b6040516103a49190613fd4565b60405180910390f35b3480156103b957600080fd5b506103c2610cb0565b6040516103cf9190613ffe565b60405180910390f35b3480156103e457600080fd5b506103ff60048036038101906103fa9190614019565b610cba565b005b34801561040d57600080fd5b5061042860048036038101906104239190614046565b610ddc565b6040516104359190613f2d565b60405180910390f35b34801561044a57600080fd5b50610453610eb5565b60405161046091906140b5565b60405180910390f35b34801561047557600080fd5b50610490600480360381019061048b9190613ed2565b610ebe565b60405161049d9190613f2d565b60405180910390f35b3480156104b257600080fd5b506104bb610f71565b005b3480156104c957600080fd5b506104d2610fdc565b6040516104df91906140df565b60405180910390f35b3480156104f457600080fd5b506104fd611000565b60405161050a9190613f2d565b60405180910390f35b34801561051f57600080fd5b5061053a60048036038101906105359190613f48565b611013565b6040516105479190613f2d565b60405180910390f35b34801561055c57600080fd5b5061057760048036038101906105729190614242565b611069565b005b34801561058557600080fd5b506105a0600480360381019061059b9190613f48565b611277565b005b3480156105ae57600080fd5b506105c960048036038101906105c49190613d79565b6113ce565b005b3480156105d757600080fd5b506105e06114d3565b6040516105ed9190613ffe565b60405180910390f35b34801561060257600080fd5b5061061d60048036038101906106189190613f48565b6114d9565b60405161062a9190613ffe565b60405180910390f35b34801561063f57600080fd5b50610648611521565b005b34801561065657600080fd5b5061065f611679565b60405161066c9190613f2d565b60405180910390f35b34801561068157600080fd5b5061069c600480360381019061069791906142b7565b611734565b005b3480156106aa57600080fd5b506106c560048036038101906106c09190614242565b611826565b005b3480156106d357600080fd5b506106dc611952565b005b3480156106ea57600080fd5b506106f3611a0d565b60405161070091906140df565b60405180910390f35b34801561071557600080fd5b5061071e611a37565b60405161072b9190613e52565b60405180910390f35b34801561074057600080fd5b5061075b600480360381019061075691906142b7565b611ac9565b005b34801561076957600080fd5b50610784600480360381019061077f9190613ed2565b611bfd565b6040516107919190613f2d565b60405180910390f35b3480156107a657600080fd5b506107c160048036038101906107bc9190613ed2565b611cca565b6040516107ce9190613f2d565b60405180910390f35b3480156107e357600080fd5b506107fe60048036038101906107f99190613f48565b611ce8565b60405161080b9190613f2d565b60405180910390f35b34801561082057600080fd5b50610829611d08565b6040516108369190613f2d565b60405180910390f35b34801561084b57600080fd5b50610866600480360381019061086191906142b7565b611d1b565b005b34801561087457600080fd5b5061088f600480360381019061088a9190614019565b611e5b565b005b34801561089d57600080fd5b506108a6611f7d565b6040516108b39190613f2d565b60405180910390f35b3480156108c857600080fd5b506108d1611f90565b6040516108de9190613ffe565b60405180910390f35b3480156108f357600080fd5b5061090e60048036038101906109099190614019565b611f96565b60405161091b9190613f2d565b60405180910390f35b34801561093057600080fd5b50610939612106565b6040516109469190613ffe565b60405180910390f35b34801561095b57600080fd5b50610976600480360381019061097191906142f7565b61210c565b6040516109839190613ffe565b60405180910390f35b34801561099857600080fd5b506109a1612193565b6040516109ae9190613ffe565b60405180910390f35b3480156109c357600080fd5b506109cc612199565b6040516109d99190613f2d565b60405180910390f35b3480156109ee57600080fd5b506109f7612254565b604051610a0491906140df565b60405180910390f35b348015610a1957600080fd5b50610a346004803603810190610a2f9190613f48565b61227a565b005b348015610a4257600080fd5b50610a4b612441565b604051610a589190613ffe565b60405180910390f35b610a696124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610af8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aef90614383565b60405180910390fd5b8160148190555080601581905550601554601454610b1691906143d2565b601381905550601e6013541115610b62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5990614474565b60405180910390fd5b5050565b606060038054610b75906144c3565b80601f0160208091040260200160405190810160405280929190818152602001828054610ba1906144c3565b8015610bee5780601f10610bc357610100808354040283529160200191610bee565b820191906000526020600020905b815481529060010190602001808311610bd157829003601f168201915b5050505050905090565b6000610c0c610c056124a5565b84846124ad565b6001905092915050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60196020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b610cc26124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4890614383565b60405180910390fd5b633b9aca006103e86001610d63610cb0565b610d6d91906144f5565b610d77919061457e565b610d81919061457e565b811015610dc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dba90614621565b60405180910390fd5b633b9aca0081610dd391906144f5565b600a8190555050565b6000610de9848484612678565b610eaa84610df56124a5565b610ea5856040518060600160405280602881526020016153a160289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610e5b6124a5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133849092919063ffffffff16565b6124ad565b600190509392505050565b60006009905090565b6000610f67610ecb6124a5565b84610f628560016000610edc6124a5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461244790919063ffffffff16565b6124ad565b6001905092915050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610fd9573d6000803e3d6000fd5b50565b7f000000000000000000000000000000000000000000000000000000000000000081565b600d60009054906101000a900460ff1681565b6000601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6110716124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611100576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f790614383565b60405180910390fd5b60005b8151811015611273577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1682828151811061115657611155614641565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff16141580156111e857507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168282815181106111c7576111c6614641565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614155b156112605760016006600084848151811061120657611205614641565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b808061126b90614670565b915050611103565b5050565b61127f6124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461130e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130590614383565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f5deb5ef622431f0df5a39b72dd556892f68ba42aa0f3aaf0800e166ce866492860405160405180910390a380600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6113d66124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611465576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145c90614383565b60405180910390fd5b816011819055508060128190555060125460115461148391906143d2565b601081905550600560105411156114cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c690614705565b60405180910390fd5b5050565b60135481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6115296124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115af90614383565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006116836124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611712576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170990614383565b60405180910390fd5b6000600d60006101000a81548160ff0219169083151502179055506001905090565b61173c6124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c290614383565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61182e6124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b490614383565b60405180910390fd5b60005b815181101561194e576000600660008484815181106118e2576118e1614641565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061194690614670565b9150506118c0565b5050565b61195a6124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e090614383565b60405180910390fd5b6001600d60016101000a81548160ff02191690831515021790555042600881905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054611a46906144c3565b80601f0160208091040260200160405190810160405280929190818152602001828054611a72906144c3565b8015611abf5780601f10611a9457610100808354040283529160200191611abf565b820191906000526020600020905b815481529060010190602001808311611aa257829003601f168201915b5050505050905090565b611ad16124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5790614383565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611bef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be690614797565b60405180910390fd5b611bf982826133e8565b5050565b6000611cc0611c0a6124a5565b84611cbb856040518060600160405280602581526020016153c96025913960016000611c346124a5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133849092919063ffffffff16565b6124ad565b6001905092915050565b6000611cde611cd76124a5565b8484612678565b6001905092915050565b601a6020528060005260406000206000915054906101000a900460ff1681565b600d60019054906101000a900460ff1681565b611d236124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611db2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da990614383565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611e4f9190613f2d565b60405180910390a25050565b611e636124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ef2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee990614383565b60405180910390fd5b633b9aca006103e86005611f04610cb0565b611f0e91906144f5565b611f18919061457e565b611f22919061457e565b811015611f64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5b90614829565b60405180910390fd5b633b9aca0081611f7491906144f5565b600c8190555050565b600f60009054906101000a900460ff1681565b600a5481565b6000611fa06124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461202f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202690614383565b60405180910390fd5b620186a0600161203d610cb0565b61204791906144f5565b612051919061457e565b821015612093576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208a906148bb565b60405180910390fd5b6103e860056120a0610cb0565b6120aa91906144f5565b6120b4919061457e565b8211156120f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ed9061494d565b60405180910390fd5b81600b8190555060019050919050565b60105481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600b5481565b60006121a36124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612232576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222990614383565b60405180910390fd5b6000600f60006101000a81548160ff0219169083151502179055506001905090565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6122826124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612311576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230890614383565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612381576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612378906149df565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600c5481565b600080828461245691906143d2565b90508381101561249b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249290614a4b565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561251d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251490614add565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561258d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258490614b6f565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161266b9190613ffe565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156126e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126df90614c01565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612758576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274f90614c93565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156127e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127dc90614d4b565b60405180910390fd5b60008114156127ff576127fa83836000613489565b61337f565b600854421415612862576001600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b600d60009054906101000a900460ff1615612f255761287f611a0d565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156128ed57506128bd611a0d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129265750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612960575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129795750600760009054906101000a900460ff16155b15612f2457600d60019054906101000a900460ff16612a7357601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612a335750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612a72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6990614db7565b60405180910390fd5b5b600f60009054906101000a900460ff1615612c3b57612a90611a0d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612b1757507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b6f57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612c3a5743600e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612bf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bec90614e6f565b60405180910390fd5b43600e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612cde5750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d8557600a54811115612d28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1f90614f01565b60405180910390fd5b600c54612d34836114d9565b82612d3f91906143d2565b1115612d80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7790614f6d565b60405180910390fd5b612f23565b601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e285750601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e7757600a54811115612e72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e6990614fff565b60405180910390fd5b612f22565b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612f2157600c54612ed4836114d9565b82612edf91906143d2565b1115612f20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f1790614f6d565b60405180910390fd5b5b5b5b5b5b6000612f30306114d9565b90506000600b548210159050808015612f565750600760009054906101000a900460ff16155b8015612fac5750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156130025750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156130585750601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561309c576001600760006101000a81548160ff02191690831515021790555061308061371e565b6000600760006101000a81548160ff0219169083151502179055505b6000600760009054906101000a900460ff16159050601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806131525750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561315c57600090505b6000811561336f57601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156131bf57506000601354115b15613259576131ec60646131de6013548861389a90919063ffffffff16565b61391590919063ffffffff16565b9050601354601554826131ff91906144f5565b613209919061457e565b6017600082825461321a91906143d2565b925050819055506013546014548261323291906144f5565b61323c919061457e565b6016600082825461324d91906143d2565b9250508190555061334b565b601a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156132b457506000601054115b1561334a576132e160646132d36010548861389a90919063ffffffff16565b61391590919063ffffffff16565b9050601054601254826132f491906144f5565b6132fe919061457e565b6017600082825461330f91906143d2565b925050819055506010546011548261332791906144f5565b613331919061457e565b6016600082825461334291906143d2565b925050819055505b5b60008111156133605761335f873083613489565b5b808561336c919061501f565b94505b61337a878787613489565b505050505b505050565b60008383111582906133cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133c39190613e52565b60405180910390fd5b50600083856133db919061501f565b9050809150509392505050565b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156134f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134f090614c01565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613569576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161356090614c93565b60405180910390fd5b61357483838361395f565b6135df8160405180606001604052806026815260200161537b602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133849092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613672816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461244790919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516137119190613ffe565b60405180910390a3505050565b6000613729306114d9565b9050600060165460175461373d91906143d2565b9050600082148061374e5750600081145b1561375a575050613898565b6014600b5461376991906144f5565b821115613782576014600b5461377f91906144f5565b91505b60006002826017548561379591906144f5565b61379f919061457e565b6137a9919061457e565b905060006137c0828561396490919063ffffffff16565b905060004790506137d0826139ae565b60006137e5824761396490919063ffffffff16565b90506000613810866138026016548561389a90919063ffffffff16565b61391590919063ffffffff16565b905060008183613820919061501f565b9050600060178190555060006016819055506000861180156138425750600081115b1561388f576138518682613beb565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561858260175460405161388693929190615053565b60405180910390a15b50505050505050505b565b6000808314156138ad576000905061390f565b600082846138bb91906144f5565b90508284826138ca919061457e565b1461390a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613901906150fc565b60405180910390fd5b809150505b92915050565b600061395783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613ccc565b905092915050565b505050565b60006139a683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613384565b905092915050565b6000600267ffffffffffffffff8111156139cb576139ca6140ff565b5b6040519080825280602002602001820160405280156139f95781602001602082028036833780820191505090505b5090503081600081518110613a1157613a10614641565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613ab6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ada9190615131565b81600181518110613aee57613aed614641565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613b53307f0000000000000000000000000000000000000000000000000000000000000000846124ad565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613bb5959493929190615257565b600060405180830381600087803b158015613bcf57600080fd5b505af1158015613be3573d6000803e3d6000fd5b505050505050565b613c16307f0000000000000000000000000000000000000000000000000000000000000000846124ad565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613c60611a0d565b426040518863ffffffff1660e01b8152600401613c82969594939291906152b1565b60606040518083038185885af1158015613ca0573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613cc59190615327565b5050505050565b60008083118290613d13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d0a9190613e52565b60405180910390fd5b5060008385613d22919061457e565b9050809150509392505050565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b613d5681613d43565b8114613d6157600080fd5b50565b600081359050613d7381613d4d565b92915050565b60008060408385031215613d9057613d8f613d39565b5b6000613d9e85828601613d64565b9250506020613daf85828601613d64565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613df3578082015181840152602081019050613dd8565b83811115613e02576000848401525b50505050565b6000601f19601f8301169050919050565b6000613e2482613db9565b613e2e8185613dc4565b9350613e3e818560208601613dd5565b613e4781613e08565b840191505092915050565b60006020820190508181036000830152613e6c8184613e19565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613e9f82613e74565b9050919050565b613eaf81613e94565b8114613eba57600080fd5b50565b600081359050613ecc81613ea6565b92915050565b60008060408385031215613ee957613ee8613d39565b5b6000613ef785828601613ebd565b9250506020613f0885828601613d64565b9150509250929050565b60008115159050919050565b613f2781613f12565b82525050565b6000602082019050613f426000830184613f1e565b92915050565b600060208284031215613f5e57613f5d613d39565b5b6000613f6c84828501613ebd565b91505092915050565b6000819050919050565b6000613f9a613f95613f9084613e74565b613f75565b613e74565b9050919050565b6000613fac82613f7f565b9050919050565b6000613fbe82613fa1565b9050919050565b613fce81613fb3565b82525050565b6000602082019050613fe96000830184613fc5565b92915050565b613ff881613d43565b82525050565b60006020820190506140136000830184613fef565b92915050565b60006020828403121561402f5761402e613d39565b5b600061403d84828501613d64565b91505092915050565b60008060006060848603121561405f5761405e613d39565b5b600061406d86828701613ebd565b935050602061407e86828701613ebd565b925050604061408f86828701613d64565b9150509250925092565b600060ff82169050919050565b6140af81614099565b82525050565b60006020820190506140ca60008301846140a6565b92915050565b6140d981613e94565b82525050565b60006020820190506140f460008301846140d0565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61413782613e08565b810181811067ffffffffffffffff82111715614156576141556140ff565b5b80604052505050565b6000614169613d2f565b9050614175828261412e565b919050565b600067ffffffffffffffff821115614195576141946140ff565b5b602082029050602081019050919050565b600080fd5b60006141be6141b98461417a565b61415f565b905080838252602082019050602084028301858111156141e1576141e06141a6565b5b835b8181101561420a57806141f68882613ebd565b8452602084019350506020810190506141e3565b5050509392505050565b600082601f830112614229576142286140fa565b5b81356142398482602086016141ab565b91505092915050565b60006020828403121561425857614257613d39565b5b600082013567ffffffffffffffff81111561427657614275613d3e565b5b61428284828501614214565b91505092915050565b61429481613f12565b811461429f57600080fd5b50565b6000813590506142b18161428b565b92915050565b600080604083850312156142ce576142cd613d39565b5b60006142dc85828601613ebd565b92505060206142ed858286016142a2565b9150509250929050565b6000806040838503121561430e5761430d613d39565b5b600061431c85828601613ebd565b925050602061432d85828601613ebd565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061436d602083613dc4565b915061437882614337565b602082019050919050565b6000602082019050818103600083015261439c81614360565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006143dd82613d43565b91506143e883613d43565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561441d5761441c6143a3565b5b828201905092915050565b7f4d757374206b656570206665657320617420333025206f72206c657373000000600082015250565b600061445e601d83613dc4565b915061446982614428565b602082019050919050565b6000602082019050818103600083015261448d81614451565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806144db57607f821691505b602082108114156144ef576144ee614494565b5b50919050565b600061450082613d43565b915061450b83613d43565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614544576145436143a3565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061458982613d43565b915061459483613d43565b9250826145a4576145a361454f565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b600061460b602f83613dc4565b9150614616826145af565b604082019050919050565b6000602082019050818103600083015261463a816145fe565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061467b82613d43565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156146ae576146ad6143a3565b5b600182019050919050565b7f4d757374206b6565702066656573206174203525206f72206c65737300000000600082015250565b60006146ef601c83613dc4565b91506146fa826146b9565b602082019050919050565b6000602082019050818103600083015261471e816146e2565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614781603983613dc4565b915061478c82614725565b604082019050919050565b600060208201905081810360008301526147b081614774565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614813602483613dc4565b915061481e826147b7565b604082019050919050565b6000602082019050818103600083015261484281614806565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006148a5603583613dc4565b91506148b082614849565b604082019050919050565b600060208201905081810360008301526148d481614898565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614937603483613dc4565b9150614942826148db565b604082019050919050565b600060208201905081810360008301526149668161492a565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006149c9602683613dc4565b91506149d48261496d565b604082019050919050565b600060208201905081810360008301526149f8816149bc565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614a35601b83613dc4565b9150614a40826149ff565b602082019050919050565b60006020820190508181036000830152614a6481614a28565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614ac7602483613dc4565b9150614ad282614a6b565b604082019050919050565b60006020820190508181036000830152614af681614aba565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614b59602283613dc4565b9150614b6482614afd565b604082019050919050565b60006020820190508181036000830152614b8881614b4c565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614beb602583613dc4565b9150614bf682614b8f565b604082019050919050565b60006020820190508181036000830152614c1a81614bde565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614c7d602383613dc4565b9150614c8882614c21565b604082019050919050565b60006020820190508181036000830152614cac81614c70565b9050919050565b7f596f7572206164647265737320686173206265656e206d61726b65642061732060008201527f6120736e697065722c20796f752061726520756e61626c6520746f207472616e60208201527f73666572206f7220737761702e00000000000000000000000000000000000000604082015250565b6000614d35604d83613dc4565b9150614d4082614cb3565b606082019050919050565b60006020820190508181036000830152614d6481614d28565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614da1601683613dc4565b9150614dac82614d6b565b602082019050919050565b60006020820190508181036000830152614dd081614d94565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000614e59604983613dc4565b9150614e6482614dd7565b606082019050919050565b60006020820190508181036000830152614e8881614e4c565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614eeb603583613dc4565b9150614ef682614e8f565b604082019050919050565b60006020820190508181036000830152614f1a81614ede565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614f57601383613dc4565b9150614f6282614f21565b602082019050919050565b60006020820190508181036000830152614f8681614f4a565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000614fe9603683613dc4565b9150614ff482614f8d565b604082019050919050565b6000602082019050818103600083015261501881614fdc565b9050919050565b600061502a82613d43565b915061503583613d43565b925082821015615048576150476143a3565b5b828203905092915050565b60006060820190506150686000830186613fef565b6150756020830185613fef565b6150826040830184613fef565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006150e6602183613dc4565b91506150f18261508a565b604082019050919050565b60006020820190508181036000830152615115816150d9565b9050919050565b60008151905061512b81613ea6565b92915050565b60006020828403121561514757615146613d39565b5b60006151558482850161511c565b91505092915050565b6000819050919050565b600061518361517e6151798461515e565b613f75565b613d43565b9050919050565b61519381615168565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6151ce81613e94565b82525050565b60006151e083836151c5565b60208301905092915050565b6000602082019050919050565b600061520482615199565b61520e81856151a4565b9350615219836151b5565b8060005b8381101561524a57815161523188826151d4565b975061523c836151ec565b92505060018101905061521d565b5085935050505092915050565b600060a08201905061526c6000830188613fef565b615279602083018761518a565b818103604083015261528b81866151f9565b905061529a60608301856140d0565b6152a76080830184613fef565b9695505050505050565b600060c0820190506152c660008301896140d0565b6152d36020830188613fef565b6152e0604083018761518a565b6152ed606083018661518a565b6152fa60808301856140d0565b61530760a0830184613fef565b979650505050505050565b60008151905061532181613d4d565b92915050565b6000806000606084860312156153405761533f613d39565b5b600061534e86828701615312565b935050602061535f86828701615312565b925050604061537086828701615312565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212201e21af8ff2ed1f25ccbf64abc54255250c8e126fc5f39460a94330e1dec6749164736f6c634300080a0033

Deployed Bytecode

0x60806040526004361061026b5760003560e01c80637571336a11610144578063c18bc195116100b6578063dd62ed3e1161007a578063dd62ed3e1461094f578063e2f456051461098c578063e884f260146109b7578063f25f4b56146109e2578063f2fde38b14610a0d578063f8b45b0514610a3657610272565b8063c18bc19514610868578063c876d0b914610891578063c8c8ebe4146108bc578063d257b34f146108e7578063d85ba0631461092457610272565b80639a7a23d6116101085780639a7a23d614610734578063a457c2d71461075d578063a9059cbb1461079a578063b62496f5146107d7578063bbc0c74214610814578063c02466681461083f57610272565b80637571336a14610675578063892ba4081461069e5780638a8c523c146106c75780638da5cb5b146106de57806395d89b411461070957610272565b8063476343ee116101dd57806366718524116101a1578063667185241461057957806366ca9b83146105a25780636a486a8e146105cb57806370a08231146105f6578063715018a614610633578063751039fc1461064a57610272565b8063476343ee146104a657806349bd5a5e146104bd5780634a62bb65146104e85780634fbee193146105135780635e80148e1461055057610272565b80631694505e1161022f5780631694505e1461038257806318160ddd146103ad578063203e727e146103d857806323b872dd14610401578063313ce5671461043e578063395093511461046957610272565b806302dbd8f81461027757806306fdde03146102a0578063095ea7b3146102cb5780630f3a325f1461030857806310d5de531461034557610272565b3661027257005b600080fd5b34801561028357600080fd5b5061029e60048036038101906102999190613d79565b610a61565b005b3480156102ac57600080fd5b506102b5610b66565b6040516102c29190613e52565b60405180910390f35b3480156102d757600080fd5b506102f260048036038101906102ed9190613ed2565b610bf8565b6040516102ff9190613f2d565b60405180910390f35b34801561031457600080fd5b5061032f600480360381019061032a9190613f48565b610c16565b60405161033c9190613f2d565b60405180910390f35b34801561035157600080fd5b5061036c60048036038101906103679190613f48565b610c6c565b6040516103799190613f2d565b60405180910390f35b34801561038e57600080fd5b50610397610c8c565b6040516103a49190613fd4565b60405180910390f35b3480156103b957600080fd5b506103c2610cb0565b6040516103cf9190613ffe565b60405180910390f35b3480156103e457600080fd5b506103ff60048036038101906103fa9190614019565b610cba565b005b34801561040d57600080fd5b5061042860048036038101906104239190614046565b610ddc565b6040516104359190613f2d565b60405180910390f35b34801561044a57600080fd5b50610453610eb5565b60405161046091906140b5565b60405180910390f35b34801561047557600080fd5b50610490600480360381019061048b9190613ed2565b610ebe565b60405161049d9190613f2d565b60405180910390f35b3480156104b257600080fd5b506104bb610f71565b005b3480156104c957600080fd5b506104d2610fdc565b6040516104df91906140df565b60405180910390f35b3480156104f457600080fd5b506104fd611000565b60405161050a9190613f2d565b60405180910390f35b34801561051f57600080fd5b5061053a60048036038101906105359190613f48565b611013565b6040516105479190613f2d565b60405180910390f35b34801561055c57600080fd5b5061057760048036038101906105729190614242565b611069565b005b34801561058557600080fd5b506105a0600480360381019061059b9190613f48565b611277565b005b3480156105ae57600080fd5b506105c960048036038101906105c49190613d79565b6113ce565b005b3480156105d757600080fd5b506105e06114d3565b6040516105ed9190613ffe565b60405180910390f35b34801561060257600080fd5b5061061d60048036038101906106189190613f48565b6114d9565b60405161062a9190613ffe565b60405180910390f35b34801561063f57600080fd5b50610648611521565b005b34801561065657600080fd5b5061065f611679565b60405161066c9190613f2d565b60405180910390f35b34801561068157600080fd5b5061069c600480360381019061069791906142b7565b611734565b005b3480156106aa57600080fd5b506106c560048036038101906106c09190614242565b611826565b005b3480156106d357600080fd5b506106dc611952565b005b3480156106ea57600080fd5b506106f3611a0d565b60405161070091906140df565b60405180910390f35b34801561071557600080fd5b5061071e611a37565b60405161072b9190613e52565b60405180910390f35b34801561074057600080fd5b5061075b600480360381019061075691906142b7565b611ac9565b005b34801561076957600080fd5b50610784600480360381019061077f9190613ed2565b611bfd565b6040516107919190613f2d565b60405180910390f35b3480156107a657600080fd5b506107c160048036038101906107bc9190613ed2565b611cca565b6040516107ce9190613f2d565b60405180910390f35b3480156107e357600080fd5b506107fe60048036038101906107f99190613f48565b611ce8565b60405161080b9190613f2d565b60405180910390f35b34801561082057600080fd5b50610829611d08565b6040516108369190613f2d565b60405180910390f35b34801561084b57600080fd5b50610866600480360381019061086191906142b7565b611d1b565b005b34801561087457600080fd5b5061088f600480360381019061088a9190614019565b611e5b565b005b34801561089d57600080fd5b506108a6611f7d565b6040516108b39190613f2d565b60405180910390f35b3480156108c857600080fd5b506108d1611f90565b6040516108de9190613ffe565b60405180910390f35b3480156108f357600080fd5b5061090e60048036038101906109099190614019565b611f96565b60405161091b9190613f2d565b60405180910390f35b34801561093057600080fd5b50610939612106565b6040516109469190613ffe565b60405180910390f35b34801561095b57600080fd5b50610976600480360381019061097191906142f7565b61210c565b6040516109839190613ffe565b60405180910390f35b34801561099857600080fd5b506109a1612193565b6040516109ae9190613ffe565b60405180910390f35b3480156109c357600080fd5b506109cc612199565b6040516109d99190613f2d565b60405180910390f35b3480156109ee57600080fd5b506109f7612254565b604051610a0491906140df565b60405180910390f35b348015610a1957600080fd5b50610a346004803603810190610a2f9190613f48565b61227a565b005b348015610a4257600080fd5b50610a4b612441565b604051610a589190613ffe565b60405180910390f35b610a696124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610af8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aef90614383565b60405180910390fd5b8160148190555080601581905550601554601454610b1691906143d2565b601381905550601e6013541115610b62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5990614474565b60405180910390fd5b5050565b606060038054610b75906144c3565b80601f0160208091040260200160405190810160405280929190818152602001828054610ba1906144c3565b8015610bee5780601f10610bc357610100808354040283529160200191610bee565b820191906000526020600020905b815481529060010190602001808311610bd157829003601f168201915b5050505050905090565b6000610c0c610c056124a5565b84846124ad565b6001905092915050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60196020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b610cc26124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4890614383565b60405180910390fd5b633b9aca006103e86001610d63610cb0565b610d6d91906144f5565b610d77919061457e565b610d81919061457e565b811015610dc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dba90614621565b60405180910390fd5b633b9aca0081610dd391906144f5565b600a8190555050565b6000610de9848484612678565b610eaa84610df56124a5565b610ea5856040518060600160405280602881526020016153a160289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610e5b6124a5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133849092919063ffffffff16565b6124ad565b600190509392505050565b60006009905090565b6000610f67610ecb6124a5565b84610f628560016000610edc6124a5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461244790919063ffffffff16565b6124ad565b6001905092915050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610fd9573d6000803e3d6000fd5b50565b7f000000000000000000000000cfc2ed820e27826a7ee02011c04d1c4509ca5ea881565b600d60009054906101000a900460ff1681565b6000601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6110716124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611100576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f790614383565b60405180910390fd5b60005b8151811015611273577f000000000000000000000000cfc2ed820e27826a7ee02011c04d1c4509ca5ea873ffffffffffffffffffffffffffffffffffffffff1682828151811061115657611155614641565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff16141580156111e857507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168282815181106111c7576111c6614641565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614155b156112605760016006600084848151811061120657611205614641565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b808061126b90614670565b915050611103565b5050565b61127f6124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461130e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130590614383565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f5deb5ef622431f0df5a39b72dd556892f68ba42aa0f3aaf0800e166ce866492860405160405180910390a380600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6113d66124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611465576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145c90614383565b60405180910390fd5b816011819055508060128190555060125460115461148391906143d2565b601081905550600560105411156114cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c690614705565b60405180910390fd5b5050565b60135481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6115296124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115af90614383565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006116836124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611712576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170990614383565b60405180910390fd5b6000600d60006101000a81548160ff0219169083151502179055506001905090565b61173c6124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c290614383565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61182e6124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b490614383565b60405180910390fd5b60005b815181101561194e576000600660008484815181106118e2576118e1614641565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061194690614670565b9150506118c0565b5050565b61195a6124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e090614383565b60405180910390fd5b6001600d60016101000a81548160ff02191690831515021790555042600881905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054611a46906144c3565b80601f0160208091040260200160405190810160405280929190818152602001828054611a72906144c3565b8015611abf5780601f10611a9457610100808354040283529160200191611abf565b820191906000526020600020905b815481529060010190602001808311611aa257829003601f168201915b5050505050905090565b611ad16124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5790614383565b60405180910390fd5b7f000000000000000000000000cfc2ed820e27826a7ee02011c04d1c4509ca5ea873ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611bef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be690614797565b60405180910390fd5b611bf982826133e8565b5050565b6000611cc0611c0a6124a5565b84611cbb856040518060600160405280602581526020016153c96025913960016000611c346124a5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133849092919063ffffffff16565b6124ad565b6001905092915050565b6000611cde611cd76124a5565b8484612678565b6001905092915050565b601a6020528060005260406000206000915054906101000a900460ff1681565b600d60019054906101000a900460ff1681565b611d236124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611db2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da990614383565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611e4f9190613f2d565b60405180910390a25050565b611e636124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ef2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee990614383565b60405180910390fd5b633b9aca006103e86005611f04610cb0565b611f0e91906144f5565b611f18919061457e565b611f22919061457e565b811015611f64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5b90614829565b60405180910390fd5b633b9aca0081611f7491906144f5565b600c8190555050565b600f60009054906101000a900460ff1681565b600a5481565b6000611fa06124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461202f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202690614383565b60405180910390fd5b620186a0600161203d610cb0565b61204791906144f5565b612051919061457e565b821015612093576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208a906148bb565b60405180910390fd5b6103e860056120a0610cb0565b6120aa91906144f5565b6120b4919061457e565b8211156120f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ed9061494d565b60405180910390fd5b81600b8190555060019050919050565b60105481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600b5481565b60006121a36124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612232576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222990614383565b60405180910390fd5b6000600f60006101000a81548160ff0219169083151502179055506001905090565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6122826124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612311576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230890614383565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612381576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612378906149df565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600c5481565b600080828461245691906143d2565b90508381101561249b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249290614a4b565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561251d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251490614add565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561258d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258490614b6f565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161266b9190613ffe565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156126e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126df90614c01565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612758576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274f90614c93565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156127e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127dc90614d4b565b60405180910390fd5b60008114156127ff576127fa83836000613489565b61337f565b600854421415612862576001600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b600d60009054906101000a900460ff1615612f255761287f611a0d565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156128ed57506128bd611a0d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129265750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612960575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129795750600760009054906101000a900460ff16155b15612f2457600d60019054906101000a900460ff16612a7357601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612a335750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612a72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6990614db7565b60405180910390fd5b5b600f60009054906101000a900460ff1615612c3b57612a90611a0d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612b1757507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b6f57507f000000000000000000000000cfc2ed820e27826a7ee02011c04d1c4509ca5ea873ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612c3a5743600e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612bf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bec90614e6f565b60405180910390fd5b43600e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612cde5750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d8557600a54811115612d28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1f90614f01565b60405180910390fd5b600c54612d34836114d9565b82612d3f91906143d2565b1115612d80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7790614f6d565b60405180910390fd5b612f23565b601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e285750601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e7757600a54811115612e72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e6990614fff565b60405180910390fd5b612f22565b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612f2157600c54612ed4836114d9565b82612edf91906143d2565b1115612f20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f1790614f6d565b60405180910390fd5b5b5b5b5b5b6000612f30306114d9565b90506000600b548210159050808015612f565750600760009054906101000a900460ff16155b8015612fac5750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156130025750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156130585750601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561309c576001600760006101000a81548160ff02191690831515021790555061308061371e565b6000600760006101000a81548160ff0219169083151502179055505b6000600760009054906101000a900460ff16159050601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806131525750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561315c57600090505b6000811561336f57601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156131bf57506000601354115b15613259576131ec60646131de6013548861389a90919063ffffffff16565b61391590919063ffffffff16565b9050601354601554826131ff91906144f5565b613209919061457e565b6017600082825461321a91906143d2565b925050819055506013546014548261323291906144f5565b61323c919061457e565b6016600082825461324d91906143d2565b9250508190555061334b565b601a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156132b457506000601054115b1561334a576132e160646132d36010548861389a90919063ffffffff16565b61391590919063ffffffff16565b9050601054601254826132f491906144f5565b6132fe919061457e565b6017600082825461330f91906143d2565b925050819055506010546011548261332791906144f5565b613331919061457e565b6016600082825461334291906143d2565b925050819055505b5b60008111156133605761335f873083613489565b5b808561336c919061501f565b94505b61337a878787613489565b505050505b505050565b60008383111582906133cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133c39190613e52565b60405180910390fd5b50600083856133db919061501f565b9050809150509392505050565b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156134f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134f090614c01565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613569576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161356090614c93565b60405180910390fd5b61357483838361395f565b6135df8160405180606001604052806026815260200161537b602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133849092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613672816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461244790919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516137119190613ffe565b60405180910390a3505050565b6000613729306114d9565b9050600060165460175461373d91906143d2565b9050600082148061374e5750600081145b1561375a575050613898565b6014600b5461376991906144f5565b821115613782576014600b5461377f91906144f5565b91505b60006002826017548561379591906144f5565b61379f919061457e565b6137a9919061457e565b905060006137c0828561396490919063ffffffff16565b905060004790506137d0826139ae565b60006137e5824761396490919063ffffffff16565b90506000613810866138026016548561389a90919063ffffffff16565b61391590919063ffffffff16565b905060008183613820919061501f565b9050600060178190555060006016819055506000861180156138425750600081115b1561388f576138518682613beb565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561858260175460405161388693929190615053565b60405180910390a15b50505050505050505b565b6000808314156138ad576000905061390f565b600082846138bb91906144f5565b90508284826138ca919061457e565b1461390a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613901906150fc565b60405180910390fd5b809150505b92915050565b600061395783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613ccc565b905092915050565b505050565b60006139a683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613384565b905092915050565b6000600267ffffffffffffffff8111156139cb576139ca6140ff565b5b6040519080825280602002602001820160405280156139f95781602001602082028036833780820191505090505b5090503081600081518110613a1157613a10614641565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613ab6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ada9190615131565b81600181518110613aee57613aed614641565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613b53307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846124ad565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613bb5959493929190615257565b600060405180830381600087803b158015613bcf57600080fd5b505af1158015613be3573d6000803e3d6000fd5b505050505050565b613c16307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846124ad565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613c60611a0d565b426040518863ffffffff1660e01b8152600401613c82969594939291906152b1565b60606040518083038185885af1158015613ca0573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613cc59190615327565b5050505050565b60008083118290613d13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d0a9190613e52565b60405180910390fd5b5060008385613d22919061457e565b9050809150509392505050565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b613d5681613d43565b8114613d6157600080fd5b50565b600081359050613d7381613d4d565b92915050565b60008060408385031215613d9057613d8f613d39565b5b6000613d9e85828601613d64565b9250506020613daf85828601613d64565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613df3578082015181840152602081019050613dd8565b83811115613e02576000848401525b50505050565b6000601f19601f8301169050919050565b6000613e2482613db9565b613e2e8185613dc4565b9350613e3e818560208601613dd5565b613e4781613e08565b840191505092915050565b60006020820190508181036000830152613e6c8184613e19565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613e9f82613e74565b9050919050565b613eaf81613e94565b8114613eba57600080fd5b50565b600081359050613ecc81613ea6565b92915050565b60008060408385031215613ee957613ee8613d39565b5b6000613ef785828601613ebd565b9250506020613f0885828601613d64565b9150509250929050565b60008115159050919050565b613f2781613f12565b82525050565b6000602082019050613f426000830184613f1e565b92915050565b600060208284031215613f5e57613f5d613d39565b5b6000613f6c84828501613ebd565b91505092915050565b6000819050919050565b6000613f9a613f95613f9084613e74565b613f75565b613e74565b9050919050565b6000613fac82613f7f565b9050919050565b6000613fbe82613fa1565b9050919050565b613fce81613fb3565b82525050565b6000602082019050613fe96000830184613fc5565b92915050565b613ff881613d43565b82525050565b60006020820190506140136000830184613fef565b92915050565b60006020828403121561402f5761402e613d39565b5b600061403d84828501613d64565b91505092915050565b60008060006060848603121561405f5761405e613d39565b5b600061406d86828701613ebd565b935050602061407e86828701613ebd565b925050604061408f86828701613d64565b9150509250925092565b600060ff82169050919050565b6140af81614099565b82525050565b60006020820190506140ca60008301846140a6565b92915050565b6140d981613e94565b82525050565b60006020820190506140f460008301846140d0565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61413782613e08565b810181811067ffffffffffffffff82111715614156576141556140ff565b5b80604052505050565b6000614169613d2f565b9050614175828261412e565b919050565b600067ffffffffffffffff821115614195576141946140ff565b5b602082029050602081019050919050565b600080fd5b60006141be6141b98461417a565b61415f565b905080838252602082019050602084028301858111156141e1576141e06141a6565b5b835b8181101561420a57806141f68882613ebd565b8452602084019350506020810190506141e3565b5050509392505050565b600082601f830112614229576142286140fa565b5b81356142398482602086016141ab565b91505092915050565b60006020828403121561425857614257613d39565b5b600082013567ffffffffffffffff81111561427657614275613d3e565b5b61428284828501614214565b91505092915050565b61429481613f12565b811461429f57600080fd5b50565b6000813590506142b18161428b565b92915050565b600080604083850312156142ce576142cd613d39565b5b60006142dc85828601613ebd565b92505060206142ed858286016142a2565b9150509250929050565b6000806040838503121561430e5761430d613d39565b5b600061431c85828601613ebd565b925050602061432d85828601613ebd565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061436d602083613dc4565b915061437882614337565b602082019050919050565b6000602082019050818103600083015261439c81614360565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006143dd82613d43565b91506143e883613d43565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561441d5761441c6143a3565b5b828201905092915050565b7f4d757374206b656570206665657320617420333025206f72206c657373000000600082015250565b600061445e601d83613dc4565b915061446982614428565b602082019050919050565b6000602082019050818103600083015261448d81614451565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806144db57607f821691505b602082108114156144ef576144ee614494565b5b50919050565b600061450082613d43565b915061450b83613d43565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614544576145436143a3565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061458982613d43565b915061459483613d43565b9250826145a4576145a361454f565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b600061460b602f83613dc4565b9150614616826145af565b604082019050919050565b6000602082019050818103600083015261463a816145fe565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061467b82613d43565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156146ae576146ad6143a3565b5b600182019050919050565b7f4d757374206b6565702066656573206174203525206f72206c65737300000000600082015250565b60006146ef601c83613dc4565b91506146fa826146b9565b602082019050919050565b6000602082019050818103600083015261471e816146e2565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614781603983613dc4565b915061478c82614725565b604082019050919050565b600060208201905081810360008301526147b081614774565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614813602483613dc4565b915061481e826147b7565b604082019050919050565b6000602082019050818103600083015261484281614806565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006148a5603583613dc4565b91506148b082614849565b604082019050919050565b600060208201905081810360008301526148d481614898565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614937603483613dc4565b9150614942826148db565b604082019050919050565b600060208201905081810360008301526149668161492a565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006149c9602683613dc4565b91506149d48261496d565b604082019050919050565b600060208201905081810360008301526149f8816149bc565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614a35601b83613dc4565b9150614a40826149ff565b602082019050919050565b60006020820190508181036000830152614a6481614a28565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614ac7602483613dc4565b9150614ad282614a6b565b604082019050919050565b60006020820190508181036000830152614af681614aba565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614b59602283613dc4565b9150614b6482614afd565b604082019050919050565b60006020820190508181036000830152614b8881614b4c565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614beb602583613dc4565b9150614bf682614b8f565b604082019050919050565b60006020820190508181036000830152614c1a81614bde565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614c7d602383613dc4565b9150614c8882614c21565b604082019050919050565b60006020820190508181036000830152614cac81614c70565b9050919050565b7f596f7572206164647265737320686173206265656e206d61726b65642061732060008201527f6120736e697065722c20796f752061726520756e61626c6520746f207472616e60208201527f73666572206f7220737761702e00000000000000000000000000000000000000604082015250565b6000614d35604d83613dc4565b9150614d4082614cb3565b606082019050919050565b60006020820190508181036000830152614d6481614d28565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614da1601683613dc4565b9150614dac82614d6b565b602082019050919050565b60006020820190508181036000830152614dd081614d94565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000614e59604983613dc4565b9150614e6482614dd7565b606082019050919050565b60006020820190508181036000830152614e8881614e4c565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614eeb603583613dc4565b9150614ef682614e8f565b604082019050919050565b60006020820190508181036000830152614f1a81614ede565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614f57601383613dc4565b9150614f6282614f21565b602082019050919050565b60006020820190508181036000830152614f8681614f4a565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000614fe9603683613dc4565b9150614ff482614f8d565b604082019050919050565b6000602082019050818103600083015261501881614fdc565b9050919050565b600061502a82613d43565b915061503583613d43565b925082821015615048576150476143a3565b5b828203905092915050565b60006060820190506150686000830186613fef565b6150756020830185613fef565b6150826040830184613fef565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006150e6602183613dc4565b91506150f18261508a565b604082019050919050565b60006020820190508181036000830152615115816150d9565b9050919050565b60008151905061512b81613ea6565b92915050565b60006020828403121561514757615146613d39565b5b60006151558482850161511c565b91505092915050565b6000819050919050565b600061518361517e6151798461515e565b613f75565b613d43565b9050919050565b61519381615168565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6151ce81613e94565b82525050565b60006151e083836151c5565b60208301905092915050565b6000602082019050919050565b600061520482615199565b61520e81856151a4565b9350615219836151b5565b8060005b8381101561524a57815161523188826151d4565b975061523c836151ec565b92505060018101905061521d565b5085935050505092915050565b600060a08201905061526c6000830188613fef565b615279602083018761518a565b818103604083015261528b81866151f9565b905061529a60608301856140d0565b6152a76080830184613fef565b9695505050505050565b600060c0820190506152c660008301896140d0565b6152d36020830188613fef565b6152e0604083018761518a565b6152ed606083018661518a565b6152fa60808301856140d0565b61530760a0830184613fef565b979650505050505050565b60008151905061532181613d4d565b92915050565b6000806000606084860312156153405761533f613d39565b5b600061534e86828701615312565b935050602061535f86828701615312565b925050604061537086828701615312565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212201e21af8ff2ed1f25ccbf64abc54255250c8e126fc5f39460a94330e1dec6749164736f6c634300080a0033

Deployed Bytecode Sourcemap

17512:14326:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23325:293;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4931:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5844:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25072:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18698:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17590:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5251:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22414:230;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6021:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5151:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6384:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31696:102;;;;;;;;;;;;;:::i;:::-;;17648:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17970:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24433:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24570:294;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24268:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23029:284;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18386:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5367:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10886:148;;;;;;;;;;;;;:::i;:::-;;21624:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22873:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24876:184;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21445:123;;;;;;;;;;;;;:::i;:::-;;10672:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5039:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23816:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6610:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5502:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18920:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18010:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23626:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22652:209;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18226:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17847:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22020:382;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18274:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5685:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17889:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21810:135;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17810:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11042:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17929:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23325:293;10809:12;:10;:12::i;:::-;10799:22;;:6;;;;;;;;;;;:22;;;10791:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23431:6:::1;23417:11;:20;;;;23468:12;23448:17;:32;;;;23521:17;;23507:11;;:31;;;;:::i;:::-;23491:13;:47;;;;23574:2;23557:13;;:19;;23549:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;23325:293:::0;;:::o;4931:100::-;4985:13;5018:5;5011:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4931:100;:::o;5844:169::-;5927:4;5944:39;5953:12;:10;:12::i;:::-;5967:7;5976:6;5944:8;:39::i;:::-;6001:4;5994:11;;5844:169;;;;:::o;25072:100::-;25125:4;25149:9;:15;25159:4;25149:15;;;;;;;;;;;;;;;;;;;;;;;;;25142:22;;25072:100;;;:::o;18698:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;17590:51::-;;;:::o;5251:108::-;5312:7;5339:12;;5332:19;;5251:108;:::o;22414:230::-;10809:12;:10;:12::i;:::-;10799:22;;:6;;;;;;;;;;;:22;;;10791:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22535:3:::1;22527:4;22523:1;22507:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;22506:32;;;;:::i;:::-;22496:6;:42;;22488:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;22633:3;22624:6;:12;;;;:::i;:::-;22601:20;:35;;;;22414:230:::0;:::o;6021:355::-;6161:4;6178:36;6188:6;6196:9;6207:6;6178:9;:36::i;:::-;6225:121;6234:6;6242:12;:10;:12::i;:::-;6256:89;6294:6;6256:89;;;;;;;;;;;;;;;;;:11;:19;6268:6;6256:19;;;;;;;;;;;;;;;:33;6276:12;:10;:12::i;:::-;6256:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;6225:8;:121::i;:::-;6364:4;6357:11;;6021:355;;;;;:::o;5151:92::-;5209:5;5234:1;5227:8;;5151:92;:::o;6384:218::-;6472:4;6489:83;6498:12;:10;:12::i;:::-;6512:7;6521:50;6560:10;6521:11;:25;6533:12;:10;:12::i;:::-;6521:25;;;;;;;;;;;;;;;:34;6547:7;6521:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;6489:8;:83::i;:::-;6590:4;6583:11;;6384:218;;;;:::o;31696:102::-;31748:9;;;;;;;;;;;31740:27;;:50;31768:21;31740:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31696:102::o;17648:38::-;;;:::o;17970:33::-;;;;;;;;;;;;;:::o;24433:125::-;24498:4;24522:19;:28;24542:7;24522:28;;;;;;;;;;;;;;;;;;;;;;;;;24515:35;;24433:125;;;:::o;24570:294::-;10809:12;:10;:12::i;:::-;10799:22;;:6;;;;;;;;;;;:22;;;10791:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24652:6:::1;24647:210;24668:8;:15;24664:1;:19;24647:210;;;24724:13;24709:28;;:8;24718:1;24709:11;;;;;;;;:::i;:::-;;;;;;;;:28;;;;:71;;;;;24764:15;24741:39;;:8;24750:1;24741:11;;;;;;;;:::i;:::-;;;;;;;;:39;;;;24709:71;24705:141;;;24826:4;24801:9;:22;24811:8;24820:1;24811:11;;;;;;;;:::i;:::-;;;;;;;;24801:22;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;24705:141;24685:3;;;;;:::i;:::-;;;;24647:210;;;;24570:294:::0;:::o;24268:157::-;10809:12;:10;:12::i;:::-;10799:22;;:6;;;;;;;;;;;:22;;;10791:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24375:9:::1;;;;;;;;;;;24347:38;;24364:9;24347:38;;;;;;;;;;;;24408:9;24396;;:21;;;;;;;;;;;;;;;;;;24268:157:::0;:::o;23029:284::-;10809:12;:10;:12::i;:::-;10799:22;;:6;;;;;;;;;;;:22;;;10791:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23133:6:::1;23120:10;:19;;;;23169:12;23150:16;:31;;;;23220:16;;23207:10;;:29;;;;:::i;:::-;23192:12;:44;;;;23271:1;23255:12;;:17;;23247:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;23029:284:::0;;:::o;18386:28::-;;;;:::o;5367:127::-;5441:7;5468:9;:18;5478:7;5468:18;;;;;;;;;;;;;;;;5461:25;;5367:127;;;:::o;10886:148::-;10809:12;:10;:12::i;:::-;10799:22;;:6;;;;;;;;;;;:22;;;10791:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;10993:1:::1;10956:40;;10977:6;;;;;;;;;;;10956:40;;;;;;;;;;;;11024:1;11007:6;;:19;;;;;;;;;;;;;;;;;;10886:148::o:0;21624:121::-;21676:4;10809:12;:10;:12::i;:::-;10799:22;;:6;;;;;;;;;;;:22;;;10791:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21710:5:::1;21693:14;;:22;;;;;;;;;;;;;;;;;;21733:4;21726:11;;21624:121:::0;:::o;22873:144::-;10809:12;:10;:12::i;:::-;10799:22;;:6;;;;;;;;;;;:22;;;10791:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23005:4:::1;22963:31;:39;22995:6;22963:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;22873:144:::0;;:::o;24876:184::-;10809:12;:10;:12::i;:::-;10799:22;;:6;;;;;;;;;;;:22;;;10791:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24958:6:::1;24953:100;24974:8;:15;24970:1;:19;24953:100;;;25036:5;25011:9;:22;25021:8;25030:1;25021:11;;;;;;;;:::i;:::-;;;;;;;;25011:22;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;24991:3;;;;;:::i;:::-;;;;24953:100;;;;24876:184:::0;:::o;21445:123::-;10809:12;:10;:12::i;:::-;10799:22;;:6;;;;;;;;;;;:22;;;10791:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21516:4:::1;21500:13;;:20;;;;;;;;;;;;;;;;;;21545:15;21531:11;:29;;;;21445:123::o:0;10672:79::-;10710:7;10737:6;;;;;;;;;;;10730:13;;10672:79;:::o;5039:104::-;5095:13;5128:7;5121:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5039:104;:::o;23816:244::-;10809:12;:10;:12::i;:::-;10799:22;;:6;;;;;;;;;;;:22;;;10791:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23923:13:::1;23915:21;;:4;:21;;;;23907:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;24011:41;24040:4;24046:5;24011:28;:41::i;:::-;23816:244:::0;;:::o;6610:269::-;6703:4;6720:129;6729:12;:10;:12::i;:::-;6743:7;6752:96;6791:15;6752:96;;;;;;;;;;;;;;;;;:11;:25;6764:12;:10;:12::i;:::-;6752:25;;;;;;;;;;;;;;;:34;6778:7;6752:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;6720:8;:129::i;:::-;6867:4;6860:11;;6610:269;;;;:::o;5502:175::-;5588:4;5605:42;5615:12;:10;:12::i;:::-;5629:9;5640:6;5605:9;:42::i;:::-;5665:4;5658:11;;5502:175;;;;:::o;18920:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;18010:25::-;;;;;;;;;;;;;:::o;23626:182::-;10809:12;:10;:12::i;:::-;10799:22;;:6;;;;;;;;;;;:22;;;10791:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23742:8:::1;23711:19;:28;23731:7;23711:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;23782:7;23766:34;;;23791:8;23766:34;;;;;;:::i;:::-;;;;;;;;23626:182:::0;;:::o;22652:209::-;10809:12;:10;:12::i;:::-;10799:22;;:6;;;;;;;;;;;:22;;;10791:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22774:3:::1;22768:4;22764:1;22748:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;22747:30;;;;:::i;:::-;22737:6;:40;;22729:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;22850:3;22841:6;:12;;;;:::i;:::-;22829:9;:24;;;;22652:209:::0;:::o;18226:39::-;;;;;;;;;;;;;:::o;17847:35::-;;;;:::o;22020:382::-;22101:4;10809:12;:10;:12::i;:::-;10799:22;;:6;;;;;;;;;;;:22;;;10791:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22158:6:::1;22154:1;22138:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:26;;;;:::i;:::-;22125:9;:39;;22117:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;22273:4;22269:1;22253:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;22240:9;:37;;22232:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;22365:9;22344:18;:30;;;;22391:4;22384:11;;22020:382:::0;;;:::o;18274:27::-;;;;:::o;5685:151::-;5774:7;5801:11;:18;5813:5;5801:18;;;;;;;;;;;;;;;:27;5820:7;5801:27;;;;;;;;;;;;;;;;5794:34;;5685:151;;;;:::o;17889:33::-;;;;:::o;21810:135::-;21870:4;10809:12;:10;:12::i;:::-;10799:22;;:6;;;;;;;;;;;:22;;;10791:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21910:5:::1;21887:20;;:28;;;;;;;;;;;;;;;;;;21933:4;21926:11;;21810:135:::0;:::o;17810:24::-;;;;;;;;;;;;;:::o;11042:244::-;10809:12;:10;:12::i;:::-;10799:22;;:6;;;;;;;;;;;:22;;;10791:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;11151:1:::1;11131:22;;:8;:22;;;;11123:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;11241:8;11212:38;;11233:6;;;;;;;;;;;11212:38;;;;;;;;;;;;11270:8;11261:6;;:17;;;;;;;;;;;;;;;;;;11042:244:::0;:::o;17929:24::-;;;;:::o;8824:181::-;8882:7;8902:9;8918:1;8914;:5;;;;:::i;:::-;8902:17;;8943:1;8938;:6;;8930:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;8996:1;8989:8;;;8824:181;;;;:::o;100:98::-;153:7;180:10;173:17;;100:98;:::o;8280:380::-;8433:1;8416:19;;:5;:19;;;;8408:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8514:1;8495:21;;:7;:21;;;;8487:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8598:6;8568:11;:18;8580:5;8568:18;;;;;;;;;;;;;;;:27;8587:7;8568:27;;;;;;;;;;;;;;;:36;;;;8636:7;8620:32;;8629:5;8620:32;;;8645:6;8620:32;;;;;;:::i;:::-;;;;;;;;8280:380;;;:::o;25180:4107::-;25328:1;25312:18;;:4;:18;;;;25304:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25405:1;25391:16;;:2;:16;;;;25383:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;25467:9;:15;25477:4;25467:15;;;;;;;;;;;;;;;;;;;;;;;;;25466:16;25458:106;;;;;;;;;;;;:::i;:::-;;;;;;;;;25600:1;25590:6;:11;25586:93;;;25618:28;25634:4;25640:2;25644:1;25618:15;:28::i;:::-;25661:7;;25586:93;25722:11;;25703:15;:30;25699:56;;;25751:4;25735:9;:13;25745:2;25735:13;;;;;;;;;;;;;;;;:20;;;;;;;;;;;;;;;;;;25699:56;25780:14;;;;;;;;;;;25776:1838;;;25841:7;:5;:7::i;:::-;25833:15;;:4;:15;;;;:49;;;;;25875:7;:5;:7::i;:::-;25869:13;;:2;:13;;;;25833:49;:86;;;;;25917:1;25903:16;;:2;:16;;;;25833:86;:128;;;;;25954:6;25940:21;;:2;:21;;;;25833:128;:159;;;;;25983:9;;;;;;;;;;;25982:10;25833:159;25811:1792;;;26032:13;;;;;;;;;;;26027:150;;26078:19;:25;26098:4;26078:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;26107:19;:23;26127:2;26107:23;;;;;;;;;;;;;;;;;;;;;;;;;26078:52;26070:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;26027:150;26335:20;;;;;;;;;;;26331:423;;;26389:7;:5;:7::i;:::-;26383:13;;:2;:13;;;;:47;;;;;26414:15;26400:30;;:2;:30;;;;26383:47;:79;;;;;26448:13;26434:28;;:2;:28;;;;26383:79;26379:356;;;26540:12;26498:28;:39;26527:9;26498:39;;;;;;;;;;;;;;;;:54;26490:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;26699:12;26657:28;:39;26686:9;26657:39;;;;;;;;;;;;;;;:54;;;;26379:356;26331:423;26824:25;:31;26850:4;26824:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;26860:31;:35;26892:2;26860:35;;;;;;;;;;;;;;;;;;;;;;;;;26859:36;26824:71;26820:768;;;26938:20;;26928:6;:30;;26920:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;27073:9;;27056:13;27066:2;27056:9;:13::i;:::-;27047:6;:22;;;;:::i;:::-;:35;;27039:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26820:768;;;27201:25;:29;27227:2;27201:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;27235:31;:37;27267:4;27235:37;;;;;;;;;;;;;;;;;;;;;;;;;27234:38;27201:71;27197:391;;;27315:20;;27305:6;:30;;27297:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;27197:391;;;27442:31;:35;27474:2;27442:35;;;;;;;;;;;;;;;;;;;;;;;;;27437:151;;27535:9;;27518:13;27528:2;27518:9;:13::i;:::-;27509:6;:22;;;;:::i;:::-;:35;;27501:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27437:151;27197:391;26820:768;25811:1792;25776:1838;27628:28;27659:24;27677:4;27659:9;:24::i;:::-;27628:55;;27694:12;27733:18;;27709:20;:42;;27694:57;;27780:7;:34;;;;;27805:9;;;;;;;;;;;27804:10;27780:34;:83;;;;;27832:25;:31;27858:4;27832:31;;;;;;;;;;;;;;;;;;;;;;;;;27831:32;27780:83;:126;;;;;27881:19;:25;27901:4;27881:25;;;;;;;;;;;;;;;;;;;;;;;;;27880:26;27780:126;:167;;;;;27924:19;:23;27944:2;27924:23;;;;;;;;;;;;;;;;;;;;;;;;;27923:24;27780:167;27762:297;;;27986:4;27974:9;;:16;;;;;;;;;;;;;;;;;;28005:10;:8;:10::i;:::-;28042:5;28030:9;;:17;;;;;;;;;;;;;;;;;;27762:297;28071:12;28087:9;;;;;;;;;;;28086:10;28071:25;;28198:19;:25;28218:4;28198:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;28227:19;:23;28247:2;28227:23;;;;;;;;;;;;;;;;;;;;;;;;;28198:52;28194:100;;;28277:5;28267:15;;28194:100;28314:12;28419:7;28415:819;;;28471:25;:29;28497:2;28471:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;28520:1;28504:13;;:17;28471:50;28467:600;;;28549:34;28579:3;28549:25;28560:13;;28549:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;28542:41;;28652:13;;28632:17;;28625:4;:24;;;;:::i;:::-;:40;;;;:::i;:::-;28602:19;;:63;;;;;;;:::i;:::-;;;;;;;;28722:13;;28708:11;;28701:4;:18;;;;:::i;:::-;:34;;;;:::i;:::-;28684:13;;:51;;;;;;;:::i;:::-;;;;;;;;28467:600;;;28797:25;:31;28823:4;28797:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;28847:1;28832:12;;:16;28797:51;28793:274;;;28873:33;28902:3;28873:24;28884:12;;28873:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;28866:40;;28971:12;;28952:16;;28945:4;:23;;;;:::i;:::-;:38;;;;:::i;:::-;28922:19;;:61;;;;;;;:::i;:::-;;;;;;;;29039:12;;29026:10;;29019:4;:17;;;;:::i;:::-;:32;;;;:::i;:::-;29002:13;;:49;;;;;;;:::i;:::-;;;;;;;;28793:274;28467:600;29106:1;29099:4;:8;29095:91;;;29128:42;29144:4;29158;29165;29128:15;:42::i;:::-;29095:91;29218:4;29208:14;;;;;:::i;:::-;;;28415:819;29246:33;29262:4;29268:2;29272:6;29246:15;:33::i;:::-;25293:3994;;;;25180:4107;;;;:::o;9157:192::-;9243:7;9276:1;9271;:6;;9279:12;9263:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;9303:9;9319:1;9315;:5;;;;:::i;:::-;9303:17;;9340:1;9333:8;;;9157:192;;;;;:::o;24068:188::-;24185:5;24151:25;:31;24177:4;24151:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;24242:5;24208:40;;24236:4;24208:40;;;;;;;;;;;;24068:188;;:::o;6887:573::-;7045:1;7027:20;;:6;:20;;;;7019:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;7129:1;7108:23;;:9;:23;;;;7100:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;7184:47;7205:6;7213:9;7224:6;7184:20;:47::i;:::-;7264:71;7286:6;7264:71;;;;;;;;;;;;;;;;;:9;:17;7274:6;7264:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;7244:9;:17;7254:6;7244:17;;;;;;;;;;;;;;;:91;;;;7369:32;7394:6;7369:9;:20;7379:9;7369:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;7346:9;:20;7356:9;7346:20;;;;;;;;;;;;;;;:55;;;;7434:9;7417:35;;7426:6;7417:35;;;7445:6;7417:35;;;;;;:::i;:::-;;;;;;;;6887:573;;;:::o;30419:1269::-;30458:23;30484:24;30502:4;30484:9;:24::i;:::-;30458:50;;30519:25;30569:13;;30547:19;;:35;;;;:::i;:::-;30519:63;;30626:1;30607:15;:20;:46;;;;30652:1;30631:17;:22;30607:46;30603:59;;;30655:7;;;;30603:59;30715:2;30694:18;;:23;;;;:::i;:::-;30676:15;:41;30672:113;;;30771:2;30750:18;;:23;;;;:::i;:::-;30732:41;;30672:113;30854:23;30940:1;30920:17;30898:19;;30880:15;:37;;;;:::i;:::-;:57;;;;:::i;:::-;:61;;;;:::i;:::-;30854:87;;30952:26;30981:36;31001:15;30981;:19;;:36;;;;:::i;:::-;30952:65;;31038:25;31066:21;31038:49;;31100:37;31118:18;31100:17;:37::i;:::-;31159:18;31180:44;31206:17;31180:21;:25;;:44;;;;:::i;:::-;31159:65;;31235:17;31255:52;31289:17;31255:29;31270:13;;31255:10;:14;;:29;;;;:::i;:::-;:33;;:52;;;;:::i;:::-;31235:72;;31318:23;31357:9;31344:10;:22;;;;:::i;:::-;31318:48;;31409:1;31387:19;:23;;;;31437:1;31421:13;:17;;;;31489:1;31471:15;:19;:42;;;;;31512:1;31494:15;:19;31471:42;31467:214;;;31530:47;31544:15;31561;31530:13;:47::i;:::-;31597:72;31612:18;31632:15;31649:19;;31597:72;;;;;;;;:::i;:::-;;;;;;;;31467:214;30447:1241;;;;;;;;30419:1269;:::o;9357:250::-;9415:7;9444:1;9439;:6;9435:47;;;9469:1;9462:8;;;;9435:47;9494:9;9510:1;9506;:5;;;;:::i;:::-;9494:17;;9539:1;9534;9530;:5;;;;:::i;:::-;:10;9522:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;9598:1;9591:8;;;9357:250;;;;;:::o;9615:132::-;9673:7;9700:39;9704:1;9707;9700:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;9693:46;;9615:132;;;;:::o;8668:125::-;;;;:::o;9013:136::-;9071:7;9098:43;9102:1;9105;9098:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;9091:50;;9013:136;;;;:::o;29295:590::-;29422:21;29460:1;29446:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29422:40;;29491:4;29473;29478:1;29473:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;29517:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29507:4;29512:1;29507:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;29552:62;29569:4;29584:15;29602:11;29552:8;:62::i;:::-;29653:15;:66;;;29734:11;29760:1;29804:4;29831;29851:15;29653:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29351:534;29295:590;:::o;29897:514::-;30046:62;30063:4;30078:15;30096:11;30046:8;:62::i;:::-;30151:15;:31;;;30190:9;30223:4;30243:11;30269:1;30312;30355:7;:5;:7::i;:::-;30377:15;30151:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;29897:514;;:::o;9755:278::-;9841:7;9873:1;9869;:5;9876:12;9861:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;9900:9;9916:1;9912;:5;;;;:::i;:::-;9900:17;;10024:1;10017:8;;;9755:278;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:474::-;758:6;766;815:2;803:9;794:7;790:23;786:32;783:119;;;821:79;;:::i;:::-;783:119;941:1;966:53;1011:7;1002:6;991:9;987:22;966:53;:::i;:::-;956:63;;912:117;1068:2;1094:53;1139:7;1130:6;1119:9;1115:22;1094:53;:::i;:::-;1084:63;;1039:118;690:474;;;;;:::o;1170:99::-;1222:6;1256:5;1250:12;1240:22;;1170:99;;;:::o;1275:169::-;1359:11;1393:6;1388:3;1381:19;1433:4;1428:3;1424:14;1409:29;;1275:169;;;;:::o;1450:307::-;1518:1;1528:113;1542:6;1539:1;1536:13;1528:113;;;1627:1;1622:3;1618:11;1612:18;1608:1;1603:3;1599:11;1592:39;1564:2;1561:1;1557:10;1552:15;;1528:113;;;1659:6;1656:1;1653:13;1650:101;;;1739:1;1730:6;1725:3;1721:16;1714:27;1650:101;1499:258;1450:307;;;:::o;1763:102::-;1804:6;1855:2;1851:7;1846:2;1839:5;1835:14;1831:28;1821:38;;1763:102;;;:::o;1871:364::-;1959:3;1987:39;2020:5;1987:39;:::i;:::-;2042:71;2106:6;2101:3;2042:71;:::i;:::-;2035:78;;2122:52;2167:6;2162:3;2155:4;2148:5;2144:16;2122:52;:::i;:::-;2199:29;2221:6;2199:29;:::i;:::-;2194:3;2190:39;2183:46;;1963:272;1871:364;;;;:::o;2241:313::-;2354:4;2392:2;2381:9;2377:18;2369:26;;2441:9;2435:4;2431:20;2427:1;2416:9;2412:17;2405:47;2469:78;2542:4;2533:6;2469:78;:::i;:::-;2461:86;;2241:313;;;;:::o;2560:126::-;2597:7;2637:42;2630:5;2626:54;2615:65;;2560:126;;;:::o;2692:96::-;2729:7;2758:24;2776:5;2758:24;:::i;:::-;2747:35;;2692:96;;;:::o;2794:122::-;2867:24;2885:5;2867:24;:::i;:::-;2860:5;2857:35;2847:63;;2906:1;2903;2896:12;2847:63;2794:122;:::o;2922:139::-;2968:5;3006:6;2993:20;2984:29;;3022:33;3049:5;3022:33;:::i;:::-;2922:139;;;;:::o;3067:474::-;3135:6;3143;3192:2;3180:9;3171:7;3167:23;3163:32;3160:119;;;3198:79;;:::i;:::-;3160:119;3318:1;3343:53;3388:7;3379:6;3368:9;3364:22;3343:53;:::i;:::-;3333:63;;3289:117;3445:2;3471:53;3516:7;3507:6;3496:9;3492:22;3471:53;:::i;:::-;3461:63;;3416:118;3067:474;;;;;:::o;3547:90::-;3581:7;3624:5;3617:13;3610:21;3599:32;;3547:90;;;:::o;3643:109::-;3724:21;3739:5;3724:21;:::i;:::-;3719:3;3712:34;3643:109;;:::o;3758:210::-;3845:4;3883:2;3872:9;3868:18;3860:26;;3896:65;3958:1;3947:9;3943:17;3934:6;3896:65;:::i;:::-;3758:210;;;;:::o;3974:329::-;4033:6;4082:2;4070:9;4061:7;4057:23;4053:32;4050:119;;;4088:79;;:::i;:::-;4050:119;4208:1;4233:53;4278:7;4269:6;4258:9;4254:22;4233:53;:::i;:::-;4223:63;;4179:117;3974:329;;;;:::o;4309:60::-;4337:3;4358:5;4351:12;;4309:60;;;:::o;4375:142::-;4425:9;4458:53;4476:34;4485:24;4503:5;4485:24;:::i;:::-;4476:34;:::i;:::-;4458:53;:::i;:::-;4445:66;;4375:142;;;:::o;4523:126::-;4573:9;4606:37;4637:5;4606:37;:::i;:::-;4593:50;;4523:126;;;:::o;4655:153::-;4732:9;4765:37;4796:5;4765:37;:::i;:::-;4752:50;;4655:153;;;:::o;4814:185::-;4928:64;4986:5;4928:64;:::i;:::-;4923:3;4916:77;4814:185;;:::o;5005:276::-;5125:4;5163:2;5152:9;5148:18;5140:26;;5176:98;5271:1;5260:9;5256:17;5247:6;5176:98;:::i;:::-;5005:276;;;;:::o;5287:118::-;5374:24;5392:5;5374:24;:::i;:::-;5369:3;5362:37;5287:118;;:::o;5411:222::-;5504:4;5542:2;5531:9;5527:18;5519:26;;5555:71;5623:1;5612:9;5608:17;5599:6;5555:71;:::i;:::-;5411:222;;;;:::o;5639:329::-;5698:6;5747:2;5735:9;5726:7;5722:23;5718:32;5715:119;;;5753:79;;:::i;:::-;5715:119;5873:1;5898:53;5943:7;5934:6;5923:9;5919:22;5898:53;:::i;:::-;5888:63;;5844:117;5639:329;;;;:::o;5974:619::-;6051:6;6059;6067;6116:2;6104:9;6095:7;6091:23;6087:32;6084:119;;;6122:79;;:::i;:::-;6084:119;6242:1;6267:53;6312:7;6303:6;6292:9;6288:22;6267:53;:::i;:::-;6257:63;;6213:117;6369:2;6395:53;6440:7;6431:6;6420:9;6416:22;6395:53;:::i;:::-;6385:63;;6340:118;6497:2;6523:53;6568:7;6559:6;6548:9;6544:22;6523:53;:::i;:::-;6513:63;;6468:118;5974:619;;;;;:::o;6599:86::-;6634:7;6674:4;6667:5;6663:16;6652:27;;6599:86;;;:::o;6691:112::-;6774:22;6790:5;6774:22;:::i;:::-;6769:3;6762:35;6691:112;;:::o;6809:214::-;6898:4;6936:2;6925:9;6921:18;6913:26;;6949:67;7013:1;7002:9;6998:17;6989:6;6949:67;:::i;:::-;6809:214;;;;:::o;7029:118::-;7116:24;7134:5;7116:24;:::i;:::-;7111:3;7104:37;7029:118;;:::o;7153:222::-;7246:4;7284:2;7273:9;7269:18;7261:26;;7297:71;7365:1;7354:9;7350:17;7341:6;7297:71;:::i;:::-;7153:222;;;;:::o;7381:117::-;7490:1;7487;7480:12;7504:180;7552:77;7549:1;7542:88;7649:4;7646:1;7639:15;7673:4;7670:1;7663:15;7690:281;7773:27;7795:4;7773:27;:::i;:::-;7765:6;7761:40;7903:6;7891:10;7888:22;7867:18;7855:10;7852:34;7849:62;7846:88;;;7914:18;;:::i;:::-;7846:88;7954:10;7950:2;7943:22;7733:238;7690:281;;:::o;7977:129::-;8011:6;8038:20;;:::i;:::-;8028:30;;8067:33;8095:4;8087:6;8067:33;:::i;:::-;7977:129;;;:::o;8112:311::-;8189:4;8279:18;8271:6;8268:30;8265:56;;;8301:18;;:::i;:::-;8265:56;8351:4;8343:6;8339:17;8331:25;;8411:4;8405;8401:15;8393:23;;8112:311;;;:::o;8429:117::-;8538:1;8535;8528:12;8569:710;8665:5;8690:81;8706:64;8763:6;8706:64;:::i;:::-;8690:81;:::i;:::-;8681:90;;8791:5;8820:6;8813:5;8806:21;8854:4;8847:5;8843:16;8836:23;;8907:4;8899:6;8895:17;8887:6;8883:30;8936:3;8928:6;8925:15;8922:122;;;8955:79;;:::i;:::-;8922:122;9070:6;9053:220;9087:6;9082:3;9079:15;9053:220;;;9162:3;9191:37;9224:3;9212:10;9191:37;:::i;:::-;9186:3;9179:50;9258:4;9253:3;9249:14;9242:21;;9129:144;9113:4;9108:3;9104:14;9097:21;;9053:220;;;9057:21;8671:608;;8569:710;;;;;:::o;9302:370::-;9373:5;9422:3;9415:4;9407:6;9403:17;9399:27;9389:122;;9430:79;;:::i;:::-;9389:122;9547:6;9534:20;9572:94;9662:3;9654:6;9647:4;9639:6;9635:17;9572:94;:::i;:::-;9563:103;;9379:293;9302:370;;;;:::o;9678:539::-;9762:6;9811:2;9799:9;9790:7;9786:23;9782:32;9779:119;;;9817:79;;:::i;:::-;9779:119;9965:1;9954:9;9950:17;9937:31;9995:18;9987:6;9984:30;9981:117;;;10017:79;;:::i;:::-;9981:117;10122:78;10192:7;10183:6;10172:9;10168:22;10122:78;:::i;:::-;10112:88;;9908:302;9678:539;;;;:::o;10223:116::-;10293:21;10308:5;10293:21;:::i;:::-;10286:5;10283:32;10273:60;;10329:1;10326;10319:12;10273:60;10223:116;:::o;10345:133::-;10388:5;10426:6;10413:20;10404:29;;10442:30;10466:5;10442:30;:::i;:::-;10345:133;;;;:::o;10484:468::-;10549:6;10557;10606:2;10594:9;10585:7;10581:23;10577:32;10574:119;;;10612:79;;:::i;:::-;10574:119;10732:1;10757:53;10802:7;10793:6;10782:9;10778:22;10757:53;:::i;:::-;10747:63;;10703:117;10859:2;10885:50;10927:7;10918:6;10907:9;10903:22;10885:50;:::i;:::-;10875:60;;10830:115;10484:468;;;;;:::o;10958:474::-;11026:6;11034;11083:2;11071:9;11062:7;11058:23;11054:32;11051:119;;;11089:79;;:::i;:::-;11051:119;11209:1;11234:53;11279:7;11270:6;11259:9;11255:22;11234:53;:::i;:::-;11224:63;;11180:117;11336:2;11362:53;11407:7;11398:6;11387:9;11383:22;11362:53;:::i;:::-;11352:63;;11307:118;10958:474;;;;;:::o;11438:182::-;11578:34;11574:1;11566:6;11562:14;11555:58;11438:182;:::o;11626:366::-;11768:3;11789:67;11853:2;11848:3;11789:67;:::i;:::-;11782:74;;11865:93;11954:3;11865:93;:::i;:::-;11983:2;11978:3;11974:12;11967:19;;11626:366;;;:::o;11998:419::-;12164:4;12202:2;12191:9;12187:18;12179:26;;12251:9;12245:4;12241:20;12237:1;12226:9;12222:17;12215:47;12279:131;12405:4;12279:131;:::i;:::-;12271:139;;11998:419;;;:::o;12423:180::-;12471:77;12468:1;12461:88;12568:4;12565:1;12558:15;12592:4;12589:1;12582:15;12609:305;12649:3;12668:20;12686:1;12668:20;:::i;:::-;12663:25;;12702:20;12720:1;12702:20;:::i;:::-;12697:25;;12856:1;12788:66;12784:74;12781:1;12778:81;12775:107;;;12862:18;;:::i;:::-;12775:107;12906:1;12903;12899:9;12892:16;;12609:305;;;;:::o;12920:179::-;13060:31;13056:1;13048:6;13044:14;13037:55;12920:179;:::o;13105:366::-;13247:3;13268:67;13332:2;13327:3;13268:67;:::i;:::-;13261:74;;13344:93;13433:3;13344:93;:::i;:::-;13462:2;13457:3;13453:12;13446:19;;13105:366;;;:::o;13477:419::-;13643:4;13681:2;13670:9;13666:18;13658:26;;13730:9;13724:4;13720:20;13716:1;13705:9;13701:17;13694:47;13758:131;13884:4;13758:131;:::i;:::-;13750:139;;13477:419;;;:::o;13902:180::-;13950:77;13947:1;13940:88;14047:4;14044:1;14037:15;14071:4;14068:1;14061:15;14088:320;14132:6;14169:1;14163:4;14159:12;14149:22;;14216:1;14210:4;14206:12;14237:18;14227:81;;14293:4;14285:6;14281:17;14271:27;;14227:81;14355:2;14347:6;14344:14;14324:18;14321:38;14318:84;;;14374:18;;:::i;:::-;14318:84;14139:269;14088:320;;;:::o;14414:348::-;14454:7;14477:20;14495:1;14477:20;:::i;:::-;14472:25;;14511:20;14529:1;14511:20;:::i;:::-;14506:25;;14699:1;14631:66;14627:74;14624:1;14621:81;14616:1;14609:9;14602:17;14598:105;14595:131;;;14706:18;;:::i;:::-;14595:131;14754:1;14751;14747:9;14736:20;;14414:348;;;;:::o;14768:180::-;14816:77;14813:1;14806:88;14913:4;14910:1;14903:15;14937:4;14934:1;14927:15;14954:185;14994:1;15011:20;15029:1;15011:20;:::i;:::-;15006:25;;15045:20;15063:1;15045:20;:::i;:::-;15040:25;;15084:1;15074:35;;15089:18;;:::i;:::-;15074:35;15131:1;15128;15124:9;15119:14;;14954:185;;;;:::o;15145:234::-;15285:34;15281:1;15273:6;15269:14;15262:58;15354:17;15349:2;15341:6;15337:15;15330:42;15145:234;:::o;15385:366::-;15527:3;15548:67;15612:2;15607:3;15548:67;:::i;:::-;15541:74;;15624:93;15713:3;15624:93;:::i;:::-;15742:2;15737:3;15733:12;15726:19;;15385:366;;;:::o;15757:419::-;15923:4;15961:2;15950:9;15946:18;15938:26;;16010:9;16004:4;16000:20;15996:1;15985:9;15981:17;15974:47;16038:131;16164:4;16038:131;:::i;:::-;16030:139;;15757:419;;;:::o;16182:180::-;16230:77;16227:1;16220:88;16327:4;16324:1;16317:15;16351:4;16348:1;16341:15;16368:233;16407:3;16430:24;16448:5;16430:24;:::i;:::-;16421:33;;16476:66;16469:5;16466:77;16463:103;;;16546:18;;:::i;:::-;16463:103;16593:1;16586:5;16582:13;16575:20;;16368:233;;;:::o;16607:178::-;16747:30;16743:1;16735:6;16731:14;16724:54;16607:178;:::o;16791:366::-;16933:3;16954:67;17018:2;17013:3;16954:67;:::i;:::-;16947:74;;17030:93;17119:3;17030:93;:::i;:::-;17148:2;17143:3;17139:12;17132:19;;16791:366;;;:::o;17163:419::-;17329:4;17367:2;17356:9;17352:18;17344:26;;17416:9;17410:4;17406:20;17402:1;17391:9;17387:17;17380:47;17444:131;17570:4;17444:131;:::i;:::-;17436:139;;17163:419;;;:::o;17588:244::-;17728:34;17724:1;17716:6;17712:14;17705:58;17797:27;17792:2;17784:6;17780:15;17773:52;17588:244;:::o;17838:366::-;17980:3;18001:67;18065:2;18060:3;18001:67;:::i;:::-;17994:74;;18077:93;18166:3;18077:93;:::i;:::-;18195:2;18190:3;18186:12;18179:19;;17838:366;;;:::o;18210:419::-;18376:4;18414:2;18403:9;18399:18;18391:26;;18463:9;18457:4;18453:20;18449:1;18438:9;18434:17;18427:47;18491:131;18617:4;18491:131;:::i;:::-;18483:139;;18210:419;;;:::o;18635:223::-;18775:34;18771:1;18763:6;18759:14;18752:58;18844:6;18839:2;18831:6;18827:15;18820:31;18635:223;:::o;18864:366::-;19006:3;19027:67;19091:2;19086:3;19027:67;:::i;:::-;19020:74;;19103:93;19192:3;19103:93;:::i;:::-;19221:2;19216:3;19212:12;19205:19;;18864:366;;;:::o;19236:419::-;19402:4;19440:2;19429:9;19425:18;19417:26;;19489:9;19483:4;19479:20;19475:1;19464:9;19460:17;19453:47;19517:131;19643:4;19517:131;:::i;:::-;19509:139;;19236:419;;;:::o;19661:240::-;19801:34;19797:1;19789:6;19785:14;19778:58;19870:23;19865:2;19857:6;19853:15;19846:48;19661:240;:::o;19907:366::-;20049:3;20070:67;20134:2;20129:3;20070:67;:::i;:::-;20063:74;;20146:93;20235:3;20146:93;:::i;:::-;20264:2;20259:3;20255:12;20248:19;;19907:366;;;:::o;20279:419::-;20445:4;20483:2;20472:9;20468:18;20460:26;;20532:9;20526:4;20522:20;20518:1;20507:9;20503:17;20496:47;20560:131;20686:4;20560:131;:::i;:::-;20552:139;;20279:419;;;:::o;20704:239::-;20844:34;20840:1;20832:6;20828:14;20821:58;20913:22;20908:2;20900:6;20896:15;20889:47;20704:239;:::o;20949:366::-;21091:3;21112:67;21176:2;21171:3;21112:67;:::i;:::-;21105:74;;21188:93;21277:3;21188:93;:::i;:::-;21306:2;21301:3;21297:12;21290:19;;20949:366;;;:::o;21321:419::-;21487:4;21525:2;21514:9;21510:18;21502:26;;21574:9;21568:4;21564:20;21560:1;21549:9;21545:17;21538:47;21602:131;21728:4;21602:131;:::i;:::-;21594:139;;21321:419;;;:::o;21746:225::-;21886:34;21882:1;21874:6;21870:14;21863:58;21955:8;21950:2;21942:6;21938:15;21931:33;21746:225;:::o;21977:366::-;22119:3;22140:67;22204:2;22199:3;22140:67;:::i;:::-;22133:74;;22216:93;22305:3;22216:93;:::i;:::-;22334:2;22329:3;22325:12;22318:19;;21977:366;;;:::o;22349:419::-;22515:4;22553:2;22542:9;22538:18;22530:26;;22602:9;22596:4;22592:20;22588:1;22577:9;22573:17;22566:47;22630:131;22756:4;22630:131;:::i;:::-;22622:139;;22349:419;;;:::o;22774:177::-;22914:29;22910:1;22902:6;22898:14;22891:53;22774:177;:::o;22957:366::-;23099:3;23120:67;23184:2;23179:3;23120:67;:::i;:::-;23113:74;;23196:93;23285:3;23196:93;:::i;:::-;23314:2;23309:3;23305:12;23298:19;;22957:366;;;:::o;23329:419::-;23495:4;23533:2;23522:9;23518:18;23510:26;;23582:9;23576:4;23572:20;23568:1;23557:9;23553:17;23546:47;23610:131;23736:4;23610:131;:::i;:::-;23602:139;;23329:419;;;:::o;23754:223::-;23894:34;23890:1;23882:6;23878:14;23871:58;23963:6;23958:2;23950:6;23946:15;23939:31;23754:223;:::o;23983:366::-;24125:3;24146:67;24210:2;24205:3;24146:67;:::i;:::-;24139:74;;24222:93;24311:3;24222:93;:::i;:::-;24340:2;24335:3;24331:12;24324:19;;23983:366;;;:::o;24355:419::-;24521:4;24559:2;24548:9;24544:18;24536:26;;24608:9;24602:4;24598:20;24594:1;24583:9;24579:17;24572:47;24636:131;24762:4;24636:131;:::i;:::-;24628:139;;24355:419;;;:::o;24780:221::-;24920:34;24916:1;24908:6;24904:14;24897:58;24989:4;24984:2;24976:6;24972:15;24965:29;24780:221;:::o;25007:366::-;25149:3;25170:67;25234:2;25229:3;25170:67;:::i;:::-;25163:74;;25246:93;25335:3;25246:93;:::i;:::-;25364:2;25359:3;25355:12;25348:19;;25007:366;;;:::o;25379:419::-;25545:4;25583:2;25572:9;25568:18;25560:26;;25632:9;25626:4;25622:20;25618:1;25607:9;25603:17;25596:47;25660:131;25786:4;25660:131;:::i;:::-;25652:139;;25379:419;;;:::o;25804:224::-;25944:34;25940:1;25932:6;25928:14;25921:58;26013:7;26008:2;26000:6;25996:15;25989:32;25804:224;:::o;26034:366::-;26176:3;26197:67;26261:2;26256:3;26197:67;:::i;:::-;26190:74;;26273:93;26362:3;26273:93;:::i;:::-;26391:2;26386:3;26382:12;26375:19;;26034:366;;;:::o;26406:419::-;26572:4;26610:2;26599:9;26595:18;26587:26;;26659:9;26653:4;26649:20;26645:1;26634:9;26630:17;26623:47;26687:131;26813:4;26687:131;:::i;:::-;26679:139;;26406:419;;;:::o;26831:222::-;26971:34;26967:1;26959:6;26955:14;26948:58;27040:5;27035:2;27027:6;27023:15;27016:30;26831:222;:::o;27059:366::-;27201:3;27222:67;27286:2;27281:3;27222:67;:::i;:::-;27215:74;;27298:93;27387:3;27298:93;:::i;:::-;27416:2;27411:3;27407:12;27400:19;;27059:366;;;:::o;27431:419::-;27597:4;27635:2;27624:9;27620:18;27612:26;;27684:9;27678:4;27674:20;27670:1;27659:9;27655:17;27648:47;27712:131;27838:4;27712:131;:::i;:::-;27704:139;;27431:419;;;:::o;27856:301::-;27996:34;27992:1;27984:6;27980:14;27973:58;28065:34;28060:2;28052:6;28048:15;28041:59;28134:15;28129:2;28121:6;28117:15;28110:40;27856:301;:::o;28163:366::-;28305:3;28326:67;28390:2;28385:3;28326:67;:::i;:::-;28319:74;;28402:93;28491:3;28402:93;:::i;:::-;28520:2;28515:3;28511:12;28504:19;;28163:366;;;:::o;28535:419::-;28701:4;28739:2;28728:9;28724:18;28716:26;;28788:9;28782:4;28778:20;28774:1;28763:9;28759:17;28752:47;28816:131;28942:4;28816:131;:::i;:::-;28808:139;;28535:419;;;:::o;28960:172::-;29100:24;29096:1;29088:6;29084:14;29077:48;28960:172;:::o;29138:366::-;29280:3;29301:67;29365:2;29360:3;29301:67;:::i;:::-;29294:74;;29377:93;29466:3;29377:93;:::i;:::-;29495:2;29490:3;29486:12;29479:19;;29138:366;;;:::o;29510:419::-;29676:4;29714:2;29703:9;29699:18;29691:26;;29763:9;29757:4;29753:20;29749:1;29738:9;29734:17;29727:47;29791:131;29917:4;29791:131;:::i;:::-;29783:139;;29510:419;;;:::o;29935:297::-;30075:34;30071:1;30063:6;30059:14;30052:58;30144:34;30139:2;30131:6;30127:15;30120:59;30213:11;30208:2;30200:6;30196:15;30189:36;29935:297;:::o;30238:366::-;30380:3;30401:67;30465:2;30460:3;30401:67;:::i;:::-;30394:74;;30477:93;30566:3;30477:93;:::i;:::-;30595:2;30590:3;30586:12;30579:19;;30238:366;;;:::o;30610:419::-;30776:4;30814:2;30803:9;30799:18;30791:26;;30863:9;30857:4;30853:20;30849:1;30838:9;30834:17;30827:47;30891:131;31017:4;30891:131;:::i;:::-;30883:139;;30610:419;;;:::o;31035:240::-;31175:34;31171:1;31163:6;31159:14;31152:58;31244:23;31239:2;31231:6;31227:15;31220:48;31035:240;:::o;31281:366::-;31423:3;31444:67;31508:2;31503:3;31444:67;:::i;:::-;31437:74;;31520:93;31609:3;31520:93;:::i;:::-;31638:2;31633:3;31629:12;31622:19;;31281:366;;;:::o;31653:419::-;31819:4;31857:2;31846:9;31842:18;31834:26;;31906:9;31900:4;31896:20;31892:1;31881:9;31877:17;31870:47;31934:131;32060:4;31934:131;:::i;:::-;31926:139;;31653:419;;;:::o;32078:169::-;32218:21;32214:1;32206:6;32202:14;32195:45;32078:169;:::o;32253:366::-;32395:3;32416:67;32480:2;32475:3;32416:67;:::i;:::-;32409:74;;32492:93;32581:3;32492:93;:::i;:::-;32610:2;32605:3;32601:12;32594:19;;32253:366;;;:::o;32625:419::-;32791:4;32829:2;32818:9;32814:18;32806:26;;32878:9;32872:4;32868:20;32864:1;32853:9;32849:17;32842:47;32906:131;33032:4;32906:131;:::i;:::-;32898:139;;32625:419;;;:::o;33050:241::-;33190:34;33186:1;33178:6;33174:14;33167:58;33259:24;33254:2;33246:6;33242:15;33235:49;33050:241;:::o;33297:366::-;33439:3;33460:67;33524:2;33519:3;33460:67;:::i;:::-;33453:74;;33536:93;33625:3;33536:93;:::i;:::-;33654:2;33649:3;33645:12;33638:19;;33297:366;;;:::o;33669:419::-;33835:4;33873:2;33862:9;33858:18;33850:26;;33922:9;33916:4;33912:20;33908:1;33897:9;33893:17;33886:47;33950:131;34076:4;33950:131;:::i;:::-;33942:139;;33669:419;;;:::o;34094:191::-;34134:4;34154:20;34172:1;34154:20;:::i;:::-;34149:25;;34188:20;34206:1;34188:20;:::i;:::-;34183:25;;34227:1;34224;34221:8;34218:34;;;34232:18;;:::i;:::-;34218:34;34277:1;34274;34270:9;34262:17;;34094:191;;;;:::o;34291:442::-;34440:4;34478:2;34467:9;34463:18;34455:26;;34491:71;34559:1;34548:9;34544:17;34535:6;34491:71;:::i;:::-;34572:72;34640:2;34629:9;34625:18;34616:6;34572:72;:::i;:::-;34654;34722:2;34711:9;34707:18;34698:6;34654:72;:::i;:::-;34291:442;;;;;;:::o;34739:220::-;34879:34;34875:1;34867:6;34863:14;34856:58;34948:3;34943:2;34935:6;34931:15;34924:28;34739:220;:::o;34965:366::-;35107:3;35128:67;35192:2;35187:3;35128:67;:::i;:::-;35121:74;;35204:93;35293:3;35204:93;:::i;:::-;35322:2;35317:3;35313:12;35306:19;;34965:366;;;:::o;35337:419::-;35503:4;35541:2;35530:9;35526:18;35518:26;;35590:9;35584:4;35580:20;35576:1;35565:9;35561:17;35554:47;35618:131;35744:4;35618:131;:::i;:::-;35610:139;;35337:419;;;:::o;35762:143::-;35819:5;35850:6;35844:13;35835:22;;35866:33;35893:5;35866:33;:::i;:::-;35762:143;;;;:::o;35911:351::-;35981:6;36030:2;36018:9;36009:7;36005:23;36001:32;35998:119;;;36036:79;;:::i;:::-;35998:119;36156:1;36181:64;36237:7;36228:6;36217:9;36213:22;36181:64;:::i;:::-;36171:74;;36127:128;35911:351;;;;:::o;36268:85::-;36313:7;36342:5;36331:16;;36268:85;;;:::o;36359:158::-;36417:9;36450:61;36468:42;36477:32;36503:5;36477:32;:::i;:::-;36468:42;:::i;:::-;36450:61;:::i;:::-;36437:74;;36359:158;;;:::o;36523:147::-;36618:45;36657:5;36618:45;:::i;:::-;36613:3;36606:58;36523:147;;:::o;36676:114::-;36743:6;36777:5;36771:12;36761:22;;36676:114;;;:::o;36796:184::-;36895:11;36929:6;36924:3;36917:19;36969:4;36964:3;36960:14;36945:29;;36796:184;;;;:::o;36986:132::-;37053:4;37076:3;37068:11;;37106:4;37101:3;37097:14;37089:22;;36986:132;;;:::o;37124:108::-;37201:24;37219:5;37201:24;:::i;:::-;37196:3;37189:37;37124:108;;:::o;37238:179::-;37307:10;37328:46;37370:3;37362:6;37328:46;:::i;:::-;37406:4;37401:3;37397:14;37383:28;;37238:179;;;;:::o;37423:113::-;37493:4;37525;37520:3;37516:14;37508:22;;37423:113;;;:::o;37572:732::-;37691:3;37720:54;37768:5;37720:54;:::i;:::-;37790:86;37869:6;37864:3;37790:86;:::i;:::-;37783:93;;37900:56;37950:5;37900:56;:::i;:::-;37979:7;38010:1;37995:284;38020:6;38017:1;38014:13;37995:284;;;38096:6;38090:13;38123:63;38182:3;38167:13;38123:63;:::i;:::-;38116:70;;38209:60;38262:6;38209:60;:::i;:::-;38199:70;;38055:224;38042:1;38039;38035:9;38030:14;;37995:284;;;37999:14;38295:3;38288:10;;37696:608;;;37572:732;;;;:::o;38310:831::-;38573:4;38611:3;38600:9;38596:19;38588:27;;38625:71;38693:1;38682:9;38678:17;38669:6;38625:71;:::i;:::-;38706:80;38782:2;38771:9;38767:18;38758:6;38706:80;:::i;:::-;38833:9;38827:4;38823:20;38818:2;38807:9;38803:18;38796:48;38861:108;38964:4;38955:6;38861:108;:::i;:::-;38853:116;;38979:72;39047:2;39036:9;39032:18;39023:6;38979:72;:::i;:::-;39061:73;39129:3;39118:9;39114:19;39105:6;39061:73;:::i;:::-;38310:831;;;;;;;;:::o;39147:807::-;39396:4;39434:3;39423:9;39419:19;39411:27;;39448:71;39516:1;39505:9;39501:17;39492:6;39448:71;:::i;:::-;39529:72;39597:2;39586:9;39582:18;39573:6;39529:72;:::i;:::-;39611:80;39687:2;39676:9;39672:18;39663:6;39611:80;:::i;:::-;39701;39777:2;39766:9;39762:18;39753:6;39701:80;:::i;:::-;39791:73;39859:3;39848:9;39844:19;39835:6;39791:73;:::i;:::-;39874;39942:3;39931:9;39927:19;39918:6;39874:73;:::i;:::-;39147:807;;;;;;;;;:::o;39960:143::-;40017:5;40048:6;40042:13;40033:22;;40064:33;40091:5;40064:33;:::i;:::-;39960:143;;;;:::o;40109:663::-;40197:6;40205;40213;40262:2;40250:9;40241:7;40237:23;40233:32;40230:119;;;40268:79;;:::i;:::-;40230:119;40388:1;40413:64;40469:7;40460:6;40449:9;40445:22;40413:64;:::i;:::-;40403:74;;40359:128;40526:2;40552:64;40608:7;40599:6;40588:9;40584:22;40552:64;:::i;:::-;40542:74;;40497:129;40665:2;40691:64;40747:7;40738:6;40727:9;40723:22;40691:64;:::i;:::-;40681:74;;40636:129;40109:663;;;;;:::o

Swarm Source

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