ETH Price: $3,400.22 (+4.58%)

Token

Murder of Crows (NECROW)
 

Overview

Max Total Supply

6,666,666,666,666 NECROW

Holders

26

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
Uniswap V2: NECROW
Balance
0.000000000400540839 NECROW

Value
$0.00
0x5c98064d0db6fbf115eb8eb70ce4e24293341b26
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:
NECROW

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

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

// 🌹

// SPDX-License-Identifier: MIT                                                                               
                                      
pragma solidity 0.8.13;

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

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

interface IUniswapV2Factory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the cal ler's tokens.
     *
     * Returns a boolean value indicating whether the op eration succeeded.
     *
     * IMPORTANT: Beware that changing an allowan ce with this method brings the risk
     * that someone may  use both the old and the new allowance by unfortunate
     * transaction ordering. One  possible solution to mitigate this race
     * condition is to first reduce the spe nder's allowance to 0 and set the
     * desired valu  afterwards:
     * https://github.co m/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` toke ns from `sender` to `recipient` using the
     * allowance mechanism. `am ount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    /**
     * @dev Emitted when `v alue` tokens are moved from one account (`from`) to
     * anot her (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the all owance of a `spender` for an `owner` is set by
     * a call to {approve}. `va lue` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}


contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

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

    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

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

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

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

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

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);
    }

    function _createInitialSupply(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");
        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);
    }

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

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

library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

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

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    
    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    /**
     * @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;
    }
}



library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);

    /**
     * @dev Multiplies two int256 variables and fails on overflow.
     */
    function mul(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a * b;

        // Detect overflow when multiplying MIN_INT256 with -1
        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }

    /**
     * @dev Division of two int256 variables and fails on overflow.
     */
    function div(int256 a, int256 b) internal pure returns (int256) {
        // Prevent overflow when dividing MIN_INT256 by -1
        require(b != -1 || a != MIN_INT256);

        // Solidity already throws when dividing by 0.
        return a / b;
    }

    /**
     * @dev Subtracts two int256 variables and fails on overflow.
     */
    function sub(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }

    /**
     * @dev Adds two int256 variables and fails on overflow.
     */
    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }

    /**
     * @dev Converts to absolute value, and fails on overflow.
     */
    function abs(int256 a) internal pure returns (int256) {
        require(a != MIN_INT256);
        return a < 0 ? -a : a;
    }


    function toUint256Safe(int256 a) internal pure returns (uint256) {
        require(a >= 0);
        return uint256(a);
    }
}

library SafeMathUint {
  function toInt256Safe(uint256 a) internal pure returns (int256) {
    int256 b = int256(a);
    require(b >= 0);
    return b;
  }
}


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

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

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

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

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

contract NECROW is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;

    bool private swapping;
    
    uint256 public swapTokensAtAmount;
    
    uint256 public liquidityActiveBlock = 0; // 0 means liquidity is not active yet
    uint256 public tradingActiveBlock = 0; // 0 means trading is not active
    
    bool public tradingActive = false;
    bool public swapEnabled = false;
    
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
    
    address public constant burnWallet = 0x000000000000000000000000000000000000dEaD;
    address public cawAddress = 0xf3b9569F82B18aEf890De263B84189bd33EBe452;

    uint256 public constant feeDivisor = 1000;
    
    uint256 public cawburnSellFee;
    uint256 public totalSellFees;
    
    uint256 public tokensForCawBurn;
    uint256 public ethForCawBurn;


    mapping (address => bool) private _isExcludedFromFees;

    mapping (address => bool) public automatedMarketMakerPairs;

    event ExcludeFromFees(address indexed account, bool isExcluded);
    event ExcludeMultipleAccountsFromFees(address[] accounts, bool isExcluded);

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );

    constructor() ERC20("Murder of Crows", "NECROW") {

        uint256 totalSupply = 6666666666666 * 1e18;
        
        swapTokensAtAmount = totalSupply * 1 / 10000; // 0.01% swap tokens amount

        cawburnSellFee = 100; // 10%, all being used to buy and burn CAW
        totalSellFees = cawburnSellFee;

    	IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);//0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
    	
         // Create a uniswap pair for this new token
        address _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = _uniswapV2Pair;

        _setAutomatedMarketMakerPair(_uniswapV2Pair, true);
        
        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromFees(address(_uniswapV2Router), true);

        _createInitialSupply(address(owner()), totalSupply);
    }

    receive() external payable {

  	}

    function enableTrading() external onlyOwner {
        require(!tradingActive, "Cannot re-enable trading");
        tradingActive = true;
        swapEnabled = true;
        tradingActiveBlock = block.number;
    }
    
    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner(){
        swapEnabled = enabled;
    }
    
    function updateSellFees(uint256 _cawburnSellFee) external onlyOwner {
        cawburnSellFee = _cawburnSellFee;
        totalSellFees = cawburnSellFee;
        require(totalSellFees <= 110, "Must keep fees at 11% or less");
    }

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

        emit ExcludeFromFees(account, excluded);
    }

    function excludeMultipleAccountsFromFees(address[] calldata accounts, bool excluded) external onlyOwner {
        for(uint256 i = 0; i < accounts.length; i++) {
            _isExcludedFromFees[accounts[i]] = excluded;
        }

        emit ExcludeMultipleAccountsFromFees(accounts, excluded);
    }

    function setAutomatedMarketMakerPair(address pair, bool value) external onlyOwner {
        require(pair != uniswapV2Pair, "The Uniswap pair cannot be removed from automatedMarketMakerPairs");

        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;
        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function isExcludedFromFees(address account) external view returns(bool) {
        return _isExcludedFromFees[account];
    }
    
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        
         if(amount == 0) {
            super._transfer(from, to, 0);
            return;
        }
        
        if(!tradingActive){
            require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active yet.");
        }
        

		uint256 contractTokenBalance = balanceOf(address(this));
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

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

        bool takeFee = !swapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
        
        uint256 fees = 0;
        
        // no taxes on transfers (non buys/sells)
        if(takeFee){
            // on sell take fees, purchase caw and burn it
            if (automatedMarketMakerPairs[to] && totalSellFees > 0){
                fees = amount.mul(totalSellFees).div(feeDivisor);
                tokensForCawBurn += fees;
            }
            
            // on buy
            else if(automatedMarketMakerPairs[from]) {
        	    fees = 0;
            }

            if(fees > 0){    
                super._transfer(from, address(this), fees);
            }
        	
        	amount -= fees;
        }

        super._transfer(from, to, amount);

    }
    
    function swapTokensForEth(uint256 tokenAmount) private {

        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
        
    }
    
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

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

    }

   function murderCAW(uint256 ethAmountInWei, address CAWToken) internal {
        // generate the uniswap pair path of weth -> eth
        address[] memory path = new address[](2);
        path[0] = uniswapV2Router.WETH();
        path[1] = CAWToken;

        // make the swap
        uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: ethAmountInWei}(
            0, // accept any amount of Ethereum
            path,
            burnWallet,
            block.timestamp
        );
    }


      function manualMurderCAW(uint256 ethAmountInWei, address CAWToken) external onlyOwner {
        // generate the uniswap pair path of weth -> eth
        address[] memory path = new address[](2);
        path[0] = uniswapV2Router.WETH();
        path[1] = CAWToken;

        // make the swap
        uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: ethAmountInWei}(
            0, // accept any amount of Ethereum
            path,
            burnWallet,
            block.timestamp
        );
    }

    function manualSwap() external onlyOwner {
        uint256 contractBalance = balanceOf(address(this));
        swapTokensForEth(contractBalance); 
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForCawBurn;
        
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}
        
        uint256 amountToSwapForETH = contractBalance;
        swapTokensForEth(amountToSwapForETH); 
        ethForCawBurn = address(this).balance;
        tokensForCawBurn = 0;
        // buy CAW tokens and send to dead address
        murderCAW(ethForCawBurn, cawAddress);
    }

    function withdrawStuckEth() external onlyOwner {
        (bool success,) = address(msg.sender).call{value: address(this).balance}("");
        require(success, "failed to withdraw");
    }

    function setcawAddress(address _cawAddress) external onlyOwner {
        require(_cawAddress != address(0), "address cannot be 0");
        cawAddress = _cawAddress;
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address[]","name":"accounts","type":"address[]"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeMultipleAccountsFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cawAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cawburnSellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ethForCawBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeMultipleAccountsFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeDivisor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityActiveBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"ethAmountInWei","type":"uint256"},{"internalType":"address","name":"CAWToken","type":"address"}],"name":"manualMurderCAW","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_cawAddress","type":"address"}],"name":"setcawAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForCawBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSellFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActiveBlock","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":[{"internalType":"uint256","name":"_cawburnSellFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c0604052600060075560006008556000600960006101000a81548160ff0219169083151502179055506000600960016101000a81548160ff02191690831515021790555073f3b9569f82b18aef890de263b84189bd33ebe452600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550348015620000a657600080fd5b506040518060400160405280600f81526020017f4d7572646572206f662043726f777300000000000000000000000000000000008152506040518060400160405280600681526020017f4e4543524f57000000000000000000000000000000000000000000000000000081525081600390805190602001906200012b92919062000833565b5080600490805190602001906200014492919062000833565b505050600062000159620004c360201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35060006c5425296ac1cc75b84c9068000090506127106001826200021c91906200091c565b620002289190620009ac565b6006819055506064600c81905550600c54600d819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d905060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002cc919062000a4e565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000334573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200035a919062000a4e565b6040518363ffffffff1660e01b81526004016200037992919062000a91565b6020604051808303816000875af115801562000399573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003bf919062000a4e565b90508173ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200043c816001620004cb60201b60201c565b6200045e620004506200056c60201b60201c565b60016200059660201b60201c565b620004713060016200059660201b60201c565b6200048661dead60016200059660201b60201c565b620004998260016200059660201b60201c565b620004ba620004ad6200056c60201b60201c565b84620006e360201b60201c565b50505062000cdc565b600033905090565b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620005a6620004c360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000638576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200062f9062000b1f565b60405180910390fd5b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620006d7919062000b5e565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000755576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200074c9062000bcb565b60405180910390fd5b806002600082825462000769919062000bed565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620007c0919062000bed565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000827919062000c5b565b60405180910390a35050565b828054620008419062000ca7565b90600052602060002090601f016020900481019282620008655760008555620008b1565b82601f106200088057805160ff1916838001178555620008b1565b82800160010185558215620008b1579182015b82811115620008b057825182559160200191906001019062000893565b5b509050620008c09190620008c4565b5090565b5b80821115620008df576000816000905550600101620008c5565b5090565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006200092982620008e3565b91506200093683620008e3565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615620009725762000971620008ed565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620009b982620008e3565b9150620009c683620008e3565b925082620009d957620009d86200097d565b5b828204905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000a1682620009e9565b9050919050565b62000a288162000a09565b811462000a3457600080fd5b50565b60008151905062000a488162000a1d565b92915050565b60006020828403121562000a675762000a66620009e4565b5b600062000a778482850162000a37565b91505092915050565b62000a8b8162000a09565b82525050565b600060408201905062000aa8600083018562000a80565b62000ab7602083018462000a80565b9392505050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000b0760208362000abe565b915062000b148262000acf565b602082019050919050565b6000602082019050818103600083015262000b3a8162000af8565b9050919050565b60008115159050919050565b62000b588162000b41565b82525050565b600060208201905062000b75600083018462000b4d565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000bb3601f8362000abe565b915062000bc08262000b7b565b602082019050919050565b6000602082019050818103600083015262000be68162000ba4565b9050919050565b600062000bfa82620008e3565b915062000c0783620008e3565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000c3f5762000c3e620008ed565b5b828201905092915050565b62000c5581620008e3565b82525050565b600060208201905062000c72600083018462000c4a565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000cc057607f821691505b60208210810362000cd65762000cd562000c78565b5b50919050565b60805160a0516142e162000d3a60003960008181610d54015261175b015260008181610a290152818161111c015281816112480152818161272a0152818161280b0152818161283201528181612d660152612e9201526142e16000f3fe60806040526004361061023f5760003560e01c80637fa787ba1161012e578063b62496f5116100ab578063dd62ed3e1161006f578063dd62ed3e14610860578063e2f456051461089d578063eba4c333146108c8578063ee40166e146108f1578063f2fde38b1461091c57610246565b8063b62496f51461077b578063bbc0c742146107b8578063c0246668146107e3578063c492f0461461080c578063d0a398141461083557610246565b80639a36f932116100f25780639a36f932146106825780639a7a23d6146106ad5780639ca9db73146106d6578063a457c2d714610701578063a9059cbb1461073e57610246565b80637fa787ba146105d55780638a8c523c146105ec5780638da5cb5b14610603578063924de9b71461062e57806395d89b411461065757610246565b806339509351116101bc578063656073fc11610180578063656073fc146105025780636ddd17131461052d57806370a0823114610558578063715018a614610595578063719c2891146105ac57610246565b8063395093511461041d5780633955db331461045a57806349bd5a5e146104835780634fbee193146104ae57806351bc3c85146104eb57610246565b80631694505e116102035780631694505e1461033457806318160ddd1461035f57806323b872dd1461038a578063313ce567146103c757806335f93c2e146103f257610246565b8063062287491461024b57806306fdde0314610276578063095ea7b3146102a15780630f4432e3146102de578063102184e41461030957610246565b3661024657005b600080fd5b34801561025757600080fd5b50610260610945565b60405161026d9190612fce565b60405180910390f35b34801561028257600080fd5b5061028b61094b565b6040516102989190613082565b60405180910390f35b3480156102ad57600080fd5b506102c860048036038101906102c39190613110565b6109dd565b6040516102d5919061316b565b60405180910390f35b3480156102ea57600080fd5b506102f36109fb565b6040516103009190613195565b60405180910390f35b34801561031557600080fd5b5061031e610a01565b60405161032b9190612fce565b60405180910390f35b34801561034057600080fd5b50610349610a27565b604051610356919061320f565b60405180910390f35b34801561036b57600080fd5b50610374610a4b565b6040516103819190613195565b60405180910390f35b34801561039657600080fd5b506103b160048036038101906103ac919061322a565b610a55565b6040516103be919061316b565b60405180910390f35b3480156103d357600080fd5b506103dc610b4d565b6040516103e99190613299565b60405180910390f35b3480156103fe57600080fd5b50610407610b56565b6040516104149190613195565b60405180910390f35b34801561042957600080fd5b50610444600480360381019061043f9190613110565b610b5c565b604051610451919061316b565b60405180910390f35b34801561046657600080fd5b50610481600480360381019061047c91906132b4565b610c08565b005b34801561048f57600080fd5b50610498610d52565b6040516104a59190612fce565b60405180910390f35b3480156104ba57600080fd5b506104d560048036038101906104d091906132b4565b610d76565b6040516104e2919061316b565b60405180910390f35b3480156104f757600080fd5b50610500610dcc565b005b34801561050e57600080fd5b50610517610e7c565b6040516105249190613195565b60405180910390f35b34801561053957600080fd5b50610542610e82565b60405161054f919061316b565b60405180910390f35b34801561056457600080fd5b5061057f600480360381019061057a91906132b4565b610e95565b60405161058c9190613195565b60405180910390f35b3480156105a157600080fd5b506105aa610edd565b005b3480156105b857600080fd5b506105d360048036038101906105ce91906132e1565b611035565b005b3480156105e157600080fd5b506105ea6112e0565b005b3480156105f857600080fd5b50610601611426565b005b34801561060f57600080fd5b5061061861154c565b6040516106259190612fce565b60405180910390f35b34801561063a57600080fd5b506106556004803603810190610650919061334d565b611576565b005b34801561066357600080fd5b5061066c61162a565b6040516106799190613082565b60405180910390f35b34801561068e57600080fd5b506106976116bc565b6040516106a49190613195565b60405180910390f35b3480156106b957600080fd5b506106d460048036038101906106cf919061337a565b6116c2565b005b3480156106e257600080fd5b506106eb6117f5565b6040516106f89190613195565b60405180910390f35b34801561070d57600080fd5b5061072860048036038101906107239190613110565b6117fb565b604051610735919061316b565b60405180910390f35b34801561074a57600080fd5b5061076560048036038101906107609190613110565b6118e6565b604051610772919061316b565b60405180910390f35b34801561078757600080fd5b506107a2600480360381019061079d91906132b4565b611904565b6040516107af919061316b565b60405180910390f35b3480156107c457600080fd5b506107cd611924565b6040516107da919061316b565b60405180910390f35b3480156107ef57600080fd5b5061080a6004803603810190610805919061337a565b611937565b005b34801561081857600080fd5b50610833600480360381019061082e919061341f565b611a77565b005b34801561084157600080fd5b5061084a611bee565b6040516108579190613195565b60405180910390f35b34801561086c57600080fd5b506108876004803603810190610882919061347f565b611bf4565b6040516108949190613195565b60405180910390f35b3480156108a957600080fd5b506108b2611c7b565b6040516108bf9190613195565b60405180910390f35b3480156108d457600080fd5b506108ef60048036038101906108ea91906134bf565b611c81565b005b3480156108fd57600080fd5b50610906611d71565b6040516109139190613195565b60405180910390f35b34801561092857600080fd5b50610943600480360381019061093e91906132b4565b611d77565b005b61dead81565b60606003805461095a9061351b565b80601f01602080910402602001604051908101604052809291908181526020018280546109869061351b565b80156109d35780601f106109a8576101008083540402835291602001916109d3565b820191906000526020600020905b8154815290600101906020018083116109b657829003601f168201915b5050505050905090565b60006109f16109ea611f3d565b8484611f45565b6001905092915050565b60075481565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b6000610a6284848461210e565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610aad611f3d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610b2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b24906135be565b60405180910390fd5b610b4185610b39611f3d565b858403611f45565b60019150509392505050565b60006012905090565b600f5481565b6000610bfe610b69611f3d565b848460016000610b77611f3d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610bf9919061360d565b611f45565b6001905092915050565b610c10611f3d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c96906136af565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610d0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d059061371b565b60405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610dd4611f3d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5a906136af565b60405180910390fd5b6000610e6e30610e95565b9050610e798161268b565b50565b600c5481565b600960019054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610ee5611f3d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6b906136af565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b61103d611f3d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c3906136af565b60405180910390fd5b6000600267ffffffffffffffff8111156110e9576110e861373b565b5b6040519080825280602002602001820160405280156111175781602001602082028036833780820191505090505b5090507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611185573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111a9919061377f565b816000815181106111bd576111bc6137ac565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050818160018151811061120c5761120b6137ac565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b6f9de958460008461dead426040518663ffffffff1660e01b81526004016112a994939291906138d4565b6000604051808303818588803b1580156112c257600080fd5b505af11580156112d6573d6000803e3d6000fd5b5050505050505050565b6112e8611f3d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611377576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136e906136af565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff164760405161139d90613951565b60006040518083038185875af1925050503d80600081146113da576040519150601f19603f3d011682016040523d82523d6000602084013e6113df565b606091505b5050905080611423576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141a906139b2565b60405180910390fd5b50565b61142e611f3d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b4906136af565b60405180910390fd5b600960009054906101000a900460ff161561150d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150490613a1e565b60405180910390fd5b6001600960006101000a81548160ff0219169083151502179055506001600960016101000a81548160ff02191690831515021790555043600881905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61157e611f3d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461160d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611604906136af565b60405180910390fd5b80600960016101000a81548160ff02191690831515021790555050565b6060600480546116399061351b565b80601f01602080910402602001604051908101604052809291908181526020018280546116659061351b565b80156116b25780601f10611687576101008083540402835291602001916116b2565b820191906000526020600020905b81548152906001019060200180831161169557829003601f168201915b5050505050905090565b6103e881565b6116ca611f3d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611759576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611750906136af565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036117e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117de90613ad6565b60405180910390fd5b6117f182826128c8565b5050565b600e5481565b6000806001600061180a611f3d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156118c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118be90613b68565b60405180910390fd5b6118db6118d2611f3d565b85858403611f45565b600191505092915050565b60006118fa6118f3611f3d565b848461210e565b6001905092915050565b60116020528060005260406000206000915054906101000a900460ff1681565b600960009054906101000a900460ff1681565b61193f611f3d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c5906136af565b60405180910390fd5b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611a6b919061316b565b60405180910390a25050565b611a7f611f3d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b05906136af565b60405180910390fd5b60005b83839050811015611bad578160106000868685818110611b3457611b336137ac565b5b9050602002016020810190611b4991906132b4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611ba590613b88565b915050611b11565b507f7fdaf542373fa84f4ee8d662c642f44e4c2276a217d7d29e548b6eb29a233b35838383604051611be193929190613c5b565b60405180910390a1505050565b600d5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60065481565b611c89611f3d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0f906136af565b60405180910390fd5b80600c81905550600c54600d81905550606e600d541115611d6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6590613cd9565b60405180910390fd5b50565b60085481565b611d7f611f3d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e05906136af565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611e7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7490613d6b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611fb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fab90613dfd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612023576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201a90613e8f565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516121019190613195565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361217d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217490613f21565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036121ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e390613fb3565b60405180910390fd5b600081036122055761220083836000612969565b612686565b600960009054906101000a900460ff166122fa57601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806122ba5750601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6122f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f09061401f565b60405180910390fd5b5b600061230530610e95565b90506000600654821015905080801561232a5750600960019054906101000a900460ff165b80156123435750600560149054906101000a900460ff16155b80156123995750601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156123ef5750601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156124455750601060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612489576001600560146101000a81548160ff02191690831515021790555061246d612bd2565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061253f5750601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561254957600090505b6000811561267657601160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156125ac57506000600d54115b156125fa576125da6103e86125cc600d5488612c5290919063ffffffff16565b612ccc90919063ffffffff16565b905080600e60008282546125ee919061360d565b92505081905550612652565b601160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561265157600090505b5b600081111561266757612666873083612969565b5b8085612673919061403f565b94505b612681878787612969565b505050505b505050565b6000600267ffffffffffffffff8111156126a8576126a761373b565b5b6040519080825280602002602001820160405280156126d65781602001602082028036833780820191505090505b50905030816000815181106126ee576126ed6137ac565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612793573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127b7919061377f565b816001815181106127cb576127ca6137ac565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612830307f000000000000000000000000000000000000000000000000000000000000000084611f45565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612892959493929190614073565b600060405180830381600087803b1580156128ac57600080fd5b505af11580156128c0573d6000803e3d6000fd5b505050505050565b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036129d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129cf90613f21565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612a47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3e90613fb3565b60405180910390fd5b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612acd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ac49061413f565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612b60919061360d565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612bc49190613195565b60405180910390a350505050565b6000612bdd30610e95565b90506000600e5490506000821480612bf55750600081145b15612c01575050612c50565b6000829050612c0f8161268b565b47600f819055506000600e81905550612c4c600f54600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612d16565b5050505b565b6000808303612c645760009050612cc6565b60008284612c72919061415f565b9050828482612c8191906141e8565b14612cc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb89061428b565b60405180910390fd5b809150505b92915050565b6000612d0e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612f2a565b905092915050565b6000600267ffffffffffffffff811115612d3357612d3261373b565b5b604051908082528060200260200182016040528015612d615781602001602082028036833780820191505090505b5090507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612dcf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612df3919061377f565b81600081518110612e0757612e066137ac565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508181600181518110612e5657612e556137ac565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b6f9de958460008461dead426040518663ffffffff1660e01b8152600401612ef394939291906138d4565b6000604051808303818588803b158015612f0c57600080fd5b505af1158015612f20573d6000803e3d6000fd5b5050505050505050565b60008083118290612f71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f689190613082565b60405180910390fd5b5060008385612f8091906141e8565b9050809150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612fb882612f8d565b9050919050565b612fc881612fad565b82525050565b6000602082019050612fe36000830184612fbf565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613023578082015181840152602081019050613008565b83811115613032576000848401525b50505050565b6000601f19601f8301169050919050565b600061305482612fe9565b61305e8185612ff4565b935061306e818560208601613005565b61307781613038565b840191505092915050565b6000602082019050818103600083015261309c8184613049565b905092915050565b600080fd5b600080fd5b6130b781612fad565b81146130c257600080fd5b50565b6000813590506130d4816130ae565b92915050565b6000819050919050565b6130ed816130da565b81146130f857600080fd5b50565b60008135905061310a816130e4565b92915050565b60008060408385031215613127576131266130a4565b5b6000613135858286016130c5565b9250506020613146858286016130fb565b9150509250929050565b60008115159050919050565b61316581613150565b82525050565b6000602082019050613180600083018461315c565b92915050565b61318f816130da565b82525050565b60006020820190506131aa6000830184613186565b92915050565b6000819050919050565b60006131d56131d06131cb84612f8d565b6131b0565b612f8d565b9050919050565b60006131e7826131ba565b9050919050565b60006131f9826131dc565b9050919050565b613209816131ee565b82525050565b60006020820190506132246000830184613200565b92915050565b600080600060608486031215613243576132426130a4565b5b6000613251868287016130c5565b9350506020613262868287016130c5565b9250506040613273868287016130fb565b9150509250925092565b600060ff82169050919050565b6132938161327d565b82525050565b60006020820190506132ae600083018461328a565b92915050565b6000602082840312156132ca576132c96130a4565b5b60006132d8848285016130c5565b91505092915050565b600080604083850312156132f8576132f76130a4565b5b6000613306858286016130fb565b9250506020613317858286016130c5565b9150509250929050565b61332a81613150565b811461333557600080fd5b50565b60008135905061334781613321565b92915050565b600060208284031215613363576133626130a4565b5b600061337184828501613338565b91505092915050565b60008060408385031215613391576133906130a4565b5b600061339f858286016130c5565b92505060206133b085828601613338565b9150509250929050565b600080fd5b600080fd5b600080fd5b60008083601f8401126133df576133de6133ba565b5b8235905067ffffffffffffffff8111156133fc576133fb6133bf565b5b602083019150836020820283011115613418576134176133c4565b5b9250929050565b600080600060408486031215613438576134376130a4565b5b600084013567ffffffffffffffff811115613456576134556130a9565b5b613462868287016133c9565b9350935050602061347586828701613338565b9150509250925092565b60008060408385031215613496576134956130a4565b5b60006134a4858286016130c5565b92505060206134b5858286016130c5565b9150509250929050565b6000602082840312156134d5576134d46130a4565b5b60006134e3848285016130fb565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061353357607f821691505b602082108103613546576135456134ec565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006135a8602883612ff4565b91506135b38261354c565b604082019050919050565b600060208201905081810360008301526135d78161359b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613618826130da565b9150613623836130da565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613658576136576135de565b5b828201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613699602083612ff4565b91506136a482613663565b602082019050919050565b600060208201905081810360008301526136c88161368c565b9050919050565b7f616464726573732063616e6e6f74206265203000000000000000000000000000600082015250565b6000613705601383612ff4565b9150613710826136cf565b602082019050919050565b60006020820190508181036000830152613734816136f8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050613779816130ae565b92915050565b600060208284031215613795576137946130a4565b5b60006137a38482850161376a565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b60006138006137fb6137f6846137db565b6131b0565b6130da565b9050919050565b613810816137e5565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61384b81612fad565b82525050565b600061385d8383613842565b60208301905092915050565b6000602082019050919050565b600061388182613816565b61388b8185613821565b935061389683613832565b8060005b838110156138c75781516138ae8882613851565b97506138b983613869565b92505060018101905061389a565b5085935050505092915050565b60006080820190506138e96000830187613807565b81810360208301526138fb8186613876565b905061390a6040830185612fbf565b6139176060830184613186565b95945050505050565b600081905092915050565b50565b600061393b600083613920565b91506139468261392b565b600082019050919050565b600061395c8261392e565b9150819050919050565b7f6661696c656420746f2077697468647261770000000000000000000000000000600082015250565b600061399c601283612ff4565b91506139a782613966565b602082019050919050565b600060208201905081810360008301526139cb8161398f565b9050919050565b7f43616e6e6f742072652d656e61626c652074726164696e670000000000000000600082015250565b6000613a08601883612ff4565b9150613a13826139d2565b602082019050919050565b60006020820190508181036000830152613a37816139fb565b9050919050565b7f54686520556e697377617020706169722063616e6e6f742062652072656d6f7660008201527f65642066726f6d206175746f6d617465644d61726b65744d616b65725061697260208201527f7300000000000000000000000000000000000000000000000000000000000000604082015250565b6000613ac0604183612ff4565b9150613acb82613a3e565b606082019050919050565b60006020820190508181036000830152613aef81613ab3565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613b52602583612ff4565b9150613b5d82613af6565b604082019050919050565b60006020820190508181036000830152613b8181613b45565b9050919050565b6000613b93826130da565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613bc557613bc46135de565b5b600182019050919050565b6000819050919050565b6000613be960208401846130c5565b905092915050565b6000602082019050919050565b6000613c0a8385613821565b9350613c1582613bd0565b8060005b85811015613c4e57613c2b8284613bda565b613c358882613851565b9750613c4083613bf1565b925050600181019050613c19565b5085925050509392505050565b60006040820190508181036000830152613c76818587613bfe565b9050613c85602083018461315c565b949350505050565b7f4d757374206b656570206665657320617420313125206f72206c657373000000600082015250565b6000613cc3601d83612ff4565b9150613cce82613c8d565b602082019050919050565b60006020820190508181036000830152613cf281613cb6565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613d55602683612ff4565b9150613d6082613cf9565b604082019050919050565b60006020820190508181036000830152613d8481613d48565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613de7602483612ff4565b9150613df282613d8b565b604082019050919050565b60006020820190508181036000830152613e1681613dda565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613e79602283612ff4565b9150613e8482613e1d565b604082019050919050565b60006020820190508181036000830152613ea881613e6c565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613f0b602583612ff4565b9150613f1682613eaf565b604082019050919050565b60006020820190508181036000830152613f3a81613efe565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613f9d602383612ff4565b9150613fa882613f41565b604082019050919050565b60006020820190508181036000830152613fcc81613f90565b9050919050565b7f54726164696e67206973206e6f7420616374697665207965742e000000000000600082015250565b6000614009601a83612ff4565b915061401482613fd3565b602082019050919050565b6000602082019050818103600083015261403881613ffc565b9050919050565b600061404a826130da565b9150614055836130da565b925082821015614068576140676135de565b5b828203905092915050565b600060a0820190506140886000830188613186565b6140956020830187613807565b81810360408301526140a78186613876565b90506140b66060830185612fbf565b6140c36080830184613186565b9695505050505050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614129602683612ff4565b9150614134826140cd565b604082019050919050565b600060208201905081810360008301526141588161411c565b9050919050565b600061416a826130da565b9150614175836130da565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156141ae576141ad6135de565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006141f3826130da565b91506141fe836130da565b92508261420e5761420d6141b9565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614275602183612ff4565b915061428082614219565b604082019050919050565b600060208201905081810360008301526142a481614268565b905091905056fea26469706673582212203c27f2ee7807d109d9a65454d475e6eebeb1f59f6a514c5690819a88375c2ce464736f6c634300080d0033

Deployed Bytecode

0x60806040526004361061023f5760003560e01c80637fa787ba1161012e578063b62496f5116100ab578063dd62ed3e1161006f578063dd62ed3e14610860578063e2f456051461089d578063eba4c333146108c8578063ee40166e146108f1578063f2fde38b1461091c57610246565b8063b62496f51461077b578063bbc0c742146107b8578063c0246668146107e3578063c492f0461461080c578063d0a398141461083557610246565b80639a36f932116100f25780639a36f932146106825780639a7a23d6146106ad5780639ca9db73146106d6578063a457c2d714610701578063a9059cbb1461073e57610246565b80637fa787ba146105d55780638a8c523c146105ec5780638da5cb5b14610603578063924de9b71461062e57806395d89b411461065757610246565b806339509351116101bc578063656073fc11610180578063656073fc146105025780636ddd17131461052d57806370a0823114610558578063715018a614610595578063719c2891146105ac57610246565b8063395093511461041d5780633955db331461045a57806349bd5a5e146104835780634fbee193146104ae57806351bc3c85146104eb57610246565b80631694505e116102035780631694505e1461033457806318160ddd1461035f57806323b872dd1461038a578063313ce567146103c757806335f93c2e146103f257610246565b8063062287491461024b57806306fdde0314610276578063095ea7b3146102a15780630f4432e3146102de578063102184e41461030957610246565b3661024657005b600080fd5b34801561025757600080fd5b50610260610945565b60405161026d9190612fce565b60405180910390f35b34801561028257600080fd5b5061028b61094b565b6040516102989190613082565b60405180910390f35b3480156102ad57600080fd5b506102c860048036038101906102c39190613110565b6109dd565b6040516102d5919061316b565b60405180910390f35b3480156102ea57600080fd5b506102f36109fb565b6040516103009190613195565b60405180910390f35b34801561031557600080fd5b5061031e610a01565b60405161032b9190612fce565b60405180910390f35b34801561034057600080fd5b50610349610a27565b604051610356919061320f565b60405180910390f35b34801561036b57600080fd5b50610374610a4b565b6040516103819190613195565b60405180910390f35b34801561039657600080fd5b506103b160048036038101906103ac919061322a565b610a55565b6040516103be919061316b565b60405180910390f35b3480156103d357600080fd5b506103dc610b4d565b6040516103e99190613299565b60405180910390f35b3480156103fe57600080fd5b50610407610b56565b6040516104149190613195565b60405180910390f35b34801561042957600080fd5b50610444600480360381019061043f9190613110565b610b5c565b604051610451919061316b565b60405180910390f35b34801561046657600080fd5b50610481600480360381019061047c91906132b4565b610c08565b005b34801561048f57600080fd5b50610498610d52565b6040516104a59190612fce565b60405180910390f35b3480156104ba57600080fd5b506104d560048036038101906104d091906132b4565b610d76565b6040516104e2919061316b565b60405180910390f35b3480156104f757600080fd5b50610500610dcc565b005b34801561050e57600080fd5b50610517610e7c565b6040516105249190613195565b60405180910390f35b34801561053957600080fd5b50610542610e82565b60405161054f919061316b565b60405180910390f35b34801561056457600080fd5b5061057f600480360381019061057a91906132b4565b610e95565b60405161058c9190613195565b60405180910390f35b3480156105a157600080fd5b506105aa610edd565b005b3480156105b857600080fd5b506105d360048036038101906105ce91906132e1565b611035565b005b3480156105e157600080fd5b506105ea6112e0565b005b3480156105f857600080fd5b50610601611426565b005b34801561060f57600080fd5b5061061861154c565b6040516106259190612fce565b60405180910390f35b34801561063a57600080fd5b506106556004803603810190610650919061334d565b611576565b005b34801561066357600080fd5b5061066c61162a565b6040516106799190613082565b60405180910390f35b34801561068e57600080fd5b506106976116bc565b6040516106a49190613195565b60405180910390f35b3480156106b957600080fd5b506106d460048036038101906106cf919061337a565b6116c2565b005b3480156106e257600080fd5b506106eb6117f5565b6040516106f89190613195565b60405180910390f35b34801561070d57600080fd5b5061072860048036038101906107239190613110565b6117fb565b604051610735919061316b565b60405180910390f35b34801561074a57600080fd5b5061076560048036038101906107609190613110565b6118e6565b604051610772919061316b565b60405180910390f35b34801561078757600080fd5b506107a2600480360381019061079d91906132b4565b611904565b6040516107af919061316b565b60405180910390f35b3480156107c457600080fd5b506107cd611924565b6040516107da919061316b565b60405180910390f35b3480156107ef57600080fd5b5061080a6004803603810190610805919061337a565b611937565b005b34801561081857600080fd5b50610833600480360381019061082e919061341f565b611a77565b005b34801561084157600080fd5b5061084a611bee565b6040516108579190613195565b60405180910390f35b34801561086c57600080fd5b506108876004803603810190610882919061347f565b611bf4565b6040516108949190613195565b60405180910390f35b3480156108a957600080fd5b506108b2611c7b565b6040516108bf9190613195565b60405180910390f35b3480156108d457600080fd5b506108ef60048036038101906108ea91906134bf565b611c81565b005b3480156108fd57600080fd5b50610906611d71565b6040516109139190613195565b60405180910390f35b34801561092857600080fd5b50610943600480360381019061093e91906132b4565b611d77565b005b61dead81565b60606003805461095a9061351b565b80601f01602080910402602001604051908101604052809291908181526020018280546109869061351b565b80156109d35780601f106109a8576101008083540402835291602001916109d3565b820191906000526020600020905b8154815290600101906020018083116109b657829003601f168201915b5050505050905090565b60006109f16109ea611f3d565b8484611f45565b6001905092915050565b60075481565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b6000610a6284848461210e565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610aad611f3d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610b2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b24906135be565b60405180910390fd5b610b4185610b39611f3d565b858403611f45565b60019150509392505050565b60006012905090565b600f5481565b6000610bfe610b69611f3d565b848460016000610b77611f3d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610bf9919061360d565b611f45565b6001905092915050565b610c10611f3d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c96906136af565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610d0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d059061371b565b60405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b7f0000000000000000000000005c98064d0db6fbf115eb8eb70ce4e24293341b2681565b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610dd4611f3d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5a906136af565b60405180910390fd5b6000610e6e30610e95565b9050610e798161268b565b50565b600c5481565b600960019054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610ee5611f3d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6b906136af565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b61103d611f3d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c3906136af565b60405180910390fd5b6000600267ffffffffffffffff8111156110e9576110e861373b565b5b6040519080825280602002602001820160405280156111175781602001602082028036833780820191505090505b5090507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611185573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111a9919061377f565b816000815181106111bd576111bc6137ac565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050818160018151811061120c5761120b6137ac565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663b6f9de958460008461dead426040518663ffffffff1660e01b81526004016112a994939291906138d4565b6000604051808303818588803b1580156112c257600080fd5b505af11580156112d6573d6000803e3d6000fd5b5050505050505050565b6112e8611f3d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611377576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136e906136af565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff164760405161139d90613951565b60006040518083038185875af1925050503d80600081146113da576040519150601f19603f3d011682016040523d82523d6000602084013e6113df565b606091505b5050905080611423576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141a906139b2565b60405180910390fd5b50565b61142e611f3d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b4906136af565b60405180910390fd5b600960009054906101000a900460ff161561150d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150490613a1e565b60405180910390fd5b6001600960006101000a81548160ff0219169083151502179055506001600960016101000a81548160ff02191690831515021790555043600881905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61157e611f3d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461160d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611604906136af565b60405180910390fd5b80600960016101000a81548160ff02191690831515021790555050565b6060600480546116399061351b565b80601f01602080910402602001604051908101604052809291908181526020018280546116659061351b565b80156116b25780601f10611687576101008083540402835291602001916116b2565b820191906000526020600020905b81548152906001019060200180831161169557829003601f168201915b5050505050905090565b6103e881565b6116ca611f3d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611759576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611750906136af565b60405180910390fd5b7f0000000000000000000000005c98064d0db6fbf115eb8eb70ce4e24293341b2673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036117e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117de90613ad6565b60405180910390fd5b6117f182826128c8565b5050565b600e5481565b6000806001600061180a611f3d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156118c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118be90613b68565b60405180910390fd5b6118db6118d2611f3d565b85858403611f45565b600191505092915050565b60006118fa6118f3611f3d565b848461210e565b6001905092915050565b60116020528060005260406000206000915054906101000a900460ff1681565b600960009054906101000a900460ff1681565b61193f611f3d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c5906136af565b60405180910390fd5b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611a6b919061316b565b60405180910390a25050565b611a7f611f3d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b05906136af565b60405180910390fd5b60005b83839050811015611bad578160106000868685818110611b3457611b336137ac565b5b9050602002016020810190611b4991906132b4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611ba590613b88565b915050611b11565b507f7fdaf542373fa84f4ee8d662c642f44e4c2276a217d7d29e548b6eb29a233b35838383604051611be193929190613c5b565b60405180910390a1505050565b600d5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60065481565b611c89611f3d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0f906136af565b60405180910390fd5b80600c81905550600c54600d81905550606e600d541115611d6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6590613cd9565b60405180910390fd5b50565b60085481565b611d7f611f3d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e05906136af565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611e7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7490613d6b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611fb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fab90613dfd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612023576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201a90613e8f565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516121019190613195565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361217d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217490613f21565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036121ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e390613fb3565b60405180910390fd5b600081036122055761220083836000612969565b612686565b600960009054906101000a900460ff166122fa57601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806122ba5750601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6122f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f09061401f565b60405180910390fd5b5b600061230530610e95565b90506000600654821015905080801561232a5750600960019054906101000a900460ff165b80156123435750600560149054906101000a900460ff16155b80156123995750601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156123ef5750601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156124455750601060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612489576001600560146101000a81548160ff02191690831515021790555061246d612bd2565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061253f5750601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561254957600090505b6000811561267657601160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156125ac57506000600d54115b156125fa576125da6103e86125cc600d5488612c5290919063ffffffff16565b612ccc90919063ffffffff16565b905080600e60008282546125ee919061360d565b92505081905550612652565b601160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561265157600090505b5b600081111561266757612666873083612969565b5b8085612673919061403f565b94505b612681878787612969565b505050505b505050565b6000600267ffffffffffffffff8111156126a8576126a761373b565b5b6040519080825280602002602001820160405280156126d65781602001602082028036833780820191505090505b50905030816000815181106126ee576126ed6137ac565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612793573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127b7919061377f565b816001815181106127cb576127ca6137ac565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612830307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611f45565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612892959493929190614073565b600060405180830381600087803b1580156128ac57600080fd5b505af11580156128c0573d6000803e3d6000fd5b505050505050565b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036129d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129cf90613f21565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612a47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3e90613fb3565b60405180910390fd5b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612acd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ac49061413f565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612b60919061360d565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612bc49190613195565b60405180910390a350505050565b6000612bdd30610e95565b90506000600e5490506000821480612bf55750600081145b15612c01575050612c50565b6000829050612c0f8161268b565b47600f819055506000600e81905550612c4c600f54600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612d16565b5050505b565b6000808303612c645760009050612cc6565b60008284612c72919061415f565b9050828482612c8191906141e8565b14612cc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb89061428b565b60405180910390fd5b809150505b92915050565b6000612d0e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612f2a565b905092915050565b6000600267ffffffffffffffff811115612d3357612d3261373b565b5b604051908082528060200260200182016040528015612d615781602001602082028036833780820191505090505b5090507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612dcf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612df3919061377f565b81600081518110612e0757612e066137ac565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508181600181518110612e5657612e556137ac565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663b6f9de958460008461dead426040518663ffffffff1660e01b8152600401612ef394939291906138d4565b6000604051808303818588803b158015612f0c57600080fd5b505af1158015612f20573d6000803e3d6000fd5b5050505050505050565b60008083118290612f71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f689190613082565b60405180910390fd5b5060008385612f8091906141e8565b9050809150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612fb882612f8d565b9050919050565b612fc881612fad565b82525050565b6000602082019050612fe36000830184612fbf565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613023578082015181840152602081019050613008565b83811115613032576000848401525b50505050565b6000601f19601f8301169050919050565b600061305482612fe9565b61305e8185612ff4565b935061306e818560208601613005565b61307781613038565b840191505092915050565b6000602082019050818103600083015261309c8184613049565b905092915050565b600080fd5b600080fd5b6130b781612fad565b81146130c257600080fd5b50565b6000813590506130d4816130ae565b92915050565b6000819050919050565b6130ed816130da565b81146130f857600080fd5b50565b60008135905061310a816130e4565b92915050565b60008060408385031215613127576131266130a4565b5b6000613135858286016130c5565b9250506020613146858286016130fb565b9150509250929050565b60008115159050919050565b61316581613150565b82525050565b6000602082019050613180600083018461315c565b92915050565b61318f816130da565b82525050565b60006020820190506131aa6000830184613186565b92915050565b6000819050919050565b60006131d56131d06131cb84612f8d565b6131b0565b612f8d565b9050919050565b60006131e7826131ba565b9050919050565b60006131f9826131dc565b9050919050565b613209816131ee565b82525050565b60006020820190506132246000830184613200565b92915050565b600080600060608486031215613243576132426130a4565b5b6000613251868287016130c5565b9350506020613262868287016130c5565b9250506040613273868287016130fb565b9150509250925092565b600060ff82169050919050565b6132938161327d565b82525050565b60006020820190506132ae600083018461328a565b92915050565b6000602082840312156132ca576132c96130a4565b5b60006132d8848285016130c5565b91505092915050565b600080604083850312156132f8576132f76130a4565b5b6000613306858286016130fb565b9250506020613317858286016130c5565b9150509250929050565b61332a81613150565b811461333557600080fd5b50565b60008135905061334781613321565b92915050565b600060208284031215613363576133626130a4565b5b600061337184828501613338565b91505092915050565b60008060408385031215613391576133906130a4565b5b600061339f858286016130c5565b92505060206133b085828601613338565b9150509250929050565b600080fd5b600080fd5b600080fd5b60008083601f8401126133df576133de6133ba565b5b8235905067ffffffffffffffff8111156133fc576133fb6133bf565b5b602083019150836020820283011115613418576134176133c4565b5b9250929050565b600080600060408486031215613438576134376130a4565b5b600084013567ffffffffffffffff811115613456576134556130a9565b5b613462868287016133c9565b9350935050602061347586828701613338565b9150509250925092565b60008060408385031215613496576134956130a4565b5b60006134a4858286016130c5565b92505060206134b5858286016130c5565b9150509250929050565b6000602082840312156134d5576134d46130a4565b5b60006134e3848285016130fb565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061353357607f821691505b602082108103613546576135456134ec565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006135a8602883612ff4565b91506135b38261354c565b604082019050919050565b600060208201905081810360008301526135d78161359b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613618826130da565b9150613623836130da565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613658576136576135de565b5b828201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613699602083612ff4565b91506136a482613663565b602082019050919050565b600060208201905081810360008301526136c88161368c565b9050919050565b7f616464726573732063616e6e6f74206265203000000000000000000000000000600082015250565b6000613705601383612ff4565b9150613710826136cf565b602082019050919050565b60006020820190508181036000830152613734816136f8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050613779816130ae565b92915050565b600060208284031215613795576137946130a4565b5b60006137a38482850161376a565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b60006138006137fb6137f6846137db565b6131b0565b6130da565b9050919050565b613810816137e5565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61384b81612fad565b82525050565b600061385d8383613842565b60208301905092915050565b6000602082019050919050565b600061388182613816565b61388b8185613821565b935061389683613832565b8060005b838110156138c75781516138ae8882613851565b97506138b983613869565b92505060018101905061389a565b5085935050505092915050565b60006080820190506138e96000830187613807565b81810360208301526138fb8186613876565b905061390a6040830185612fbf565b6139176060830184613186565b95945050505050565b600081905092915050565b50565b600061393b600083613920565b91506139468261392b565b600082019050919050565b600061395c8261392e565b9150819050919050565b7f6661696c656420746f2077697468647261770000000000000000000000000000600082015250565b600061399c601283612ff4565b91506139a782613966565b602082019050919050565b600060208201905081810360008301526139cb8161398f565b9050919050565b7f43616e6e6f742072652d656e61626c652074726164696e670000000000000000600082015250565b6000613a08601883612ff4565b9150613a13826139d2565b602082019050919050565b60006020820190508181036000830152613a37816139fb565b9050919050565b7f54686520556e697377617020706169722063616e6e6f742062652072656d6f7660008201527f65642066726f6d206175746f6d617465644d61726b65744d616b65725061697260208201527f7300000000000000000000000000000000000000000000000000000000000000604082015250565b6000613ac0604183612ff4565b9150613acb82613a3e565b606082019050919050565b60006020820190508181036000830152613aef81613ab3565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613b52602583612ff4565b9150613b5d82613af6565b604082019050919050565b60006020820190508181036000830152613b8181613b45565b9050919050565b6000613b93826130da565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613bc557613bc46135de565b5b600182019050919050565b6000819050919050565b6000613be960208401846130c5565b905092915050565b6000602082019050919050565b6000613c0a8385613821565b9350613c1582613bd0565b8060005b85811015613c4e57613c2b8284613bda565b613c358882613851565b9750613c4083613bf1565b925050600181019050613c19565b5085925050509392505050565b60006040820190508181036000830152613c76818587613bfe565b9050613c85602083018461315c565b949350505050565b7f4d757374206b656570206665657320617420313125206f72206c657373000000600082015250565b6000613cc3601d83612ff4565b9150613cce82613c8d565b602082019050919050565b60006020820190508181036000830152613cf281613cb6565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613d55602683612ff4565b9150613d6082613cf9565b604082019050919050565b60006020820190508181036000830152613d8481613d48565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613de7602483612ff4565b9150613df282613d8b565b604082019050919050565b60006020820190508181036000830152613e1681613dda565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613e79602283612ff4565b9150613e8482613e1d565b604082019050919050565b60006020820190508181036000830152613ea881613e6c565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613f0b602583612ff4565b9150613f1682613eaf565b604082019050919050565b60006020820190508181036000830152613f3a81613efe565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613f9d602383612ff4565b9150613fa882613f41565b604082019050919050565b60006020820190508181036000830152613fcc81613f90565b9050919050565b7f54726164696e67206973206e6f7420616374697665207965742e000000000000600082015250565b6000614009601a83612ff4565b915061401482613fd3565b602082019050919050565b6000602082019050818103600083015261403881613ffc565b9050919050565b600061404a826130da565b9150614055836130da565b925082821015614068576140676135de565b5b828203905092915050565b600060a0820190506140886000830188613186565b6140956020830187613807565b81810360408301526140a78186613876565b90506140b66060830185612fbf565b6140c36080830184613186565b9695505050505050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614129602683612ff4565b9150614134826140cd565b604082019050919050565b600060208201905081810360008301526141588161411c565b9050919050565b600061416a826130da565b9150614175836130da565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156141ae576141ad6135de565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006141f3826130da565b91506141fe836130da565b92508261420e5761420d6141b9565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614275602183612ff4565b915061428082614219565b604082019050919050565b600060208201905081810360008301526142a481614268565b905091905056fea26469706673582212203c27f2ee7807d109d9a65454d475e6eebeb1f59f6a514c5690819a88375c2ce464736f6c634300080d0033

Deployed Bytecode Sourcemap

20996:9787:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21638:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4215:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5129:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21257:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21724:70;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21072:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4536:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5306:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4435:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21972:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5806:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30604:174;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21130:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25376:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29711:155;;;;;;;;;;;;;:::i;:::-;;21857:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21465:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4652:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13617:148;;;;;;;;;;;;;:::i;:::-;;29166:537;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30405:191;;;;;;;;;;;;;:::i;:::-;;23742:218;;;;;;;;;;;;;:::i;:::-;;12975:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24060:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4323:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21803:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24920:254;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21934:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6029:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4787:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22073:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21425:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24414:184;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24606:306;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21893:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4970:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21211:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24173:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21342:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13920:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21638:79;21675:42;21638:79;:::o;4215:100::-;4269:13;4302:5;4295:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4215:100;:::o;5129:169::-;5212:4;5229:39;5238:12;:10;:12::i;:::-;5252:7;5261:6;5229:8;:39::i;:::-;5286:4;5279:11;;5129:169;;;;:::o;21257:39::-;;;;:::o;21724:70::-;;;;;;;;;;;;;:::o;21072:51::-;;;:::o;4536:108::-;4597:7;4624:12;;4617:19;;4536:108;:::o;5306:492::-;5446:4;5463:36;5473:6;5481:9;5492:6;5463:9;:36::i;:::-;5512:24;5539:11;:19;5551:6;5539:19;;;;;;;;;;;;;;;:33;5559:12;:10;:12::i;:::-;5539:33;;;;;;;;;;;;;;;;5512:60;;5611:6;5591:16;:26;;5583:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;5698:57;5707:6;5715:12;:10;:12::i;:::-;5748:6;5729:16;:25;5698:8;:57::i;:::-;5786:4;5779:11;;;5306:492;;;;;:::o;4435:93::-;4493:5;4518:2;4511:9;;4435:93;:::o;21972:28::-;;;;:::o;5806:215::-;5894:4;5911:80;5920:12;:10;:12::i;:::-;5934:7;5980:10;5943:11;:25;5955:12;:10;:12::i;:::-;5943:25;;;;;;;;;;;;;;;:34;5969:7;5943:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;5911:8;:80::i;:::-;6009:4;6002:11;;5806:215;;;;:::o;30604:174::-;13197:12;:10;:12::i;:::-;13187:22;;:6;;;;;;;;;;;:22;;;13179:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30709:1:::1;30686:25;;:11;:25;;::::0;30678:57:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;30759:11;30746:10;;:24;;;;;;;;;;;;;;;;;;30604:174:::0;:::o;21130:38::-;;;:::o;25376:127::-;25443:4;25467:19;:28;25487:7;25467:28;;;;;;;;;;;;;;;;;;;;;;;;;25460:35;;25376:127;;;:::o;29711:155::-;13197:12;:10;:12::i;:::-;13187:22;;:6;;;;;;;;;;;:22;;;13179:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29763:23:::1;29789:24;29807:4;29789:9;:24::i;:::-;29763:50;;29824:33;29841:15;29824:16;:33::i;:::-;29752:114;29711:155::o:0;21857:29::-;;;;:::o;21465:31::-;;;;;;;;;;;;;:::o;4652:127::-;4726:7;4753:9;:18;4763:7;4753:18;;;;;;;;;;;;;;;;4746:25;;4652:127;;;:::o;13617:148::-;13197:12;:10;:12::i;:::-;13187:22;;:6;;;;;;;;;;;:22;;;13179:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;13724:1:::1;13687:40;;13708:6;;;;;;;;;;;13687:40;;;;;;;;;;;;13755:1;13738:6;;:19;;;;;;;;;;;;;;;;;;13617:148::o:0;29166:537::-;13197:12;:10;:12::i;:::-;13187:22;;:6;;;;;;;;;;;:22;;;13179:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29321:21:::1;29359:1;29345:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29321:40;;29382:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29372:4;29377:1;29372:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;::::0;::::1;29425:8;29415:4;29420:1;29415:7;;;;;;;;:::i;:::-;;;;;;;:18;;;;;;;;;::::0;::::1;29472:15;:66;;;29546:14;29576:1;29625:4;21675:42;29669:15;29472:223;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;29252:451;29166:537:::0;;:::o;30405:191::-;13197:12;:10;:12::i;:::-;13187:22;;:6;;;;;;;;;;;:22;;;13179:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30464:12:::1;30489:10;30481:24;;30513:21;30481:58;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30463:76;;;30558:7;30550:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;30452:144;30405:191::o:0;23742:218::-;13197:12;:10;:12::i;:::-;13187:22;;:6;;;;;;;;;;;:22;;;13179:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23806:13:::1;;;;;;;;;;;23805:14;23797:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;23875:4;23859:13;;:20;;;;;;;;;;;;;;;;;;23904:4;23890:11;;:18;;;;;;;;;;;;;;;;;;23940:12;23919:18;:33;;;;23742:218::o:0;12975:79::-;13013:7;13040:6;;;;;;;;;;;13033:13;;12975:79;:::o;24060:101::-;13197:12;:10;:12::i;:::-;13187:22;;:6;;;;;;;;;;;:22;;;13179:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24146:7:::1;24132:11;;:21;;;;;;;;;;;;;;;;;;24060:101:::0;:::o;4323:104::-;4379:13;4412:7;4405:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4323:104;:::o;21803:41::-;21840:4;21803:41;:::o;24920:254::-;13197:12;:10;:12::i;:::-;13187:22;;:6;;;;;;;;;;;:22;;;13179:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25029:13:::1;25021:21;;:4;:21;;::::0;25013:99:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;25125:41;25154:4;25160:5;25125:28;:41::i;:::-;24920:254:::0;;:::o;21934:31::-;;;;:::o;6029:413::-;6122:4;6139:24;6166:11;:25;6178:12;:10;:12::i;:::-;6166:25;;;;;;;;;;;;;;;:34;6192:7;6166:34;;;;;;;;;;;;;;;;6139:61;;6239:15;6219:16;:35;;6211:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;6332:67;6341:12;:10;:12::i;:::-;6355:7;6383:15;6364:16;:34;6332:8;:67::i;:::-;6430:4;6423:11;;;6029:413;;;;:::o;4787:175::-;4873:4;4890:42;4900:12;:10;:12::i;:::-;4914:9;4925:6;4890:9;:42::i;:::-;4950:4;4943:11;;4787:175;;;;:::o;22073:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;21425:33::-;;;;;;;;;;;;;:::o;24414:184::-;13197:12;:10;:12::i;:::-;13187:22;;:6;;;;;;;;;;;:22;;;13179:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24530:8:::1;24499:19;:28;24519:7;24499:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;24572:7;24556:34;;;24581:8;24556:34;;;;;;:::i;:::-;;;;;;;;24414:184:::0;;:::o;24606:306::-;13197:12;:10;:12::i;:::-;13187:22;;:6;;;;;;;;;;;:22;;;13179:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24725:9:::1;24721:115;24744:8;;:15;;24740:1;:19;24721:115;;;24816:8;24781:19;:32;24801:8;;24810:1;24801:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;24781:32;;;;;;;;;;;;;;;;:43;;;;;;;;;;;;;;;;;;24761:3;;;;;:::i;:::-;;;;24721:115;;;;24853:51;24885:8;;24895;24853:51;;;;;;;;:::i;:::-;;;;;;;;24606:306:::0;;;:::o;21893:28::-;;;;:::o;4970:151::-;5059:7;5086:11;:18;5098:5;5086:18;;;;;;;;;;;;;;;:27;5105:7;5086:27;;;;;;;;;;;;;;;;5079:34;;4970:151;;;;:::o;21211:33::-;;;;:::o;24173:233::-;13197:12;:10;:12::i;:::-;13187:22;;:6;;;;;;;;;;;:22;;;13179:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24269:15:::1;24252:14;:32;;;;24311:14;;24295:13;:30;;;;24361:3;24344:13;;:20;;24336:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;24173:233:::0;:::o;21342:37::-;;;;:::o;13920:244::-;13197:12;:10;:12::i;:::-;13187:22;;:6;;;;;;;;;;;:22;;;13179:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;14029:1:::1;14009:22;;:8;:22;;::::0;14001:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;14119:8;14090:38;;14111:6;;;;;;;;;;;14090:38;;;;;;;;;;;;14148:8;14139:6;;:17;;;;;;;;;;;;;;;;;;13920:244:::0;:::o;223:98::-;276:7;303:10;296:17;;223:98;:::o;7369:380::-;7522:1;7505:19;;:5;:19;;;7497:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7603:1;7584:21;;:7;:21;;;7576:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7687:6;7657:11;:18;7669:5;7657:18;;;;;;;;;;;;;;;:27;7676:7;7657:27;;;;;;;;;;;;;;;:36;;;;7725:7;7709:32;;7718:5;7709:32;;;7734:6;7709:32;;;;;;:::i;:::-;;;;;;;;7369:380;;;:::o;25515:1963::-;25663:1;25647:18;;:4;:18;;;25639:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25740:1;25726:16;;:2;:16;;;25718:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;25817:1;25807:6;:11;25804:92;;25835:28;25851:4;25857:2;25861:1;25835:15;:28::i;:::-;25878:7;;25804:92;25920:13;;;;;;;;;;;25916:136;;25957:19;:25;25977:4;25957:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;25986:19;:23;26006:2;25986:23;;;;;;;;;;;;;;;;;;;;;;;;;25957:52;25949:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;25916:136;26068:28;26099:24;26117:4;26099:9;:24::i;:::-;26068:55;;26134:12;26173:18;;26149:20;:42;;26134:57;;26222:7;:35;;;;;26246:11;;;;;;;;;;;26222:35;:61;;;;;26275:8;;;;;;;;;;;26274:9;26222:61;:110;;;;;26301:25;:31;26327:4;26301:31;;;;;;;;;;;;;;;;;;;;;;;;;26300:32;26222:110;:153;;;;;26350:19;:25;26370:4;26350:25;;;;;;;;;;;;;;;;;;;;;;;;;26349:26;26222:153;:194;;;;;26393:19;:23;26413:2;26393:23;;;;;;;;;;;;;;;;;;;;;;;;;26392:24;26222:194;26204:322;;;26454:4;26443:8;;:15;;;;;;;;;;;;;;;;;;26473:10;:8;:10::i;:::-;26509:5;26498:8;;:16;;;;;;;;;;;;;;;;;;26204:322;26538:12;26554:8;;;;;;;;;;;26553:9;26538:24;;26663:19;:25;26683:4;26663:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;26692:19;:23;26712:2;26692:23;;;;;;;;;;;;;;;;;;;;;;;;;26663:52;26660:99;;;26742:5;26732:15;;26660:99;26779:12;26870:7;26867:556;;;26957:25;:29;26983:2;26957:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;27006:1;26990:13;;:17;26957:50;26953:313;;;27034:41;21840:4;27034:25;27045:13;;27034:6;:10;;:25;;;;:::i;:::-;:29;;:41;;;;:::i;:::-;27027:48;;27114:4;27094:16;;:24;;;;;;;:::i;:::-;;;;;;;;26953:313;;;27193:25;:31;27219:4;27193:31;;;;;;;;;;;;;;;;;;;;;;;;;27190:76;;;27249:1;27242:8;;27190:76;26953:313;27292:1;27285:4;:8;27282:93;;;27317:42;27333:4;27347;27354;27317:15;:42::i;:::-;27282:93;27407:4;27397:14;;;;;:::i;:::-;;;26867:556;27435:33;27451:4;27457:2;27461:6;27435:15;:33::i;:::-;25628:1850;;;;25515:1963;;;;:::o;27490:601::-;27618:21;27656:1;27642:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27618:40;;27687:4;27669;27674:1;27669:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;27713:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27703:4;27708:1;27703:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;27748:62;27765:4;27780:15;27798:11;27748:8;:62::i;:::-;27849:15;:66;;;27930:11;27956:1;28000:4;28027;28047:15;27849:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27545:546;27490:601;:::o;25182:186::-;25299:5;25265:25;:31;25291:4;25265:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;25354:5;25320:40;;25348:4;25320:40;;;;;;;;;;;;25182:186;;:::o;6450:614::-;6608:1;6590:20;;:6;:20;;;6582:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;6692:1;6671:23;;:9;:23;;;6663:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;6747:21;6771:9;:17;6781:6;6771:17;;;;;;;;;;;;;;;;6747:41;;6824:6;6807:13;:23;;6799:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;6945:6;6929:13;:22;6909:9;:17;6919:6;6909:17;;;;;;;;;;;;;;;:42;;;;6997:6;6973:9;:20;6983:9;6973:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;7038:9;7021:35;;7030:6;7021:35;;;7049:6;7021:35;;;;;;:::i;:::-;;;;;;;;6571:493;6450:614;;;:::o;29874:523::-;29913:23;29939:24;29957:4;29939:9;:24::i;:::-;29913:50;;29974:25;30002:16;;29974:44;;30061:1;30042:15;:20;:46;;;;30087:1;30066:17;:22;30042:46;30039:60;;;30091:7;;;;30039:60;30119:26;30148:15;30119:44;;30174:36;30191:18;30174:16;:36::i;:::-;30238:21;30222:13;:37;;;;30289:1;30270:16;:20;;;;30353:36;30363:13;;30378:10;;;;;;;;;;;30353:9;:36::i;:::-;29902:495;;;29874:523;:::o;9373:471::-;9431:7;9681:1;9676;:6;9672:47;;9706:1;9699:8;;;;9672:47;9731:9;9747:1;9743;:5;;;;:::i;:::-;9731:17;;9776:1;9771;9767;:5;;;;:::i;:::-;:10;9759:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;9835:1;9828:8;;;9373:471;;;;;:::o;10320:132::-;10378:7;10405:39;10409:1;10412;10405:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;10398:46;;10320:132;;;;:::o;28633:521::-;28772:21;28810:1;28796:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28772:40;;28833:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28823:4;28828:1;28823:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;28876:8;28866:4;28871:1;28866:7;;;;;;;;:::i;:::-;;;;;;;:18;;;;;;;;;;;28923:15;:66;;;28997:14;29027:1;29076:4;21675:42;29120:15;28923:223;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28703:451;28633:521;;:::o;10948:278::-;11034:7;11066:1;11062;:5;11069:12;11054:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;11093:9;11109:1;11105;:5;;;;:::i;:::-;11093:17;;11217:1;11210:8;;;10948:278;;;;;:::o;7:126:1:-;44:7;84:42;77:5;73:54;62:65;;7:126;;;:::o;139:96::-;176:7;205:24;223:5;205:24;:::i;:::-;194:35;;139:96;;;:::o;241:118::-;328:24;346:5;328:24;:::i;:::-;323:3;316:37;241:118;;:::o;365:222::-;458:4;496:2;485:9;481:18;473:26;;509:71;577:1;566:9;562:17;553:6;509:71;:::i;:::-;365:222;;;;:::o;593:99::-;645:6;679:5;673:12;663:22;;593:99;;;:::o;698:169::-;782:11;816:6;811:3;804:19;856:4;851:3;847:14;832:29;;698:169;;;;:::o;873:307::-;941:1;951:113;965:6;962:1;959:13;951:113;;;1050:1;1045:3;1041:11;1035:18;1031:1;1026:3;1022:11;1015:39;987:2;984:1;980:10;975:15;;951:113;;;1082:6;1079:1;1076:13;1073:101;;;1162:1;1153:6;1148:3;1144:16;1137:27;1073:101;922:258;873:307;;;:::o;1186:102::-;1227:6;1278:2;1274:7;1269:2;1262:5;1258:14;1254:28;1244:38;;1186:102;;;:::o;1294:364::-;1382:3;1410:39;1443:5;1410:39;:::i;:::-;1465:71;1529:6;1524:3;1465:71;:::i;:::-;1458:78;;1545:52;1590:6;1585:3;1578:4;1571:5;1567:16;1545:52;:::i;:::-;1622:29;1644:6;1622:29;:::i;:::-;1617:3;1613:39;1606:46;;1386:272;1294:364;;;;:::o;1664:313::-;1777:4;1815:2;1804:9;1800:18;1792:26;;1864:9;1858:4;1854:20;1850:1;1839:9;1835:17;1828:47;1892:78;1965:4;1956:6;1892:78;:::i;:::-;1884:86;;1664:313;;;;:::o;2064:117::-;2173:1;2170;2163:12;2187:117;2296:1;2293;2286:12;2310:122;2383:24;2401:5;2383:24;:::i;:::-;2376:5;2373:35;2363:63;;2422:1;2419;2412:12;2363:63;2310:122;:::o;2438:139::-;2484:5;2522:6;2509:20;2500:29;;2538:33;2565:5;2538:33;:::i;:::-;2438:139;;;;:::o;2583:77::-;2620:7;2649:5;2638:16;;2583:77;;;:::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:118::-;3933:24;3951:5;3933:24;:::i;:::-;3928:3;3921:37;3846:118;;:::o;3970:222::-;4063:4;4101:2;4090:9;4086:18;4078:26;;4114:71;4182:1;4171:9;4167:17;4158:6;4114:71;:::i;:::-;3970:222;;;;:::o;4198:60::-;4226:3;4247:5;4240:12;;4198:60;;;:::o;4264:142::-;4314:9;4347:53;4365:34;4374:24;4392:5;4374:24;:::i;:::-;4365:34;:::i;:::-;4347:53;:::i;:::-;4334:66;;4264:142;;;:::o;4412:126::-;4462:9;4495:37;4526:5;4495:37;:::i;:::-;4482:50;;4412:126;;;:::o;4544:153::-;4621:9;4654:37;4685:5;4654:37;:::i;:::-;4641:50;;4544:153;;;:::o;4703:185::-;4817:64;4875:5;4817:64;:::i;:::-;4812:3;4805:77;4703:185;;:::o;4894:276::-;5014:4;5052:2;5041:9;5037:18;5029:26;;5065:98;5160:1;5149:9;5145:17;5136:6;5065:98;:::i;:::-;4894:276;;;;:::o;5176:619::-;5253:6;5261;5269;5318:2;5306:9;5297:7;5293:23;5289:32;5286:119;;;5324:79;;:::i;:::-;5286:119;5444:1;5469:53;5514:7;5505:6;5494:9;5490:22;5469:53;:::i;:::-;5459:63;;5415:117;5571:2;5597:53;5642:7;5633:6;5622:9;5618:22;5597:53;:::i;:::-;5587:63;;5542:118;5699:2;5725:53;5770:7;5761:6;5750:9;5746:22;5725:53;:::i;:::-;5715:63;;5670:118;5176:619;;;;;:::o;5801:86::-;5836:7;5876:4;5869:5;5865:16;5854:27;;5801:86;;;:::o;5893:112::-;5976:22;5992:5;5976:22;:::i;:::-;5971:3;5964:35;5893:112;;:::o;6011:214::-;6100:4;6138:2;6127:9;6123:18;6115:26;;6151:67;6215:1;6204:9;6200:17;6191:6;6151:67;:::i;:::-;6011:214;;;;:::o;6231:329::-;6290:6;6339:2;6327:9;6318:7;6314:23;6310:32;6307:119;;;6345:79;;:::i;:::-;6307:119;6465:1;6490:53;6535:7;6526:6;6515:9;6511:22;6490:53;:::i;:::-;6480:63;;6436:117;6231:329;;;;:::o;6566:474::-;6634:6;6642;6691:2;6679:9;6670:7;6666:23;6662:32;6659:119;;;6697:79;;:::i;:::-;6659:119;6817:1;6842:53;6887:7;6878:6;6867:9;6863:22;6842:53;:::i;:::-;6832:63;;6788:117;6944:2;6970:53;7015:7;7006:6;6995:9;6991:22;6970:53;:::i;:::-;6960:63;;6915:118;6566:474;;;;;:::o;7046:116::-;7116:21;7131:5;7116:21;:::i;:::-;7109:5;7106:32;7096:60;;7152:1;7149;7142:12;7096:60;7046:116;:::o;7168:133::-;7211:5;7249:6;7236:20;7227:29;;7265:30;7289:5;7265:30;:::i;:::-;7168:133;;;;:::o;7307:323::-;7363:6;7412:2;7400:9;7391:7;7387:23;7383:32;7380:119;;;7418:79;;:::i;:::-;7380:119;7538:1;7563:50;7605:7;7596:6;7585:9;7581:22;7563:50;:::i;:::-;7553:60;;7509:114;7307:323;;;;:::o;7636:468::-;7701:6;7709;7758:2;7746:9;7737:7;7733:23;7729:32;7726:119;;;7764:79;;:::i;:::-;7726:119;7884:1;7909:53;7954:7;7945:6;7934:9;7930:22;7909:53;:::i;:::-;7899:63;;7855:117;8011:2;8037:50;8079:7;8070:6;8059:9;8055:22;8037:50;:::i;:::-;8027:60;;7982:115;7636:468;;;;;:::o;8110:117::-;8219:1;8216;8209:12;8233:117;8342:1;8339;8332:12;8356:117;8465:1;8462;8455:12;8496:568;8569:8;8579:6;8629:3;8622:4;8614:6;8610:17;8606:27;8596:122;;8637:79;;:::i;:::-;8596:122;8750:6;8737:20;8727:30;;8780:18;8772:6;8769:30;8766:117;;;8802:79;;:::i;:::-;8766:117;8916:4;8908:6;8904:17;8892:29;;8970:3;8962:4;8954:6;8950:17;8940:8;8936:32;8933:41;8930:128;;;8977:79;;:::i;:::-;8930:128;8496:568;;;;;:::o;9070:698::-;9162:6;9170;9178;9227:2;9215:9;9206:7;9202:23;9198:32;9195:119;;;9233:79;;:::i;:::-;9195:119;9381:1;9370:9;9366:17;9353:31;9411:18;9403:6;9400:30;9397:117;;;9433:79;;:::i;:::-;9397:117;9546:80;9618:7;9609:6;9598:9;9594:22;9546:80;:::i;:::-;9528:98;;;;9324:312;9675:2;9701:50;9743:7;9734:6;9723:9;9719:22;9701:50;:::i;:::-;9691:60;;9646:115;9070:698;;;;;:::o;9774:474::-;9842:6;9850;9899:2;9887:9;9878:7;9874:23;9870:32;9867:119;;;9905:79;;:::i;:::-;9867:119;10025:1;10050:53;10095:7;10086:6;10075:9;10071:22;10050:53;:::i;:::-;10040:63;;9996:117;10152:2;10178:53;10223:7;10214:6;10203:9;10199:22;10178:53;:::i;:::-;10168:63;;10123:118;9774:474;;;;;:::o;10254:329::-;10313:6;10362:2;10350:9;10341:7;10337:23;10333:32;10330:119;;;10368:79;;:::i;:::-;10330:119;10488:1;10513:53;10558:7;10549:6;10538:9;10534:22;10513:53;:::i;:::-;10503:63;;10459:117;10254:329;;;;:::o;10589:180::-;10637:77;10634:1;10627:88;10734:4;10731:1;10724:15;10758:4;10755:1;10748:15;10775:320;10819:6;10856:1;10850:4;10846:12;10836:22;;10903:1;10897:4;10893:12;10924:18;10914:81;;10980:4;10972:6;10968:17;10958:27;;10914:81;11042:2;11034:6;11031:14;11011:18;11008:38;11005:84;;11061:18;;:::i;:::-;11005:84;10826:269;10775:320;;;:::o;11101:227::-;11241:34;11237:1;11229:6;11225:14;11218:58;11310:10;11305:2;11297:6;11293:15;11286:35;11101:227;:::o;11334:366::-;11476:3;11497:67;11561:2;11556:3;11497:67;:::i;:::-;11490:74;;11573:93;11662:3;11573:93;:::i;:::-;11691:2;11686:3;11682:12;11675:19;;11334:366;;;:::o;11706:419::-;11872:4;11910:2;11899:9;11895:18;11887:26;;11959:9;11953:4;11949:20;11945:1;11934:9;11930:17;11923:47;11987:131;12113:4;11987:131;:::i;:::-;11979:139;;11706:419;;;:::o;12131:180::-;12179:77;12176:1;12169:88;12276:4;12273:1;12266:15;12300:4;12297:1;12290:15;12317:305;12357:3;12376:20;12394:1;12376:20;:::i;:::-;12371:25;;12410:20;12428:1;12410:20;:::i;:::-;12405:25;;12564:1;12496:66;12492:74;12489:1;12486:81;12483:107;;;12570:18;;:::i;:::-;12483:107;12614:1;12611;12607:9;12600:16;;12317:305;;;;:::o;12628:182::-;12768:34;12764:1;12756:6;12752:14;12745:58;12628:182;:::o;12816:366::-;12958:3;12979:67;13043:2;13038:3;12979:67;:::i;:::-;12972:74;;13055:93;13144:3;13055:93;:::i;:::-;13173:2;13168:3;13164:12;13157:19;;12816:366;;;:::o;13188:419::-;13354:4;13392:2;13381:9;13377:18;13369:26;;13441:9;13435:4;13431:20;13427:1;13416:9;13412:17;13405:47;13469:131;13595:4;13469:131;:::i;:::-;13461:139;;13188:419;;;:::o;13613:169::-;13753:21;13749:1;13741:6;13737:14;13730:45;13613:169;:::o;13788:366::-;13930:3;13951:67;14015:2;14010:3;13951:67;:::i;:::-;13944:74;;14027:93;14116:3;14027:93;:::i;:::-;14145:2;14140:3;14136:12;14129:19;;13788:366;;;:::o;14160:419::-;14326:4;14364:2;14353:9;14349:18;14341:26;;14413:9;14407:4;14403:20;14399:1;14388:9;14384:17;14377:47;14441:131;14567:4;14441:131;:::i;:::-;14433:139;;14160:419;;;:::o;14585:180::-;14633:77;14630:1;14623:88;14730:4;14727:1;14720:15;14754:4;14751:1;14744:15;14771:143;14828:5;14859:6;14853:13;14844:22;;14875:33;14902:5;14875:33;:::i;:::-;14771:143;;;;:::o;14920:351::-;14990:6;15039:2;15027:9;15018:7;15014:23;15010:32;15007:119;;;15045:79;;:::i;:::-;15007:119;15165:1;15190:64;15246:7;15237:6;15226:9;15222:22;15190:64;:::i;:::-;15180:74;;15136:128;14920:351;;;;:::o;15277:180::-;15325:77;15322:1;15315:88;15422:4;15419:1;15412:15;15446:4;15443:1;15436:15;15463:85;15508:7;15537:5;15526:16;;15463:85;;;:::o;15554:158::-;15612:9;15645:61;15663:42;15672:32;15698:5;15672:32;:::i;:::-;15663:42;:::i;:::-;15645:61;:::i;:::-;15632:74;;15554:158;;;:::o;15718:147::-;15813:45;15852:5;15813:45;:::i;:::-;15808:3;15801:58;15718:147;;:::o;15871:114::-;15938:6;15972:5;15966:12;15956:22;;15871:114;;;:::o;15991:184::-;16090:11;16124:6;16119:3;16112:19;16164:4;16159:3;16155:14;16140:29;;15991:184;;;;:::o;16181:132::-;16248:4;16271:3;16263:11;;16301:4;16296:3;16292:14;16284:22;;16181:132;;;:::o;16319:108::-;16396:24;16414:5;16396:24;:::i;:::-;16391:3;16384:37;16319:108;;:::o;16433:179::-;16502:10;16523:46;16565:3;16557:6;16523:46;:::i;:::-;16601:4;16596:3;16592:14;16578:28;;16433:179;;;;:::o;16618:113::-;16688:4;16720;16715:3;16711:14;16703:22;;16618:113;;;:::o;16767:732::-;16886:3;16915:54;16963:5;16915:54;:::i;:::-;16985:86;17064:6;17059:3;16985:86;:::i;:::-;16978:93;;17095:56;17145:5;17095:56;:::i;:::-;17174:7;17205:1;17190:284;17215:6;17212:1;17209:13;17190:284;;;17291:6;17285:13;17318:63;17377:3;17362:13;17318:63;:::i;:::-;17311:70;;17404:60;17457:6;17404:60;:::i;:::-;17394:70;;17250:224;17237:1;17234;17230:9;17225:14;;17190:284;;;17194:14;17490:3;17483:10;;16891:608;;;16767:732;;;;:::o;17505:720::-;17740:4;17778:3;17767:9;17763:19;17755:27;;17792:79;17868:1;17857:9;17853:17;17844:6;17792:79;:::i;:::-;17918:9;17912:4;17908:20;17903:2;17892:9;17888:18;17881:48;17946:108;18049:4;18040:6;17946:108;:::i;:::-;17938:116;;18064:72;18132:2;18121:9;18117:18;18108:6;18064:72;:::i;:::-;18146;18214:2;18203:9;18199:18;18190:6;18146:72;:::i;:::-;17505:720;;;;;;;:::o;18231:147::-;18332:11;18369:3;18354:18;;18231:147;;;;:::o;18384:114::-;;:::o;18504:398::-;18663:3;18684:83;18765:1;18760:3;18684:83;:::i;:::-;18677:90;;18776:93;18865:3;18776:93;:::i;:::-;18894:1;18889:3;18885:11;18878:18;;18504:398;;;:::o;18908:379::-;19092:3;19114:147;19257:3;19114:147;:::i;:::-;19107:154;;19278:3;19271:10;;18908:379;;;:::o;19293:168::-;19433:20;19429:1;19421:6;19417:14;19410:44;19293:168;:::o;19467:366::-;19609:3;19630:67;19694:2;19689:3;19630:67;:::i;:::-;19623:74;;19706:93;19795:3;19706:93;:::i;:::-;19824:2;19819:3;19815:12;19808:19;;19467:366;;;:::o;19839:419::-;20005:4;20043:2;20032:9;20028:18;20020:26;;20092:9;20086:4;20082:20;20078:1;20067:9;20063:17;20056:47;20120:131;20246:4;20120:131;:::i;:::-;20112:139;;19839:419;;;:::o;20264:174::-;20404:26;20400:1;20392:6;20388:14;20381:50;20264:174;:::o;20444:366::-;20586:3;20607:67;20671:2;20666:3;20607:67;:::i;:::-;20600:74;;20683:93;20772:3;20683:93;:::i;:::-;20801:2;20796:3;20792:12;20785:19;;20444:366;;;:::o;20816:419::-;20982:4;21020:2;21009:9;21005:18;20997:26;;21069:9;21063:4;21059:20;21055:1;21044:9;21040:17;21033:47;21097:131;21223:4;21097:131;:::i;:::-;21089:139;;20816:419;;;:::o;21241:289::-;21381:34;21377:1;21369:6;21365:14;21358:58;21450:34;21445:2;21437:6;21433:15;21426:59;21519:3;21514:2;21506:6;21502:15;21495:28;21241:289;:::o;21536:366::-;21678:3;21699:67;21763:2;21758:3;21699:67;:::i;:::-;21692:74;;21775:93;21864:3;21775:93;:::i;:::-;21893:2;21888:3;21884:12;21877:19;;21536:366;;;:::o;21908:419::-;22074:4;22112:2;22101:9;22097:18;22089:26;;22161:9;22155:4;22151:20;22147:1;22136:9;22132:17;22125:47;22189:131;22315:4;22189:131;:::i;:::-;22181:139;;21908:419;;;:::o;22333:224::-;22473:34;22469:1;22461:6;22457:14;22450:58;22542:7;22537:2;22529:6;22525:15;22518:32;22333:224;:::o;22563:366::-;22705:3;22726:67;22790:2;22785:3;22726:67;:::i;:::-;22719:74;;22802:93;22891:3;22802:93;:::i;:::-;22920:2;22915:3;22911:12;22904:19;;22563:366;;;:::o;22935:419::-;23101:4;23139:2;23128:9;23124:18;23116:26;;23188:9;23182:4;23178:20;23174:1;23163:9;23159:17;23152:47;23216:131;23342:4;23216:131;:::i;:::-;23208:139;;22935:419;;;:::o;23360:233::-;23399:3;23422:24;23440:5;23422:24;:::i;:::-;23413:33;;23468:66;23461:5;23458:77;23455:103;;23538:18;;:::i;:::-;23455:103;23585:1;23578:5;23574:13;23567:20;;23360:233;;;:::o;23599:102::-;23668:4;23691:3;23683:11;;23599:102;;;:::o;23707:122::-;23759:5;23784:39;23819:2;23814:3;23810:12;23805:3;23784:39;:::i;:::-;23775:48;;23707:122;;;;:::o;23835:115::-;23907:4;23939;23934:3;23930:14;23922:22;;23835:115;;;:::o;23986:699::-;24115:3;24138:86;24217:6;24212:3;24138:86;:::i;:::-;24131:93;;24248:58;24300:5;24248:58;:::i;:::-;24329:7;24360:1;24345:315;24370:6;24367:1;24364:13;24345:315;;;24440:42;24475:6;24466:7;24440:42;:::i;:::-;24502:63;24561:3;24546:13;24502:63;:::i;:::-;24495:70;;24588:62;24643:6;24588:62;:::i;:::-;24578:72;;24405:255;24392:1;24389;24385:9;24380:14;;24345:315;;;24349:14;24676:3;24669:10;;24120:565;;23986:699;;;;;:::o;24691:491::-;24866:4;24904:2;24893:9;24889:18;24881:26;;24953:9;24947:4;24943:20;24939:1;24928:9;24924:17;24917:47;24981:118;25094:4;25085:6;25077;24981:118;:::i;:::-;24973:126;;25109:66;25171:2;25160:9;25156:18;25147:6;25109:66;:::i;:::-;24691:491;;;;;;:::o;25188:179::-;25328:31;25324:1;25316:6;25312:14;25305:55;25188:179;:::o;25373:366::-;25515:3;25536:67;25600:2;25595:3;25536:67;:::i;:::-;25529:74;;25612:93;25701:3;25612:93;:::i;:::-;25730:2;25725:3;25721:12;25714:19;;25373:366;;;:::o;25745:419::-;25911:4;25949:2;25938:9;25934:18;25926:26;;25998:9;25992:4;25988:20;25984:1;25973:9;25969:17;25962:47;26026:131;26152:4;26026:131;:::i;:::-;26018:139;;25745:419;;;:::o;26170:225::-;26310:34;26306:1;26298:6;26294:14;26287:58;26379:8;26374:2;26366:6;26362:15;26355:33;26170:225;:::o;26401:366::-;26543:3;26564:67;26628:2;26623:3;26564:67;:::i;:::-;26557:74;;26640:93;26729:3;26640:93;:::i;:::-;26758:2;26753:3;26749:12;26742:19;;26401:366;;;:::o;26773:419::-;26939:4;26977:2;26966:9;26962:18;26954:26;;27026:9;27020:4;27016:20;27012:1;27001:9;26997:17;26990:47;27054:131;27180:4;27054:131;:::i;:::-;27046:139;;26773:419;;;:::o;27198:223::-;27338:34;27334:1;27326:6;27322:14;27315:58;27407:6;27402:2;27394:6;27390:15;27383:31;27198:223;:::o;27427:366::-;27569:3;27590:67;27654:2;27649:3;27590:67;:::i;:::-;27583:74;;27666:93;27755:3;27666:93;:::i;:::-;27784:2;27779:3;27775:12;27768:19;;27427:366;;;:::o;27799:419::-;27965:4;28003:2;27992:9;27988:18;27980:26;;28052:9;28046:4;28042:20;28038:1;28027:9;28023:17;28016:47;28080:131;28206:4;28080:131;:::i;:::-;28072:139;;27799:419;;;:::o;28224:221::-;28364:34;28360:1;28352:6;28348:14;28341:58;28433:4;28428:2;28420:6;28416:15;28409:29;28224:221;:::o;28451:366::-;28593:3;28614:67;28678:2;28673:3;28614:67;:::i;:::-;28607:74;;28690:93;28779:3;28690:93;:::i;:::-;28808:2;28803:3;28799:12;28792:19;;28451:366;;;:::o;28823:419::-;28989:4;29027:2;29016:9;29012:18;29004:26;;29076:9;29070:4;29066:20;29062:1;29051:9;29047:17;29040:47;29104:131;29230:4;29104:131;:::i;:::-;29096:139;;28823:419;;;:::o;29248:224::-;29388:34;29384:1;29376:6;29372:14;29365:58;29457:7;29452:2;29444:6;29440:15;29433:32;29248:224;:::o;29478:366::-;29620:3;29641:67;29705:2;29700:3;29641:67;:::i;:::-;29634:74;;29717:93;29806:3;29717:93;:::i;:::-;29835:2;29830:3;29826:12;29819:19;;29478:366;;;:::o;29850:419::-;30016:4;30054:2;30043:9;30039:18;30031:26;;30103:9;30097:4;30093:20;30089:1;30078:9;30074:17;30067:47;30131:131;30257:4;30131:131;:::i;:::-;30123:139;;29850:419;;;:::o;30275:222::-;30415:34;30411:1;30403:6;30399:14;30392:58;30484:5;30479:2;30471:6;30467:15;30460:30;30275:222;:::o;30503:366::-;30645:3;30666:67;30730:2;30725:3;30666:67;:::i;:::-;30659:74;;30742:93;30831:3;30742:93;:::i;:::-;30860:2;30855:3;30851:12;30844:19;;30503:366;;;:::o;30875:419::-;31041:4;31079:2;31068:9;31064:18;31056:26;;31128:9;31122:4;31118:20;31114:1;31103:9;31099:17;31092:47;31156:131;31282:4;31156:131;:::i;:::-;31148:139;;30875:419;;;:::o;31300:176::-;31440:28;31436:1;31428:6;31424:14;31417:52;31300:176;:::o;31482:366::-;31624:3;31645:67;31709:2;31704:3;31645:67;:::i;:::-;31638:74;;31721:93;31810:3;31721:93;:::i;:::-;31839:2;31834:3;31830:12;31823:19;;31482:366;;;:::o;31854:419::-;32020:4;32058:2;32047:9;32043:18;32035:26;;32107:9;32101:4;32097:20;32093:1;32082:9;32078:17;32071:47;32135:131;32261:4;32135:131;:::i;:::-;32127:139;;31854:419;;;:::o;32279:191::-;32319:4;32339:20;32357:1;32339:20;:::i;:::-;32334:25;;32373:20;32391:1;32373:20;:::i;:::-;32368:25;;32412:1;32409;32406:8;32403:34;;;32417:18;;:::i;:::-;32403:34;32462:1;32459;32455:9;32447:17;;32279:191;;;;:::o;32476:831::-;32739:4;32777:3;32766:9;32762:19;32754:27;;32791:71;32859:1;32848:9;32844:17;32835:6;32791:71;:::i;:::-;32872:80;32948:2;32937:9;32933:18;32924:6;32872:80;:::i;:::-;32999:9;32993:4;32989:20;32984:2;32973:9;32969:18;32962:48;33027:108;33130:4;33121:6;33027:108;:::i;:::-;33019:116;;33145:72;33213:2;33202:9;33198:18;33189:6;33145:72;:::i;:::-;33227:73;33295:3;33284:9;33280:19;33271:6;33227:73;:::i;:::-;32476:831;;;;;;;;:::o;33313:225::-;33453:34;33449:1;33441:6;33437:14;33430:58;33522:8;33517:2;33509:6;33505:15;33498:33;33313:225;:::o;33544:366::-;33686:3;33707:67;33771:2;33766:3;33707:67;:::i;:::-;33700:74;;33783:93;33872:3;33783:93;:::i;:::-;33901:2;33896:3;33892:12;33885:19;;33544:366;;;:::o;33916:419::-;34082:4;34120:2;34109:9;34105:18;34097:26;;34169:9;34163:4;34159:20;34155:1;34144:9;34140:17;34133:47;34197:131;34323:4;34197:131;:::i;:::-;34189:139;;33916:419;;;:::o;34341:348::-;34381:7;34404:20;34422:1;34404:20;:::i;:::-;34399:25;;34438:20;34456:1;34438:20;:::i;:::-;34433:25;;34626:1;34558:66;34554:74;34551:1;34548:81;34543:1;34536:9;34529:17;34525:105;34522:131;;;34633:18;;:::i;:::-;34522:131;34681:1;34678;34674:9;34663:20;;34341:348;;;;:::o;34695:180::-;34743:77;34740:1;34733:88;34840:4;34837:1;34830:15;34864:4;34861:1;34854:15;34881:185;34921:1;34938:20;34956:1;34938:20;:::i;:::-;34933:25;;34972:20;34990:1;34972:20;:::i;:::-;34967:25;;35011:1;35001:35;;35016:18;;:::i;:::-;35001:35;35058:1;35055;35051:9;35046:14;;34881:185;;;;:::o;35072:220::-;35212:34;35208:1;35200:6;35196:14;35189:58;35281:3;35276:2;35268:6;35264:15;35257:28;35072:220;:::o;35298:366::-;35440:3;35461:67;35525:2;35520:3;35461:67;:::i;:::-;35454:74;;35537:93;35626:3;35537:93;:::i;:::-;35655:2;35650:3;35646:12;35639:19;;35298:366;;;:::o;35670:419::-;35836:4;35874:2;35863:9;35859:18;35851:26;;35923:9;35917:4;35913:20;35909:1;35898:9;35894:17;35887:47;35951:131;36077:4;35951:131;:::i;:::-;35943:139;;35670:419;;;:::o

Swarm Source

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