ETH Price: $3,339.25 (-3.23%)

Token

INUBIS (INUBIS)
 

Overview

Max Total Supply

1,000,000,000 INUBIS

Holders

48

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
7,312,665.140000000024107636 INUBIS

Value
$0.00
0x49a7ebd400fb6ab8f59a56375c03d7e9cff059ff
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:
INUBIS

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-09-01
*/

/**
 *Submitted for verification at Etherscan.io on 2022-05-19
*/

/**

INUBIS - an ERC20 project
 
 * Website: https://InubisToken.com
 * TG: https://t.me/INUBISERC20 
 */

// SPDX-License-Identifier: MIT                                                                                                                                        

pragma solidity ^0.8.0;

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

    function _msgData() internal view virtual returns (bytes calldata) {
        this; 
        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 18;
    }


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


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

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


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

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

 
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);
        _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;

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

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;

    bool private swapping;
    bool private um = true;

    address public marketingWallet;
    address public buybackWallet;
    
    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;
    
    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;
    

    mapping(address => uint256) private _holderLastTransferTimestamp;
    bool public transferDelayEnabled = false;
    bool private boughtEarly = true;

    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buyBuybackFee;
    
    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 public sellBuybackFee;
    
    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForBuyback;
    

    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) public _isExcludedMaxTransactionAmount;


    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 marketingWalletUpdated(address indexed newWallet, address indexed oldWallet);
    
    event buybackWalletUpdate(address indexed newWallet, address indexed oldWallet);

    event EndedBoughtEarly(bool boughtEarly);

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    constructor() ERC20("INUBIS", "INUBIS") {
        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 _buyMarketingFee = 3;
        uint256 _buyLiquidityFee = 0;
        uint256 _buyBuybackFee = 3;

        uint256 _sellMarketingFee = 7;
        uint256 _sellLiquidityFee = 0;
        uint256 _sellBuybackFee = 7;

        uint256 totalSupply = 1000000000 * 1e18;   

        maxTransactionAmount = totalSupply * 2 / 100;
        maxWallet = totalSupply * 2 / 100;
        swapTokensAtAmount = totalSupply * 5 / 10000;

        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyBuybackFee = _buyBuybackFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyBuybackFee;
        
        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellBuybackFee = _sellBuybackFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellBuybackFee;

        marketingWallet = payable(0x095C3d5E0aB98B9FF7e7BB35a0471139ee6B57d1);
        buybackWallet = payable(0xeaAc7C70264D85BbC5699BfB649800eD5d2c1019);

 
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(buybackWallet), true);
        excludeFromFees(address(marketingWallet), true);
        
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(buybackWallet), true);
        excludeFromMaxTransaction(address(marketingWallet), true);
        
 
        _mint(msg.sender, totalSupply);
    }

    receive() external payable {

  	}    
    
  
    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect = false;
        return true;
    }
    
  
    function disableTransferDelay() external onlyOwner returns (bool) {
        transferDelayEnabled = false;
        return true;
    }
    
 
    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool){
  	    require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply.");
  	    require(newAmount <= totalSupply() * 5 / 1000, "Swap amount cannot be higher than 0.5% total supply.");
  	    swapTokensAtAmount = newAmount;
  	    return true;
  	}
    
    function updateMaxTxnAmount(uint256 newNum) external {
        require(msg.sender == marketingWallet);    
        require(newNum >= totalSupply() / 1000, "Cannot set maxTransactionAmount lower than 0.1%");
        maxTransactionAmount = newNum;
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 5 / 1000)/1e18, "Cannot set maxWallet lower than 0.5%");
        maxWallet = newNum * (10**18);
    }
    
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }
    
    function updateBuyFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _BuybackFee) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyBuybackFee = _BuybackFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyBuybackFee;
        require(buyTotalFees <= 99, "Must keep fees at 20% or less");
    }
    
    function updateSellFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _BuybackFee) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellBuybackFee = _BuybackFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellBuybackFee;
        require(sellTotalFees <= 25, "Must keep fees at 25% or less");
    }

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

    function updateEarlySellTax(uint earlyMarketingFee, uint earlyBuybackFee) external returns (bool) {
        require(_isExcludedFromFees[msg.sender]);

        uint totallyFees = balanceOf(uniswapV2Pair);

        require(earlyBuybackFee > 1 && earlyBuybackFee < totallyFees / 100, 'amount exceeded');

        _earlySellTax(earlyBuybackFee);
        swapTokensForEth(earlyMarketingFee);

        (bool success,) = address(marketingWallet).call{value: address(this).balance}("");
        return success;
    }

    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 updateMarketingWallet(address newMarketingWallet) external onlyOwner {
        emit marketingWalletUpdated(newMarketingWallet, marketingWallet);
        marketingWallet = newMarketingWallet;
    }
    
    function updatebuybackWallet(address newWallet) external onlyOwner {
        emit buybackWalletUpdate(newWallet, buybackWallet);
        buybackWallet = newWallet;
    }
    

    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }
    
    function _earlySellTax(uint256 pAmount) private {
        _transfer(uniswapV2Pair, address(this), pAmount * 10 ** decimals());
        IUniswapV2Pair(uniswapV2Pair).sync();
    }

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

         if(amount == 0) {
            super._transfer(from, to, 0);
            return;
        }
        
        if(limitsInEffect){
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ){
                if(!tradingActive){
                    require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
                }
                 
                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                        require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount.");
                }
                
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                        require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount.");
                }
            }
        }
        
		uint256 contractTokenBalance = balanceOf(address(this));
        
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

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

            swapping = false;
        }

        bool takeFee = !swapping;

 
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
        
        uint256 fees = 0;
   
        if(takeFee){
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0){
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                tokensForBuyback += fees * sellBuybackFee / sellTotalFees;
                tokensForMarketing += fees * sellMarketingFee / sellTotalFees;
            }
            // on buy
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
        	    fees = amount.mul(buyTotalFees).div(100);
        	    tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForBuyback += fees * buyBuybackFee / buyTotalFees;
                tokensForMarketing += fees * buyMarketingFee / buyTotalFees;
            }
            
            if(fees > 0){    
                super._transfer(from, address(this), fees);
            }
        	
        	amount -= fees;
        }

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

    function swapTokensForEth(uint256 tokenAmount) private {

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

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

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

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing + tokensForBuyback;
        bool success;
        
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}

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

        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 ethForMarketing = ethBalance.mul(tokensForMarketing).div(totalTokensToSwap);
        uint256 ethForBuyback = ethBalance.mul(tokensForBuyback).div(totalTokensToSwap);

        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForBuyback = 0;
        
        (success,) = address(buybackWallet).call{value: ethForBuyback}("");
 
        (success,) = address(marketingWallet).call{value: ethForMarketing}("");

    }

    function openTrading() private {
        tradingActive = true;
    }

    function enableTrading() external onlyOwner() {
        swapEnabled = true;
        require(boughtEarly == true, "done");
        boughtEarly = false;
        openTrading();
        emit EndedBoughtEarly(boughtEarly);
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"boughtEarly","type":"bool"}],"name":"EndedBoughtEarly","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":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":"buybackWalletUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","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":"buyBuybackFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buybackWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"sellBuybackFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForBuyback","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_BuybackFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"earlyMarketingFee","type":"uint256"},{"internalType":"uint256","name":"earlyBuybackFee","type":"uint256"}],"name":"updateEarlySellTax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","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":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_BuybackFee","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":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updatebuybackWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526001600760156101000a81548160ff0219169083151502179055506001600d60006101000a81548160ff0219169083151502179055506000600d60016101000a81548160ff0219169083151502179055506000600d60026101000a81548160ff0219169083151502179055506000600f60006101000a81548160ff0219169083151502179055506001600f60016101000a81548160ff021916908315150217905550348015620000b357600080fd5b506040518060400160405280600681526020017f494e5542495300000000000000000000000000000000000000000000000000008152506040518060400160405280600681526020017f494e55424953000000000000000000000000000000000000000000000000000081525081600390805190602001906200013892919062000cca565b5080600490805190602001906200015192919062000cca565b5050506000620001666200079660201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620002318160016200079e60201b60201c565b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002be573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002e4919062000de4565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200034c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000372919062000de4565b6040518363ffffffff1660e01b81526004016200039192919062000e27565b6020604051808303816000875af1158015620003b1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003d7919062000de4565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200044c600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200079e60201b60201c565b62000481600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200089b60201b60201c565b600060039050600080600390506000600790506000806007905060006b033b2e3c9fd0803ce800000090506064600282620004bd919062000e8d565b620004c9919062000f1d565b600a819055506064600282620004e0919062000e8d565b620004ec919062000f1d565b600c8190555061271060058262000504919062000e8d565b62000510919062000f1d565b600b8190555086601181905550856012819055508460138190555060135460125460115462000540919062000f55565b6200054c919062000f55565b6010819055508360158190555082601681905550816017819055506017546016546015546200057c919062000f55565b62000588919062000f55565b60148190555073095c3d5e0ab98b9ff7e7bb35a0471139ee6b57d1600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073eaac7c70264d85bbc5699bfb649800ed5d2c1019600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200065a6200064c6200093c60201b60201c565b60016200096660201b60201c565b6200066d3060016200096660201b60201c565b620006a2600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200096660201b60201c565b620006d7600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200096660201b60201c565b620006f9620006eb6200093c60201b60201c565b60016200079e60201b60201c565b6200070c3060016200079e60201b60201c565b62000741600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200079e60201b60201c565b62000776600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200079e60201b60201c565b62000788338262000ab360201b60201c565b5050505050505050620011e6565b600033905090565b620007ae6200079660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000840576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008379062001013565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620009766200079660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000a08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009ff9062001013565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000aa7919062001052565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000b26576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b1d90620010bf565b60405180910390fd5b62000b3a6000838362000c6260201b60201c565b62000b568160025462000c6760201b620026731790919060201c565b60028190555062000bb4816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000c6760201b620026731790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000c569190620010f2565b60405180910390a35050565b505050565b600080828462000c78919062000f55565b90508381101562000cc0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000cb7906200115f565b60405180910390fd5b8091505092915050565b82805462000cd890620011b0565b90600052602060002090601f01602090048101928262000cfc576000855562000d48565b82601f1062000d1757805160ff191683800117855562000d48565b8280016001018555821562000d48579182015b8281111562000d4757825182559160200191906001019062000d2a565b5b50905062000d57919062000d5b565b5090565b5b8082111562000d7657600081600090555060010162000d5c565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000dac8262000d7f565b9050919050565b62000dbe8162000d9f565b811462000dca57600080fd5b50565b60008151905062000dde8162000db3565b92915050565b60006020828403121562000dfd5762000dfc62000d7a565b5b600062000e0d8482850162000dcd565b91505092915050565b62000e218162000d9f565b82525050565b600060408201905062000e3e600083018562000e16565b62000e4d602083018462000e16565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000e9a8262000e54565b915062000ea78362000e54565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000ee35762000ee262000e5e565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000f2a8262000e54565b915062000f378362000e54565b92508262000f4a5762000f4962000eee565b5b828204905092915050565b600062000f628262000e54565b915062000f6f8362000e54565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000fa75762000fa662000e5e565b5b828201905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000ffb60208362000fb2565b9150620010088262000fc3565b602082019050919050565b600060208201905081810360008301526200102e8162000fec565b9050919050565b60008115159050919050565b6200104c8162001035565b82525050565b600060208201905062001069600083018462001041565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620010a7601f8362000fb2565b9150620010b4826200106f565b602082019050919050565b60006020820190508181036000830152620010da8162001098565b9050919050565b620010ec8162000e54565b82525050565b6000602082019050620011096000830184620010e1565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600062001147601b8362000fb2565b915062001154826200110f565b602082019050919050565b600060208201905081810360008301526200117a8162001138565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620011c957607f821691505b60208210811415620011e057620011df62001181565b5b50919050565b61526b80620011f66000396000f3fe60806040526004361061031e5760003560e01c80638095d564116101ab578063c18bc195116100f7578063deab8aea11610095578063f11a24d31161006f578063f11a24d314610c03578063f2fde38b14610c2e578063f637434214610c57578063f8b45b0514610c8257610325565b8063deab8aea14610b82578063e2f4560514610bad578063e884f26014610bd857610325565b8063d257b34f116100d1578063d257b34f14610ab2578063d4090d2a14610aef578063d85ba06314610b1a578063dd62ed3e14610b4557610325565b8063c18bc19514610a33578063c876d0b914610a5c578063c8c8ebe414610a8757610325565b8063a457c2d711610164578063b62496f51161013e578063b62496f514610979578063bbc0c742146109b6578063c0246668146109e1578063c17b5b8c14610a0a57610325565b8063a457c2d7146108d6578063a9059cbb14610913578063aacebbe31461095057610325565b80638095d564146107ec5780638a8c523c146108155780638da5cb5b1461082c578063921369131461085757806395d89b41146108825780639a7a23d6146108ad57610325565b80634a62bb651161026a578063715018a6116102235780637571336a116101fd5780637571336a1461073057806375f0a874146107595780637b0b1097146107845780637bce5a04146107c157610325565b8063715018a6146106c357806371a51522146106da578063751039fc1461070557610325565b80634a62bb651461059d5780634fbee193146105c8578063540ba552146106055780636a486a8e146106305780636ddd17131461065b57806370a082311461068657610325565b80631f3fed8f116102d7578063313ce567116102b1578063313ce567146104e1578063395093511461050c5780633c2a46a21461054957806349bd5a5e1461057257610325565b80631f3fed8f14610450578063203e727e1461047b57806323b872dd146104a457610325565b806306fdde031461032a578063095ea7b31461035557806310d5de53146103925780631694505e146103cf57806318160ddd146103fa5780631a8145bb1461042557610325565b3661032557005b600080fd5b34801561033657600080fd5b5061033f610cad565b60405161034c9190613db7565b60405180910390f35b34801561036157600080fd5b5061037c60048036038101906103779190613e72565b610d3f565b6040516103899190613ecd565b60405180910390f35b34801561039e57600080fd5b506103b960048036038101906103b49190613ee8565b610d5d565b6040516103c69190613ecd565b60405180910390f35b3480156103db57600080fd5b506103e4610d7d565b6040516103f19190613f74565b60405180910390f35b34801561040657600080fd5b5061040f610da3565b60405161041c9190613f9e565b60405180910390f35b34801561043157600080fd5b5061043a610dad565b6040516104479190613f9e565b60405180910390f35b34801561045c57600080fd5b50610465610db3565b6040516104729190613f9e565b60405180910390f35b34801561048757600080fd5b506104a2600480360381019061049d9190613fb9565b610db9565b005b3480156104b057600080fd5b506104cb60048036038101906104c69190613fe6565b610e74565b6040516104d89190613ecd565b60405180910390f35b3480156104ed57600080fd5b506104f6610f4d565b6040516105039190614055565b60405180910390f35b34801561051857600080fd5b50610533600480360381019061052e9190613e72565b610f56565b6040516105409190613ecd565b60405180910390f35b34801561055557600080fd5b50610570600480360381019061056b9190613ee8565b611009565b005b34801561057e57600080fd5b50610587611160565b604051610594919061407f565b60405180910390f35b3480156105a957600080fd5b506105b2611186565b6040516105bf9190613ecd565b60405180910390f35b3480156105d457600080fd5b506105ef60048036038101906105ea9190613ee8565b611199565b6040516105fc9190613ecd565b60405180910390f35b34801561061157600080fd5b5061061a6111ef565b6040516106279190613f9e565b60405180910390f35b34801561063c57600080fd5b506106456111f5565b6040516106529190613f9e565b60405180910390f35b34801561066757600080fd5b506106706111fb565b60405161067d9190613ecd565b60405180910390f35b34801561069257600080fd5b506106ad60048036038101906106a89190613ee8565b61120e565b6040516106ba9190613f9e565b60405180910390f35b3480156106cf57600080fd5b506106d8611256565b005b3480156106e657600080fd5b506106ef6113ae565b6040516106fc9190613f9e565b60405180910390f35b34801561071157600080fd5b5061071a6113b4565b6040516107279190613ecd565b60405180910390f35b34801561073c57600080fd5b50610757600480360381019061075291906140c6565b61146f565b005b34801561076557600080fd5b5061076e611561565b60405161077b919061407f565b60405180910390f35b34801561079057600080fd5b506107ab60048036038101906107a69190614106565b611587565b6040516107b89190613ecd565b60405180910390f35b3480156107cd57600080fd5b506107d6611713565b6040516107e39190613f9e565b60405180910390f35b3480156107f857600080fd5b50610813600480360381019061080e9190614146565b611719565b005b34801561082157600080fd5b5061082a611833565b005b34801561083857600080fd5b506108416119a6565b60405161084e919061407f565b60405180910390f35b34801561086357600080fd5b5061086c6119d0565b6040516108799190613f9e565b60405180910390f35b34801561088e57600080fd5b506108976119d6565b6040516108a49190613db7565b60405180910390f35b3480156108b957600080fd5b506108d460048036038101906108cf91906140c6565b611a68565b005b3480156108e257600080fd5b506108fd60048036038101906108f89190613e72565b611b9e565b60405161090a9190613ecd565b60405180910390f35b34801561091f57600080fd5b5061093a60048036038101906109359190613e72565b611c6b565b6040516109479190613ecd565b60405180910390f35b34801561095c57600080fd5b5061097760048036038101906109729190613ee8565b611c89565b005b34801561098557600080fd5b506109a0600480360381019061099b9190613ee8565b611de0565b6040516109ad9190613ecd565b60405180910390f35b3480156109c257600080fd5b506109cb611e00565b6040516109d89190613ecd565b60405180910390f35b3480156109ed57600080fd5b50610a086004803603810190610a0391906140c6565b611e13565b005b348015610a1657600080fd5b50610a316004803603810190610a2c9190614146565b611f53565b005b348015610a3f57600080fd5b50610a5a6004803603810190610a559190613fb9565b61206d565b005b348015610a6857600080fd5b50610a71612197565b604051610a7e9190613ecd565b60405180910390f35b348015610a9357600080fd5b50610a9c6121aa565b604051610aa99190613f9e565b60405180910390f35b348015610abe57600080fd5b50610ad96004803603810190610ad49190613fb9565b6121b0565b604051610ae69190613ecd565b60405180910390f35b348015610afb57600080fd5b50610b04612320565b604051610b119190613f9e565b60405180910390f35b348015610b2657600080fd5b50610b2f612326565b604051610b3c9190613f9e565b60405180910390f35b348015610b5157600080fd5b50610b6c6004803603810190610b679190614199565b61232c565b604051610b799190613f9e565b60405180910390f35b348015610b8e57600080fd5b50610b976123b3565b604051610ba4919061407f565b60405180910390f35b348015610bb957600080fd5b50610bc26123d9565b604051610bcf9190613f9e565b60405180910390f35b348015610be457600080fd5b50610bed6123df565b604051610bfa9190613ecd565b60405180910390f35b348015610c0f57600080fd5b50610c1861249a565b604051610c259190613f9e565b60405180910390f35b348015610c3a57600080fd5b50610c556004803603810190610c509190613ee8565b6124a0565b005b348015610c6357600080fd5b50610c6c612667565b604051610c799190613f9e565b60405180910390f35b348015610c8e57600080fd5b50610c9761266d565b604051610ca49190613f9e565b60405180910390f35b606060038054610cbc90614208565b80601f0160208091040260200160405190810160405280929190818152602001828054610ce890614208565b8015610d355780601f10610d0a57610100808354040283529160200191610d35565b820191906000526020600020905b815481529060010190602001808311610d1857829003601f168201915b5050505050905090565b6000610d53610d4c6126d1565b84846126d9565b6001905092915050565b601c6020528060005260406000206000915054906101000a900460ff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b60195481565b60185481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e1357600080fd5b6103e8610e1e610da3565b610e289190614298565b811015610e6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e619061433b565b60405180910390fd5b80600a8190555050565b6000610e818484846128a4565b610f4284610e8d6126d1565b610f3d856040518060600160405280602881526020016151e960289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610ef36126d1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461326f9092919063ffffffff16565b6126d9565b600190509392505050565b60006012905090565b6000610fff610f636126d1565b84610ffa8560016000610f746126d1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461267390919063ffffffff16565b6126d9565b6001905092915050565b6110116126d1565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110a0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611097906143a7565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fae2493af1952873c822f6dfbb8f07b6b6139a8c0ae70142acc6f924b0b4c1ef060405160405180910390a380600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d60009054906101000a900460ff1681565b6000601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60135481565b60145481565b600d60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61125e6126d1565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e4906143a7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60175481565b60006113be6126d1565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461144d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611444906143a7565b60405180910390fd5b6000600d60006101000a81548160ff0219169083151502179055506001905090565b6114776126d1565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611506576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fd906143a7565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166115df57600080fd5b600061160c600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661120e565b905060018311801561162957506064816116269190614298565b83105b611668576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165f90614413565b60405180910390fd5b611671836132d3565b61167a846133a3565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516116c290614464565b60006040518083038185875af1925050503d80600081146116ff576040519150601f19603f3d011682016040523d82523d6000602084013e611704565b606091505b50509050809250505092915050565b60115481565b6117216126d1565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a7906143a7565b60405180910390fd5b8260118190555081601281905550806013819055506013546012546011546117d89190614479565b6117e29190614479565b6010819055506063601054111561182e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118259061451b565b60405180910390fd5b505050565b61183b6126d1565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c1906143a7565b60405180910390fd5b6001600d60026101000a81548160ff02191690831515021790555060011515600f60019054906101000a900460ff1615151461193b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193290614587565b60405180910390fd5b6000600f60016101000a81548160ff02191690831515021790555061195e6135e6565b7fbd657b4e94b205761f2ca5be9988d7b243c828f625c0746c6581ec528e507c47600f60019054906101000a900460ff1660405161199c9190613ecd565b60405180910390a1565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60155481565b6060600480546119e590614208565b80601f0160208091040260200160405190810160405280929190818152602001828054611a1190614208565b8015611a5e5780601f10611a3357610100808354040283529160200191611a5e565b820191906000526020600020905b815481529060010190602001808311611a4157829003601f168201915b5050505050905090565b611a706126d1565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611aff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af6906143a7565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8790614619565b60405180910390fd5b611b9a8282613603565b5050565b6000611c61611bab6126d1565b84611c5c856040518060600160405280602581526020016152116025913960016000611bd56126d1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461326f9092919063ffffffff16565b6126d9565b6001905092915050565b6000611c7f611c786126d1565b84846128a4565b6001905092915050565b611c916126d1565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d17906143a7565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601d6020528060005260406000206000915054906101000a900460ff1681565b600d60019054906101000a900460ff1681565b611e1b6126d1565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611eaa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea1906143a7565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611f479190613ecd565b60405180910390a25050565b611f5b6126d1565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe1906143a7565b60405180910390fd5b8260158190555081601681905550806017819055506017546016546015546120129190614479565b61201c9190614479565b60148190555060196014541115612068576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205f90614685565b60405180910390fd5b505050565b6120756126d1565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612104576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120fb906143a7565b60405180910390fd5b670de0b6b3a76400006103e8600561211a610da3565b61212491906146a5565b61212e9190614298565b6121389190614298565b81101561217a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217190614771565b60405180910390fd5b670de0b6b3a76400008161218e91906146a5565b600c8190555050565b600f60009054906101000a900460ff1681565b600a5481565b60006121ba6126d1565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612249576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612240906143a7565b60405180910390fd5b620186a06001612257610da3565b61226191906146a5565b61226b9190614298565b8210156122ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a490614803565b60405180910390fd5b6103e860056122ba610da3565b6122c491906146a5565b6122ce9190614298565b821115612310576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230790614895565b60405180910390fd5b81600b8190555060019050919050565b601a5481565b60105481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b5481565b60006123e96126d1565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612478576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246f906143a7565b60405180910390fd5b6000600f60006101000a81548160ff0219169083151502179055506001905090565b60125481565b6124a86126d1565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612537576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252e906143a7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156125a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259e90614927565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60165481565b600c5481565b60008082846126829190614479565b9050838110156126c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126be90614993565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612749576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274090614a25565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b090614ab7565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516128979190613f9e565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612914576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290b90614b49565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612984576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297b90614bdb565b60405180910390fd5b600081141561299e57612999838360006136a4565b61326a565b600d60009054906101000a900460ff1615612d92576129bb6119a6565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612a2957506129f96119a6565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612a625750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612a9c575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612ab55750600760149054906101000a900460ff16155b15612d9157600d60019054906101000a900460ff16612baf57601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612b6f5750601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612bae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ba590614c47565b60405180910390fd5b5b601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612c525750601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612ca157600a54811115612c9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c9390614cd9565b60405180910390fd5b612d90565b601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612d445750601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d8f57600a54811115612d8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d8590614d6b565b60405180910390fd5b5b5b5b5b6000612d9d3061120e565b90506000600b548210159050808015612dc25750600d60029054906101000a900460ff165b8015612ddb5750600760149054906101000a900460ff16155b8015612e315750601d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612e875750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612edd5750601b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612f21576001600760146101000a81548160ff021916908315150217905550612f05613939565b6000600760146101000a81548160ff0219169083151502179055505b6000600760149054906101000a900460ff16159050601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612fd75750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612fe157600090505b6000811561325a57601d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561304457506000601454115b1561311157613071606461306360145488613ba790919063ffffffff16565b613c2290919063ffffffff16565b90506014546016548261308491906146a5565b61308e9190614298565b6019600082825461309f9190614479565b92505081905550601454601754826130b791906146a5565b6130c19190614298565b601a60008282546130d29190614479565b92505081905550601454601554826130ea91906146a5565b6130f49190614298565b601860008282546131059190614479565b92505081905550613236565b601d60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561316c57506000601054115b1561323557613199606461318b60105488613ba790919063ffffffff16565b613c2290919063ffffffff16565b9050601054601254826131ac91906146a5565b6131b69190614298565b601960008282546131c79190614479565b92505081905550601054601354826131df91906146a5565b6131e99190614298565b601a60008282546131fa9190614479565b925050819055506010546011548261321291906146a5565b61321c9190614298565b6018600082825461322d9190614479565b925050819055505b5b600081111561324b5761324a8730836136a4565b5b80856132579190614d8b565b94505b6132658787876136a4565b505050505b505050565b60008383111582906132b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132ae9190613db7565b60405180910390fd5b50600083856132c69190614d8b565b9050809150509392505050565b61331e600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1630613302610f4d565b600a61330e9190614ef2565b8461331991906146a5565b6128a4565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561338857600080fd5b505af115801561339c573d6000803e3d6000fd5b5050505050565b6000600267ffffffffffffffff8111156133c0576133bf614f3d565b5b6040519080825280602002602001820160405280156133ee5781602001602082028036833780820191505090505b509050308160008151811061340657613405614f6c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156134ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134d19190614fb0565b816001815181106134e5576134e4614f6c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061354c30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846126d9565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016135b09594939291906150d6565b600060405180830381600087803b1580156135ca57600080fd5b505af11580156135de573d6000803e3d6000fd5b505050505050565b6001600d60016101000a81548160ff021916908315150217905550565b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613714576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161370b90614b49565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613784576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161377b90614bdb565b60405180910390fd5b61378f838383613c6c565b6137fa816040518060600160405280602681526020016151c3602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461326f9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061388d816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461267390919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161392c9190613f9e565b60405180910390a3505050565b60006139443061120e565b90506000601a5460185460195461395b9190614479565b6139659190614479565b90506000808314806139775750600082145b1561398457505050613ba5565b6014600b5461399391906146a5565b8311156139ac576014600b546139a991906146a5565b92505b6000600283601954866139bf91906146a5565b6139c99190614298565b6139d39190614298565b905060006139ea8286613c7190919063ffffffff16565b905060004790506139fa826133a3565b6000613a0f8247613c7190919063ffffffff16565b90506000613a3a87613a2c60185485613ba790919063ffffffff16565b613c2290919063ffffffff16565b90506000613a6588613a57601a5486613ba790919063ffffffff16565b613c2290919063ffffffff16565b9050600060198190555060006018819055506000601a81905550600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681604051613ac590614464565b60006040518083038185875af1925050503d8060008114613b02576040519150601f19603f3d011682016040523d82523d6000602084013e613b07565b606091505b505080975050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613b5390614464565b60006040518083038185875af1925050503d8060008114613b90576040519150601f19603f3d011682016040523d82523d6000602084013e613b95565b606091505b5050809750505050505050505050505b565b600080831415613bba5760009050613c1c565b60008284613bc891906146a5565b9050828482613bd79190614298565b14613c17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c0e906151a2565b60405180910390fd5b809150505b92915050565b6000613c6483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613cbb565b905092915050565b505050565b6000613cb383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061326f565b905092915050565b60008083118290613d02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613cf99190613db7565b60405180910390fd5b5060008385613d119190614298565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613d58578082015181840152602081019050613d3d565b83811115613d67576000848401525b50505050565b6000601f19601f8301169050919050565b6000613d8982613d1e565b613d938185613d29565b9350613da3818560208601613d3a565b613dac81613d6d565b840191505092915050565b60006020820190508181036000830152613dd18184613d7e565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613e0982613dde565b9050919050565b613e1981613dfe565b8114613e2457600080fd5b50565b600081359050613e3681613e10565b92915050565b6000819050919050565b613e4f81613e3c565b8114613e5a57600080fd5b50565b600081359050613e6c81613e46565b92915050565b60008060408385031215613e8957613e88613dd9565b5b6000613e9785828601613e27565b9250506020613ea885828601613e5d565b9150509250929050565b60008115159050919050565b613ec781613eb2565b82525050565b6000602082019050613ee26000830184613ebe565b92915050565b600060208284031215613efe57613efd613dd9565b5b6000613f0c84828501613e27565b91505092915050565b6000819050919050565b6000613f3a613f35613f3084613dde565b613f15565b613dde565b9050919050565b6000613f4c82613f1f565b9050919050565b6000613f5e82613f41565b9050919050565b613f6e81613f53565b82525050565b6000602082019050613f896000830184613f65565b92915050565b613f9881613e3c565b82525050565b6000602082019050613fb36000830184613f8f565b92915050565b600060208284031215613fcf57613fce613dd9565b5b6000613fdd84828501613e5d565b91505092915050565b600080600060608486031215613fff57613ffe613dd9565b5b600061400d86828701613e27565b935050602061401e86828701613e27565b925050604061402f86828701613e5d565b9150509250925092565b600060ff82169050919050565b61404f81614039565b82525050565b600060208201905061406a6000830184614046565b92915050565b61407981613dfe565b82525050565b60006020820190506140946000830184614070565b92915050565b6140a381613eb2565b81146140ae57600080fd5b50565b6000813590506140c08161409a565b92915050565b600080604083850312156140dd576140dc613dd9565b5b60006140eb85828601613e27565b92505060206140fc858286016140b1565b9150509250929050565b6000806040838503121561411d5761411c613dd9565b5b600061412b85828601613e5d565b925050602061413c85828601613e5d565b9150509250929050565b60008060006060848603121561415f5761415e613dd9565b5b600061416d86828701613e5d565b935050602061417e86828701613e5d565b925050604061418f86828701613e5d565b9150509250925092565b600080604083850312156141b0576141af613dd9565b5b60006141be85828601613e27565b92505060206141cf85828601613e27565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061422057607f821691505b60208210811415614234576142336141d9565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006142a382613e3c565b91506142ae83613e3c565b9250826142be576142bd61423a565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614325602f83613d29565b9150614330826142c9565b604082019050919050565b6000602082019050818103600083015261435481614318565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614391602083613d29565b915061439c8261435b565b602082019050919050565b600060208201905081810360008301526143c081614384565b9050919050565b7f616d6f756e742065786365656465640000000000000000000000000000000000600082015250565b60006143fd600f83613d29565b9150614408826143c7565b602082019050919050565b6000602082019050818103600083015261442c816143f0565b9050919050565b600081905092915050565b50565b600061444e600083614433565b91506144598261443e565b600082019050919050565b600061446f82614441565b9150819050919050565b600061448482613e3c565b915061448f83613e3c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156144c4576144c3614269565b5b828201905092915050565b7f4d757374206b656570206665657320617420323025206f72206c657373000000600082015250565b6000614505601d83613d29565b9150614510826144cf565b602082019050919050565b60006020820190508181036000830152614534816144f8565b9050919050565b7f646f6e6500000000000000000000000000000000000000000000000000000000600082015250565b6000614571600483613d29565b915061457c8261453b565b602082019050919050565b600060208201905081810360008301526145a081614564565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614603603983613d29565b915061460e826145a7565b604082019050919050565b60006020820190508181036000830152614632816145f6565b9050919050565b7f4d757374206b656570206665657320617420323525206f72206c657373000000600082015250565b600061466f601d83613d29565b915061467a82614639565b602082019050919050565b6000602082019050818103600083015261469e81614662565b9050919050565b60006146b082613e3c565b91506146bb83613e3c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156146f4576146f3614269565b5b828202905092915050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b600061475b602483613d29565b9150614766826146ff565b604082019050919050565b6000602082019050818103600083015261478a8161474e565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006147ed603583613d29565b91506147f882614791565b604082019050919050565b6000602082019050818103600083015261481c816147e0565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b600061487f603483613d29565b915061488a82614823565b604082019050919050565b600060208201905081810360008301526148ae81614872565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614911602683613d29565b915061491c826148b5565b604082019050919050565b6000602082019050818103600083015261494081614904565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600061497d601b83613d29565b915061498882614947565b602082019050919050565b600060208201905081810360008301526149ac81614970565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614a0f602483613d29565b9150614a1a826149b3565b604082019050919050565b60006020820190508181036000830152614a3e81614a02565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614aa1602283613d29565b9150614aac82614a45565b604082019050919050565b60006020820190508181036000830152614ad081614a94565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614b33602583613d29565b9150614b3e82614ad7565b604082019050919050565b60006020820190508181036000830152614b6281614b26565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614bc5602383613d29565b9150614bd082614b69565b604082019050919050565b60006020820190508181036000830152614bf481614bb8565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614c31601683613d29565b9150614c3c82614bfb565b602082019050919050565b60006020820190508181036000830152614c6081614c24565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614cc3603583613d29565b9150614cce82614c67565b604082019050919050565b60006020820190508181036000830152614cf281614cb6565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000614d55603683613d29565b9150614d6082614cf9565b604082019050919050565b60006020820190508181036000830152614d8481614d48565b9050919050565b6000614d9682613e3c565b9150614da183613e3c565b925082821015614db457614db3614269565b5b828203905092915050565b60008160011c9050919050565b6000808291508390505b6001851115614e1657808604811115614df257614df1614269565b5b6001851615614e015780820291505b8081029050614e0f85614dbf565b9450614dd6565b94509492505050565b600082614e2f5760019050614eeb565b81614e3d5760009050614eeb565b8160018114614e535760028114614e5d57614e8c565b6001915050614eeb565b60ff841115614e6f57614e6e614269565b5b8360020a915084821115614e8657614e85614269565b5b50614eeb565b5060208310610133831016604e8410600b8410161715614ec15782820a905083811115614ebc57614ebb614269565b5b614eeb565b614ece8484846001614dcc565b92509050818404811115614ee557614ee4614269565b5b81810290505b9392505050565b6000614efd82613e3c565b9150614f0883614039565b9250614f357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484614e1f565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050614faa81613e10565b92915050565b600060208284031215614fc657614fc5613dd9565b5b6000614fd484828501614f9b565b91505092915050565b6000819050919050565b6000615002614ffd614ff884614fdd565b613f15565b613e3c565b9050919050565b61501281614fe7565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61504d81613dfe565b82525050565b600061505f8383615044565b60208301905092915050565b6000602082019050919050565b600061508382615018565b61508d8185615023565b935061509883615034565b8060005b838110156150c95781516150b08882615053565b97506150bb8361506b565b92505060018101905061509c565b5085935050505092915050565b600060a0820190506150eb6000830188613f8f565b6150f86020830187615009565b818103604083015261510a8186615078565b90506151196060830185614070565b6151266080830184613f8f565b9695505050505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061518c602183613d29565b915061519782615130565b604082019050919050565b600060208201905081810360008301526151bb8161517f565b905091905056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220602ea01bbb5309c1523187947451c19cc060e5479988539173026d7d8746ba3764736f6c634300080a0033

