ETH Price: $2,472.69 (+0.69%)
Gas: 3.94 Gwei
 

Overview

Max Total Supply

10,000,000,000 ODIN

Holders

58

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
417.205941152 ODIN

Value
$0.00
0xa3fd7a9746fbcf147befcd3b6654d0dbcd2c374c
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:
DarkMatter

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-06-13
*/

/* 
Join our telegram group on : https://t.me/darkmatterportal
Dark Matter will focusing on community building and delivering DeFi and NFT into cryptospace through ethereum network

TO VALHALLA !!!
*/

// SPDX-License-Identifier: Unlicensed
pragma solidity ^0.8.4;


abstract contract Context {

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

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

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

library SafeMath {

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

library Address {

    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

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

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }

    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

contract Ownable is Context {
    address private _owner;
    address private _previousOwner;

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

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

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);

    function createPair(address tokenA, address tokenB) external returns (address pair);

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
    
    event 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 burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

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

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

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

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

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

contract DarkMatter is Context, IERC20, Ownable {
    
    using SafeMath for uint256;
    using Address for address;
    
    string private _name = "Dark Matter";
    string private _symbol = "ODIN";
    uint8 private _decimals = 9;

    address payable public marketingWalletAddress = payable(0x1aca7479CEa596486137988Cf1FC62d6562Cd387); // Marketing Address
    address payable private developmentWalletAddress = payable(0x2f9461BeCdffcd3C733965fAd17A47164A47AE46); // Development Address
    address public immutable deadAddress = 0x000000000000000000000000000000000000dEaD;
    
    mapping (address => uint256) _balances;
    mapping (address => mapping (address => uint256)) private _allowances;
    
    mapping (address => bool) public checkExcludedFromFees;
    mapping (address => bool) public checkWalletLimitExcept;
    mapping (address => bool) public checkTxLimitExcept;
    mapping (address => bool) public checkMarketPair;

    uint256 public _buyLiquidityFees = 2;
    uint256 public _buyMarketingFees = 2;
    uint256 public _buyDevelopmentFees = 2;
    uint256 public _sellLiquidityFees = 2;
    uint256 public _sellMarketingFees = 3;
    uint256 public _sellDevelopmentFees = 4;

    uint256 public _liquidityShares = 2;
    uint256 public _marketingShares = 10;
    uint256 public _developmentShares = 10;

    uint256 public _totalTaxIfBuying = 10;
    uint256 public _totalTaxIfSelling = 10;
    uint256 public _totalDistributionShares = 22;

    uint256 private _totalSupply = 10000 * 10**6 * 10**9;
    uint256 public _maxTxAmount = 300 * 10**6 * 10**9;
    uint256 public _walletMax = 300 * 10**6 * 10**9;
    uint256 private minimumTokensBeforeSwap = 10 * 10**9; 

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapPair;
    
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    bool public swapAndLiquifyByLimitOnly = false;
    bool public checkWalletLimit = true;

    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    
    event SwapETHForTokens(
        uint256 amountIn,
        address[] path
    );
    
    event SwapTokensForETH(
        uint256 amountIn,
        address[] path
    );
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    
    constructor () {
        
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); 

        uniswapPair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;
        _allowances[address(this)][address(uniswapV2Router)] = _totalSupply;

        checkExcludedFromFees[owner()] = true;
        checkExcludedFromFees[address(this)] = true;
        
        _totalTaxIfBuying = _buyLiquidityFees.add(_buyMarketingFees).add(_buyDevelopmentFees);
        _totalTaxIfSelling = _sellLiquidityFees.add(_sellMarketingFees).add(_sellDevelopmentFees);
        _totalDistributionShares = _liquidityShares.add(_marketingShares).add(_developmentShares);

        checkWalletLimitExcept[owner()] = true;
        checkWalletLimitExcept[address(uniswapPair)] = true;
        checkWalletLimitExcept[address(this)] = true;
        
        checkTxLimitExcept[owner()] = true;
        checkTxLimitExcept[address(this)] = true;

        checkMarketPair[address(uniswapPair)] = true;

        _balances[_msgSender()] = _totalSupply;
        emit Transfer(address(0), _msgSender(), _totalSupply);
    }

    function name() public view returns (string memory) {
        return _name;
    }

    function symbol() public view returns (string memory) {
        return _symbol;
    }

    function decimals() public view returns (uint8) {
        return _decimals;
    }

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

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

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

    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 approve(address spender, uint256 amount) public override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function _approve(address owner, address spender, uint256 amount) private {
        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 addMarketPair(address account) public onlyOwner {
        checkMarketPair[account] = true;
    }

    function setcheckTxLimitExcept(address holder, bool exempt) external onlyOwner {
        checkTxLimitExcept[holder] = exempt;
    }
    
    function setcheckExcludedFromFees(address account, bool newValue) public onlyOwner {
        checkExcludedFromFees[account] = newValue;
    }

    function setBuyFee(uint256 newLiquidityTax, uint256 newMarketingTax, uint256 newDevelopmentTax) external onlyOwner() {
        _buyLiquidityFees = newLiquidityTax;
        _buyMarketingFees = newMarketingTax;
        _buyDevelopmentFees = newDevelopmentTax;

        _totalTaxIfBuying = _buyLiquidityFees.add(_buyMarketingFees).add(_buyDevelopmentFees);
    }

    function setSellFee(uint256 newLiquidityTax, uint256 newMarketingTax, uint256 newDevelopmentTax) external onlyOwner() {
        _sellLiquidityFees = newLiquidityTax;
        _sellMarketingFees = newMarketingTax;
        _sellDevelopmentFees = newDevelopmentTax;

        _totalTaxIfSelling = _sellLiquidityFees.add(_sellMarketingFees).add(_sellDevelopmentFees);
    }
    
    function setDistributionSettings(uint256 newLiquidityShare, uint256 newMarketingShare, uint256 newDevelopmentShare) external onlyOwner() {
        _liquidityShares = newLiquidityShare;
        _marketingShares = newMarketingShare;
        _developmentShares = newDevelopmentShare;

        _totalDistributionShares = _liquidityShares.add(_marketingShares).add(_developmentShares);
    }
    
    function adjustMaxTxAmount(uint256 maxTxAmount) external onlyOwner() {
        require(maxTxAmount <= (10000 * 10**6 * 10**9), "Max wallet should be less or euqal to 4% totalSupply");
        _maxTxAmount = maxTxAmount;
    }

    function enableDisableWalletLimit(bool newValue) external onlyOwner {
       checkWalletLimit = newValue;
    }

    function setcheckWalletLimitExcept(address holder, bool exempt) external onlyOwner {
        checkWalletLimitExcept[holder] = exempt;
    }

    function setWalletLimit(uint256 newLimit) external onlyOwner {
        _walletMax  = newLimit;
    }

    function setNumTokensBeforeSwap(uint256 newLimit) external onlyOwner() {
        minimumTokensBeforeSwap = newLimit;
    }

    function setMarketingWalletAddress(address newAddress) external onlyOwner() {
        marketingWalletAddress = payable(newAddress);
    }

    function setDevelopmentWalletAddress(address newAddress) external onlyOwner() {
        developmentWalletAddress = payable(newAddress);
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }

    function setSwapAndLiquifyByLimitOnly(bool newValue) public onlyOwner {
        swapAndLiquifyByLimitOnly = newValue;
    }
    
    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply.sub(balanceOf(deadAddress));
    }

    function transferToAddressETH(address payable recipient, uint256 amount) private {
        recipient.transfer(amount);
    }
    
    function changeRouterVersion(address newRouterAddress) public onlyOwner returns(address newPairAddress) {

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(newRouterAddress); 

        newPairAddress = IUniswapV2Factory(_uniswapV2Router.factory()).getPair(address(this), _uniswapV2Router.WETH());

        if(newPairAddress == address(0)) //Create If Doesnt exist
        {
            newPairAddress = IUniswapV2Factory(_uniswapV2Router.factory())
                .createPair(address(this), _uniswapV2Router.WETH());
        }

        uniswapPair = newPairAddress; //Set new pair address
        uniswapV2Router = _uniswapV2Router; //Set new router address

        checkWalletLimitExcept[address(uniswapPair)] = true;
        checkMarketPair[address(uniswapPair)] = true;
    }

     //to recieve ETH from uniswapV2Router when swaping
    receive() external payable {}

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

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

    function _transfer(address sender, address recipient, uint256 amount) private returns (bool) {

        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        if(inSwapAndLiquify)
        { 
            return _basicTransfer(sender, recipient, amount); 
        }
        else
        {
            if(!checkTxLimitExcept[sender] && !checkTxLimitExcept[recipient]) {
                require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
            }            

            uint256 contractTokenBalance = balanceOf(address(this));
            bool overMinimumTokenBalance = contractTokenBalance >= minimumTokensBeforeSwap;
            
            if (overMinimumTokenBalance && !inSwapAndLiquify && !checkMarketPair[sender] && swapAndLiquifyEnabled) 
            {
                if(swapAndLiquifyByLimitOnly)
                    contractTokenBalance = minimumTokensBeforeSwap;
                swapAndLiquify(contractTokenBalance);    
            }

            _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");

            uint256 finalAmount = (checkExcludedFromFees[sender] || checkExcludedFromFees[recipient]) ? 
                                         amount : takeFee(sender, recipient, amount);

            if(checkWalletLimit && !checkWalletLimitExcept[recipient])
                require(balanceOf(recipient).add(finalAmount) <= _walletMax);

            _balances[recipient] = _balances[recipient].add(finalAmount);

            emit Transfer(sender, recipient, finalAmount);
            return true;
        }
    }

    function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) {
        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
        return true;
    }

    function swapAndLiquify(uint256 tAmount) private lockTheSwap {
        
        uint256 tokensForLP = tAmount.mul(_liquidityShares).div(_totalDistributionShares).div(2);
        uint256 tokensForSwap = tAmount.sub(tokensForLP);

        swapTokensForEth(tokensForSwap);
        uint256 amountReceived = address(this).balance;

        uint256 totalETHFee = _totalDistributionShares.sub(_liquidityShares.div(2));
        
        uint256 amountETHLiquidity = amountReceived.mul(_liquidityShares).div(totalETHFee).div(2);
        uint256 amountETHDevelopment = amountReceived.mul(_developmentShares).div(totalETHFee);
        uint256 amountETHMarketing = amountReceived.sub(amountETHLiquidity).sub(amountETHDevelopment);

        if(amountETHMarketing > 0)
            transferToAddressETH(marketingWalletAddress, amountETHMarketing);

        if(amountETHDevelopment > 0)
            transferToAddressETH(developmentWalletAddress, amountETHDevelopment);

        if(amountETHLiquidity > 0 && tokensForLP > 0)
            addLiquidity(tokensForLP, amountETHLiquidity);
    }
    
    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

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

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

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

    function takeFee(address sender, address recipient, uint256 amount) internal returns (uint256) {
        
        uint256 feeAmount = 0;
        
        if(checkMarketPair[sender]) {
            feeAmount = amount.mul(_totalTaxIfBuying).div(100);
        }
        else if(checkMarketPair[recipient]) {
            feeAmount = amount.mul(_totalTaxIfSelling).div(100);
        }
        
        if(feeAmount > 0) {
            _balances[address(this)] = _balances[address(this)].add(feeAmount);
            emit Transfer(sender, address(this), feeAmount);
        }

        return amount.sub(feeAmount);
    }
    
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","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"},{"inputs":[],"name":"_buyDevelopmentFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyLiquidityFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyMarketingFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_developmentShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellDevelopmentFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellLiquidityFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellMarketingFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalDistributionShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalTaxIfBuying","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalTaxIfSelling","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_walletMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addMarketPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"adjustMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newRouterAddress","type":"address"}],"name":"changeRouterVersion","outputs":[{"internalType":"address","name":"newPairAddress","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"checkExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"checkMarketPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"checkTxLimitExcept","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"checkWalletLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"checkWalletLimitExcept","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newValue","type":"bool"}],"name":"enableDisableWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWalletAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiquidityTax","type":"uint256"},{"internalType":"uint256","name":"newMarketingTax","type":"uint256"},{"internalType":"uint256","name":"newDevelopmentTax","type":"uint256"}],"name":"setBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"setDevelopmentWalletAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiquidityShare","type":"uint256"},{"internalType":"uint256","name":"newMarketingShare","type":"uint256"},{"internalType":"uint256","name":"newDevelopmentShare","type":"uint256"}],"name":"setDistributionSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"setMarketingWalletAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setNumTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiquidityTax","type":"uint256"},{"internalType":"uint256","name":"newMarketingTax","type":"uint256"},{"internalType":"uint256","name":"newDevelopmentTax","type":"uint256"}],"name":"setSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newValue","type":"bool"}],"name":"setSwapAndLiquifyByLimitOnly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"newValue","type":"bool"}],"name":"setcheckExcludedFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setcheckTxLimitExcept","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setcheckWalletLimitExcept","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyByLimitOnly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapPair","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":[],"name":"waiveOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526040518060400160405280600b81526020017f4461726b204d6174746572000000000000000000000000000000000000000000815250600290805190602001906200005192919062000b41565b506040518060400160405280600481526020017f4f44494e00000000000000000000000000000000000000000000000000000000815250600390805190602001906200009f92919062000b41565b506009600460006101000a81548160ff021916908360ff160217905550731aca7479cea596486137988cf1fc62d6562cd387600460016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550732f9461becdffcd3c733965fad17a47164a47ae46600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead73ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff1660601b8152506002600c556002600d556002600e556002600f55600360105560046011556002601255600a601355600a601455600a601555600a6016556016601755678ac7230489e80000601855670429d069189e0000601955670429d069189e0000601a556402540be400601b556001601d60156101000a81548160ff0219169083151502179055506000601d60166101000a81548160ff0219169083151502179055506001601d60176101000a81548160ff0219169083151502179055503480156200026557600080fd5b5060006200027862000aad60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200037657600080fd5b505afa1580156200038b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003b1919062000c08565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200041457600080fd5b505afa15801562000429573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200044f919062000c08565b6040518363ffffffff1660e01b81526004016200046e92919062000c7d565b602060405180830381600087803b1580156200048957600080fd5b505af11580156200049e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004c4919062000c08565b601d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601854600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001600860006200060062000ab560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620006e2600e54620006ce600d54600c5462000ade60201b6200293d1790919060201c565b62000ade60201b6200293d1790919060201c565b601581905550620007216011546200070d601054600f5462000ade60201b6200293d1790919060201c565b62000ade60201b6200293d1790919060201c565b601681905550620007606014546200074c60135460125462000ade60201b6200293d1790919060201c565b62000ade60201b6200293d1790919060201c565b6017819055506001600960006200077c62000ab560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160096000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a6000620008b562000ab560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b6000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060185460066000620009ef62000aad60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555062000a3d62000aad60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60185460405162000a9e919062000ccc565b60405180910390a35062000e6c565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600080828462000aef919062000cfa565b90508381101562000b37576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b2e9062000caa565b60405180910390fd5b8091505092915050565b82805462000b4f9062000d95565b90600052602060002090601f01602090048101928262000b73576000855562000bbf565b82601f1062000b8e57805160ff191683800117855562000bbf565b8280016001018555821562000bbf579182015b8281111562000bbe57825182559160200191906001019062000ba1565b5b50905062000bce919062000bd2565b5090565b5b8082111562000bed57600081600090555060010162000bd3565b5090565b60008151905062000c028162000e52565b92915050565b60006020828403121562000c1b57600080fd5b600062000c2b8482850162000bf1565b91505092915050565b62000c3f8162000d57565b82525050565b600062000c54601b8362000ce9565b915062000c618262000e29565b602082019050919050565b62000c778162000d8b565b82525050565b600060408201905062000c94600083018562000c34565b62000ca3602083018462000c34565b9392505050565b6000602082019050818103600083015262000cc58162000c45565b9050919050565b600060208201905062000ce3600083018462000c6c565b92915050565b600082825260208201905092915050565b600062000d078262000d8b565b915062000d148362000d8b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000d4c5762000d4b62000dcb565b5b828201905092915050565b600062000d648262000d6b565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000600282049050600182168062000dae57607f821691505b6020821081141562000dc55762000dc462000dfa565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b62000e5d8162000d57565b811462000e6957600080fd5b50565b60805160601c614c3762000e92600039600081816111b501526111e10152614c376000f3fe60806040526004361061036f5760003560e01c80637d1db4a5116101c6578063c2d4640e116100f7578063dd62ed3e11610095578063f1d5f5171161006f578063f1d5f51714610ccd578063f2fde38b14610cf6578063f872858a14610d1f578063fabf706314610d4a57610376565b8063dd62ed3e14610c3c578063e207a92b14610c79578063f0cd1dac14610ca257610376565b8063c816841b116100d1578063c816841b14610b90578063d158272d14610bbb578063d76e26a314610be6578063da00097d14610c1157610376565b8063c2d4640e14610b01578063c49b9a8014610b2a578063c78a789b14610b5357610376565b806395d89b4111610164578063a457c2d71161013e578063a457c2d714610a33578063a5d69d1f14610a70578063a9059cbb14610a99578063b6c3af3414610ad657610376565b806395d89b41146109b25780639e3fa323146109dd578063a08e671f14610a0857610376565b806382eefb43116101a057806382eefb431461091c5780638da5cb5b146109475780638f03aad514610972578063914eb66a1461099b57610376565b80637d1db4a51461089d5780637d7846ff146108c8578063807c2d9c146108f157610376565b806339509351116102a057806357e6adcb1161023e578063661b6e3611610218578063661b6e36146107e1578063667b511c1461080c578063705f9d741461083557806370a082311461086057610376565b806357e6adcb146107505780635881f3ef14610779578063646d4700146107b657610376565b80634cb80fd51161027a5780634cb80fd514610682578063526012e8146106ab57806355324fa9146106e8578063565cec381461072557610376565b806339509351146105f15780633b97084a1461062e5780634a74bb021461065757610376565b80632563ae831161030d5780632cdae5cb116102e75780632cdae5cb146105475780632df67109146105705780632f0a5fd41461059b578063313ce567146105c657610376565b80632563ae83146104c857806327c8f835146104f15780632b112e491461051c57610376565b806318160ddd1161034957806318160ddd1461040e5780631d865c301461043957806323b872dd1461046257806325519cf21461049f57610376565b806306fdde031461037b578063095ea7b3146103a65780631694505e146103e357610376565b3661037657005b600080fd5b34801561038757600080fd5b50610390610d87565b60405161039d9190614379565b60405180910390f35b3480156103b257600080fd5b506103cd60048036038101906103c89190613ed2565b610e19565b6040516103da9190614343565b60405180910390f35b3480156103ef57600080fd5b506103f8610e37565b604051610405919061435e565b60405180910390f35b34801561041a57600080fd5b50610423610e5d565b60405161043091906144db565b60405180910390f35b34801561044557600080fd5b50610460600480360381019061045b9190613f60565b610e67565b005b34801561046e57600080fd5b5061048960048036038101906104849190613e47565b610f47565b6040516104969190614343565b60405180910390f35b3480156104ab57600080fd5b506104c660048036038101906104c19190613f60565b611021565b005b3480156104d457600080fd5b506104ef60048036038101906104ea9190613f0e565b611101565b005b3480156104fd57600080fd5b506105066111b3565b6040516105139190614283565b60405180910390f35b34801561052857600080fd5b506105316111d7565b60405161053e91906144db565b60405180910390f35b34801561055357600080fd5b5061056e60048036038101906105699190613e96565b61121b565b005b34801561057c57600080fd5b5061058561130b565b60405161059291906144db565b60405180910390f35b3480156105a757600080fd5b506105b0611311565b6040516105bd91906144db565b60405180910390f35b3480156105d257600080fd5b506105db611317565b6040516105e89190614580565b60405180910390f35b3480156105fd57600080fd5b5061061860048036038101906106139190613ed2565b61132e565b6040516106259190614343565b60405180910390f35b34801561063a57600080fd5b5061065560048036038101906106509190613f37565b6113e1565b005b34801561066357600080fd5b5061066c611480565b6040516106799190614343565b60405180910390f35b34801561068e57600080fd5b506106a960048036038101906106a49190613db9565b611493565b005b3480156106b757600080fd5b506106d260048036038101906106cd9190613db9565b61156c565b6040516106df9190614343565b60405180910390f35b3480156106f457600080fd5b5061070f600480360381019061070a9190613db9565b61158c565b60405161071c9190614343565b60405180910390f35b34801561073157600080fd5b5061073a6115ac565b60405161074791906144db565b60405180910390f35b34801561075c57600080fd5b5061077760048036038101906107729190613e96565b6115b2565b005b34801561078557600080fd5b506107a0600480360381019061079b9190613db9565b6116a2565b6040516107ad9190614283565b60405180910390f35b3480156107c257600080fd5b506107cb611c00565b6040516107d891906144db565b60405180910390f35b3480156107ed57600080fd5b506107f6611c06565b60405161080391906144db565b60405180910390f35b34801561081857600080fd5b50610833600480360381019061082e9190613e96565b611c0c565b005b34801561084157600080fd5b5061084a611cfc565b60405161085791906144db565b60405180910390f35b34801561086c57600080fd5b5061088760048036038101906108829190613db9565b611d02565b60405161089491906144db565b60405180910390f35b3480156108a957600080fd5b506108b2611d4b565b6040516108bf91906144db565b60405180910390f35b3480156108d457600080fd5b506108ef60048036038101906108ea9190613db9565b611d51565b005b3480156108fd57600080fd5b50610906611e2a565b60405161091391906144db565b60405180910390f35b34801561092857600080fd5b50610931611e30565b60405161093e91906144db565b60405180910390f35b34801561095357600080fd5b5061095c611e36565b6040516109699190614283565b60405180910390f35b34801561097e57600080fd5b5061099960048036038101906109949190613f37565b611e5f565b005b3480156109a757600080fd5b506109b0611f49565b005b3480156109be57600080fd5b506109c761209c565b6040516109d49190614379565b60405180910390f35b3480156109e957600080fd5b506109f261212e565b6040516109ff91906144db565b60405180910390f35b348015610a1457600080fd5b50610a1d612134565b604051610a2a91906144db565b60405180910390f35b348015610a3f57600080fd5b50610a5a6004803603810190610a559190613ed2565b61213a565b604051610a679190614343565b60405180910390f35b348015610a7c57600080fd5b50610a976004803603810190610a929190613f0e565b612207565b005b348015610aa557600080fd5b50610ac06004803603810190610abb9190613ed2565b6122b9565b604051610acd9190614343565b60405180910390f35b348015610ae257600080fd5b50610aeb6122d8565b604051610af891906144db565b60405180910390f35b348015610b0d57600080fd5b50610b286004803603810190610b239190613f60565b6122de565b005b348015610b3657600080fd5b50610b516004803603810190610b4c9190613f0e565b6123be565b005b348015610b5f57600080fd5b50610b7a6004803603810190610b759190613db9565b6124a7565b604051610b879190614343565b60405180910390f35b348015610b9c57600080fd5b50610ba56124c7565b604051610bb29190614283565b60405180910390f35b348015610bc757600080fd5b50610bd06124ed565b604051610bdd919061429e565b60405180910390f35b348015610bf257600080fd5b50610bfb612513565b604051610c0891906144db565b60405180910390f35b348015610c1d57600080fd5b50610c26612519565b604051610c339190614343565b60405180910390f35b348015610c4857600080fd5b50610c636004803603810190610c5e9190613e0b565b61252c565b604051610c7091906144db565b60405180910390f35b348015610c8557600080fd5b50610ca06004803603810190610c9b9190613db9565b6125b3565b005b348015610cae57600080fd5b50610cb76126a3565b604051610cc491906144db565b60405180910390f35b348015610cd957600080fd5b50610cf46004803603810190610cef9190613f37565b6126a9565b005b348015610d0257600080fd5b50610d1d6004803603810190610d189190613db9565b612748565b005b348015610d2b57600080fd5b50610d3461290a565b604051610d419190614343565b60405180910390f35b348015610d5657600080fd5b50610d716004803603810190610d6c9190613db9565b61291d565b604051610d7e9190614343565b60405180910390f35b606060028054610d96906147d5565b80601f0160208091040260200160405190810160405280929190818152602001828054610dc2906147d5565b8015610e0f5780601f10610de457610100808354040283529160200191610e0f565b820191906000526020600020905b815481529060010190602001808311610df257829003601f168201915b5050505050905090565b6000610e2d610e2661299b565b84846129a3565b6001905092915050565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601854905090565b610e6f61299b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610efc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef39061447b565b60405180910390fd5b82600f819055508160108190555080601181905550610f3c601154610f2e601054600f5461293d90919063ffffffff16565b61293d90919063ffffffff16565b601681905550505050565b6000610f54848484612b6e565b5061101684610f6161299b565b61101185604051806060016040528060288152602001614bb560289139600760008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610fc761299b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131539092919063ffffffff16565b6129a3565b600190509392505050565b61102961299b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ad9061447b565b60405180910390fd5b82600c8190555081600d8190555080600e819055506110f6600e546110e8600d54600c5461293d90919063ffffffff16565b61293d90919063ffffffff16565b601581905550505050565b61110961299b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611196576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118d9061447b565b60405180910390fd5b80601d60176101000a81548160ff02191690831515021790555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60006112166112057f0000000000000000000000000000000000000000000000000000000000000000611d02565b6018546131b790919063ffffffff16565b905090565b61122361299b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a79061447b565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600d5481565b600f5481565b6000600460009054906101000a900460ff16905090565b60006113d761133b61299b565b846113d2856007600061134c61299b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461293d90919063ffffffff16565b6129a3565b6001905092915050565b6113e961299b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611476576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146d9061447b565b60405180910390fd5b80601b8190555050565b601d60159054906101000a900460ff1681565b61149b61299b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611528576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151f9061447b565b60405180910390fd5b80600460016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60096020528060005260406000206000915054906101000a900460ff1681565b600b6020528060005260406000206000915054906101000a900460ff1681565b60135481565b6115ba61299b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611647576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163e9061447b565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006116ac61299b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611739576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117309061447b565b60405180910390fd5b60008290508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561178457600080fd5b505afa158015611798573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117bc9190613de2565b73ffffffffffffffffffffffffffffffffffffffff1663e6a43905308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561181e57600080fd5b505afa158015611832573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118569190613de2565b6040518363ffffffff1660e01b81526004016118739291906142b9565b60206040518083038186803b15801561188b57600080fd5b505afa15801561189f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118c39190613de2565b9150600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a84578073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561194057600080fd5b505afa158015611954573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119789190613de2565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156119da57600080fd5b505afa1580156119ee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a129190613de2565b6040518363ffffffff1660e01b8152600401611a2f9291906142b9565b602060405180830381600087803b158015611a4957600080fd5b505af1158015611a5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a819190613de2565b91505b81601d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160096000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b6000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050919050565b60115481565b60105481565b611c1461299b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ca1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c989061447b565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600e5481565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60195481565b611d5961299b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611de6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ddd9061447b565b60405180910390fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601a5481565b60165481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611e6761299b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ef4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eeb9061447b565b60405180910390fd5b678ac7230489e80000811115611f3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f36906143bb565b60405180910390fd5b8060198190555050565b611f5161299b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd59061447b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6060600380546120ab906147d5565b80601f01602080910402602001604051908101604052809291908181526020018280546120d7906147d5565b80156121245780601f106120f957610100808354040283529160200191612124565b820191906000526020600020905b81548152906001019060200180831161210757829003601f168201915b5050505050905090565b60125481565b60175481565b60006121fd61214761299b565b846121f885604051806060016040528060258152602001614bdd602591396007600061217161299b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131539092919063ffffffff16565b6129a3565b6001905092915050565b61220f61299b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461229c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122939061447b565b60405180910390fd5b80601d60166101000a81548160ff02191690831515021790555050565b60006122cd6122c661299b565b8484612b6e565b506001905092915050565b600c5481565b6122e661299b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612373576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236a9061447b565b60405180910390fd5b8260128190555081601381905550806014819055506123b36014546123a560135460125461293d90919063ffffffff16565b61293d90919063ffffffff16565b601781905550505050565b6123c661299b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612453576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244a9061447b565b60405180910390fd5b80601d60156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1598160405161249c9190614343565b60405180910390a150565b600a6020528060005260406000206000915054906101000a900460ff1681565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60145481565b601d60169054906101000a900460ff1681565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6125bb61299b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612648576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263f9061447b565b60405180910390fd5b6001600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60155481565b6126b161299b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461273e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127359061447b565b60405180910390fd5b80601a8190555050565b61275061299b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146127dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d49061447b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561284d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612844906143db565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601d60179054906101000a900460ff1681565b60086020528060005260406000206000915054906101000a900460ff1681565b600080828461294c91906145f0565b905083811015612991576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129889061441b565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612a13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0a906144bb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a7a906143fb565b60405180910390fd5b80600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612b6191906144db565b60405180910390a3505050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612bdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bd69061449b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612c4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c469061439b565b60405180910390fd5b601d60149054906101000a900460ff1615612c7657612c6f848484613201565b905061314c565b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612d1a5750600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d6557601954821115612d64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d5b9061443b565b60405180910390fd5b5b6000612d7030611d02565b90506000601b548210159050808015612d965750601d60149054906101000a900460ff16155b8015612dec5750600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612e045750601d60159054906101000a900460ff165b15612e2e57601d60169054906101000a900460ff1615612e2457601b5491505b612e2d826133d4565b5b612eb7846040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600660008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131539092919063ffffffff16565b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612f9d5750600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612fb157612fac8787876135c5565b612fb3565b845b9050601d60179054906101000a900460ff16801561301b5750600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561304a57601a5461303e8261303089611d02565b61293d90919063ffffffff16565b111561304957600080fd5b5b61309c81600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461293d90919063ffffffff16565b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161313c91906144db565b60405180910390a3600193505050505b9392505050565b600083831115829061319b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131929190614379565b60405180910390fd5b50600083856131aa91906146d1565b9050809150509392505050565b60006131f983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613153565b905092915050565b600061328c826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131539092919063ffffffff16565b600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061332182600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461293d90919063ffffffff16565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516133c191906144db565b60405180910390a3600190509392505050565b6001601d60146101000a81548160ff021916908315150217905550600061342d600261341f601754613411601254876137ec90919063ffffffff16565b61386790919063ffffffff16565b61386790919063ffffffff16565b9050600061344482846131b790919063ffffffff16565b905061344f816138b1565b6000479050600061348061346f600260125461386790919063ffffffff16565b6017546131b790919063ffffffff16565b905060006134be60026134b0846134a2601254886137ec90919063ffffffff16565b61386790919063ffffffff16565b61386790919063ffffffff16565b905060006134e9836134db601454876137ec90919063ffffffff16565b61386790919063ffffffff16565b905060006135128261350485886131b790919063ffffffff16565b6131b790919063ffffffff16565b9050600081111561354a57613549600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682613bae565b5b60008211156135805761357f600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683613bae565b5b6000831180156135905750600087115b156135a05761359f8784613bf9565b5b505050505050506000601d60146101000a81548160ff02191690831515021790555050565b60008060009050600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561364d576136466064613638601554866137ec90919063ffffffff16565b61386790919063ffffffff16565b90506136cb565b600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156136ca576136c760646136b9601654866137ec90919063ffffffff16565b61386790919063ffffffff16565b90505b5b60008111156137cf5761372681600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461293d90919063ffffffff16565b600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516137c691906144db565b60405180910390a35b6137e281846131b790919063ffffffff16565b9150509392505050565b6000808314156137ff5760009050613861565b6000828461380d9190614677565b905082848261381c9190614646565b1461385c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138539061445b565b60405180910390fd5b809150505b92915050565b60006138a983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613ced565b905092915050565b6000600267ffffffffffffffff8111156138f4577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156139225781602001602082028036833780820191505090505b5090503081600081518110613960577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613a0257600080fd5b505afa158015613a16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a3a9190613de2565b81600181518110613a74577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613adb30601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846129a3565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613b3f959493929190614526565b600060405180830381600087803b158015613b5957600080fd5b505af1158015613b6d573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051613ba29291906144f6565b60405180910390a15050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613bf4573d6000803e3d6000fd5b505050565b613c2630601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846129a3565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613c72611e36565b426040518863ffffffff1660e01b8152600401613c94969594939291906142e2565b6060604051808303818588803b158015613cad57600080fd5b505af1158015613cc1573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613ce69190613faf565b5050505050565b60008083118290613d34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d2b9190614379565b60405180910390fd5b5060008385613d439190614646565b9050809150509392505050565b600081359050613d5f81614b6f565b92915050565b600081519050613d7481614b6f565b92915050565b600081359050613d8981614b86565b92915050565b600081359050613d9e81614b9d565b92915050565b600081519050613db381614b9d565b92915050565b600060208284031215613dcb57600080fd5b6000613dd984828501613d50565b91505092915050565b600060208284031215613df457600080fd5b6000613e0284828501613d65565b91505092915050565b60008060408385031215613e1e57600080fd5b6000613e2c85828601613d50565b9250506020613e3d85828601613d50565b9150509250929050565b600080600060608486031215613e5c57600080fd5b6000613e6a86828701613d50565b9350506020613e7b86828701613d50565b9250506040613e8c86828701613d8f565b9150509250925092565b60008060408385031215613ea957600080fd5b6000613eb785828601613d50565b9250506020613ec885828601613d7a565b9150509250929050565b60008060408385031215613ee557600080fd5b6000613ef385828601613d50565b9250506020613f0485828601613d8f565b9150509250929050565b600060208284031215613f2057600080fd5b6000613f2e84828501613d7a565b91505092915050565b600060208284031215613f4957600080fd5b6000613f5784828501613d8f565b91505092915050565b600080600060608486031215613f7557600080fd5b6000613f8386828701613d8f565b9350506020613f9486828701613d8f565b9250506040613fa586828701613d8f565b9150509250925092565b600080600060608486031215613fc457600080fd5b6000613fd286828701613da4565b9350506020613fe386828701613da4565b9250506040613ff486828701613da4565b9150509250925092565b600061400a8383614025565b60208301905092915050565b61401f81614717565b82525050565b61402e81614705565b82525050565b61403d81614705565b82525050565b600061404e826145ab565b61405881856145ce565b93506140638361459b565b8060005b8381101561409457815161407b8882613ffe565b9750614086836145c1565b925050600181019050614067565b5085935050505092915050565b6140aa81614729565b82525050565b6140b98161476c565b82525050565b6140c881614790565b82525050565b60006140d9826145b6565b6140e381856145df565b93506140f38185602086016147a2565b6140fc81614894565b840191505092915050565b60006141146023836145df565b915061411f826148a5565b604082019050919050565b60006141376034836145df565b9150614142826148f4565b604082019050919050565b600061415a6026836145df565b915061416582614943565b604082019050919050565b600061417d6022836145df565b915061418882614992565b604082019050919050565b60006141a0601b836145df565b91506141ab826149e1565b602082019050919050565b60006141c36028836145df565b91506141ce82614a0a565b604082019050919050565b60006141e66021836145df565b91506141f182614a59565b604082019050919050565b60006142096020836145df565b915061421482614aa8565b602082019050919050565b600061422c6025836145df565b915061423782614ad1565b604082019050919050565b600061424f6024836145df565b915061425a82614b20565b604082019050919050565b61426e81614755565b82525050565b61427d8161475f565b82525050565b60006020820190506142986000830184614034565b92915050565b60006020820190506142b36000830184614016565b92915050565b60006040820190506142ce6000830185614034565b6142db6020830184614034565b9392505050565b600060c0820190506142f76000830189614034565b6143046020830188614265565b61431160408301876140bf565b61431e60608301866140bf565b61432b6080830185614034565b61433860a0830184614265565b979650505050505050565b600060208201905061435860008301846140a1565b92915050565b600060208201905061437360008301846140b0565b92915050565b6000602082019050818103600083015261439381846140ce565b905092915050565b600060208201905081810360008301526143b481614107565b9050919050565b600060208201905081810360008301526143d48161412a565b9050919050565b600060208201905081810360008301526143f48161414d565b9050919050565b6000602082019050818103600083015261441481614170565b9050919050565b6000602082019050818103600083015261443481614193565b9050919050565b60006020820190508181036000830152614454816141b6565b9050919050565b60006020820190508181036000830152614474816141d9565b9050919050565b60006020820190508181036000830152614494816141fc565b9050919050565b600060208201905081810360008301526144b48161421f565b9050919050565b600060208201905081810360008301526144d481614242565b9050919050565b60006020820190506144f06000830184614265565b92915050565b600060408201905061450b6000830185614265565b818103602083015261451d8184614043565b90509392505050565b600060a08201905061453b6000830188614265565b61454860208301876140bf565b818103604083015261455a8186614043565b90506145696060830185614034565b6145766080830184614265565b9695505050505050565b60006020820190506145956000830184614274565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006145fb82614755565b915061460683614755565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561463b5761463a614807565b5b828201905092915050565b600061465182614755565b915061465c83614755565b92508261466c5761466b614836565b5b828204905092915050565b600061468282614755565b915061468d83614755565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156146c6576146c5614807565b5b828202905092915050565b60006146dc82614755565b91506146e783614755565b9250828210156146fa576146f9614807565b5b828203905092915050565b600061471082614735565b9050919050565b600061472282614735565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006147778261477e565b9050919050565b600061478982614735565b9050919050565b600061479b82614755565b9050919050565b60005b838110156147c05780820151818401526020810190506147a5565b838111156147cf576000848401525b50505050565b600060028204905060018216806147ed57607f821691505b6020821081141561480157614800614865565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f4d61782077616c6c65742073686f756c64206265206c657373206f722065757160008201527f616c20746f20342520746f74616c537570706c79000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b614b7881614705565b8114614b8357600080fd5b50565b614b8f81614729565b8114614b9a57600080fd5b50565b614ba681614755565b8114614bb157600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122064fd30bef51daee7da56d7e1000551e4415e458e9869256ddd553598fd7b248f64736f6c63430008040033

