ETH Price: $3,410.80 (+1.74%)

Token

Chronoly (CRNO)
 

Overview

Max Total Supply

1,000,000,000 CRNO

Holders

3,233

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
alfaomegagrafx.eth
Balance
654.8 CRNO

Value
$0.00
0x6d371062f70b83e58994567e3eb882e86fe2fa13
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:
CRNOTOKEN

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-04-25
*/

/**
 ██████╗██████╗ ███╗   ██╗ ██████╗ 
██╔════╝██╔══██╗████╗  ██║██╔═══██╗
██║     ██████╔╝██╔██╗ ██║██║   ██║
██║     ██╔══██╗██║╚██╗██║██║   ██║
╚██████╗██║  ██║██║ ╚████║╚██████╔╝
 ╚═════╝╚═╝  ╚═╝╚═╝  ╚═══╝ ╚═════╝ 
*/

//SPDX-License-Identifier: MIT

pragma solidity 0.8.13;

interface IERC20 {
    function totalSupply() external view returns (uint);
    function balanceOf(address account) external view returns (uint);
    function transfer(address recipient, uint amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint);
    function approve(address spender, uint amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint value);
    event Approval(address indexed owner, address indexed spender, uint value);
}
library SafeMath {
    function add(uint a, uint b) internal pure returns (uint) {
        uint c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }
    function sub(uint a, uint b) internal pure returns (uint) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }
    function sub(uint a, uint b, string memory errorMessage) internal pure returns (uint) {
        require(b <= a, errorMessage);
        uint c = a - b;

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

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

        return c;
    }
    function div(uint a, uint b) internal pure returns (uint) {
        return div(a, b, "SafeMath: division by zero");
    }
    function div(uint a, uint b, string memory errorMessage) internal pure returns (uint) {
        // Solidity only automatically asserts when dividing by 0
        require(b > 0, errorMessage);
        uint c = a / b;

        return c;
    }
}