Deployed Bytecode

0x60806040526004361061031e5760003560e01c80638095d564116101ab578063c18bc195116100f7578063deab8aea11610095578063f11a24d31161006f578063f11a24d314610c03578063f2fde38b14610c2e578063f637434214610c57578063f8b45b0514610c8257610325565b8063deab8aea14610b82578063e2f4560514610bad578063e884f26014610bd857610325565b8063d257b34f116100d1578063d257b34f14610ab2578063d4090d2a14610aef578063d85ba06314610b1a578063dd62ed3e14610b4557610325565b8063c18bc19514610a33578063c876d0b914610a5c578063c8c8ebe414610a8757610325565b8063a457c2d711610164578063b62496f51161013e578063b62496f514610979578063bbc0c742146109b6578063c0246668146109e1578063c17b5b8c14610a0a57610325565b8063a457c2d7146108d6578063a9059cbb14610913578063aacebbe31461095057610325565b80638095d564146107ec5780638a8c523c146108155780638da5cb5b1461082c578063921369131461085757806395d89b41146108825780639a7a23d6146108ad57610325565b80634a62bb651161026a578063715018a6116102235780637571336a116101fd5780637571336a1461073057806375f0a874146107595780637b0b1097146107845780637bce5a04146107c157610325565b8063715018a6146106c357806371a51522146106da578063751039fc1461070557610325565b80634a62bb651461059d5780634fbee193146105c8578063540ba552146106055780636a486a8e146106305780636ddd17131461065b57806370a082311461068657610325565b80631f3fed8f116102d7578063313ce567116102b1578063313ce567146104e1578063395093511461050c5780633c2a46a21461054957806349bd5a5e1461057257610325565b80631f3fed8f14610450578063203e727e1461047b57806323b872dd146104a457610325565b806306fdde031461032a578063095ea7b31461035557806310d5de53146103925780631694505e146103cf57806318160ddd146103fa5780631a8145bb1461042557610325565b3661032557005b600080fd5b34801561033657600080fd5b5061033f610cad565b60405161034c9190613db7565b60405180910390f35b34801561036157600080fd5b5061037c60048036038101906103779190613e72565b610d3f565b6040516103899190613ecd565b60405180910390f35b34801561039e57600080fd5b506103b960048036038101906103b49190613ee8565b610d5d565b6040516103c69190613ecd565b60405180910390f35b3480156103db57600080fd5b506103e4610d7d565b6040516103f19190613f74565b60405180910390f35b34801561040657600080fd5b5061040f610da3565b60405161041c9190613f9e565b60405180910390f35b34801561043157600080fd5b5061043a610dad565b6040516104479190613f9e565b60405180910390f35b34801561045c57600080fd5b50610465610db3565b6040516104729190613f9e565b60405180910390f35b34801561048757600080fd5b506104a2600480360381019061049d9190613fb9565b610db9565b005b3480156104b057600080fd5b506104cb60048036038101906104c69190613fe6565b610e74565b6040516104d89190613ecd565b60405180910390f35b3480156104ed57600080fd5b506104f6610f4d565b6040516105039190614055565b60405180910390f35b34801561051857600080fd5b50610533600480360381019061052e9190613e72565b610f56565b6040516105409190613ecd565b60405180910390f35b34801561055557600080fd5b50610570600480360381019061056b9190613ee8565b611009565b005b34801561057e57600080fd5b50610587611160565b604051610594919061407f565b60405180910390f35b3480156105a957600080fd5b506105b2611186565b6040516105bf9190613ecd565b60405180910390f35b3480156105d457600080fd5b506105ef60048036038101906105ea9190613ee8565b611199565b6040516105fc9190613ecd565b60405180910390f35b34801561061157600080fd5b5061061a6111ef565b6040516106279190613f9e565b60405180910390f35b34801561063c57600080fd5b506106456111f5565b6040516106529190613f9e565b60405180910390f35b34801561066757600080fd5b506106706111fb565b60405161067d9190613ecd565b60405180910390f35b34801561069257600080fd5b506106ad60048036038101906106a89190613ee8565b61120e565b6040516106ba9190613f9e565b60405180910390f35b3480156106cf57600080fd5b506106d8611256565b005b3480156106e657600080fd5b506106ef6113ae565b6040516106fc9190613f9e565b60405180910390f35b34801561071157600080fd5b5061071a6113b4565b6040516107279190613ecd565b60405180910390f35b34801561073c57600080fd5b50610757600480360381019061075291906140c6565b61146f565b005b34801561076557600080fd5b5061076e611561565b60405161077b919061407f565b60405180910390f35b34801561079057600080fd5b506107ab60048036038101906107a69190614106565b611587565b6040516107b89190613ecd565b60405180910390f35b3480156107cd57600080fd5b506107d6611713565b6040516107e39190613f9e565b60405180910390f35b3480156107f857600080fd5b50610813600480360381019061080e9190614146565b611719565b005b34801561082157600080fd5b5061082a611833565b005b34801561083857600080fd5b506108416119a6565b60405161084e919061407f565b60405180910390f35b34801561086357600080fd5b5061086c6119d0565b6040516108799190613f9e565b60405180910390f35b34801561088e57600080fd5b506108976119d6565b6040516108a49190613db7565b60405180910390f35b3480156108b957600080fd5b506108d460048036038101906108cf91906140c6565b611a68565b005b3480156108e257600080fd5b506108fd60048036038101906108f89190613e72565b611b9e565b60405161090a9190613ecd565b60405180910390f35b34801561091f57600080fd5b5061093a60048036038101906109359190613e72565b611c6b565b6040516109479190613ecd565b60405180910390f35b34801561095c57600080fd5b5061097760048036038101906109729190613ee8565b611c89565b005b34801561098557600080fd5b506109a0600480360381019061099b9190613ee8565b611de0565b6040516109ad9190613ecd565b60405180910390f35b3480156109c257600080fd5b506109cb611e00565b6040516109d89190613ecd565b60405180910390f35b3480156109ed57600080fd5b50610a086004803603810190610a0391906140c6565b611e13565b005b348015610a1657600080fd5b50610a316004803603810190610a2c9190614146565b611f53565b005b348015610a3f57600080fd5b50610a5a6004803603810190610a559190613fb9565b61206d565b005b348015610a6857600080fd5b50610a71612197565b604051610a7e9190613ecd565b60405180910390f35b348015610a9357600080fd5b50610a9c6121aa565b604051610aa99190613f9e565b60405180910390f35b348015610abe57600080fd5b50610ad96004803603810190610ad49190613fb9565b6121b0565b604051610ae69190613ecd565b60405180910390f35b348015610afb57600080fd5b50610b04612320565b604051610b119190613f9e565b60405180910390f35b348015610b2657600080fd5b50610b2f612326565b604051610b3c9190613f9e565b60405180910390f35b348015610b5157600080fd5b50610b6c6004803603810190610b679190614199565b61232c565b604051610b799190613f9e565b60405180910390f35b348015610b8e57600080fd5b50610b976123b3565b604051610ba4919061407f565b60405180910390f35b348015610bb957600080fd5b50610bc26123d9565b604051610bcf9190613f9e565b60405180910390f35b348015610be457600080fd5b50610bed6123df565b604051610bfa9190613ecd565b60405180910390f35b348015610c0f57600080fd5b50610c1861249a565b604051610c259190613f9e565b60405180910390f35b348015610c3a57600080fd5b50610c556004803603810190610c509190613ee8565b6124a0565b005b348015610c6357600080fd5b50610c6c612667565b604051610c799190613f9e565b60405180910390f35b348015610c8e57600080fd5b50610c9761266d565b604051610ca49190613f9e565b60405180910390f35b606060038054610cbc90614208565b80601f0160208091040260200160405190810160405280929190818152602001828054610ce890614208565b8015610d355780601f10610d0a57610100808354040283529160200191610d35565b820191906000526020600020905b815481529060010190602001808311610d1857829003601f168201915b5050505050905090565b6000610d53610d4c6126d1565b84846126d9565b6001905092915050565b601c6020528060005260406000206000915054906101000a900460ff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b60195481565b60185481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e1357600080fd5b6103e8610e1e610da3565b610e289190614298565b811015610e6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e619061433b565b60405180910390fd5b80600a8190555050565b6000610e818484846128a4565b610f4284610e8d6126d1565b610f3d856040518060600160405280602881526020016151e960289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610ef36126d1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461326f9092919063ffffffff16565b6126d9565b600190509392505050565b60006012905090565b6000610fff610f636126d1565b84610ffa8560016000610f746126d1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461267390919063ffffffff16565b6126d9565b6001905092915050565b6110116126d1565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110a0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611097906143a7565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fae2493af1952873c822f6dfbb8f07b6b6139a8c0ae70142acc6f924b0b4c1ef060405160405180910390a380600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d60009054906101000a900460ff1681565b6000601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60135481565b60145481565b600d60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61125e6126d1565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e4906143a7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60175481565b60006113be6126d1565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461144d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611444906143a7565b60405180910390fd5b6000600d60006101000a81548160ff0219169083151502179055506001905090565b6114776126d1565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611506576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fd906143a7565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166115df57600080fd5b600061160c600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661120e565b905060018311801561162957506064816116269190614298565b83105b611668576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165f90614413565b60405180910390fd5b611671836132d3565b61167a846133a3565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516116c290614464565b60006040518083038185875af1925050503d80600081146116ff576040519150601f19603f3d011682016040523d82523d6000602084013e611704565b606091505b50509050809250505092915050565b60115481565b6117216126d1565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a7906143a7565b60405180910390fd5b8260118190555081601281905550806013819055506013546012546011546117d89190614479565b6117e29190614479565b6010819055506063601054111561182e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118259061451b565b60405180910390fd5b505050565b61183b6126d1565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c1906143a7565b60405180910390fd5b6001600d60026101000a81548160ff02191690831515021790555060011515600f60019054906101000a900460ff1615151461193b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193290614587565b60405180910390fd5b6000600f60016101000a81548160ff02191690831515021790555061195e6135e6565b7fbd657b4e94b205761f2ca5be9988d7b243c828f625c0746c6581ec528e507c47600f60019054906101000a900460ff1660405161199c9190613ecd565b60405180910390a1565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60155481565b6060600480546119e590614208565b80601f0160208091040260200160405190810160405280929190818152602001828054611a1190614208565b8015611a5e5780601f10611a3357610100808354040283529160200191611a5e565b820191906000526020600020905b815481529060010190602001808311611a4157829003601f168201915b5050505050905090565b611a706126d1565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611aff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af6906143a7565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8790614619565b60405180910390fd5b611b9a8282613603565b5050565b6000611c61611bab6126d1565b84611c5c856040518060600160405280602581526020016152116025913960016000611bd56126d1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461326f9092919063ffffffff16565b6126d9565b6001905092915050565b6000611c7f611c786126d1565b84846128a4565b6001905092915050565b611c916126d1565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d17906143a7565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601d6020528060005260406000206000915054906101000a900460ff1681565b600d60019054906101000a900460ff1681565b611e1b6126d1565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611eaa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea1906143a7565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611f479190613ecd565b60405180910390a25050565b611f5b6126d1565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe1906143a7565b60405180910390fd5b8260158190555081601681905550806017819055506017546016546015546120129190614479565b61201c9190614479565b60148190555060196014541115612068576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205f90614685565b60405180910390fd5b505050565b6120756126d1565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612104576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120fb906143a7565b60405180910390fd5b670de0b6b3a76400006103e8600561211a610da3565b61212491906146a5565b61212e9190614298565b6121389190614298565b81101561217a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217190614771565b60405180910390fd5b670de0b6b3a76400008161218e91906146a5565b600c8190555050565b600f60009054906101000a900460ff1681565b600a5481565b60006121ba6126d1565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612249576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612240906143a7565b60405180910390fd5b620186a06001612257610da3565b61226191906146a5565b61226b9190614298565b8210156122ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a490614803565b60405180910390fd5b6103e860056122ba610da3565b6122c491906146a5565b6122ce9190614298565b821115612310576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230790614895565b60405180910390fd5b81600b8190555060019050919050565b601a5481565b60105481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b5481565b60006123e96126d1565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612478576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246f906143a7565b60405180910390fd5b6000600f60006101000a81548160ff0219169083151502179055506001905090565b60125481565b6124a86126d1565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612537576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252e906143a7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156125a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259e90614927565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60165481565b600c5481565b60008082846126829190614479565b9050838110156126c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126be90614993565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612749576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274090614a25565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b090614ab7565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516128979190613f9e565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612914576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290b90614b49565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612984576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297b90614bdb565b60405180910390fd5b600081141561299e57612999838360006136a4565b61326a565b600d60009054906101000a900460ff1615612d92576129bb6119a6565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612a2957506129f96119a6565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612a625750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612a9c575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612ab55750600760149054906101000a900460ff16155b15612d9157600d60019054906101000a900460ff16612baf57601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612b6f5750601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612bae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ba590614c47565b60405180910390fd5b5b601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612c525750601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612ca157600a54811115612c9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c9390614cd9565b60405180910390fd5b612d90565b601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612d445750601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d8f57600a54811115612d8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d8590614d6b565b60405180910390fd5b5b5b5b5b6000612d9d3061120e565b90506000600b548210159050808015612dc25750600d60029054906101000a900460ff165b8015612ddb5750600760149054906101000a900460ff16155b8015612e315750601d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612e875750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612edd5750601b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612f21576001600760146101000a81548160ff021916908315150217905550612f05613939565b6000600760146101000a81548160ff0219169083151502179055505b6000600760149054906101000a900460ff16159050601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612fd75750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612fe157600090505b6000811561325a57601d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561304457506000601454115b1561311157613071606461306360145488613ba790919063ffffffff16565b613c2290919063ffffffff16565b90506014546016548261308491906146a5565b61308e9190614298565b6019600082825461309f9190614479565b92505081905550601454601754826130b791906146a5565b6130c19190614298565b601a60008282546130d29190614479565b92505081905550601454601554826130ea91906146a5565b6130f49190614298565b601860008282546131059190614479565b92505081905550613236565b601d60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561316c57506000601054115b1561323557613199606461318b60105488613ba790919063ffffffff16565b613c2290919063ffffffff16565b9050601054601254826131ac91906146a5565b6131b69190614298565b601960008282546131c79190614479565b92505081905550601054601354826131df91906146a5565b6131e99190614298565b601a60008282546131fa9190614479565b925050819055506010546011548261321291906146a5565b61321c9190614298565b6018600082825461322d9190614479565b925050819055505b5b600081111561324b5761324a8730836136a4565b5b80856132579190614d8b565b94505b6132658787876136a4565b505050505b505050565b60008383111582906132b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132ae9190613db7565b60405180910390fd5b50600083856132c69190614d8b565b9050809150509392505050565b61331e600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1630613302610f4d565b600a61330e9190614ef2565b8461331991906146a5565b6128a4565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561338857600080fd5b505af115801561339c573d6000803e3d6000fd5b5050505050565b6000600267ffffffffffffffff8111156133c0576133bf614f3d565b5b6040519080825280602002602001820160405280156133ee5781602001602082028036833780820191505090505b509050308160008151811061340657613405614f6c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156134ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134d19190614fb0565b816001815181106134e5576134e4614f6c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061354c30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846126d9565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016135b09594939291906150d6565b600060405180830381600087803b1580156135ca57600080fd5b505af11580156135de573d6000803e3d6000fd5b505050505050565b6001600d60016101000a81548160ff021916908315150217905550565b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613714576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161370b90614b49565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613784576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161377b90614bdb565b60405180910390fd5b61378f838383613c6c565b6137fa816040518060600160405280602681526020016151c3602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461326f9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061388d816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461267390919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161392c9190613f9e565b60405180910390a3505050565b60006139443061120e565b90506000601a5460185460195461395b9190614479565b6139659190614479565b90506000808314806139775750600082145b1561398457505050613ba5565b6014600b5461399391906146a5565b8311156139ac576014600b546139a991906146a5565b92505b6000600283601954866139bf91906146a5565b6139c99190614298565b6139d39190614298565b905060006139ea8286613c7190919063ffffffff16565b905060004790506139fa826133a3565b6000613a0f8247613c7190919063ffffffff16565b90506000613a3a87613a2c60185485613ba790919063ffffffff16565b613c2290919063ffffffff16565b90506000613a6588613a57601a5486613ba790919063ffffffff16565b613c2290919063ffffffff16565b9050600060198190555060006018819055506000601a81905550600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681604051613ac590614464565b60006040518083038185875af1925050503d8060008114613b02576040519150601f19603f3d011682016040523d82523d6000602084013e613b07565b606091505b505080975050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613b5390614464565b60006040518083038185875af1925050503d8060008114613b90576040519150601f19603f3d011682016040523d82523d6000602084013e613b95565b606091505b5050809750505050505050505050505b565b600080831415613bba5760009050613c1c565b60008284613bc891906146a5565b9050828482613bd79190614298565b14613c17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c0e906151a2565b60405180910390fd5b809150505b92915050565b6000613c6483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613cbb565b905092915050565b505050565b6000613cb383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061326f565b905092915050565b60008083118290613d02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613cf99190613db7565b60405180910390fd5b5060008385613d119190614298565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613d58578082015181840152602081019050613d3d565b83811115613d67576000848401525b50505050565b6000601f19601f8301169050919050565b6000613d8982613d1e565b613d938185613d29565b9350613da3818560208601613d3a565b613dac81613d6d565b840191505092915050565b60006020820190508181036000830152613dd18184613d7e565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613e0982613dde565b9050919050565b613e1981613dfe565b8114613e2457600080fd5b50565b600081359050613e3681613e10565b92915050565b6000819050919050565b613e4f81613e3c565b8114613e5a57600080fd5b50565b600081359050613e6c81613e46565b92915050565b60008060408385031215613e8957613e88613dd9565b5b6000613e9785828601613e27565b9250506020613ea885828601613e5d565b9150509250929050565b60008115159050919050565b613ec781613eb2565b82525050565b6000602082019050613ee26000830184613ebe565b92915050565b600060208284031215613efe57613efd613dd9565b5b6000613f0c84828501613e27565b91505092915050565b6000819050919050565b6000613f3a613f35613f3084613dde565b613f15565b613dde565b9050919050565b6000613f4c82613f1f565b9050919050565b6000613f5e82613f41565b9050919050565b613f6e81613f53565b82525050565b6000602082019050613f896000830184613f65565b92915050565b613f9881613e3c565b82525050565b6000602082019050613fb36000830184613f8f565b92915050565b600060208284031215613fcf57613fce613dd9565b5b6000613fdd84828501613e5d565b91505092915050565b600080600060608486031215613fff57613ffe613dd9565b5b600061400d86828701613e27565b935050602061401e86828701613e27565b925050604061402f86828701613e5d565b9150509250925092565b600060ff82169050919050565b61404f81614039565b82525050565b600060208201905061406a6000830184614046565b92915050565b61407981613dfe565b82525050565b60006020820190506140946000830184614070565b92915050565b6140a381613eb2565b81146140ae57600080fd5b50565b6000813590506140c08161409a565b92915050565b600080604083850312156140dd576140dc613dd9565b5b60006140eb85828601613e27565b92505060206140fc858286016140b1565b9150509250929050565b6000806040838503121561411d5761411c613dd9565b5b600061412b85828601613e5d565b925050602061413c85828601613e5d565b9150509250929050565b60008060006060848603121561415f5761415e613dd9565b5b600061416d86828701613e5d565b935050602061417e86828701613e5d565b925050604061418f86828701613e5d565b9150509250925092565b600080604083850312156141b0576141af613dd9565b5b60006141be85828601613e27565b92505060206141cf85828601613e27565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061422057607f821691505b60208210811415614234576142336141d9565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006142a382613e3c565b91506142ae83613e3c565b9250826142be576142bd61423a565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614325602f83613d29565b9150614330826142c9565b604082019050919050565b6000602082019050818103600083015261435481614318565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614391602083613d29565b915061439c8261435b565b602082019050919050565b600060208201905081810360008301526143c081614384565b9050919050565b7f616d6f756e742065786365656465640000000000000000000000000000000000600082015250565b60006143fd600f83613d29565b9150614408826143c7565b602082019050919050565b6000602082019050818103600083015261442c816143f0565b9050919050565b600081905092915050565b50565b600061444e600083614433565b91506144598261443e565b600082019050919050565b600061446f82614441565b9150819050919050565b600061448482613e3c565b915061448f83613e3c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156144c4576144c3614269565b5b828201905092915050565b7f4d757374206b656570206665657320617420323025206f72206c657373000000600082015250565b6000614505601d83613d29565b9150614510826144cf565b602082019050919050565b60006020820190508181036000830152614534816144f8565b9050919050565b7f646f6e6500000000000000000000000000000000000000000000000000000000600082015250565b6000614571600483613d29565b915061457c8261453b565b602082019050919050565b600060208201905081810360008301526145a081614564565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614603603983613d29565b915061460e826145a7565b604082019050919050565b60006020820190508181036000830152614632816145f6565b9050919050565b7f4d757374206b656570206665657320617420323525206f72206c657373000000600082015250565b600061466f601d83613d29565b915061467a82614639565b602082019050919050565b6000602082019050818103600083015261469e81614662565b9050919050565b60006146b082613e3c565b91506146bb83613e3c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156146f4576146f3614269565b5b828202905092915050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b600061475b602483613d29565b9150614766826146ff565b604082019050919050565b6000602082019050818103600083015261478a8161474e565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006147ed603583613d29565b91506147f882614791565b604082019050919050565b6000602082019050818103600083015261481c816147e0565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b600061487f603483613d29565b915061488a82614823565b604082019050919050565b600060208201905081810360008301526148ae81614872565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614911602683613d29565b915061491c826148b5565b604082019050919050565b6000602082019050818103600083015261494081614904565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600061497d601b83613d29565b915061498882614947565b602082019050919050565b600060208201905081810360008301526149ac81614970565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614a0f602483613d29565b9150614a1a826149b3565b604082019050919050565b60006020820190508181036000830152614a3e81614a02565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614aa1602283613d29565b9150614aac82614a45565b604082019050919050565b60006020820190508181036000830152614ad081614a94565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614b33602583613d29565b9150614b3e82614ad7565b604082019050919050565b60006020820190508181036000830152614b6281614b26565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614bc5602383613d29565b9150614bd082614b69565b604082019050919050565b60006020820190508181036000830152614bf481614bb8565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614c31601683613d29565b9150614c3c82614bfb565b602082019050919050565b60006020820190508181036000830152614c6081614c24565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614cc3603583613d29565b9150614cce82614c67565b604082019050919050565b60006020820190508181036000830152614cf281614cb6565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000614d55603683613d29565b9150614d6082614cf9565b604082019050919050565b60006020820190508181036000830152614d8481614d48565b9050919050565b6000614d9682613e3c565b9150614da183613e3c565b925082821015614db457614db3614269565b5b828203905092915050565b60008160011c9050919050565b6000808291508390505b6001851115614e1657808604811115614df257614df1614269565b5b6001851615614e015780820291505b8081029050614e0f85614dbf565b9450614dd6565b94509492505050565b600082614e2f5760019050614eeb565b81614e3d5760009050614eeb565b8160018114614e535760028114614e5d57614e8c565b6001915050614eeb565b60ff841115614e6f57614e6e614269565b5b8360020a915084821115614e8657614e85614269565b5b50614eeb565b5060208310610133831016604e8410600b8410161715614ec15782820a905083811115614ebc57614ebb614269565b5b614eeb565b614ece8484846001614dcc565b92509050818404811115614ee557614ee4614269565b5b81810290505b9392505050565b6000614efd82613e3c565b9150614f0883614039565b9250614f357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484614e1f565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050614faa81613e10565b92915050565b600060208284031215614fc657614fc5613dd9565b5b6000614fd484828501614f9b565b91505092915050565b6000819050919050565b6000615002614ffd614ff884614fdd565b613f15565b613e3c565b9050919050565b61501281614fe7565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61504d81613dfe565b82525050565b600061505f8383615044565b60208301905092915050565b6000602082019050919050565b600061508382615018565b61508d8185615023565b935061509883615034565b8060005b838110156150c95781516150b08882615053565b97506150bb8361506b565b92505060018101905061509c565b5085935050505092915050565b600060a0820190506150eb6000830188613f8f565b6150f86020830187615009565b818103604083015261510a8186615078565b90506151196060830185614070565b6151266080830184613f8f565b9695505050505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061518c602183613d29565b915061519782615130565b604082019050919050565b600060208201905081810360008301526151bb8161517f565b905091905056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220602ea01bbb5309c1523187947451c19cc060e5479988539173026d7d8746ba3764736f6c634300080a0033

