ETH Price: $3,139.21 (-7.22%)

Token

CAT BOY APE ($CATBOYAPE)
 

Overview

Max Total Supply

1,000,000,000,000 $CATBOYAPE

Holders

6

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Filtered by Token Holder
*7mill💰️.eth
Balance
17,600,000,000 $CATBOYAPE

Value
$0.00
0xa7f4fDbDa4EE701249ffE8160a6521db2573B5F8
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:
CATBOYAPE

Compiler Version
v0.8.3+commit.8d00100c

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-03-17
*/

/*

    PROJECT :   CAT BOY APE ,   SLIPPAGE:   13-15%
    MAX BUY :   2%  , MAX WALLET: 3%
    JOIN TG:  https://t.me/catboyape 

*/

// SPDX-License-Identifier: Unlicensed

pragma solidity ^0.8.3;

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;
    uint256 private _lockTime;

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

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

    function owner() public view returns (address) {
        return _owner;
    }   
    
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
    
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

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

    function getUnlockTime() public view returns (uint256) {
        return _lockTime;
    }
    
    function getTime() public view returns (uint256) {
        return block.timestamp;
    }

    function lock(uint256 time) public virtual onlyOwner {
        _previousOwner = _owner;
        _owner = address(0);
        _lockTime = block.timestamp + time;
        emit OwnershipTransferred(_owner, address(0));
    }
    
    function unlock() public virtual {
        require(_previousOwner == msg.sender, "You don't have permission to unlock");
        require(block.timestamp > _lockTime , "Contract is locked until 7 days");
        emit OwnershipTransferred(_owner, _previousOwner);
        _owner = _previousOwner;
    }
}

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 CATBOYAPE is Context, IERC20, Ownable {
    
    using SafeMath for uint256;

    using Address for address;

    string private _name = "CAT BOY APE";

    string private _symbol = "$CATBOYAPE";

    uint8 private _decimals = 9;
    
    uint256 private _totalSupply = 1 * 10**12 * 10**9; 

    uint256 private minimumTokensBeforeSwap = 1000 * 10**9; 

    uint256 public _limitbuy = 3 * 10**10 * 10**9; 

    uint256 public _limitwallet = 4 * 10**10 * 10**9; 

    uint256 public _giveaway = 3;  

    uint256 public _burntax = 0;

    uint256 public _totaltax = 0;

    uint256 public _liquidity = 2;

    uint256 public _marketing = 6;
    
    uint256 public _developer = 4;  

    mapping (address => uint256) _balances;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) public isExcludedFromFee;
    mapping (address => bool) public isWalletLimitExempt;
    mapping (address => bool) public isBlacklisted;    
    address payable public marketingWallet = payable(0xD1C15F44FeCf654B4b6dC4B649D3a0D83523c32c); 
    address payable public giveawayWallet = payable(0x49610281718dE78d42571D2237cCbd41757bc613); 
    address public immutable deadAddress = 0x000000000000000000000000000000000000dEaD;


    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;
    
    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); 

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

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

        isExcludedFromFee[owner()] = true;
        isExcludedFromFee[address(this)] = true;
        
        _totaltax = _liquidity.add(_marketing).add(_developer);
        _burntax = _totaltax.add(_giveaway);

        isWalletLimitExempt[owner()] = true;
        isWalletLimitExempt[address(uniswapV2Pair)] = 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 minimumTokensBeforeSwapAmount() public view returns (uint256) {
        return minimumTokensBeforeSwap;
    }

    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 blacklistAddress(address account, bool newValue) public onlyOwner {
        isBlacklisted[account] = newValue;
    }

    function setIsExcludedFromFee(address account, bool newValue) public onlyOwner {
        isExcludedFromFee[account] = newValue;
    }

    function setTaxes(uint256 newLiquidityTax, uint256 newMarketingTax, uint256 newdevTax, uint256 newgiveawayTax) external onlyOwner() {
        _liquidity = newLiquidityTax;
        _marketing = newMarketingTax;
        _developer = newdevTax;
        _giveaway = newgiveawayTax;

        _totaltax = _liquidity.add(_marketing).add(_developer);
        _burntax = _totaltax.add(_giveaway);
    }

    function setMaxTxAmount(uint256 maxTxAmount) external onlyOwner() {
        _limitbuy = maxTxAmount;
    }

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

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

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

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

    function setMarketingWallet(address newAddress) external onlyOwner() {
        marketingWallet = payable(newAddress);
    }

    function setgiveawayWallet(address newAddress) external onlyOwner() {
        giveawayWallet = 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());
        }

        uniswapV2Pair = newPairAddress; //Set new pair address
        uniswapV2Router = _uniswapV2Router; //Set new router address
    }

     //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");
        require(!isBlacklisted[sender] && !isBlacklisted[recipient], "To/from address is blacklisted!");
        require(amount > 0, "Transfer amount must be greater than zero");
        
        if(inSwapAndLiquify)
        { 
            return _basicTransfer(sender, recipient, amount); 
        }
        else
        {
            if(sender != owner() && recipient != owner()) {
                require(amount <= _limitbuy, "Transfer amount exceeds the maxTxAmount.");
            }
            
            uint256 contractTokenBalance = balanceOf(address(this));
            bool overMinimumTokenBalance = contractTokenBalance >= minimumTokensBeforeSwap;
            
            if (overMinimumTokenBalance && !inSwapAndLiquify && sender != uniswapV2Pair && swapAndLiquifyEnabled) 
            {
                if(swapAndLiquifyByLimitOnly)
                    contractTokenBalance = minimumTokensBeforeSwap;
                swapAndLiquify(contractTokenBalance);    
            }

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

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

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

            _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.div(_totaltax).mul(_liquidity).div(2);
        uint256 tokensForSwap = tAmount.sub(tokensForLP);

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

        uint256 totalBNBFee = _totaltax.sub(_liquidity.div(2));
        
        uint256 amountBNBLiquidity = amountReceived.mul(_liquidity).div(totalBNBFee).div(2);
        uint256 amountBNBRewards = amountReceived.mul(_developer).div(totalBNBFee);
        uint256 amountBNBMarketing = amountReceived.sub(amountBNBLiquidity).sub(amountBNBRewards);

        transferToAddressETH(marketingWallet, amountBNBMarketing);
        transferToAddressETH(giveawayWallet, amountBNBRewards);
        addLiquidity(tokensForLP, amountBNBLiquidity);
    }
    
    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 = recipient == uniswapV2Pair ? amount.mul(_burntax).div(100) 
                                : amount.mul(_totaltax).div(100);

        _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":"_burntax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_developer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_giveaway","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_limitbuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_limitwallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totaltax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"newValue","type":"bool"}],"name":"blacklistAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouterAddress","type":"address"}],"name":"changeRouterVersion","outputs":[{"internalType":"address","name":"newPairAddress","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"checkWalletLimit","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":[],"name":"getTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"giveawayWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isWalletLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"newValue","type":"bool"}],"name":"setIsExcludedFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsWalletLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setNumTokensBeforeSwap","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":"newLiquidityTax","type":"uint256"},{"internalType":"uint256","name":"newMarketingTax","type":"uint256"},{"internalType":"uint256","name":"newdevTax","type":"uint256"},{"internalType":"uint256","name":"newgiveawayTax","type":"uint256"}],"name":"setTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"setgiveawayWallet","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":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526040518060400160405280600b81526020017f43415420424f592041504500000000000000000000000000000000000000000081525060039080519060200190620000519291906200093b565b506040518060400160405280600a81526020017f24434154424f5941504500000000000000000000000000000000000000000000815250600490805190602001906200009f9291906200093b565b506009600560006101000a81548160ff021916908360ff160217905550683635c9adc5dea0000060065564e8d4a510006007556801a055690d9db8000060085568022b1c8c1227a000006009556003600a556000600b556000600c556002600d556006600e556004600f5573d1c15f44fecf654b4b6dc4b649d3a0d83523c32c601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507349610281718de78d42571d2237ccbd41757bc613601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead73ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff1660601b8152506001601860156101000a81548160ff0219169083151502179055506000601860166101000a81548160ff0219169083151502179055506001601860176101000a81548160ff0219169083151502179055503480156200024a57600080fd5b5060006200025d620008a760201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200035b57600080fd5b505afa15801562000370573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000396919062000a02565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620003f957600080fd5b505afa1580156200040e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000434919062000a02565b6040518363ffffffff1660e01b81526004016200045392919062000a77565b602060405180830381600087803b1580156200046e57600080fd5b505af115801562000483573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004a9919062000a02565b601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600654601160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160126000620005e5620008af60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620006c7600f54620006b3600e54600d54620008d860201b620027d21790919060201c565b620008d860201b620027d21790919060201c565b600c81905550620006eb600a54600c54620008d860201b620027d21790919060201c565b600b8190555060016013600062000707620008af60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160136000601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060065460106000620007e9620008a760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555062000837620008a760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60065460405162000898919062000ac6565b60405180910390a35062000c66565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000808284620008e9919062000af4565b90508381101562000931576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009289062000aa4565b60405180910390fd5b8091505092915050565b828054620009499062000b8f565b90600052602060002090601f0160209004810192826200096d5760008555620009b9565b82601f106200098857805160ff1916838001178555620009b9565b82800160010185558215620009b9579182015b82811115620009b85782518255916020019190600101906200099b565b5b509050620009c89190620009cc565b5090565b5b80821115620009e7576000816000905550600101620009cd565b5090565b600081519050620009fc8162000c4c565b92915050565b60006020828403121562000a1557600080fd5b600062000a2584828501620009eb565b91505092915050565b62000a398162000b51565b82525050565b600062000a4e601b8362000ae3565b915062000a5b8262000c23565b602082019050919050565b62000a718162000b85565b82525050565b600060408201905062000a8e600083018562000a2e565b62000a9d602083018462000a2e565b9392505050565b6000602082019050818103600083015262000abf8162000a3f565b9050919050565b600060208201905062000add600083018462000a66565b92915050565b600082825260208201905092915050565b600062000b018262000b85565b915062000b0e8362000b85565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000b465762000b4562000bc5565b5b828201905092915050565b600062000b5e8262000b65565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000600282049050600182168062000ba857607f821691505b6020821081141562000bbf5762000bbe62000bf4565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b62000c578162000b51565b811462000c6357600080fd5b50565b60805160601c614cbc62000c8c6000396000818161108401526110b00152614cbc6000f3fe6080604052600436106103035760003560e01c8063715018a611610190578063c49b9a80116100dc578063ec28438a11610095578063f2fde38b1161006f578063f2fde38b14610b91578063f872858a14610bba578063fd3d49f714610be5578063fe575a8714610c105761030a565b8063ec28438a14610b16578063ef422a1814610b3f578063f1d5f51714610b685761030a565b8063c49b9a80146109f4578063c867d60b14610a1d578063ced8128314610a5a578063da00097d14610a85578063dd46706414610ab0578063dd62ed3e14610ad95761030a565b8063a073d37f11610149578063a5d69d1f11610123578063a5d69d1f1461094c578063a69df4b514610975578063a9059cbb1461098c578063aa660bea146109c95761030a565b8063a073d37f146108bb578063a12a7d61146108e6578063a457c2d71461090f5761030a565b8063715018a6146107cd57806375f0a874146107e45780637a9d07581461080f5780638da5cb5b1461083a57806394e003d21461086557806395d89b41146108905761030a565b8063455a43961161024f57806355c830cc116102085780635d098b38116101e25780635d098b3814610711578063602bc62b1461073a57806362940cc41461076557806370a08231146107905761030a565b806355c830cc1461067e5780635881f3ef146106a95780635c9db064146106e65761030a565b8063455a43961461056c578063491d0a561461059557806349bd5a5e146105c05780634a74bb02146105eb5780635342acb414610616578063557ed1ba146106535761030a565b806323b872dd116102bc5780632b112e49116102965780632b112e49146104b0578063313ce567146104db57806339509351146105065780633b97084a146105435761030a565b806323b872dd1461041f5780632563ae831461045c57806327c8f835146104855761030a565b806306fdde031461030f578063095ea7b31461033a5780630cd5bc89146103775780631694505e146103a057806318160ddd146103cb5780632198cf6c146103f65761030a565b3661030a57005b600080fd5b34801561031b57600080fd5b50610324610c4d565b60405161033191906142fd565b60405180910390f35b34801561034657600080fd5b50610361600480360381019061035c9190613dd9565b610cdf565b60405161036e91906142c7565b60405180910390f35b34801561038357600080fd5b5061039e60048036038101906103999190613cc0565b610cfd565b005b3480156103ac57600080fd5b506103b5610dd6565b6040516103c291906142e2565b60405180910390f35b3480156103d757600080fd5b506103e0610dfc565b6040516103ed91906144bf565b60405180910390f35b34801561040257600080fd5b5061041d60048036038101906104189190613d9d565b610e06565b005b34801561042b57600080fd5b5061044660048036038101906104419190613d4e565b610ef6565b60405161045391906142c7565b60405180910390f35b34801561046857600080fd5b50610483600480360381019061047e9190613e15565b610fd0565b005b34801561049157600080fd5b5061049a611082565b6040516104a79190614207565b60405180910390f35b3480156104bc57600080fd5b506104c56110a6565b6040516104d291906144bf565b60405180910390f35b3480156104e757600080fd5b506104f06110ea565b6040516104fd9190614564565b60405180910390f35b34801561051257600080fd5b5061052d60048036038101906105289190613dd9565b611101565b60405161053a91906142c7565b60405180910390f35b34801561054f57600080fd5b5061056a60048036038101906105659190613e3e565b6111b4565b005b34801561057857600080fd5b50610593600480360381019061058e9190613d9d565b611253565b005b3480156105a157600080fd5b506105aa611343565b6040516105b791906144bf565b60405180910390f35b3480156105cc57600080fd5b506105d5611349565b6040516105e29190614207565b60405180910390f35b3480156105f757600080fd5b5061060061136f565b60405161060d91906142c7565b60405180910390f35b34801561062257600080fd5b5061063d60048036038101906106389190613cc0565b611382565b60405161064a91906142c7565b60405180910390f35b34801561065f57600080fd5b506106686113a2565b60405161067591906144bf565b60405180910390f35b34801561068a57600080fd5b506106936113aa565b6040516106a091906144bf565b60405180910390f35b3480156106b557600080fd5b506106d060048036038101906106cb9190613cc0565b6113b0565b6040516106dd9190614207565b60405180910390f35b3480156106f257600080fd5b506106fb61181a565b6040516107089190614222565b60405180910390f35b34801561071d57600080fd5b5061073860048036038101906107339190613cc0565b611840565b005b34801561074657600080fd5b5061074f611919565b60405161075c91906144bf565b60405180910390f35b34801561077157600080fd5b5061077a611923565b60405161078791906144bf565b60405180910390f35b34801561079c57600080fd5b506107b760048036038101906107b29190613cc0565b611929565b6040516107c491906144bf565b60405180910390f35b3480156107d957600080fd5b506107e2611972565b005b3480156107f057600080fd5b506107f9611ac5565b6040516108069190614222565b60405180910390f35b34801561081b57600080fd5b50610824611aeb565b60405161083191906144bf565b60405180910390f35b34801561084657600080fd5b5061084f611af1565b60405161085c9190614207565b60405180910390f35b34801561087157600080fd5b5061087a611b1a565b60405161088791906144bf565b60405180910390f35b34801561089c57600080fd5b506108a5611b20565b6040516108b291906142fd565b60405180910390f35b3480156108c757600080fd5b506108d0611bb2565b6040516108dd91906144bf565b60405180910390f35b3480156108f257600080fd5b5061090d60048036038101906109089190613eb6565b611bbc565b005b34801561091b57600080fd5b5061093660048036038101906109319190613dd9565b611cc1565b60405161094391906142c7565b60405180910390f35b34801561095857600080fd5b50610973600480360381019061096e9190613e15565b611d8e565b005b34801561098157600080fd5b5061098a611e40565b005b34801561099857600080fd5b506109b360048036038101906109ae9190613dd9565b612014565b6040516109c091906142c7565b60405180910390f35b3480156109d557600080fd5b506109de612033565b6040516109eb91906144bf565b60405180910390f35b348015610a0057600080fd5b50610a1b6004803603810190610a169190613e15565b612039565b005b348015610a2957600080fd5b50610a446004803603810190610a3f9190613cc0565b612122565b604051610a5191906142c7565b60405180910390f35b348015610a6657600080fd5b50610a6f612142565b604051610a7c91906144bf565b60405180910390f35b348015610a9157600080fd5b50610a9a612148565b604051610aa791906142c7565b60405180910390f35b348015610abc57600080fd5b50610ad76004803603810190610ad29190613e3e565b61215b565b005b348015610ae557600080fd5b50610b006004803603810190610afb9190613d12565b612322565b604051610b0d91906144bf565b60405180910390f35b348015610b2257600080fd5b50610b3d6004803603810190610b389190613e3e565b6123a9565b005b348015610b4b57600080fd5b50610b666004803603810190610b619190613d9d565b612448565b005b348015610b7457600080fd5b50610b8f6004803603810190610b8a9190613e3e565b612538565b005b348015610b9d57600080fd5b50610bb86004803603810190610bb39190613cc0565b6125d7565b005b348015610bc657600080fd5b50610bcf612799565b604051610bdc91906142c7565b60405180910390f35b348015610bf157600080fd5b50610bfa6127ac565b604051610c0791906144bf565b60405180910390f35b348015610c1c57600080fd5b50610c376004803603810190610c329190613cc0565b6127b2565b604051610c4491906142c7565b60405180910390f35b606060038054610c5c906147b9565b80601f0160208091040260200160405190810160405280929190818152602001828054610c88906147b9565b8015610cd55780601f10610caa57610100808354040283529160200191610cd5565b820191906000526020600020905b815481529060010190602001808311610cb857829003601f168201915b5050505050905090565b6000610cf3610cec612830565b8484612838565b6001905092915050565b610d05612830565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d89906143ff565b60405180910390fd5b80601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600654905090565b610e0e612830565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e92906143ff565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000610f03848484612a03565b50610fc584610f10612830565b610fc085604051806060016040528060288152602001614c3a60289139601160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610f76612830565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130e49092919063ffffffff16565b612838565b600190509392505050565b610fd8612830565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611065576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105c906143ff565b60405180910390fd5b80601860176101000a81548160ff02191690831515021790555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60006110e56110d47f0000000000000000000000000000000000000000000000000000000000000000611929565b60065461314890919063ffffffff16565b905090565b6000600560009054906101000a900460ff16905090565b60006111aa61110e612830565b846111a5856011600061111f612830565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127d290919063ffffffff16565b612838565b6001905092915050565b6111bc612830565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611249576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611240906143ff565b60405180910390fd5b8060078190555050565b61125b612830565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112df906143ff565b60405180910390fd5b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600d5481565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601860159054906101000a900460ff1681565b60126020528060005260406000206000915054906101000a900460ff1681565b600042905090565b60085481565b60006113ba612830565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611447576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143e906143ff565b60405180910390fd5b60008290508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561149257600080fd5b505afa1580156114a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114ca9190613ce9565b73ffffffffffffffffffffffffffffffffffffffff1663e6a43905308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561152c57600080fd5b505afa158015611540573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115649190613ce9565b6040518363ffffffff1660e01b815260040161158192919061423d565b60206040518083038186803b15801561159957600080fd5b505afa1580156115ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115d19190613ce9565b9150600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611792578073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561164e57600080fd5b505afa158015611662573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116869190613ce9565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156116e857600080fd5b505afa1580156116fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117209190613ce9565b6040518363ffffffff1660e01b815260040161173d92919061423d565b602060405180830381600087803b15801561175757600080fd5b505af115801561176b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061178f9190613ce9565b91505b81601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050919050565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611848612830565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118cc906143ff565b60405180910390fd5b80601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600254905090565b600e5481565b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61197a612830565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a07576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119fe906143ff565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60095481565b606060048054611b2f906147b9565b80601f0160208091040260200160405190810160405280929190818152602001828054611b5b906147b9565b8015611ba85780601f10611b7d57610100808354040283529160200191611ba8565b820191906000526020600020905b815481529060010190602001808311611b8b57829003601f168201915b5050505050905090565b6000600754905090565b611bc4612830565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c48906143ff565b60405180910390fd5b83600d8190555082600e8190555081600f8190555080600a81905550611c98600f54611c8a600e54600d546127d290919063ffffffff16565b6127d290919063ffffffff16565b600c81905550611cb5600a54600c546127d290919063ffffffff16565b600b8190555050505050565b6000611d84611cce612830565b84611d7f85604051806060016040528060258152602001614c626025913960116000611cf8612830565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130e49092919063ffffffff16565b612838565b6001905092915050565b611d96612830565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1a906143ff565b60405180910390fd5b80601860166101000a81548160ff02191690831515021790555050565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ed0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec79061449f565b60405180910390fd5b6002544211611f14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0b9061447f565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000612028612021612830565b8484612a03565b506001905092915050565b600c5481565b612041612830565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c5906143ff565b60405180910390fd5b80601860156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1598160405161211791906142c7565b60405180910390a150565b60136020528060005260406000206000915054906101000a900460ff1681565b600b5481565b601860169054906101000a900460ff1681565b612163612830565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e7906143ff565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550804261229e91906145d4565b600281905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6123b1612830565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461243e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612435906143ff565b60405180910390fd5b8060088190555050565b612450612830565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d4906143ff565b60405180910390fd5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b612540612830565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125c4906143ff565b60405180910390fd5b8060098190555050565b6125df612830565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461266c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612663906143ff565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156126dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d39061433f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601860179054906101000a900460ff1681565b600a5481565b60146020528060005260406000206000915054906101000a900460ff1681565b60008082846127e191906145d4565b905083811015612826576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161281d9061437f565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156128a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289f9061445f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612918576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290f9061435f565b60405180910390fd5b80601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516129f691906144bf565b60405180910390a3505050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612a74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6b9061443f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612ae4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612adb9061431f565b60405180910390fd5b601460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612b885750601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612bc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bbe9061439f565b60405180910390fd5b60008211612c0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c019061441f565b60405180910390fd5b601860149054906101000a900460ff1615612c3157612c2a848484613192565b90506130dd565b612c39611af1565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614158015612ca75750612c77611af1565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15612cf257600854821115612cf1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ce8906143bf565b60405180910390fd5b5b6000612cfd30611929565b905060006007548210159050808015612d235750601860149054906101000a900460ff16155b8015612d7d5750601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614155b8015612d955750601860159054906101000a900460ff165b15612dbf57601860169054906101000a900460ff1615612db55760075491505b612dbe82613365565b5b612e48846040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250601060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130e49092919063ffffffff16565b601060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000601260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612f2e5750601260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612f4257612f3d87878761352c565b612f44565b845b9050601860179054906101000a900460ff168015612fac5750601360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612fdb57600954612fcf82612fc189611929565b6127d290919063ffffffff16565b1115612fda57600080fd5b5b61302d81601060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127d290919063ffffffff16565b601060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516130cd91906144bf565b60405180910390a3600193505050505b9392505050565b600083831115829061312c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161312391906142fd565b60405180910390fd5b506000838561313b91906146b5565b9050809150509392505050565b600061318a83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506130e4565b905092915050565b600061321d826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250601060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130e49092919063ffffffff16565b601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506132b282601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127d290919063ffffffff16565b601060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161335291906144bf565b60405180910390a3600190509392505050565b6001601860146101000a81548160ff02191690831515021790555060006133be60026133b0600d546133a2600c54876136f390919063ffffffff16565b61373d90919063ffffffff16565b6136f390919063ffffffff16565b905060006133d5828461314890919063ffffffff16565b90506133e0816137b8565b600047905060006134116134006002600d546136f390919063ffffffff16565b600c5461314890919063ffffffff16565b9050600061344f600261344184613433600d548861373d90919063ffffffff16565b6136f390919063ffffffff16565b6136f390919063ffffffff16565b9050600061347a8361346c600f548761373d90919063ffffffff16565b6136f390919063ffffffff16565b905060006134a382613495858861314890919063ffffffff16565b61314890919063ffffffff16565b90506134d1601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682613ab5565b6134fd601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683613ab5565b6135078784613b00565b505050505050506000601860146101000a81548160ff02191690831515021790555050565b600080601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146135b1576135ac606461359e600c548661373d90919063ffffffff16565b6136f390919063ffffffff16565b6135da565b6135d960646135cb600b548661373d90919063ffffffff16565b6136f390919063ffffffff16565b5b905061362e81601060003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127d290919063ffffffff16565b601060003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516136ce91906144bf565b60405180910390a36136e9818461314890919063ffffffff16565b9150509392505050565b600061373583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613bf4565b905092915050565b60008083141561375057600090506137b2565b6000828461375e919061465b565b905082848261376d919061462a565b146137ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137a4906143df565b60405180910390fd5b809150505b92915050565b6000600267ffffffffffffffff8111156137fb577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156138295781602001602082028036833780820191505090505b5090503081600081518110613867577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561390957600080fd5b505afa15801561391d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139419190613ce9565b8160018151811061397b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506139e230601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612838565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613a4695949392919061450a565b600060405180830381600087803b158015613a6057600080fd5b505af1158015613a74573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051613aa99291906144da565b60405180910390a15050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613afb573d6000803e3d6000fd5b505050565b613b2d30601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612838565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613b79611af1565b426040518863ffffffff1660e01b8152600401613b9b96959493929190614266565b6060604051808303818588803b158015613bb457600080fd5b505af1158015613bc8573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613bed9190613e67565b5050505050565b60008083118290613c3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c3291906142fd565b60405180910390fd5b5060008385613c4a919061462a565b9050809150509392505050565b600081359050613c6681614bf4565b92915050565b600081519050613c7b81614bf4565b92915050565b600081359050613c9081614c0b565b92915050565b600081359050613ca581614c22565b92915050565b600081519050613cba81614c22565b92915050565b600060208284031215613cd257600080fd5b6000613ce084828501613c57565b91505092915050565b600060208284031215613cfb57600080fd5b6000613d0984828501613c6c565b91505092915050565b60008060408385031215613d2557600080fd5b6000613d3385828601613c57565b9250506020613d4485828601613c57565b9150509250929050565b600080600060608486031215613d6357600080fd5b6000613d7186828701613c57565b9350506020613d8286828701613c57565b9250506040613d9386828701613c96565b9150509250925092565b60008060408385031215613db057600080fd5b6000613dbe85828601613c57565b9250506020613dcf85828601613c81565b9150509250929050565b60008060408385031215613dec57600080fd5b6000613dfa85828601613c57565b9250506020613e0b85828601613c96565b9150509250929050565b600060208284031215613e2757600080fd5b6000613e3584828501613c81565b91505092915050565b600060208284031215613e5057600080fd5b6000613e5e84828501613c96565b91505092915050565b600080600060608486031215613e7c57600080fd5b6000613e8a86828701613cab565b9350506020613e9b86828701613cab565b9250506040613eac86828701613cab565b9150509250925092565b60008060008060808587031215613ecc57600080fd5b6000613eda87828801613c96565b9450506020613eeb87828801613c96565b9350506040613efc87828801613c96565b9250506060613f0d87828801613c96565b91505092959194509250565b6000613f258383613f40565b60208301905092915050565b613f3a816146fb565b82525050565b613f49816146e9565b82525050565b613f58816146e9565b82525050565b6000613f698261458f565b613f7381856145b2565b9350613f7e8361457f565b8060005b83811015613faf578151613f968882613f19565b9750613fa1836145a5565b925050600181019050613f82565b5085935050505092915050565b613fc58161470d565b82525050565b613fd481614750565b82525050565b613fe381614774565b82525050565b6000613ff48261459a565b613ffe81856145c3565b935061400e818560208601614786565b61401781614878565b840191505092915050565b600061402f6023836145c3565b915061403a82614889565b604082019050919050565b60006140526026836145c3565b915061405d826148d8565b604082019050919050565b60006140756022836145c3565b915061408082614927565b604082019050919050565b6000614098601b836145c3565b91506140a382614976565b602082019050919050565b60006140bb601f836145c3565b91506140c68261499f565b602082019050919050565b60006140de6028836145c3565b91506140e9826149c8565b604082019050919050565b60006141016021836145c3565b915061410c82614a17565b604082019050919050565b60006141246020836145c3565b915061412f82614a66565b602082019050919050565b60006141476029836145c3565b915061415282614a8f565b604082019050919050565b600061416a6025836145c3565b915061417582614ade565b604082019050919050565b600061418d6024836145c3565b915061419882614b2d565b604082019050919050565b60006141b0601f836145c3565b91506141bb82614b7c565b602082019050919050565b60006141d36023836145c3565b91506141de82614ba5565b604082019050919050565b6141f281614739565b82525050565b61420181614743565b82525050565b600060208201905061421c6000830184613f4f565b92915050565b60006020820190506142376000830184613f31565b92915050565b60006040820190506142526000830185613f4f565b61425f6020830184613f4f565b9392505050565b600060c08201905061427b6000830189613f4f565b61428860208301886141e9565b6142956040830187613fda565b6142a26060830186613fda565b6142af6080830185613f4f565b6142bc60a08301846141e9565b979650505050505050565b60006020820190506142dc6000830184613fbc565b92915050565b60006020820190506142f76000830184613fcb565b92915050565b600060208201905081810360008301526143178184613fe9565b905092915050565b6000602082019050818103600083015261433881614022565b9050919050565b6000602082019050818103600083015261435881614045565b9050919050565b6000602082019050818103600083015261437881614068565b9050919050565b600060208201905081810360008301526143988161408b565b9050919050565b600060208201905081810360008301526143b8816140ae565b9050919050565b600060208201905081810360008301526143d8816140d1565b9050919050565b600060208201905081810360008301526143f8816140f4565b9050919050565b6000602082019050818103600083015261441881614117565b9050919050565b600060208201905081810360008301526144388161413a565b9050919050565b600060208201905081810360008301526144588161415d565b9050919050565b6000602082019050818103600083015261447881614180565b9050919050565b60006020820190508181036000830152614498816141a3565b9050919050565b600060208201905081810360008301526144b8816141c6565b9050919050565b60006020820190506144d460008301846141e9565b92915050565b60006040820190506144ef60008301856141e9565b81810360208301526145018184613f5e565b90509392505050565b600060a08201905061451f60008301886141e9565b61452c6020830187613fda565b818103604083015261453e8186613f5e565b905061454d6060830185613f4f565b61455a60808301846141e9565b9695505050505050565b600060208201905061457960008301846141f8565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006145df82614739565b91506145ea83614739565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561461f5761461e6147eb565b5b828201905092915050565b600061463582614739565b915061464083614739565b9250826146505761464f61481a565b5b828204905092915050565b600061466682614739565b915061467183614739565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156146aa576146a96147eb565b5b828202905092915050565b60006146c082614739565b91506146cb83614739565b9250828210156146de576146dd6147eb565b5b828203905092915050565b60006146f482614719565b9050919050565b600061470682614719565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600061475b82614762565b9050919050565b600061476d82614719565b9050919050565b600061477f82614739565b9050919050565b60005b838110156147a4578082015181840152602081019050614789565b838111156147b3576000848401525b50505050565b600060028204905060018216806147d157607f821691505b602082108114156147e5576147e4614849565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f546f2f66726f6d206164647265737320697320626c61636b6c69737465642100600082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f436f6e7472616374206973206c6f636b656420756e74696c2037206461797300600082015250565b7f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c60008201527f6f636b0000000000000000000000000000000000000000000000000000000000602082015250565b614bfd816146e9565b8114614c0857600080fd5b50565b614c148161470d565b8114614c1f57600080fd5b50565b614c2b81614739565b8114614c3657600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220b8a292f5467d371af52fe1ff0d4a5055d2be62153947fef0c7632bfbe18bac1c64736f6c63430008030033

Deployed Bytecode

0x6080604052600436106103035760003560e01c8063715018a611610190578063c49b9a80116100dc578063ec28438a11610095578063f2fde38b1161006f578063f2fde38b14610b91578063f872858a14610bba578063fd3d49f714610be5578063fe575a8714610c105761030a565b8063ec28438a14610b16578063ef422a1814610b3f578063f1d5f51714610b685761030a565b8063c49b9a80146109f4578063c867d60b14610a1d578063ced8128314610a5a578063da00097d14610a85578063dd46706414610ab0578063dd62ed3e14610ad95761030a565b8063a073d37f11610149578063a5d69d1f11610123578063a5d69d1f1461094c578063a69df4b514610975578063a9059cbb1461098c578063aa660bea146109c95761030a565b8063a073d37f146108bb578063a12a7d61146108e6578063a457c2d71461090f5761030a565b8063715018a6146107cd57806375f0a874146107e45780637a9d07581461080f5780638da5cb5b1461083a57806394e003d21461086557806395d89b41146108905761030a565b8063455a43961161024f57806355c830cc116102085780635d098b38116101e25780635d098b3814610711578063602bc62b1461073a57806362940cc41461076557806370a08231146107905761030a565b806355c830cc1461067e5780635881f3ef146106a95780635c9db064146106e65761030a565b8063455a43961461056c578063491d0a561461059557806349bd5a5e146105c05780634a74bb02146105eb5780635342acb414610616578063557ed1ba146106535761030a565b806323b872dd116102bc5780632b112e49116102965780632b112e49146104b0578063313ce567146104db57806339509351146105065780633b97084a146105435761030a565b806323b872dd1461041f5780632563ae831461045c57806327c8f835146104855761030a565b806306fdde031461030f578063095ea7b31461033a5780630cd5bc89146103775780631694505e146103a057806318160ddd146103cb5780632198cf6c146103f65761030a565b3661030a57005b600080fd5b34801561031b57600080fd5b50610324610c4d565b60405161033191906142fd565b60405180910390f35b34801561034657600080fd5b50610361600480360381019061035c9190613dd9565b610cdf565b60405161036e91906142c7565b60405180910390f35b34801561038357600080fd5b5061039e60048036038101906103999190613cc0565b610cfd565b005b3480156103ac57600080fd5b506103b5610dd6565b6040516103c291906142e2565b60405180910390f35b3480156103d757600080fd5b506103e0610dfc565b6040516103ed91906144bf565b60405180910390f35b34801561040257600080fd5b5061041d60048036038101906104189190613d9d565b610e06565b005b34801561042b57600080fd5b5061044660048036038101906104419190613d4e565b610ef6565b60405161045391906142c7565b60405180910390f35b34801561046857600080fd5b50610483600480360381019061047e9190613e15565b610fd0565b005b34801561049157600080fd5b5061049a611082565b6040516104a79190614207565b60405180910390f35b3480156104bc57600080fd5b506104c56110a6565b6040516104d291906144bf565b60405180910390f35b3480156104e757600080fd5b506104f06110ea565b6040516104fd9190614564565b60405180910390f35b34801561051257600080fd5b5061052d60048036038101906105289190613dd9565b611101565b60405161053a91906142c7565b60405180910390f35b34801561054f57600080fd5b5061056a60048036038101906105659190613e3e565b6111b4565b005b34801561057857600080fd5b50610593600480360381019061058e9190613d9d565b611253565b005b3480156105a157600080fd5b506105aa611343565b6040516105b791906144bf565b60405180910390f35b3480156105cc57600080fd5b506105d5611349565b6040516105e29190614207565b60405180910390f35b3480156105f757600080fd5b5061060061136f565b60405161060d91906142c7565b60405180910390f35b34801561062257600080fd5b5061063d60048036038101906106389190613cc0565b611382565b60405161064a91906142c7565b60405180910390f35b34801561065f57600080fd5b506106686113a2565b60405161067591906144bf565b60405180910390f35b34801561068a57600080fd5b506106936113aa565b6040516106a091906144bf565b60405180910390f35b3480156106b557600080fd5b506106d060048036038101906106cb9190613cc0565b6113b0565b6040516106dd9190614207565b60405180910390f35b3480156106f257600080fd5b506106fb61181a565b6040516107089190614222565b60405180910390f35b34801561071d57600080fd5b5061073860048036038101906107339190613cc0565b611840565b005b34801561074657600080fd5b5061074f611919565b60405161075c91906144bf565b60405180910390f35b34801561077157600080fd5b5061077a611923565b60405161078791906144bf565b60405180910390f35b34801561079c57600080fd5b506107b760048036038101906107b29190613cc0565b611929565b6040516107c491906144bf565b60405180910390f35b3480156107d957600080fd5b506107e2611972565b005b3480156107f057600080fd5b506107f9611ac5565b6040516108069190614222565b60405180910390f35b34801561081b57600080fd5b50610824611aeb565b60405161083191906144bf565b60405180910390f35b34801561084657600080fd5b5061084f611af1565b60405161085c9190614207565b60405180910390f35b34801561087157600080fd5b5061087a611b1a565b60405161088791906144bf565b60405180910390f35b34801561089c57600080fd5b506108a5611b20565b6040516108b291906142fd565b60405180910390f35b3480156108c757600080fd5b506108d0611bb2565b6040516108dd91906144bf565b60405180910390f35b3480156108f257600080fd5b5061090d60048036038101906109089190613eb6565b611bbc565b005b34801561091b57600080fd5b5061093660048036038101906109319190613dd9565b611cc1565b60405161094391906142c7565b60405180910390f35b34801561095857600080fd5b50610973600480360381019061096e9190613e15565b611d8e565b005b34801561098157600080fd5b5061098a611e40565b005b34801561099857600080fd5b506109b360048036038101906109ae9190613dd9565b612014565b6040516109c091906142c7565b60405180910390f35b3480156109d557600080fd5b506109de612033565b6040516109eb91906144bf565b60405180910390f35b348015610a0057600080fd5b50610a1b6004803603810190610a169190613e15565b612039565b005b348015610a2957600080fd5b50610a446004803603810190610a3f9190613cc0565b612122565b604051610a5191906142c7565b60405180910390f35b348015610a6657600080fd5b50610a6f612142565b604051610a7c91906144bf565b60405180910390f35b348015610a9157600080fd5b50610a9a612148565b604051610aa791906142c7565b60405180910390f35b348015610abc57600080fd5b50610ad76004803603810190610ad29190613e3e565b61215b565b005b348015610ae557600080fd5b50610b006004803603810190610afb9190613d12565b612322565b604051610b0d91906144bf565b60405180910390f35b348015610b2257600080fd5b50610b3d6004803603810190610b389190613e3e565b6123a9565b005b348015610b4b57600080fd5b50610b666004803603810190610b619190613d9d565b612448565b005b348015610b7457600080fd5b50610b8f6004803603810190610b8a9190613e3e565b612538565b005b348015610b9d57600080fd5b50610bb86004803603810190610bb39190613cc0565b6125d7565b005b348015610bc657600080fd5b50610bcf612799565b604051610bdc91906142c7565b60405180910390f35b348015610bf157600080fd5b50610bfa6127ac565b604051610c0791906144bf565b60405180910390f35b348015610c1c57600080fd5b50610c376004803603810190610c329190613cc0565b6127b2565b604051610c4491906142c7565b60405180910390f35b606060038054610c5c906147b9565b80601f0160208091040260200160405190810160405280929190818152602001828054610c88906147b9565b8015610cd55780601f10610caa57610100808354040283529160200191610cd5565b820191906000526020600020905b815481529060010190602001808311610cb857829003601f168201915b5050505050905090565b6000610cf3610cec612830565b8484612838565b6001905092915050565b610d05612830565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d89906143ff565b60405180910390fd5b80601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600654905090565b610e0e612830565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e92906143ff565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000610f03848484612a03565b50610fc584610f10612830565b610fc085604051806060016040528060288152602001614c3a60289139601160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610f76612830565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130e49092919063ffffffff16565b612838565b600190509392505050565b610fd8612830565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611065576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105c906143ff565b60405180910390fd5b80601860176101000a81548160ff02191690831515021790555050565b7f000000000000000000000000000000000000000000000000000000000000dead81565b60006110e56110d47f000000000000000000000000000000000000000000000000000000000000dead611929565b60065461314890919063ffffffff16565b905090565b6000600560009054906101000a900460ff16905090565b60006111aa61110e612830565b846111a5856011600061111f612830565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127d290919063ffffffff16565b612838565b6001905092915050565b6111bc612830565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611249576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611240906143ff565b60405180910390fd5b8060078190555050565b61125b612830565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112df906143ff565b60405180910390fd5b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600d5481565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601860159054906101000a900460ff1681565b60126020528060005260406000206000915054906101000a900460ff1681565b600042905090565b60085481565b60006113ba612830565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611447576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143e906143ff565b60405180910390fd5b60008290508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561149257600080fd5b505afa1580156114a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114ca9190613ce9565b73ffffffffffffffffffffffffffffffffffffffff1663e6a43905308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561152c57600080fd5b505afa158015611540573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115649190613ce9565b6040518363ffffffff1660e01b815260040161158192919061423d565b60206040518083038186803b15801561159957600080fd5b505afa1580156115ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115d19190613ce9565b9150600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611792578073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561164e57600080fd5b505afa158015611662573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116869190613ce9565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156116e857600080fd5b505afa1580156116fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117209190613ce9565b6040518363ffffffff1660e01b815260040161173d92919061423d565b602060405180830381600087803b15801561175757600080fd5b505af115801561176b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061178f9190613ce9565b91505b81601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050919050565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611848612830565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118cc906143ff565b60405180910390fd5b80601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600254905090565b600e5481565b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61197a612830565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a07576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119fe906143ff565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60095481565b606060048054611b2f906147b9565b80601f0160208091040260200160405190810160405280929190818152602001828054611b5b906147b9565b8015611ba85780601f10611b7d57610100808354040283529160200191611ba8565b820191906000526020600020905b815481529060010190602001808311611b8b57829003601f168201915b5050505050905090565b6000600754905090565b611bc4612830565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c48906143ff565b60405180910390fd5b83600d8190555082600e8190555081600f8190555080600a81905550611c98600f54611c8a600e54600d546127d290919063ffffffff16565b6127d290919063ffffffff16565b600c81905550611cb5600a54600c546127d290919063ffffffff16565b600b8190555050505050565b6000611d84611cce612830565b84611d7f85604051806060016040528060258152602001614c626025913960116000611cf8612830565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130e49092919063ffffffff16565b612838565b6001905092915050565b611d96612830565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1a906143ff565b60405180910390fd5b80601860166101000a81548160ff02191690831515021790555050565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ed0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec79061449f565b60405180910390fd5b6002544211611f14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0b9061447f565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000612028612021612830565b8484612a03565b506001905092915050565b600c5481565b612041612830565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c5906143ff565b60405180910390fd5b80601860156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1598160405161211791906142c7565b60405180910390a150565b60136020528060005260406000206000915054906101000a900460ff1681565b600b5481565b601860169054906101000a900460ff1681565b612163612830565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e7906143ff565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550804261229e91906145d4565b600281905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6123b1612830565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461243e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612435906143ff565b60405180910390fd5b8060088190555050565b612450612830565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d4906143ff565b60405180910390fd5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b612540612830565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125c4906143ff565b60405180910390fd5b8060098190555050565b6125df612830565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461266c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612663906143ff565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156126dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d39061433f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601860179054906101000a900460ff1681565b600a5481565b60146020528060005260406000206000915054906101000a900460ff1681565b60008082846127e191906145d4565b905083811015612826576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161281d9061437f565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156128a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289f9061445f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612918576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290f9061435f565b60405180910390fd5b80601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516129f691906144bf565b60405180910390a3505050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612a74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6b9061443f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612ae4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612adb9061431f565b60405180910390fd5b601460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612b885750601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612bc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bbe9061439f565b60405180910390fd5b60008211612c0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c019061441f565b60405180910390fd5b601860149054906101000a900460ff1615612c3157612c2a848484613192565b90506130dd565b612c39611af1565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614158015612ca75750612c77611af1565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15612cf257600854821115612cf1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ce8906143bf565b60405180910390fd5b5b6000612cfd30611929565b905060006007548210159050808015612d235750601860149054906101000a900460ff16155b8015612d7d5750601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614155b8015612d955750601860159054906101000a900460ff165b15612dbf57601860169054906101000a900460ff1615612db55760075491505b612dbe82613365565b5b612e48846040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250601060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130e49092919063ffffffff16565b601060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000601260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612f2e5750601260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612f4257612f3d87878761352c565b612f44565b845b9050601860179054906101000a900460ff168015612fac5750601360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612fdb57600954612fcf82612fc189611929565b6127d290919063ffffffff16565b1115612fda57600080fd5b5b61302d81601060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127d290919063ffffffff16565b601060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516130cd91906144bf565b60405180910390a3600193505050505b9392505050565b600083831115829061312c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161312391906142fd565b60405180910390fd5b506000838561313b91906146b5565b9050809150509392505050565b600061318a83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506130e4565b905092915050565b600061321d826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250601060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130e49092919063ffffffff16565b601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506132b282601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127d290919063ffffffff16565b601060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161335291906144bf565b60405180910390a3600190509392505050565b6001601860146101000a81548160ff02191690831515021790555060006133be60026133b0600d546133a2600c54876136f390919063ffffffff16565b61373d90919063ffffffff16565b6136f390919063ffffffff16565b905060006133d5828461314890919063ffffffff16565b90506133e0816137b8565b600047905060006134116134006002600d546136f390919063ffffffff16565b600c5461314890919063ffffffff16565b9050600061344f600261344184613433600d548861373d90919063ffffffff16565b6136f390919063ffffffff16565b6136f390919063ffffffff16565b9050600061347a8361346c600f548761373d90919063ffffffff16565b6136f390919063ffffffff16565b905060006134a382613495858861314890919063ffffffff16565b61314890919063ffffffff16565b90506134d1601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682613ab5565b6134fd601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683613ab5565b6135078784613b00565b505050505050506000601860146101000a81548160ff02191690831515021790555050565b600080601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146135b1576135ac606461359e600c548661373d90919063ffffffff16565b6136f390919063ffffffff16565b6135da565b6135d960646135cb600b548661373d90919063ffffffff16565b6136f390919063ffffffff16565b5b905061362e81601060003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127d290919063ffffffff16565b601060003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516136ce91906144bf565b60405180910390a36136e9818461314890919063ffffffff16565b9150509392505050565b600061373583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613bf4565b905092915050565b60008083141561375057600090506137b2565b6000828461375e919061465b565b905082848261376d919061462a565b146137ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137a4906143df565b60405180910390fd5b809150505b92915050565b6000600267ffffffffffffffff8111156137fb577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156138295781602001602082028036833780820191505090505b5090503081600081518110613867577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561390957600080fd5b505afa15801561391d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139419190613ce9565b8160018151811061397b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506139e230601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612838565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613a4695949392919061450a565b600060405180830381600087803b158015613a6057600080fd5b505af1158015613a74573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051613aa99291906144da565b60405180910390a15050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613afb573d6000803e3d6000fd5b505050565b613b2d30601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612838565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613b79611af1565b426040518863ffffffff1660e01b8152600401613b9b96959493929190614266565b6060604051808303818588803b158015613bb457600080fd5b505af1158015613bc8573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613bed9190613e67565b5050505050565b60008083118290613c3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c3291906142fd565b60405180910390fd5b5060008385613c4a919061462a565b9050809150509392505050565b600081359050613c6681614bf4565b92915050565b600081519050613c7b81614bf4565b92915050565b600081359050613c9081614c0b565b92915050565b600081359050613ca581614c22565b92915050565b600081519050613cba81614c22565b92915050565b600060208284031215613cd257600080fd5b6000613ce084828501613c57565b91505092915050565b600060208284031215613cfb57600080fd5b6000613d0984828501613c6c565b91505092915050565b60008060408385031215613d2557600080fd5b6000613d3385828601613c57565b9250506020613d4485828601613c57565b9150509250929050565b600080600060608486031215613d6357600080fd5b6000613d7186828701613c57565b9350506020613d8286828701613c57565b9250506040613d9386828701613c96565b9150509250925092565b60008060408385031215613db057600080fd5b6000613dbe85828601613c57565b9250506020613dcf85828601613c81565b9150509250929050565b60008060408385031215613dec57600080fd5b6000613dfa85828601613c57565b9250506020613e0b85828601613c96565b9150509250929050565b600060208284031215613e2757600080fd5b6000613e3584828501613c81565b91505092915050565b600060208284031215613e5057600080fd5b6000613e5e84828501613c96565b91505092915050565b600080600060608486031215613e7c57600080fd5b6000613e8a86828701613cab565b9350506020613e9b86828701613cab565b9250506040613eac86828701613cab565b9150509250925092565b60008060008060808587031215613ecc57600080fd5b6000613eda87828801613c96565b9450506020613eeb87828801613c96565b9350506040613efc87828801613c96565b9250506060613f0d87828801613c96565b91505092959194509250565b6000613f258383613f40565b60208301905092915050565b613f3a816146fb565b82525050565b613f49816146e9565b82525050565b613f58816146e9565b82525050565b6000613f698261458f565b613f7381856145b2565b9350613f7e8361457f565b8060005b83811015613faf578151613f968882613f19565b9750613fa1836145a5565b925050600181019050613f82565b5085935050505092915050565b613fc58161470d565b82525050565b613fd481614750565b82525050565b613fe381614774565b82525050565b6000613ff48261459a565b613ffe81856145c3565b935061400e818560208601614786565b61401781614878565b840191505092915050565b600061402f6023836145c3565b915061403a82614889565b604082019050919050565b60006140526026836145c3565b915061405d826148d8565b604082019050919050565b60006140756022836145c3565b915061408082614927565b604082019050919050565b6000614098601b836145c3565b91506140a382614976565b602082019050919050565b60006140bb601f836145c3565b91506140c68261499f565b602082019050919050565b60006140de6028836145c3565b91506140e9826149c8565b604082019050919050565b60006141016021836145c3565b915061410c82614a17565b604082019050919050565b60006141246020836145c3565b915061412f82614a66565b602082019050919050565b60006141476029836145c3565b915061415282614a8f565b604082019050919050565b600061416a6025836145c3565b915061417582614ade565b604082019050919050565b600061418d6024836145c3565b915061419882614b2d565b604082019050919050565b60006141b0601f836145c3565b91506141bb82614b7c565b602082019050919050565b60006141d36023836145c3565b91506141de82614ba5565b604082019050919050565b6141f281614739565b82525050565b61420181614743565b82525050565b600060208201905061421c6000830184613f4f565b92915050565b60006020820190506142376000830184613f31565b92915050565b60006040820190506142526000830185613f4f565b61425f6020830184613f4f565b9392505050565b600060c08201905061427b6000830189613f4f565b61428860208301886141e9565b6142956040830187613fda565b6142a26060830186613fda565b6142af6080830185613f4f565b6142bc60a08301846141e9565b979650505050505050565b60006020820190506142dc6000830184613fbc565b92915050565b60006020820190506142f76000830184613fcb565b92915050565b600060208201905081810360008301526143178184613fe9565b905092915050565b6000602082019050818103600083015261433881614022565b9050919050565b6000602082019050818103600083015261435881614045565b9050919050565b6000602082019050818103600083015261437881614068565b9050919050565b600060208201905081810360008301526143988161408b565b9050919050565b600060208201905081810360008301526143b8816140ae565b9050919050565b600060208201905081810360008301526143d8816140d1565b9050919050565b600060208201905081810360008301526143f8816140f4565b9050919050565b6000602082019050818103600083015261441881614117565b9050919050565b600060208201905081810360008301526144388161413a565b9050919050565b600060208201905081810360008301526144588161415d565b9050919050565b6000602082019050818103600083015261447881614180565b9050919050565b60006020820190508181036000830152614498816141a3565b9050919050565b600060208201905081810360008301526144b8816141c6565b9050919050565b60006020820190506144d460008301846141e9565b92915050565b60006040820190506144ef60008301856141e9565b81810360208301526145018184613f5e565b90509392505050565b600060a08201905061451f60008301886141e9565b61452c6020830187613fda565b818103604083015261453e8186613f5e565b905061454d6060830185613f4f565b61455a60808301846141e9565b9695505050505050565b600060208201905061457960008301846141f8565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006145df82614739565b91506145ea83614739565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561461f5761461e6147eb565b5b828201905092915050565b600061463582614739565b915061464083614739565b9250826146505761464f61481a565b5b828204905092915050565b600061466682614739565b915061467183614739565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156146aa576146a96147eb565b5b828202905092915050565b60006146c082614739565b91506146cb83614739565b9250828210156146de576146dd6147eb565b5b828203905092915050565b60006146f482614719565b9050919050565b600061470682614719565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600061475b82614762565b9050919050565b600061476d82614719565b9050919050565b600061477f82614739565b9050919050565b60005b838110156147a4578082015181840152602081019050614789565b838111156147b3576000848401525b50505050565b600060028204905060018216806147d157607f821691505b602082108114156147e5576147e4614849565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f546f2f66726f6d206164647265737320697320626c61636b6c69737465642100600082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f436f6e7472616374206973206c6f636b656420756e74696c2037206461797300600082015250565b7f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c60008201527f6f636b0000000000000000000000000000000000000000000000000000000000602082015250565b614bfd816146e9565b8114614c0857600080fd5b50565b614c148161470d565b8114614c1f57600080fd5b50565b614c2b81614739565b8114614c3657600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220b8a292f5467d371af52fe1ff0d4a5055d2be62153947fef0c7632bfbe18bac1c64736f6c63430008030033

Deployed Bytecode Sourcemap

15174:12963:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18109:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19409:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21367:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16487:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18386:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20847:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23061:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20726:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16395:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21814:128;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18295:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18778:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21102:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19923:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15782:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16535:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16604:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16023:50;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6680:90;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15557:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22088:696;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16296:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21234:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6578:90;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15820:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18494:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6170:148;;;;;;;;;;;;;:::i;:::-;;16196:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15862:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5945:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15612:48;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18200:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19281:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20201:401;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19004:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21677:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7016:305;;;;;;;;;;;;;:::i;:::-;;22886:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15745:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21498:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16080:52;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15709:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16651:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6778:226;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18627:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20610:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20058:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20990:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6326:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16703:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15670:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16139:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18109:83;18146:13;18179:5;18172:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18109:83;:::o;19409:161::-;19484:4;19501:39;19510:12;:10;:12::i;:::-;19524:7;19533:6;19501:8;:39::i;:::-;19558:4;19551:11;;19409:161;;;;:::o;21367:123::-;6089:12;:10;:12::i;:::-;6079:22;;:6;;;;;;;;;;:22;;;6071:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21471:10:::1;21446:14;;:36;;;;;;;;;;;;;;;;;;21367:123:::0;:::o;16487:41::-;;;;;;;;;;;;;:::o;18386:100::-;18439:7;18466:12;;18459:19;;18386:100;:::o;20847:135::-;6089:12;:10;:12::i;:::-;6079:22;;:6;;;;;;;;;;:22;;;6071:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20968:6:::1;20938:19;:27;20958:6;20938:27;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;20847:135:::0;;:::o;23061:313::-;23159:4;23176:36;23186:6;23194:9;23205:6;23176:9;:36::i;:::-;;23223:121;23232:6;23240:12;:10;:12::i;:::-;23254:89;23292:6;23254:89;;;;;;;;;;;;;;;;;:11;:19;23266:6;23254:19;;;;;;;;;;;;;;;:33;23274:12;:10;:12::i;:::-;23254:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;23223:8;:121::i;:::-;23362:4;23355:11;;23061:313;;;;;:::o;20726:113::-;6089:12;:10;:12::i;:::-;6079:22;;:6;;;;;;;;;;:22;;;6071:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20823:8:::1;20804:16;;:27;;;;;;;;;;;;;;;;;;20726:113:::0;:::o;16395:81::-;;;:::o;21814:128::-;21867:7;21894:40;21911:22;21921:11;21911:9;:22::i;:::-;21894:12;;:16;;:40;;;;:::i;:::-;21887:47;;21814:128;:::o;18295:83::-;18336:5;18361:9;;;;;;;;;;;18354:16;;18295:83;:::o;18778:218::-;18866:4;18883:83;18892:12;:10;:12::i;:::-;18906:7;18915:50;18954:10;18915:11;:25;18927:12;:10;:12::i;:::-;18915:25;;;;;;;;;;;;;;;:34;18941:7;18915:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;18883:8;:83::i;:::-;18984:4;18977:11;;18778:218;;;;:::o;21102:124::-;6089:12;:10;:12::i;:::-;6079:22;;:6;;;;;;;;;;:22;;;6071:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21210:8:::1;21184:23;:34;;;;21102:124:::0;:::o;19923:127::-;6089:12;:10;:12::i;:::-;6079:22;;:6;;;;;;;;;;:22;;;6071:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20034:8:::1;20009:13;:22;20023:7;20009:22;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;19923:127:::0;;:::o;15782:29::-;;;;:::o;16535:28::-;;;;;;;;;;;;;:::o;16604:40::-;;;;;;;;;;;;;:::o;16023:50::-;;;;;;;;;;;;;;;;;;;;;;:::o;6680:90::-;6720:7;6747:15;6740:22;;6680:90;:::o;15557:45::-;;;;:::o;22088:696::-;22168:22;6089:12;:10;:12::i;:::-;6079:22;;:6;;;;;;;;;;:22;;;6071:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22205:35:::1;22262:16;22205:74;;22328:16;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22310:53;;;22372:4;22379:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22310:93;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22293:110;;22445:1;22419:28;;:14;:28;;;22416:225;;;22533:16;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22515:74;;;22598:4;22605:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22515:114;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22498:131;;22416:225;22669:14;22653:13;;:30;;;;;;;;;;;;;;;;;;22735:16;22717:15;;:34;;;;;;;;;;;;;;;;;;6149:1;22088:696:::0;;;:::o;16296:91::-;;;;;;;;;;;;;:::o;21234:125::-;6089:12;:10;:12::i;:::-;6079:22;;:6;;;;;;;;;;:22;;;6071:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21340:10:::1;21314:15;;:37;;;;;;;;;;;;;;;;;;21234:125:::0;:::o;6578:90::-;6624:7;6651:9;;6644:16;;6578:90;:::o;15820:29::-;;;;:::o;18494:119::-;18560:7;18587:9;:18;18597:7;18587:18;;;;;;;;;;;;;;;;18580:25;;18494:119;;;:::o;6170:148::-;6089:12;:10;:12::i;:::-;6079:22;;:6;;;;;;;;;;:22;;;6071:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;6277:1:::1;6240:40;;6261:6;::::0;::::1;;;;;;;;6240:40;;;;;;;;;;;;6308:1;6291:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;6170:148::o:0;16196:92::-;;;;;;;;;;;;;:::o;15862:29::-;;;;:::o;5945:79::-;5983:7;6010:6;;;;;;;;;;;6003:13;;5945:79;:::o;15612:48::-;;;;:::o;18200:87::-;18239:13;18272:7;18265:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18200:87;:::o;19281:120::-;19343:7;19370:23;;19363:30;;19281:120;:::o;20201:401::-;6089:12;:10;:12::i;:::-;6079:22;;:6;;;;;;;;;;:22;;;6071:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20357:15:::1;20344:10;:28;;;;20396:15;20383:10;:28;;;;20435:9;20422:10;:22;;;;20467:14;20455:9;:26;;;;20506:42;20537:10;;20506:26;20521:10;;20506;;:14;;:26;;;;:::i;:::-;:30;;:42;;;;:::i;:::-;20494:9;:54;;;;20570:24;20584:9;;20570;;:13;;:24;;;;:::i;:::-;20559:8;:35;;;;20201:401:::0;;;;:::o;19004:269::-;19097:4;19114:129;19123:12;:10;:12::i;:::-;19137:7;19146:96;19185:15;19146:96;;;;;;;;;;;;;;;;;:11;:25;19158:12;:10;:12::i;:::-;19146:25;;;;;;;;;;;;;;;:34;19172:7;19146:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;19114:8;:129::i;:::-;19261:4;19254:11;;19004:269;;;;:::o;21677:125::-;6089:12;:10;:12::i;:::-;6079:22;;:6;;;;;;;;;;:22;;;6071:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21786:8:::1;21758:25;;:36;;;;;;;;;;;;;;;;;;21677:125:::0;:::o;7016:305::-;7086:10;7068:28;;:14;;;;;;;;;;;:28;;;7060:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;7173:9;;7155:15;:27;7147:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;7264:14;;;;;;;;;;;7235:44;;7256:6;;;;;;;;;;7235:44;;;;;;;;;;;;7299:14;;;;;;;;;;;7290:6;;:23;;;;;;;;;;;;;;;;;;7016:305::o;22886:167::-;22964:4;22981:42;22991:12;:10;:12::i;:::-;23005:9;23016:6;22981:9;:42::i;:::-;;23041:4;23034:11;;22886:167;;;;:::o;15745:28::-;;;;:::o;21498:171::-;6089:12;:10;:12::i;:::-;6079:22;;:6;;;;;;;;;;:22;;;6071:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21599:8:::1;21575:21;;:32;;;;;;;;;;;;;;;;;;21623:38;21652:8;21623:38;;;;;;:::i;:::-;;;;;;;;21498:171:::0;:::o;16080:52::-;;;;;;;;;;;;;;;;;;;;;;:::o;15709:27::-;;;;:::o;16651:45::-;;;;;;;;;;;;;:::o;6778:226::-;6089:12;:10;:12::i;:::-;6079:22;;:6;;;;;;;;;;:22;;;6071:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;6859:6:::1;::::0;::::1;;;;;;;;6842:14;;:23;;;;;;;;;;;;;;;;;;6893:1;6876:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;6936:4;6918:15;:22;;;;:::i;:::-;6906:9;:34;;;;6993:1;6956:40;;6977:6;::::0;::::1;;;;;;;;6956:40;;;;;;;;;;;;6778:226:::0;:::o;18627:143::-;18708:7;18735:11;:18;18747:5;18735:18;;;;;;;;;;;;;;;:27;18754:7;18735:27;;;;;;;;;;;;;;;;18728:34;;18627:143;;;;:::o;20610:108::-;6089:12;:10;:12::i;:::-;6079:22;;:6;;;;;;;;;;:22;;;6071:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20699:11:::1;20687:9;:23;;;;20610:108:::0;:::o;20058:135::-;6089:12;:10;:12::i;:::-;6079:22;;:6;;;;;;;;;;:22;;;6071:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20177:8:::1;20148:17;:26;20166:7;20148:26;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;20058:135:::0;;:::o;20990:104::-;6089:12;:10;:12::i;:::-;6079:22;;:6;;;;;;;;;;:22;;;6071:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21078:8:::1;21062:12;:24;;;;20990:104:::0;:::o;6326:244::-;6089:12;:10;:12::i;:::-;6079:22;;:6;;;;;;;;;;:22;;;6071:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;6435:1:::1;6415:22;;:8;:22;;;;6407:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;6525:8;6496:38;;6517:6;::::0;::::1;;;;;;;;6496:38;;;;;;;;;;;;6554:8;6545:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;6326:244:::0;:::o;16703:35::-;;;;;;;;;;;;;:::o;15670:28::-;;;;:::o;16139:46::-;;;;;;;;;;;;;;;;;;;;;;:::o;1315:181::-;1373:7;1393:9;1409:1;1405;:5;;;;:::i;:::-;1393:17;;1434:1;1429;:6;;1421:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;1487:1;1480:8;;;1315:181;;;;:::o;247:115::-;300:15;343:10;328:26;;247:115;:::o;19578:337::-;19688:1;19671:19;;:5;:19;;;;19663:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19769:1;19750:21;;:7;:21;;;;19742:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19853:6;19823:11;:18;19835:5;19823:18;;;;;;;;;;;;;;;:27;19842:7;19823:27;;;;;;;;;;;;;;;:36;;;;19891:7;19875:32;;19884:5;19875:32;;;19900:6;19875:32;;;;;;:::i;:::-;;;;;;;;19578:337;;;:::o;23382:1883::-;23469:4;23514:1;23496:20;;:6;:20;;;;23488:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;23598:1;23577:23;;:9;:23;;;;23569:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;23660:13;:21;23674:6;23660:21;;;;;;;;;;;;;;;;;;;;;;;;;23659:22;:51;;;;;23686:13;:24;23700:9;23686:24;;;;;;;;;;;;;;;;;;;;;;;;;23685:25;23659:51;23651:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;23774:1;23765:6;:10;23757:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;23845:16;;;;;;;;;;;23842:1416;;;23895:41;23910:6;23918:9;23929:6;23895:14;:41::i;:::-;23888:48;;;;23842:1416;24001:7;:5;:7::i;:::-;23991:17;;:6;:17;;;;:41;;;;;24025:7;:5;:7::i;:::-;24012:20;;:9;:20;;;;23991:41;23988:153;;;24071:9;;24061:6;:19;;24053:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;23988:153;24169:28;24200:24;24218:4;24200:9;:24::i;:::-;24169:55;;24239:28;24294:23;;24270:20;:47;;24239:78;;24350:23;:44;;;;;24378:16;;;;;;;;;;;24377:17;24350:44;:71;;;;;24408:13;;;;;;;;;;;24398:23;;:6;:23;;;;24350:71;:96;;;;;24425:21;;;;;;;;;;;24350:96;24346:307;;;24484:25;;;;;;;;;;;24481:97;;;24555:23;;24532:46;;24481:97;24597:36;24612:20;24597:14;:36::i;:::-;24346:307;24689:53;24711:6;24689:53;;;;;;;;;;;;;;;;;:9;:17;24699:6;24689:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;24669:9;:17;24679:6;24669:17;;;;;;;;;;;;;;;:73;;;;24759:19;24782:17;:25;24800:6;24782:25;;;;;;;;;;;;;;;;;;;;;;;;;:57;;;;24811:17;:28;24829:9;24811:28;;;;;;;;;;;;;;;;;;;;;;;;;24782:57;24781:148;;24895:34;24903:6;24911:9;24922:6;24895:7;:34::i;:::-;24781:148;;;24886:6;24781:148;24759:170;;24949:16;;;;;;;;;;;:51;;;;;24970:19;:30;24990:9;24970:30;;;;;;;;;;;;;;;;;;;;;;;;;24969:31;24949:51;24946:135;;;25068:12;;25027:37;25052:11;25027:20;25037:9;25027;:20::i;:::-;:24;;:37;;;;:::i;:::-;:53;;25019:62;;;;;;24946:135;25121:37;25146:11;25121:9;:20;25131:9;25121:20;;;;;;;;;;;;;;;;:24;;:37;;;;:::i;:::-;25098:9;:20;25108:9;25098:20;;;;;;;;;;;;;;;:60;;;;25197:9;25180:40;;25189:6;25180:40;;;25208:11;25180:40;;;;;;:::i;:::-;;;;;;;;25242:4;25235:11;;;;;23382:1883;;;;;;:::o;1648:192::-;1734:7;1767:1;1762;:6;;1770:12;1754:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1794:9;1810:1;1806;:5;;;;:::i;:::-;1794:17;;1831:1;1824:8;;;1648:192;;;;;:::o;1504:136::-;1562:7;1589:43;1593:1;1596;1589:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1582:50;;1504:136;;;;:::o;25273:330::-;25366:4;25403:53;25425:6;25403:53;;;;;;;;;;;;;;;;;:9;:17;25413:6;25403:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;25383:9;:17;25393:6;25383:17;;;;;;;;;;;;;;;:73;;;;25490:32;25515:6;25490:9;:20;25500:9;25490:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;25467:9;:20;25477:9;25467:20;;;;;;;;;;;;;;;:55;;;;25555:9;25538:35;;25547:6;25538:35;;;25566:6;25538:35;;;;;;:::i;:::-;;;;;;;;25591:4;25584:11;;25273:330;;;;;:::o;25611:863::-;17180:4;17161:16;;:23;;;;;;;;;;;;;;;;;;25692:19:::1;25714:45;25757:1;25714:38;25741:10;;25714:22;25726:9;;25714:7;:11;;:22;;;;:::i;:::-;:26;;:38;;;;:::i;:::-;:42;;:45;;;;:::i;:::-;25692:67;;25770:21;25794:24;25806:11;25794:7;:11;;:24;;;;:::i;:::-;25770:48;;25831:31;25848:13;25831:16;:31::i;:::-;25873:22;25898:21;25873:46;;25932:19;25954:32;25968:17;25983:1;25968:10;;:14;;:17;;;;:::i;:::-;25954:9;;:13;;:32;;;;:::i;:::-;25932:54;;26007:26;26036:54;26088:1;26036:47;26071:11;26036:30;26055:10;;26036:14;:18;;:30;;;;:::i;:::-;:34;;:47;;;;:::i;:::-;:51;;:54;;;;:::i;:::-;26007:83;;26101:24;26128:47;26163:11;26128:30;26147:10;;26128:14;:18;;:30;;;;:::i;:::-;:34;;:47;;;;:::i;:::-;26101:74;;26186:26;26215:60;26258:16;26215:38;26234:18;26215:14;:18;;:38;;;;:::i;:::-;:42;;:60;;;;:::i;:::-;26186:89;;26288:57;26309:15;;;;;;;;;;;26326:18;26288:20;:57::i;:::-;26356:54;26377:14;;;;;;;;;;;26393:16;26356:20;:54::i;:::-;26421:45;26434:11;26447:18;26421:12;:45::i;:::-;17195:1;;;;;;;17226:5:::0;17207:16;;:24;;;;;;;;;;;;;;;;;;25611:863;:::o;27681:447::-;27767:7;27797:17;27830:13;;;;;;;;;;;27817:26;;:9;:26;;;:125;;27912:30;27938:3;27912:21;27923:9;;27912:6;:10;;:21;;;;:::i;:::-;:25;;:30;;;;:::i;:::-;27817:125;;;27846:29;27871:3;27846:20;27857:8;;27846:6;:10;;:20;;;;:::i;:::-;:24;;:29;;;;:::i;:::-;27817:125;27797:145;;27982:39;28011:9;27982;:24;28000:4;27982:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;27955:9;:24;27973:4;27955:24;;;;;;;;;;;;;;;:66;;;;28062:4;28037:42;;28046:6;28037:42;;;28069:9;28037:42;;;;;;:::i;:::-;;;;;;;;28099:21;28110:9;28099:6;:10;;:21;;;;:::i;:::-;28092:28;;;27681:447;;;;;:::o;2106:132::-;2164:7;2191:39;2195:1;2198;2191:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;2184:46;;2106:132;;;;:::o;1848:250::-;1906:7;1935:1;1930;:6;1926:47;;;1960:1;1953:8;;;;1926:47;1985:9;2001:1;1997;:5;;;;:::i;:::-;1985:17;;2030:1;2025;2021;:5;;;;:::i;:::-;:10;2013:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;2089:1;2082:8;;;1848:250;;;;;:::o;26486:666::-;26612:21;26650:1;26636:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26612:40;;26681:4;26663;26668:1;26663:7;;;;;;;;;;;;;;;;;;;;;:23;;;;;;;;;;;26707:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26697:4;26702:1;26697:7;;;;;;;;;;;;;;;;;;;;;:32;;;;;;;;;;;26742:62;26759:4;26774:15;;;;;;;;;;;26792:11;26742:8;:62::i;:::-;26843:15;;;;;;;;;;;:66;;;26924:11;26950:1;26994:4;27021;27057:15;26843:240;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27109:35;27126:11;27139:4;27109:35;;;;;;;:::i;:::-;;;;;;;;26486:666;;:::o;21950:126::-;22042:9;:18;;:26;22061:6;22042:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21950:126;;:::o;27160:513::-;27308:62;27325:4;27340:15;;;;;;;;;;;27358:11;27308:8;:62::i;:::-;27413:15;;;;;;;;;;;:31;;;27452:9;27485:4;27505:11;27531:1;27574;27617:7;:5;:7::i;:::-;27639:15;27413:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;27160:513;;:::o;2246:278::-;2332:7;2364:1;2360;:5;2367:12;2352:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2391:9;2407:1;2403;:5;;;;:::i;:::-;2391:17;;2515:1;2508:8;;;2246:278;;;;;:::o;7:139:1:-;;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:143::-;;240:6;234:13;225:22;;256:33;283:5;256:33;:::i;:::-;215:80;;;;:::o;301:133::-;;382:6;369:20;360:29;;398:30;422:5;398:30;:::i;:::-;350:84;;;;:::o;440:139::-;;524:6;511:20;502:29;;540:33;567:5;540:33;:::i;:::-;492:87;;;;:::o;585:143::-;;673:6;667:13;658:22;;689:33;716:5;689:33;:::i;:::-;648:80;;;;:::o;734:262::-;;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::-;;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::-;;;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::-;;;;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::-;;;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::-;;;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::-;;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::-;;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:596::-;;;;3766:2;3754:9;3745:7;3741:23;3737:32;3734:2;;;3782:1;3779;3772:12;3734:2;3825:1;3850:64;3906:7;3897:6;3886:9;3882:22;3850:64;:::i;:::-;3840:74;;3796:128;3963:2;3989:64;4045:7;4036:6;4025:9;4021:22;3989:64;:::i;:::-;3979:74;;3934:129;4102:2;4128:64;4184:7;4175:6;4164:9;4160:22;4128:64;:::i;:::-;4118:74;;4073:129;3724:485;;;;;:::o;4215:698::-;;;;;4374:3;4362:9;4353:7;4349:23;4345:33;4342:2;;;4391:1;4388;4381:12;4342:2;4434:1;4459:53;4504:7;4495:6;4484:9;4480:22;4459:53;:::i;:::-;4449:63;;4405:117;4561:2;4587:53;4632:7;4623:6;4612:9;4608:22;4587:53;:::i;:::-;4577:63;;4532:118;4689:2;4715:53;4760:7;4751:6;4740:9;4736:22;4715:53;:::i;:::-;4705:63;;4660:118;4817:2;4843:53;4888:7;4879:6;4868:9;4864:22;4843:53;:::i;:::-;4833:63;;4788:118;4332:581;;;;;;;:::o;4919:179::-;;5009:46;5051:3;5043:6;5009:46;:::i;:::-;5087:4;5082:3;5078:14;5064:28;;4999:99;;;;:::o;5104:142::-;5207:32;5233:5;5207:32;:::i;:::-;5202:3;5195:45;5185:61;;:::o;5252:108::-;5329:24;5347:5;5329:24;:::i;:::-;5324:3;5317:37;5307:53;;:::o;5366:118::-;5453:24;5471:5;5453:24;:::i;:::-;5448:3;5441:37;5431:53;;:::o;5520:732::-;;5668:54;5716:5;5668:54;:::i;:::-;5738:86;5817:6;5812:3;5738:86;:::i;:::-;5731:93;;5848:56;5898:5;5848:56;:::i;:::-;5927:7;5958:1;5943:284;5968:6;5965:1;5962:13;5943:284;;;6044:6;6038:13;6071:63;6130:3;6115:13;6071:63;:::i;:::-;6064:70;;6157:60;6210:6;6157:60;:::i;:::-;6147:70;;6003:224;5990:1;5987;5983:9;5978:14;;5943:284;;;5947:14;6243:3;6236:10;;5644:608;;;;;;;:::o;6258:109::-;6339:21;6354:5;6339:21;:::i;:::-;6334:3;6327:34;6317:50;;:::o;6373:185::-;6487:64;6545:5;6487:64;:::i;:::-;6482:3;6475:77;6465:93;;:::o;6564:147::-;6659:45;6698:5;6659:45;:::i;:::-;6654:3;6647:58;6637:74;;:::o;6717:364::-;;6833:39;6866:5;6833:39;:::i;:::-;6888:71;6952:6;6947:3;6888:71;:::i;:::-;6881:78;;6968:52;7013:6;7008:3;7001:4;6994:5;6990:16;6968:52;:::i;:::-;7045:29;7067:6;7045:29;:::i;:::-;7040:3;7036:39;7029:46;;6809:272;;;;;:::o;7087:366::-;;7250:67;7314:2;7309:3;7250:67;:::i;:::-;7243:74;;7326:93;7415:3;7326:93;:::i;:::-;7444:2;7439:3;7435:12;7428:19;;7233:220;;;:::o;7459:366::-;;7622:67;7686:2;7681:3;7622:67;:::i;:::-;7615:74;;7698:93;7787:3;7698:93;:::i;:::-;7816:2;7811:3;7807:12;7800:19;;7605:220;;;:::o;7831:366::-;;7994:67;8058:2;8053:3;7994:67;:::i;:::-;7987:74;;8070:93;8159:3;8070:93;:::i;:::-;8188:2;8183:3;8179:12;8172:19;;7977:220;;;:::o;8203:366::-;;8366:67;8430:2;8425:3;8366:67;:::i;:::-;8359:74;;8442:93;8531:3;8442:93;:::i;:::-;8560:2;8555:3;8551:12;8544:19;;8349:220;;;:::o;8575:366::-;;8738:67;8802:2;8797:3;8738:67;:::i;:::-;8731:74;;8814:93;8903:3;8814:93;:::i;:::-;8932:2;8927:3;8923:12;8916:19;;8721:220;;;:::o;8947:366::-;;9110:67;9174:2;9169:3;9110:67;:::i;:::-;9103:74;;9186:93;9275:3;9186:93;:::i;:::-;9304:2;9299:3;9295:12;9288:19;;9093:220;;;:::o;9319:366::-;;9482:67;9546:2;9541:3;9482:67;:::i;:::-;9475:74;;9558:93;9647:3;9558:93;:::i;:::-;9676:2;9671:3;9667:12;9660:19;;9465:220;;;:::o;9691:366::-;;9854:67;9918:2;9913:3;9854:67;:::i;:::-;9847:74;;9930:93;10019:3;9930:93;:::i;:::-;10048:2;10043:3;10039:12;10032:19;;9837:220;;;:::o;10063:366::-;;10226:67;10290:2;10285:3;10226:67;:::i;:::-;10219:74;;10302:93;10391:3;10302:93;:::i;:::-;10420:2;10415:3;10411:12;10404:19;;10209:220;;;:::o;10435:366::-;;10598:67;10662:2;10657:3;10598:67;:::i;:::-;10591:74;;10674:93;10763:3;10674:93;:::i;:::-;10792:2;10787:3;10783:12;10776:19;;10581:220;;;:::o;10807:366::-;;10970:67;11034:2;11029:3;10970:67;:::i;:::-;10963:74;;11046:93;11135:3;11046:93;:::i;:::-;11164:2;11159:3;11155:12;11148:19;;10953:220;;;:::o;11179:366::-;;11342:67;11406:2;11401:3;11342:67;:::i;:::-;11335:74;;11418:93;11507:3;11418:93;:::i;:::-;11536:2;11531:3;11527:12;11520:19;;11325:220;;;:::o;11551:366::-;;11714:67;11778:2;11773:3;11714:67;:::i;:::-;11707:74;;11790:93;11879:3;11790:93;:::i;:::-;11908:2;11903:3;11899:12;11892:19;;11697:220;;;:::o;11923:118::-;12010:24;12028:5;12010:24;:::i;:::-;12005:3;11998:37;11988:53;;:::o;12047:112::-;12130:22;12146:5;12130:22;:::i;:::-;12125:3;12118:35;12108:51;;:::o;12165:222::-;;12296:2;12285:9;12281:18;12273:26;;12309:71;12377:1;12366:9;12362:17;12353:6;12309:71;:::i;:::-;12263:124;;;;:::o;12393:254::-;;12540:2;12529:9;12525:18;12517:26;;12553:87;12637:1;12626:9;12622:17;12613:6;12553:87;:::i;:::-;12507:140;;;;:::o;12653:332::-;;12812:2;12801:9;12797:18;12789:26;;12825:71;12893:1;12882:9;12878:17;12869:6;12825:71;:::i;:::-;12906:72;12974:2;12963:9;12959:18;12950:6;12906:72;:::i;:::-;12779:206;;;;;:::o;12991:807::-;;13278:3;13267:9;13263:19;13255:27;;13292:71;13360:1;13349:9;13345:17;13336:6;13292:71;:::i;:::-;13373:72;13441:2;13430:9;13426:18;13417:6;13373:72;:::i;:::-;13455:80;13531:2;13520:9;13516:18;13507:6;13455:80;:::i;:::-;13545;13621:2;13610:9;13606:18;13597:6;13545:80;:::i;:::-;13635:73;13703:3;13692:9;13688:19;13679:6;13635:73;:::i;:::-;13718;13786:3;13775:9;13771:19;13762:6;13718:73;:::i;:::-;13245:553;;;;;;;;;:::o;13804:210::-;;13929:2;13918:9;13914:18;13906:26;;13942:65;14004:1;13993:9;13989:17;13980:6;13942:65;:::i;:::-;13896:118;;;;:::o;14020:276::-;;14178:2;14167:9;14163:18;14155:26;;14191:98;14286:1;14275:9;14271:17;14262:6;14191:98;:::i;:::-;14145:151;;;;:::o;14302:313::-;;14453:2;14442:9;14438:18;14430:26;;14502:9;14496:4;14492:20;14488:1;14477:9;14473:17;14466:47;14530:78;14603:4;14594:6;14530:78;:::i;:::-;14522:86;;14420:195;;;;:::o;14621:419::-;;14825:2;14814:9;14810:18;14802:26;;14874:9;14868:4;14864:20;14860:1;14849:9;14845:17;14838:47;14902:131;15028:4;14902:131;:::i;:::-;14894:139;;14792:248;;;:::o;15046:419::-;;15250:2;15239:9;15235:18;15227:26;;15299:9;15293:4;15289:20;15285:1;15274:9;15270:17;15263:47;15327:131;15453:4;15327:131;:::i;:::-;15319:139;;15217:248;;;:::o;15471:419::-;;15675:2;15664:9;15660:18;15652:26;;15724:9;15718:4;15714:20;15710:1;15699:9;15695:17;15688:47;15752:131;15878:4;15752:131;:::i;:::-;15744:139;;15642:248;;;:::o;15896:419::-;;16100:2;16089:9;16085:18;16077:26;;16149:9;16143:4;16139:20;16135:1;16124:9;16120:17;16113:47;16177:131;16303:4;16177:131;:::i;:::-;16169:139;;16067:248;;;:::o;16321:419::-;;16525:2;16514:9;16510:18;16502:26;;16574:9;16568:4;16564:20;16560:1;16549:9;16545:17;16538:47;16602:131;16728:4;16602:131;:::i;:::-;16594:139;;16492:248;;;:::o;16746:419::-;;16950:2;16939:9;16935:18;16927:26;;16999:9;16993:4;16989:20;16985:1;16974:9;16970:17;16963:47;17027:131;17153:4;17027:131;:::i;:::-;17019:139;;16917:248;;;:::o;17171:419::-;;17375:2;17364:9;17360:18;17352:26;;17424:9;17418:4;17414:20;17410:1;17399:9;17395:17;17388:47;17452:131;17578:4;17452:131;:::i;:::-;17444:139;;17342:248;;;:::o;17596:419::-;;17800:2;17789:9;17785:18;17777:26;;17849:9;17843:4;17839:20;17835:1;17824:9;17820:17;17813:47;17877:131;18003:4;17877:131;:::i;:::-;17869:139;;17767:248;;;:::o;18021:419::-;;18225:2;18214:9;18210:18;18202:26;;18274:9;18268:4;18264:20;18260:1;18249:9;18245:17;18238:47;18302:131;18428:4;18302:131;:::i;:::-;18294:139;;18192:248;;;:::o;18446:419::-;;18650:2;18639:9;18635:18;18627:26;;18699:9;18693:4;18689:20;18685:1;18674:9;18670:17;18663:47;18727:131;18853:4;18727:131;:::i;:::-;18719:139;;18617:248;;;:::o;18871:419::-;;19075:2;19064:9;19060:18;19052:26;;19124:9;19118:4;19114:20;19110:1;19099:9;19095:17;19088:47;19152:131;19278:4;19152:131;:::i;:::-;19144:139;;19042:248;;;:::o;19296:419::-;;19500:2;19489:9;19485:18;19477:26;;19549:9;19543:4;19539:20;19535:1;19524:9;19520:17;19513:47;19577:131;19703:4;19577:131;:::i;:::-;19569:139;;19467:248;;;:::o;19721:419::-;;19925:2;19914:9;19910:18;19902:26;;19974:9;19968:4;19964:20;19960:1;19949:9;19945:17;19938:47;20002:131;20128:4;20002:131;:::i;:::-;19994:139;;19892:248;;;:::o;20146:222::-;;20277:2;20266:9;20262:18;20254:26;;20290:71;20358:1;20347:9;20343:17;20334:6;20290:71;:::i;:::-;20244:124;;;;:::o;20374:483::-;;20583:2;20572:9;20568:18;20560:26;;20596:71;20664:1;20653:9;20649:17;20640:6;20596:71;:::i;:::-;20714:9;20708:4;20704:20;20699:2;20688:9;20684:18;20677:48;20742:108;20845:4;20836:6;20742:108;:::i;:::-;20734:116;;20550:307;;;;;:::o;20863:831::-;;21164:3;21153:9;21149:19;21141:27;;21178:71;21246:1;21235:9;21231:17;21222:6;21178:71;:::i;:::-;21259:80;21335:2;21324:9;21320:18;21311:6;21259:80;:::i;:::-;21386:9;21380:4;21376:20;21371:2;21360:9;21356:18;21349:48;21414:108;21517:4;21508:6;21414:108;:::i;:::-;21406:116;;21532:72;21600:2;21589:9;21585:18;21576:6;21532:72;:::i;:::-;21614:73;21682:3;21671:9;21667:19;21658:6;21614:73;:::i;:::-;21131:563;;;;;;;;:::o;21700:214::-;;21827:2;21816:9;21812:18;21804:26;;21840:67;21904:1;21893:9;21889:17;21880:6;21840:67;:::i;:::-;21794:120;;;;:::o;21920:132::-;;22010:3;22002:11;;22040:4;22035:3;22031:14;22023:22;;21992:60;;;:::o;22058:114::-;;22159:5;22153:12;22143:22;;22132:40;;;:::o;22178:99::-;;22264:5;22258:12;22248:22;;22237:40;;;:::o;22283:113::-;;22385:4;22380:3;22376:14;22368:22;;22358:38;;;:::o;22402:184::-;;22535:6;22530:3;22523:19;22575:4;22570:3;22566:14;22551:29;;22513:73;;;;:::o;22592:169::-;;22710:6;22705:3;22698:19;22750:4;22745:3;22741:14;22726:29;;22688:73;;;;:::o;22767:305::-;;22826:20;22844:1;22826:20;:::i;:::-;22821:25;;22860:20;22878:1;22860:20;:::i;:::-;22855:25;;23014:1;22946:66;22942:74;22939:1;22936:81;22933:2;;;23020:18;;:::i;:::-;22933:2;23064:1;23061;23057:9;23050:16;;22811:261;;;;:::o;23078:185::-;;23135:20;23153:1;23135:20;:::i;:::-;23130:25;;23169:20;23187:1;23169:20;:::i;:::-;23164:25;;23208:1;23198:2;;23213:18;;:::i;:::-;23198:2;23255:1;23252;23248:9;23243:14;;23120:143;;;;:::o;23269:348::-;;23332:20;23350:1;23332:20;:::i;:::-;23327:25;;23366:20;23384:1;23366:20;:::i;:::-;23361:25;;23554:1;23486:66;23482:74;23479:1;23476:81;23471:1;23464:9;23457:17;23453:105;23450:2;;;23561:18;;:::i;:::-;23450:2;23609:1;23606;23602:9;23591:20;;23317:300;;;;:::o;23623:191::-;;23683:20;23701:1;23683:20;:::i;:::-;23678:25;;23717:20;23735:1;23717:20;:::i;:::-;23712:25;;23756:1;23753;23750:8;23747:2;;;23761:18;;:::i;:::-;23747:2;23806:1;23803;23799:9;23791:17;;23668:146;;;;:::o;23820:96::-;;23886:24;23904:5;23886:24;:::i;:::-;23875:35;;23865:51;;;:::o;23922:104::-;;23996:24;24014:5;23996:24;:::i;:::-;23985:35;;23975:51;;;:::o;24032:90::-;;24109:5;24102:13;24095:21;24084:32;;24074:48;;;:::o;24128:126::-;;24205:42;24198:5;24194:54;24183:65;;24173:81;;;:::o;24260:77::-;;24326:5;24315:16;;24305:32;;;:::o;24343:86::-;;24418:4;24411:5;24407:16;24396:27;;24386:43;;;:::o;24435:180::-;;24545:64;24603:5;24545:64;:::i;:::-;24532:77;;24522:93;;;:::o;24621:140::-;;24731:24;24749:5;24731:24;:::i;:::-;24718:37;;24708:53;;;:::o;24767:121::-;;24858:24;24876:5;24858:24;:::i;:::-;24845:37;;24835:53;;;:::o;24894:307::-;24962:1;24972:113;24986:6;24983:1;24980:13;24972:113;;;25071:1;25066:3;25062:11;25056:18;25052:1;25047:3;25043:11;25036:39;25008:2;25005:1;25001:10;24996:15;;24972:113;;;25103:6;25100:1;25097:13;25094:2;;;25183:1;25174:6;25169:3;25165:16;25158:27;25094:2;24943:258;;;;:::o;25207:320::-;;25288:1;25282:4;25278:12;25268:22;;25335:1;25329:4;25325:12;25356:18;25346:2;;25412:4;25404:6;25400:17;25390:27;;25346:2;25474;25466:6;25463:14;25443:18;25440:38;25437:2;;;25493:18;;:::i;:::-;25437:2;25258:269;;;;:::o;25533:180::-;25581:77;25578:1;25571:88;25678:4;25675:1;25668:15;25702:4;25699:1;25692:15;25719:180;25767:77;25764:1;25757:88;25864:4;25861:1;25854:15;25888:4;25885:1;25878:15;25905:180;25953:77;25950:1;25943:88;26050:4;26047:1;26040:15;26074:4;26071:1;26064:15;26091:102;;26183:2;26179:7;26174:2;26167:5;26163:14;26159:28;26149:38;;26139:54;;;:::o;26199:222::-;26339:34;26335:1;26327:6;26323:14;26316:58;26408:5;26403:2;26395:6;26391:15;26384:30;26305:116;:::o;26427:225::-;26567:34;26563:1;26555:6;26551:14;26544:58;26636:8;26631:2;26623:6;26619:15;26612:33;26533:119;:::o;26658:221::-;26798:34;26794:1;26786:6;26782:14;26775:58;26867:4;26862:2;26854:6;26850:15;26843:29;26764:115;:::o;26885:177::-;27025:29;27021:1;27013:6;27009:14;27002:53;26991:71;:::o;27068:181::-;27208:33;27204:1;27196:6;27192:14;27185:57;27174:75;:::o;27255:227::-;27395:34;27391:1;27383:6;27379:14;27372:58;27464:10;27459:2;27451:6;27447:15;27440:35;27361:121;:::o;27488:220::-;27628:34;27624:1;27616:6;27612:14;27605:58;27697:3;27692:2;27684:6;27680:15;27673:28;27594:114;:::o;27714:182::-;27854:34;27850:1;27842:6;27838:14;27831:58;27820:76;:::o;27902:228::-;28042:34;28038:1;28030:6;28026:14;28019:58;28111:11;28106:2;28098:6;28094:15;28087:36;28008:122;:::o;28136:224::-;28276:34;28272:1;28264:6;28260:14;28253:58;28345:7;28340:2;28332:6;28328:15;28321:32;28242:118;:::o;28366:223::-;28506:34;28502:1;28494:6;28490:14;28483:58;28575:6;28570:2;28562:6;28558:15;28551:31;28472:117;:::o;28595:181::-;28735:33;28731:1;28723:6;28719:14;28712:57;28701:75;:::o;28782:222::-;28922:34;28918:1;28910:6;28906:14;28899:58;28991:5;28986:2;28978:6;28974:15;28967:30;28888:116;:::o;29010:122::-;29083:24;29101:5;29083:24;:::i;:::-;29076:5;29073:35;29063:2;;29122:1;29119;29112:12;29063:2;29053:79;:::o;29138:116::-;29208:21;29223:5;29208:21;:::i;:::-;29201:5;29198:32;29188:2;;29244:1;29241;29234:12;29188:2;29178:76;:::o;29260:122::-;29333:24;29351:5;29333:24;:::i;:::-;29326:5;29323:35;29313:2;;29372:1;29369;29362:12;29313:2;29303:79;:::o

Swarm Source

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