contract Context {
    constructor () { }
    // solhint-disable-previous-line no-empty-blocks

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

abstract contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () {
       
        _owner = msg.sender ;
        emit OwnershipTransferred(address(0), _owner);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(_owner == _msgSender() , "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}


contract ERC20Detailed {
    string private _name;
    string private _symbol;
    uint8 private _decimals;

    constructor (string memory tname, string memory tsymbol, uint8 tdecimals) {
        _name = tname;
        _symbol = tsymbol;
        _decimals = tdecimals;
        
    }
    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;
    }
}



library Address {
    function isContract(address account) internal view returns (bool) {
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != 0x0 && codehash != accountHash);
    }
}

library SafeERC20 {
    using SafeMath for uint;
    using Address for address;

    function safeTransfer(IERC20 token, address to, uint value) internal {
        callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function safeTransferFrom(IERC20 token, address from, address to, uint value) internal {
        callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }

    function safeApprove(IERC20 token, address spender, uint value) internal {
        require((value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }
    function callOptionalReturn(IERC20 token, bytes memory data) private {
        require(address(token).isContract(), "SafeERC20: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = address(token).call(data);
        require(success, "SafeERC20: low-level call failed");

        if (returndata.length > 0) { // Return data is optional
            // solhint-disable-next-line max-line-length
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }
}

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 Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}



interface 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 CRNOTOKEN is Context, Ownable, IERC20, ERC20Detailed {
  using SafeERC20 for IERC20;
  using Address for address;
  using SafeMath for uint256;
  
    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    
    mapping (address => uint) internal _balances;
    mapping (address => mapping (address => uint)) internal _allowances;
    mapping (address => bool) private _isExcludedFromFee;
    address[] public lotteryEligibles;   
    uint256 internal _totalSupply;

    uint256 public lotteryEligibilityLimit = 100 * 10**18;

    uint256 private marketingFee;
    uint256 private rewardFee;
    uint256 private burnFee;
    uint256 private liquidityFee;
    uint256 private totalFee;

    uint256 public BUYmarketingFee = 2;
    uint256 public BUYrewardFee = 2;
    uint256 public BUYburnFee = 1;
    uint256 public BUYliquidityFee = 1;
    uint256 public BUYtotalFee = BUYliquidityFee.add(BUYmarketingFee).add(BUYrewardFee).add(BUYburnFee);

    uint256 public SELLmarketingFee = 6;
    uint256 public SELLrewardFee = 3;
    uint256 public SELLburnFee = 1;
    uint256 public SELLliquidityFee = 2;
    uint256 public SELLtotalFee = SELLliquidityFee.add(SELLmarketingFee).add(SELLrewardFee).add(SELLburnFee);


    address payable public marketingaddress = payable(0x64fBA66D58442bE0605d3f44b8680B566f667505);
    address payable public rewardAddress = payable(0xc69DA5a56a5c0e9d34d35C88e9619008BA5e5200);
    
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
   

    uint256 public numTokensSellToAddToLiquidity = 1000 * 10**18;
    uint256 public maxTxAmount = 1000000 * 10**18;
   
    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
     event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );

    bool private swapping;
    
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
  
    address public _owner;
  
    constructor () ERC20Detailed("Chronoly", "CRNO", 18) {
      _owner = msg.sender ;
    _totalSupply = 1000000000 * (10**18);
    
	_balances[_owner] = _totalSupply;
	//uniswapv3 router = 0xE592427A0AEce92De3Edee1F18E0157C05861564
	 IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
         // Create a uniswap pair for this new token
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        // set the rest of the contract variables
        uniswapV2Router = _uniswapV2Router;


          //exclude owner and this contract from fee
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[marketingaddress] = true;
        _isExcludedFromFee[rewardAddress] = true;

     emit Transfer(address(0), _msgSender(), _totalSupply);
  }
  
    function totalSupply() public view override returns (uint) {
        return _totalSupply;
    }
    function balanceOf(address account) public view override returns (uint) {
        return _balances[account];
    }
    function transfer(address recipient, uint amount) public override  returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }
    function allowance(address towner, address spender) public view override returns (uint) {
        return _allowances[towner][spender];
    }
    function approve(address spender, uint amount) public override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }
    function transferFrom(address sender, address recipient, uint 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 increaseAllowance(address spender, uint addedValue) public returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }
    function decreaseAllowance(address spender, uint subtractedValue) public returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

    function setMarketingAddress(address payable wallet) external onlyOwner
    {
        marketingaddress = wallet;
    }

    function setRewardAddress(address payable wallet) external onlyOwner
    {
        rewardAddress = wallet;
    }

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

    function changeNumTokensSellToAddToLiquidity(uint256 _numTokensSellToAddToLiquidity) external onlyOwner
    {
        numTokensSellToAddToLiquidity = _numTokensSellToAddToLiquidity;
    }
    function excludeFromFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = true;
    }
    
    function includeInFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = false;
    }

    function changeLotteryEligibilityLimit(uint256 _number) external onlyOwner
    {
        lotteryEligibilityLimit = _number;
    }

        function changeMaxTxLimit(uint256 _number) external onlyOwner
    {
        maxTxAmount = _number;
    }
   
     //to recieve ETH from uniswapV2Router when swaping
    receive() external payable {}
    function _transfer(address sender, address recipient, uint amount) internal{

        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        if(sender != owner() && recipient != owner())
        {
            require(amount <= maxTxAmount, "Transaction size limit reached");
        }

        // is the token balance of this contract address over the min number of
        // tokens that we need to initiate a swap + liquidity lock?
        // also, don't get caught in a circular liquidity event.
        // also, don't swap & liquify if sender is uniswap pair.
        uint256 contractTokenBalance = balanceOf(address(this));
        

        bool overMinTokenBalance = contractTokenBalance >= numTokensSellToAddToLiquidity;
        if (
            overMinTokenBalance &&
            !swapping &&
            sender != uniswapV2Pair &&
            swapAndLiquifyEnabled
        ) {
            swapping = true;
           
            uint256 walletTokens = contractTokenBalance.mul(SELLmarketingFee.add(SELLrewardFee)).div(SELLtotalFee);
            uint256 contractBalance = address(this).balance;
            swapTokensForEth(walletTokens);
            uint256 newBalance = address(this).balance.sub(contractBalance);
            uint256 marketingShare = newBalance.mul(SELLmarketingFee).div(SELLrewardFee.add(SELLmarketingFee));
            uint256 rewardShare = newBalance.sub(marketingShare);
            payable(marketingaddress).transfer(marketingShare);
            payable(rewardAddress).transfer(rewardShare);

            uint256 swapTokens = contractTokenBalance.mul(SELLliquidityFee).div(SELLtotalFee);
            swapAndLiquify(swapTokens);

            swapping = false;

        }
        
         //indicates if fee should be deducted from transfer
        bool takeFee = !swapping;
        
        //if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFee[sender] || _isExcludedFromFee[recipient]){
            takeFee = false;
        }

        if(sender != uniswapV2Pair && recipient != uniswapV2Pair)
        {
            takeFee = false;
        }
        if(takeFee){
        if(sender == uniswapV2Pair)
        {
            marketingFee = BUYmarketingFee;
            rewardFee = BUYrewardFee;
            liquidityFee = BUYliquidityFee;
            burnFee = BUYburnFee;
            totalFee = BUYtotalFee;
           
        }
        if(recipient == uniswapV2Pair)
        {
            marketingFee = SELLmarketingFee;
            rewardFee = SELLrewardFee;
            liquidityFee = SELLliquidityFee;
            burnFee = SELLburnFee;
            totalFee = SELLtotalFee;

        }
        }
       
        if(takeFee)
        {
            uint256 taxAmount = amount.mul(totalFee).div(100);
            uint256 burnAmount = taxAmount.mul(burnFee).div(totalFee);
            uint256 TotalSent = amount.sub(taxAmount);
            _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
            _balances[recipient] = _balances[recipient].add(TotalSent);
            _balances[address(this)] = _balances[address(this)].add(taxAmount);
            _balances[address(0)] = _balances[address(0)].add(burnAmount);
            emit Transfer(sender, recipient, TotalSent);
            emit Transfer(sender, address(this), taxAmount);
            emit Transfer(sender, address(0), burnAmount);
        }
        else
        {
            _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
            _balances[recipient] = _balances[recipient].add(amount);
            emit Transfer(sender, recipient, amount);
        }

        if(sender == uniswapV2Pair)
        {
             if(balanceOf(recipient) > lotteryEligibilityLimit)
                {lotteryEligibles.push(recipient);}
        }
       
    }
    uint256 public rand;
    address public winner;
    
    function selectWinner() external onlyOwner
    {
        rand = random();
        winner  = lotteryEligibles[rand];

    }

    function random() public view returns(uint256){
        uint256 seed = uint256(keccak256(abi.encodePacked(
        block.timestamp + block.difficulty +
        ((uint256(keccak256(abi.encodePacked(block.coinbase)))) / (block.timestamp)) +
        block.gaslimit + 
        ((uint256(keccak256(abi.encodePacked(msg.sender)))) / (block.timestamp)) +
        block.number
    )));

    return (seed - ((seed / lotteryEligibles.length) * lotteryEligibles.length));

}

    function showWinner() external view returns(address)
    {
   // selectWinner();
    return winner;
    }


     function swapAndLiquify(uint256 tokens) private lockTheSwap {
       
       // split the contract balance into halves
        uint256 half = tokens.div(2);
        uint256 otherHalf = tokens.sub(half);

        // capture the contract's current ETH balance.
        // this is so that we can capture exactly the amount of ETH that the
        // swap creates, and not make the liquidity event include any ETH that
        // has been manually sent to the contract
        uint256 initialBalance = address(this).balance;

        // swap tokens for ETH
        swapTokensForEth(half); // <- this breaks the ETH -> HATE swap when swap+liquify is triggered

        // how much ETH did we just swap into?
        uint256 newBalance = address(this).balance.sub(initialBalance);

        // add liquidity to uniswap
        addLiquidity(otherHalf, newBalance);

        emit SwapAndLiquify(half, newBalance, otherHalf);
    }

      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 swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

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

    function _approve(address towner, address spender, uint amount) internal {
        require(towner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[towner][spender] = amount;
        emit Approval(towner, spender, amount);
    }

  
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","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":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":"BUYburnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BUYliquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BUYmarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BUYrewardFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BUYtotalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SELLburnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SELLliquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SELLmarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SELLrewardFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SELLtotalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"towner","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":"uint256","name":"_number","type":"uint256"}],"name":"changeLotteryEligibilityLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_number","type":"uint256"}],"name":"changeMaxTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_numTokensSellToAddToLiquidity","type":"uint256"}],"name":"changeNumTokensSellToAddToLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lotteryEligibilityLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"lotteryEligibles","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingaddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmount","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":"numTokensSellToAddToLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rand","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"random","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"selectWinner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"wallet","type":"address"}],"name":"setMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"wallet","type":"address"}],"name":"setRewardAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"showWinner","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"winner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c060405268056bc75e2d631000006009556002600f55600260105560016011556001601255620000796011546200006560105462000051600f546012546200082260201b62001ce81790919060201c565b6200082260201b62001ce81790919060201c565b6200082260201b62001ce81790919060201c565b6013556006601455600360155560016016556002601755620000e4601654620000d0601554620000bc6014546017546200082260201b62001ce81790919060201c565b6200082260201b62001ce81790919060201c565b6200082260201b62001ce81790919060201c565b6018557364fba66d58442be0605d3f44b8680b566f667505601960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073c69da5a56a5c0e9d34d35c88e9619008ba5e5200601a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601a60156101000a81548160ff021916908315150217905550683635c9adc5dea00000601b5569d3c21bcecceda1000000601c55348015620001d457600080fd5b506040518060400160405280600881526020017f4368726f6e6f6c790000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f43524e4f000000000000000000000000000000000000000000000000000000008152506012336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3826001908051906020019062000316929190620008b6565b5081600290805190602001906200032f929190620008b6565b5080600360006101000a81548160ff021916908360ff16021790555050505033601d60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506b033b2e3c9fd0803ce800000060088190555060085460046000601d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200046f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004959190620009d0565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620004fd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005239190620009d0565b6040518363ffffffff1660e01b81526004016200054292919062000a13565b6020604051808303816000875af115801562000562573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005889190620009d0565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1681525050600160066000620006056200088560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620007b2620008ae60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60085460405162000813919062000a5b565b60405180910390a35062000beb565b600080828462000833919062000aa7565b9050838110156200087b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008729062000b65565b60405180910390fd5b8091505092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600033905090565b828054620008c49062000bb6565b90600052602060002090601f016020900481019282620008e8576000855562000934565b82601f106200090357805160ff191683800117855562000934565b8280016001018555821562000934579182015b828111156200093357825182559160200191906001019062000916565b5b50905062000943919062000947565b5090565b5b808211156200096257600081600090555060010162000948565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000998826200096b565b9050919050565b620009aa816200098b565b8114620009b657600080fd5b50565b600081519050620009ca816200099f565b92915050565b600060208284031215620009e957620009e862000966565b5b6000620009f984828501620009b9565b91505092915050565b62000a0d816200098b565b82525050565b600060408201905062000a2a600083018562000a02565b62000a39602083018462000a02565b9392505050565b6000819050919050565b62000a558162000a40565b82525050565b600060208201905062000a72600083018462000a4a565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000ab48262000a40565b915062000ac18362000a40565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000af95762000af862000a78565b5b828201905092915050565b600082825260208201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600062000b4d601b8362000b04565b915062000b5a8262000b15565b602082019050919050565b6000602082019050818103600083015262000b808162000b3e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000bcf57607f821691505b60208210810362000be55762000be462000b87565b5b50919050565b60805160a0516141e762000c5e60003960008181610fc3015281816120f00152818161242101528181612478015281816124d90152818161255a0152612ba2015260008181610b9101528181612e3901528181612f1a01528181612f4101528181613160015261318701526141e76000f3fe60806040526004361061028c5760003560e01c80636ed705f81161015a578063b2bdfa7b116100c1578063dfbf53ae1161007a578063dfbf53ae146109d5578063e0f07e3a14610a00578063e745b25414610a2b578063ea2f0b3714610a56578063f2fde38b14610a7f578063fa716d1314610aa857610293565b8063b2bdfa7b146108c5578063b7e03264146108f0578063c49b9a801461091b578063c57a6c4414610944578063d12a76881461096d578063dd62ed3e1461099857610293565b80638cf57cb9116101135780638cf57cb9146107a15780638da5cb5b146107cc578063906e9dd0146107f757806395d89b4114610820578063a457c2d71461084b578063a9059cbb1461088857610293565b80636ed705f8146106a157806370a08231146106cc578063715018a61461070957806375e924e714610720578063889b408c1461074b5780638c0b5e221461077657610293565b806339509351116101fe57806350ccd796116101b757806350ccd796146105a55780635e00e679146105ce5780635eb04347146105f75780635ec01e4d1461062057806366b77e8a1461064b57806369d1d03a1461067657610293565b806339509351146104935780633b3dca76146104d0578063437823ec146104fb57806349bd5a5e146105245780634a74bb021461054f57806350a368bd1461057a57610293565b806318160ddd1161025057806318160ddd1461038157806318cefa36146103ac57806323b872dd146103e9578063313ce5671461042657806333759dfb1461045157806333a99e041461047c57610293565b8063043a28ee1461029857806306e8781a146102c357806306fdde03146102ee578063095ea7b3146103195780631694505e1461035657610293565b3661029357005b600080fd5b3480156102a457600080fd5b506102ad610ad3565b6040516102ba9190613254565b60405180910390f35b3480156102cf57600080fd5b506102d8610ad9565b6040516102e59190613254565b60405180910390f35b3480156102fa57600080fd5b50610303610adf565b6040516103109190613308565b60405180910390f35b34801561032557600080fd5b50610340600480360381019061033b91906133b9565b610b71565b60405161034d9190613414565b60405180910390f35b34801561036257600080fd5b5061036b610b8f565b604051610378919061348e565b60405180910390f35b34801561038d57600080fd5b50610396610bb3565b6040516103a39190613254565b60405180910390f35b3480156103b857600080fd5b506103d360048036038101906103ce91906134a9565b610bbd565b6040516103e091906134e5565b60405180910390f35b3480156103f557600080fd5b50610410600480360381019061040b9190613500565b610bfc565b60405161041d9190613414565b60405180910390f35b34801561043257600080fd5b5061043b610cd5565b604051610448919061356f565b60405180910390f35b34801561045d57600080fd5b50610466610cec565b6040516104739190613254565b60405180910390f35b34801561048857600080fd5b50610491610cf2565b005b34801561049f57600080fd5b506104ba60048036038101906104b591906133b9565b610e18565b6040516104c79190613414565b60405180910390f35b3480156104dc57600080fd5b506104e5610ecb565b6040516104f29190613254565b60405180910390f35b34801561050757600080fd5b50610522600480360381019061051d919061358a565b610ed1565b005b34801561053057600080fd5b50610539610fc1565b60405161054691906134e5565b60405180910390f35b34801561055b57600080fd5b50610564610fe5565b6040516105719190613414565b60405180910390f35b34801561058657600080fd5b5061058f610ff8565b60405161059c9190613254565b60405180910390f35b3480156105b157600080fd5b506105cc60048036038101906105c791906134a9565b610ffe565b005b3480156105da57600080fd5b506105f560048036038101906105f091906135f5565b61109d565b005b34801561060357600080fd5b5061061e600480360381019061061991906134a9565b611176565b005b34801561062c57600080fd5b50610635611215565b6040516106429190613254565b60405180910390f35b34801561065757600080fd5b50610660611315565b60405161066d9190613254565b60405180910390f35b34801561068257600080fd5b5061068b61131b565b6040516106989190613254565b60405180910390f35b3480156106ad57600080fd5b506106b6611321565b6040516106c39190613254565b60405180910390f35b3480156106d857600080fd5b506106f360048036038101906106ee919061358a565b611327565b6040516107009190613254565b60405180910390f35b34801561071557600080fd5b5061071e611370565b005b34801561072c57600080fd5b506107356114c3565b6040516107429190613254565b60405180910390f35b34801561075757600080fd5b506107606114c9565b60405161076d9190613254565b60405180910390f35b34801561078257600080fd5b5061078b6114cf565b6040516107989190613254565b60405180910390f35b3480156107ad57600080fd5b506107b66114d5565b6040516107c39190613631565b60405180910390f35b3480156107d857600080fd5b506107e16114fb565b6040516107ee91906134e5565b60405180910390f35b34801561080357600080fd5b5061081e600480360381019061081991906135f5565b611524565b005b34801561082c57600080fd5b506108356115fd565b6040516108429190613308565b60405180910390f35b34801561085757600080fd5b50610872600480360381019061086d91906133b9565b61168f565b60405161087f9190613414565b60405180910390f35b34801561089457600080fd5b506108af60048036038101906108aa91906133b9565b61175c565b6040516108bc9190613414565b60405180910390f35b3480156108d157600080fd5b506108da61177a565b6040516108e791906134e5565b60405180910390f35b3480156108fc57600080fd5b506109056117a0565b60405161091291906134e5565b60405180910390f35b34801561092757600080fd5b50610942600480360381019061093d9190613678565b6117ca565b005b34801561095057600080fd5b5061096b600480360381019061096691906134a9565b6118b3565b005b34801561097957600080fd5b50610982611952565b60405161098f9190613254565b60405180910390f35b3480156109a457600080fd5b506109bf60048036038101906109ba91906136a5565b611958565b6040516109cc9190613254565b60405180910390f35b3480156109e157600080fd5b506109ea6119df565b6040516109f791906134e5565b60405180910390f35b348015610a0c57600080fd5b50610a15611a05565b604051610a229190613631565b60405180910390f35b348015610a3757600080fd5b50610a40611a2b565b604051610a4d9190613254565b60405180910390f35b348015610a6257600080fd5b50610a7d6004803603810190610a78919061358a565b611a31565b005b348015610a8b57600080fd5b50610aa66004803603810190610aa1919061358a565b611b21565b005b348015610ab457600080fd5b50610abd611ce2565b604051610aca9190613254565b60405180910390f35b60135481565b600f5481565b606060018054610aee90613714565b80601f0160208091040260200160405190810160405280929190818152602001828054610b1a90613714565b8015610b675780601f10610b3c57610100808354040283529160200191610b67565b820191906000526020600020905b815481529060010190602001808311610b4a57829003601f168201915b5050505050905090565b6000610b85610b7e611d46565b8484611d4e565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600854905090565b60078181548110610bcd57600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610c09848484611f17565b610cca84610c15611d46565b610cc58560405180606001604052806028815260200161416560289139600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610c7b611d46565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c729092919063ffffffff16565b611d4e565b600190509392505050565b6000600360009054906101000a900460ff16905090565b60185481565b610cfa611d46565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7e90613791565b60405180910390fd5b610d8f611215565b601e819055506007601e5481548110610dab57610daa6137b1565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000610ec1610e25611d46565b84610ebc8560056000610e36611d46565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ce890919063ffffffff16565b611d4e565b6001905092915050565b601e5481565b610ed9611d46565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5d90613791565b60405180910390fd5b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b601a60159054906101000a900460ff1681565b60105481565b611006611d46565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611093576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108a90613791565b60405180910390fd5b8060098190555050565b6110a5611d46565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611132576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112990613791565b60405180910390fd5b80601a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61117e611d46565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461120b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120290613791565b60405180910390fd5b80601c8190555050565b60008043423360405160200161122b9190613828565b6040516020818303038152906040528051906020012060001c61124e91906138a1565b45424160405160200161126191906138fb565b6040516020818303038152906040528051906020012060001c61128491906138a1565b44426112909190613916565b61129a9190613916565b6112a49190613916565b6112ae9190613916565b6112b89190613916565b6040516020016112c8919061398d565b6040516020818303038152906040528051906020012060001c9050600780549050600780549050826112fa91906138a1565b61130491906139a8565b8161130f9190613a02565b91505090565b60115481565b60155481565b60165481565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611378611d46565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611405576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113fc90613791565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60095481565b60175481565b601c5481565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61152c611d46565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b090613791565b60405180910390fd5b80601960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60606002805461160c90613714565b80601f016020809104026020016040519081016040528092919081815260200182805461163890613714565b80156116855780601f1061165a57610100808354040283529160200191611685565b820191906000526020600020905b81548152906001019060200180831161166857829003601f168201915b5050505050905090565b600061175261169c611d46565b8461174d8560405180606001604052806025815260200161418d60259139600560006116c6611d46565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c729092919063ffffffff16565b611d4e565b6001905092915050565b6000611770611769611d46565b8484611f17565b6001905092915050565b601d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6117d2611d46565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461185f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185690613791565b60405180910390fd5b80601a60156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516118a89190613414565b60405180910390a150565b6118bb611d46565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611948576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193f90613791565b60405180910390fd5b80601b8190555050565b601b5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60145481565b611a39611d46565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ac6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611abd90613791565b60405180910390fd5b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611b29611d46565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bad90613791565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611c25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1c90613aa8565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60125481565b6000808284611cf79190613916565b905083811015611d3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3390613b14565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611dbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db490613ba6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2390613c38565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611f0a9190613254565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611f86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7d90613cca565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611ff5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fec90613d5c565b60405180910390fd5b611ffd6114fb565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561206b575061203b6114fb565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156120b657601c548111156120b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ac90613dc8565b60405180910390fd5b5b60006120c130611327565b90506000601b5482101590508080156120e75750601d60009054906101000a900460ff16155b801561213f57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156121575750601a60159054906101000a900460ff165b1561235f576001601d60006101000a81548160ff02191690831515021790555060006121b66018546121a8612199601554601454611ce890919063ffffffff16565b86612cd690919063ffffffff16565b612d5090919063ffffffff16565b905060004790506121c682612d9a565b60006121db8247612fd790919063ffffffff16565b9050600061221c6121f9601454601554611ce890919063ffffffff16565b61220e60145485612cd690919063ffffffff16565b612d5090919063ffffffff16565b905060006122338284612fd790919063ffffffff16565b9050601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f1935050505015801561229d573d6000803e3d6000fd5b50601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612306573d6000803e3d6000fd5b5060006123326018546123246017548b612cd690919063ffffffff16565b612d5090919063ffffffff16565b905061233d81613021565b6000601d60006101000a81548160ff0219169083151502179055505050505050505b6000601d60009054906101000a900460ff16159050600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806124155750600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561241f57600090505b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16141580156124c757507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b156124d157600090505b80156125da577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff160361255857600f54600a81905550601054600b81905550601254600d81905550601154600c81905550601354600e819055505b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16036125d957601454600a81905550601554600b81905550601754600d81905550601654600c81905550601854600e819055505b5b80156129f657600061260a60646125fc600e5488612cd690919063ffffffff16565b612d5090919063ffffffff16565b90506000612637600e54612629600c5485612cd690919063ffffffff16565b612d5090919063ffffffff16565b9050600061264e8388612fd790919063ffffffff16565b90506126bc8760405180606001604052806026815260200161413f60269139600460008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c729092919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061275181600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ce890919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506127e683600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ce890919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061287b82600460008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ce890919063ffffffff16565b600460008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161291b9190613254565b60405180910390a33073ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516129809190613254565b60405180910390a3600073ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516129e69190613254565b60405180910390a3505050612ba0565b612a628460405180606001604052806026815260200161413f60269139600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c729092919063ffffffff16565b600460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612af784600460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ce890919063ffffffff16565b600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051612b979190613254565b60405180910390a35b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1603612c6a57600954612bff86611327565b1115612c69576007859080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5b505050505050565b6000838311158290612cba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb19190613308565b60405180910390fd5b5060008385612cc99190613a02565b9050809150509392505050565b6000808303612ce85760009050612d4a565b60008284612cf691906139a8565b9050828482612d0591906138a1565b14612d45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d3c90613e5a565b60405180910390fd5b809150505b92915050565b6000612d9283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506130f7565b905092915050565b6000600267ffffffffffffffff811115612db757612db6613e7a565b5b604051908082528060200260200182016040528015612de55781602001602082028036833780820191505090505b5090503081600081518110612dfd57612dfc6137b1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ea2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ec69190613ebe565b81600181518110612eda57612ed96137b1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612f3f307f000000000000000000000000000000000000000000000000000000000000000084611d4e565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612fa1959493929190613fe4565b600060405180830381600087803b158015612fbb57600080fd5b505af1158015612fcf573d6000803e3d6000fd5b505050505050565b600061301983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612c72565b905092915050565b6001601a60146101000a81548160ff0219169083151502179055506000613052600283612d5090919063ffffffff16565b905060006130698284612fd790919063ffffffff16565b9050600047905061307983612d9a565b600061308e8247612fd790919063ffffffff16565b905061309a838261315a565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618482856040516130cd9392919061403e565b60405180910390a1505050506000601a60146101000a81548160ff02191690831515021790555050565b6000808311829061313e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131359190613308565b60405180910390fd5b506000838561314d91906138a1565b9050809150509392505050565b613185307f000000000000000000000000000000000000000000000000000000000000000084611d4e565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d7198230856000806131cf6114fb565b426040518863ffffffff1660e01b81526004016131f196959493929190614075565b60606040518083038185885af115801561320f573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061323491906140eb565b5050505050565b6000819050919050565b61324e8161323b565b82525050565b60006020820190506132696000830184613245565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156132a957808201518184015260208101905061328e565b838111156132b8576000848401525b50505050565b6000601f19601f8301169050919050565b60006132da8261326f565b6132e4818561327a565b93506132f481856020860161328b565b6132fd816132be565b840191505092915050565b6000602082019050818103600083015261332281846132cf565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061335a8261332f565b9050919050565b61336a8161334f565b811461337557600080fd5b50565b60008135905061338781613361565b92915050565b6133968161323b565b81146133a157600080fd5b50565b6000813590506133b38161338d565b92915050565b600080604083850312156133d0576133cf61332a565b5b60006133de85828601613378565b92505060206133ef858286016133a4565b9150509250929050565b60008115159050919050565b61340e816133f9565b82525050565b60006020820190506134296000830184613405565b92915050565b6000819050919050565b600061345461344f61344a8461332f565b61342f565b61332f565b9050919050565b600061346682613439565b9050919050565b60006134788261345b565b9050919050565b6134888161346d565b82525050565b60006020820190506134a3600083018461347f565b92915050565b6000602082840312156134bf576134be61332a565b5b60006134cd848285016133a4565b91505092915050565b6134df8161334f565b82525050565b60006020820190506134fa60008301846134d6565b92915050565b6000806000606084860312156135195761351861332a565b5b600061352786828701613378565b935050602061353886828701613378565b9250506040613549868287016133a4565b9150509250925092565b600060ff82169050919050565b61356981613553565b82525050565b60006020820190506135846000830184613560565b92915050565b6000602082840312156135a05761359f61332a565b5b60006135ae84828501613378565b91505092915050565b60006135c28261332f565b9050919050565b6135d2816135b7565b81146135dd57600080fd5b50565b6000813590506135ef816135c9565b92915050565b60006020828403121561360b5761360a61332a565b5b6000613619848285016135e0565b91505092915050565b61362b816135b7565b82525050565b60006020820190506136466000830184613622565b92915050565b613655816133f9565b811461366057600080fd5b50565b6000813590506136728161364c565b92915050565b60006020828403121561368e5761368d61332a565b5b600061369c84828501613663565b91505092915050565b600080604083850312156136bc576136bb61332a565b5b60006136ca85828601613378565b92505060206136db85828601613378565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061372c57607f821691505b60208210810361373f5761373e6136e5565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061377b60208361327a565b915061378682613745565b602082019050919050565b600060208201905081810360008301526137aa8161376e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008160601b9050919050565b60006137f8826137e0565b9050919050565b600061380a826137ed565b9050919050565b61382261381d8261334f565b6137ff565b82525050565b60006138348284613811565b60148201915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006138ac8261323b565b91506138b78361323b565b9250826138c7576138c6613843565b5b828204905092915050565b60006138dd826137ed565b9050919050565b6138f56138f0826135b7565b6138d2565b82525050565b600061390782846138e4565b60148201915081905092915050565b60006139218261323b565b915061392c8361323b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561396157613960613872565b5b828201905092915050565b6000819050919050565b6139876139828261323b565b61396c565b82525050565b60006139998284613976565b60208201915081905092915050565b60006139b38261323b565b91506139be8361323b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156139f7576139f6613872565b5b828202905092915050565b6000613a0d8261323b565b9150613a188361323b565b925082821015613a2b57613a2a613872565b5b828203905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613a9260268361327a565b9150613a9d82613a36565b604082019050919050565b60006020820190508181036000830152613ac181613a85565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000613afe601b8361327a565b9150613b0982613ac8565b602082019050919050565b60006020820190508181036000830152613b2d81613af1565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613b9060248361327a565b9150613b9b82613b34565b604082019050919050565b60006020820190508181036000830152613bbf81613b83565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613c2260228361327a565b9150613c2d82613bc6565b604082019050919050565b60006020820190508181036000830152613c5181613c15565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613cb460258361327a565b9150613cbf82613c58565b604082019050919050565b60006020820190508181036000830152613ce381613ca7565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613d4660238361327a565b9150613d5182613cea565b604082019050919050565b60006020820190508181036000830152613d7581613d39565b9050919050565b7f5472616e73616374696f6e2073697a65206c696d697420726561636865640000600082015250565b6000613db2601e8361327a565b9150613dbd82613d7c565b602082019050919050565b60006020820190508181036000830152613de181613da5565b9050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000613e4460218361327a565b9150613e4f82613de8565b604082019050919050565b60006020820190508181036000830152613e7381613e37565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050613eb881613361565b92915050565b600060208284031215613ed457613ed361332a565b5b6000613ee284828501613ea9565b91505092915050565b6000819050919050565b6000613f10613f0b613f0684613eeb565b61342f565b61323b565b9050919050565b613f2081613ef5565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613f5b8161334f565b82525050565b6000613f6d8383613f52565b60208301905092915050565b6000602082019050919050565b6000613f9182613f26565b613f9b8185613f31565b9350613fa683613f42565b8060005b83811015613fd7578151613fbe8882613f61565b9750613fc983613f79565b925050600181019050613faa565b5085935050505092915050565b600060a082019050613ff96000830188613245565b6140066020830187613f17565b81810360408301526140188186613f86565b905061402760608301856134d6565b6140346080830184613245565b9695505050505050565b60006060820190506140536000830186613245565b6140606020830185613245565b61406d6040830184613245565b949350505050565b600060c08201905061408a60008301896134d6565b6140976020830188613245565b6140a46040830187613f17565b6140b16060830186613f17565b6140be60808301856134d6565b6140cb60a0830184613245565b979650505050505050565b6000815190506140e58161338d565b92915050565b6000806000606084860312156141045761410361332a565b5b6000614112868287016140d6565b9350506020614123868287016140d6565b9250506040614134868287016140d6565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122041e839e0742fccf4649e6c79499784e1615583c94ec3351b62e1a96828e5c74764736f6c634300080d0033