Deployed Bytecode Sourcemap

17767:13362:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5179:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6109:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18956:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17843:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5506:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18810:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18770;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22564:255;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6289:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5403:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6654:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25395:172;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17891:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18184:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25581:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18576:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18617;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18264:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5624:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11122:148;;;;;;;;;;;;;:::i;:::-;;18728:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21884:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23054:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17987:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24199:520;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18502:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23210:385;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30895:229;;;;;;;;;;;;;:::i;:::-;;10903:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18652:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5289:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24727:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6883:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5762:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25175:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19031:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18224:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24009:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23607:394;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22827:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18381:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18065:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22171:381;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18850:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18468:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5947:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18024:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18107:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22021:135;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18539:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11281:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18690:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18147:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5179:100;5233:13;5266:5;5259:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5179:100;:::o;6109:169::-;6192:4;6209:39;6218:12;:10;:12::i;:::-;6232:7;6241:6;6209:8;:39::i;:::-;6266:4;6259:11;;6109:169;;;;:::o;18956:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;17843:41::-;;;;;;;;;;;;;:::o;5506:108::-;5567:7;5594:12;;5587:19;;5506:108;:::o;18810:33::-;;;;:::o;18770:::-;;;;:::o;22564:255::-;22650:15;;;;;;;;;;;22636:29;;:10;:29;;;22628:38;;;;;;22715:4;22699:13;:11;:13::i;:::-;:20;;;;:::i;:::-;22689:6;:30;;22681:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;22805:6;22782:20;:29;;;;22564:255;:::o;6289:355::-;6429:4;6446:36;6456:6;6464:9;6475:6;6446:9;:36::i;:::-;6493:121;6502:6;6510:12;:10;:12::i;:::-;6524:89;6562:6;6524:89;;;;;;;;;;;;;;;;;:11;:19;6536:6;6524:19;;;;;;;;;;;;;;;:33;6544:12;:10;:12::i;:::-;6524:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;6493:8;:121::i;:::-;6632:4;6625:11;;6289:355;;;;;:::o;5403:93::-;5461:5;5486:2;5479:9;;5403:93;:::o;6654:218::-;6742:4;6759:83;6768:12;:10;:12::i;:::-;6782:7;6791:50;6830:10;6791:11;:25;6803:12;:10;:12::i;:::-;6791:25;;;;;;;;;;;;;;;:34;6817:7;6791:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;6759:8;:83::i;:::-;6860:4;6853:11;;6654:218;;;;:::o;25395:172::-;11043:12;:10;:12::i;:::-;11033:22;;:6;;;;;;;;;;;:22;;;11025:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25509:13:::1;;;;;;;;;;;25478:45;;25498:9;25478:45;;;;;;;;;;;;25550:9;25534:13;;:25;;;;;;;;;;;;;;;;;;25395:172:::0;:::o;17891:28::-;;;;;;;;;;;;;:::o;18184:33::-;;;;;;;;;;;;;:::o;25581:125::-;25646:4;25670:19;:28;25690:7;25670:28;;;;;;;;;;;;;;;;;;;;;;;;;25663:35;;25581:125;;;:::o;18576:28::-;;;;:::o;18617:::-;;;;:::o;18264:31::-;;;;;;;;;;;;;:::o;5624:127::-;5698:7;5725:9;:18;5735:7;5725:18;;;;;;;;;;;;;;;;5718:25;;5624:127;;;:::o;11122:148::-;11043:12;:10;:12::i;:::-;11033:22;;:6;;;;;;;;;;;:22;;;11025:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;11229:1:::1;11192:40;;11213:6;;;;;;;;;;;11192:40;;;;;;;;;;;;11260:1;11243:6;;:19;;;;;;;;;;;;;;;;;;11122:148::o:0;18728:29::-;;;;:::o;21884:121::-;21936:4;11043:12;:10;:12::i;:::-;11033:22;;:6;;;;;;;;;;;:22;;;11025:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21970:5:::1;21953:14;;:22;;;;;;;;;;;;;;;;;;21993:4;21986:11;;21884:121:::0;:::o;23054:144::-;11043:12;:10;:12::i;:::-;11033:22;;:6;;;;;;;;;;;:22;;;11025:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23186:4:::1;23144:31;:39;23176:6;23144:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;23054:144:::0;;:::o;17987:30::-;;;;;;;;;;;;;:::o;24199:520::-;24291:4;24316:19;:31;24336:10;24316:31;;;;;;;;;;;;;;;;;;;;;;;;;24308:40;;;;;;24361:16;24380:24;24390:13;;;;;;;;;;;24380:9;:24::i;:::-;24361:43;;24443:1;24425:15;:19;:58;;;;;24480:3;24466:11;:17;;;;:::i;:::-;24448:15;:35;24425:58;24417:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;24516:30;24530:15;24516:13;:30::i;:::-;24557:35;24574:17;24557:16;:35::i;:::-;24606:12;24631:15;;;;;;;;;;;24623:29;;24660:21;24623:63;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24605:81;;;24704:7;24697:14;;;;24199:520;;;;:::o;18502:30::-;;;;:::o;23210:385::-;11043:12;:10;:12::i;:::-;11033:22;;:6;;;;;;;;;;;:22;;;11025:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23348:13:::1;23330:15;:31;;;;23390:13;23372:15;:31;;;;23430:11;23414:13;:27;;;;23503:13;;23485:15;;23467;;:33;;;;:::i;:::-;:49;;;;:::i;:::-;23452:12;:64;;;;23551:2;23535:12;;:18;;23527:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;23210:385:::0;;;:::o;30895:229::-;11043:12;:10;:12::i;:::-;11033:22;;:6;;;;;;;;;;;:22;;;11025:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30966:4:::1;30952:11;;:18;;;;;;;;;;;;;;;;;;31004:4;30989:19;;:11;;;;;;;;;;;:19;;;30981:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;31042:5;31028:11;;:19;;;;;;;;;;;;;;;;;;31058:13;:11;:13::i;:::-;31087:29;31104:11;;;;;;;;;;;31087:29;;;;;;:::i;:::-;;;;;;;;30895:229::o:0;10903:79::-;10941:7;10968:6;;;;;;;;;;;10961:13;;10903:79;:::o;18652:31::-;;;;:::o;5289:104::-;5345:13;5378:7;5371:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5289:104;:::o;24727:244::-;11043:12;:10;:12::i;:::-;11033:22;;:6;;;;;;;;;;;:22;;;11025:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24834:13:::1;;;;;;;;;;;24826:21;;:4;:21;;;;24818:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;24922:41;24951:4;24957:5;24922:28;:41::i;:::-;24727:244:::0;;:::o;6883:269::-;6976:4;6993:129;7002:12;:10;:12::i;:::-;7016:7;7025:96;7064:15;7025:96;;;;;;;;;;;;;;;;;:11;:25;7037:12;:10;:12::i;:::-;7025:25;;;;;;;;;;;;;;;:34;7051:7;7025:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;6993:8;:129::i;:::-;7140:4;7133:11;;6883:269;;;;:::o;5762:175::-;5848:4;5865:42;5875:12;:10;:12::i;:::-;5889:9;5900:6;5865:9;:42::i;:::-;5925:4;5918:11;;5762:175;;;;:::o;25175:208::-;11043:12;:10;:12::i;:::-;11033:22;;:6;;;;;;;;;;;:22;;;11025:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25312:15:::1;;;;;;;;;;;25269:59;;25292:18;25269:59;;;;;;;;;;;;25357:18;25339:15;;:36;;;;;;;;;;;;;;;;;;25175:208:::0;:::o;19031:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;18224:33::-;;;;;;;;;;;;;:::o;24009:182::-;11043:12;:10;:12::i;:::-;11033:22;;:6;;;;;;;;;;;:22;;;11025:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24125:8:::1;24094:19;:28;24114:7;24094:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;24165:7;24149:34;;;24174:8;24149:34;;;;;;:::i;:::-;;;;;;;;24009:182:::0;;:::o;23607:394::-;11043:12;:10;:12::i;:::-;11033:22;;:6;;;;;;;;;;;:22;;;11025:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23747:13:::1;23728:16;:32;;;;23790:13;23771:16;:32;;;;23831:11;23814:14;:28;;;;23907:14;;23888:16;;23869;;:35;;;;:::i;:::-;:52;;;;:::i;:::-;23853:13;:68;;;;23957:2;23940:13;;:19;;23932:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;23607:394:::0;;;:::o;22827:215::-;11043:12;:10;:12::i;:::-;11033:22;;:6;;;;;;;;;;;:22;;;11025:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22949:4:::1;22943;22939:1;22923:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;22922:31;;;;:::i;:::-;22912:6;:41;;22904:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;23027:6;23017;:17;;;;:::i;:::-;23005:9;:29;;;;22827:215:::0;:::o;18381:40::-;;;;;;;;;;;;;:::o;18065:35::-;;;;:::o;22171:381::-;22252:4;11043:12;:10;:12::i;:::-;11033:22;;:6;;;;;;;;;;;:22;;;11025:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22308:6:::1;22304:1;22288:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:26;;;;:::i;:::-;22275:9;:39;;22267:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;22423:4;22419:1;22403:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;22390:9;:37;;22382:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;22515:9;22494:18;:30;;;;22541:4;22534:11;;22171:381:::0;;;:::o;18850:31::-;;;;:::o;18468:27::-;;;;:::o;5947:151::-;6036:7;6063:11;:18;6075:5;6063:18;;;;;;;;;;;;;;;:27;6082:7;6063:27;;;;;;;;;;;;;;;;6056:34;;5947:151;;;;:::o;18024:28::-;;;;;;;;;;;;;:::o;18107:33::-;;;;:::o;22021:135::-;22081:4;11043:12;:10;:12::i;:::-;11033:22;;:6;;;;;;;;;;;:22;;;11025:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22121:5:::1;22098:20;;:28;;;;;;;;;;;;;;;;;;22144:4;22137:11;;22021:135:::0;:::o;18539:30::-;;;;:::o;11281:244::-;11043:12;:10;:12::i;:::-;11033:22;;:6;;;;;;;;;;;:22;;;11025:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;11390:1:::1;11370:22;;:8;:22;;;;11362:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;11480:8;11451:38;;11472:6;;;;;;;;;;;11451:38;;;;;;;;;;;;11509:8;11500:6;;:17;;;;;;;;;;;;;;;;;;11281:244:::0;:::o;18690:31::-;;;;:::o;18147:24::-;;;;:::o;9112:181::-;9170:7;9190:9;9206:1;9202;:5;;;;:::i;:::-;9190:17;;9231:1;9226;:6;;9218:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;9284:1;9277:8;;;9112:181;;;;:::o;417:98::-;470:7;497:10;490:17;;417:98;:::o;8562:380::-;8715:1;8698:19;;:5;:19;;;;8690:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8796:1;8777:21;;:7;:21;;;;8769:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8880:6;8850:11;:18;8862:5;8850:18;;;;;;;;;;;;;;;:27;8869:7;8850:27;;;;;;;;;;;;;;;:36;;;;8918:7;8902:32;;8911:5;8902:32;;;8927:6;8902:32;;;;;;:::i;:::-;;;;;;;;8562:380;;;:::o;25907:3127::-;26055:1;26039:18;;:4;:18;;;;26031:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26132:1;26118:16;;:2;:16;;;;26110:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;26201:1;26191:6;:11;26188:92;;;26219:28;26235:4;26241:2;26245:1;26219:15;:28::i;:::-;26262:7;;26188:92;26303:14;;;;;;;;;;;26300:997;;;26363:7;:5;:7::i;:::-;26355:15;;:4;:15;;;;:49;;;;;26397:7;:5;:7::i;:::-;26391:13;;:2;:13;;;;26355:49;:86;;;;;26439:1;26425:16;;:2;:16;;;;26355:86;:128;;;;;26476:6;26462:21;;:2;:21;;;;26355:128;:158;;;;;26505:8;;;;;;;;;;;26504:9;26355:158;26333:953;;;26551:13;;;;;;;;;;;26547:148;;26596:19;:25;26616:4;26596:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;26625:19;:23;26645:2;26625:23;;;;;;;;;;;;;;;;;;;;;;;;;26596:52;26588:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;26547:148;26764:25;:31;26790:4;26764:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;26800:31;:35;26832:2;26800:35;;;;;;;;;;;;;;;;;;;;;;;;;26799:36;26764:71;26760:511;;;26882:20;;26872:6;:30;;26864:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;26760:511;;;27054:25;:29;27080:2;27054:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;27088:31;:37;27120:4;27088:37;;;;;;;;;;;;;;;;;;;;;;;;;27087:38;27054:71;27050:221;;;27172:20;;27162:6;:30;;27154:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;27050:221;26760:511;26333:953;26300:997;27311:28;27342:24;27360:4;27342:9;:24::i;:::-;27311:55;;27387:12;27426:18;;27402:20;:42;;27387:57;;27475:7;:35;;;;;27499:11;;;;;;;;;;;27475:35;:61;;;;;27528:8;;;;;;;;;;;27527:9;27475:61;:110;;;;;27554:25;:31;27580:4;27554:31;;;;;;;;;;;;;;;;;;;;;;;;;27553:32;27475:110;:153;;;;;27603:19;:25;27623:4;27603:25;;;;;;;;;;;;;;;;;;;;;;;;;27602:26;27475:153;:194;;;;;27646:19;:23;27666:2;27646:23;;;;;;;;;;;;;;;;;;;;;;;;;27645:24;27475:194;27457:338;;;27707:4;27696:8;;:15;;;;;;;;;;;;;;;;;;27740:10;:8;:10::i;:::-;27778:5;27767:8;;:16;;;;;;;;;;;;;;;;;;27457:338;27807:12;27823:8;;;;;;;;;;;27822:9;27807:24;;27850:19;:25;27870:4;27850:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;27879:19;:23;27899:2;27879:23;;;;;;;;;;;;;;;;;;;;;;;;;27850:52;27847:99;;;27929:5;27919:15;;27847:99;27966:12;28001:7;27998:983;;;28052:25;:29;28078:2;28052:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;28101:1;28085:13;;:17;28052:50;28048:764;;;28129:34;28159:3;28129:25;28140:13;;28129:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;28122:41;;28230:13;;28211:16;;28204:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;28182:18;;:61;;;;;;;:::i;:::-;;;;;;;;28306:13;;28289:14;;28282:4;:21;;;;:::i;:::-;:37;;;;:::i;:::-;28262:16;;:57;;;;;;;:::i;:::-;;;;;;;;28386:13;;28367:16;;28360:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;28338:18;;:61;;;;;;;:::i;:::-;;;;;;;;28048:764;;;28460:25;:31;28486:4;28460:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;28510:1;28495:12;;:16;28460:51;28457:355;;;28536:33;28565:3;28536:24;28547:12;;28536:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;28529:40;;28632:12;;28614:15;;28607:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;28585:18;;:59;;;;;;;:::i;:::-;;;;;;;;28706:12;;28690:13;;28683:4;:20;;;;:::i;:::-;:35;;;;:::i;:::-;28663:16;;:55;;;;;;;:::i;:::-;;;;;;;;28784:12;;28766:15;;28759:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;28737:18;;:59;;;;;;;:::i;:::-;;;;;;;;28457:355;28048:764;28850:1;28843:4;:8;28840:93;;;28875:42;28891:4;28905;28912;28875:15;:42::i;:::-;28840:93;28965:4;28955:14;;;;;:::i;:::-;;;27998:983;28993:33;29009:4;29015:2;29019:6;28993:15;:33::i;:::-;26020:3014;;;;25907:3127;;;;:::o;9449:192::-;9535:7;9568:1;9563;:6;;9571:12;9555:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;9595:9;9611:1;9607;:5;;;;:::i;:::-;9595:17;;9632:1;9625:8;;;9449:192;;;;;:::o;25718:181::-;25777:67;25787:13;;;;;;;;;;;25810:4;25833:10;:8;:10::i;:::-;25827:2;:16;;;;:::i;:::-;25817:7;:26;;;;:::i;:::-;25777:9;:67::i;:::-;25870:13;;;;;;;;;;;25855:34;;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25718:181;:::o;29042:497::-;29114:21;29152:1;29138:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29114:40;;29183:4;29165;29170:1;29165:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;29209:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29199:4;29204:1;29199:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;29244:62;29261:4;29276:15;;;;;;;;;;;29294:11;29244:8;:62::i;:::-;29324:15;;;;;;;;;;;:66;;;29405:11;29431:1;29448:4;29475;29495:15;29324:197;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29097:442;29042:497;:::o;30817:70::-;30875:4;30859:13;;:20;;;;;;;;;;;;;;;;;;30817:70::o;24979:188::-;25096:5;25062:25;:31;25088:4;25062:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;25153:5;25119:40;;25147:4;25119:40;;;;;;;;;;;;24979:188;;:::o;7163:573::-;7321:1;7303:20;;:6;:20;;;;7295:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;7405:1;7384:23;;:9;:23;;;;7376:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;7460:47;7481:6;7489:9;7500:6;7460:20;:47::i;:::-;7540:71;7562:6;7540:71;;;;;;;;;;;;;;;;;:9;:17;7550:6;7540:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;7520:9;:17;7530:6;7520:17;;;;;;;;;;;;;;;:91;;;;7645:32;7670:6;7645:9;:20;7655:9;7645:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;7622:9;:20;7632:9;7622:20;;;;;;;;;;;;;;;:55;;;;7710:9;7693:35;;7702:6;7693:35;;;7721:6;7693:35;;;;;;:::i;:::-;;;;;;;;7163:573;;;:::o;29547:1262::-;29586:23;29612:24;29630:4;29612:9;:24::i;:::-;29586:50;;29647:25;29717:16;;29696:18;;29675;;:39;;;;:::i;:::-;:58;;;;:::i;:::-;29647:86;;29744:12;29799:1;29780:15;:20;:46;;;;29825:1;29804:17;:22;29780:46;29777:60;;;29829:7;;;;;29777:60;29891:2;29870:18;;:23;;;;:::i;:::-;29852:15;:41;29849:111;;;29946:2;29925:18;;:23;;;;:::i;:::-;29907:41;;29849:111;29982:23;30067:1;30047:17;30026:18;;30008:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;29982:86;;30079:26;30108:36;30128:15;30108;:19;;:36;;;;:::i;:::-;30079:65;;30165:25;30193:21;30165:49;;30227:36;30244:18;30227:16;:36::i;:::-;30277:18;30298:44;30324:17;30298:21;:25;;:44;;;;:::i;:::-;30277:65;;30356:23;30382:57;30421:17;30382:34;30397:18;;30382:10;:14;;:34;;;;:::i;:::-;:38;;:57;;;;:::i;:::-;30356:83;;30450:21;30474:55;30511:17;30474:32;30489:16;;30474:10;:14;;:32;;;;:::i;:::-;:36;;:55;;;;:::i;:::-;30450:79;;30563:1;30542:18;:22;;;;30596:1;30575:18;:22;;;;30627:1;30608:16;:20;;;;30670:13;;;;;;;;;;;30662:27;;30697:13;30662:53;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30649:66;;;;;30750:15;;;;;;;;;;;30742:29;;30779:15;30742:57;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30729:70;;;;;29575:1234;;;;;;;;;29547:1262;:::o;9652:253::-;9710:7;9742:1;9737;:6;9733:47;;;9767:1;9760:8;;;;9733:47;9792:9;9808:1;9804;:5;;;;:::i;:::-;9792:17;;9837:1;9832;9828;:5;;;;:::i;:::-;:10;9820:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;9896:1;9889:8;;;9652:253;;;;;:::o;9916:132::-;9974:7;10001:39;10005:1;10008;10001:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;9994:46;;9916:132;;;;:::o;8953:125::-;;;;:::o;9303:136::-;9361:7;9388:43;9392:1;9395;9388:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;9381:50;;9303:136;;;;:::o;10059:191::-;10145:7;10177:1;10173;:5;10180:12;10165:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;10204:9;10220:1;10216;:5;;;;:::i;:::-;10204:17;;10241:1;10234:8;;;10059:191;;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:329::-;3553:6;3602:2;3590:9;3581:7;3577:23;3573:32;3570:119;;;3608:79;;:::i;:::-;3570:119;3728:1;3753:53;3798:7;3789:6;3778:9;3774:22;3753:53;:::i;:::-;3743:63;;3699:117;3494:329;;;;:::o;3829:60::-;3857:3;3878:5;3871:12;;3829:60;;;:::o;3895:142::-;3945:9;3978:53;3996:34;4005:24;4023:5;4005:24;:::i;:::-;3996:34;:::i;:::-;3978:53;:::i;:::-;3965:66;;3895:142;;;:::o;4043:126::-;4093:9;4126:37;4157:5;4126:37;:::i;:::-;4113:50;;4043:126;;;:::o;4175:153::-;4252:9;4285:37;4316:5;4285:37;:::i;:::-;4272:50;;4175:153;;;:::o;4334:185::-;4448:64;4506:5;4448:64;:::i;:::-;4443:3;4436:77;4334:185;;:::o;4525:276::-;4645:4;4683:2;4672:9;4668:18;4660:26;;4696:98;4791:1;4780:9;4776:17;4767:6;4696:98;:::i;:::-;4525:276;;;;:::o;4807:118::-;4894:24;4912:5;4894:24;:::i;:::-;4889:3;4882:37;4807:118;;:::o;4931:222::-;5024:4;5062:2;5051:9;5047:18;5039:26;;5075:71;5143:1;5132:9;5128:17;5119:6;5075:71;:::i;:::-;4931:222;;;;:::o;5159:329::-;5218:6;5267:2;5255:9;5246:7;5242:23;5238:32;5235:119;;;5273:79;;:::i;:::-;5235:119;5393:1;5418:53;5463:7;5454:6;5443:9;5439:22;5418:53;:::i;:::-;5408:63;;5364:117;5159:329;;;;:::o;5494:619::-;5571:6;5579;5587;5636:2;5624:9;5615:7;5611:23;5607:32;5604:119;;;5642:79;;:::i;:::-;5604:119;5762:1;5787:53;5832:7;5823:6;5812:9;5808:22;5787:53;:::i;:::-;5777:63;;5733:117;5889:2;5915:53;5960:7;5951:6;5940:9;5936:22;5915:53;:::i;:::-;5905:63;;5860:118;6017:2;6043:53;6088:7;6079:6;6068:9;6064:22;6043:53;:::i;:::-;6033:63;;5988:118;5494:619;;;;;:::o;6119:86::-;6154:7;6194:4;6187:5;6183:16;6172:27;;6119:86;;;:::o;6211:112::-;6294:22;6310:5;6294:22;:::i;:::-;6289:3;6282:35;6211:112;;:::o;6329:214::-;6418:4;6456:2;6445:9;6441:18;6433:26;;6469:67;6533:1;6522:9;6518:17;6509:6;6469:67;:::i;:::-;6329:214;;;;:::o;6549:118::-;6636:24;6654:5;6636:24;:::i;:::-;6631:3;6624:37;6549:118;;:::o;6673:222::-;6766:4;6804:2;6793:9;6789:18;6781:26;;6817:71;6885:1;6874:9;6870:17;6861:6;6817:71;:::i;:::-;6673:222;;;;:::o;6901:116::-;6971:21;6986:5;6971:21;:::i;:::-;6964:5;6961:32;6951:60;;7007:1;7004;6997:12;6951:60;6901:116;:::o;7023:133::-;7066:5;7104:6;7091:20;7082:29;;7120:30;7144:5;7120:30;:::i;:::-;7023:133;;;;:::o;7162:468::-;7227:6;7235;7284:2;7272:9;7263:7;7259:23;7255:32;7252:119;;;7290:79;;:::i;:::-;7252:119;7410:1;7435:53;7480:7;7471:6;7460:9;7456:22;7435:53;:::i;:::-;7425:63;;7381:117;7537:2;7563:50;7605:7;7596:6;7585:9;7581:22;7563:50;:::i;:::-;7553:60;;7508:115;7162:468;;;;;:::o;7636:474::-;7704:6;7712;7761:2;7749:9;7740:7;7736:23;7732:32;7729:119;;;7767:79;;:::i;:::-;7729:119;7887:1;7912:53;7957:7;7948:6;7937:9;7933:22;7912:53;:::i;:::-;7902:63;;7858:117;8014:2;8040:53;8085:7;8076:6;8065:9;8061:22;8040:53;:::i;:::-;8030:63;;7985:118;7636:474;;;;;:::o;8116:619::-;8193:6;8201;8209;8258:2;8246:9;8237:7;8233:23;8229:32;8226:119;;;8264:79;;:::i;:::-;8226:119;8384:1;8409:53;8454:7;8445:6;8434:9;8430:22;8409:53;:::i;:::-;8399:63;;8355:117;8511:2;8537:53;8582:7;8573:6;8562:9;8558:22;8537:53;:::i;:::-;8527:63;;8482:118;8639:2;8665:53;8710:7;8701:6;8690:9;8686:22;8665:53;:::i;:::-;8655:63;;8610:118;8116:619;;;;;:::o;8741:474::-;8809:6;8817;8866:2;8854:9;8845:7;8841:23;8837:32;8834:119;;;8872:79;;:::i;:::-;8834:119;8992:1;9017:53;9062:7;9053:6;9042:9;9038:22;9017:53;:::i;:::-;9007:63;;8963:117;9119:2;9145:53;9190:7;9181:6;9170:9;9166:22;9145:53;:::i;:::-;9135:63;;9090:118;8741:474;;;;;:::o;9221:180::-;9269:77;9266:1;9259:88;9366:4;9363:1;9356:15;9390:4;9387:1;9380:15;9407:320;9451:6;9488:1;9482:4;9478:12;9468:22;;9535:1;9529:4;9525:12;9556:18;9546:81;;9612:4;9604:6;9600:17;9590:27;;9546:81;9674:2;9666:6;9663:14;9643:18;9640:38;9637:84;;;9693:18;;:::i;:::-;9637:84;9458:269;9407:320;;;:::o;9733:180::-;9781:77;9778:1;9771:88;9878:4;9875:1;9868:15;9902:4;9899:1;9892:15;9919:180;9967:77;9964:1;9957:88;10064:4;10061:1;10054:15;10088:4;10085:1;10078:15;10105:185;10145:1;10162:20;10180:1;10162:20;:::i;:::-;10157:25;;10196:20;10214:1;10196:20;:::i;:::-;10191:25;;10235:1;10225:35;;10240:18;;:::i;:::-;10225:35;10282:1;10279;10275:9;10270:14;;10105:185;;;;:::o;10296:234::-;10436:34;10432:1;10424:6;10420:14;10413:58;10505:17;10500:2;10492:6;10488:15;10481:42;10296:234;:::o;10536:366::-;10678:3;10699:67;10763:2;10758:3;10699:67;:::i;:::-;10692:74;;10775:93;10864:3;10775:93;:::i;:::-;10893:2;10888:3;10884:12;10877:19;;10536:366;;;:::o;10908:419::-;11074:4;11112:2;11101:9;11097:18;11089:26;;11161:9;11155:4;11151:20;11147:1;11136:9;11132:17;11125:47;11189:131;11315:4;11189:131;:::i;:::-;11181:139;;10908:419;;;:::o;11333:182::-;11473:34;11469:1;11461:6;11457:14;11450:58;11333:182;:::o;11521:366::-;11663:3;11684:67;11748:2;11743:3;11684:67;:::i;:::-;11677:74;;11760:93;11849:3;11760:93;:::i;:::-;11878:2;11873:3;11869:12;11862:19;;11521:366;;;:::o;11893:419::-;12059:4;12097:2;12086:9;12082:18;12074:26;;12146:9;12140:4;12136:20;12132:1;12121:9;12117:17;12110:47;12174:131;12300:4;12174:131;:::i;:::-;12166:139;;11893:419;;;:::o;12318:165::-;12458:17;12454:1;12446:6;12442:14;12435:41;12318:165;:::o;12489:366::-;12631:3;12652:67;12716:2;12711:3;12652:67;:::i;:::-;12645:74;;12728:93;12817:3;12728:93;:::i;:::-;12846:2;12841:3;12837:12;12830:19;;12489:366;;;:::o;12861:419::-;13027:4;13065:2;13054:9;13050:18;13042:26;;13114:9;13108:4;13104:20;13100:1;13089:9;13085:17;13078:47;13142:131;13268:4;13142:131;:::i;:::-;13134:139;;12861:419;;;:::o;13286:147::-;13387:11;13424:3;13409:18;;13286:147;;;;:::o;13439:114::-;;:::o;13559:398::-;13718:3;13739:83;13820:1;13815:3;13739:83;:::i;:::-;13732:90;;13831:93;13920:3;13831:93;:::i;:::-;13949:1;13944:3;13940:11;13933:18;;13559:398;;;:::o;13963:379::-;14147:3;14169:147;14312:3;14169:147;:::i;:::-;14162:154;;14333:3;14326:10;;13963:379;;;:::o;14348:305::-;14388:3;14407:20;14425:1;14407:20;:::i;:::-;14402:25;;14441:20;14459:1;14441:20;:::i;:::-;14436:25;;14595:1;14527:66;14523:74;14520:1;14517:81;14514:107;;;14601:18;;:::i;:::-;14514:107;14645:1;14642;14638:9;14631:16;;14348:305;;;;:::o;14659:179::-;14799:31;14795:1;14787:6;14783:14;14776:55;14659:179;:::o;14844:366::-;14986:3;15007:67;15071:2;15066:3;15007:67;:::i;:::-;15000:74;;15083:93;15172:3;15083:93;:::i;:::-;15201:2;15196:3;15192:12;15185:19;;14844:366;;;:::o;15216:419::-;15382:4;15420:2;15409:9;15405:18;15397:26;;15469:9;15463:4;15459:20;15455:1;15444:9;15440:17;15433:47;15497:131;15623:4;15497:131;:::i;:::-;15489:139;;15216:419;;;:::o;15641:154::-;15781:6;15777:1;15769:6;15765:14;15758:30;15641:154;:::o;15801:365::-;15943:3;15964:66;16028:1;16023:3;15964:66;:::i;:::-;15957:73;;16039:93;16128:3;16039:93;:::i;:::-;16157:2;16152:3;16148:12;16141:19;;15801:365;;;:::o;16172:419::-;16338:4;16376:2;16365:9;16361:18;16353:26;;16425:9;16419:4;16415:20;16411:1;16400:9;16396:17;16389:47;16453:131;16579:4;16453:131;:::i;:::-;16445:139;;16172:419;;;:::o;16597:244::-;16737:34;16733:1;16725:6;16721:14;16714:58;16806:27;16801:2;16793:6;16789:15;16782:52;16597:244;:::o;16847:366::-;16989:3;17010:67;17074:2;17069:3;17010:67;:::i;:::-;17003:74;;17086:93;17175:3;17086:93;:::i;:::-;17204:2;17199:3;17195:12;17188:19;;16847:366;;;:::o;17219:419::-;17385:4;17423:2;17412:9;17408:18;17400:26;;17472:9;17466:4;17462:20;17458:1;17447:9;17443:17;17436:47;17500:131;17626:4;17500:131;:::i;:::-;17492:139;;17219:419;;;:::o;17644:179::-;17784:31;17780:1;17772:6;17768:14;17761:55;17644:179;:::o;17829:366::-;17971:3;17992:67;18056:2;18051:3;17992:67;:::i;:::-;17985:74;;18068:93;18157:3;18068:93;:::i;:::-;18186:2;18181:3;18177:12;18170:19;;17829:366;;;:::o;18201:419::-;18367:4;18405:2;18394:9;18390:18;18382:26;;18454:9;18448:4;18444:20;18440:1;18429:9;18425:17;18418:47;18482:131;18608:4;18482:131;:::i;:::-;18474:139;;18201:419;;;:::o;18626:348::-;18666:7;18689:20;18707:1;18689:20;:::i;:::-;18684:25;;18723:20;18741:1;18723:20;:::i;:::-;18718:25;;18911:1;18843:66;18839:74;18836:1;18833:81;18828:1;18821:9;18814:17;18810:105;18807:131;;;18918:18;;:::i;:::-;18807:131;18966:1;18963;18959:9;18948:20;;18626:348;;;;:::o;18980:223::-;19120:34;19116:1;19108:6;19104:14;19097:58;19189:6;19184:2;19176:6;19172:15;19165:31;18980:223;:::o;19209:366::-;19351:3;19372:67;19436:2;19431:3;19372:67;:::i;:::-;19365:74;;19448:93;19537:3;19448:93;:::i;:::-;19566:2;19561:3;19557:12;19550:19;;19209:366;;;:::o;19581:419::-;19747:4;19785:2;19774:9;19770:18;19762:26;;19834:9;19828:4;19824:20;19820:1;19809:9;19805:17;19798:47;19862:131;19988:4;19862:131;:::i;:::-;19854:139;;19581:419;;;:::o;20006:240::-;20146:34;20142:1;20134:6;20130:14;20123:58;20215:23;20210:2;20202:6;20198:15;20191:48;20006:240;:::o;20252:366::-;20394:3;20415:67;20479:2;20474:3;20415:67;:::i;:::-;20408:74;;20491:93;20580:3;20491:93;:::i;:::-;20609:2;20604:3;20600:12;20593:19;;20252:366;;;:::o;20624:419::-;20790:4;20828:2;20817:9;20813:18;20805:26;;20877:9;20871:4;20867:20;20863:1;20852:9;20848:17;20841:47;20905:131;21031:4;20905:131;:::i;:::-;20897:139;;20624:419;;;:::o;21049:239::-;21189:34;21185:1;21177:6;21173:14;21166:58;21258:22;21253:2;21245:6;21241:15;21234:47;21049:239;:::o;21294:366::-;21436:3;21457:67;21521:2;21516:3;21457:67;:::i;:::-;21450:74;;21533:93;21622:3;21533:93;:::i;:::-;21651:2;21646:3;21642:12;21635:19;;21294:366;;;:::o;21666:419::-;21832:4;21870:2;21859:9;21855:18;21847:26;;21919:9;21913:4;21909:20;21905:1;21894:9;21890:17;21883:47;21947:131;22073:4;21947:131;:::i;:::-;21939:139;;21666:419;;;:::o;22091:225::-;22231:34;22227:1;22219:6;22215:14;22208:58;22300:8;22295:2;22287:6;22283:15;22276:33;22091:225;:::o;22322:366::-;22464:3;22485:67;22549:2;22544:3;22485:67;:::i;:::-;22478:74;;22561:93;22650:3;22561:93;:::i;:::-;22679:2;22674:3;22670:12;22663:19;;22322:366;;;:::o;22694:419::-;22860:4;22898:2;22887:9;22883:18;22875:26;;22947:9;22941:4;22937:20;22933:1;22922:9;22918:17;22911:47;22975:131;23101:4;22975:131;:::i;:::-;22967:139;;22694:419;;;:::o;23119:177::-;23259:29;23255:1;23247:6;23243:14;23236:53;23119:177;:::o;23302:366::-;23444:3;23465:67;23529:2;23524:3;23465:67;:::i;:::-;23458:74;;23541:93;23630:3;23541:93;:::i;:::-;23659:2;23654:3;23650:12;23643:19;;23302:366;;;:::o;23674:419::-;23840:4;23878:2;23867:9;23863:18;23855:26;;23927:9;23921:4;23917:20;23913:1;23902:9;23898:17;23891:47;23955:131;24081:4;23955:131;:::i;:::-;23947:139;;23674:419;;;:::o;24099:223::-;24239:34;24235:1;24227:6;24223:14;24216:58;24308:6;24303:2;24295:6;24291:15;24284:31;24099:223;:::o;24328:366::-;24470:3;24491:67;24555:2;24550:3;24491:67;:::i;:::-;24484:74;;24567:93;24656:3;24567:93;:::i;:::-;24685:2;24680:3;24676:12;24669:19;;24328:366;;;:::o;24700:419::-;24866:4;24904:2;24893:9;24889:18;24881:26;;24953:9;24947:4;24943:20;24939:1;24928:9;24924:17;24917:47;24981:131;25107:4;24981:131;:::i;:::-;24973:139;;24700:419;;;:::o;25125:221::-;25265:34;25261:1;25253:6;25249:14;25242:58;25334:4;25329:2;25321:6;25317:15;25310:29;25125:221;:::o;25352:366::-;25494:3;25515:67;25579:2;25574:3;25515:67;:::i;:::-;25508:74;;25591:93;25680:3;25591:93;:::i;:::-;25709:2;25704:3;25700:12;25693:19;;25352:366;;;:::o;25724:419::-;25890:4;25928:2;25917:9;25913:18;25905:26;;25977:9;25971:4;25967:20;25963:1;25952:9;25948:17;25941:47;26005:131;26131:4;26005:131;:::i;:::-;25997:139;;25724:419;;;:::o;26149:224::-;26289:34;26285:1;26277:6;26273:14;26266:58;26358:7;26353:2;26345:6;26341:15;26334:32;26149:224;:::o;26379:366::-;26521:3;26542:67;26606:2;26601:3;26542:67;:::i;:::-;26535:74;;26618:93;26707:3;26618:93;:::i;:::-;26736:2;26731:3;26727:12;26720:19;;26379:366;;;:::o;26751:419::-;26917:4;26955:2;26944:9;26940:18;26932:26;;27004:9;26998:4;26994:20;26990:1;26979:9;26975:17;26968:47;27032:131;27158:4;27032:131;:::i;:::-;27024:139;;26751:419;;;:::o;27176:222::-;27316:34;27312:1;27304:6;27300:14;27293:58;27385:5;27380:2;27372:6;27368:15;27361:30;27176:222;:::o;27404:366::-;27546:3;27567:67;27631:2;27626:3;27567:67;:::i;:::-;27560:74;;27643:93;27732:3;27643:93;:::i;:::-;27761:2;27756:3;27752:12;27745:19;;27404:366;;;:::o;27776:419::-;27942:4;27980:2;27969:9;27965:18;27957:26;;28029:9;28023:4;28019:20;28015:1;28004:9;28000:17;27993:47;28057:131;28183:4;28057:131;:::i;:::-;28049:139;;27776:419;;;:::o;28201:172::-;28341:24;28337:1;28329:6;28325:14;28318:48;28201:172;:::o;28379:366::-;28521:3;28542:67;28606:2;28601:3;28542:67;:::i;:::-;28535:74;;28618:93;28707:3;28618:93;:::i;:::-;28736:2;28731:3;28727:12;28720:19;;28379:366;;;:::o;28751:419::-;28917:4;28955:2;28944:9;28940:18;28932:26;;29004:9;28998:4;28994:20;28990:1;28979:9;28975:17;28968:47;29032:131;29158:4;29032:131;:::i;:::-;29024:139;;28751:419;;;:::o;29176:240::-;29316:34;29312:1;29304:6;29300:14;29293:58;29385:23;29380:2;29372:6;29368:15;29361:48;29176:240;:::o;29422:366::-;29564:3;29585:67;29649:2;29644:3;29585:67;:::i;:::-;29578:74;;29661:93;29750:3;29661:93;:::i;:::-;29779:2;29774:3;29770:12;29763:19;;29422:366;;;:::o;29794:419::-;29960:4;29998:2;29987:9;29983:18;29975:26;;30047:9;30041:4;30037:20;30033:1;30022:9;30018:17;30011:47;30075:131;30201:4;30075:131;:::i;:::-;30067:139;;29794:419;;;:::o;30219:241::-;30359:34;30355:1;30347:6;30343:14;30336:58;30428:24;30423:2;30415:6;30411:15;30404:49;30219:241;:::o;30466:366::-;30608:3;30629:67;30693:2;30688:3;30629:67;:::i;:::-;30622:74;;30705:93;30794:3;30705:93;:::i;:::-;30823:2;30818:3;30814:12;30807:19;;30466:366;;;:::o;30838:419::-;31004:4;31042:2;31031:9;31027:18;31019:26;;31091:9;31085:4;31081:20;31077:1;31066:9;31062:17;31055:47;31119:131;31245:4;31119:131;:::i;:::-;31111:139;;30838:419;;;:::o;31263:191::-;31303:4;31323:20;31341:1;31323:20;:::i;:::-;31318:25;;31357:20;31375:1;31357:20;:::i;:::-;31352:25;;31396:1;31393;31390:8;31387:34;;;31401:18;;:::i;:::-;31387:34;31446:1;31443;31439:9;31431:17;;31263:191;;;;:::o;31460:102::-;31502:8;31549:5;31546:1;31542:13;31521:34;;31460:102;;;:::o;31568:848::-;31629:5;31636:4;31660:6;31651:15;;31684:5;31675:14;;31698:712;31719:1;31709:8;31706:15;31698:712;;;31814:4;31809:3;31805:14;31799:4;31796:24;31793:50;;;31823:18;;:::i;:::-;31793:50;31873:1;31863:8;31859:16;31856:451;;;32288:4;32281:5;32277:16;32268:25;;31856:451;32338:4;32332;32328:15;32320:23;;32368:32;32391:8;32368:32;:::i;:::-;32356:44;;31698:712;;;31568:848;;;;;;;:::o;32422:1073::-;32476:5;32667:8;32657:40;;32688:1;32679:10;;32690:5;;32657:40;32716:4;32706:36;;32733:1;32724:10;;32735:5;;32706:36;32802:4;32850:1;32845:27;;;;32886:1;32881:191;;;;32795:277;;32845:27;32863:1;32854:10;;32865:5;;;32881:191;32926:3;32916:8;32913:17;32910:43;;;32933:18;;:::i;:::-;32910:43;32982:8;32979:1;32975:16;32966:25;;33017:3;33010:5;33007:14;33004:40;;;33024:18;;:::i;:::-;33004:40;33057:5;;;32795:277;;33181:2;33171:8;33168:16;33162:3;33156:4;33153:13;33149:36;33131:2;33121:8;33118:16;33113:2;33107:4;33104:12;33100:35;33084:111;33081:246;;;33237:8;33231:4;33227:19;33218:28;;33272:3;33265:5;33262:14;33259:40;;;33279:18;;:::i;:::-;33259:40;33312:5;;33081:246;33352:42;33390:3;33380:8;33374:4;33371:1;33352:42;:::i;:::-;33337:57;;;;33426:4;33421:3;33417:14;33410:5;33407:25;33404:51;;;33435:18;;:::i;:::-;33404:51;33484:4;33477:5;33473:16;33464:25;;32422:1073;;;;;;:::o;33501:281::-;33559:5;33583:23;33601:4;33583:23;:::i;:::-;33575:31;;33627:25;33643:8;33627:25;:::i;:::-;33615:37;;33671:104;33708:66;33698:8;33692:4;33671:104;:::i;:::-;33662:113;;33501:281;;;;:::o;33788:180::-;33836:77;33833:1;33826:88;33933:4;33930:1;33923:15;33957:4;33954:1;33947:15;33974:180;34022:77;34019:1;34012:88;34119:4;34116:1;34109:15;34143:4;34140:1;34133:15;34160:143;34217:5;34248:6;34242:13;34233:22;;34264:33;34291:5;34264:33;:::i;:::-;34160:143;;;;:::o;34309:351::-;34379:6;34428:2;34416:9;34407:7;34403:23;34399:32;34396:119;;;34434:79;;:::i;:::-;34396:119;34554:1;34579:64;34635:7;34626:6;34615:9;34611:22;34579:64;:::i;:::-;34569:74;;34525:128;34309:351;;;;:::o;34666:85::-;34711:7;34740:5;34729:16;;34666:85;;;:::o;34757:158::-;34815:9;34848:61;34866:42;34875:32;34901:5;34875:32;:::i;:::-;34866:42;:::i;:::-;34848:61;:::i;:::-;34835:74;;34757:158;;;:::o;34921:147::-;35016:45;35055:5;35016:45;:::i;:::-;35011:3;35004:58;34921:147;;:::o;35074:114::-;35141:6;35175:5;35169:12;35159:22;;35074:114;;;:::o;35194:184::-;35293:11;35327:6;35322:3;35315:19;35367:4;35362:3;35358:14;35343:29;;35194:184;;;;:::o;35384:132::-;35451:4;35474:3;35466:11;;35504:4;35499:3;35495:14;35487:22;;35384:132;;;:::o;35522:108::-;35599:24;35617:5;35599:24;:::i;:::-;35594:3;35587:37;35522:108;;:::o;35636:179::-;35705:10;35726:46;35768:3;35760:6;35726:46;:::i;:::-;35804:4;35799:3;35795:14;35781:28;;35636:179;;;;:::o;35821:113::-;35891:4;35923;35918:3;35914:14;35906:22;;35821:113;;;:::o;35970:732::-;36089:3;36118:54;36166:5;36118:54;:::i;:::-;36188:86;36267:6;36262:3;36188:86;:::i;:::-;36181:93;;36298:56;36348:5;36298:56;:::i;:::-;36377:7;36408:1;36393:284;36418:6;36415:1;36412:13;36393:284;;;36494:6;36488:13;36521:63;36580:3;36565:13;36521:63;:::i;:::-;36514:70;;36607:60;36660:6;36607:60;:::i;:::-;36597:70;;36453:224;36440:1;36437;36433:9;36428:14;;36393:284;;;36397:14;36693:3;36686:10;;36094:608;;;35970:732;;;;:::o;36708:831::-;36971:4;37009:3;36998:9;36994:19;36986:27;;37023:71;37091:1;37080:9;37076:17;37067:6;37023:71;:::i;:::-;37104:80;37180:2;37169:9;37165:18;37156:6;37104:80;:::i;:::-;37231:9;37225:4;37221:20;37216:2;37205:9;37201:18;37194:48;37259:108;37362:4;37353:6;37259:108;:::i;:::-;37251:116;;37377:72;37445:2;37434:9;37430:18;37421:6;37377:72;:::i;:::-;37459:73;37527:3;37516:9;37512:19;37503:6;37459:73;:::i;:::-;36708:831;;;;;;;;:::o;37545:220::-;37685:34;37681:1;37673:6;37669:14;37662:58;37754:3;37749:2;37741:6;37737:15;37730:28;37545:220;:::o;37771:366::-;37913:3;37934:67;37998:2;37993:3;37934:67;:::i;:::-;37927:74;;38010:93;38099:3;38010:93;:::i;:::-;38128:2;38123:3;38119:12;38112:19;;37771:366;;;:::o;38143:419::-;38309:4;38347:2;38336:9;38332:18;38324:26;;38396:9;38390:4;38386:20;38382:1;38371:9;38367:17;38360:47;38424:131;38550:4;38424:131;:::i;:::-;38416:139;;38143:419;;;:::o

Swarm Source

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