Deployed Bytecode

0x60806040526004361061036f5760003560e01c80637d1db4a5116101c6578063c2d4640e116100f7578063dd62ed3e11610095578063f1d5f5171161006f578063f1d5f51714610ccd578063f2fde38b14610cf6578063f872858a14610d1f578063fabf706314610d4a57610376565b8063dd62ed3e14610c3c578063e207a92b14610c79578063f0cd1dac14610ca257610376565b8063c816841b116100d1578063c816841b14610b90578063d158272d14610bbb578063d76e26a314610be6578063da00097d14610c1157610376565b8063c2d4640e14610b01578063c49b9a8014610b2a578063c78a789b14610b5357610376565b806395d89b4111610164578063a457c2d71161013e578063a457c2d714610a33578063a5d69d1f14610a70578063a9059cbb14610a99578063b6c3af3414610ad657610376565b806395d89b41146109b25780639e3fa323146109dd578063a08e671f14610a0857610376565b806382eefb43116101a057806382eefb431461091c5780638da5cb5b146109475780638f03aad514610972578063914eb66a1461099b57610376565b80637d1db4a51461089d5780637d7846ff146108c8578063807c2d9c146108f157610376565b806339509351116102a057806357e6adcb1161023e578063661b6e3611610218578063661b6e36146107e1578063667b511c1461080c578063705f9d741461083557806370a082311461086057610376565b806357e6adcb146107505780635881f3ef14610779578063646d4700146107b657610376565b80634cb80fd51161027a5780634cb80fd514610682578063526012e8146106ab57806355324fa9146106e8578063565cec381461072557610376565b806339509351146105f15780633b97084a1461062e5780634a74bb021461065757610376565b80632563ae831161030d5780632cdae5cb116102e75780632cdae5cb146105475780632df67109146105705780632f0a5fd41461059b578063313ce567146105c657610376565b80632563ae83146104c857806327c8f835146104f15780632b112e491461051c57610376565b806318160ddd1161034957806318160ddd1461040e5780631d865c301461043957806323b872dd1461046257806325519cf21461049f57610376565b806306fdde031461037b578063095ea7b3146103a65780631694505e146103e357610376565b3661037657005b600080fd5b34801561038757600080fd5b50610390610d87565b60405161039d9190614379565b60405180910390f35b3480156103b257600080fd5b506103cd60048036038101906103c89190613ed2565b610e19565b6040516103da9190614343565b60405180910390f35b3480156103ef57600080fd5b506103f8610e37565b604051610405919061435e565b60405180910390f35b34801561041a57600080fd5b50610423610e5d565b60405161043091906144db565b60405180910390f35b34801561044557600080fd5b50610460600480360381019061045b9190613f60565b610e67565b005b34801561046e57600080fd5b5061048960048036038101906104849190613e47565b610f47565b6040516104969190614343565b60405180910390f35b3480156104ab57600080fd5b506104c660048036038101906104c19190613f60565b611021565b005b3480156104d457600080fd5b506104ef60048036038101906104ea9190613f0e565b611101565b005b3480156104fd57600080fd5b506105066111b3565b6040516105139190614283565b60405180910390f35b34801561052857600080fd5b506105316111d7565b60405161053e91906144db565b60405180910390f35b34801561055357600080fd5b5061056e60048036038101906105699190613e96565b61121b565b005b34801561057c57600080fd5b5061058561130b565b60405161059291906144db565b60405180910390f35b3480156105a757600080fd5b506105b0611311565b6040516105bd91906144db565b60405180910390f35b3480156105d257600080fd5b506105db611317565b6040516105e89190614580565b60405180910390f35b3480156105fd57600080fd5b5061061860048036038101906106139190613ed2565b61132e565b6040516106259190614343565b60405180910390f35b34801561063a57600080fd5b5061065560048036038101906106509190613f37565b6113e1565b005b34801561066357600080fd5b5061066c611480565b6040516106799190614343565b60405180910390f35b34801561068e57600080fd5b506106a960048036038101906106a49190613db9565b611493565b005b3480156106b757600080fd5b506106d260048036038101906106cd9190613db9565b61156c565b6040516106df9190614343565b60405180910390f35b3480156106f457600080fd5b5061070f600480360381019061070a9190613db9565b61158c565b60405161071c9190614343565b60405180910390f35b34801561073157600080fd5b5061073a6115ac565b60405161074791906144db565b60405180910390f35b34801561075c57600080fd5b5061077760048036038101906107729190613e96565b6115b2565b005b34801561078557600080fd5b506107a0600480360381019061079b9190613db9565b6116a2565b6040516107ad9190614283565b60405180910390f35b3480156107c257600080fd5b506107cb611c00565b6040516107d891906144db565b60405180910390f35b3480156107ed57600080fd5b506107f6611c06565b60405161080391906144db565b60405180910390f35b34801561081857600080fd5b50610833600480360381019061082e9190613e96565b611c0c565b005b34801561084157600080fd5b5061084a611cfc565b60405161085791906144db565b60405180910390f35b34801561086c57600080fd5b5061088760048036038101906108829190613db9565b611d02565b60405161089491906144db565b60405180910390f35b3480156108a957600080fd5b506108b2611d4b565b6040516108bf91906144db565b60405180910390f35b3480156108d457600080fd5b506108ef60048036038101906108ea9190613db9565b611d51565b005b3480156108fd57600080fd5b50610906611e2a565b60405161091391906144db565b60405180910390f35b34801561092857600080fd5b50610931611e30565b60405161093e91906144db565b60405180910390f35b34801561095357600080fd5b5061095c611e36565b6040516109699190614283565b60405180910390f35b34801561097e57600080fd5b5061099960048036038101906109949190613f37565b611e5f565b005b3480156109a757600080fd5b506109b0611f49565b005b3480156109be57600080fd5b506109c761209c565b6040516109d49190614379565b60405180910390f35b3480156109e957600080fd5b506109f261212e565b6040516109ff91906144db565b60405180910390f35b348015610a1457600080fd5b50610a1d612134565b604051610a2a91906144db565b60405180910390f35b348015610a3f57600080fd5b50610a5a6004803603810190610a559190613ed2565b61213a565b604051610a679190614343565b60405180910390f35b348015610a7c57600080fd5b50610a976004803603810190610a929190613f0e565b612207565b005b348015610aa557600080fd5b50610ac06004803603810190610abb9190613ed2565b6122b9565b604051610acd9190614343565b60405180910390f35b348015610ae257600080fd5b50610aeb6122d8565b604051610af891906144db565b60405180910390f35b348015610b0d57600080fd5b50610b286004803603810190610b239190613f60565b6122de565b005b348015610b3657600080fd5b50610b516004803603810190610b4c9190613f0e565b6123be565b005b348015610b5f57600080fd5b50610b7a6004803603810190610b759190613db9565b6124a7565b604051610b879190614343565b60405180910390f35b348015610b9c57600080fd5b50610ba56124c7565b604051610bb29190614283565b60405180910390f35b348015610bc757600080fd5b50610bd06124ed565b604051610bdd919061429e565b60405180910390f35b348015610bf257600080fd5b50610bfb612513565b604051610c0891906144db565b60405180910390f35b348015610c1d57600080fd5b50610c26612519565b604051610c339190614343565b60405180910390f35b348015610c4857600080fd5b50610c636004803603810190610c5e9190613e0b565b61252c565b604051610c7091906144db565b60405180910390f35b348015610c8557600080fd5b50610ca06004803603810190610c9b9190613db9565b6125b3565b005b348015610cae57600080fd5b50610cb76126a3565b604051610cc491906144db565b60405180910390f35b348015610cd957600080fd5b50610cf46004803603810190610cef9190613f37565b6126a9565b005b348015610d0257600080fd5b50610d1d6004803603810190610d189190613db9565b612748565b005b348015610d2b57600080fd5b50610d3461290a565b604051610d419190614343565b60405180910390f35b348015610d5657600080fd5b50610d716004803603810190610d6c9190613db9565b61291d565b604051610d7e9190614343565b60405180910390f35b606060028054610d96906147d5565b80601f0160208091040260200160405190810160405280929190818152602001828054610dc2906147d5565b8015610e0f5780601f10610de457610100808354040283529160200191610e0f565b820191906000526020600020905b815481529060010190602001808311610df257829003601f168201915b5050505050905090565b6000610e2d610e2661299b565b84846129a3565b6001905092915050565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601854905090565b610e6f61299b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610efc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef39061447b565b60405180910390fd5b82600f819055508160108190555080601181905550610f3c601154610f2e601054600f5461293d90919063ffffffff16565b61293d90919063ffffffff16565b601681905550505050565b6000610f54848484612b6e565b5061101684610f6161299b565b61101185604051806060016040528060288152602001614bb560289139600760008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610fc761299b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131539092919063ffffffff16565b6129a3565b600190509392505050565b61102961299b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ad9061447b565b60405180910390fd5b82600c8190555081600d8190555080600e819055506110f6600e546110e8600d54600c5461293d90919063ffffffff16565b61293d90919063ffffffff16565b601581905550505050565b61110961299b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611196576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118d9061447b565b60405180910390fd5b80601d60176101000a81548160ff02191690831515021790555050565b7f000000000000000000000000000000000000000000000000000000000000dead81565b60006112166112057f000000000000000000000000000000000000000000000000000000000000dead611d02565b6018546131b790919063ffffffff16565b905090565b61122361299b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a79061447b565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600d5481565b600f5481565b6000600460009054906101000a900460ff16905090565b60006113d761133b61299b565b846113d2856007600061134c61299b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461293d90919063ffffffff16565b6129a3565b6001905092915050565b6113e961299b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611476576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146d9061447b565b60405180910390fd5b80601b8190555050565b601d60159054906101000a900460ff1681565b61149b61299b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611528576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151f9061447b565b60405180910390fd5b80600460016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60096020528060005260406000206000915054906101000a900460ff1681565b600b6020528060005260406000206000915054906101000a900460ff1681565b60135481565b6115ba61299b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611647576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163e9061447b565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006116ac61299b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611739576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117309061447b565b60405180910390fd5b60008290508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561178457600080fd5b505afa158015611798573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117bc9190613de2565b73ffffffffffffffffffffffffffffffffffffffff1663e6a43905308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561181e57600080fd5b505afa158015611832573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118569190613de2565b6040518363ffffffff1660e01b81526004016118739291906142b9565b60206040518083038186803b15801561188b57600080fd5b505afa15801561189f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118c39190613de2565b9150600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a84578073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561194057600080fd5b505afa158015611954573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119789190613de2565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156119da57600080fd5b505afa1580156119ee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a129190613de2565b6040518363ffffffff1660e01b8152600401611a2f9291906142b9565b602060405180830381600087803b158015611a4957600080fd5b505af1158015611a5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a819190613de2565b91505b81601d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160096000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b6000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050919050565b60115481565b60105481565b611c1461299b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ca1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c989061447b565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600e5481565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60195481565b611d5961299b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611de6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ddd9061447b565b60405180910390fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601a5481565b60165481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611e6761299b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ef4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eeb9061447b565b60405180910390fd5b678ac7230489e80000811115611f3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f36906143bb565b60405180910390fd5b8060198190555050565b611f5161299b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd59061447b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6060600380546120ab906147d5565b80601f01602080910402602001604051908101604052809291908181526020018280546120d7906147d5565b80156121245780601f106120f957610100808354040283529160200191612124565b820191906000526020600020905b81548152906001019060200180831161210757829003601f168201915b5050505050905090565b60125481565b60175481565b60006121fd61214761299b565b846121f885604051806060016040528060258152602001614bdd602591396007600061217161299b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131539092919063ffffffff16565b6129a3565b6001905092915050565b61220f61299b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461229c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122939061447b565b60405180910390fd5b80601d60166101000a81548160ff02191690831515021790555050565b60006122cd6122c661299b565b8484612b6e565b506001905092915050565b600c5481565b6122e661299b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612373576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236a9061447b565b60405180910390fd5b8260128190555081601381905550806014819055506123b36014546123a560135460125461293d90919063ffffffff16565b61293d90919063ffffffff16565b601781905550505050565b6123c661299b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612453576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244a9061447b565b60405180910390fd5b80601d60156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1598160405161249c9190614343565b60405180910390a150565b600a6020528060005260406000206000915054906101000a900460ff1681565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60145481565b601d60169054906101000a900460ff1681565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6125bb61299b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612648576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263f9061447b565b60405180910390fd5b6001600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60155481565b6126b161299b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461273e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127359061447b565b60405180910390fd5b80601a8190555050565b61275061299b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146127dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d49061447b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561284d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612844906143db565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601d60179054906101000a900460ff1681565b60086020528060005260406000206000915054906101000a900460ff1681565b600080828461294c91906145f0565b905083811015612991576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129889061441b565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612a13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0a906144bb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a7a906143fb565b60405180910390fd5b80600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612b6191906144db565b60405180910390a3505050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612bdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bd69061449b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612c4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c469061439b565b60405180910390fd5b601d60149054906101000a900460ff1615612c7657612c6f848484613201565b905061314c565b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612d1a5750600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d6557601954821115612d64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d5b9061443b565b60405180910390fd5b5b6000612d7030611d02565b90506000601b548210159050808015612d965750601d60149054906101000a900460ff16155b8015612dec5750600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612e045750601d60159054906101000a900460ff165b15612e2e57601d60169054906101000a900460ff1615612e2457601b5491505b612e2d826133d4565b5b612eb7846040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600660008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131539092919063ffffffff16565b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612f9d5750600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612fb157612fac8787876135c5565b612fb3565b845b9050601d60179054906101000a900460ff16801561301b5750600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561304a57601a5461303e8261303089611d02565b61293d90919063ffffffff16565b111561304957600080fd5b5b61309c81600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461293d90919063ffffffff16565b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161313c91906144db565b60405180910390a3600193505050505b9392505050565b600083831115829061319b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131929190614379565b60405180910390fd5b50600083856131aa91906146d1565b9050809150509392505050565b60006131f983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613153565b905092915050565b600061328c826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131539092919063ffffffff16565b600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061332182600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461293d90919063ffffffff16565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516133c191906144db565b60405180910390a3600190509392505050565b6001601d60146101000a81548160ff021916908315150217905550600061342d600261341f601754613411601254876137ec90919063ffffffff16565b61386790919063ffffffff16565b61386790919063ffffffff16565b9050600061344482846131b790919063ffffffff16565b905061344f816138b1565b6000479050600061348061346f600260125461386790919063ffffffff16565b6017546131b790919063ffffffff16565b905060006134be60026134b0846134a2601254886137ec90919063ffffffff16565b61386790919063ffffffff16565b61386790919063ffffffff16565b905060006134e9836134db601454876137ec90919063ffffffff16565b61386790919063ffffffff16565b905060006135128261350485886131b790919063ffffffff16565b6131b790919063ffffffff16565b9050600081111561354a57613549600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682613bae565b5b60008211156135805761357f600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683613bae565b5b6000831180156135905750600087115b156135a05761359f8784613bf9565b5b505050505050506000601d60146101000a81548160ff02191690831515021790555050565b60008060009050600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561364d576136466064613638601554866137ec90919063ffffffff16565b61386790919063ffffffff16565b90506136cb565b600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156136ca576136c760646136b9601654866137ec90919063ffffffff16565b61386790919063ffffffff16565b90505b5b60008111156137cf5761372681600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461293d90919063ffffffff16565b600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516137c691906144db565b60405180910390a35b6137e281846131b790919063ffffffff16565b9150509392505050565b6000808314156137ff5760009050613861565b6000828461380d9190614677565b905082848261381c9190614646565b1461385c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138539061445b565b60405180910390fd5b809150505b92915050565b60006138a983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613ced565b905092915050565b6000600267ffffffffffffffff8111156138f4577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156139225781602001602082028036833780820191505090505b5090503081600081518110613960577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613a0257600080fd5b505afa158015613a16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a3a9190613de2565b81600181518110613a74577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613adb30601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846129a3565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613b3f959493929190614526565b600060405180830381600087803b158015613b5957600080fd5b505af1158015613b6d573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051613ba29291906144f6565b60405180910390a15050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613bf4573d6000803e3d6000fd5b505050565b613c2630601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846129a3565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613c72611e36565b426040518863ffffffff1660e01b8152600401613c94969594939291906142e2565b6060604051808303818588803b158015613cad57600080fd5b505af1158015613cc1573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613ce69190613faf565b5050505050565b60008083118290613d34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d2b9190614379565b60405180910390fd5b5060008385613d439190614646565b9050809150509392505050565b600081359050613d5f81614b6f565b92915050565b600081519050613d7481614b6f565b92915050565b600081359050613d8981614b86565b92915050565b600081359050613d9e81614b9d565b92915050565b600081519050613db381614b9d565b92915050565b600060208284031215613dcb57600080fd5b6000613dd984828501613d50565b91505092915050565b600060208284031215613df457600080fd5b6000613e0284828501613d65565b91505092915050565b60008060408385031215613e1e57600080fd5b6000613e2c85828601613d50565b9250506020613e3d85828601613d50565b9150509250929050565b600080600060608486031215613e5c57600080fd5b6000613e6a86828701613d50565b9350506020613e7b86828701613d50565b9250506040613e8c86828701613d8f565b9150509250925092565b60008060408385031215613ea957600080fd5b6000613eb785828601613d50565b9250506020613ec885828601613d7a565b9150509250929050565b60008060408385031215613ee557600080fd5b6000613ef385828601613d50565b9250506020613f0485828601613d8f565b9150509250929050565b600060208284031215613f2057600080fd5b6000613f2e84828501613d7a565b91505092915050565b600060208284031215613f4957600080fd5b6000613f5784828501613d8f565b91505092915050565b600080600060608486031215613f7557600080fd5b6000613f8386828701613d8f565b9350506020613f9486828701613d8f565b9250506040613fa586828701613d8f565b9150509250925092565b600080600060608486031215613fc457600080fd5b6000613fd286828701613da4565b9350506020613fe386828701613da4565b9250506040613ff486828701613da4565b9150509250925092565b600061400a8383614025565b60208301905092915050565b61401f81614717565b82525050565b61402e81614705565b82525050565b61403d81614705565b82525050565b600061404e826145ab565b61405881856145ce565b93506140638361459b565b8060005b8381101561409457815161407b8882613ffe565b9750614086836145c1565b925050600181019050614067565b5085935050505092915050565b6140aa81614729565b82525050565b6140b98161476c565b82525050565b6140c881614790565b82525050565b60006140d9826145b6565b6140e381856145df565b93506140f38185602086016147a2565b6140fc81614894565b840191505092915050565b60006141146023836145df565b915061411f826148a5565b604082019050919050565b60006141376034836145df565b9150614142826148f4565b604082019050919050565b600061415a6026836145df565b915061416582614943565b604082019050919050565b600061417d6022836145df565b915061418882614992565b604082019050919050565b60006141a0601b836145df565b91506141ab826149e1565b602082019050919050565b60006141c36028836145df565b91506141ce82614a0a565b604082019050919050565b60006141e66021836145df565b91506141f182614a59565b604082019050919050565b60006142096020836145df565b915061421482614aa8565b602082019050919050565b600061422c6025836145df565b915061423782614ad1565b604082019050919050565b600061424f6024836145df565b915061425a82614b20565b604082019050919050565b61426e81614755565b82525050565b61427d8161475f565b82525050565b60006020820190506142986000830184614034565b92915050565b60006020820190506142b36000830184614016565b92915050565b60006040820190506142ce6000830185614034565b6142db6020830184614034565b9392505050565b600060c0820190506142f76000830189614034565b6143046020830188614265565b61431160408301876140bf565b61431e60608301866140bf565b61432b6080830185614034565b61433860a0830184614265565b979650505050505050565b600060208201905061435860008301846140a1565b92915050565b600060208201905061437360008301846140b0565b92915050565b6000602082019050818103600083015261439381846140ce565b905092915050565b600060208201905081810360008301526143b481614107565b9050919050565b600060208201905081810360008301526143d48161412a565b9050919050565b600060208201905081810360008301526143f48161414d565b9050919050565b6000602082019050818103600083015261441481614170565b9050919050565b6000602082019050818103600083015261443481614193565b9050919050565b60006020820190508181036000830152614454816141b6565b9050919050565b60006020820190508181036000830152614474816141d9565b9050919050565b60006020820190508181036000830152614494816141fc565b9050919050565b600060208201905081810360008301526144b48161421f565b9050919050565b600060208201905081810360008301526144d481614242565b9050919050565b60006020820190506144f06000830184614265565b92915050565b600060408201905061450b6000830185614265565b818103602083015261451d8184614043565b90509392505050565b600060a08201905061453b6000830188614265565b61454860208301876140bf565b818103604083015261455a8186614043565b90506145696060830185614034565b6145766080830184614265565b9695505050505050565b60006020820190506145956000830184614274565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006145fb82614755565b915061460683614755565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561463b5761463a614807565b5b828201905092915050565b600061465182614755565b915061465c83614755565b92508261466c5761466b614836565b5b828204905092915050565b600061468282614755565b915061468d83614755565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156146c6576146c5614807565b5b828202905092915050565b60006146dc82614755565b91506146e783614755565b9250828210156146fa576146f9614807565b5b828203905092915050565b600061471082614735565b9050919050565b600061472282614735565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006147778261477e565b9050919050565b600061478982614735565b9050919050565b600061479b82614755565b9050919050565b60005b838110156147c05780820151818401526020810190506147a5565b838111156147cf576000848401525b50505050565b600060028204905060018216806147ed57607f821691505b6020821081141561480157614800614865565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f4d61782077616c6c65742073686f756c64206265206c657373206f722065757160008201527f616c20746f20342520746f74616c537570706c79000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b614b7881614705565b8114614b8357600080fd5b50565b614b8f81614729565b8114614b9a57600080fd5b50565b614ba681614755565b8114614bb157600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122064fd30bef51daee7da56d7e1000551e4415e458e9869256ddd553598fd7b248f64736f6c63430008040033