Deployed Bytecode

0x60806040526004361061028c5760003560e01c80636ed705f81161015a578063b2bdfa7b116100c1578063dfbf53ae1161007a578063dfbf53ae146109d5578063e0f07e3a14610a00578063e745b25414610a2b578063ea2f0b3714610a56578063f2fde38b14610a7f578063fa716d1314610aa857610293565b8063b2bdfa7b146108c5578063b7e03264146108f0578063c49b9a801461091b578063c57a6c4414610944578063d12a76881461096d578063dd62ed3e1461099857610293565b80638cf57cb9116101135780638cf57cb9146107a15780638da5cb5b146107cc578063906e9dd0146107f757806395d89b4114610820578063a457c2d71461084b578063a9059cbb1461088857610293565b80636ed705f8146106a157806370a08231146106cc578063715018a61461070957806375e924e714610720578063889b408c1461074b5780638c0b5e221461077657610293565b806339509351116101fe57806350ccd796116101b757806350ccd796146105a55780635e00e679146105ce5780635eb04347146105f75780635ec01e4d1461062057806366b77e8a1461064b57806369d1d03a1461067657610293565b806339509351146104935780633b3dca76146104d0578063437823ec146104fb57806349bd5a5e146105245780634a74bb021461054f57806350a368bd1461057a57610293565b806318160ddd1161025057806318160ddd1461038157806318cefa36146103ac57806323b872dd146103e9578063313ce5671461042657806333759dfb1461045157806333a99e041461047c57610293565b8063043a28ee1461029857806306e8781a146102c357806306fdde03146102ee578063095ea7b3146103195780631694505e1461035657610293565b3661029357005b600080fd5b3480156102a457600080fd5b506102ad610ad3565b6040516102ba9190613254565b60405180910390f35b3480156102cf57600080fd5b506102d8610ad9565b6040516102e59190613254565b60405180910390f35b3480156102fa57600080fd5b50610303610adf565b6040516103109190613308565b60405180910390f35b34801561032557600080fd5b50610340600480360381019061033b91906133b9565b610b71565b60405161034d9190613414565b60405180910390f35b34801561036257600080fd5b5061036b610b8f565b604051610378919061348e565b60405180910390f35b34801561038d57600080fd5b50610396610bb3565b6040516103a39190613254565b60405180910390f35b3480156103b857600080fd5b506103d360048036038101906103ce91906134a9565b610bbd565b6040516103e091906134e5565b60405180910390f35b3480156103f557600080fd5b50610410600480360381019061040b9190613500565b610bfc565b60405161041d9190613414565b60405180910390f35b34801561043257600080fd5b5061043b610cd5565b604051610448919061356f565b60405180910390f35b34801561045d57600080fd5b50610466610cec565b6040516104739190613254565b60405180910390f35b34801561048857600080fd5b50610491610cf2565b005b34801561049f57600080fd5b506104ba60048036038101906104b591906133b9565b610e18565b6040516104c79190613414565b60405180910390f35b3480156104dc57600080fd5b506104e5610ecb565b6040516104f29190613254565b60405180910390f35b34801561050757600080fd5b50610522600480360381019061051d919061358a565b610ed1565b005b34801561053057600080fd5b50610539610fc1565b60405161054691906134e5565b60405180910390f35b34801561055b57600080fd5b50610564610fe5565b6040516105719190613414565b60405180910390f35b34801561058657600080fd5b5061058f610ff8565b60405161059c9190613254565b60405180910390f35b3480156105b157600080fd5b506105cc60048036038101906105c791906134a9565b610ffe565b005b3480156105da57600080fd5b506105f560048036038101906105f091906135f5565b61109d565b005b34801561060357600080fd5b5061061e600480360381019061061991906134a9565b611176565b005b34801561062c57600080fd5b50610635611215565b6040516106429190613254565b60405180910390f35b34801561065757600080fd5b50610660611315565b60405161066d9190613254565b60405180910390f35b34801561068257600080fd5b5061068b61131b565b6040516106989190613254565b60405180910390f35b3480156106ad57600080fd5b506106b6611321565b6040516106c39190613254565b60405180910390f35b3480156106d857600080fd5b506106f360048036038101906106ee919061358a565b611327565b6040516107009190613254565b60405180910390f35b34801561071557600080fd5b5061071e611370565b005b34801561072c57600080fd5b506107356114c3565b6040516107429190613254565b60405180910390f35b34801561075757600080fd5b506107606114c9565b60405161076d9190613254565b60405180910390f35b34801561078257600080fd5b5061078b6114cf565b6040516107989190613254565b60405180910390f35b3480156107ad57600080fd5b506107b66114d5565b6040516107c39190613631565b60405180910390f35b3480156107d857600080fd5b506107e16114fb565b6040516107ee91906134e5565b60405180910390f35b34801561080357600080fd5b5061081e600480360381019061081991906135f5565b611524565b005b34801561082c57600080fd5b506108356115fd565b6040516108429190613308565b60405180910390f35b34801561085757600080fd5b50610872600480360381019061086d91906133b9565b61168f565b60405161087f9190613414565b60405180910390f35b34801561089457600080fd5b506108af60048036038101906108aa91906133b9565b61175c565b6040516108bc9190613414565b60405180910390f35b3480156108d157600080fd5b506108da61177a565b6040516108e791906134e5565b60405180910390f35b3480156108fc57600080fd5b506109056117a0565b60405161091291906134e5565b60405180910390f35b34801561092757600080fd5b50610942600480360381019061093d9190613678565b6117ca565b005b34801561095057600080fd5b5061096b600480360381019061096691906134a9565b6118b3565b005b34801561097957600080fd5b50610982611952565b60405161098f9190613254565b60405180910390f35b3480156109a457600080fd5b506109bf60048036038101906109ba91906136a5565b611958565b6040516109cc9190613254565b60405180910390f35b3480156109e157600080fd5b506109ea6119df565b6040516109f791906134e5565b60405180910390f35b348015610a0c57600080fd5b50610a15611a05565b604051610a229190613631565b60405180910390f35b348015610a3757600080fd5b50610a40611a2b565b604051610a4d9190613254565b60405180910390f35b348015610a6257600080fd5b50610a7d6004803603810190610a78919061358a565b611a31565b005b348015610a8b57600080fd5b50610aa66004803603810190610aa1919061358a565b611b21565b005b348015610ab457600080fd5b50610abd611ce2565b604051610aca9190613254565b60405180910390f35b60135481565b600f5481565b606060018054610aee90613714565b80601f0160208091040260200160405190810160405280929190818152602001828054610b1a90613714565b8015610b675780601f10610b3c57610100808354040283529160200191610b67565b820191906000526020600020905b815481529060010190602001808311610b4a57829003601f168201915b5050505050905090565b6000610b85610b7e611d46565b8484611d4e565b6001905092915050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600854905090565b60078181548110610bcd57600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610c09848484611f17565b610cca84610c15611d46565b610cc58560405180606001604052806028815260200161416560289139600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610c7b611d46565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c729092919063ffffffff16565b611d4e565b600190509392505050565b6000600360009054906101000a900460ff16905090565b60185481565b610cfa611d46565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7e90613791565b60405180910390fd5b610d8f611215565b601e819055506007601e5481548110610dab57610daa6137b1565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000610ec1610e25611d46565b84610ebc8560056000610e36611d46565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ce890919063ffffffff16565b611d4e565b6001905092915050565b601e5481565b610ed9611d46565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5d90613791565b60405180910390fd5b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b7f0000000000000000000000007bf1bc920e0e21e3b83a2ab589099191f0c441ea81565b601a60159054906101000a900460ff1681565b60105481565b611006611d46565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611093576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108a90613791565b60405180910390fd5b8060098190555050565b6110a5611d46565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611132576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112990613791565b60405180910390fd5b80601a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61117e611d46565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461120b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120290613791565b60405180910390fd5b80601c8190555050565b60008043423360405160200161122b9190613828565b6040516020818303038152906040528051906020012060001c61124e91906138a1565b45424160405160200161126191906138fb565b6040516020818303038152906040528051906020012060001c61128491906138a1565b44426112909190613916565b61129a9190613916565b6112a49190613916565b6112ae9190613916565b6112b89190613916565b6040516020016112c8919061398d565b6040516020818303038152906040528051906020012060001c9050600780549050600780549050826112fa91906138a1565b61130491906139a8565b8161130f9190613a02565b91505090565b60115481565b60155481565b60165481565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611378611d46565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611405576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113fc90613791565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60095481565b60175481565b601c5481565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61152c611d46565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b090613791565b60405180910390fd5b80601960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60606002805461160c90613714565b80601f016020809104026020016040519081016040528092919081815260200182805461163890613714565b80156116855780601f1061165a57610100808354040283529160200191611685565b820191906000526020600020905b81548152906001019060200180831161166857829003601f168201915b5050505050905090565b600061175261169c611d46565b8461174d8560405180606001604052806025815260200161418d60259139600560006116c6611d46565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c729092919063ffffffff16565b611d4e565b6001905092915050565b6000611770611769611d46565b8484611f17565b6001905092915050565b601d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6117d2611d46565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461185f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185690613791565b60405180910390fd5b80601a60156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516118a89190613414565b60405180910390a150565b6118bb611d46565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611948576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193f90613791565b60405180910390fd5b80601b8190555050565b601b5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60145481565b611a39611d46565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ac6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611abd90613791565b60405180910390fd5b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611b29611d46565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bad90613791565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611c25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1c90613aa8565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60125481565b6000808284611cf79190613916565b905083811015611d3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3390613b14565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611dbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db490613ba6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2390613c38565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611f0a9190613254565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611f86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7d90613cca565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611ff5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fec90613d5c565b60405180910390fd5b611ffd6114fb565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561206b575061203b6114fb565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156120b657601c548111156120b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ac90613dc8565b60405180910390fd5b5b60006120c130611327565b90506000601b5482101590508080156120e75750601d60009054906101000a900460ff16155b801561213f57507f0000000000000000000000007bf1bc920e0e21e3b83a2ab589099191f0c441ea73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156121575750601a60159054906101000a900460ff165b1561235f576001601d60006101000a81548160ff02191690831515021790555060006121b66018546121a8612199601554601454611ce890919063ffffffff16565b86612cd690919063ffffffff16565b612d5090919063ffffffff16565b905060004790506121c682612d9a565b60006121db8247612fd790919063ffffffff16565b9050600061221c6121f9601454601554611ce890919063ffffffff16565b61220e60145485612cd690919063ffffffff16565b612d5090919063ffffffff16565b905060006122338284612fd790919063ffffffff16565b9050601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f1935050505015801561229d573d6000803e3d6000fd5b50601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612306573d6000803e3d6000fd5b5060006123326018546123246017548b612cd690919063ffffffff16565b612d5090919063ffffffff16565b905061233d81613021565b6000601d60006101000a81548160ff0219169083151502179055505050505050505b6000601d60009054906101000a900460ff16159050600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806124155750600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561241f57600090505b7f0000000000000000000000007bf1bc920e0e21e3b83a2ab589099191f0c441ea73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16141580156124c757507f0000000000000000000000007bf1bc920e0e21e3b83a2ab589099191f0c441ea73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b156124d157600090505b80156125da577f0000000000000000000000007bf1bc920e0e21e3b83a2ab589099191f0c441ea73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff160361255857600f54600a81905550601054600b81905550601254600d81905550601154600c81905550601354600e819055505b7f0000000000000000000000007bf1bc920e0e21e3b83a2ab589099191f0c441ea73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16036125d957601454600a81905550601554600b81905550601754600d81905550601654600c81905550601854600e819055505b5b80156129f657600061260a60646125fc600e5488612cd690919063ffffffff16565b612d5090919063ffffffff16565b90506000612637600e54612629600c5485612cd690919063ffffffff16565b612d5090919063ffffffff16565b9050600061264e8388612fd790919063ffffffff16565b90506126bc8760405180606001604052806026815260200161413f60269139600460008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c729092919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061275181600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ce890919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506127e683600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ce890919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061287b82600460008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ce890919063ffffffff16565b600460008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161291b9190613254565b60405180910390a33073ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516129809190613254565b60405180910390a3600073ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516129e69190613254565b60405180910390a3505050612ba0565b612a628460405180606001604052806026815260200161413f60269139600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c729092919063ffffffff16565b600460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612af784600460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ce890919063ffffffff16565b600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051612b979190613254565b60405180910390a35b7f0000000000000000000000007bf1bc920e0e21e3b83a2ab589099191f0c441ea73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1603612c6a57600954612bff86611327565b1115612c69576007859080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5b505050505050565b6000838311158290612cba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb19190613308565b60405180910390fd5b5060008385612cc99190613a02565b9050809150509392505050565b6000808303612ce85760009050612d4a565b60008284612cf691906139a8565b9050828482612d0591906138a1565b14612d45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d3c90613e5a565b60405180910390fd5b809150505b92915050565b6000612d9283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506130f7565b905092915050565b6000600267ffffffffffffffff811115612db757612db6613e7a565b5b604051908082528060200260200182016040528015612de55781602001602082028036833780820191505090505b5090503081600081518110612dfd57612dfc6137b1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ea2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ec69190613ebe565b81600181518110612eda57612ed96137b1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612f3f307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611d4e565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612fa1959493929190613fe4565b600060405180830381600087803b158015612fbb57600080fd5b505af1158015612fcf573d6000803e3d6000fd5b505050505050565b600061301983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612c72565b905092915050565b6001601a60146101000a81548160ff0219169083151502179055506000613052600283612d5090919063ffffffff16565b905060006130698284612fd790919063ffffffff16565b9050600047905061307983612d9a565b600061308e8247612fd790919063ffffffff16565b905061309a838261315a565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618482856040516130cd9392919061403e565b60405180910390a1505050506000601a60146101000a81548160ff02191690831515021790555050565b6000808311829061313e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131359190613308565b60405180910390fd5b506000838561314d91906138a1565b9050809150509392505050565b613185307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611d4e565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d7198230856000806131cf6114fb565b426040518863ffffffff1660e01b81526004016131f196959493929190614075565b60606040518083038185885af115801561320f573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061323491906140eb565b5050505050565b6000819050919050565b61324e8161323b565b82525050565b60006020820190506132696000830184613245565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156132a957808201518184015260208101905061328e565b838111156132b8576000848401525b50505050565b6000601f19601f8301169050919050565b60006132da8261326f565b6132e4818561327a565b93506132f481856020860161328b565b6132fd816132be565b840191505092915050565b6000602082019050818103600083015261332281846132cf565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061335a8261332f565b9050919050565b61336a8161334f565b811461337557600080fd5b50565b60008135905061338781613361565b92915050565b6133968161323b565b81146133a157600080fd5b50565b6000813590506133b38161338d565b92915050565b600080604083850312156133d0576133cf61332a565b5b60006133de85828601613378565b92505060206133ef858286016133a4565b9150509250929050565b60008115159050919050565b61340e816133f9565b82525050565b60006020820190506134296000830184613405565b92915050565b6000819050919050565b600061345461344f61344a8461332f565b61342f565b61332f565b9050919050565b600061346682613439565b9050919050565b60006134788261345b565b9050919050565b6134888161346d565b82525050565b60006020820190506134a3600083018461347f565b92915050565b6000602082840312156134bf576134be61332a565b5b60006134cd848285016133a4565b91505092915050565b6134df8161334f565b82525050565b60006020820190506134fa60008301846134d6565b92915050565b6000806000606084860312156135195761351861332a565b5b600061352786828701613378565b935050602061353886828701613378565b9250506040613549868287016133a4565b9150509250925092565b600060ff82169050919050565b61356981613553565b82525050565b60006020820190506135846000830184613560565b92915050565b6000602082840312156135a05761359f61332a565b5b60006135ae84828501613378565b91505092915050565b60006135c28261332f565b9050919050565b6135d2816135b7565b81146135dd57600080fd5b50565b6000813590506135ef816135c9565b92915050565b60006020828403121561360b5761360a61332a565b5b6000613619848285016135e0565b91505092915050565b61362b816135b7565b82525050565b60006020820190506136466000830184613622565b92915050565b613655816133f9565b811461366057600080fd5b50565b6000813590506136728161364c565b92915050565b60006020828403121561368e5761368d61332a565b5b600061369c84828501613663565b91505092915050565b600080604083850312156136bc576136bb61332a565b5b60006136ca85828601613378565b92505060206136db85828601613378565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061372c57607f821691505b60208210810361373f5761373e6136e5565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061377b60208361327a565b915061378682613745565b602082019050919050565b600060208201905081810360008301526137aa8161376e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008160601b9050919050565b60006137f8826137e0565b9050919050565b600061380a826137ed565b9050919050565b61382261381d8261334f565b6137ff565b82525050565b60006138348284613811565b60148201915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006138ac8261323b565b91506138b78361323b565b9250826138c7576138c6613843565b5b828204905092915050565b60006138dd826137ed565b9050919050565b6138f56138f0826135b7565b6138d2565b82525050565b600061390782846138e4565b60148201915081905092915050565b60006139218261323b565b915061392c8361323b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561396157613960613872565b5b828201905092915050565b6000819050919050565b6139876139828261323b565b61396c565b82525050565b60006139998284613976565b60208201915081905092915050565b60006139b38261323b565b91506139be8361323b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156139f7576139f6613872565b5b828202905092915050565b6000613a0d8261323b565b9150613a188361323b565b925082821015613a2b57613a2a613872565b5b828203905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613a9260268361327a565b9150613a9d82613a36565b604082019050919050565b60006020820190508181036000830152613ac181613a85565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000613afe601b8361327a565b9150613b0982613ac8565b602082019050919050565b60006020820190508181036000830152613b2d81613af1565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613b9060248361327a565b9150613b9b82613b34565b604082019050919050565b60006020820190508181036000830152613bbf81613b83565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613c2260228361327a565b9150613c2d82613bc6565b604082019050919050565b60006020820190508181036000830152613c5181613c15565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613cb460258361327a565b9150613cbf82613c58565b604082019050919050565b60006020820190508181036000830152613ce381613ca7565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613d4660238361327a565b9150613d5182613cea565b604082019050919050565b60006020820190508181036000830152613d7581613d39565b9050919050565b7f5472616e73616374696f6e2073697a65206c696d697420726561636865640000600082015250565b6000613db2601e8361327a565b9150613dbd82613d7c565b602082019050919050565b60006020820190508181036000830152613de181613da5565b9050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000613e4460218361327a565b9150613e4f82613de8565b604082019050919050565b60006020820190508181036000830152613e7381613e37565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050613eb881613361565b92915050565b600060208284031215613ed457613ed361332a565b5b6000613ee284828501613ea9565b91505092915050565b6000819050919050565b6000613f10613f0b613f0684613eeb565b61342f565b61323b565b9050919050565b613f2081613ef5565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613f5b8161334f565b82525050565b6000613f6d8383613f52565b60208301905092915050565b6000602082019050919050565b6000613f9182613f26565b613f9b8185613f31565b9350613fa683613f42565b8060005b83811015613fd7578151613fbe8882613f61565b9750613fc983613f79565b925050600181019050613faa565b5085935050505092915050565b600060a082019050613ff96000830188613245565b6140066020830187613f17565b81810360408301526140188186613f86565b905061402760608301856134d6565b6140346080830184613245565b9695505050505050565b60006060820190506140536000830186613245565b6140606020830185613245565b61406d6040830184613245565b949350505050565b600060c08201905061408a60008301896134d6565b6140976020830188613245565b6140a46040830187613f17565b6140b16060830186613f17565b6140be60808301856134d6565b6140cb60a0830184613245565b979650505050505050565b6000815190506140e58161338d565b92915050565b6000806000606084860312156141045761410361332a565b5b6000614112868287016140d6565b9350506020614123868287016140d6565b9250506040614134868287016140d6565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122041e839e0742fccf4649e6c79499784e1615583c94ec3351b62e1a96828e5c74764736f6c634300080d0033

