ETH Price: $3,310.18 (-1.70%)
Gas: 2 Gwei

Token

da wae (DAWAE)
 

Overview

Max Total Supply

1,000,000,000 DAWAE

Holders

31

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
987,125.322836251 DAWAE

Value
$0.00
0x55cf8f583c6ab4b9789a8e585ba50aecfe96866e
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:
DaWae

Compiler Version
v0.8.11+commit.d7f03943

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-07-15
*/

/**

da wae (DAWAE)

do u kno da wae?

tokenomics:
total supply: 1,000,000,000
tax: 7% buy and 7% sell
2% auto LP, 5% project wallet

@dawaeERC
https://twitter.com/dawaeERC

*/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.11;

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 DaWae 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 = true;
    
    // 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 _buyProjectFee;
    uint256 private _buyLiquidityFee;
    
    uint256 public sellTotalFees;
    uint256 private _sellProjectFee;
    uint256 private _sellLiquidityFee;
    
    uint256 private _tokensForProject;
    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("da wae", "DAWAE") {
        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 buyProjectFee = 5;
        uint256 buyLiquidityFee = 2;

        uint256 sellProjectFee = 5;
        uint256 sellLiquidityFee = 2;
        
        uint256 totalSupply = 1e9 * 1e9;
        
        maxTransactionAmount = totalSupply * 1 / 100; // 1% maxTransactionAmountTxn
        maxWallet = totalSupply * 1 / 100; // 1% maxWallet
        swapTokensAtAmount = totalSupply * 25 / 10000; // 0.25% swap wallet

        _buyProjectFee = buyProjectFee;
        _buyLiquidityFee = buyLiquidityFee;
        buyTotalFees = _buyProjectFee + _buyLiquidityFee;
        
        _sellProjectFee = sellProjectFee;
        _sellLiquidityFee = sellLiquidityFee;
        sellTotalFees = _sellProjectFee + _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 projectFee, uint256 liquidityFee) external onlyOwner {
        _buyProjectFee = projectFee;
        _buyLiquidityFee = liquidityFee;
        buyTotalFees = _buyProjectFee + _buyLiquidityFee;
        require(buyTotalFees <= 10, "Must keep fees at 10% or less");
    }
    
    function updateSellFees(uint256 projectFee, uint256 liquidityFee) external onlyOwner {
        _sellProjectFee = projectFee;
        _sellLiquidityFee = liquidityFee;
        sellTotalFees = _sellProjectFee + _sellLiquidityFee;
        require(sellTotalFees <= 15, "Must keep fees at 15% 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;
                _tokensForProject += fees * _sellProjectFee / sellTotalFees;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
        	    fees = amount.mul(buyTotalFees).div(100);
        	    _tokensForLiquidity += fees * _buyLiquidityFee / buyTotalFees;
                _tokensForProject += fees * _buyProjectFee / 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 + _tokensForProject;
        
        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 ethForProject = ethBalance.mul(_tokensForProject).div(totalTokensToSwap);
        uint256 ethForLiquidity = ethBalance - ethForProject;
        
        _tokensForLiquidity = 0;
        _tokensForProject = 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":"projectFee","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":"projectFee","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"}]

60c06040526001600d60006101000a81548160ff0219169083151502179055506001600d60016101000a81548160ff0219169083151502179055506001600f60006101000a81548160ff0219169083151502179055503480156200006257600080fd5b506040518060400160405280600681526020017f64612077616500000000000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f44415741450000000000000000000000000000000000000000000000000000008152508160039080519060200190620000e792919062000ae7565b5080600490805190602001906200010092919062000ae7565b505050600062000115620005b360201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001e0816001620005bb60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000260573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000286919062000c01565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002ee573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000314919062000c01565b6040518363ffffffff1660e01b81526004016200033392919062000c44565b6020604051808303816000875af115801562000353573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000379919062000c01565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620003c160a0516001620005bb60201b60201c565b620003d660a0516001620006b860201b60201c565b6000600590506000600290506000600590506000600290506000670de0b6b3a7640000905060646001826200040c919062000caa565b62000418919062000d3a565b600a8190555060646001826200042f919062000caa565b6200043b919062000d3a565b600c8190555061271060198262000453919062000caa565b6200045f919062000d3a565b600b81905550846011819055508360128190555060125460115462000485919062000d72565b6010819055508260148190555081601581905550601554601454620004ab919062000d72565b601381905550620004c16200075960201b60201c565b600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000523620005156200075960201b60201c565b60016200078360201b60201c565b620005363060016200078360201b60201c565b6200054b61dead60016200078360201b60201c565b6200056d6200055f6200075960201b60201c565b6001620005bb60201b60201c565b62000580306001620005bb60201b60201c565b6200059561dead6001620005bb60201b60201c565b620005a73382620008d060201b60201c565b50505050505062001003565b600033905090565b620005cb620005b360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146200065d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006549062000e30565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b62000793620005b360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000825576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200081c9062000e30565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620008c4919062000e6f565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000943576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200093a9062000edc565b60405180910390fd5b620009576000838362000a7f60201b60201c565b620009738160025462000a8460201b620024471790919060201c565b600281905550620009d1816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000a8460201b620024471790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000a73919062000f0f565b60405180910390a35050565b505050565b600080828462000a95919062000d72565b90508381101562000add576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000ad49062000f7c565b60405180910390fd5b8091505092915050565b82805462000af59062000fcd565b90600052602060002090601f01602090048101928262000b19576000855562000b65565b82601f1062000b3457805160ff191683800117855562000b65565b8280016001018555821562000b65579182015b8281111562000b6457825182559160200191906001019062000b47565b5b50905062000b74919062000b78565b5090565b5b8082111562000b9357600081600090555060010162000b79565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000bc98262000b9c565b9050919050565b62000bdb8162000bbc565b811462000be757600080fd5b50565b60008151905062000bfb8162000bd0565b92915050565b60006020828403121562000c1a5762000c1962000b97565b5b600062000c2a8482850162000bea565b91505092915050565b62000c3e8162000bbc565b82525050565b600060408201905062000c5b600083018562000c33565b62000c6a602083018462000c33565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000cb78262000c71565b915062000cc48362000c71565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000d005762000cff62000c7b565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000d478262000c71565b915062000d548362000c71565b92508262000d675762000d6662000d0b565b5b828204905092915050565b600062000d7f8262000c71565b915062000d8c8362000c71565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000dc45762000dc362000c7b565b5b828201905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000e1860208362000dcf565b915062000e258262000de0565b602082019050919050565b6000602082019050818103600083015262000e4b8162000e09565b9050919050565b60008115159050919050565b62000e698162000e52565b82525050565b600060208201905062000e86600083018462000e5e565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000ec4601f8362000dcf565b915062000ed18262000e8c565b602082019050919050565b6000602082019050818103600083015262000ef78162000eb5565b9050919050565b62000f098162000c71565b82525050565b600060208201905062000f26600083018462000efe565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600062000f64601b8362000dcf565b915062000f718262000f2c565b602082019050919050565b6000602082019050818103600083015262000f978162000f55565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000fe657607f821691505b6020821081141562000ffd5762000ffc62000f9e565b5b50919050565b60805160a0516154236200106f60003960008181610fde0152818161110e01528181611b620152612b20015260008181610c8e0152818161117f01528181612ac801528181613a4d01528181613b2e01528181613b5501528181613bf10152613c1801526154236000f3fe60806040526004361061026b5760003560e01c80637571336a11610144578063c18bc195116100b6578063dd62ed3e1161007a578063dd62ed3e1461094f578063e2f456051461098c578063e884f260146109b7578063f25f4b56146109e2578063f2fde38b14610a0d578063f8b45b0514610a3657610272565b8063c18bc19514610868578063c876d0b914610891578063c8c8ebe4146108bc578063d257b34f146108e7578063d85ba0631461092457610272565b80639a7a23d6116101085780639a7a23d614610734578063a457c2d71461075d578063a9059cbb1461079a578063b62496f5146107d7578063bbc0c74214610814578063c02466681461083f57610272565b80637571336a14610675578063892ba4081461069e5780638a8c523c146106c75780638da5cb5b146106de57806395d89b411461070957610272565b8063476343ee116101dd57806366718524116101a1578063667185241461057957806366ca9b83146105a25780636a486a8e146105cb57806370a08231146105f6578063715018a614610633578063751039fc1461064a57610272565b8063476343ee146104a657806349bd5a5e146104bd5780634a62bb65146104e85780634fbee193146105135780635e80148e1461055057610272565b80631694505e1161022f5780631694505e1461038257806318160ddd146103ad578063203e727e146103d857806323b872dd14610401578063313ce5671461043e578063395093511461046957610272565b806302dbd8f81461027757806306fdde03146102a0578063095ea7b3146102cb5780630f3a325f1461030857806310d5de531461034557610272565b3661027257005b600080fd5b34801561028357600080fd5b5061029e60048036038101906102999190613d79565b610a61565b005b3480156102ac57600080fd5b506102b5610b66565b6040516102c29190613e52565b60405180910390f35b3480156102d757600080fd5b506102f260048036038101906102ed9190613ed2565b610bf8565b6040516102ff9190613f2d565b60405180910390f35b34801561031457600080fd5b5061032f600480360381019061032a9190613f48565b610c16565b60405161033c9190613f2d565b60405180910390f35b34801561035157600080fd5b5061036c60048036038101906103679190613f48565b610c6c565b6040516103799190613f2d565b60405180910390f35b34801561038e57600080fd5b50610397610c8c565b6040516103a49190613fd4565b60405180910390f35b3480156103b957600080fd5b506103c2610cb0565b6040516103cf9190613ffe565b60405180910390f35b3480156103e457600080fd5b506103ff60048036038101906103fa9190614019565b610cba565b005b34801561040d57600080fd5b5061042860048036038101906104239190614046565b610ddc565b6040516104359190613f2d565b60405180910390f35b34801561044a57600080fd5b50610453610eb5565b60405161046091906140b5565b60405180910390f35b34801561047557600080fd5b50610490600480360381019061048b9190613ed2565b610ebe565b60405161049d9190613f2d565b60405180910390f35b3480156104b257600080fd5b506104bb610f71565b005b3480156104c957600080fd5b506104d2610fdc565b6040516104df91906140df565b60405180910390f35b3480156104f457600080fd5b506104fd611000565b60405161050a9190613f2d565b60405180910390f35b34801561051f57600080fd5b5061053a60048036038101906105359190613f48565b611013565b6040516105479190613f2d565b60405180910390f35b34801561055c57600080fd5b5061057760048036038101906105729190614242565b611069565b005b34801561058557600080fd5b506105a0600480360381019061059b9190613f48565b611277565b005b3480156105ae57600080fd5b506105c960048036038101906105c49190613d79565b6113ce565b005b3480156105d757600080fd5b506105e06114d3565b6040516105ed9190613ffe565b60405180910390f35b34801561060257600080fd5b5061061d60048036038101906106189190613f48565b6114d9565b60405161062a9190613ffe565b60405180910390f35b34801561063f57600080fd5b50610648611521565b005b34801561065657600080fd5b5061065f611679565b60405161066c9190613f2d565b60405180910390f35b34801561068157600080fd5b5061069c600480360381019061069791906142b7565b611734565b005b3480156106aa57600080fd5b506106c560048036038101906106c09190614242565b611826565b005b3480156106d357600080fd5b506106dc611952565b005b3480156106ea57600080fd5b506106f3611a0d565b60405161070091906140df565b60405180910390f35b34801561071557600080fd5b5061071e611a37565b60405161072b9190613e52565b60405180910390f35b34801561074057600080fd5b5061075b600480360381019061075691906142b7565b611ac9565b005b34801561076957600080fd5b50610784600480360381019061077f9190613ed2565b611bfd565b6040516107919190613f2d565b60405180910390f35b3480156107a657600080fd5b506107c160048036038101906107bc9190613ed2565b611cca565b6040516107ce9190613f2d565b60405180910390f35b3480156107e357600080fd5b506107fe60048036038101906107f99190613f48565b611ce8565b60405161080b9190613f2d565b60405180910390f35b34801561082057600080fd5b50610829611d08565b6040516108369190613f2d565b60405180910390f35b34801561084b57600080fd5b50610866600480360381019061086191906142b7565b611d1b565b005b34801561087457600080fd5b5061088f600480360381019061088a9190614019565b611e5b565b005b34801561089d57600080fd5b506108a6611f7d565b6040516108b39190613f2d565b60405180910390f35b3480156108c857600080fd5b506108d1611f90565b6040516108de9190613ffe565b60405180910390f35b3480156108f357600080fd5b5061090e60048036038101906109099190614019565b611f96565b60405161091b9190613f2d565b60405180910390f35b34801561093057600080fd5b50610939612106565b6040516109469190613ffe565b60405180910390f35b34801561095b57600080fd5b50610976600480360381019061097191906142f7565b61210c565b6040516109839190613ffe565b60405180910390f35b34801561099857600080fd5b506109a1612193565b6040516109ae9190613ffe565b60405180910390f35b3480156109c357600080fd5b506109cc612199565b6040516109d99190613f2d565b60405180910390f35b3480156109ee57600080fd5b506109f7612254565b604051610a0491906140df565b60405180910390f35b348015610a1957600080fd5b50610a346004803603810190610a2f9190613f48565b61227a565b005b348015610a4257600080fd5b50610a4b612441565b604051610a589190613ffe565b60405180910390f35b610a696124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610af8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aef90614383565b60405180910390fd5b8160148190555080601581905550601554601454610b1691906143d2565b601381905550600f6013541115610b62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5990614474565b60405180910390fd5b5050565b606060038054610b75906144c3565b80601f0160208091040260200160405190810160405280929190818152602001828054610ba1906144c3565b8015610bee5780601f10610bc357610100808354040283529160200191610bee565b820191906000526020600020905b815481529060010190602001808311610bd157829003601f168201915b5050505050905090565b6000610c0c610c056124a5565b84846124ad565b6001905092915050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60196020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b610cc26124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4890614383565b60405180910390fd5b633b9aca006103e86001610d63610cb0565b610d6d91906144f5565b610d77919061457e565b610d81919061457e565b811015610dc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dba90614621565b60405180910390fd5b633b9aca0081610dd391906144f5565b600a8190555050565b6000610de9848484612678565b610eaa84610df56124a5565b610ea5856040518060600160405280602881526020016153a160289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610e5b6124a5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133849092919063ffffffff16565b6124ad565b600190509392505050565b60006009905090565b6000610f67610ecb6124a5565b84610f628560016000610edc6124a5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461244790919063ffffffff16565b6124ad565b6001905092915050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610fd9573d6000803e3d6000fd5b50565b7f000000000000000000000000000000000000000000000000000000000000000081565b600d60009054906101000a900460ff1681565b6000601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6110716124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611100576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f790614383565b60405180910390fd5b60005b8151811015611273577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1682828151811061115657611155614641565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff16141580156111e857507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168282815181106111c7576111c6614641565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614155b156112605760016006600084848151811061120657611205614641565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b808061126b90614670565b915050611103565b5050565b61127f6124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461130e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130590614383565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f5deb5ef622431f0df5a39b72dd556892f68ba42aa0f3aaf0800e166ce866492860405160405180910390a380600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6113d66124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611465576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145c90614383565b60405180910390fd5b816011819055508060128190555060125460115461148391906143d2565b601081905550600a60105411156114cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c690614705565b60405180910390fd5b5050565b60135481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6115296124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115af90614383565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006116836124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611712576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170990614383565b60405180910390fd5b6000600d60006101000a81548160ff0219169083151502179055506001905090565b61173c6124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c290614383565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61182e6124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b490614383565b60405180910390fd5b60005b815181101561194e576000600660008484815181106118e2576118e1614641565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061194690614670565b9150506118c0565b5050565b61195a6124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e090614383565b60405180910390fd5b6001600d60016101000a81548160ff02191690831515021790555042600881905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054611a46906144c3565b80601f0160208091040260200160405190810160405280929190818152602001828054611a72906144c3565b8015611abf5780601f10611a9457610100808354040283529160200191611abf565b820191906000526020600020905b815481529060010190602001808311611aa257829003601f168201915b5050505050905090565b611ad16124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5790614383565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611bef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be690614797565b60405180910390fd5b611bf982826133e8565b5050565b6000611cc0611c0a6124a5565b84611cbb856040518060600160405280602581526020016153c96025913960016000611c346124a5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133849092919063ffffffff16565b6124ad565b6001905092915050565b6000611cde611cd76124a5565b8484612678565b6001905092915050565b601a6020528060005260406000206000915054906101000a900460ff1681565b600d60019054906101000a900460ff1681565b611d236124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611db2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da990614383565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611e4f9190613f2d565b60405180910390a25050565b611e636124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ef2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee990614383565b60405180910390fd5b633b9aca006103e86005611f04610cb0565b611f0e91906144f5565b611f18919061457e565b611f22919061457e565b811015611f64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5b90614829565b60405180910390fd5b633b9aca0081611f7491906144f5565b600c8190555050565b600f60009054906101000a900460ff1681565b600a5481565b6000611fa06124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461202f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202690614383565b60405180910390fd5b620186a0600161203d610cb0565b61204791906144f5565b612051919061457e565b821015612093576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208a906148bb565b60405180910390fd5b6103e860056120a0610cb0565b6120aa91906144f5565b6120b4919061457e565b8211156120f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ed9061494d565b60405180910390fd5b81600b8190555060019050919050565b60105481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600b5481565b60006121a36124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612232576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222990614383565b60405180910390fd5b6000600f60006101000a81548160ff0219169083151502179055506001905090565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6122826124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612311576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230890614383565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612381576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612378906149df565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600c5481565b600080828461245691906143d2565b90508381101561249b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249290614a4b565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561251d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251490614add565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561258d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258490614b6f565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161266b9190613ffe565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156126e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126df90614c01565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612758576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274f90614c93565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156127e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127dc90614d4b565b60405180910390fd5b60008114156127ff576127fa83836000613489565b61337f565b600854421415612862576001600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b600d60009054906101000a900460ff1615612f255761287f611a0d565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156128ed57506128bd611a0d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129265750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612960575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129795750600760009054906101000a900460ff16155b15612f2457600d60019054906101000a900460ff16612a7357601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612a335750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612a72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6990614db7565b60405180910390fd5b5b600f60009054906101000a900460ff1615612c3b57612a90611a0d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612b1757507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b6f57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612c3a5743600e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612bf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bec90614e6f565b60405180910390fd5b43600e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612cde5750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d8557600a54811115612d28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1f90614f01565b60405180910390fd5b600c54612d34836114d9565b82612d3f91906143d2565b1115612d80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7790614f6d565b60405180910390fd5b612f23565b601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e285750601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e7757600a54811115612e72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e6990614fff565b60405180910390fd5b612f22565b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612f2157600c54612ed4836114d9565b82612edf91906143d2565b1115612f20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f1790614f6d565b60405180910390fd5b5b5b5b5b5b6000612f30306114d9565b90506000600b548210159050808015612f565750600760009054906101000a900460ff16155b8015612fac5750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156130025750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156130585750601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561309c576001600760006101000a81548160ff02191690831515021790555061308061371e565b6000600760006101000a81548160ff0219169083151502179055505b6000600760009054906101000a900460ff16159050601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806131525750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561315c57600090505b6000811561336f57601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156131bf57506000601354115b15613259576131ec60646131de6013548861389a90919063ffffffff16565b61391590919063ffffffff16565b9050601354601554826131ff91906144f5565b613209919061457e565b6017600082825461321a91906143d2565b925050819055506013546014548261323291906144f5565b61323c919061457e565b6016600082825461324d91906143d2565b9250508190555061334b565b601a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156132b457506000601054115b1561334a576132e160646132d36010548861389a90919063ffffffff16565b61391590919063ffffffff16565b9050601054601254826132f491906144f5565b6132fe919061457e565b6017600082825461330f91906143d2565b925050819055506010546011548261332791906144f5565b613331919061457e565b6016600082825461334291906143d2565b925050819055505b5b60008111156133605761335f873083613489565b5b808561336c919061501f565b94505b61337a878787613489565b505050505b505050565b60008383111582906133cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133c39190613e52565b60405180910390fd5b50600083856133db919061501f565b9050809150509392505050565b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156134f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134f090614c01565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613569576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161356090614c93565b60405180910390fd5b61357483838361395f565b6135df8160405180606001604052806026815260200161537b602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133849092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613672816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461244790919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516137119190613ffe565b60405180910390a3505050565b6000613729306114d9565b9050600060165460175461373d91906143d2565b9050600082148061374e5750600081145b1561375a575050613898565b6014600b5461376991906144f5565b821115613782576014600b5461377f91906144f5565b91505b60006002826017548561379591906144f5565b61379f919061457e565b6137a9919061457e565b905060006137c0828561396490919063ffffffff16565b905060004790506137d0826139ae565b60006137e5824761396490919063ffffffff16565b90506000613810866138026016548561389a90919063ffffffff16565b61391590919063ffffffff16565b905060008183613820919061501f565b9050600060178190555060006016819055506000861180156138425750600081115b1561388f576138518682613beb565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561858260175460405161388693929190615053565b60405180910390a15b50505050505050505b565b6000808314156138ad576000905061390f565b600082846138bb91906144f5565b90508284826138ca919061457e565b1461390a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613901906150fc565b60405180910390fd5b809150505b92915050565b600061395783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613ccc565b905092915050565b505050565b60006139a683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613384565b905092915050565b6000600267ffffffffffffffff8111156139cb576139ca6140ff565b5b6040519080825280602002602001820160405280156139f95781602001602082028036833780820191505090505b5090503081600081518110613a1157613a10614641565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613ab6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ada9190615131565b81600181518110613aee57613aed614641565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613b53307f0000000000000000000000000000000000000000000000000000000000000000846124ad565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613bb5959493929190615257565b600060405180830381600087803b158015613bcf57600080fd5b505af1158015613be3573d6000803e3d6000fd5b505050505050565b613c16307f0000000000000000000000000000000000000000000000000000000000000000846124ad565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613c60611a0d565b426040518863ffffffff1660e01b8152600401613c82969594939291906152b1565b60606040518083038185885af1158015613ca0573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613cc59190615327565b5050505050565b60008083118290613d13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d0a9190613e52565b60405180910390fd5b5060008385613d22919061457e565b9050809150509392505050565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b613d5681613d43565b8114613d6157600080fd5b50565b600081359050613d7381613d4d565b92915050565b60008060408385031215613d9057613d8f613d39565b5b6000613d9e85828601613d64565b9250506020613daf85828601613d64565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613df3578082015181840152602081019050613dd8565b83811115613e02576000848401525b50505050565b6000601f19601f8301169050919050565b6000613e2482613db9565b613e2e8185613dc4565b9350613e3e818560208601613dd5565b613e4781613e08565b840191505092915050565b60006020820190508181036000830152613e6c8184613e19565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613e9f82613e74565b9050919050565b613eaf81613e94565b8114613eba57600080fd5b50565b600081359050613ecc81613ea6565b92915050565b60008060408385031215613ee957613ee8613d39565b5b6000613ef785828601613ebd565b9250506020613f0885828601613d64565b9150509250929050565b60008115159050919050565b613f2781613f12565b82525050565b6000602082019050613f426000830184613f1e565b92915050565b600060208284031215613f5e57613f5d613d39565b5b6000613f6c84828501613ebd565b91505092915050565b6000819050919050565b6000613f9a613f95613f9084613e74565b613f75565b613e74565b9050919050565b6000613fac82613f7f565b9050919050565b6000613fbe82613fa1565b9050919050565b613fce81613fb3565b82525050565b6000602082019050613fe96000830184613fc5565b92915050565b613ff881613d43565b82525050565b60006020820190506140136000830184613fef565b92915050565b60006020828403121561402f5761402e613d39565b5b600061403d84828501613d64565b91505092915050565b60008060006060848603121561405f5761405e613d39565b5b600061406d86828701613ebd565b935050602061407e86828701613ebd565b925050604061408f86828701613d64565b9150509250925092565b600060ff82169050919050565b6140af81614099565b82525050565b60006020820190506140ca60008301846140a6565b92915050565b6140d981613e94565b82525050565b60006020820190506140f460008301846140d0565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61413782613e08565b810181811067ffffffffffffffff82111715614156576141556140ff565b5b80604052505050565b6000614169613d2f565b9050614175828261412e565b919050565b600067ffffffffffffffff821115614195576141946140ff565b5b602082029050602081019050919050565b600080fd5b60006141be6141b98461417a565b61415f565b905080838252602082019050602084028301858111156141e1576141e06141a6565b5b835b8181101561420a57806141f68882613ebd565b8452602084019350506020810190506141e3565b5050509392505050565b600082601f830112614229576142286140fa565b5b81356142398482602086016141ab565b91505092915050565b60006020828403121561425857614257613d39565b5b600082013567ffffffffffffffff81111561427657614275613d3e565b5b61428284828501614214565b91505092915050565b61429481613f12565b811461429f57600080fd5b50565b6000813590506142b18161428b565b92915050565b600080604083850312156142ce576142cd613d39565b5b60006142dc85828601613ebd565b92505060206142ed858286016142a2565b9150509250929050565b6000806040838503121561430e5761430d613d39565b5b600061431c85828601613ebd565b925050602061432d85828601613ebd565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061436d602083613dc4565b915061437882614337565b602082019050919050565b6000602082019050818103600083015261439c81614360565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006143dd82613d43565b91506143e883613d43565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561441d5761441c6143a3565b5b828201905092915050565b7f4d757374206b656570206665657320617420313525206f72206c657373000000600082015250565b600061445e601d83613dc4565b915061446982614428565b602082019050919050565b6000602082019050818103600083015261448d81614451565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806144db57607f821691505b602082108114156144ef576144ee614494565b5b50919050565b600061450082613d43565b915061450b83613d43565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614544576145436143a3565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061458982613d43565b915061459483613d43565b9250826145a4576145a361454f565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b600061460b602f83613dc4565b9150614616826145af565b604082019050919050565b6000602082019050818103600083015261463a816145fe565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061467b82613d43565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156146ae576146ad6143a3565b5b600182019050919050565b7f4d757374206b656570206665657320617420313025206f72206c657373000000600082015250565b60006146ef601d83613dc4565b91506146fa826146b9565b602082019050919050565b6000602082019050818103600083015261471e816146e2565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614781603983613dc4565b915061478c82614725565b604082019050919050565b600060208201905081810360008301526147b081614774565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614813602483613dc4565b915061481e826147b7565b604082019050919050565b6000602082019050818103600083015261484281614806565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006148a5603583613dc4565b91506148b082614849565b604082019050919050565b600060208201905081810360008301526148d481614898565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614937603483613dc4565b9150614942826148db565b604082019050919050565b600060208201905081810360008301526149668161492a565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006149c9602683613dc4565b91506149d48261496d565b604082019050919050565b600060208201905081810360008301526149f8816149bc565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614a35601b83613dc4565b9150614a40826149ff565b602082019050919050565b60006020820190508181036000830152614a6481614a28565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614ac7602483613dc4565b9150614ad282614a6b565b604082019050919050565b60006020820190508181036000830152614af681614aba565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614b59602283613dc4565b9150614b6482614afd565b604082019050919050565b60006020820190508181036000830152614b8881614b4c565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614beb602583613dc4565b9150614bf682614b8f565b604082019050919050565b60006020820190508181036000830152614c1a81614bde565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614c7d602383613dc4565b9150614c8882614c21565b604082019050919050565b60006020820190508181036000830152614cac81614c70565b9050919050565b7f596f7572206164647265737320686173206265656e206d61726b65642061732060008201527f6120736e697065722c20796f752061726520756e61626c6520746f207472616e60208201527f73666572206f7220737761702e00000000000000000000000000000000000000604082015250565b6000614d35604d83613dc4565b9150614d4082614cb3565b606082019050919050565b60006020820190508181036000830152614d6481614d28565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614da1601683613dc4565b9150614dac82614d6b565b602082019050919050565b60006020820190508181036000830152614dd081614d94565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000614e59604983613dc4565b9150614e6482614dd7565b606082019050919050565b60006020820190508181036000830152614e8881614e4c565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614eeb603583613dc4565b9150614ef682614e8f565b604082019050919050565b60006020820190508181036000830152614f1a81614ede565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614f57601383613dc4565b9150614f6282614f21565b602082019050919050565b60006020820190508181036000830152614f8681614f4a565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000614fe9603683613dc4565b9150614ff482614f8d565b604082019050919050565b6000602082019050818103600083015261501881614fdc565b9050919050565b600061502a82613d43565b915061503583613d43565b925082821015615048576150476143a3565b5b828203905092915050565b60006060820190506150686000830186613fef565b6150756020830185613fef565b6150826040830184613fef565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006150e6602183613dc4565b91506150f18261508a565b604082019050919050565b60006020820190508181036000830152615115816150d9565b9050919050565b60008151905061512b81613ea6565b92915050565b60006020828403121561514757615146613d39565b5b60006151558482850161511c565b91505092915050565b6000819050919050565b600061518361517e6151798461515e565b613f75565b613d43565b9050919050565b61519381615168565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6151ce81613e94565b82525050565b60006151e083836151c5565b60208301905092915050565b6000602082019050919050565b600061520482615199565b61520e81856151a4565b9350615219836151b5565b8060005b8381101561524a57815161523188826151d4565b975061523c836151ec565b92505060018101905061521d565b5085935050505092915050565b600060a08201905061526c6000830188613fef565b615279602083018761518a565b818103604083015261528b81866151f9565b905061529a60608301856140d0565b6152a76080830184613fef565b9695505050505050565b600060c0820190506152c660008301896140d0565b6152d36020830188613fef565b6152e0604083018761518a565b6152ed606083018661518a565b6152fa60808301856140d0565b61530760a0830184613fef565b979650505050505050565b60008151905061532181613d4d565b92915050565b6000806000606084860312156153405761533f613d39565b5b600061534e86828701615312565b935050602061535f86828701615312565b925050604061537086828701615312565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122032d87502df52536985a971d94daef7bbf20f53fe8742df94c5b3dd092f650abe64736f6c634300080b0033

Deployed Bytecode

0x60806040526004361061026b5760003560e01c80637571336a11610144578063c18bc195116100b6578063dd62ed3e1161007a578063dd62ed3e1461094f578063e2f456051461098c578063e884f260146109b7578063f25f4b56146109e2578063f2fde38b14610a0d578063f8b45b0514610a3657610272565b8063c18bc19514610868578063c876d0b914610891578063c8c8ebe4146108bc578063d257b34f146108e7578063d85ba0631461092457610272565b80639a7a23d6116101085780639a7a23d614610734578063a457c2d71461075d578063a9059cbb1461079a578063b62496f5146107d7578063bbc0c74214610814578063c02466681461083f57610272565b80637571336a14610675578063892ba4081461069e5780638a8c523c146106c75780638da5cb5b146106de57806395d89b411461070957610272565b8063476343ee116101dd57806366718524116101a1578063667185241461057957806366ca9b83146105a25780636a486a8e146105cb57806370a08231146105f6578063715018a614610633578063751039fc1461064a57610272565b8063476343ee146104a657806349bd5a5e146104bd5780634a62bb65146104e85780634fbee193146105135780635e80148e1461055057610272565b80631694505e1161022f5780631694505e1461038257806318160ddd146103ad578063203e727e146103d857806323b872dd14610401578063313ce5671461043e578063395093511461046957610272565b806302dbd8f81461027757806306fdde03146102a0578063095ea7b3146102cb5780630f3a325f1461030857806310d5de531461034557610272565b3661027257005b600080fd5b34801561028357600080fd5b5061029e60048036038101906102999190613d79565b610a61565b005b3480156102ac57600080fd5b506102b5610b66565b6040516102c29190613e52565b60405180910390f35b3480156102d757600080fd5b506102f260048036038101906102ed9190613ed2565b610bf8565b6040516102ff9190613f2d565b60405180910390f35b34801561031457600080fd5b5061032f600480360381019061032a9190613f48565b610c16565b60405161033c9190613f2d565b60405180910390f35b34801561035157600080fd5b5061036c60048036038101906103679190613f48565b610c6c565b6040516103799190613f2d565b60405180910390f35b34801561038e57600080fd5b50610397610c8c565b6040516103a49190613fd4565b60405180910390f35b3480156103b957600080fd5b506103c2610cb0565b6040516103cf9190613ffe565b60405180910390f35b3480156103e457600080fd5b506103ff60048036038101906103fa9190614019565b610cba565b005b34801561040d57600080fd5b5061042860048036038101906104239190614046565b610ddc565b6040516104359190613f2d565b60405180910390f35b34801561044a57600080fd5b50610453610eb5565b60405161046091906140b5565b60405180910390f35b34801561047557600080fd5b50610490600480360381019061048b9190613ed2565b610ebe565b60405161049d9190613f2d565b60405180910390f35b3480156104b257600080fd5b506104bb610f71565b005b3480156104c957600080fd5b506104d2610fdc565b6040516104df91906140df565b60405180910390f35b3480156104f457600080fd5b506104fd611000565b60405161050a9190613f2d565b60405180910390f35b34801561051f57600080fd5b5061053a60048036038101906105359190613f48565b611013565b6040516105479190613f2d565b60405180910390f35b34801561055c57600080fd5b5061057760048036038101906105729190614242565b611069565b005b34801561058557600080fd5b506105a0600480360381019061059b9190613f48565b611277565b005b3480156105ae57600080fd5b506105c960048036038101906105c49190613d79565b6113ce565b005b3480156105d757600080fd5b506105e06114d3565b6040516105ed9190613ffe565b60405180910390f35b34801561060257600080fd5b5061061d60048036038101906106189190613f48565b6114d9565b60405161062a9190613ffe565b60405180910390f35b34801561063f57600080fd5b50610648611521565b005b34801561065657600080fd5b5061065f611679565b60405161066c9190613f2d565b60405180910390f35b34801561068157600080fd5b5061069c600480360381019061069791906142b7565b611734565b005b3480156106aa57600080fd5b506106c560048036038101906106c09190614242565b611826565b005b3480156106d357600080fd5b506106dc611952565b005b3480156106ea57600080fd5b506106f3611a0d565b60405161070091906140df565b60405180910390f35b34801561071557600080fd5b5061071e611a37565b60405161072b9190613e52565b60405180910390f35b34801561074057600080fd5b5061075b600480360381019061075691906142b7565b611ac9565b005b34801561076957600080fd5b50610784600480360381019061077f9190613ed2565b611bfd565b6040516107919190613f2d565b60405180910390f35b3480156107a657600080fd5b506107c160048036038101906107bc9190613ed2565b611cca565b6040516107ce9190613f2d565b60405180910390f35b3480156107e357600080fd5b506107fe60048036038101906107f99190613f48565b611ce8565b60405161080b9190613f2d565b60405180910390f35b34801561082057600080fd5b50610829611d08565b6040516108369190613f2d565b60405180910390f35b34801561084b57600080fd5b50610866600480360381019061086191906142b7565b611d1b565b005b34801561087457600080fd5b5061088f600480360381019061088a9190614019565b611e5b565b005b34801561089d57600080fd5b506108a6611f7d565b6040516108b39190613f2d565b60405180910390f35b3480156108c857600080fd5b506108d1611f90565b6040516108de9190613ffe565b60405180910390f35b3480156108f357600080fd5b5061090e60048036038101906109099190614019565b611f96565b60405161091b9190613f2d565b60405180910390f35b34801561093057600080fd5b50610939612106565b6040516109469190613ffe565b60405180910390f35b34801561095b57600080fd5b50610976600480360381019061097191906142f7565b61210c565b6040516109839190613ffe565b60405180910390f35b34801561099857600080fd5b506109a1612193565b6040516109ae9190613ffe565b60405180910390f35b3480156109c357600080fd5b506109cc612199565b6040516109d99190613f2d565b60405180910390f35b3480156109ee57600080fd5b506109f7612254565b604051610a0491906140df565b60405180910390f35b348015610a1957600080fd5b50610a346004803603810190610a2f9190613f48565b61227a565b005b348015610a4257600080fd5b50610a4b612441565b604051610a589190613ffe565b60405180910390f35b610a696124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610af8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aef90614383565b60405180910390fd5b8160148190555080601581905550601554601454610b1691906143d2565b601381905550600f6013541115610b62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5990614474565b60405180910390fd5b5050565b606060038054610b75906144c3565b80601f0160208091040260200160405190810160405280929190818152602001828054610ba1906144c3565b8015610bee5780601f10610bc357610100808354040283529160200191610bee565b820191906000526020600020905b815481529060010190602001808311610bd157829003601f168201915b5050505050905090565b6000610c0c610c056124a5565b84846124ad565b6001905092915050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60196020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b610cc26124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4890614383565b60405180910390fd5b633b9aca006103e86001610d63610cb0565b610d6d91906144f5565b610d77919061457e565b610d81919061457e565b811015610dc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dba90614621565b60405180910390fd5b633b9aca0081610dd391906144f5565b600a8190555050565b6000610de9848484612678565b610eaa84610df56124a5565b610ea5856040518060600160405280602881526020016153a160289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610e5b6124a5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133849092919063ffffffff16565b6124ad565b600190509392505050565b60006009905090565b6000610f67610ecb6124a5565b84610f628560016000610edc6124a5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461244790919063ffffffff16565b6124ad565b6001905092915050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610fd9573d6000803e3d6000fd5b50565b7f0000000000000000000000004369548931d86541c853357bdde5390d90a4482381565b600d60009054906101000a900460ff1681565b6000601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6110716124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611100576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f790614383565b60405180910390fd5b60005b8151811015611273577f0000000000000000000000004369548931d86541c853357bdde5390d90a4482373ffffffffffffffffffffffffffffffffffffffff1682828151811061115657611155614641565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff16141580156111e857507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168282815181106111c7576111c6614641565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614155b156112605760016006600084848151811061120657611205614641565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b808061126b90614670565b915050611103565b5050565b61127f6124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461130e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130590614383565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f5deb5ef622431f0df5a39b72dd556892f68ba42aa0f3aaf0800e166ce866492860405160405180910390a380600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6113d66124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611465576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145c90614383565b60405180910390fd5b816011819055508060128190555060125460115461148391906143d2565b601081905550600a60105411156114cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c690614705565b60405180910390fd5b5050565b60135481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6115296124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115af90614383565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006116836124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611712576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170990614383565b60405180910390fd5b6000600d60006101000a81548160ff0219169083151502179055506001905090565b61173c6124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c290614383565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61182e6124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b490614383565b60405180910390fd5b60005b815181101561194e576000600660008484815181106118e2576118e1614641565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061194690614670565b9150506118c0565b5050565b61195a6124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e090614383565b60405180910390fd5b6001600d60016101000a81548160ff02191690831515021790555042600881905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054611a46906144c3565b80601f0160208091040260200160405190810160405280929190818152602001828054611a72906144c3565b8015611abf5780601f10611a9457610100808354040283529160200191611abf565b820191906000526020600020905b815481529060010190602001808311611aa257829003601f168201915b5050505050905090565b611ad16124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5790614383565b60405180910390fd5b7f0000000000000000000000004369548931d86541c853357bdde5390d90a4482373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611bef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be690614797565b60405180910390fd5b611bf982826133e8565b5050565b6000611cc0611c0a6124a5565b84611cbb856040518060600160405280602581526020016153c96025913960016000611c346124a5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133849092919063ffffffff16565b6124ad565b6001905092915050565b6000611cde611cd76124a5565b8484612678565b6001905092915050565b601a6020528060005260406000206000915054906101000a900460ff1681565b600d60019054906101000a900460ff1681565b611d236124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611db2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da990614383565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611e4f9190613f2d565b60405180910390a25050565b611e636124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ef2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee990614383565b60405180910390fd5b633b9aca006103e86005611f04610cb0565b611f0e91906144f5565b611f18919061457e565b611f22919061457e565b811015611f64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5b90614829565b60405180910390fd5b633b9aca0081611f7491906144f5565b600c8190555050565b600f60009054906101000a900460ff1681565b600a5481565b6000611fa06124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461202f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202690614383565b60405180910390fd5b620186a0600161203d610cb0565b61204791906144f5565b612051919061457e565b821015612093576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208a906148bb565b60405180910390fd5b6103e860056120a0610cb0565b6120aa91906144f5565b6120b4919061457e565b8211156120f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ed9061494d565b60405180910390fd5b81600b8190555060019050919050565b60105481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600b5481565b60006121a36124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612232576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222990614383565b60405180910390fd5b6000600f60006101000a81548160ff0219169083151502179055506001905090565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6122826124a5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612311576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230890614383565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612381576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612378906149df565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600c5481565b600080828461245691906143d2565b90508381101561249b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249290614a4b565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561251d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251490614add565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561258d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258490614b6f565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161266b9190613ffe565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156126e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126df90614c01565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612758576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274f90614c93565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156127e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127dc90614d4b565b60405180910390fd5b60008114156127ff576127fa83836000613489565b61337f565b600854421415612862576001600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b600d60009054906101000a900460ff1615612f255761287f611a0d565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156128ed57506128bd611a0d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129265750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612960575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129795750600760009054906101000a900460ff16155b15612f2457600d60019054906101000a900460ff16612a7357601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612a335750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612a72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6990614db7565b60405180910390fd5b5b600f60009054906101000a900460ff1615612c3b57612a90611a0d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612b1757507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b6f57507f0000000000000000000000004369548931d86541c853357bdde5390d90a4482373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612c3a5743600e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612bf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bec90614e6f565b60405180910390fd5b43600e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612cde5750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d8557600a54811115612d28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1f90614f01565b60405180910390fd5b600c54612d34836114d9565b82612d3f91906143d2565b1115612d80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7790614f6d565b60405180910390fd5b612f23565b601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e285750601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e7757600a54811115612e72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e6990614fff565b60405180910390fd5b612f22565b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612f2157600c54612ed4836114d9565b82612edf91906143d2565b1115612f20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f1790614f6d565b60405180910390fd5b5b5b5b5b5b6000612f30306114d9565b90506000600b548210159050808015612f565750600760009054906101000a900460ff16155b8015612fac5750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156130025750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156130585750601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561309c576001600760006101000a81548160ff02191690831515021790555061308061371e565b6000600760006101000a81548160ff0219169083151502179055505b6000600760009054906101000a900460ff16159050601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806131525750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561315c57600090505b6000811561336f57601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156131bf57506000601354115b15613259576131ec60646131de6013548861389a90919063ffffffff16565b61391590919063ffffffff16565b9050601354601554826131ff91906144f5565b613209919061457e565b6017600082825461321a91906143d2565b925050819055506013546014548261323291906144f5565b61323c919061457e565b6016600082825461324d91906143d2565b9250508190555061334b565b601a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156132b457506000601054115b1561334a576132e160646132d36010548861389a90919063ffffffff16565b61391590919063ffffffff16565b9050601054601254826132f491906144f5565b6132fe919061457e565b6017600082825461330f91906143d2565b925050819055506010546011548261332791906144f5565b613331919061457e565b6016600082825461334291906143d2565b925050819055505b5b60008111156133605761335f873083613489565b5b808561336c919061501f565b94505b61337a878787613489565b505050505b505050565b60008383111582906133cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133c39190613e52565b60405180910390fd5b50600083856133db919061501f565b9050809150509392505050565b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156134f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134f090614c01565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613569576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161356090614c93565b60405180910390fd5b61357483838361395f565b6135df8160405180606001604052806026815260200161537b602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133849092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613672816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461244790919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516137119190613ffe565b60405180910390a3505050565b6000613729306114d9565b9050600060165460175461373d91906143d2565b9050600082148061374e5750600081145b1561375a575050613898565b6014600b5461376991906144f5565b821115613782576014600b5461377f91906144f5565b91505b60006002826017548561379591906144f5565b61379f919061457e565b6137a9919061457e565b905060006137c0828561396490919063ffffffff16565b905060004790506137d0826139ae565b60006137e5824761396490919063ffffffff16565b90506000613810866138026016548561389a90919063ffffffff16565b61391590919063ffffffff16565b905060008183613820919061501f565b9050600060178190555060006016819055506000861180156138425750600081115b1561388f576138518682613beb565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561858260175460405161388693929190615053565b60405180910390a15b50505050505050505b565b6000808314156138ad576000905061390f565b600082846138bb91906144f5565b90508284826138ca919061457e565b1461390a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613901906150fc565b60405180910390fd5b809150505b92915050565b600061395783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613ccc565b905092915050565b505050565b60006139a683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613384565b905092915050565b6000600267ffffffffffffffff8111156139cb576139ca6140ff565b5b6040519080825280602002602001820160405280156139f95781602001602082028036833780820191505090505b5090503081600081518110613a1157613a10614641565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613ab6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ada9190615131565b81600181518110613aee57613aed614641565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613b53307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846124ad565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613bb5959493929190615257565b600060405180830381600087803b158015613bcf57600080fd5b505af1158015613be3573d6000803e3d6000fd5b505050505050565b613c16307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846124ad565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613c60611a0d565b426040518863ffffffff1660e01b8152600401613c82969594939291906152b1565b60606040518083038185885af1158015613ca0573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613cc59190615327565b5050505050565b60008083118290613d13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d0a9190613e52565b60405180910390fd5b5060008385613d22919061457e565b9050809150509392505050565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b613d5681613d43565b8114613d6157600080fd5b50565b600081359050613d7381613d4d565b92915050565b60008060408385031215613d9057613d8f613d39565b5b6000613d9e85828601613d64565b9250506020613daf85828601613d64565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613df3578082015181840152602081019050613dd8565b83811115613e02576000848401525b50505050565b6000601f19601f8301169050919050565b6000613e2482613db9565b613e2e8185613dc4565b9350613e3e818560208601613dd5565b613e4781613e08565b840191505092915050565b60006020820190508181036000830152613e6c8184613e19565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613e9f82613e74565b9050919050565b613eaf81613e94565b8114613eba57600080fd5b50565b600081359050613ecc81613ea6565b92915050565b60008060408385031215613ee957613ee8613d39565b5b6000613ef785828601613ebd565b9250506020613f0885828601613d64565b9150509250929050565b60008115159050919050565b613f2781613f12565b82525050565b6000602082019050613f426000830184613f1e565b92915050565b600060208284031215613f5e57613f5d613d39565b5b6000613f6c84828501613ebd565b91505092915050565b6000819050919050565b6000613f9a613f95613f9084613e74565b613f75565b613e74565b9050919050565b6000613fac82613f7f565b9050919050565b6000613fbe82613fa1565b9050919050565b613fce81613fb3565b82525050565b6000602082019050613fe96000830184613fc5565b92915050565b613ff881613d43565b82525050565b60006020820190506140136000830184613fef565b92915050565b60006020828403121561402f5761402e613d39565b5b600061403d84828501613d64565b91505092915050565b60008060006060848603121561405f5761405e613d39565b5b600061406d86828701613ebd565b935050602061407e86828701613ebd565b925050604061408f86828701613d64565b9150509250925092565b600060ff82169050919050565b6140af81614099565b82525050565b60006020820190506140ca60008301846140a6565b92915050565b6140d981613e94565b82525050565b60006020820190506140f460008301846140d0565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61413782613e08565b810181811067ffffffffffffffff82111715614156576141556140ff565b5b80604052505050565b6000614169613d2f565b9050614175828261412e565b919050565b600067ffffffffffffffff821115614195576141946140ff565b5b602082029050602081019050919050565b600080fd5b60006141be6141b98461417a565b61415f565b905080838252602082019050602084028301858111156141e1576141e06141a6565b5b835b8181101561420a57806141f68882613ebd565b8452602084019350506020810190506141e3565b5050509392505050565b600082601f830112614229576142286140fa565b5b81356142398482602086016141ab565b91505092915050565b60006020828403121561425857614257613d39565b5b600082013567ffffffffffffffff81111561427657614275613d3e565b5b61428284828501614214565b91505092915050565b61429481613f12565b811461429f57600080fd5b50565b6000813590506142b18161428b565b92915050565b600080604083850312156142ce576142cd613d39565b5b60006142dc85828601613ebd565b92505060206142ed858286016142a2565b9150509250929050565b6000806040838503121561430e5761430d613d39565b5b600061431c85828601613ebd565b925050602061432d85828601613ebd565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061436d602083613dc4565b915061437882614337565b602082019050919050565b6000602082019050818103600083015261439c81614360565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006143dd82613d43565b91506143e883613d43565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561441d5761441c6143a3565b5b828201905092915050565b7f4d757374206b656570206665657320617420313525206f72206c657373000000600082015250565b600061445e601d83613dc4565b915061446982614428565b602082019050919050565b6000602082019050818103600083015261448d81614451565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806144db57607f821691505b602082108114156144ef576144ee614494565b5b50919050565b600061450082613d43565b915061450b83613d43565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614544576145436143a3565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061458982613d43565b915061459483613d43565b9250826145a4576145a361454f565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b600061460b602f83613dc4565b9150614616826145af565b604082019050919050565b6000602082019050818103600083015261463a816145fe565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061467b82613d43565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156146ae576146ad6143a3565b5b600182019050919050565b7f4d757374206b656570206665657320617420313025206f72206c657373000000600082015250565b60006146ef601d83613dc4565b91506146fa826146b9565b602082019050919050565b6000602082019050818103600083015261471e816146e2565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614781603983613dc4565b915061478c82614725565b604082019050919050565b600060208201905081810360008301526147b081614774565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614813602483613dc4565b915061481e826147b7565b604082019050919050565b6000602082019050818103600083015261484281614806565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006148a5603583613dc4565b91506148b082614849565b604082019050919050565b600060208201905081810360008301526148d481614898565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614937603483613dc4565b9150614942826148db565b604082019050919050565b600060208201905081810360008301526149668161492a565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006149c9602683613dc4565b91506149d48261496d565b604082019050919050565b600060208201905081810360008301526149f8816149bc565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614a35601b83613dc4565b9150614a40826149ff565b602082019050919050565b60006020820190508181036000830152614a6481614a28565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614ac7602483613dc4565b9150614ad282614a6b565b604082019050919050565b60006020820190508181036000830152614af681614aba565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614b59602283613dc4565b9150614b6482614afd565b604082019050919050565b60006020820190508181036000830152614b8881614b4c565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614beb602583613dc4565b9150614bf682614b8f565b604082019050919050565b60006020820190508181036000830152614c1a81614bde565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614c7d602383613dc4565b9150614c8882614c21565b604082019050919050565b60006020820190508181036000830152614cac81614c70565b9050919050565b7f596f7572206164647265737320686173206265656e206d61726b65642061732060008201527f6120736e697065722c20796f752061726520756e61626c6520746f207472616e60208201527f73666572206f7220737761702e00000000000000000000000000000000000000604082015250565b6000614d35604d83613dc4565b9150614d4082614cb3565b606082019050919050565b60006020820190508181036000830152614d6481614d28565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614da1601683613dc4565b9150614dac82614d6b565b602082019050919050565b60006020820190508181036000830152614dd081614d94565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000614e59604983613dc4565b9150614e6482614dd7565b606082019050919050565b60006020820190508181036000830152614e8881614e4c565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614eeb603583613dc4565b9150614ef682614e8f565b604082019050919050565b60006020820190508181036000830152614f1a81614ede565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614f57601383613dc4565b9150614f6282614f21565b602082019050919050565b60006020820190508181036000830152614f8681614f4a565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000614fe9603683613dc4565b9150614ff482614f8d565b604082019050919050565b6000602082019050818103600083015261501881614fdc565b9050919050565b600061502a82613d43565b915061503583613d43565b925082821015615048576150476143a3565b5b828203905092915050565b60006060820190506150686000830186613fef565b6150756020830185613fef565b6150826040830184613fef565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006150e6602183613dc4565b91506150f18261508a565b604082019050919050565b60006020820190508181036000830152615115816150d9565b9050919050565b60008151905061512b81613ea6565b92915050565b60006020828403121561514757615146613d39565b5b60006151558482850161511c565b91505092915050565b6000819050919050565b600061518361517e6151798461515e565b613f75565b613d43565b9050919050565b61519381615168565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6151ce81613e94565b82525050565b60006151e083836151c5565b60208301905092915050565b6000602082019050919050565b600061520482615199565b61520e81856151a4565b9350615219836151b5565b8060005b8381101561524a57815161523188826151d4565b975061523c836151ec565b92505060018101905061521d565b5085935050505092915050565b600060a08201905061526c6000830188613fef565b615279602083018761518a565b818103604083015261528b81866151f9565b905061529a60608301856140d0565b6152a76080830184613fef565b9695505050505050565b600060c0820190506152c660008301896140d0565b6152d36020830188613fef565b6152e0604083018761518a565b6152ed606083018661518a565b6152fa60808301856140d0565b61530760a0830184613fef565b979650505050505050565b60008151905061532181613d4d565b92915050565b6000806000606084860312156153405761533f613d39565b5b600061534e86828701615312565b935050602061535f86828701615312565b925050604061537086828701615312565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122032d87502df52536985a971d94daef7bbf20f53fe8742df94c5b3dd092f650abe64736f6c634300080b0033

Deployed Bytecode Sourcemap

17701:14450:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23586:309;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5120:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6033:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25349:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18903:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17776:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5440:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22657:230;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6210:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5340:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6573:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32009:102;;;;;;;;;;;;;:::i;:::-;;17834:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18156:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24710:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24847:294;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24545:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23272:302;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18583:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5556:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11075:148;;;;;;;;;;;;;:::i;:::-;;21867:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23116:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25153:184;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21688:123;;;;;;;;;;;;;:::i;:::-;;10861:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5228:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24093:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6799:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5691:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19125:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18196:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23903:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22895:209;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18419:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18033:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22263:382;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18467:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5874:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18075:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22053:135;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17996:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11231:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18115:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23586:309;10998:12;:10;:12::i;:::-;10988:22;;:6;;;;;;;;;;;:22;;;10980:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23700:10:::1;23682:15;:28;;;;23741:12;23721:17;:32;;;;23798:17;;23780:15;;:35;;;;:::i;:::-;23764:13;:51;;;;23851:2;23834:13;;:19;;23826:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;23586:309:::0;;:::o;5120:100::-;5174:13;5207:5;5200:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5120:100;:::o;6033:169::-;6116:4;6133:39;6142:12;:10;:12::i;:::-;6156:7;6165:6;6133:8;:39::i;:::-;6190:4;6183:11;;6033:169;;;;:::o;25349:100::-;25402:4;25426:9;:15;25436:4;25426:15;;;;;;;;;;;;;;;;;;;;;;;;;25419:22;;25349:100;;;:::o;18903:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;17776:51::-;;;:::o;5440:108::-;5501:7;5528:12;;5521:19;;5440:108;:::o;22657:230::-;10998:12;:10;:12::i;:::-;10988:22;;:6;;;;;;;;;;;:22;;;10980:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22778:3:::1;22770:4;22766:1;22750:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;22749:32;;;;:::i;:::-;22739:6;:42;;22731:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;22876:3;22867:6;:12;;;;:::i;:::-;22844:20;:35;;;;22657:230:::0;:::o;6210:355::-;6350:4;6367:36;6377:6;6385:9;6396:6;6367:9;:36::i;:::-;6414:121;6423:6;6431:12;:10;:12::i;:::-;6445:89;6483:6;6445:89;;;;;;;;;;;;;;;;;:11;:19;6457:6;6445:19;;;;;;;;;;;;;;;:33;6465:12;:10;:12::i;:::-;6445:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;6414:8;:121::i;:::-;6553:4;6546:11;;6210:355;;;;;:::o;5340:92::-;5398:5;5423:1;5416:8;;5340:92;:::o;6573:218::-;6661:4;6678:83;6687:12;:10;:12::i;:::-;6701:7;6710:50;6749:10;6710:11;:25;6722:12;:10;:12::i;:::-;6710:25;;;;;;;;;;;;;;;:34;6736:7;6710:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;6678:8;:83::i;:::-;6779:4;6772:11;;6573:218;;;;:::o;32009:102::-;32061:9;;;;;;;;;;;32053:27;;:50;32081:21;32053:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32009:102::o;17834:38::-;;;:::o;18156:33::-;;;;;;;;;;;;;:::o;24710:125::-;24775:4;24799:19;:28;24819:7;24799:28;;;;;;;;;;;;;;;;;;;;;;;;;24792:35;;24710:125;;;:::o;24847:294::-;10998:12;:10;:12::i;:::-;10988:22;;:6;;;;;;;;;;;:22;;;10980:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24929:6:::1;24924:210;24945:8;:15;24941:1;:19;24924:210;;;25001:13;24986:28;;:8;24995:1;24986:11;;;;;;;;:::i;:::-;;;;;;;;:28;;;;:71;;;;;25041:15;25018:39;;:8;25027:1;25018:11;;;;;;;;:::i;:::-;;;;;;;;:39;;;;24986:71;24982:141;;;25103:4;25078:9;:22;25088:8;25097:1;25088:11;;;;;;;;:::i;:::-;;;;;;;;25078:22;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;24982:141;24962:3;;;;;:::i;:::-;;;;24924:210;;;;24847:294:::0;:::o;24545:157::-;10998:12;:10;:12::i;:::-;10988:22;;:6;;;;;;;;;;;:22;;;10980:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24652:9:::1;;;;;;;;;;;24624:38;;24641:9;24624:38;;;;;;;;;;;;24685:9;24673;;:21;;;;;;;;;;;;;;;;;;24545:157:::0;:::o;23272:302::-;10998:12;:10;:12::i;:::-;10988:22;;:6;;;;;;;;;;;:22;;;10980:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23384:10:::1;23367:14;:27;;;;23424:12;23405:16;:31;;;;23479:16;;23462:14;;:33;;;;:::i;:::-;23447:12;:48;;;;23530:2;23514:12;;:18;;23506:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;23272:302:::0;;:::o;18583:28::-;;;;:::o;5556:127::-;5630:7;5657:9;:18;5667:7;5657:18;;;;;;;;;;;;;;;;5650:25;;5556:127;;;:::o;11075:148::-;10998:12;:10;:12::i;:::-;10988:22;;:6;;;;;;;;;;;:22;;;10980:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;11182:1:::1;11145:40;;11166:6;;;;;;;;;;;11145:40;;;;;;;;;;;;11213:1;11196:6;;:19;;;;;;;;;;;;;;;;;;11075:148::o:0;21867:121::-;21919:4;10998:12;:10;:12::i;:::-;10988:22;;:6;;;;;;;;;;;:22;;;10980:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21953:5:::1;21936:14;;:22;;;;;;;;;;;;;;;;;;21976:4;21969:11;;21867:121:::0;:::o;23116:144::-;10998:12;:10;:12::i;:::-;10988:22;;:6;;;;;;;;;;;:22;;;10980:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23248:4:::1;23206:31;:39;23238:6;23206:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;23116:144:::0;;:::o;25153:184::-;10998:12;:10;:12::i;:::-;10988:22;;:6;;;;;;;;;;;:22;;;10980:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25235:6:::1;25230:100;25251:8;:15;25247:1;:19;25230:100;;;25313:5;25288:9;:22;25298:8;25307:1;25298:11;;;;;;;;:::i;:::-;;;;;;;;25288:22;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;25268:3;;;;;:::i;:::-;;;;25230:100;;;;25153:184:::0;:::o;21688:123::-;10998:12;:10;:12::i;:::-;10988:22;;:6;;;;;;;;;;;:22;;;10980:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21759:4:::1;21743:13;;:20;;;;;;;;;;;;;;;;;;21788:15;21774:11;:29;;;;21688:123::o:0;10861:79::-;10899:7;10926:6;;;;;;;;;;;10919:13;;10861:79;:::o;5228:104::-;5284:13;5317:7;5310:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5228:104;:::o;24093:244::-;10998:12;:10;:12::i;:::-;10988:22;;:6;;;;;;;;;;;:22;;;10980:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24200:13:::1;24192:21;;:4;:21;;;;24184:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;24288:41;24317:4;24323:5;24288:28;:41::i;:::-;24093:244:::0;;:::o;6799:269::-;6892:4;6909:129;6918:12;:10;:12::i;:::-;6932:7;6941:96;6980:15;6941:96;;;;;;;;;;;;;;;;;:11;:25;6953:12;:10;:12::i;:::-;6941:25;;;;;;;;;;;;;;;:34;6967:7;6941:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;6909:8;:129::i;:::-;7056:4;7049:11;;6799:269;;;;:::o;5691:175::-;5777:4;5794:42;5804:12;:10;:12::i;:::-;5818:9;5829:6;5794:9;:42::i;:::-;5854:4;5847:11;;5691:175;;;;:::o;19125:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;18196:32::-;;;;;;;;;;;;;:::o;23903:182::-;10998:12;:10;:12::i;:::-;10988:22;;:6;;;;;;;;;;;:22;;;10980:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24019:8:::1;23988:19;:28;24008:7;23988:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;24059:7;24043:34;;;24068:8;24043:34;;;;;;:::i;:::-;;;;;;;;23903:182:::0;;:::o;22895:209::-;10998:12;:10;:12::i;:::-;10988:22;;:6;;;;;;;;;;;:22;;;10980:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23017:3:::1;23011:4;23007:1;22991:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;22990:30;;;;:::i;:::-;22980:6;:40;;22972:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;23093:3;23084:6;:12;;;;:::i;:::-;23072:9;:24;;;;22895:209:::0;:::o;18419:39::-;;;;;;;;;;;;;:::o;18033:35::-;;;;:::o;22263:382::-;22344:4;10998:12;:10;:12::i;:::-;10988:22;;:6;;;;;;;;;;;:22;;;10980:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22401:6:::1;22397:1;22381:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:26;;;;:::i;:::-;22368:9;:39;;22360:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;22516:4;22512:1;22496:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;22483:9;:37;;22475:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;22608:9;22587:18;:30;;;;22634:4;22627:11;;22263:382:::0;;;:::o;18467:27::-;;;;:::o;5874:151::-;5963:7;5990:11;:18;6002:5;5990:18;;;;;;;;;;;;;;;:27;6009:7;5990:27;;;;;;;;;;;;;;;;5983:34;;5874:151;;;;:::o;18075:33::-;;;;:::o;22053:135::-;22113:4;10998:12;:10;:12::i;:::-;10988:22;;:6;;;;;;;;;;;:22;;;10980:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22153:5:::1;22130:20;;:28;;;;;;;;;;;;;;;;;;22176:4;22169:11;;22053:135:::0;:::o;17996:24::-;;;;;;;;;;;;;:::o;11231:244::-;10998:12;:10;:12::i;:::-;10988:22;;:6;;;;;;;;;;;:22;;;10980:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;11340:1:::1;11320:22;;:8;:22;;;;11312:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;11430:8;11401:38;;11422:6;;;;;;;;;;;11401:38;;;;;;;;;;;;11459:8;11450:6;;:17;;;;;;;;;;;;;;;;;;11231:244:::0;:::o;18115:24::-;;;;:::o;9013:181::-;9071:7;9091:9;9107:1;9103;:5;;;;:::i;:::-;9091:17;;9132:1;9127;:6;;9119:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;9185:1;9178:8;;;9013:181;;;;:::o;289:98::-;342:7;369:10;362:17;;289:98;:::o;8469:380::-;8622:1;8605:19;;:5;:19;;;;8597:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8703:1;8684:21;;:7;:21;;;;8676:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8787:6;8757:11;:18;8769:5;8757:18;;;;;;;;;;;;;;;:27;8776:7;8757:27;;;;;;;;;;;;;;;:36;;;;8825:7;8809:32;;8818:5;8809:32;;;8834:6;8809:32;;;;;;:::i;:::-;;;;;;;;8469:380;;;:::o;25457:4123::-;25605:1;25589:18;;:4;:18;;;;25581:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25682:1;25668:16;;:2;:16;;;;25660:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;25744:9;:15;25754:4;25744:15;;;;;;;;;;;;;;;;;;;;;;;;;25743:16;25735:106;;;;;;;;;;;;:::i;:::-;;;;;;;;;25877:1;25867:6;:11;25863:93;;;25895:28;25911:4;25917:2;25921:1;25895:15;:28::i;:::-;25938:7;;25863:93;25999:11;;25980:15;:30;25976:56;;;26028:4;26012:9;:13;26022:2;26012:13;;;;;;;;;;;;;;;;:20;;;;;;;;;;;;;;;;;;25976:56;26057:14;;;;;;;;;;;26053:1838;;;26118:7;:5;:7::i;:::-;26110:15;;:4;:15;;;;:49;;;;;26152:7;:5;:7::i;:::-;26146:13;;:2;:13;;;;26110:49;:86;;;;;26194:1;26180:16;;:2;:16;;;;26110:86;:128;;;;;26231:6;26217:21;;:2;:21;;;;26110:128;:159;;;;;26260:9;;;;;;;;;;;26259:10;26110:159;26088:1792;;;26309:13;;;;;;;;;;;26304:150;;26355:19;:25;26375:4;26355:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;26384:19;:23;26404:2;26384:23;;;;;;;;;;;;;;;;;;;;;;;;;26355:52;26347:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;26304:150;26612:20;;;;;;;;;;;26608:423;;;26666:7;:5;:7::i;:::-;26660:13;;:2;:13;;;;:47;;;;;26691:15;26677:30;;:2;:30;;;;26660:47;:79;;;;;26725:13;26711:28;;:2;:28;;;;26660:79;26656:356;;;26817:12;26775:28;:39;26804:9;26775:39;;;;;;;;;;;;;;;;:54;26767:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;26976:12;26934:28;:39;26963:9;26934:39;;;;;;;;;;;;;;;:54;;;;26656:356;26608:423;27101:25;:31;27127:4;27101:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;27137:31;:35;27169:2;27137:35;;;;;;;;;;;;;;;;;;;;;;;;;27136:36;27101:71;27097:768;;;27215:20;;27205:6;:30;;27197:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;27350:9;;27333:13;27343:2;27333:9;:13::i;:::-;27324:6;:22;;;;:::i;:::-;:35;;27316:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27097:768;;;27478:25;:29;27504:2;27478:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;27512:31;:37;27544:4;27512:37;;;;;;;;;;;;;;;;;;;;;;;;;27511:38;27478:71;27474:391;;;27592:20;;27582:6;:30;;27574:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;27474:391;;;27719:31;:35;27751:2;27719:35;;;;;;;;;;;;;;;;;;;;;;;;;27714:151;;27812:9;;27795:13;27805:2;27795:9;:13::i;:::-;27786:6;:22;;;;:::i;:::-;:35;;27778:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27714:151;27474:391;27097:768;26088:1792;26053:1838;27905:28;27936:24;27954:4;27936:9;:24::i;:::-;27905:55;;27971:12;28010:18;;27986:20;:42;;27971:57;;28057:7;:34;;;;;28082:9;;;;;;;;;;;28081:10;28057:34;:83;;;;;28109:25;:31;28135:4;28109:31;;;;;;;;;;;;;;;;;;;;;;;;;28108:32;28057:83;:126;;;;;28158:19;:25;28178:4;28158:25;;;;;;;;;;;;;;;;;;;;;;;;;28157:26;28057:126;:167;;;;;28201:19;:23;28221:2;28201:23;;;;;;;;;;;;;;;;;;;;;;;;;28200:24;28057:167;28039:297;;;28263:4;28251:9;;:16;;;;;;;;;;;;;;;;;;28282:10;:8;:10::i;:::-;28319:5;28307:9;;:17;;;;;;;;;;;;;;;;;;28039:297;28348:12;28364:9;;;;;;;;;;;28363:10;28348:25;;28475:19;:25;28495:4;28475:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;28504:19;:23;28524:2;28504:23;;;;;;;;;;;;;;;;;;;;;;;;;28475:52;28471:100;;;28554:5;28544:15;;28471:100;28591:12;28696:7;28692:835;;;28748:25;:29;28774:2;28748:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;28797:1;28781:13;;:17;28748:50;28744:616;;;28826:34;28856:3;28826:25;28837:13;;28826:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;28819:41;;28929:13;;28909:17;;28902:4;:24;;;;:::i;:::-;:40;;;;:::i;:::-;28879:19;;:63;;;;;;;:::i;:::-;;;;;;;;29007:13;;28989:15;;28982:4;:22;;;;:::i;:::-;:38;;;;:::i;:::-;28961:17;;:59;;;;;;;:::i;:::-;;;;;;;;28744:616;;;29082:25;:31;29108:4;29082:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;29132:1;29117:12;;:16;29082:51;29078:282;;;29158:33;29187:3;29158:24;29169:12;;29158:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;29151:40;;29256:12;;29237:16;;29230:4;:23;;;;:::i;:::-;:38;;;;:::i;:::-;29207:19;;:61;;;;;;;:::i;:::-;;;;;;;;29332:12;;29315:14;;29308:4;:21;;;;:::i;:::-;:36;;;;:::i;:::-;29287:17;;:57;;;;;;;:::i;:::-;;;;;;;;29078:282;28744:616;29399:1;29392:4;:8;29388:91;;;29421:42;29437:4;29451;29458;29421:15;:42::i;:::-;29388:91;29511:4;29501:14;;;;;:::i;:::-;;;28692:835;29539:33;29555:4;29561:2;29565:6;29539:15;:33::i;:::-;25570:4010;;;;25457:4123;;;;:::o;9346:192::-;9432:7;9465:1;9460;:6;;9468:12;9452:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;9492:9;9508:1;9504;:5;;;;:::i;:::-;9492:17;;9529:1;9522:8;;;9346:192;;;;;:::o;24345:188::-;24462:5;24428:25;:31;24454:4;24428:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;24519:5;24485:40;;24513:4;24485:40;;;;;;;;;;;;24345:188;;:::o;7076:573::-;7234:1;7216:20;;:6;:20;;;;7208:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;7318:1;7297:23;;:9;:23;;;;7289:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;7373:47;7394:6;7402:9;7413:6;7373:20;:47::i;:::-;7453:71;7475:6;7453:71;;;;;;;;;;;;;;;;;:9;:17;7463:6;7453:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;7433:9;:17;7443:6;7433:17;;;;;;;;;;;;;;;:91;;;;7558:32;7583:6;7558:9;:20;7568:9;7558:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;7535:9;:20;7545:9;7535:20;;;;;;;;;;;;;;;:55;;;;7623:9;7606:35;;7615:6;7606:35;;;7634:6;7606:35;;;;;;:::i;:::-;;;;;;;;7076:573;;;:::o;30712:1289::-;30751:23;30777:24;30795:4;30777:9;:24::i;:::-;30751:50;;30812:25;30862:17;;30840:19;;:39;;;;:::i;:::-;30812:67;;30923:1;30904:15;:20;:46;;;;30949:1;30928:17;:22;30904:46;30900:59;;;30952:7;;;;30900:59;31012:2;30991:18;;:23;;;;:::i;:::-;30973:15;:41;30969:113;;;31068:2;31047:18;;:23;;;;:::i;:::-;31029:41;;30969:113;31151:23;31237:1;31217:17;31195:19;;31177:15;:37;;;;:::i;:::-;:57;;;;:::i;:::-;:61;;;;:::i;:::-;31151:87;;31249:26;31278:36;31298:15;31278;:19;;:36;;;;:::i;:::-;31249:65;;31335:25;31363:21;31335:49;;31397:37;31415:18;31397:17;:37::i;:::-;31456:18;31477:44;31503:17;31477:21;:25;;:44;;;;:::i;:::-;31456:65;;31532:21;31556:56;31594:17;31556:33;31571:17;;31556:10;:14;;:33;;;;:::i;:::-;:37;;:56;;;;:::i;:::-;31532:80;;31623:23;31662:13;31649:10;:26;;;;:::i;:::-;31623:52;;31718:1;31696:19;:23;;;;31750:1;31730:17;:21;;;;31802:1;31784:15;:19;:42;;;;;31825:1;31807:15;:19;31784:42;31780:214;;;31843:47;31857:15;31874;31843:13;:47::i;:::-;31910:72;31925:18;31945:15;31962:19;;31910:72;;;;;;;;:::i;:::-;;;;;;;;31780:214;30740:1261;;;;;;;;30712:1289;:::o;9546:250::-;9604:7;9633:1;9628;:6;9624:47;;;9658:1;9651:8;;;;9624:47;9683:9;9699:1;9695;:5;;;;:::i;:::-;9683:17;;9728:1;9723;9719;:5;;;;:::i;:::-;:10;9711:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;9787:1;9780:8;;;9546:250;;;;;:::o;9804:132::-;9862:7;9889:39;9893:1;9896;9889:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;9882:46;;9804:132;;;;:::o;8857:125::-;;;;:::o;9202:136::-;9260:7;9287:43;9291:1;9294;9287:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;9280:50;;9202:136;;;;:::o;29588:590::-;29715:21;29753:1;29739:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29715:40;;29784:4;29766;29771:1;29766:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;29810:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29800:4;29805:1;29800:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;29845:62;29862:4;29877:15;29895:11;29845:8;:62::i;:::-;29946:15;:66;;;30027:11;30053:1;30097:4;30124;30144:15;29946:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29644:534;29588:590;:::o;30190:514::-;30339:62;30356:4;30371:15;30389:11;30339:8;:62::i;:::-;30444:15;:31;;;30483:9;30516:4;30536:11;30562:1;30605;30648:7;:5;:7::i;:::-;30670:15;30444:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;30190:514;;:::o;9944:278::-;10030:7;10062:1;10058;:5;10065:12;10050:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;10089:9;10105:1;10101;:5;;;;:::i;:::-;10089:17;;10213:1;10206:8;;;9944: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:179::-;16747:31;16743:1;16735:6;16731:14;16724:55;16607:179;:::o;16792:366::-;16934:3;16955:67;17019:2;17014:3;16955:67;:::i;:::-;16948:74;;17031:93;17120:3;17031:93;:::i;:::-;17149:2;17144:3;17140:12;17133:19;;16792:366;;;:::o;17164:419::-;17330:4;17368:2;17357:9;17353:18;17345:26;;17417:9;17411:4;17407:20;17403:1;17392:9;17388:17;17381:47;17445:131;17571:4;17445:131;:::i;:::-;17437:139;;17164:419;;;:::o;17589:244::-;17729:34;17725:1;17717:6;17713:14;17706:58;17798:27;17793:2;17785:6;17781:15;17774:52;17589:244;:::o;17839:366::-;17981:3;18002:67;18066:2;18061:3;18002:67;:::i;:::-;17995:74;;18078:93;18167:3;18078:93;:::i;:::-;18196:2;18191:3;18187:12;18180:19;;17839:366;;;:::o;18211:419::-;18377:4;18415:2;18404:9;18400:18;18392:26;;18464:9;18458:4;18454:20;18450:1;18439:9;18435:17;18428:47;18492:131;18618:4;18492:131;:::i;:::-;18484:139;;18211:419;;;:::o;18636:223::-;18776:34;18772:1;18764:6;18760:14;18753:58;18845:6;18840:2;18832:6;18828:15;18821:31;18636:223;:::o;18865:366::-;19007:3;19028:67;19092:2;19087:3;19028:67;:::i;:::-;19021:74;;19104:93;19193:3;19104:93;:::i;:::-;19222:2;19217:3;19213:12;19206:19;;18865:366;;;:::o;19237:419::-;19403:4;19441:2;19430:9;19426:18;19418:26;;19490:9;19484:4;19480:20;19476:1;19465:9;19461:17;19454:47;19518:131;19644:4;19518:131;:::i;:::-;19510:139;;19237:419;;;:::o;19662:240::-;19802:34;19798:1;19790:6;19786:14;19779:58;19871:23;19866:2;19858:6;19854:15;19847:48;19662:240;:::o;19908:366::-;20050:3;20071:67;20135:2;20130:3;20071:67;:::i;:::-;20064:74;;20147:93;20236:3;20147:93;:::i;:::-;20265:2;20260:3;20256:12;20249:19;;19908:366;;;:::o;20280:419::-;20446:4;20484:2;20473:9;20469:18;20461:26;;20533:9;20527:4;20523:20;20519:1;20508:9;20504:17;20497:47;20561:131;20687:4;20561:131;:::i;:::-;20553:139;;20280:419;;;:::o;20705:239::-;20845:34;20841:1;20833:6;20829:14;20822:58;20914:22;20909:2;20901:6;20897:15;20890:47;20705:239;:::o;20950:366::-;21092:3;21113:67;21177:2;21172:3;21113:67;:::i;:::-;21106:74;;21189:93;21278:3;21189:93;:::i;:::-;21307:2;21302:3;21298:12;21291:19;;20950:366;;;:::o;21322:419::-;21488:4;21526:2;21515:9;21511:18;21503:26;;21575:9;21569:4;21565:20;21561:1;21550:9;21546:17;21539:47;21603:131;21729:4;21603:131;:::i;:::-;21595:139;;21322:419;;;:::o;21747:225::-;21887:34;21883:1;21875:6;21871:14;21864:58;21956:8;21951:2;21943:6;21939:15;21932:33;21747:225;:::o;21978:366::-;22120:3;22141:67;22205:2;22200:3;22141:67;:::i;:::-;22134:74;;22217:93;22306:3;22217:93;:::i;:::-;22335:2;22330:3;22326:12;22319:19;;21978:366;;;:::o;22350:419::-;22516:4;22554:2;22543:9;22539:18;22531:26;;22603:9;22597:4;22593:20;22589:1;22578:9;22574:17;22567:47;22631:131;22757:4;22631:131;:::i;:::-;22623:139;;22350:419;;;:::o;22775:177::-;22915:29;22911:1;22903:6;22899:14;22892:53;22775:177;:::o;22958:366::-;23100:3;23121:67;23185:2;23180:3;23121:67;:::i;:::-;23114:74;;23197:93;23286:3;23197:93;:::i;:::-;23315:2;23310:3;23306:12;23299:19;;22958:366;;;:::o;23330:419::-;23496:4;23534:2;23523:9;23519:18;23511:26;;23583:9;23577:4;23573:20;23569:1;23558:9;23554:17;23547:47;23611:131;23737:4;23611:131;:::i;:::-;23603:139;;23330:419;;;:::o;23755:223::-;23895:34;23891:1;23883:6;23879:14;23872:58;23964:6;23959:2;23951:6;23947:15;23940:31;23755:223;:::o;23984:366::-;24126:3;24147:67;24211:2;24206:3;24147:67;:::i;:::-;24140:74;;24223:93;24312:3;24223:93;:::i;:::-;24341:2;24336:3;24332:12;24325:19;;23984:366;;;:::o;24356:419::-;24522:4;24560:2;24549:9;24545:18;24537:26;;24609:9;24603:4;24599:20;24595:1;24584:9;24580:17;24573:47;24637:131;24763:4;24637:131;:::i;:::-;24629:139;;24356:419;;;:::o;24781:221::-;24921:34;24917:1;24909:6;24905:14;24898:58;24990:4;24985:2;24977:6;24973:15;24966:29;24781:221;:::o;25008:366::-;25150:3;25171:67;25235:2;25230:3;25171:67;:::i;:::-;25164:74;;25247:93;25336:3;25247:93;:::i;:::-;25365:2;25360:3;25356:12;25349:19;;25008:366;;;:::o;25380:419::-;25546:4;25584:2;25573:9;25569:18;25561:26;;25633:9;25627:4;25623:20;25619:1;25608:9;25604:17;25597:47;25661:131;25787:4;25661:131;:::i;:::-;25653:139;;25380:419;;;:::o;25805:224::-;25945:34;25941:1;25933:6;25929:14;25922:58;26014:7;26009:2;26001:6;25997:15;25990:32;25805:224;:::o;26035:366::-;26177:3;26198:67;26262:2;26257:3;26198:67;:::i;:::-;26191:74;;26274:93;26363:3;26274:93;:::i;:::-;26392:2;26387:3;26383:12;26376:19;;26035:366;;;:::o;26407:419::-;26573:4;26611:2;26600:9;26596:18;26588:26;;26660:9;26654:4;26650:20;26646:1;26635:9;26631:17;26624:47;26688:131;26814:4;26688:131;:::i;:::-;26680:139;;26407:419;;;:::o;26832:222::-;26972:34;26968:1;26960:6;26956:14;26949:58;27041:5;27036:2;27028:6;27024:15;27017:30;26832:222;:::o;27060:366::-;27202:3;27223:67;27287:2;27282:3;27223:67;:::i;:::-;27216:74;;27299:93;27388:3;27299:93;:::i;:::-;27417:2;27412:3;27408:12;27401:19;;27060:366;;;:::o;27432:419::-;27598:4;27636:2;27625:9;27621:18;27613:26;;27685:9;27679:4;27675:20;27671:1;27660:9;27656:17;27649:47;27713:131;27839:4;27713:131;:::i;:::-;27705:139;;27432:419;;;:::o;27857:301::-;27997:34;27993:1;27985:6;27981:14;27974:58;28066:34;28061:2;28053:6;28049:15;28042:59;28135:15;28130:2;28122:6;28118:15;28111:40;27857:301;:::o;28164:366::-;28306:3;28327:67;28391:2;28386:3;28327:67;:::i;:::-;28320:74;;28403:93;28492:3;28403:93;:::i;:::-;28521:2;28516:3;28512:12;28505:19;;28164:366;;;:::o;28536:419::-;28702:4;28740:2;28729:9;28725:18;28717:26;;28789:9;28783:4;28779:20;28775:1;28764:9;28760:17;28753:47;28817:131;28943:4;28817:131;:::i;:::-;28809:139;;28536:419;;;:::o;28961:172::-;29101:24;29097:1;29089:6;29085:14;29078:48;28961:172;:::o;29139:366::-;29281:3;29302:67;29366:2;29361:3;29302:67;:::i;:::-;29295:74;;29378:93;29467:3;29378:93;:::i;:::-;29496:2;29491:3;29487:12;29480:19;;29139:366;;;:::o;29511:419::-;29677:4;29715:2;29704:9;29700:18;29692:26;;29764:9;29758:4;29754:20;29750:1;29739:9;29735:17;29728:47;29792:131;29918:4;29792:131;:::i;:::-;29784:139;;29511:419;;;:::o;29936:297::-;30076:34;30072:1;30064:6;30060:14;30053:58;30145:34;30140:2;30132:6;30128:15;30121:59;30214:11;30209:2;30201:6;30197:15;30190:36;29936:297;:::o;30239:366::-;30381:3;30402:67;30466:2;30461:3;30402:67;:::i;:::-;30395:74;;30478:93;30567:3;30478:93;:::i;:::-;30596:2;30591:3;30587:12;30580:19;;30239:366;;;:::o;30611:419::-;30777:4;30815:2;30804:9;30800:18;30792:26;;30864:9;30858:4;30854:20;30850:1;30839:9;30835:17;30828:47;30892:131;31018:4;30892:131;:::i;:::-;30884:139;;30611:419;;;:::o;31036:240::-;31176:34;31172:1;31164:6;31160:14;31153:58;31245:23;31240:2;31232:6;31228:15;31221:48;31036:240;:::o;31282:366::-;31424:3;31445:67;31509:2;31504:3;31445:67;:::i;:::-;31438:74;;31521:93;31610:3;31521:93;:::i;:::-;31639:2;31634:3;31630:12;31623:19;;31282:366;;;:::o;31654:419::-;31820:4;31858:2;31847:9;31843:18;31835:26;;31907:9;31901:4;31897:20;31893:1;31882:9;31878:17;31871:47;31935:131;32061:4;31935:131;:::i;:::-;31927:139;;31654:419;;;:::o;32079:169::-;32219:21;32215:1;32207:6;32203:14;32196:45;32079:169;:::o;32254:366::-;32396:3;32417:67;32481:2;32476:3;32417:67;:::i;:::-;32410:74;;32493:93;32582:3;32493:93;:::i;:::-;32611:2;32606:3;32602:12;32595:19;;32254:366;;;:::o;32626:419::-;32792:4;32830:2;32819:9;32815:18;32807:26;;32879:9;32873:4;32869:20;32865:1;32854:9;32850:17;32843:47;32907:131;33033:4;32907:131;:::i;:::-;32899:139;;32626:419;;;:::o;33051:241::-;33191:34;33187:1;33179:6;33175:14;33168:58;33260:24;33255:2;33247:6;33243:15;33236:49;33051:241;:::o;33298:366::-;33440:3;33461:67;33525:2;33520:3;33461:67;:::i;:::-;33454:74;;33537:93;33626:3;33537:93;:::i;:::-;33655:2;33650:3;33646:12;33639:19;;33298:366;;;:::o;33670:419::-;33836:4;33874:2;33863:9;33859:18;33851:26;;33923:9;33917:4;33913:20;33909:1;33898:9;33894:17;33887:47;33951:131;34077:4;33951:131;:::i;:::-;33943:139;;33670:419;;;:::o;34095:191::-;34135:4;34155:20;34173:1;34155:20;:::i;:::-;34150:25;;34189:20;34207:1;34189:20;:::i;:::-;34184:25;;34228:1;34225;34222:8;34219:34;;;34233:18;;:::i;:::-;34219:34;34278:1;34275;34271:9;34263:17;;34095:191;;;;:::o;34292:442::-;34441:4;34479:2;34468:9;34464:18;34456:26;;34492:71;34560:1;34549:9;34545:17;34536:6;34492:71;:::i;:::-;34573:72;34641:2;34630:9;34626:18;34617:6;34573:72;:::i;:::-;34655;34723:2;34712:9;34708:18;34699:6;34655:72;:::i;:::-;34292:442;;;;;;:::o;34740:220::-;34880:34;34876:1;34868:6;34864:14;34857:58;34949:3;34944:2;34936:6;34932:15;34925:28;34740:220;:::o;34966:366::-;35108:3;35129:67;35193:2;35188:3;35129:67;:::i;:::-;35122:74;;35205:93;35294:3;35205:93;:::i;:::-;35323:2;35318:3;35314:12;35307:19;;34966:366;;;:::o;35338:419::-;35504:4;35542:2;35531:9;35527:18;35519:26;;35591:9;35585:4;35581:20;35577:1;35566:9;35562:17;35555:47;35619:131;35745:4;35619:131;:::i;:::-;35611:139;;35338:419;;;:::o;35763:143::-;35820:5;35851:6;35845:13;35836:22;;35867:33;35894:5;35867:33;:::i;:::-;35763:143;;;;:::o;35912:351::-;35982:6;36031:2;36019:9;36010:7;36006:23;36002:32;35999:119;;;36037:79;;:::i;:::-;35999:119;36157:1;36182:64;36238:7;36229:6;36218:9;36214:22;36182:64;:::i;:::-;36172:74;;36128:128;35912:351;;;;:::o;36269:85::-;36314:7;36343:5;36332:16;;36269:85;;;:::o;36360:158::-;36418:9;36451:61;36469:42;36478:32;36504:5;36478:32;:::i;:::-;36469:42;:::i;:::-;36451:61;:::i;:::-;36438:74;;36360:158;;;:::o;36524:147::-;36619:45;36658:5;36619:45;:::i;:::-;36614:3;36607:58;36524:147;;:::o;36677:114::-;36744:6;36778:5;36772:12;36762:22;;36677:114;;;:::o;36797:184::-;36896:11;36930:6;36925:3;36918:19;36970:4;36965:3;36961:14;36946:29;;36797:184;;;;:::o;36987:132::-;37054:4;37077:3;37069:11;;37107:4;37102:3;37098:14;37090:22;;36987:132;;;:::o;37125:108::-;37202:24;37220:5;37202:24;:::i;:::-;37197:3;37190:37;37125:108;;:::o;37239:179::-;37308:10;37329:46;37371:3;37363:6;37329:46;:::i;:::-;37407:4;37402:3;37398:14;37384:28;;37239:179;;;;:::o;37424:113::-;37494:4;37526;37521:3;37517:14;37509:22;;37424:113;;;:::o;37573:732::-;37692:3;37721:54;37769:5;37721:54;:::i;:::-;37791:86;37870:6;37865:3;37791:86;:::i;:::-;37784:93;;37901:56;37951:5;37901:56;:::i;:::-;37980:7;38011:1;37996:284;38021:6;38018:1;38015:13;37996:284;;;38097:6;38091:13;38124:63;38183:3;38168:13;38124:63;:::i;:::-;38117:70;;38210:60;38263:6;38210:60;:::i;:::-;38200:70;;38056:224;38043:1;38040;38036:9;38031:14;;37996:284;;;38000:14;38296:3;38289:10;;37697:608;;;37573:732;;;;:::o;38311:831::-;38574:4;38612:3;38601:9;38597:19;38589:27;;38626:71;38694:1;38683:9;38679:17;38670:6;38626:71;:::i;:::-;38707:80;38783:2;38772:9;38768:18;38759:6;38707:80;:::i;:::-;38834:9;38828:4;38824:20;38819:2;38808:9;38804:18;38797:48;38862:108;38965:4;38956:6;38862:108;:::i;:::-;38854:116;;38980:72;39048:2;39037:9;39033:18;39024:6;38980:72;:::i;:::-;39062:73;39130:3;39119:9;39115:19;39106:6;39062:73;:::i;:::-;38311:831;;;;;;;;:::o;39148:807::-;39397:4;39435:3;39424:9;39420:19;39412:27;;39449:71;39517:1;39506:9;39502:17;39493:6;39449:71;:::i;:::-;39530:72;39598:2;39587:9;39583:18;39574:6;39530:72;:::i;:::-;39612:80;39688:2;39677:9;39673:18;39664:6;39612:80;:::i;:::-;39702;39778:2;39767:9;39763:18;39754:6;39702:80;:::i;:::-;39792:73;39860:3;39849:9;39845:19;39836:6;39792:73;:::i;:::-;39875;39943:3;39932:9;39928:19;39919:6;39875:73;:::i;:::-;39148:807;;;;;;;;;:::o;39961:143::-;40018:5;40049:6;40043:13;40034:22;;40065:33;40092:5;40065:33;:::i;:::-;39961:143;;;;:::o;40110:663::-;40198:6;40206;40214;40263:2;40251:9;40242:7;40238:23;40234:32;40231:119;;;40269:79;;:::i;:::-;40231:119;40389:1;40414:64;40470:7;40461:6;40450:9;40446:22;40414:64;:::i;:::-;40404:74;;40360:128;40527:2;40553:64;40609:7;40600:6;40589:9;40585:22;40553:64;:::i;:::-;40543:74;;40498:129;40666:2;40692:64;40748:7;40739:6;40728:9;40724:22;40692:64;:::i;:::-;40682:74;;40637:129;40110:663;;;;;:::o

Swarm Source

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