Deployed Bytecode Sourcemap

14440:15083:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18212:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19378:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16179:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18489:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20676:373;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24191:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20303:365;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21701:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14948:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22827:128;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20152:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15450:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15538:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18398:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18875:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22081:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16294:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22213:139;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15230:55;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15350:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15716:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21822:141;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23101:813;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15626:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15582:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20007:133;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15493:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18597:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16007:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22360:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16063:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15850:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5979:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21465:228;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6204:145;;;;;;;;;;;;;:::i;:::-;;18303:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15674:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15895:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19101:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22690:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24016:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15407:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21061:392;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22511:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15292:51;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16227:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14689:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15759:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16341:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18724:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19892:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15806:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21971:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6357:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16393:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15169:54;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18212:83;18249:13;18282:5;18275:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18212:83;:::o;19378:161::-;19453:4;19470:39;19479:12;:10;:12::i;:::-;19493:7;19502:6;19470:8;:39::i;:::-;19527:4;19520:11;;19378:161;;;;:::o;16179:41::-;;;;;;;;;;;;;:::o;18489:100::-;18542:7;18569:12;;18562:19;;18489:100;:::o;20676:373::-;6123:12;:10;:12::i;:::-;6113:22;;:6;;;;;;;;;;:22;;;6105:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20826:15:::1;20805:18;:36;;;;20873:15;20852:18;:36;;;;20922:17;20899:20;:40;;;;20973:68;21020:20;;20973:42;20996:18;;20973;;:22;;:42;;;;:::i;:::-;:46;;:68;;;;:::i;:::-;20952:18;:89;;;;20676:373:::0;;;:::o;24191:313::-;24289:4;24306:36;24316:6;24324:9;24335:6;24306:9;:36::i;:::-;;24353:121;24362:6;24370:12;:10;:12::i;:::-;24384:89;24422:6;24384:89;;;;;;;;;;;;;;;;;:11;:19;24396:6;24384:19;;;;;;;;;;;;;;;:33;24404:12;:10;:12::i;:::-;24384:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;24353:8;:121::i;:::-;24492:4;24485:11;;24191:313;;;;;:::o;20303:365::-;6123:12;:10;:12::i;:::-;6113:22;;:6;;;;;;;;;;:22;;;6105:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20451:15:::1;20431:17;:35;;;;20497:15;20477:17;:35;;;;20545:17;20523:19;:39;;;;20595:65;20640:19;;20595:40;20617:17;;20595;;:21;;:40;;;;:::i;:::-;:44;;:65;;;;:::i;:::-;20575:17;:85;;;;20303:365:::0;;;:::o;21701:113::-;6123:12;:10;:12::i;:::-;6113:22;;:6;;;;;;;;;;:22;;;6105:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21798:8:::1;21779:16;;:27;;;;;;;;;;;;;;;;;;21701:113:::0;:::o;14948:81::-;;;:::o;22827:128::-;22880:7;22907:40;22924:22;22934:11;22924:9;:22::i;:::-;22907:12;;:16;;:40;;;;:::i;:::-;22900:47;;22827:128;:::o;20152:143::-;6123:12;:10;:12::i;:::-;6113:22;;:6;;;;;;;;;;:22;;;6105:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20279:8:::1;20246:21;:30;20268:7;20246:30;;;;;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;20152:143:::0;;:::o;15450:36::-;;;;:::o;15538:37::-;;;;:::o;18398:83::-;18439:5;18464:9;;;;;;;;;;;18457:16;;18398:83;:::o;18875:218::-;18963:4;18980:83;18989:12;:10;:12::i;:::-;19003:7;19012:50;19051:10;19012:11;:25;19024:12;:10;:12::i;:::-;19012:25;;;;;;;;;;;;;;;:34;19038:7;19012:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;18980:8;:83::i;:::-;19081:4;19074:11;;18875:218;;;;:::o;22081:124::-;6123:12;:10;:12::i;:::-;6113:22;;:6;;;;;;;;;;:22;;;6105:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22189:8:::1;22163:23;:34;;;;22081:124:::0;:::o;16294:40::-;;;;;;;;;;;;;:::o;22213:139::-;6123:12;:10;:12::i;:::-;6113:22;;:6;;;;;;;;;;:22;;;6105:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22333:10:::1;22300:22;;:44;;;;;;;;;;;;;;;;;;22213:139:::0;:::o;15230:55::-;;;;;;;;;;;;;;;;;;;;;;:::o;15350:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;15716:36::-;;;;:::o;21822:141::-;6123:12;:10;:12::i;:::-;6113:22;;:6;;;;;;;;;;:22;;;6105:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21949:6:::1;21916:22;:30;21939:6;21916:30;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;21822:141:::0;;:::o;23101:813::-;23181:22;6123:12;:10;:12::i;:::-;6113:22;;:6;;;;;;;;;;:22;;;6105:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23218:35:::1;23275:16;23218:74;;23341:16;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23323:53;;;23385:4;23392:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23323:93;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23306:110;;23458:1;23432:28;;:14;:28;;;23429:225;;;23546:16;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23528:74;;;23611:4;23618:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23528:114;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23511:131;;23429:225;23680:14;23666:11;;:28;;;;;;;;;;;;;;;;;;23746:16;23728:15;;:34;;;;;;;;;;;;;;;;;;23847:4;23800:22;:44;23831:11;;;;;;;;;;;23800:44;;;;;;;;;;;;;;;;:51;;;;;;;;;;;;;;;;;;23902:4;23862:15;:37;23886:11;;;;;;;;;;;23862:37;;;;;;;;;;;;;;;;:44;;;;;;;;;;;;;;;;;;6183:1;23101:813:::0;;;:::o;15626:39::-;;;;:::o;15582:37::-;;;;:::o;20007:133::-;6123:12;:10;:12::i;:::-;6113:22;;:6;;;;;;;;;;:22;;;6105:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20126:6:::1;20097:18;:26;20116:6;20097:26;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;20007:133:::0;;:::o;15493:38::-;;;;:::o;18597:119::-;18663:7;18690:9;:18;18700:7;18690:18;;;;;;;;;;;;;;;;18683:25;;18597:119;;;:::o;16007:49::-;;;;:::o;22360:143::-;6123:12;:10;:12::i;:::-;6113:22;;:6;;;;;;;;;;:22;;;6105:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22484:10:::1;22449:24;;:46;;;;;;;;;;;;;;;;;;22360:143:::0;:::o;16063:47::-;;;;:::o;15850:38::-;;;;:::o;5979:79::-;6017:7;6044:6;;;;;;;;;;;6037:13;;5979:79;:::o;21465:228::-;6123:12;:10;:12::i;:::-;6113:22;;:6;;;;;;;;;;:22;;;6105:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21569:21:::1;21553:11;:38;;21545:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;21674:11;21659:12;:26;;;;21465:228:::0;:::o;6204:145::-;6123:12;:10;:12::i;:::-;6113:22;;:6;;;;;;;;;;:22;;;6105:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;6308:1:::1;6271:40;;6292:6;::::0;::::1;;;;;;;;6271:40;;;;;;;;;;;;6339:1;6322:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;6204:145::o:0;18303:87::-;18342:13;18375:7;18368:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18303:87;:::o;15674:35::-;;;;:::o;15895:44::-;;;;:::o;19101:269::-;19194:4;19211:129;19220:12;:10;:12::i;:::-;19234:7;19243:96;19282:15;19243:96;;;;;;;;;;;;;;;;;:11;:25;19255:12;:10;:12::i;:::-;19243:25;;;;;;;;;;;;;;;:34;19269:7;19243:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;19211:8;:129::i;:::-;19358:4;19351:11;;19101:269;;;;:::o;22690:125::-;6123:12;:10;:12::i;:::-;6113:22;;:6;;;;;;;;;;:22;;;6105:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22799:8:::1;22771:25;;:36;;;;;;;;;;;;;;;;;;22690:125:::0;:::o;24016:167::-;24094:4;24111:42;24121:12;:10;:12::i;:::-;24135:9;24146:6;24111:9;:42::i;:::-;;24171:4;24164:11;;24016:167;;;;:::o;15407:36::-;;;;:::o;21061:392::-;6123:12;:10;:12::i;:::-;6113:22;;:6;;;;;;;;;;:22;;;6105:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21228:17:::1;21209:16;:36;;;;21275:17;21256:16;:36;;;;21324:19;21303:18;:40;;;;21383:62;21426:18;;21383:38;21404:16;;21383;;:20;;:38;;;;:::i;:::-;:42;;:62;;;;:::i;:::-;21356:24;:89;;;;21061:392:::0;;;:::o;22511:171::-;6123:12;:10;:12::i;:::-;6113:22;;:6;;;;;;;;;;:22;;;6105:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22612:8:::1;22588:21;;:32;;;;;;;;;;;;;;;;;;22636:38;22665:8;22636:38;;;;;;:::i;:::-;;;;;;;;22511:171:::0;:::o;15292:51::-;;;;;;;;;;;;;;;;;;;;;;:::o;16227:26::-;;;;;;;;;;;;;:::o;14689:99::-;;;;;;;;;;;;;:::o;15759:38::-;;;;:::o;16341:45::-;;;;;;;;;;;;;:::o;18724:143::-;18805:7;18832:11;:18;18844:5;18832:18;;;;;;;;;;;;;;;:27;18851:7;18832:27;;;;;;;;;;;;;;;;18825:34;;18724:143;;;;:::o;19892:107::-;6123:12;:10;:12::i;:::-;6113:22;;:6;;;;;;;;;;:22;;;6105:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19987:4:::1;19960:15;:24;19976:7;19960:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;19892:107:::0;:::o;15806:37::-;;;;:::o;21971:102::-;6123:12;:10;:12::i;:::-;6113:22;;:6;;;;;;;;;;:22;;;6105:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22057:8:::1;22043:10;:22;;;;21971:102:::0;:::o;6357:244::-;6123:12;:10;:12::i;:::-;6113:22;;:6;;;;;;;;;;:22;;;6105:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;6466:1:::1;6446:22;;:8;:22;;;;6438:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;6556:8;6527:38;;6548:6;::::0;::::1;;;;;;;;6527:38;;;;;;;;;;;;6585:8;6576:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;6357:244:::0;:::o;16393:35::-;;;;;;;;;;;;;:::o;15169:54::-;;;;;;;;;;;;;;;;;;;;;;:::o;1381:181::-;1439:7;1459:9;1475:1;1471;:5;;;;:::i;:::-;1459:17;;1500:1;1495;:6;;1487:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;1553:1;1546:8;;;1381:181;;;;:::o;313:115::-;366:15;409:10;394:26;;313:115;:::o;19547:337::-;19657:1;19640:19;;:5;:19;;;;19632:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19738:1;19719:21;;:7;:21;;;;19711:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19822:6;19792:11;:18;19804:5;19792:18;;;;;;;;;;;;;;;:27;19811:7;19792:27;;;;;;;;;;;;;;;:36;;;;19860:7;19844:32;;19853:5;19844:32;;;19869:6;19844:32;;;;;;:::i;:::-;;;;;;;;19547:337;;;:::o;24512:1727::-;24599:4;24644:1;24626:20;;:6;:20;;;;24618:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;24728:1;24707:23;;:9;:23;;;;24699:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;24786:16;;;;;;;;;;;24783:1449;;;24836:41;24851:6;24859:9;24870:6;24836:14;:41::i;:::-;24829:48;;;;24783:1449;24933:18;:26;24952:6;24933:26;;;;;;;;;;;;;;;;;;;;;;;;;24932:27;:61;;;;;24964:18;:29;24983:9;24964:29;;;;;;;;;;;;;;;;;;;;;;;;;24963:30;24932:61;24929:176;;;25032:12;;25022:6;:22;;25014:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;24929:176;25133:28;25164:24;25182:4;25164:9;:24::i;:::-;25133:55;;25203:28;25258:23;;25234:20;:47;;25203:78;;25314:23;:44;;;;;25342:16;;;;;;;;;;;25341:17;25314:44;:72;;;;;25363:15;:23;25379:6;25363:23;;;;;;;;;;;;;;;;;;;;;;;;;25362:24;25314:72;:97;;;;;25390:21;;;;;;;;;;;25314:97;25310:308;;;25449:25;;;;;;;;;;;25446:97;;;25520:23;;25497:46;;25446:97;25562:36;25577:20;25562:14;:36::i;:::-;25310:308;25654:53;25676:6;25654:53;;;;;;;;;;;;;;;;;:9;:17;25664:6;25654:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;25634:9;:17;25644:6;25634:17;;;;;;;;;;;;;;;:73;;;;25724:19;25747:21;:29;25769:6;25747:29;;;;;;;;;;;;;;;;;;;;;;;;;:65;;;;25780:21;:32;25802:9;25780:32;;;;;;;;;;;;;;;;;;;;;;;;;25747:65;25746:156;;25868:34;25876:6;25884:9;25895:6;25868:7;:34::i;:::-;25746:156;;;25859:6;25746:156;25724:178;;25922:16;;;;;;;;;;;:54;;;;;25943:22;:33;25966:9;25943:33;;;;;;;;;;;;;;;;;;;;;;;;;25942:34;25922:54;25919:136;;;26044:10;;26003:37;26028:11;26003:20;26013:9;26003;:20::i;:::-;:24;;:37;;;;:::i;:::-;:51;;25995:60;;;;;;25919:136;26095:37;26120:11;26095:9;:20;26105:9;26095:20;;;;;;;;;;;;;;;;:24;;:37;;;;:::i;:::-;26072:9;:20;26082:9;26072:20;;;;;;;;;;;;;;;:60;;;;26171:9;26154:40;;26163:6;26154:40;;;26182:11;26154:40;;;;;;:::i;:::-;;;;;;;;26216:4;26209:11;;;;;24512:1727;;;;;;:::o;1714:192::-;1800:7;1833:1;1828;:6;;1836:12;1820:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1860:9;1876:1;1872;:5;;;;:::i;:::-;1860:17;;1897:1;1890:8;;;1714:192;;;;;:::o;1570:136::-;1628:7;1655:43;1659:1;1662;1655:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1648:50;;1570:136;;;;:::o;26247:330::-;26340:4;26377:53;26399:6;26377:53;;;;;;;;;;;;;;;;;:9;:17;26387:6;26377:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;26357:9;:17;26367:6;26357:17;;;;;;;;;;;;;;;:73;;;;26464:32;26489:6;26464:9;:20;26474:9;26464:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;26441:9;:20;26451:9;26441:20;;;;;;;;;;;;;;;:55;;;;26529:9;26512:35;;26521:6;26512:35;;;26540:6;26512:35;;;;;;:::i;:::-;;;;;;;;26565:4;26558:11;;26247:330;;;;;:::o;26585:1094::-;16870:4;16851:16;;:23;;;;;;;;;;;;;;;;;;26667:19:::1;26689:66;26753:1;26689:59;26723:24;;26689:29;26701:16;;26689:7;:11;;:29;;;;:::i;:::-;:33;;:59;;;;:::i;:::-;:63;;:66;;;;:::i;:::-;26667:88;;26766:21;26790:24;26802:11;26790:7;:11;;:24;;;;:::i;:::-;26766:48;;26827:31;26844:13;26827:16;:31::i;:::-;26869:22;26894:21;26869:46;;26928:19;26950:53;26979:23;27000:1;26979:16;;:20;;:23;;;;:::i;:::-;26950:24;;:28;;:53;;;;:::i;:::-;26928:75;;27024:26;27053:60;27111:1;27053:53;27094:11;27053:36;27072:16;;27053:14;:18;;:36;;;;:::i;:::-;:40;;:53;;;;:::i;:::-;:57;;:60;;;;:::i;:::-;27024:89;;27124:28;27155:55;27198:11;27155:38;27174:18;;27155:14;:18;;:38;;;;:::i;:::-;:42;;:55;;;;:::i;:::-;27124:86;;27221:26;27250:64;27293:20;27250:38;27269:18;27250:14;:18;;:38;;;;:::i;:::-;:42;;:64;;;;:::i;:::-;27221:93;;27351:1;27330:18;:22;27327:104;;;27367:64;27388:22;;;;;;;;;;;27412:18;27367:20;:64::i;:::-;27327:104;27470:1;27447:20;:24;27444:110;;;27486:68;27507:24;;;;;;;;;;;27533:20;27486;:68::i;:::-;27444:110;27591:1;27570:18;:22;:41;;;;;27610:1;27596:11;:15;27570:41;27567:104;;;27626:45;27639:11;27652:18;27626:12;:45::i;:::-;27567:104;16885:1;;;;;;;16916:5:::0;16897:16;;:24;;;;;;;;;;;;;;;;;;26585:1094;:::o;28886:628::-;28972:7;29002:17;29022:1;29002:21;;29047:15;:23;29063:6;29047:23;;;;;;;;;;;;;;;;;;;;;;;;;29044:229;;;29099:38;29133:3;29099:29;29110:17;;29099:6;:10;;:29;;;;:::i;:::-;:33;;:38;;;;:::i;:::-;29087:50;;29044:229;;;29167:15;:26;29183:9;29167:26;;;;;;;;;;;;;;;;;;;;;;;;;29164:109;;;29222:39;29257:3;29222:30;29233:18;;29222:6;:10;;:30;;;;:::i;:::-;:34;;:39;;;;:::i;:::-;29210:51;;29164:109;29044:229;29308:1;29296:9;:13;29293:173;;;29353:39;29382:9;29353;:24;29371:4;29353:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;29326:9;:24;29344:4;29326:24;;;;;;;;;;;;;;;:66;;;;29437:4;29412:42;;29421:6;29412:42;;;29444:9;29412:42;;;;;;:::i;:::-;;;;;;;;29293:173;29485:21;29496:9;29485:6;:10;;:21;;;;:::i;:::-;29478:28;;;28886:628;;;;;:::o;1914:250::-;1972:7;2001:1;1996;:6;1992:47;;;2026:1;2019:8;;;;1992:47;2051:9;2067:1;2063;:5;;;;:::i;:::-;2051:17;;2096:1;2091;2087;:5;;;;:::i;:::-;:10;2079:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;2155:1;2148:8;;;1914:250;;;;;:::o;2172:132::-;2230:7;2257:39;2261:1;2264;2257:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;2250:46;;2172:132;;;;:::o;27691:666::-;27817:21;27855:1;27841:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27817:40;;27886:4;27868;27873:1;27868:7;;;;;;;;;;;;;;;;;;;;;:23;;;;;;;;;;;27912:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27902:4;27907:1;27902:7;;;;;;;;;;;;;;;;;;;;;:32;;;;;;;;;;;27947:62;27964:4;27979:15;;;;;;;;;;;27997:11;27947:8;:62::i;:::-;28048:15;;;;;;;;;;;:66;;;28129:11;28155:1;28199:4;28226;28262:15;28048:240;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28314:35;28331:11;28344:4;28314:35;;;;;;;:::i;:::-;;;;;;;;27691:666;;:::o;22963:126::-;23055:9;:18;;:26;23074:6;23055:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22963:126;;:::o;28365:513::-;28513:62;28530:4;28545:15;;;;;;;;;;;28563:11;28513:8;:62::i;:::-;28618:15;;;;;;;;;;;:31;;;28657:9;28690:4;28710:11;28736:1;28779;28822:7;:5;:7::i;:::-;28844:15;28618:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;28365:513;;:::o;2312:278::-;2398:7;2430:1;2426;:5;2433:12;2418:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2457:9;2473:1;2469;:5;;;;:::i;:::-;2457:17;;2581:1;2574:8;;;2312:278;;;;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:143::-;209:5;240:6;234:13;225:22;;256:33;283:5;256:33;:::i;:::-;215:80;;;;:::o;301:133::-;344:5;382:6;369:20;360:29;;398:30;422:5;398:30;:::i;:::-;350:84;;;;:::o;440:139::-;486:5;524:6;511:20;502:29;;540:33;567:5;540:33;:::i;:::-;492:87;;;;:::o;585:143::-;642:5;673:6;667:13;658:22;;689:33;716:5;689:33;:::i;:::-;648:80;;;;:::o;734:262::-;793:6;842:2;830:9;821:7;817:23;813:32;810:2;;;858:1;855;848:12;810:2;901:1;926:53;971:7;962:6;951:9;947:22;926:53;:::i;:::-;916:63;;872:117;800:196;;;;:::o;1002:284::-;1072:6;1121:2;1109:9;1100:7;1096:23;1092:32;1089:2;;;1137:1;1134;1127:12;1089:2;1180:1;1205:64;1261:7;1252:6;1241:9;1237:22;1205:64;:::i;:::-;1195:74;;1151:128;1079:207;;;;:::o;1292:407::-;1360:6;1368;1417:2;1405:9;1396:7;1392:23;1388:32;1385:2;;;1433:1;1430;1423:12;1385:2;1476:1;1501:53;1546:7;1537:6;1526:9;1522:22;1501:53;:::i;:::-;1491:63;;1447:117;1603:2;1629:53;1674:7;1665:6;1654:9;1650:22;1629:53;:::i;:::-;1619:63;;1574:118;1375:324;;;;;:::o;1705:552::-;1782:6;1790;1798;1847:2;1835:9;1826:7;1822:23;1818:32;1815:2;;;1863:1;1860;1853:12;1815:2;1906:1;1931:53;1976:7;1967:6;1956:9;1952:22;1931:53;:::i;:::-;1921:63;;1877:117;2033:2;2059:53;2104:7;2095:6;2084:9;2080:22;2059:53;:::i;:::-;2049:63;;2004:118;2161:2;2187:53;2232:7;2223:6;2212:9;2208:22;2187:53;:::i;:::-;2177:63;;2132:118;1805:452;;;;;:::o;2263:401::-;2328:6;2336;2385:2;2373:9;2364:7;2360:23;2356:32;2353:2;;;2401:1;2398;2391:12;2353:2;2444:1;2469:53;2514:7;2505:6;2494:9;2490:22;2469:53;:::i;:::-;2459:63;;2415:117;2571:2;2597:50;2639:7;2630:6;2619:9;2615:22;2597:50;:::i;:::-;2587:60;;2542:115;2343:321;;;;;:::o;2670:407::-;2738:6;2746;2795:2;2783:9;2774:7;2770:23;2766:32;2763:2;;;2811:1;2808;2801:12;2763:2;2854:1;2879:53;2924:7;2915:6;2904:9;2900:22;2879:53;:::i;:::-;2869:63;;2825:117;2981:2;3007:53;3052:7;3043:6;3032:9;3028:22;3007:53;:::i;:::-;2997:63;;2952:118;2753:324;;;;;:::o;3083:256::-;3139:6;3188:2;3176:9;3167:7;3163:23;3159:32;3156:2;;;3204:1;3201;3194:12;3156:2;3247:1;3272:50;3314:7;3305:6;3294:9;3290:22;3272:50;:::i;:::-;3262:60;;3218:114;3146:193;;;;:::o;3345:262::-;3404:6;3453:2;3441:9;3432:7;3428:23;3424:32;3421:2;;;3469:1;3466;3459:12;3421:2;3512:1;3537:53;3582:7;3573:6;3562:9;3558:22;3537:53;:::i;:::-;3527:63;;3483:117;3411:196;;;;:::o;3613:552::-;3690:6;3698;3706;3755:2;3743:9;3734:7;3730:23;3726:32;3723:2;;;3771:1;3768;3761:12;3723:2;3814:1;3839:53;3884:7;3875:6;3864:9;3860:22;3839:53;:::i;:::-;3829:63;;3785:117;3941:2;3967:53;4012:7;4003:6;3992:9;3988:22;3967:53;:::i;:::-;3957:63;;3912:118;4069:2;4095:53;4140:7;4131:6;4120:9;4116:22;4095:53;:::i;:::-;4085:63;;4040:118;3713:452;;;;;:::o;4171:596::-;4259:6;4267;4275;4324:2;4312:9;4303:7;4299:23;4295:32;4292:2;;;4340:1;4337;4330:12;4292:2;4383:1;4408:64;4464:7;4455:6;4444:9;4440:22;4408:64;:::i;:::-;4398:74;;4354:128;4521:2;4547:64;4603:7;4594:6;4583:9;4579:22;4547:64;:::i;:::-;4537:74;;4492:129;4660:2;4686:64;4742:7;4733:6;4722:9;4718:22;4686:64;:::i;:::-;4676:74;;4631:129;4282:485;;;;;:::o;4773:179::-;4842:10;4863:46;4905:3;4897:6;4863:46;:::i;:::-;4941:4;4936:3;4932:14;4918:28;;4853:99;;;;:::o;4958:142::-;5061:32;5087:5;5061:32;:::i;:::-;5056:3;5049:45;5039:61;;:::o;5106:108::-;5183:24;5201:5;5183:24;:::i;:::-;5178:3;5171:37;5161:53;;:::o;5220:118::-;5307:24;5325:5;5307:24;:::i;:::-;5302:3;5295:37;5285:53;;:::o;5374:732::-;5493:3;5522:54;5570:5;5522:54;:::i;:::-;5592:86;5671:6;5666:3;5592:86;:::i;:::-;5585:93;;5702:56;5752:5;5702:56;:::i;:::-;5781:7;5812:1;5797:284;5822:6;5819:1;5816:13;5797:284;;;5898:6;5892:13;5925:63;5984:3;5969:13;5925:63;:::i;:::-;5918:70;;6011:60;6064:6;6011:60;:::i;:::-;6001:70;;5857:224;5844:1;5841;5837:9;5832:14;;5797:284;;;5801:14;6097:3;6090:10;;5498:608;;;;;;;:::o;6112:109::-;6193:21;6208:5;6193:21;:::i;:::-;6188:3;6181:34;6171:50;;:::o;6227:185::-;6341:64;6399:5;6341:64;:::i;:::-;6336:3;6329:77;6319:93;;:::o;6418:147::-;6513:45;6552:5;6513:45;:::i;:::-;6508:3;6501:58;6491:74;;:::o;6571:364::-;6659:3;6687:39;6720:5;6687:39;:::i;:::-;6742:71;6806:6;6801:3;6742:71;:::i;:::-;6735:78;;6822:52;6867:6;6862:3;6855:4;6848:5;6844:16;6822:52;:::i;:::-;6899:29;6921:6;6899:29;:::i;:::-;6894:3;6890:39;6883:46;;6663:272;;;;;:::o;6941:366::-;7083:3;7104:67;7168:2;7163:3;7104:67;:::i;:::-;7097:74;;7180:93;7269:3;7180:93;:::i;:::-;7298:2;7293:3;7289:12;7282:19;;7087:220;;;:::o;7313:366::-;7455:3;7476:67;7540:2;7535:3;7476:67;:::i;:::-;7469:74;;7552:93;7641:3;7552:93;:::i;:::-;7670:2;7665:3;7661:12;7654:19;;7459:220;;;:::o;7685:366::-;7827:3;7848:67;7912:2;7907:3;7848:67;:::i;:::-;7841:74;;7924:93;8013:3;7924:93;:::i;:::-;8042:2;8037:3;8033:12;8026:19;;7831:220;;;:::o;8057:366::-;8199:3;8220:67;8284:2;8279:3;8220:67;:::i;:::-;8213:74;;8296:93;8385:3;8296:93;:::i;:::-;8414:2;8409:3;8405:12;8398:19;;8203:220;;;:::o;8429:366::-;8571:3;8592:67;8656:2;8651:3;8592:67;:::i;:::-;8585:74;;8668:93;8757:3;8668:93;:::i;:::-;8786:2;8781:3;8777:12;8770:19;;8575:220;;;:::o;8801:366::-;8943:3;8964:67;9028:2;9023:3;8964:67;:::i;:::-;8957:74;;9040:93;9129:3;9040:93;:::i;:::-;9158:2;9153:3;9149:12;9142:19;;8947:220;;;:::o;9173:366::-;9315:3;9336:67;9400:2;9395:3;9336:67;:::i;:::-;9329:74;;9412:93;9501:3;9412:93;:::i;:::-;9530:2;9525:3;9521:12;9514:19;;9319:220;;;:::o;9545:366::-;9687:3;9708:67;9772:2;9767:3;9708:67;:::i;:::-;9701:74;;9784:93;9873:3;9784:93;:::i;:::-;9902:2;9897:3;9893:12;9886:19;;9691:220;;;:::o;9917:366::-;10059:3;10080:67;10144:2;10139:3;10080:67;:::i;:::-;10073:74;;10156:93;10245:3;10156:93;:::i;:::-;10274:2;10269:3;10265:12;10258:19;;10063:220;;;:::o;10289:366::-;10431:3;10452:67;10516:2;10511:3;10452:67;:::i;:::-;10445:74;;10528:93;10617:3;10528:93;:::i;:::-;10646:2;10641:3;10637:12;10630:19;;10435:220;;;:::o;10661:118::-;10748:24;10766:5;10748:24;:::i;:::-;10743:3;10736:37;10726:53;;:::o;10785:112::-;10868:22;10884:5;10868:22;:::i;:::-;10863:3;10856:35;10846:51;;:::o;10903:222::-;10996:4;11034:2;11023:9;11019:18;11011:26;;11047:71;11115:1;11104:9;11100:17;11091:6;11047:71;:::i;:::-;11001:124;;;;:::o;11131:254::-;11240:4;11278:2;11267:9;11263:18;11255:26;;11291:87;11375:1;11364:9;11360:17;11351:6;11291:87;:::i;:::-;11245:140;;;;:::o;11391:332::-;11512:4;11550:2;11539:9;11535:18;11527:26;;11563:71;11631:1;11620:9;11616:17;11607:6;11563:71;:::i;:::-;11644:72;11712:2;11701:9;11697:18;11688:6;11644:72;:::i;:::-;11517:206;;;;;:::o;11729:807::-;11978:4;12016:3;12005:9;12001:19;11993:27;;12030:71;12098:1;12087:9;12083:17;12074:6;12030:71;:::i;:::-;12111:72;12179:2;12168:9;12164:18;12155:6;12111:72;:::i;:::-;12193:80;12269:2;12258:9;12254:18;12245:6;12193:80;:::i;:::-;12283;12359:2;12348:9;12344:18;12335:6;12283:80;:::i;:::-;12373:73;12441:3;12430:9;12426:19;12417:6;12373:73;:::i;:::-;12456;12524:3;12513:9;12509:19;12500:6;12456:73;:::i;:::-;11983:553;;;;;;;;;:::o;12542:210::-;12629:4;12667:2;12656:9;12652:18;12644:26;;12680:65;12742:1;12731:9;12727:17;12718:6;12680:65;:::i;:::-;12634:118;;;;:::o;12758:276::-;12878:4;12916:2;12905:9;12901:18;12893:26;;12929:98;13024:1;13013:9;13009:17;13000:6;12929:98;:::i;:::-;12883:151;;;;:::o;13040:313::-;13153:4;13191:2;13180:9;13176:18;13168:26;;13240:9;13234:4;13230:20;13226:1;13215:9;13211:17;13204:47;13268:78;13341:4;13332:6;13268:78;:::i;:::-;13260:86;;13158:195;;;;:::o;13359:419::-;13525:4;13563:2;13552:9;13548:18;13540:26;;13612:9;13606:4;13602:20;13598:1;13587:9;13583:17;13576:47;13640:131;13766:4;13640:131;:::i;:::-;13632:139;;13530:248;;;:::o;13784:419::-;13950:4;13988:2;13977:9;13973:18;13965:26;;14037:9;14031:4;14027:20;14023:1;14012:9;14008:17;14001:47;14065:131;14191:4;14065:131;:::i;:::-;14057:139;;13955:248;;;:::o;14209:419::-;14375:4;14413:2;14402:9;14398:18;14390:26;;14462:9;14456:4;14452:20;14448:1;14437:9;14433:17;14426:47;14490:131;14616:4;14490:131;:::i;:::-;14482:139;;14380:248;;;:::o;14634:419::-;14800:4;14838:2;14827:9;14823:18;14815:26;;14887:9;14881:4;14877:20;14873:1;14862:9;14858:17;14851:47;14915:131;15041:4;14915:131;:::i;:::-;14907:139;;14805:248;;;:::o;15059:419::-;15225:4;15263:2;15252:9;15248:18;15240:26;;15312:9;15306:4;15302:20;15298:1;15287:9;15283:17;15276:47;15340:131;15466:4;15340:131;:::i;:::-;15332:139;;15230:248;;;:::o;15484:419::-;15650:4;15688:2;15677:9;15673:18;15665:26;;15737:9;15731:4;15727:20;15723:1;15712:9;15708:17;15701:47;15765:131;15891:4;15765:131;:::i;:::-;15757:139;;15655:248;;;:::o;15909:419::-;16075:4;16113:2;16102:9;16098:18;16090:26;;16162:9;16156:4;16152:20;16148:1;16137:9;16133:17;16126:47;16190:131;16316:4;16190:131;:::i;:::-;16182:139;;16080:248;;;:::o;16334:419::-;16500:4;16538:2;16527:9;16523:18;16515:26;;16587:9;16581:4;16577:20;16573:1;16562:9;16558:17;16551:47;16615:131;16741:4;16615:131;:::i;:::-;16607:139;;16505:248;;;:::o;16759:419::-;16925:4;16963:2;16952:9;16948:18;16940:26;;17012:9;17006:4;17002:20;16998:1;16987:9;16983:17;16976:47;17040:131;17166:4;17040:131;:::i;:::-;17032:139;;16930:248;;;:::o;17184:419::-;17350:4;17388:2;17377:9;17373:18;17365:26;;17437:9;17431:4;17427:20;17423:1;17412:9;17408:17;17401:47;17465:131;17591:4;17465:131;:::i;:::-;17457:139;;17355:248;;;:::o;17609:222::-;17702:4;17740:2;17729:9;17725:18;17717:26;;17753:71;17821:1;17810:9;17806:17;17797:6;17753:71;:::i;:::-;17707:124;;;;:::o;17837:483::-;18008:4;18046:2;18035:9;18031:18;18023:26;;18059:71;18127:1;18116:9;18112:17;18103:6;18059:71;:::i;:::-;18177:9;18171:4;18167:20;18162:2;18151:9;18147:18;18140:48;18205:108;18308:4;18299:6;18205:108;:::i;:::-;18197:116;;18013:307;;;;;:::o;18326:831::-;18589:4;18627:3;18616:9;18612:19;18604:27;;18641:71;18709:1;18698:9;18694:17;18685:6;18641:71;:::i;:::-;18722:80;18798:2;18787:9;18783:18;18774:6;18722:80;:::i;:::-;18849:9;18843:4;18839:20;18834:2;18823:9;18819:18;18812:48;18877:108;18980:4;18971:6;18877:108;:::i;:::-;18869:116;;18995:72;19063:2;19052:9;19048:18;19039:6;18995:72;:::i;:::-;19077:73;19145:3;19134:9;19130:19;19121:6;19077:73;:::i;:::-;18594:563;;;;;;;;:::o;19163:214::-;19252:4;19290:2;19279:9;19275:18;19267:26;;19303:67;19367:1;19356:9;19352:17;19343:6;19303:67;:::i;:::-;19257:120;;;;:::o;19383:132::-;19450:4;19473:3;19465:11;;19503:4;19498:3;19494:14;19486:22;;19455:60;;;:::o;19521:114::-;19588:6;19622:5;19616:12;19606:22;;19595:40;;;:::o;19641:99::-;19693:6;19727:5;19721:12;19711:22;;19700:40;;;:::o;19746:113::-;19816:4;19848;19843:3;19839:14;19831:22;;19821:38;;;:::o;19865:184::-;19964:11;19998:6;19993:3;19986:19;20038:4;20033:3;20029:14;20014:29;;19976:73;;;;:::o;20055:169::-;20139:11;20173:6;20168:3;20161:19;20213:4;20208:3;20204:14;20189:29;;20151:73;;;;:::o;20230:305::-;20270:3;20289:20;20307:1;20289:20;:::i;:::-;20284:25;;20323:20;20341:1;20323:20;:::i;:::-;20318:25;;20477:1;20409:66;20405:74;20402:1;20399:81;20396:2;;;20483:18;;:::i;:::-;20396:2;20527:1;20524;20520:9;20513:16;;20274:261;;;;:::o;20541:185::-;20581:1;20598:20;20616:1;20598:20;:::i;:::-;20593:25;;20632:20;20650:1;20632:20;:::i;:::-;20627:25;;20671:1;20661:2;;20676:18;;:::i;:::-;20661:2;20718:1;20715;20711:9;20706:14;;20583:143;;;;:::o;20732:348::-;20772:7;20795:20;20813:1;20795:20;:::i;:::-;20790:25;;20829:20;20847:1;20829:20;:::i;:::-;20824:25;;21017:1;20949:66;20945:74;20942:1;20939:81;20934:1;20927:9;20920:17;20916:105;20913:2;;;21024:18;;:::i;:::-;20913:2;21072:1;21069;21065:9;21054:20;;20780:300;;;;:::o;21086:191::-;21126:4;21146:20;21164:1;21146:20;:::i;:::-;21141:25;;21180:20;21198:1;21180:20;:::i;:::-;21175:25;;21219:1;21216;21213:8;21210:2;;;21224:18;;:::i;:::-;21210:2;21269:1;21266;21262:9;21254:17;;21131:146;;;;:::o;21283:96::-;21320:7;21349:24;21367:5;21349:24;:::i;:::-;21338:35;;21328:51;;;:::o;21385:104::-;21430:7;21459:24;21477:5;21459:24;:::i;:::-;21448:35;;21438:51;;;:::o;21495:90::-;21529:7;21572:5;21565:13;21558:21;21547:32;;21537:48;;;:::o;21591:126::-;21628:7;21668:42;21661:5;21657:54;21646:65;;21636:81;;;:::o;21723:77::-;21760:7;21789:5;21778:16;;21768:32;;;:::o;21806:86::-;21841:7;21881:4;21874:5;21870:16;21859:27;;21849:43;;;:::o;21898:180::-;21975:9;22008:64;22066:5;22008:64;:::i;:::-;21995:77;;21985:93;;;:::o;22084:140::-;22161:9;22194:24;22212:5;22194:24;:::i;:::-;22181:37;;22171:53;;;:::o;22230:121::-;22288:9;22321:24;22339:5;22321:24;:::i;:::-;22308:37;;22298:53;;;:::o;22357:307::-;22425:1;22435:113;22449:6;22446:1;22443:13;22435:113;;;22534:1;22529:3;22525:11;22519:18;22515:1;22510:3;22506:11;22499:39;22471:2;22468:1;22464:10;22459:15;;22435:113;;;22566:6;22563:1;22560:13;22557:2;;;22646:1;22637:6;22632:3;22628:16;22621:27;22557:2;22406:258;;;;:::o;22670:320::-;22714:6;22751:1;22745:4;22741:12;22731:22;;22798:1;22792:4;22788:12;22819:18;22809:2;;22875:4;22867:6;22863:17;22853:27;;22809:2;22937;22929:6;22926:14;22906:18;22903:38;22900:2;;;22956:18;;:::i;:::-;22900:2;22721:269;;;;:::o;22996:180::-;23044:77;23041:1;23034:88;23141:4;23138:1;23131:15;23165:4;23162:1;23155:15;23182:180;23230:77;23227:1;23220:88;23327:4;23324:1;23317:15;23351:4;23348:1;23341:15;23368:180;23416:77;23413:1;23406:88;23513:4;23510:1;23503:15;23537:4;23534:1;23527:15;23554:102;23595:6;23646:2;23642:7;23637:2;23630:5;23626:14;23622:28;23612:38;;23602:54;;;:::o;23662:222::-;23802:34;23798:1;23790:6;23786:14;23779:58;23871:5;23866:2;23858:6;23854:15;23847:30;23768:116;:::o;23890:239::-;24030:34;24026:1;24018:6;24014:14;24007:58;24099:22;24094:2;24086:6;24082:15;24075:47;23996:133;:::o;24135:225::-;24275:34;24271:1;24263:6;24259:14;24252:58;24344:8;24339:2;24331:6;24327:15;24320:33;24241:119;:::o;24366:221::-;24506:34;24502:1;24494:6;24490:14;24483:58;24575:4;24570:2;24562:6;24558:15;24551:29;24472:115;:::o;24593:177::-;24733:29;24729:1;24721:6;24717:14;24710:53;24699:71;:::o;24776:227::-;24916:34;24912:1;24904:6;24900:14;24893:58;24985:10;24980:2;24972:6;24968:15;24961:35;24882:121;:::o;25009:220::-;25149:34;25145:1;25137:6;25133:14;25126:58;25218:3;25213:2;25205:6;25201:15;25194:28;25115:114;:::o;25235:182::-;25375:34;25371:1;25363:6;25359:14;25352:58;25341:76;:::o;25423:224::-;25563:34;25559:1;25551:6;25547:14;25540:58;25632:7;25627:2;25619:6;25615:15;25608:32;25529:118;:::o;25653:223::-;25793:34;25789:1;25781:6;25777:14;25770:58;25862:6;25857:2;25849:6;25845:15;25838:31;25759:117;:::o;25882:122::-;25955:24;25973:5;25955:24;:::i;:::-;25948:5;25945:35;25935:2;;25994:1;25991;25984:12;25935:2;25925:79;:::o;26010:116::-;26080:21;26095:5;26080:21;:::i;:::-;26073:5;26070:32;26060:2;;26116:1;26113;26106:12;26060:2;26050:76;:::o;26132:122::-;26205:24;26223:5;26205:24;:::i;:::-;26198:5;26195:35;26185:2;;26244:1;26241;26234:12;26185:2;26175:79;:::o

Swarm Source

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