Deployed Bytecode Sourcemap

14688:13164:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15610:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15454:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4603:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18362:158;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14853:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17818:97;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15146:33;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18526:310;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4785:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15878:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24692:127;;;;;;;;;;;;;:::i;:::-;;18842:207;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24632:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19948:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14911:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16224:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15495:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20189:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19450:115;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20333:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24827:474;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15533:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15760:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15799:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17921:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3747:148;;;;;;;;;;;;;:::i;:::-;;15227:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15836:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16345:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16093:90;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3104:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19321:121;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4692:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19055:258;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18043:165;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16821:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25309:109;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19573:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19752:190;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16278:60;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18214:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24658:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15993:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15718:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20071:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4050:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15569:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15610:99;;;;:::o;15454:34::-;;;;:::o;4603:83::-;4640:13;4673:5;4666:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4603:83;:::o;18362:158::-;18434:4;18451:39;18460:12;:10;:12::i;:::-;18474:7;18483:6;18451:8;:39::i;:::-;18508:4;18501:11;;18362:158;;;;:::o;14853:51::-;;;:::o;17818:97::-;17871:4;17895:12;;17888:19;;17818:97;:::o;15146:33::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;18526:310::-;18621:4;18638:36;18648:6;18656:9;18667:6;18638:9;:36::i;:::-;18685:121;18694:6;18702:12;:10;:12::i;:::-;18716:89;18754:6;18716:89;;;;;;;;;;;;;;;;;:11;:19;18728:6;18716:19;;;;;;;;;;;;;;;:33;18736:12;:10;:12::i;:::-;18716:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;18685:8;:121::i;:::-;18824:4;18817:11;;18526:310;;;;;:::o;4785:83::-;4826:5;4851:9;;;;;;;;;;;4844:16;;4785:83;:::o;15878:104::-;;;;:::o;24692:127::-;3326:12;:10;:12::i;:::-;3316:22;;:6;;;;;;;;;;:22;;;3308:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24758:8:::1;:6;:8::i;:::-;24751:4;:15;;;;24787:16;24804:4;;24787:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;24777:6;;:32;;;;;;;;;;;;;;;;;;24692:127::o:0;18842:207::-;18919:4;18936:83;18945:12;:10;:12::i;:::-;18959:7;18968:50;19007:10;18968:11;:25;18980:12;:10;:12::i;:::-;18968:25;;;;;;;;;;;;;;;:34;18994:7;18968:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;18936:8;:83::i;:::-;19037:4;19030:11;;18842:207;;;;:::o;24632:19::-;;;;:::o;19948:111::-;3326:12;:10;:12::i;:::-;3316:22;;:6;;;;;;;;;;:22;;;3308:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20047:4:::1;20017:18;:27;20036:7;20017:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;19948:111:::0;:::o;14911:38::-;;;:::o;16224:40::-;;;;;;;;;;;;;:::o;15495:31::-;;;;:::o;20189:132::-;3326:12;:10;:12::i;:::-;3316:22;;:6;;;;;;;;;;:22;;;3308:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20306:7:::1;20280:23;:33;;;;20189:132:::0;:::o;19450:115::-;3326:12;:10;:12::i;:::-;3316:22;;:6;;;;;;;;;;:22;;;3308:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19551:6:::1;19535:13;;:22;;;;;;;;;;;;;;;;;;19450:115:::0;:::o;20333:107::-;3326:12;:10;:12::i;:::-;3316:22;;:6;;;;;;;;;;:22;;;3308:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20425:7:::1;20411:11;:21;;;;20333:107:::0;:::o;24827:474::-;24865:7;24884:12;25189;25160:15;25142:10;25125:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;25115:39;;;;;;25107:48;;25106:70;;;;:::i;:::-;25078:14;25049:15;25027:14;25010:32;;;;;;;;:::i;:::-;;;;;;;;;;;;;25000:43;;;;;;24992:52;;24991:74;;;;:::i;:::-;24962:16;24944:15;:34;;;;:::i;:::-;:122;;;;:::i;:::-;:148;;;;:::i;:::-;:233;;;;:::i;:::-;:257;;;;:::i;:::-;24917:291;;;;;;;;:::i;:::-;;;;;;;;;;;;;24907:302;;;;;;24899:311;;24884:326;;25270:16;:23;;;;25243:16;:23;;;;25236:4;:30;;;;:::i;:::-;25235:58;;;;:::i;:::-;25227:4;:67;;;;:::i;:::-;25219:76;;;24827:474;:::o;15533:29::-;;;;:::o;15760:32::-;;;;:::o;15799:30::-;;;;:::o;17921:116::-;17987:4;18011:9;:18;18021:7;18011:18;;;;;;;;;;;;;;;;18004:25;;17921:116;;;:::o;3747:148::-;3326:12;:10;:12::i;:::-;3316:22;;:6;;;;;;;;;;:22;;;3308:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3854:1:::1;3817:40;;3838:6;::::0;::::1;;;;;;;;3817:40;;;;;;;;;;;;3885:1;3868:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;3747:148::o:0;15227:53::-;;;;:::o;15836:35::-;;;;:::o;16345:45::-;;;;:::o;16093:90::-;;;;;;;;;;;;;:::o;3104:79::-;3142:7;3169:6;;;;;;;;;;;3162:13;;3104:79;:::o;19321:121::-;3326:12;:10;:12::i;:::-;3316:22;;:6;;;;;;;;;;:22;;;3308:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19428:6:::1;19409:16;;:25;;;;;;;;;;;;;;;;;;19321:121:::0;:::o;4692:87::-;4731:13;4764:7;4757:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4692:87;:::o;19055:258::-;19137:4;19154:129;19163:12;:10;:12::i;:::-;19177:7;19186:96;19225:15;19186:96;;;;;;;;;;;;;;;;;:11;:25;19198:12;:10;:12::i;:::-;19186:25;;;;;;;;;;;;;;;:34;19212:7;19186:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;19154:8;:129::i;:::-;19301:4;19294:11;;19055:258;;;;:::o;18043:165::-;18119:4;18136:42;18146:12;:10;:12::i;:::-;18160:9;18171:6;18136:9;:42::i;:::-;18196:4;18189:11;;18043:165;;;;:::o;16821:21::-;;;;;;;;;;;;;:::o;25309:109::-;25353:7;25404:6;;;;;;;;;;;25397:13;;25309:109;:::o;19573:171::-;3326:12;:10;:12::i;:::-;3316:22;;:6;;;;;;;;;;:22;;;3308:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19674:8:::1;19650:21;;:32;;;;;;;;;;;;;;;;;;19698:38;19727:8;19698:38;;;;;;:::i;:::-;;;;;;;;19573:171:::0;:::o;19752:190::-;3326:12;:10;:12::i;:::-;3316:22;;:6;;;;;;;;;;:22;;;3308:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19904:30:::1;19872:29;:62;;;;19752:190:::0;:::o;16278:60::-;;;;:::o;18214:142::-;18296:4;18320:11;:19;18332:6;18320:19;;;;;;;;;;;;;;;:28;18340:7;18320:28;;;;;;;;;;;;;;;;18313:35;;18214:142;;;;:::o;24658:21::-;;;;;;;;;;;;;:::o;15993:93::-;;;;;;;;;;;;;:::o;15718:35::-;;;;:::o;20071:110::-;3326:12;:10;:12::i;:::-;3316:22;;:6;;;;;;;;;;:22;;;3308:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20168:5:::1;20138:18;:27;20157:7;20138:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;20071:110:::0;:::o;4050:244::-;3326:12;:10;:12::i;:::-;3316:22;;:6;;;;;;;;;;:22;;;3308:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4159:1:::1;4139:22;;:8;:22;;::::0;4131:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;4249:8;4220:38;;4241:6;::::0;::::1;;;;;;;;4220:38;;;;;;;;;;;;4278:8;4269:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;4050:244:::0;:::o;15569:34::-;;;;:::o;1317:169::-;1369:4;1386:6;1399:1;1395;:5;;;;:::i;:::-;1386:14;;1424:1;1419;:6;;1411:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;1477:1;1470:8;;;1317:169;;;;:::o;2541:90::-;2586:7;2613:10;2606:17;;2541:90;:::o;27504:339::-;27614:1;27596:20;;:6;:20;;;27588:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;27695:1;27676:21;;:7;:21;;;27668:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27780:6;27749:11;:19;27761:6;27749:19;;;;;;;;;;;;;;;:28;27769:7;27749:28;;;;;;;;;;;;;;;:37;;;;27819:7;27802:33;;27811:6;27802:33;;;27828:6;27802:33;;;;;;:::i;:::-;;;;;;;;27504:339;;;:::o;20543:4083::-;20657:1;20639:20;;:6;:20;;;20631:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;20741:1;20720:23;;:9;:23;;;20712:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;20807:7;:5;:7::i;:::-;20797:17;;:6;:17;;;;:41;;;;;20831:7;:5;:7::i;:::-;20818:20;;:9;:20;;;;20797:41;20794:146;;;20882:11;;20872:6;:21;;20864:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;20794:146;21234:28;21265:24;21283:4;21265:9;:24::i;:::-;21234:55;;21312:24;21363:29;;21339:20;:53;;21312:80;;21421:19;:45;;;;;21458:8;;;;;;;;;;;21457:9;21421:45;:85;;;;;21493:13;21483:23;;:6;:23;;;;21421:85;:123;;;;;21523:21;;;;;;;;;;;21421:123;21403:988;;;21582:4;21571:8;;:15;;;;;;;;;;;;;;;;;;21614:20;21637:79;21703:12;;21637:61;21662:35;21683:13;;21662:16;;:20;;:35;;;;:::i;:::-;21637:20;:24;;:61;;;;:::i;:::-;:65;;:79;;;;:::i;:::-;21614:102;;21731:23;21757:21;21731:47;;21793:30;21810:12;21793:16;:30::i;:::-;21838:18;21859:42;21885:15;21859:21;:25;;:42;;;;:::i;:::-;21838:63;;21916:22;21941:73;21978:35;21996:16;;21978:13;;:17;;:35;;;;:::i;:::-;21941:32;21956:16;;21941:10;:14;;:32;;;;:::i;:::-;:36;;:73;;;;:::i;:::-;21916:98;;22029:19;22051:30;22066:14;22051:10;:14;;:30;;;;:::i;:::-;22029:52;;22104:16;;;;;;;;;;;22096:34;;:50;22131:14;22096:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22169:13;;;;;;;;;;;22161:31;;:44;22193:11;22161:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22222:18;22243:60;22290:12;;22243:42;22268:16;;22243:20;:24;;:42;;;;:::i;:::-;:46;;:60;;;;:::i;:::-;22222:81;;22318:26;22333:10;22318:14;:26::i;:::-;22372:5;22361:8;;:16;;;;;;;;;;;;;;;;;;21556:835;;;;;;21403:988;22473:12;22489:8;;;;;;;;;;;22488:9;22473:24;;22605:18;:26;22624:6;22605:26;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;22635:18;:29;22654:9;22635:29;;;;;;;;;;;;;;;;;;;;;;;;;22605:59;22602:105;;;22690:5;22680:15;;22602:105;22732:13;22722:23;;:6;:23;;;;:53;;;;;22762:13;22749:26;;:9;:26;;;;22722:53;22719:109;;;22811:5;22801:15;;22719:109;22841:7;22838:566;;;22873:13;22863:23;;:6;:23;;;22860:263;;22927:15;;22912:12;:30;;;;22969:12;;22957:9;:24;;;;23011:15;;22996:12;:30;;;;23051:10;;23041:7;:20;;;;23087:11;;23076:8;:22;;;;22860:263;23149:13;23136:26;;:9;:26;;;23133:260;;23203:16;;23188:12;:31;;;;23246:13;;23234:9;:25;;;;23289:16;;23274:12;:31;;;;23330:11;;23320:7;:21;;;;23367:12;;23356:8;:23;;;;23133:260;22838:566;23426:7;23423:1008;;;23459:17;23479:29;23504:3;23479:20;23490:8;;23479:6;:10;;:20;;;;:::i;:::-;:24;;:29;;;;:::i;:::-;23459:49;;23523:18;23544:36;23571:8;;23544:22;23558:7;;23544:9;:13;;:22;;;;:::i;:::-;:26;;:36;;;;:::i;:::-;23523:57;;23595:17;23615:21;23626:9;23615:6;:10;;:21;;;;:::i;:::-;23595:41;;23671:71;23693:6;23671:71;;;;;;;;;;;;;;;;;:9;:17;23681:6;23671:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;23651:9;:17;23661:6;23651:17;;;;;;;;;;;;;;;:91;;;;23780:35;23805:9;23780;:20;23790:9;23780:20;;;;;;;;;;;;;;;;:24;;:35;;;;:::i;:::-;23757:9;:20;23767:9;23757:20;;;;;;;;;;;;;;;:58;;;;23857:39;23886:9;23857;:24;23875:4;23857:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;23830:9;:24;23848:4;23830:24;;;;;;;;;;;;;;;:66;;;;23935:37;23961:10;23935:9;:21;23953:1;23935:21;;;;;;;;;;;;;;;;:25;;:37;;;;:::i;:::-;23911:9;:21;23929:1;23911:21;;;;;;;;;;;;;;;:61;;;;24009:9;23992:38;;24001:6;23992:38;;;24020:9;23992:38;;;;;;:::i;:::-;;;;;;;;24075:4;24050:42;;24059:6;24050:42;;;24082:9;24050:42;;;;;;:::i;:::-;;;;;;;;24137:1;24112:40;;24121:6;24112:40;;;24141:10;24112:40;;;;;;:::i;:::-;;;;;;;;23444:720;;;23423:1008;;;24223:71;24245:6;24223:71;;;;;;;;;;;;;;;;;:9;:17;24233:6;24223:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;24203:9;:17;24213:6;24203:17;;;;;;;;;;;;;;;:91;;;;24332:32;24357:6;24332:9;:20;24342:9;24332:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;24309:9;:20;24319:9;24309:20;;;;;;;;;;;;;;;:55;;;;24401:9;24384:35;;24393:6;24384:35;;;24412:6;24384:35;;;;;;:::i;:::-;;;;;;;;23423:1008;24456:13;24446:23;;:6;:23;;;24443:167;;24522:23;;24499:20;24509:9;24499;:20::i;:::-;:46;24496:103;;;24565:16;24587:9;24565:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24496:103;24443:167;20618:4008;;;20543:4083;;;:::o;1625:180::-;1705:4;1735:1;1730;:6;;1738:12;1722:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1762:6;1775:1;1771;:5;;;;:::i;:::-;1762:14;;1796:1;1789:8;;;1625:180;;;;;:::o;1811:238::-;1863:4;1889:1;1884;:6;1880:47;;1914:1;1907:8;;;;1880:47;1939:6;1952:1;1948;:5;;;;:::i;:::-;1939:14;;1981:1;1976;1972;:5;;;;:::i;:::-;:10;1964:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;2040:1;2033:8;;;1811:238;;;;;:::o;2055:123::-;2107:4;2131:39;2135:1;2138;2131:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;2124:46;;2055:123;;;;:::o;26907:589::-;27033:21;27071:1;27057:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27033:40;;27102:4;27084;27089:1;27084:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;27128:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27118:4;27123:1;27118:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;27163:62;27180:4;27195:15;27213:11;27163:8;:62::i;:::-;27264:15;:66;;;27345:11;27371:1;27415:4;27442;27462:15;27264:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26962:534;26907:589;:::o;1492:127::-;1544:4;1568:43;1572:1;1575;1568:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1561:50;;1492:127;;;;:::o;25429:943::-;16752:4;16733:16;;:23;;;;;;;;;;;;;;;;;;25559:12:::1;25574:13;25585:1;25574:6;:10;;:13;;;;:::i;:::-;25559:28;;25598:17;25618:16;25629:4;25618:6;:10;;:16;;;;:::i;:::-;25598:36;;25912:22;25937:21;25912:46;;26003:22;26020:4;26003:16;:22::i;:::-;26156:18;26177:41;26203:14;26177:21;:25;;:41;;;;:::i;:::-;26156:62;;26268:35;26281:9;26292:10;26268:12;:35::i;:::-;26321:43;26336:4;26342:10;26354:9;26321:43;;;;;;;;:::i;:::-;;;;;;;;25489:883;;;;16798:5:::0;16779:16;;:24;;;;;;;;;;;;;;;;;;25429:943;:::o;2184:246::-;2264:4;2360:1;2356;:5;2363:12;2348:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2387:6;2400:1;2396;:5;;;;:::i;:::-;2387:14;;2421:1;2414:8;;;2184:246;;;;;:::o;26382:517::-;26532:62;26549:4;26564:15;26582:11;26532:8;:62::i;:::-;26637:15;:31;;;26676:9;26709:4;26729:11;26755:1;26798;26841:7;:5;:7::i;:::-;26863:15;26637:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;26382:517;;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;442:99::-;494:6;528:5;522:12;512:22;;442:99;;;:::o;547:169::-;631:11;665:6;660:3;653:19;705:4;700:3;696:14;681:29;;547:169;;;;:::o;722:307::-;790:1;800:113;814:6;811:1;808:13;800:113;;;899:1;894:3;890:11;884:18;880:1;875:3;871:11;864:39;836:2;833:1;829:10;824:15;;800:113;;;931:6;928:1;925:13;922:101;;;1011:1;1002:6;997:3;993:16;986:27;922:101;771:258;722:307;;;:::o;1035:102::-;1076:6;1127:2;1123:7;1118:2;1111:5;1107:14;1103:28;1093:38;;1035:102;;;:::o;1143:364::-;1231:3;1259:39;1292:5;1259:39;:::i;:::-;1314:71;1378:6;1373:3;1314:71;:::i;:::-;1307:78;;1394:52;1439:6;1434:3;1427:4;1420:5;1416:16;1394:52;:::i;:::-;1471:29;1493:6;1471:29;:::i;:::-;1466:3;1462:39;1455:46;;1235:272;1143:364;;;;:::o;1513:313::-;1626:4;1664:2;1653:9;1649:18;1641:26;;1713:9;1707:4;1703:20;1699:1;1688:9;1684:17;1677:47;1741:78;1814:4;1805:6;1741:78;:::i;:::-;1733:86;;1513:313;;;;:::o;1913:117::-;2022:1;2019;2012:12;2159:126;2196:7;2236:42;2229:5;2225:54;2214:65;;2159:126;;;:::o;2291:96::-;2328:7;2357:24;2375:5;2357:24;:::i;:::-;2346:35;;2291:96;;;:::o;2393:122::-;2466:24;2484:5;2466:24;:::i;:::-;2459:5;2456:35;2446:63;;2505:1;2502;2495:12;2446:63;2393:122;:::o;2521:139::-;2567:5;2605:6;2592:20;2583:29;;2621:33;2648:5;2621:33;:::i;:::-;2521:139;;;;:::o;2666:122::-;2739:24;2757:5;2739:24;:::i;:::-;2732:5;2729:35;2719:63;;2778:1;2775;2768:12;2719:63;2666:122;:::o;2794:139::-;2840:5;2878:6;2865:20;2856:29;;2894:33;2921:5;2894:33;:::i;:::-;2794:139;;;;:::o;2939:474::-;3007:6;3015;3064:2;3052:9;3043:7;3039:23;3035:32;3032:119;;;3070:79;;:::i;:::-;3032:119;3190:1;3215:53;3260:7;3251:6;3240:9;3236:22;3215:53;:::i;:::-;3205:63;;3161:117;3317:2;3343:53;3388:7;3379:6;3368:9;3364:22;3343:53;:::i;:::-;3333:63;;3288:118;2939:474;;;;;:::o;3419:90::-;3453:7;3496:5;3489:13;3482:21;3471:32;;3419:90;;;:::o;3515:109::-;3596:21;3611:5;3596:21;:::i;:::-;3591:3;3584:34;3515:109;;:::o;3630:210::-;3717:4;3755:2;3744:9;3740:18;3732:26;;3768:65;3830:1;3819:9;3815:17;3806:6;3768:65;:::i;:::-;3630:210;;;;:::o;3846:60::-;3874:3;3895:5;3888:12;;3846:60;;;:::o;3912:142::-;3962:9;3995:53;4013:34;4022:24;4040:5;4022:24;:::i;:::-;4013:34;:::i;:::-;3995:53;:::i;:::-;3982:66;;3912:142;;;:::o;4060:126::-;4110:9;4143:37;4174:5;4143:37;:::i;:::-;4130:50;;4060:126;;;:::o;4192:153::-;4269:9;4302:37;4333:5;4302:37;:::i;:::-;4289:50;;4192:153;;;:::o;4351:185::-;4465:64;4523:5;4465:64;:::i;:::-;4460:3;4453:77;4351:185;;:::o;4542:276::-;4662:4;4700:2;4689:9;4685:18;4677:26;;4713:98;4808:1;4797:9;4793:17;4784:6;4713:98;:::i;:::-;4542:276;;;;:::o;4824:329::-;4883:6;4932:2;4920:9;4911:7;4907:23;4903:32;4900:119;;;4938:79;;:::i;:::-;4900:119;5058:1;5083:53;5128:7;5119:6;5108:9;5104:22;5083:53;:::i;:::-;5073:63;;5029:117;4824:329;;;;:::o;5159:118::-;5246:24;5264:5;5246:24;:::i;:::-;5241:3;5234:37;5159:118;;:::o;5283:222::-;5376:4;5414:2;5403:9;5399:18;5391:26;;5427:71;5495:1;5484:9;5480:17;5471:6;5427:71;:::i;:::-;5283:222;;;;:::o;5511:619::-;5588:6;5596;5604;5653:2;5641:9;5632:7;5628:23;5624:32;5621:119;;;5659:79;;:::i;:::-;5621:119;5779:1;5804:53;5849:7;5840:6;5829:9;5825:22;5804:53;:::i;:::-;5794:63;;5750:117;5906:2;5932:53;5977:7;5968:6;5957:9;5953:22;5932:53;:::i;:::-;5922:63;;5877:118;6034:2;6060:53;6105:7;6096:6;6085:9;6081:22;6060:53;:::i;:::-;6050:63;;6005:118;5511:619;;;;;:::o;6136:86::-;6171:7;6211:4;6204:5;6200:16;6189:27;;6136:86;;;:::o;6228:112::-;6311:22;6327:5;6311:22;:::i;:::-;6306:3;6299:35;6228:112;;:::o;6346:214::-;6435:4;6473:2;6462:9;6458:18;6450:26;;6486:67;6550:1;6539:9;6535:17;6526:6;6486:67;:::i;:::-;6346:214;;;;:::o;6566:329::-;6625:6;6674:2;6662:9;6653:7;6649:23;6645:32;6642:119;;;6680:79;;:::i;:::-;6642:119;6800:1;6825:53;6870:7;6861:6;6850:9;6846:22;6825:53;:::i;:::-;6815:63;;6771:117;6566:329;;;;:::o;6901:104::-;6946:7;6975:24;6993:5;6975:24;:::i;:::-;6964:35;;6901:104;;;:::o;7011:138::-;7092:32;7118:5;7092:32;:::i;:::-;7085:5;7082:43;7072:71;;7139:1;7136;7129:12;7072:71;7011:138;:::o;7155:155::-;7209:5;7247:6;7234:20;7225:29;;7263:41;7298:5;7263:41;:::i;:::-;7155:155;;;;:::o;7316:345::-;7383:6;7432:2;7420:9;7411:7;7407:23;7403:32;7400:119;;;7438:79;;:::i;:::-;7400:119;7558:1;7583:61;7636:7;7627:6;7616:9;7612:22;7583:61;:::i;:::-;7573:71;;7529:125;7316:345;;;;:::o;7667:142::-;7770:32;7796:5;7770:32;:::i;:::-;7765:3;7758:45;7667:142;;:::o;7815:254::-;7924:4;7962:2;7951:9;7947:18;7939:26;;7975:87;8059:1;8048:9;8044:17;8035:6;7975:87;:::i;:::-;7815:254;;;;:::o;8075:116::-;8145:21;8160:5;8145:21;:::i;:::-;8138:5;8135:32;8125:60;;8181:1;8178;8171:12;8125:60;8075:116;:::o;8197:133::-;8240:5;8278:6;8265:20;8256:29;;8294:30;8318:5;8294:30;:::i;:::-;8197:133;;;;:::o;8336:323::-;8392:6;8441:2;8429:9;8420:7;8416:23;8412:32;8409:119;;;8447:79;;:::i;:::-;8409:119;8567:1;8592:50;8634:7;8625:6;8614:9;8610:22;8592:50;:::i;:::-;8582:60;;8538:114;8336:323;;;;:::o;8665:474::-;8733:6;8741;8790:2;8778:9;8769:7;8765:23;8761:32;8758:119;;;8796:79;;:::i;:::-;8758:119;8916:1;8941:53;8986:7;8977:6;8966:9;8962:22;8941:53;:::i;:::-;8931:63;;8887:117;9043:2;9069:53;9114:7;9105:6;9094:9;9090:22;9069:53;:::i;:::-;9059:63;;9014:118;8665:474;;;;;:::o;9145:180::-;9193:77;9190:1;9183:88;9290:4;9287:1;9280:15;9314:4;9311:1;9304:15;9331:320;9375:6;9412:1;9406:4;9402:12;9392:22;;9459:1;9453:4;9449:12;9480:18;9470:81;;9536:4;9528:6;9524:17;9514:27;;9470:81;9598:2;9590:6;9587:14;9567:18;9564:38;9561:84;;9617:18;;:::i;:::-;9561:84;9382:269;9331:320;;;:::o;9657:182::-;9797:34;9793:1;9785:6;9781:14;9774:58;9657:182;:::o;9845:366::-;9987:3;10008:67;10072:2;10067:3;10008:67;:::i;:::-;10001:74;;10084:93;10173:3;10084:93;:::i;:::-;10202:2;10197:3;10193:12;10186:19;;9845:366;;;:::o;10217:419::-;10383:4;10421:2;10410:9;10406:18;10398:26;;10470:9;10464:4;10460:20;10456:1;10445:9;10441:17;10434:47;10498:131;10624:4;10498:131;:::i;:::-;10490:139;;10217:419;;;:::o;10642:180::-;10690:77;10687:1;10680:88;10787:4;10784:1;10777:15;10811:4;10808:1;10801:15;10828:94;10861:8;10909:5;10905:2;10901:14;10880:35;;10828:94;;;:::o;10928:::-;10967:7;10996:20;11010:5;10996:20;:::i;:::-;10985:31;;10928:94;;;:::o;11028:100::-;11067:7;11096:26;11116:5;11096:26;:::i;:::-;11085:37;;11028:100;;;:::o;11134:157::-;11239:45;11259:24;11277:5;11259:24;:::i;:::-;11239:45;:::i;:::-;11234:3;11227:58;11134:157;;:::o;11297:256::-;11409:3;11424:75;11495:3;11486:6;11424:75;:::i;:::-;11524:2;11519:3;11515:12;11508:19;;11544:3;11537:10;;11297:256;;;;:::o;11559:180::-;11607:77;11604:1;11597:88;11704:4;11701:1;11694:15;11728:4;11725:1;11718:15;11745:180;11793:77;11790:1;11783:88;11890:4;11887:1;11880:15;11914:4;11911:1;11904:15;11931:185;11971:1;11988:20;12006:1;11988:20;:::i;:::-;11983:25;;12022:20;12040:1;12022:20;:::i;:::-;12017:25;;12061:1;12051:35;;12066:18;;:::i;:::-;12051:35;12108:1;12105;12101:9;12096:14;;11931:185;;;;:::o;12122:108::-;12169:7;12198:26;12218:5;12198:26;:::i;:::-;12187:37;;12122:108;;;:::o;12236:189::-;12357:61;12385:32;12411:5;12385:32;:::i;:::-;12357:61;:::i;:::-;12352:3;12345:74;12236:189;;:::o;12431:288::-;12559:3;12574:91;12661:3;12652:6;12574:91;:::i;:::-;12690:2;12685:3;12681:12;12674:19;;12710:3;12703:10;;12431:288;;;;:::o;12725:305::-;12765:3;12784:20;12802:1;12784:20;:::i;:::-;12779:25;;12818:20;12836:1;12818:20;:::i;:::-;12813:25;;12972:1;12904:66;12900:74;12897:1;12894:81;12891:107;;;12978:18;;:::i;:::-;12891:107;13022:1;13019;13015:9;13008:16;;12725:305;;;;:::o;13036:79::-;13075:7;13104:5;13093:16;;13036:79;;;:::o;13121:157::-;13226:45;13246:24;13264:5;13246:24;:::i;:::-;13226:45;:::i;:::-;13221:3;13214:58;13121:157;;:::o;13284:256::-;13396:3;13411:75;13482:3;13473:6;13411:75;:::i;:::-;13511:2;13506:3;13502:12;13495:19;;13531:3;13524:10;;13284:256;;;;:::o;13546:348::-;13586:7;13609:20;13627:1;13609:20;:::i;:::-;13604:25;;13643:20;13661:1;13643:20;:::i;:::-;13638:25;;13831:1;13763:66;13759:74;13756:1;13753:81;13748:1;13741:9;13734:17;13730:105;13727:131;;;13838:18;;:::i;:::-;13727:131;13886:1;13883;13879:9;13868:20;;13546:348;;;;:::o;13900:191::-;13940:4;13960:20;13978:1;13960:20;:::i;:::-;13955:25;;13994:20;14012:1;13994:20;:::i;:::-;13989:25;;14033:1;14030;14027:8;14024:34;;;14038:18;;:::i;:::-;14024:34;14083:1;14080;14076:9;14068:17;;13900:191;;;;:::o;14097:225::-;14237:34;14233:1;14225:6;14221:14;14214:58;14306:8;14301:2;14293:6;14289:15;14282:33;14097:225;:::o;14328:366::-;14470:3;14491:67;14555:2;14550:3;14491:67;:::i;:::-;14484:74;;14567:93;14656:3;14567:93;:::i;:::-;14685:2;14680:3;14676:12;14669:19;;14328:366;;;:::o;14700:419::-;14866:4;14904:2;14893:9;14889:18;14881:26;;14953:9;14947:4;14943:20;14939:1;14928:9;14924:17;14917:47;14981:131;15107:4;14981:131;:::i;:::-;14973:139;;14700:419;;;:::o;15125:177::-;15265:29;15261:1;15253:6;15249:14;15242:53;15125:177;:::o;15308:366::-;15450:3;15471:67;15535:2;15530:3;15471:67;:::i;:::-;15464:74;;15547:93;15636:3;15547:93;:::i;:::-;15665:2;15660:3;15656:12;15649:19;;15308:366;;;:::o;15680:419::-;15846:4;15884:2;15873:9;15869:18;15861:26;;15933:9;15927:4;15923:20;15919:1;15908:9;15904:17;15897:47;15961:131;16087:4;15961:131;:::i;:::-;15953:139;;15680:419;;;:::o;16105:223::-;16245:34;16241:1;16233:6;16229:14;16222:58;16314:6;16309:2;16301:6;16297:15;16290:31;16105:223;:::o;16334:366::-;16476:3;16497:67;16561:2;16556:3;16497:67;:::i;:::-;16490:74;;16573:93;16662:3;16573:93;:::i;:::-;16691:2;16686:3;16682:12;16675:19;;16334:366;;;:::o;16706:419::-;16872:4;16910:2;16899:9;16895:18;16887:26;;16959:9;16953:4;16949:20;16945:1;16934:9;16930:17;16923:47;16987:131;17113:4;16987:131;:::i;:::-;16979:139;;16706:419;;;:::o;17131:221::-;17271:34;17267:1;17259:6;17255:14;17248:58;17340:4;17335:2;17327:6;17323:15;17316:29;17131:221;:::o;17358:366::-;17500:3;17521:67;17585:2;17580:3;17521:67;:::i;:::-;17514:74;;17597:93;17686:3;17597:93;:::i;:::-;17715:2;17710:3;17706:12;17699:19;;17358:366;;;:::o;17730:419::-;17896:4;17934:2;17923:9;17919:18;17911:26;;17983:9;17977:4;17973:20;17969:1;17958:9;17954:17;17947:47;18011:131;18137:4;18011:131;:::i;:::-;18003:139;;17730:419;;;:::o;18155:224::-;18295:34;18291:1;18283:6;18279:14;18272:58;18364:7;18359:2;18351:6;18347:15;18340:32;18155:224;:::o;18385:366::-;18527:3;18548:67;18612:2;18607:3;18548:67;:::i;:::-;18541:74;;18624:93;18713:3;18624:93;:::i;:::-;18742:2;18737:3;18733:12;18726:19;;18385:366;;;:::o;18757:419::-;18923:4;18961:2;18950:9;18946:18;18938:26;;19010:9;19004:4;19000:20;18996:1;18985:9;18981:17;18974:47;19038:131;19164:4;19038:131;:::i;:::-;19030:139;;18757:419;;;:::o;19182:222::-;19322:34;19318:1;19310:6;19306:14;19299:58;19391:5;19386:2;19378:6;19374:15;19367:30;19182:222;:::o;19410:366::-;19552:3;19573:67;19637:2;19632:3;19573:67;:::i;:::-;19566:74;;19649:93;19738:3;19649:93;:::i;:::-;19767:2;19762:3;19758:12;19751:19;;19410:366;;;:::o;19782:419::-;19948:4;19986:2;19975:9;19971:18;19963:26;;20035:9;20029:4;20025:20;20021:1;20010:9;20006:17;19999:47;20063:131;20189:4;20063:131;:::i;:::-;20055:139;;19782:419;;;:::o;20207:180::-;20347:32;20343:1;20335:6;20331:14;20324:56;20207:180;:::o;20393:366::-;20535:3;20556:67;20620:2;20615:3;20556:67;:::i;:::-;20549:74;;20632:93;20721:3;20632:93;:::i;:::-;20750:2;20745:3;20741:12;20734:19;;20393:366;;;:::o;20765:419::-;20931:4;20969:2;20958:9;20954:18;20946:26;;21018:9;21012:4;21008:20;21004:1;20993:9;20989:17;20982:47;21046:131;21172:4;21046:131;:::i;:::-;21038:139;;20765:419;;;:::o;21190:220::-;21330:34;21326:1;21318:6;21314:14;21307:58;21399:3;21394:2;21386:6;21382:15;21375:28;21190:220;:::o;21416:366::-;21558:3;21579:67;21643:2;21638:3;21579:67;:::i;:::-;21572:74;;21655:93;21744:3;21655:93;:::i;:::-;21773:2;21768:3;21764:12;21757:19;;21416:366;;;:::o;21788:419::-;21954:4;21992:2;21981:9;21977:18;21969:26;;22041:9;22035:4;22031:20;22027:1;22016:9;22012:17;22005:47;22069:131;22195:4;22069:131;:::i;:::-;22061:139;;21788:419;;;:::o;22213:180::-;22261:77;22258:1;22251:88;22358:4;22355:1;22348:15;22382:4;22379:1;22372:15;22399:143;22456:5;22487:6;22481:13;22472:22;;22503:33;22530:5;22503:33;:::i;:::-;22399:143;;;;:::o;22548:351::-;22618:6;22667:2;22655:9;22646:7;22642:23;22638:32;22635:119;;;22673:79;;:::i;:::-;22635:119;22793:1;22818:64;22874:7;22865:6;22854:9;22850:22;22818:64;:::i;:::-;22808:74;;22764:128;22548:351;;;;:::o;22905:85::-;22950:7;22979:5;22968:16;;22905:85;;;:::o;22996:158::-;23054:9;23087:61;23105:42;23114:32;23140:5;23114:32;:::i;:::-;23105:42;:::i;:::-;23087:61;:::i;:::-;23074:74;;22996:158;;;:::o;23160:147::-;23255:45;23294:5;23255:45;:::i;:::-;23250:3;23243:58;23160:147;;:::o;23313:114::-;23380:6;23414:5;23408:12;23398:22;;23313:114;;;:::o;23433:184::-;23532:11;23566:6;23561:3;23554:19;23606:4;23601:3;23597:14;23582:29;;23433:184;;;;:::o;23623:132::-;23690:4;23713:3;23705:11;;23743:4;23738:3;23734:14;23726:22;;23623:132;;;:::o;23761:108::-;23838:24;23856:5;23838:24;:::i;:::-;23833:3;23826:37;23761:108;;:::o;23875:179::-;23944:10;23965:46;24007:3;23999:6;23965:46;:::i;:::-;24043:4;24038:3;24034:14;24020:28;;23875:179;;;;:::o;24060:113::-;24130:4;24162;24157:3;24153:14;24145:22;;24060:113;;;:::o;24209:732::-;24328:3;24357:54;24405:5;24357:54;:::i;:::-;24427:86;24506:6;24501:3;24427:86;:::i;:::-;24420:93;;24537:56;24587:5;24537:56;:::i;:::-;24616:7;24647:1;24632:284;24657:6;24654:1;24651:13;24632:284;;;24733:6;24727:13;24760:63;24819:3;24804:13;24760:63;:::i;:::-;24753:70;;24846:60;24899:6;24846:60;:::i;:::-;24836:70;;24692:224;24679:1;24676;24672:9;24667:14;;24632:284;;;24636:14;24932:3;24925:10;;24333:608;;;24209:732;;;;:::o;24947:831::-;25210:4;25248:3;25237:9;25233:19;25225:27;;25262:71;25330:1;25319:9;25315:17;25306:6;25262:71;:::i;:::-;25343:80;25419:2;25408:9;25404:18;25395:6;25343:80;:::i;:::-;25470:9;25464:4;25460:20;25455:2;25444:9;25440:18;25433:48;25498:108;25601:4;25592:6;25498:108;:::i;:::-;25490:116;;25616:72;25684:2;25673:9;25669:18;25660:6;25616:72;:::i;:::-;25698:73;25766:3;25755:9;25751:19;25742:6;25698:73;:::i;:::-;24947:831;;;;;;;;:::o;25784:442::-;25933:4;25971:2;25960:9;25956:18;25948:26;;25984:71;26052:1;26041:9;26037:17;26028:6;25984:71;:::i;:::-;26065:72;26133:2;26122:9;26118:18;26109:6;26065:72;:::i;:::-;26147;26215:2;26204:9;26200:18;26191:6;26147:72;:::i;:::-;25784:442;;;;;;:::o;26232:807::-;26481:4;26519:3;26508:9;26504:19;26496:27;;26533:71;26601:1;26590:9;26586:17;26577:6;26533:71;:::i;:::-;26614:72;26682:2;26671:9;26667:18;26658:6;26614:72;:::i;:::-;26696:80;26772:2;26761:9;26757:18;26748:6;26696:80;:::i;:::-;26786;26862:2;26851:9;26847:18;26838:6;26786:80;:::i;:::-;26876:73;26944:3;26933:9;26929:19;26920:6;26876:73;:::i;:::-;26959;27027:3;27016:9;27012:19;27003:6;26959:73;:::i;:::-;26232:807;;;;;;;;;:::o;27045:143::-;27102:5;27133:6;27127:13;27118:22;;27149:33;27176:5;27149:33;:::i;:::-;27045:143;;;;:::o;27194:663::-;27282:6;27290;27298;27347:2;27335:9;27326:7;27322:23;27318:32;27315:119;;;27353:79;;:::i;:::-;27315:119;27473:1;27498:64;27554:7;27545:6;27534:9;27530:22;27498:64;:::i;:::-;27488:74;;27444:128;27611:2;27637:64;27693:7;27684:6;27673:9;27669:22;27637:64;:::i;:::-;27627:74;;27582:129;27750:2;27776:64;27832:7;27823:6;27812:9;27808:22;27776:64;:::i;:::-;27766:74;;27721:129;27194:663;;;;;:::o

Swarm Source

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