ETH Price: $3,533.68 (+4.33%)

Token

Nexis Tools (NEXIS)
 

Overview

Max Total Supply

1,000,000,000 NEXIS

Holders

194

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
2,074,864.569656940445726309 NEXIS

Value
$0.00
0x930939d60c84bd6a61de6e0d3dd32d6bb790631d
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:
Contract

Compiler Version
v0.8.27+commit.40a35a09

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-10-27
*/

/**

*/

pragma solidity ^0.8.27;

// SPDX-License-Identifier: MIT

/*
https://t.me/NexisTools
https://x.com/NexisTools
https://nexistools.app/
*/

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 IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);

    function symbol() external pure returns (string memory);

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint);

    function balanceOf(address owner) external view returns (uint);

    function allowance(
        address owner,
        address spender
    ) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);

    function transfer(address to, uint value) external returns (bool);

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

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

    function nonces(address owner) external view returns (uint);

    function permit(
        address owner,
        address spender,
        uint value,
        uint deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external;

    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(
        address indexed sender,
        uint amount0,
        uint amount1,
        address indexed to
    );
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

    function getReserves()
        external
        view
        returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);

    function price0CumulativeLast() external view returns (uint);

    function price1CumulativeLast() external view returns (uint);

    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);

    function burn(address to) external returns (uint amount0, uint amount1);

    function swap(
        uint amount0Out,
        uint amount1Out,
        address to,
        bytes calldata data
    ) external;

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

    function allPairs(uint) external view returns (address pair);

    function allPairsLength() external view returns (uint);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

interface IERC20 {
    /**
     * @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 caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance 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 spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` 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 `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` 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 {
    using SafeMath for uint256;

    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5,05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(
        address account
    ) public view virtual override returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(
        address owner,
        address spender
    ) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(
        address spender,
        uint256 amount
    ) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(
            sender,
            _msgSender(),
            _allowances[sender][_msgSender()].sub(
                amount,
                "ERC20: transfer amount exceeds allowance"
            )
        );
        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(
        address spender,
        uint256 addedValue
    ) public virtual returns (bool) {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][spender].add(addedValue)
        );
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(
        address spender,
        uint256 subtractedValue
    ) public virtual returns (bool) {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][spender].sub(
                subtractedValue,
                "ERC20: decreased allowance below zero"
            )
        );
        return true;
    }

    /**
     * @dev Moves tokens `amount` from `sender` to `recipient`.
     *
     * This is internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        _balances[sender] = _balances[sender].sub(
            amount,
            "ERC20: transfer amount exceeds balance"
        );
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        _balances[account] = _balances[account].sub(
            amount,
            "ERC20: burn amount exceeds balance"
        );
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    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);
    }

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be to transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

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

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;

    bool private swapping;

    address public marketingWallet;
    address public devWallet;

    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;
    bool public enableEarlySellTax = true;

    // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch

    // Seller Map
    mapping(address => uint256) private _holderFirstBuyTimestamp;

    // Blacklist Map
    mapping(address => bool) private _blacklist;
    bool public transferDelayEnabled = true;

    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevFee;

    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevFee;

    uint256 public earlySellLiquidityFee;
    uint256 public earlySellMarketingFee;
    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;

    // block number of opened trading
    uint256 launchedAt;

    /******************/

    // exclude from fees and max transaction amount
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedMaxTransactionAmount;

    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping(address => bool) public automatedMarketMakerPairs;

    event UpdateUniswapV2Router(
        address indexed newAddress,
        address indexed oldAddress
    );

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    event marketingWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

    event devWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

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

    event AutoNukeLP();

    event ManualNukeLP();

    constructor() ERC20(unicode"Nexis Tools", unicode"NEXIS") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );

        // #################################################################
        marketingWallet = address(0x77a7bf38A72cf2De2a21f95a84E807C6e38b3868); // set as marketing wallet
        devWallet = address(0x417F0BD5c20F3A2CE3f401c03a99c8B45726414A); // set as dev wallet
        // #################################################################

        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;

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

        uint256 _buyMarketingFee = 0;
        uint256 _buyLiquidityFee = 0;
        uint256 _buyDevFee = 0;

        uint256 _sellMarketingFee = 0;
        uint256 _sellLiquidityFee = 0;
        uint256 _sellDevFee = 0;

        uint256 _earlySellLiquidityFee = 0;
        uint256 _earlySellMarketingFee = 0;

        uint256 totalSupply = 1 * 1e9 * 1e18;

        maxTransactionAmount = (totalSupply * 2) / 100; // maxTransactionAmountTxn
        maxWallet = (totalSupply * 2) / 100; // maxWallet
        swapTokensAtAmount = (totalSupply * 5) / 10000; // 0.05% swapwallet

        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyDevFee = _buyDevFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;

        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellDevFee = _sellDevFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;

        earlySellLiquidityFee = _earlySellLiquidityFee;
        earlySellMarketingFee = _earlySellMarketingFee;

        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromFees(address(msg.sender), true);

        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
        excludeFromMaxTransaction(address(msg.sender), true);

        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(msg.sender, totalSupply);
    }

    receive() external payable {}

    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
        launchedAt = block.number;
    }

    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect = false;
        return true;
    }

    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner returns (bool) {
        transferDelayEnabled = false;
        return true;
    }

    function setEarlySellTax(bool onoff) external onlyOwner {
        enableEarlySellTax = onoff;
    }

    // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(
        uint256 newAmount
    ) external onlyOwner returns (bool) {
        require(
            newAmount >= (totalSupply() * 1) / 100000,
            "Swap amount cannot be lower than 0.001% total supply."
        );
        require(
            newAmount <= (totalSupply() * 5) / 1000,
            "Swap amount cannot be higher than 0.5% total supply."
        );
        swapTokensAtAmount = newAmount;
        return true;
    }

    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 5) / 1000) / 1e18,
            "Cannot set maxTransactionAmount lower than 0.5%"
        );
        maxTransactionAmount = newNum * (10 ** 18);
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 15) / 1000) / 1e18,
            "Cannot set maxWallet lower than 1.5%"
        );
        maxWallet = newNum * (10 ** 18);
    }

    function excludeFromMaxTransaction(
        address updAds,
        bool isEx
    ) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner {
        swapEnabled = enabled;
    }

    function updateBuyFees(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _devFee
    ) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyDevFee = _devFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;
    }

    function updateSellFees(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _devFee,
        uint256 _earlySellLiquidityFee,
        uint256 _earlySellMarketingFee
    ) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _devFee;
        earlySellLiquidityFee = _earlySellLiquidityFee;
        earlySellMarketingFee = _earlySellMarketingFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
    }

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

    function isBlacklisted(address account) public view returns (bool) {
        return _blacklist[account];
    }

    function blacklistAccounts(
        address[] memory accounts,
        bool isBlacklistedAccount
    ) public onlyOwner {
        require(accounts.length > 0, "Accounts list cannot be empty.");
        for (uint256 i = 0; i < accounts.length; i++) {
            _blacklist[accounts[i]] = isBlacklistedAccount;
        }
    }

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

        _setAutomatedMarketMakerPair(pair, value);
    }

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

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateMarketingWallet(
        address newMarketingWallet
    ) external onlyOwner {
        emit marketingWalletUpdated(newMarketingWallet, marketingWallet);
        marketingWallet = newMarketingWallet;
    }

    function updateDevWallet(address newWallet) external onlyOwner {
        emit devWalletUpdated(newWallet, devWallet);
        devWallet = newWallet;
    }

    function isExcludedFromFees(address account) public view returns (bool) {
        return _isExcludedFromFees[account];
    }

    event BoughtEarly(address indexed sniper);

    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");
        require(
            !_blacklist[to] && !_blacklist[from],
            "You have been blacklisted from transfering tokens"
        );
        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        if (limitsInEffect) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ) {
                if (!tradingActive) {
                    require(
                        _isExcludedFromFees[from] || _isExcludedFromFees[to],
                        "Trading is not active."
                    );
                }

                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.
                if (transferDelayEnabled) {
                    if (
                        to != owner() &&
                        to != address(uniswapV2Router) &&
                        to != address(uniswapV2Pair)
                    ) {
                        require(
                            _holderLastTransferTimestamp[tx.origin] <
                                block.number,
                            "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed."
                        );
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }

                //when buy
                if (
                    automatedMarketMakerPairs[from] &&
                    !_isExcludedMaxTransactionAmount[to]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Buy transfer amount exceeds the maxTransactionAmount."
                    );
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
                //when sell
                else if (
                    automatedMarketMakerPairs[to] &&
                    !_isExcludedMaxTransactionAmount[from]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Sell transfer amount exceeds the maxTransactionAmount."
                    );
                } else if (!_isExcludedMaxTransactionAmount[to]) {
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
            }
        }

        // anti bot logic
        if (
            block.number <= (launchedAt + 0) &&
            to != uniswapV2Pair &&
            to != address(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D)
        ) {
            _blacklist[to] = false;
        }

        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;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees;
                tokensForDev += (fees * sellDevFee) / sellTotalFees;
                tokensForMarketing += (fees * sellMarketingFee) / sellTotalFees;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
                tokensForDev += (fees * buyDevFee) / buyTotalFees;
                tokensForMarketing += (fees * buyMarketingFee) / buyTotalFees;
            }

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

            amount -= fees;
        }

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

    function swapTokensForEth(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

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

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity +
            tokensForMarketing +
            tokensForDev;
        bool success;

        if (contractBalance == 0 || totalTokensToSwap == 0) {
            return;
        }

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

        uint256 liquidityTokens = (contractBalance * tokensForLiquidity) /
            totalTokensToSwap /
            2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);

        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH);

        uint256 ethBalance = address(this).balance.sub(initialETHBalance);

        uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap);

        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDev = 0;

        (success, ) = address(devWallet).call{value: ethForDev}("");

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

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":[],"name":"AutoNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sniper","type":"address"}],"name":"BoughtEarly","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":[],"name":"ManualNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"isBlacklistedAccount","type":"bool"}],"name":"blacklistAccounts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earlySellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"earlySellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableEarlySellTax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"onoff","type":"bool"}],"name":"setEarlySellTax","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":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_earlySellLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"_earlySellMarketingFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526001600b5f6101000a81548160ff0219169083151502179055505f600b60016101000a81548160ff0219169083151502179055505f600b60026101000a81548160ff0219169083151502179055506001600b60036101000a81548160ff0219169083151502179055506001600f5f6101000a81548160ff021916908315150217905550348015610092575f5ffd5b506040518060400160405280600b81526020017f4e6578697320546f6f6c730000000000000000000000000000000000000000008152506040518060400160405280600581526020017f4e45584953000000000000000000000000000000000000000000000000000000815250816003908161010e9190610d83565b50806004908161011e9190610d83565b5050505f61013061064f60201b60201c565b90508060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3505f737a250d5630b4cf539739df2c5dacb4c659f2488d90507377a7bf38a72cf2de2a21f95a84e807c6e38b386860065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073417f0bd5c20f3a2ce3f401c03a99c8b45726414a60075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061029e81600161065660201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561031b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061033f9190610eb0565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103a4573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103c89190610eb0565b6040518363ffffffff1660e01b81526004016103e5929190610eea565b6020604051808303815f875af1158015610401573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104259190610eb0565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff168152505061046b60a051600161065660201b60201c565b61047e60a051600161074a60201b60201c565b5f5f90505f5f90505f5f90505f5f90505f5f90505f5f90505f5f90505f5f90505f6b033b2e3c9fd0803ce8000000905060646002826104bd9190610f3e565b6104c79190610fac565b60088190555060646002826104dc9190610f3e565b6104e69190610fac565b600a819055506127106005826104fc9190610f3e565b6105069190610fac565b6009819055508860118190555087601281905550866013819055506013546012546011546105349190610fdc565b61053e9190610fdc565b60108190555085601581905550846016819055508360178190555060175460165460155461056c9190610fdc565b6105769190610fdc565b60148190555082601881905550816019819055506105a861059b6107e860201b60201c565b600161081060201b60201c565b6105b930600161081060201b60201c565b6105cc61dead600161081060201b60201c565b6105dd33600161081060201b60201c565b6105fb6105ee6107e860201b60201c565b600161065660201b60201c565b61060c30600161065660201b60201c565b61061f61dead600161065660201b60201c565b61063033600161065660201b60201c565b610640338261095260201b60201c565b505050505050505050506111b2565b5f33905090565b61066461064f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146106f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106e990611069565b60405180910390fd5b80601f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b8060205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61081e61064f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146108ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108a390611069565b60405180910390fd5b80601e5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161094691906110a1565b60405180910390a25050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036109c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b790611104565b60405180910390fd5b6109d15f8383610ae460201b60201c565b6109e681600254610ae960201b90919060201c565b600281905550610a3b815f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610ae960201b90919060201c565b5f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610ad89190611131565b60405180910390a35050565b505050565b5f5f8284610af79190610fdc565b905083811015610b3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3390611194565b60405180910390fd5b8091505092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680610bc157607f821691505b602082108103610bd457610bd3610b7d565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302610c367fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610bfb565b610c408683610bfb565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f610c84610c7f610c7a84610c58565b610c61565b610c58565b9050919050565b5f819050919050565b610c9d83610c6a565b610cb1610ca982610c8b565b848454610c07565b825550505050565b5f5f905090565b610cc8610cb9565b610cd3818484610c94565b505050565b5b81811015610cf657610ceb5f82610cc0565b600181019050610cd9565b5050565b601f821115610d3b57610d0c81610bda565b610d1584610bec565b81016020851015610d24578190505b610d38610d3085610bec565b830182610cd8565b50505b505050565b5f82821c905092915050565b5f610d5b5f1984600802610d40565b1980831691505092915050565b5f610d738383610d4c565b9150826002028217905092915050565b610d8c82610b46565b67ffffffffffffffff811115610da557610da4610b50565b5b610daf8254610baa565b610dba828285610cfa565b5f60209050601f831160018114610deb575f8415610dd9578287015190505b610de38582610d68565b865550610e4a565b601f198416610df986610bda565b5f5b82811015610e2057848901518255600182019150602085019450602081019050610dfb565b86831015610e3d5784890151610e39601f891682610d4c565b8355505b6001600288020188555050505b505050505050565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610e7f82610e56565b9050919050565b610e8f81610e75565b8114610e99575f5ffd5b50565b5f81519050610eaa81610e86565b92915050565b5f60208284031215610ec557610ec4610e52565b5b5f610ed284828501610e9c565b91505092915050565b610ee481610e75565b82525050565b5f604082019050610efd5f830185610edb565b610f0a6020830184610edb565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610f4882610c58565b9150610f5383610c58565b9250828202610f6181610c58565b91508282048414831517610f7857610f77610f11565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f610fb682610c58565b9150610fc183610c58565b925082610fd157610fd0610f7f565b5b828204905092915050565b5f610fe682610c58565b9150610ff183610c58565b925082820190508082111561100957611008610f11565b5b92915050565b5f82825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f61105360208361100f565b915061105e8261101f565b602082019050919050565b5f6020820190508181035f83015261108081611047565b9050919050565b5f8115159050919050565b61109b81611087565b82525050565b5f6020820190506110b45f830184611092565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f6110ee601f8361100f565b91506110f9826110ba565b602082019050919050565b5f6020820190508181035f83015261111b816110e2565b9050919050565b61112b81610c58565b82525050565b5f6020820190506111445f830184611122565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f61117e601b8361100f565b91506111898261114a565b602082019050919050565b5f6020820190508181035f8301526111ab81611172565b9050919050565b60805160a05161572a6112045f395f81816112f001528181611ad301528181612e9c01526132a801525f8181610eaa01528181612e4401528181614018015281816140f7015261411e015261572a5ff3fe60806040526004361061038f575f3560e01c806392136913116101db578063c024666811610101578063e2f456051161009f578063f63743421161006e578063f637434214610d26578063f8b45b0514610d50578063fe575a8714610d7a578063ff935af614610db657610396565b8063e2f4560514610c80578063e884f26014610caa578063f11a24d314610cd4578063f2fde38b14610cfe57610396565b8063c8c8ebe4116100db578063c8c8ebe414610bb4578063d257b34f14610bde578063d85ba06314610c1a578063dd62ed3e14610c4457610396565b8063c024666814610b3a578063c18bc19514610b62578063c876d0b914610b8a57610396565b8063a0d82dc511610179578063a9059cbb11610148578063a9059cbb14610a70578063aacebbe314610aac578063b62496f514610ad4578063bbc0c74214610b1057610396565b8063a0d82dc5146109b8578063a2657778146109e2578063a457c2d714610a0a578063a4d15b6414610a4657610396565b80639a7a23d6116101b55780639a7a23d6146109145780639c3b4fdc1461093c5780639ccf6e21146109665780639fccce321461098e57610396565b80639213691314610898578063924de9b7146108c257806395d89b41146108ea57610396565b80634a62bb65116102c0578063751039fc1161025e5780638095d5641161022d5780638095d564146108065780638a8c523c1461082e5780638da5cb5b146108445780638ea5220f1461086e57610396565b8063751039fc146107605780637571336a1461078a57806375f0a874146107b25780637bce5a04146107dc57610396565b80636a486a8e1161029a5780636a486a8e146106ba5780636ddd1713146106e457806370a082311461070e578063715018a61461074a57610396565b80634a62bb651461062a5780634fbee19314610654578063541a43cf1461069057610396565b80631f3fed8f1161032d5780632bf3d42d116103075780632bf3d42d14610570578063313ce5671461059a57806339509351146105c457806349bd5a5e1461060057610396565b80631f3fed8f146104e2578063203e727e1461050c57806323b872dd1461053457610396565b80631694505e116103695780631694505e1461043c57806318160ddd146104665780631816467f146104905780631a8145bb146104b857610396565b806306fdde031461039a578063095ea7b3146103c457806310d5de531461040057610396565b3661039657005b5f5ffd5b3480156103a5575f5ffd5b506103ae610dde565b6040516103bb919061427f565b60405180910390f35b3480156103cf575f5ffd5b506103ea60048036038101906103e5919061433d565b610e6e565b6040516103f79190614395565b60405180910390f35b34801561040b575f5ffd5b50610426600480360381019061042191906143ae565b610e8b565b6040516104339190614395565b60405180910390f35b348015610447575f5ffd5b50610450610ea8565b60405161045d9190614434565b60405180910390f35b348015610471575f5ffd5b5061047a610ecc565b604051610487919061445c565b60405180910390f35b34801561049b575f5ffd5b506104b660048036038101906104b191906143ae565b610ed5565b005b3480156104c3575f5ffd5b506104cc611029565b6040516104d9919061445c565b60405180910390f35b3480156104ed575f5ffd5b506104f661102f565b604051610503919061445c565b60405180910390f35b348015610517575f5ffd5b50610532600480360381019061052d9190614475565b611035565b005b34801561053f575f5ffd5b5061055a600480360381019061055591906144a0565b61115e565b6040516105679190614395565b60405180910390f35b34801561057b575f5ffd5b50610584611232565b604051610591919061445c565b60405180910390f35b3480156105a5575f5ffd5b506105ae611238565b6040516105bb919061450b565b60405180910390f35b3480156105cf575f5ffd5b506105ea60048036038101906105e5919061433d565b611240565b6040516105f79190614395565b60405180910390f35b34801561060b575f5ffd5b506106146112ee565b6040516106219190614533565b60405180910390f35b348015610635575f5ffd5b5061063e611312565b60405161064b9190614395565b60405180910390f35b34801561065f575f5ffd5b5061067a600480360381019061067591906143ae565b611324565b6040516106879190614395565b60405180910390f35b34801561069b575f5ffd5b506106a4611376565b6040516106b1919061445c565b60405180910390f35b3480156106c5575f5ffd5b506106ce61137c565b6040516106db919061445c565b60405180910390f35b3480156106ef575f5ffd5b506106f8611382565b6040516107059190614395565b60405180910390f35b348015610719575f5ffd5b50610734600480360381019061072f91906143ae565b611395565b604051610741919061445c565b60405180910390f35b348015610755575f5ffd5b5061075e6113da565b005b34801561076b575f5ffd5b5061077461152d565b6040516107819190614395565b60405180910390f35b348015610795575f5ffd5b506107b060048036038101906107ab9190614576565b6115e4565b005b3480156107bd575f5ffd5b506107c66116d2565b6040516107d39190614533565b60405180910390f35b3480156107e7575f5ffd5b506107f06116f7565b6040516107fd919061445c565b60405180910390f35b348015610811575f5ffd5b5061082c600480360381019061082791906145b4565b6116fd565b005b348015610839575f5ffd5b506108426117d0565b005b34801561084f575f5ffd5b506108586118a5565b6040516108659190614533565b60405180910390f35b348015610879575f5ffd5b506108826118cd565b60405161088f9190614533565b60405180910390f35b3480156108a3575f5ffd5b506108ac6118f2565b6040516108b9919061445c565b60405180910390f35b3480156108cd575f5ffd5b506108e860048036038101906108e39190614604565b6118f8565b005b3480156108f5575f5ffd5b506108fe6119ab565b60405161090b919061427f565b60405180910390f35b34801561091f575f5ffd5b5061093a60048036038101906109359190614576565b611a3b565b005b348015610947575f5ffd5b50610950611b6d565b60405161095d919061445c565b60405180910390f35b348015610971575f5ffd5b5061098c6004803603810190610987919061476f565b611b73565b005b348015610999575f5ffd5b506109a2611cda565b6040516109af919061445c565b60405180910390f35b3480156109c3575f5ffd5b506109cc611ce0565b6040516109d9919061445c565b60405180910390f35b3480156109ed575f5ffd5b50610a086004803603810190610a039190614604565b611ce6565b005b348015610a15575f5ffd5b50610a306004803603810190610a2b919061433d565b611d99565b604051610a3d9190614395565b60405180910390f35b348015610a51575f5ffd5b50610a5a611e61565b604051610a679190614395565b60405180910390f35b348015610a7b575f5ffd5b50610a966004803603810190610a91919061433d565b611e74565b604051610aa39190614395565b60405180910390f35b348015610ab7575f5ffd5b50610ad26004803603810190610acd91906143ae565b611e91565b005b348015610adf575f5ffd5b50610afa6004803603810190610af591906143ae565b611fe5565b604051610b079190614395565b60405180910390f35b348015610b1b575f5ffd5b50610b24612001565b604051610b319190614395565b60405180910390f35b348015610b45575f5ffd5b50610b606004803603810190610b5b9190614576565b612014565b005b348015610b6d575f5ffd5b50610b886004803603810190610b839190614475565b612150565b005b348015610b95575f5ffd5b50610b9e612279565b604051610bab9190614395565b60405180910390f35b348015610bbf575f5ffd5b50610bc861228b565b604051610bd5919061445c565b60405180910390f35b348015610be9575f5ffd5b50610c046004803603810190610bff9190614475565b612291565b604051610c119190614395565b60405180910390f35b348015610c25575f5ffd5b50610c2e6123ff565b604051610c3b919061445c565b60405180910390f35b348015610c4f575f5ffd5b50610c6a6004803603810190610c6591906147c9565b612405565b604051610c77919061445c565b60405180910390f35b348015610c8b575f5ffd5b50610c94612487565b604051610ca1919061445c565b60405180910390f35b348015610cb5575f5ffd5b50610cbe61248d565b604051610ccb9190614395565b60405180910390f35b348015610cdf575f5ffd5b50610ce8612544565b604051610cf5919061445c565b60405180910390f35b348015610d09575f5ffd5b50610d246004803603810190610d1f91906143ae565b61254a565b005b348015610d31575f5ffd5b50610d3a61270c565b604051610d47919061445c565b60405180910390f35b348015610d5b575f5ffd5b50610d64612712565b604051610d71919061445c565b60405180910390f35b348015610d85575f5ffd5b50610da06004803603810190610d9b91906143ae565b612718565b604051610dad9190614395565b60405180910390f35b348015610dc1575f5ffd5b50610ddc6004803603810190610dd79190614807565b61276a565b005b606060038054610ded906148ab565b80601f0160208091040260200160405190810160405280929190818152602001828054610e19906148ab565b8015610e645780601f10610e3b57610100808354040283529160200191610e64565b820191905f5260205f20905b815481529060010190602001808311610e4757829003601f168201915b5050505050905090565b5f610e81610e7a61284d565b8484612854565b6001905092915050565b601f602052805f5260405f205f915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f600254905090565b610edd61284d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6290614925565b60405180910390fd5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a38060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601b5481565b601a5481565b61103d61284d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c290614925565b60405180910390fd5b670de0b6b3a76400006103e860056110e1610ecc565b6110eb9190614970565b6110f591906149de565b6110ff91906149de565b811015611141576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113890614a7e565b60405180910390fd5b670de0b6b3a7640000816111559190614970565b60088190555050565b5f61116a848484612a17565b6112278461117661284d565b611222856040518060600160405280602881526020016156a86028913960015f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6111d961284d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546138599092919063ffffffff16565b612854565b600190509392505050565b60195481565b5f6012905090565b5f6112e461124c61284d565b846112df8560015f61125c61284d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546138bb90919063ffffffff16565b612854565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600b5f9054906101000a900460ff1681565b5f601e5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b60185481565b60145481565b600b60029054906101000a900460ff1681565b5f5f5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6113e261284d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146790614925565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f60055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b5f61153661284d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115bb90614925565b60405180910390fd5b5f600b5f6101000a81548160ff0219169083151502179055506001905090565b6115ec61284d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461167a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167190614925565b60405180910390fd5b80601f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60115481565b61170561284d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611793576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178a90614925565b60405180910390fd5b8260118190555081601281905550806013819055506013546012546011546117bb9190614a9c565b6117c59190614a9c565b601081905550505050565b6117d861284d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611866576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185d90614925565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff02191690831515021790555043601d81905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60155481565b61190061284d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461198e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198590614925565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b6060600480546119ba906148ab565b80601f01602080910402602001604051908101604052809291908181526020018280546119e6906148ab565b8015611a315780601f10611a0857610100808354040283529160200191611a31565b820191905f5260205f20905b815481529060010190602001808311611a1457829003601f168201915b5050505050905090565b611a4361284d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ad1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac890614925565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5690614b3f565b60405180910390fd5b611b698282613918565b5050565b60135481565b611b7b61284d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0090614925565b60405180910390fd5b5f825111611c4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4390614ba7565b60405180910390fd5b5f5f90505b8251811015611cd55781600e5f858481518110611c7157611c70614bc5565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508080600101915050611c51565b505050565b601c5481565b60175481565b611cee61284d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7390614925565b60405180910390fd5b80600b60036101000a81548160ff02191690831515021790555050565b5f611e57611da561284d565b84611e52856040518060600160405280602581526020016156d06025913960015f611dce61284d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546138599092919063ffffffff16565b612854565b6001905092915050565b600b60039054906101000a900460ff1681565b5f611e87611e8061284d565b8484612a17565b6001905092915050565b611e9961284d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1e90614925565b60405180910390fd5b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a38060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60208052805f5260405f205f915054906101000a900460ff1681565b600b60019054906101000a900460ff1681565b61201c61284d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a190614925565b60405180910390fd5b80601e5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516121449190614395565b60405180910390a25050565b61215861284d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121dd90614925565b60405180910390fd5b670de0b6b3a76400006103e8600f6121fc610ecc565b6122069190614970565b61221091906149de565b61221a91906149de565b81101561225c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225390614c62565b60405180910390fd5b670de0b6b3a7640000816122709190614970565b600a8190555050565b600f5f9054906101000a900460ff1681565b60085481565b5f61229a61284d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612328576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231f90614925565b60405180910390fd5b620186a06001612336610ecc565b6123409190614970565b61234a91906149de565b82101561238c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238390614cf0565b60405180910390fd5b6103e86005612399610ecc565b6123a39190614970565b6123ad91906149de565b8211156123ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e690614d7e565b60405180910390fd5b8160098190555060019050919050565b60105481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60095481565b5f61249661284d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612524576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251b90614925565b60405180910390fd5b5f600f5f6101000a81548160ff0219169083151502179055506001905090565b60125481565b61255261284d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125d790614925565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361264e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264590614e0c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60165481565b600a5481565b5f600e5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b61277261284d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612800576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127f790614925565b60405180910390fd5b84601581905550836016819055508260178190555081601881905550806019819055506017546016546015546128369190614a9c565b6128409190614a9c565b6014819055505050505050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036128c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b990614e9a565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612930576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292790614f28565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612a0a919061445c565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612a85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a7c90614fb6565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612af3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aea90615044565b60405180910390fd5b600e5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015612b915750600e5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b612bd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bc7906150d2565b60405180910390fd5b5f8103612be757612be283835f6139b6565b613854565b600b5f9054906101000a900460ff161561328e57612c036118a5565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612c715750612c416118a5565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612ca957505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612ce3575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612cfc5750600560149054906101000a900460ff16155b1561328d57600b60019054906101000a900460ff16612df057601e5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612db05750601e5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b612def576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612de69061513a565b60405180910390fd5b5b600f5f9054906101000a900460ff1615612fb357612e0c6118a5565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612e9357507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612eeb57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612fb25743600c5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410612f6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f66906151ee565b60405180910390fd5b43600c5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b5b60205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156130505750601f5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156130f75760085481111561309a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130919061527c565b60405180910390fd5b600a546130a683611395565b826130b19190614a9c565b11156130f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130e9906152e4565b60405180910390fd5b61328c565b60205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156131945750601f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156131e3576008548111156131de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131d590615372565b60405180910390fd5b61328b565b601f5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661328a57600a5461323d83611395565b826132489190614a9c565b1115613289576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613280906152e4565b60405180910390fd5b5b5b5b5b5b5f601d5461329c9190614a9c565b43111580156132f757507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156133435750737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561339d575f600e5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505b5f6133a730611395565b90505f60095482101590508080156133cb5750600b60029054906101000a900460ff165b80156133e45750600560149054906101000a900460ff16155b8015613437575060205f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b801561348a5750601e5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156134dd5750601e5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15613520576001600560146101000a81548160ff021916908315150217905550613505613c3f565b5f600560146101000a81548160ff0219169083151502179055505b5f600560149054906101000a900460ff16159050601e5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806135cf5750601e5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b156135d8575f90505b5f5f905081156138445760205f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561363957505f601454115b1561370357613666606461365860145488613e6d90919063ffffffff16565b613ee490919063ffffffff16565b9050601454601654826136799190614970565b61368391906149de565b601b5f8282546136939190614a9c565b92505081905550601454601754826136ab9190614970565b6136b591906149de565b601c5f8282546136c59190614a9c565b92505081905550601454601554826136dd9190614970565b6136e791906149de565b601a5f8282546136f79190614a9c565b92505081905550613821565b60205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561375a57505f601054115b1561382057613787606461377960105488613e6d90919063ffffffff16565b613ee490919063ffffffff16565b90506010546012548261379a9190614970565b6137a491906149de565b601b5f8282546137b49190614a9c565b92505081905550601054601354826137cc9190614970565b6137d691906149de565b601c5f8282546137e69190614a9c565b92505081905550601054601154826137fe9190614970565b61380891906149de565b601a5f8282546138189190614a9c565b925050819055505b5b5f811115613835576138348730836139b6565b5b80856138419190615390565b94505b61384f8787876139b6565b505050505b505050565b5f8383111582906138a0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613897919061427f565b60405180910390fd5b505f83856138ae9190615390565b9050809150509392505050565b5f5f82846138c99190614a9c565b90508381101561390e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139059061540d565b60405180910390fd5b8091505092915050565b8060205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613a24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a1b90614fb6565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613a92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a8990615044565b60405180910390fd5b613a9d838383613f2d565b613b0681604051806060016040528060268152602001615682602691395f5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546138599092919063ffffffff16565b5f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550613b95815f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546138bb90919063ffffffff16565b5f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613c32919061445c565b60405180910390a3505050565b5f613c4930611395565b90505f601c54601a54601b54613c5f9190614a9c565b613c699190614a9c565b90505f5f831480613c7957505f82145b15613c8657505050613e6b565b6014600954613c959190614970565b831115613cae576014600954613cab9190614970565b92505b5f600283601b5486613cc09190614970565b613cca91906149de565b613cd491906149de565b90505f613cea8286613f3290919063ffffffff16565b90505f479050613cf982613f7b565b5f613d0d8247613f3290919063ffffffff16565b90505f613d3787613d29601c5485613e6d90919063ffffffff16565b613ee490919063ffffffff16565b90505f601b819055505f601a819055505f601c8190555060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681604051613d9390615458565b5f6040518083038185875af1925050503d805f8114613dcd576040519150601f19603f3d011682016040523d82523d5f602084013e613dd2565b606091505b50508096505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613e1d90615458565b5f6040518083038185875af1925050503d805f8114613e57576040519150601f19603f3d011682016040523d82523d5f602084013e613e5c565b606091505b50508096505050505050505050505b565b5f5f8303613e7d575f9050613ede565b5f8284613e8a9190614970565b9050828482613e9991906149de565b14613ed9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ed0906154dc565b60405180910390fd5b809150505b92915050565b5f613f2583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506141ae565b905092915050565b505050565b5f613f7383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613859565b905092915050565b5f600267ffffffffffffffff811115613f9757613f96614633565b5b604051908082528060200260200182016040528015613fc55781602001602082028036833780820191505090505b50905030815f81518110613fdc57613fdb614bc5565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561407f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906140a3919061550e565b816001815181106140b7576140b6614bc5565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061411c307f000000000000000000000000000000000000000000000000000000000000000084612854565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b815260040161417d959493929190615629565b5f604051808303815f87803b158015614194575f5ffd5b505af11580156141a6573d5f5f3e3d5ffd5b505050505050565b5f5f831182906141f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016141eb919061427f565b60405180910390fd5b505f838561420291906149de565b9050809150509392505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f6142518261420f565b61425b8185614219565b935061426b818560208601614229565b61427481614237565b840191505092915050565b5f6020820190508181035f8301526142978184614247565b905092915050565b5f604051905090565b5f5ffd5b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6142d9826142b0565b9050919050565b6142e9816142cf565b81146142f3575f5ffd5b50565b5f81359050614304816142e0565b92915050565b5f819050919050565b61431c8161430a565b8114614326575f5ffd5b50565b5f8135905061433781614313565b92915050565b5f5f60408385031215614353576143526142a8565b5b5f614360858286016142f6565b925050602061437185828601614329565b9150509250929050565b5f8115159050919050565b61438f8161437b565b82525050565b5f6020820190506143a85f830184614386565b92915050565b5f602082840312156143c3576143c26142a8565b5b5f6143d0848285016142f6565b91505092915050565b5f819050919050565b5f6143fc6143f76143f2846142b0565b6143d9565b6142b0565b9050919050565b5f61440d826143e2565b9050919050565b5f61441e82614403565b9050919050565b61442e81614414565b82525050565b5f6020820190506144475f830184614425565b92915050565b6144568161430a565b82525050565b5f60208201905061446f5f83018461444d565b92915050565b5f6020828403121561448a576144896142a8565b5b5f61449784828501614329565b91505092915050565b5f5f5f606084860312156144b7576144b66142a8565b5b5f6144c4868287016142f6565b93505060206144d5868287016142f6565b92505060406144e686828701614329565b9150509250925092565b5f60ff82169050919050565b614505816144f0565b82525050565b5f60208201905061451e5f8301846144fc565b92915050565b61452d816142cf565b82525050565b5f6020820190506145465f830184614524565b92915050565b6145558161437b565b811461455f575f5ffd5b50565b5f813590506145708161454c565b92915050565b5f5f6040838503121561458c5761458b6142a8565b5b5f614599858286016142f6565b92505060206145aa85828601614562565b9150509250929050565b5f5f5f606084860312156145cb576145ca6142a8565b5b5f6145d886828701614329565b93505060206145e986828701614329565b92505060406145fa86828701614329565b9150509250925092565b5f60208284031215614619576146186142a8565b5b5f61462684828501614562565b91505092915050565b5f5ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61466982614237565b810181811067ffffffffffffffff8211171561468857614687614633565b5b80604052505050565b5f61469a61429f565b90506146a68282614660565b919050565b5f67ffffffffffffffff8211156146c5576146c4614633565b5b602082029050602081019050919050565b5f5ffd5b5f6146ec6146e7846146ab565b614691565b9050808382526020820190506020840283018581111561470f5761470e6146d6565b5b835b81811015614738578061472488826142f6565b845260208401935050602081019050614711565b5050509392505050565b5f82601f8301126147565761475561462f565b5b81356147668482602086016146da565b91505092915050565b5f5f60408385031215614785576147846142a8565b5b5f83013567ffffffffffffffff8111156147a2576147a16142ac565b5b6147ae85828601614742565b92505060206147bf85828601614562565b9150509250929050565b5f5f604083850312156147df576147de6142a8565b5b5f6147ec858286016142f6565b92505060206147fd858286016142f6565b9150509250929050565b5f5f5f5f5f60a086880312156148205761481f6142a8565b5b5f61482d88828901614329565b955050602061483e88828901614329565b945050604061484f88828901614329565b935050606061486088828901614329565b925050608061487188828901614329565b9150509295509295909350565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806148c257607f821691505b6020821081036148d5576148d461487e565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f61490f602083614219565b915061491a826148db565b602082019050919050565b5f6020820190508181035f83015261493c81614903565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61497a8261430a565b91506149858361430a565b92508282026149938161430a565b915082820484148315176149aa576149a9614943565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6149e88261430a565b91506149f38361430a565b925082614a0357614a026149b1565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e74205f8201527f6c6f776572207468616e20302e35250000000000000000000000000000000000602082015250565b5f614a68602f83614219565b9150614a7382614a0e565b604082019050919050565b5f6020820190508181035f830152614a9581614a5c565b9050919050565b5f614aa68261430a565b9150614ab18361430a565b9250828201905080821115614ac957614ac8614943565b5b92915050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f614b29603983614219565b9150614b3482614acf565b604082019050919050565b5f6020820190508181035f830152614b5681614b1d565b9050919050565b7f4163636f756e7473206c6973742063616e6e6f7420626520656d7074792e00005f82015250565b5f614b91601e83614219565b9150614b9c82614b5d565b602082019050919050565b5f6020820190508181035f830152614bbe81614b85565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e205f8201527f312e352500000000000000000000000000000000000000000000000000000000602082015250565b5f614c4c602483614219565b9150614c5782614bf2565b604082019050919050565b5f6020820190508181035f830152614c7981614c40565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b5f614cda603583614219565b9150614ce582614c80565b604082019050919050565b5f6020820190508181035f830152614d0781614cce565b9050919050565b7f5377617020616d6f756e742063616e6e6f7420626520686967686572207468615f8201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b5f614d68603483614219565b9150614d7382614d0e565b604082019050919050565b5f6020820190508181035f830152614d9581614d5c565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f614df6602683614219565b9150614e0182614d9c565b604082019050919050565b5f6020820190508181035f830152614e2381614dea565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f614e84602483614219565b9150614e8f82614e2a565b604082019050919050565b5f6020820190508181035f830152614eb181614e78565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f614f12602283614219565b9150614f1d82614eb8565b604082019050919050565b5f6020820190508181035f830152614f3f81614f06565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f614fa0602583614219565b9150614fab82614f46565b604082019050919050565b5f6020820190508181035f830152614fcd81614f94565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f61502e602383614219565b915061503982614fd4565b604082019050919050565b5f6020820190508181035f83015261505b81615022565b9050919050565b7f596f752068617665206265656e20626c61636b6c69737465642066726f6d20745f8201527f72616e73666572696e6720746f6b656e73000000000000000000000000000000602082015250565b5f6150bc603183614219565b91506150c782615062565b604082019050919050565b5f6020820190508181035f8301526150e9816150b0565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f615124601683614219565b915061512f826150f0565b602082019050919050565b5f6020820190508181035f83015261515181615118565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c5f8201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b5f6151d8604983614219565b91506151e382615158565b606082019050919050565b5f6020820190508181035f830152615205816151cc565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f615266603583614219565b91506152718261520c565b604082019050919050565b5f6020820190508181035f8301526152938161525a565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f6152ce601383614219565b91506152d98261529a565b602082019050919050565b5f6020820190508181035f8301526152fb816152c2565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f61535c603683614219565b915061536782615302565b604082019050919050565b5f6020820190508181035f83015261538981615350565b9050919050565b5f61539a8261430a565b91506153a58361430a565b92508282039050818111156153bd576153bc614943565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f6153f7601b83614219565b9150615402826153c3565b602082019050919050565b5f6020820190508181035f830152615424816153eb565b9050919050565b5f81905092915050565b50565b5f6154435f8361542b565b915061544e82615435565b5f82019050919050565b5f61546282615438565b9150819050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f6154c6602183614219565b91506154d18261546c565b604082019050919050565b5f6020820190508181035f8301526154f3816154ba565b9050919050565b5f81519050615508816142e0565b92915050565b5f60208284031215615523576155226142a8565b5b5f615530848285016154fa565b91505092915050565b5f819050919050565b5f61555c61555761555284615539565b6143d9565b61430a565b9050919050565b61556c81615542565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6155a4816142cf565b82525050565b5f6155b5838361559b565b60208301905092915050565b5f602082019050919050565b5f6155d782615572565b6155e1818561557c565b93506155ec8361558c565b805f5b8381101561561c57815161560388826155aa565b975061560e836155c1565b9250506001810190506155ef565b5085935050505092915050565b5f60a08201905061563c5f83018861444d565b6156496020830187615563565b818103604083015261565b81866155cd565b905061566a6060830185614524565b615677608083018461444d565b969550505050505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212206664cfca979cc4542f51fcbb337a47ae29cd657a2908d005c227a1f047be1df164736f6c634300081b0033

Deployed Bytecode

0x60806040526004361061038f575f3560e01c806392136913116101db578063c024666811610101578063e2f456051161009f578063f63743421161006e578063f637434214610d26578063f8b45b0514610d50578063fe575a8714610d7a578063ff935af614610db657610396565b8063e2f4560514610c80578063e884f26014610caa578063f11a24d314610cd4578063f2fde38b14610cfe57610396565b8063c8c8ebe4116100db578063c8c8ebe414610bb4578063d257b34f14610bde578063d85ba06314610c1a578063dd62ed3e14610c4457610396565b8063c024666814610b3a578063c18bc19514610b62578063c876d0b914610b8a57610396565b8063a0d82dc511610179578063a9059cbb11610148578063a9059cbb14610a70578063aacebbe314610aac578063b62496f514610ad4578063bbc0c74214610b1057610396565b8063a0d82dc5146109b8578063a2657778146109e2578063a457c2d714610a0a578063a4d15b6414610a4657610396565b80639a7a23d6116101b55780639a7a23d6146109145780639c3b4fdc1461093c5780639ccf6e21146109665780639fccce321461098e57610396565b80639213691314610898578063924de9b7146108c257806395d89b41146108ea57610396565b80634a62bb65116102c0578063751039fc1161025e5780638095d5641161022d5780638095d564146108065780638a8c523c1461082e5780638da5cb5b146108445780638ea5220f1461086e57610396565b8063751039fc146107605780637571336a1461078a57806375f0a874146107b25780637bce5a04146107dc57610396565b80636a486a8e1161029a5780636a486a8e146106ba5780636ddd1713146106e457806370a082311461070e578063715018a61461074a57610396565b80634a62bb651461062a5780634fbee19314610654578063541a43cf1461069057610396565b80631f3fed8f1161032d5780632bf3d42d116103075780632bf3d42d14610570578063313ce5671461059a57806339509351146105c457806349bd5a5e1461060057610396565b80631f3fed8f146104e2578063203e727e1461050c57806323b872dd1461053457610396565b80631694505e116103695780631694505e1461043c57806318160ddd146104665780631816467f146104905780631a8145bb146104b857610396565b806306fdde031461039a578063095ea7b3146103c457806310d5de531461040057610396565b3661039657005b5f5ffd5b3480156103a5575f5ffd5b506103ae610dde565b6040516103bb919061427f565b60405180910390f35b3480156103cf575f5ffd5b506103ea60048036038101906103e5919061433d565b610e6e565b6040516103f79190614395565b60405180910390f35b34801561040b575f5ffd5b50610426600480360381019061042191906143ae565b610e8b565b6040516104339190614395565b60405180910390f35b348015610447575f5ffd5b50610450610ea8565b60405161045d9190614434565b60405180910390f35b348015610471575f5ffd5b5061047a610ecc565b604051610487919061445c565b60405180910390f35b34801561049b575f5ffd5b506104b660048036038101906104b191906143ae565b610ed5565b005b3480156104c3575f5ffd5b506104cc611029565b6040516104d9919061445c565b60405180910390f35b3480156104ed575f5ffd5b506104f661102f565b604051610503919061445c565b60405180910390f35b348015610517575f5ffd5b50610532600480360381019061052d9190614475565b611035565b005b34801561053f575f5ffd5b5061055a600480360381019061055591906144a0565b61115e565b6040516105679190614395565b60405180910390f35b34801561057b575f5ffd5b50610584611232565b604051610591919061445c565b60405180910390f35b3480156105a5575f5ffd5b506105ae611238565b6040516105bb919061450b565b60405180910390f35b3480156105cf575f5ffd5b506105ea60048036038101906105e5919061433d565b611240565b6040516105f79190614395565b60405180910390f35b34801561060b575f5ffd5b506106146112ee565b6040516106219190614533565b60405180910390f35b348015610635575f5ffd5b5061063e611312565b60405161064b9190614395565b60405180910390f35b34801561065f575f5ffd5b5061067a600480360381019061067591906143ae565b611324565b6040516106879190614395565b60405180910390f35b34801561069b575f5ffd5b506106a4611376565b6040516106b1919061445c565b60405180910390f35b3480156106c5575f5ffd5b506106ce61137c565b6040516106db919061445c565b60405180910390f35b3480156106ef575f5ffd5b506106f8611382565b6040516107059190614395565b60405180910390f35b348015610719575f5ffd5b50610734600480360381019061072f91906143ae565b611395565b604051610741919061445c565b60405180910390f35b348015610755575f5ffd5b5061075e6113da565b005b34801561076b575f5ffd5b5061077461152d565b6040516107819190614395565b60405180910390f35b348015610795575f5ffd5b506107b060048036038101906107ab9190614576565b6115e4565b005b3480156107bd575f5ffd5b506107c66116d2565b6040516107d39190614533565b60405180910390f35b3480156107e7575f5ffd5b506107f06116f7565b6040516107fd919061445c565b60405180910390f35b348015610811575f5ffd5b5061082c600480360381019061082791906145b4565b6116fd565b005b348015610839575f5ffd5b506108426117d0565b005b34801561084f575f5ffd5b506108586118a5565b6040516108659190614533565b60405180910390f35b348015610879575f5ffd5b506108826118cd565b60405161088f9190614533565b60405180910390f35b3480156108a3575f5ffd5b506108ac6118f2565b6040516108b9919061445c565b60405180910390f35b3480156108cd575f5ffd5b506108e860048036038101906108e39190614604565b6118f8565b005b3480156108f5575f5ffd5b506108fe6119ab565b60405161090b919061427f565b60405180910390f35b34801561091f575f5ffd5b5061093a60048036038101906109359190614576565b611a3b565b005b348015610947575f5ffd5b50610950611b6d565b60405161095d919061445c565b60405180910390f35b348015610971575f5ffd5b5061098c6004803603810190610987919061476f565b611b73565b005b348015610999575f5ffd5b506109a2611cda565b6040516109af919061445c565b60405180910390f35b3480156109c3575f5ffd5b506109cc611ce0565b6040516109d9919061445c565b60405180910390f35b3480156109ed575f5ffd5b50610a086004803603810190610a039190614604565b611ce6565b005b348015610a15575f5ffd5b50610a306004803603810190610a2b919061433d565b611d99565b604051610a3d9190614395565b60405180910390f35b348015610a51575f5ffd5b50610a5a611e61565b604051610a679190614395565b60405180910390f35b348015610a7b575f5ffd5b50610a966004803603810190610a91919061433d565b611e74565b604051610aa39190614395565b60405180910390f35b348015610ab7575f5ffd5b50610ad26004803603810190610acd91906143ae565b611e91565b005b348015610adf575f5ffd5b50610afa6004803603810190610af591906143ae565b611fe5565b604051610b079190614395565b60405180910390f35b348015610b1b575f5ffd5b50610b24612001565b604051610b319190614395565b60405180910390f35b348015610b45575f5ffd5b50610b606004803603810190610b5b9190614576565b612014565b005b348015610b6d575f5ffd5b50610b886004803603810190610b839190614475565b612150565b005b348015610b95575f5ffd5b50610b9e612279565b604051610bab9190614395565b60405180910390f35b348015610bbf575f5ffd5b50610bc861228b565b604051610bd5919061445c565b60405180910390f35b348015610be9575f5ffd5b50610c046004803603810190610bff9190614475565b612291565b604051610c119190614395565b60405180910390f35b348015610c25575f5ffd5b50610c2e6123ff565b604051610c3b919061445c565b60405180910390f35b348015610c4f575f5ffd5b50610c6a6004803603810190610c6591906147c9565b612405565b604051610c77919061445c565b60405180910390f35b348015610c8b575f5ffd5b50610c94612487565b604051610ca1919061445c565b60405180910390f35b348015610cb5575f5ffd5b50610cbe61248d565b604051610ccb9190614395565b60405180910390f35b348015610cdf575f5ffd5b50610ce8612544565b604051610cf5919061445c565b60405180910390f35b348015610d09575f5ffd5b50610d246004803603810190610d1f91906143ae565b61254a565b005b348015610d31575f5ffd5b50610d3a61270c565b604051610d47919061445c565b60405180910390f35b348015610d5b575f5ffd5b50610d64612712565b604051610d71919061445c565b60405180910390f35b348015610d85575f5ffd5b50610da06004803603810190610d9b91906143ae565b612718565b604051610dad9190614395565b60405180910390f35b348015610dc1575f5ffd5b50610ddc6004803603810190610dd79190614807565b61276a565b005b606060038054610ded906148ab565b80601f0160208091040260200160405190810160405280929190818152602001828054610e19906148ab565b8015610e645780601f10610e3b57610100808354040283529160200191610e64565b820191905f5260205f20905b815481529060010190602001808311610e4757829003601f168201915b5050505050905090565b5f610e81610e7a61284d565b8484612854565b6001905092915050565b601f602052805f5260405f205f915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b5f600254905090565b610edd61284d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6290614925565b60405180910390fd5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a38060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601b5481565b601a5481565b61103d61284d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c290614925565b60405180910390fd5b670de0b6b3a76400006103e860056110e1610ecc565b6110eb9190614970565b6110f591906149de565b6110ff91906149de565b811015611141576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113890614a7e565b60405180910390fd5b670de0b6b3a7640000816111559190614970565b60088190555050565b5f61116a848484612a17565b6112278461117661284d565b611222856040518060600160405280602881526020016156a86028913960015f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6111d961284d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546138599092919063ffffffff16565b612854565b600190509392505050565b60195481565b5f6012905090565b5f6112e461124c61284d565b846112df8560015f61125c61284d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546138bb90919063ffffffff16565b612854565b6001905092915050565b7f0000000000000000000000004c9cf251f9744188ecd64641d0d2943ea7df740181565b600b5f9054906101000a900460ff1681565b5f601e5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b60185481565b60145481565b600b60029054906101000a900460ff1681565b5f5f5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6113e261284d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146790614925565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f60055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b5f61153661284d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115bb90614925565b60405180910390fd5b5f600b5f6101000a81548160ff0219169083151502179055506001905090565b6115ec61284d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461167a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167190614925565b60405180910390fd5b80601f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60115481565b61170561284d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611793576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178a90614925565b60405180910390fd5b8260118190555081601281905550806013819055506013546012546011546117bb9190614a9c565b6117c59190614a9c565b601081905550505050565b6117d861284d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611866576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185d90614925565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff02191690831515021790555043601d81905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60155481565b61190061284d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461198e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198590614925565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b6060600480546119ba906148ab565b80601f01602080910402602001604051908101604052809291908181526020018280546119e6906148ab565b8015611a315780601f10611a0857610100808354040283529160200191611a31565b820191905f5260205f20905b815481529060010190602001808311611a1457829003601f168201915b5050505050905090565b611a4361284d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ad1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac890614925565b60405180910390fd5b7f0000000000000000000000004c9cf251f9744188ecd64641d0d2943ea7df740173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5690614b3f565b60405180910390fd5b611b698282613918565b5050565b60135481565b611b7b61284d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0090614925565b60405180910390fd5b5f825111611c4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4390614ba7565b60405180910390fd5b5f5f90505b8251811015611cd55781600e5f858481518110611c7157611c70614bc5565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508080600101915050611c51565b505050565b601c5481565b60175481565b611cee61284d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7390614925565b60405180910390fd5b80600b60036101000a81548160ff02191690831515021790555050565b5f611e57611da561284d565b84611e52856040518060600160405280602581526020016156d06025913960015f611dce61284d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546138599092919063ffffffff16565b612854565b6001905092915050565b600b60039054906101000a900460ff1681565b5f611e87611e8061284d565b8484612a17565b6001905092915050565b611e9961284d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1e90614925565b60405180910390fd5b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a38060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60208052805f5260405f205f915054906101000a900460ff1681565b600b60019054906101000a900460ff1681565b61201c61284d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a190614925565b60405180910390fd5b80601e5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516121449190614395565b60405180910390a25050565b61215861284d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121dd90614925565b60405180910390fd5b670de0b6b3a76400006103e8600f6121fc610ecc565b6122069190614970565b61221091906149de565b61221a91906149de565b81101561225c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225390614c62565b60405180910390fd5b670de0b6b3a7640000816122709190614970565b600a8190555050565b600f5f9054906101000a900460ff1681565b60085481565b5f61229a61284d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612328576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231f90614925565b60405180910390fd5b620186a06001612336610ecc565b6123409190614970565b61234a91906149de565b82101561238c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238390614cf0565b60405180910390fd5b6103e86005612399610ecc565b6123a39190614970565b6123ad91906149de565b8211156123ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e690614d7e565b60405180910390fd5b8160098190555060019050919050565b60105481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60095481565b5f61249661284d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612524576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251b90614925565b60405180910390fd5b5f600f5f6101000a81548160ff0219169083151502179055506001905090565b60125481565b61255261284d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125d790614925565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361264e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264590614e0c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60165481565b600a5481565b5f600e5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b61277261284d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612800576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127f790614925565b60405180910390fd5b84601581905550836016819055508260178190555081601881905550806019819055506017546016546015546128369190614a9c565b6128409190614a9c565b6014819055505050505050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036128c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b990614e9a565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612930576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292790614f28565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612a0a919061445c565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612a85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a7c90614fb6565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612af3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aea90615044565b60405180910390fd5b600e5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015612b915750600e5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b612bd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bc7906150d2565b60405180910390fd5b5f8103612be757612be283835f6139b6565b613854565b600b5f9054906101000a900460ff161561328e57612c036118a5565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612c715750612c416118a5565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612ca957505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612ce3575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612cfc5750600560149054906101000a900460ff16155b1561328d57600b60019054906101000a900460ff16612df057601e5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612db05750601e5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b612def576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612de69061513a565b60405180910390fd5b5b600f5f9054906101000a900460ff1615612fb357612e0c6118a5565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612e9357507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612eeb57507f0000000000000000000000004c9cf251f9744188ecd64641d0d2943ea7df740173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612fb25743600c5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410612f6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f66906151ee565b60405180910390fd5b43600c5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b5b60205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156130505750601f5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156130f75760085481111561309a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130919061527c565b60405180910390fd5b600a546130a683611395565b826130b19190614a9c565b11156130f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130e9906152e4565b60405180910390fd5b61328c565b60205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156131945750601f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156131e3576008548111156131de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131d590615372565b60405180910390fd5b61328b565b601f5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661328a57600a5461323d83611395565b826132489190614a9c565b1115613289576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613280906152e4565b60405180910390fd5b5b5b5b5b5b5f601d5461329c9190614a9c565b43111580156132f757507f0000000000000000000000004c9cf251f9744188ecd64641d0d2943ea7df740173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156133435750737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561339d575f600e5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505b5f6133a730611395565b90505f60095482101590508080156133cb5750600b60029054906101000a900460ff165b80156133e45750600560149054906101000a900460ff16155b8015613437575060205f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b801561348a5750601e5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156134dd5750601e5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15613520576001600560146101000a81548160ff021916908315150217905550613505613c3f565b5f600560146101000a81548160ff0219169083151502179055505b5f600560149054906101000a900460ff16159050601e5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806135cf5750601e5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b156135d8575f90505b5f5f905081156138445760205f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561363957505f601454115b1561370357613666606461365860145488613e6d90919063ffffffff16565b613ee490919063ffffffff16565b9050601454601654826136799190614970565b61368391906149de565b601b5f8282546136939190614a9c565b92505081905550601454601754826136ab9190614970565b6136b591906149de565b601c5f8282546136c59190614a9c565b92505081905550601454601554826136dd9190614970565b6136e791906149de565b601a5f8282546136f79190614a9c565b92505081905550613821565b60205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561375a57505f601054115b1561382057613787606461377960105488613e6d90919063ffffffff16565b613ee490919063ffffffff16565b90506010546012548261379a9190614970565b6137a491906149de565b601b5f8282546137b49190614a9c565b92505081905550601054601354826137cc9190614970565b6137d691906149de565b601c5f8282546137e69190614a9c565b92505081905550601054601154826137fe9190614970565b61380891906149de565b601a5f8282546138189190614a9c565b925050819055505b5b5f811115613835576138348730836139b6565b5b80856138419190615390565b94505b61384f8787876139b6565b505050505b505050565b5f8383111582906138a0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613897919061427f565b60405180910390fd5b505f83856138ae9190615390565b9050809150509392505050565b5f5f82846138c99190614a9c565b90508381101561390e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139059061540d565b60405180910390fd5b8091505092915050565b8060205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613a24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a1b90614fb6565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613a92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a8990615044565b60405180910390fd5b613a9d838383613f2d565b613b0681604051806060016040528060268152602001615682602691395f5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546138599092919063ffffffff16565b5f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550613b95815f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546138bb90919063ffffffff16565b5f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613c32919061445c565b60405180910390a3505050565b5f613c4930611395565b90505f601c54601a54601b54613c5f9190614a9c565b613c699190614a9c565b90505f5f831480613c7957505f82145b15613c8657505050613e6b565b6014600954613c959190614970565b831115613cae576014600954613cab9190614970565b92505b5f600283601b5486613cc09190614970565b613cca91906149de565b613cd491906149de565b90505f613cea8286613f3290919063ffffffff16565b90505f479050613cf982613f7b565b5f613d0d8247613f3290919063ffffffff16565b90505f613d3787613d29601c5485613e6d90919063ffffffff16565b613ee490919063ffffffff16565b90505f601b819055505f601a819055505f601c8190555060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681604051613d9390615458565b5f6040518083038185875af1925050503d805f8114613dcd576040519150601f19603f3d011682016040523d82523d5f602084013e613dd2565b606091505b50508096505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613e1d90615458565b5f6040518083038185875af1925050503d805f8114613e57576040519150601f19603f3d011682016040523d82523d5f602084013e613e5c565b606091505b50508096505050505050505050505b565b5f5f8303613e7d575f9050613ede565b5f8284613e8a9190614970565b9050828482613e9991906149de565b14613ed9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ed0906154dc565b60405180910390fd5b809150505b92915050565b5f613f2583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506141ae565b905092915050565b505050565b5f613f7383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613859565b905092915050565b5f600267ffffffffffffffff811115613f9757613f96614633565b5b604051908082528060200260200182016040528015613fc55781602001602082028036833780820191505090505b50905030815f81518110613fdc57613fdb614bc5565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561407f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906140a3919061550e565b816001815181106140b7576140b6614bc5565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061411c307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612854565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b815260040161417d959493929190615629565b5f604051808303815f87803b158015614194575f5ffd5b505af11580156141a6573d5f5f3e3d5ffd5b505050505050565b5f5f831182906141f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016141eb919061427f565b60405180910390fd5b505f838561420291906149de565b9050809150509392505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f6142518261420f565b61425b8185614219565b935061426b818560208601614229565b61427481614237565b840191505092915050565b5f6020820190508181035f8301526142978184614247565b905092915050565b5f604051905090565b5f5ffd5b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6142d9826142b0565b9050919050565b6142e9816142cf565b81146142f3575f5ffd5b50565b5f81359050614304816142e0565b92915050565b5f819050919050565b61431c8161430a565b8114614326575f5ffd5b50565b5f8135905061433781614313565b92915050565b5f5f60408385031215614353576143526142a8565b5b5f614360858286016142f6565b925050602061437185828601614329565b9150509250929050565b5f8115159050919050565b61438f8161437b565b82525050565b5f6020820190506143a85f830184614386565b92915050565b5f602082840312156143c3576143c26142a8565b5b5f6143d0848285016142f6565b91505092915050565b5f819050919050565b5f6143fc6143f76143f2846142b0565b6143d9565b6142b0565b9050919050565b5f61440d826143e2565b9050919050565b5f61441e82614403565b9050919050565b61442e81614414565b82525050565b5f6020820190506144475f830184614425565b92915050565b6144568161430a565b82525050565b5f60208201905061446f5f83018461444d565b92915050565b5f6020828403121561448a576144896142a8565b5b5f61449784828501614329565b91505092915050565b5f5f5f606084860312156144b7576144b66142a8565b5b5f6144c4868287016142f6565b93505060206144d5868287016142f6565b92505060406144e686828701614329565b9150509250925092565b5f60ff82169050919050565b614505816144f0565b82525050565b5f60208201905061451e5f8301846144fc565b92915050565b61452d816142cf565b82525050565b5f6020820190506145465f830184614524565b92915050565b6145558161437b565b811461455f575f5ffd5b50565b5f813590506145708161454c565b92915050565b5f5f6040838503121561458c5761458b6142a8565b5b5f614599858286016142f6565b92505060206145aa85828601614562565b9150509250929050565b5f5f5f606084860312156145cb576145ca6142a8565b5b5f6145d886828701614329565b93505060206145e986828701614329565b92505060406145fa86828701614329565b9150509250925092565b5f60208284031215614619576146186142a8565b5b5f61462684828501614562565b91505092915050565b5f5ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61466982614237565b810181811067ffffffffffffffff8211171561468857614687614633565b5b80604052505050565b5f61469a61429f565b90506146a68282614660565b919050565b5f67ffffffffffffffff8211156146c5576146c4614633565b5b602082029050602081019050919050565b5f5ffd5b5f6146ec6146e7846146ab565b614691565b9050808382526020820190506020840283018581111561470f5761470e6146d6565b5b835b81811015614738578061472488826142f6565b845260208401935050602081019050614711565b5050509392505050565b5f82601f8301126147565761475561462f565b5b81356147668482602086016146da565b91505092915050565b5f5f60408385031215614785576147846142a8565b5b5f83013567ffffffffffffffff8111156147a2576147a16142ac565b5b6147ae85828601614742565b92505060206147bf85828601614562565b9150509250929050565b5f5f604083850312156147df576147de6142a8565b5b5f6147ec858286016142f6565b92505060206147fd858286016142f6565b9150509250929050565b5f5f5f5f5f60a086880312156148205761481f6142a8565b5b5f61482d88828901614329565b955050602061483e88828901614329565b945050604061484f88828901614329565b935050606061486088828901614329565b925050608061487188828901614329565b9150509295509295909350565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806148c257607f821691505b6020821081036148d5576148d461487e565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f61490f602083614219565b915061491a826148db565b602082019050919050565b5f6020820190508181035f83015261493c81614903565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61497a8261430a565b91506149858361430a565b92508282026149938161430a565b915082820484148315176149aa576149a9614943565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6149e88261430a565b91506149f38361430a565b925082614a0357614a026149b1565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e74205f8201527f6c6f776572207468616e20302e35250000000000000000000000000000000000602082015250565b5f614a68602f83614219565b9150614a7382614a0e565b604082019050919050565b5f6020820190508181035f830152614a9581614a5c565b9050919050565b5f614aa68261430a565b9150614ab18361430a565b9250828201905080821115614ac957614ac8614943565b5b92915050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f614b29603983614219565b9150614b3482614acf565b604082019050919050565b5f6020820190508181035f830152614b5681614b1d565b9050919050565b7f4163636f756e7473206c6973742063616e6e6f7420626520656d7074792e00005f82015250565b5f614b91601e83614219565b9150614b9c82614b5d565b602082019050919050565b5f6020820190508181035f830152614bbe81614b85565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e205f8201527f312e352500000000000000000000000000000000000000000000000000000000602082015250565b5f614c4c602483614219565b9150614c5782614bf2565b604082019050919050565b5f6020820190508181035f830152614c7981614c40565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b5f614cda603583614219565b9150614ce582614c80565b604082019050919050565b5f6020820190508181035f830152614d0781614cce565b9050919050565b7f5377617020616d6f756e742063616e6e6f7420626520686967686572207468615f8201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b5f614d68603483614219565b9150614d7382614d0e565b604082019050919050565b5f6020820190508181035f830152614d9581614d5c565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f614df6602683614219565b9150614e0182614d9c565b604082019050919050565b5f6020820190508181035f830152614e2381614dea565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f614e84602483614219565b9150614e8f82614e2a565b604082019050919050565b5f6020820190508181035f830152614eb181614e78565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f614f12602283614219565b9150614f1d82614eb8565b604082019050919050565b5f6020820190508181035f830152614f3f81614f06565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f614fa0602583614219565b9150614fab82614f46565b604082019050919050565b5f6020820190508181035f830152614fcd81614f94565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f61502e602383614219565b915061503982614fd4565b604082019050919050565b5f6020820190508181035f83015261505b81615022565b9050919050565b7f596f752068617665206265656e20626c61636b6c69737465642066726f6d20745f8201527f72616e73666572696e6720746f6b656e73000000000000000000000000000000602082015250565b5f6150bc603183614219565b91506150c782615062565b604082019050919050565b5f6020820190508181035f8301526150e9816150b0565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f615124601683614219565b915061512f826150f0565b602082019050919050565b5f6020820190508181035f83015261515181615118565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c5f8201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b5f6151d8604983614219565b91506151e382615158565b606082019050919050565b5f6020820190508181035f830152615205816151cc565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f615266603583614219565b91506152718261520c565b604082019050919050565b5f6020820190508181035f8301526152938161525a565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f6152ce601383614219565b91506152d98261529a565b602082019050919050565b5f6020820190508181035f8301526152fb816152c2565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f61535c603683614219565b915061536782615302565b604082019050919050565b5f6020820190508181035f83015261538981615350565b9050919050565b5f61539a8261430a565b91506153a58361430a565b92508282039050818111156153bd576153bc614943565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f6153f7601b83614219565b9150615402826153c3565b602082019050919050565b5f6020820190508181035f830152615424816153eb565b9050919050565b5f81905092915050565b50565b5f6154435f8361542b565b915061544e82615435565b5f82019050919050565b5f61546282615438565b9150819050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f6154c6602183614219565b91506154d18261546c565b604082019050919050565b5f6020820190508181035f8301526154f3816154ba565b9050919050565b5f81519050615508816142e0565b92915050565b5f60208284031215615523576155226142a8565b5b5f615530848285016154fa565b91505092915050565b5f819050919050565b5f61555c61555761555284615539565b6143d9565b61430a565b9050919050565b61556c81615542565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6155a4816142cf565b82525050565b5f6155b5838361559b565b60208301905092915050565b5f602082019050919050565b5f6155d782615572565b6155e1818561557c565b93506155ec8361558c565b805f5b8381101561561c57815161560388826155aa565b975061560e836155c1565b9250506001810190506155ef565b5085935050505092915050565b5f60a08201905061563c5f83018861444d565b6156496020830187615563565b818103604083015261565b81866155cd565b905061566a6060830185614524565b615677608083018461444d565b969550505050505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212206664cfca979cc4542f51fcbb337a47ae29cd657a2908d005c227a1f047be1df164736f6c634300081b0033

Deployed Bytecode Sourcemap

30896:17061:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8024:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10257:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32540:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30974:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9144:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40745:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32258:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32218;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37543:277;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10933:454;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32175:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8986:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11796:293;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31032:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31294:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40910:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32132:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31987:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31374:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9315:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23074:148;;;;;;;;;;;;;:::i;:::-;;36558:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38095:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31109:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31880;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38468:332;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36358:148;;;;;;;;;;;;;:::i;:::-;;22432:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31146:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32022:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38360:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8243:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40003:306;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31954:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39662:333;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32298:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32098:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36883:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12592:393;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31412:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9671:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40513:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32761:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31334:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39352:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37828:259;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31798:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31179:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37054:481;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31846:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9934:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31221:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36740:135;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31917:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23377:281;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32060:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31261:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39542:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38808:536;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8024:100;8078:13;8111:5;8104:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8024:100;:::o;10257:194::-;10365:4;10382:39;10391:12;:10;:12::i;:::-;10405:7;10414:6;10382:8;:39::i;:::-;10439:4;10432:11;;10257:194;;;;:::o;32540:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;30974:51::-;;;:::o;9144:108::-;9205:7;9232:12;;9225:19;;9144:108;:::o;40745:157::-;22654:12;:10;:12::i;:::-;22644:22;;:6;;;;;;;;;;;:22;;;22636:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;40852:9:::1;;;;;;;;;;;40824:38;;40841:9;40824:38;;;;;;;;;;;;40885:9;40873;;:21;;;;;;;;;;;;;;;;;;40745:157:::0;:::o;32258:33::-;;;;:::o;32218:::-;;;;:::o;37543:277::-;22654:12;:10;:12::i;:::-;22644:22;;:6;;;;;;;;;;;:22;;;22636:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37680:4:::1;37672;37667:1;37651:13;:11;:13::i;:::-;:17;;;;:::i;:::-;37650:26;;;;:::i;:::-;37649:35;;;;:::i;:::-;37639:6;:45;;37617:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;37803:8;37793:6;:19;;;;:::i;:::-;37770:20;:42;;;;37543:277:::0;:::o;10933:454::-;11073:4;11090:36;11100:6;11108:9;11119:6;11090:9;:36::i;:::-;11137:220;11160:6;11181:12;:10;:12::i;:::-;11208:138;11264:6;11208:138;;;;;;;;;;;;;;;;;:11;:19;11220:6;11208:19;;;;;;;;;;;;;;;:33;11228:12;:10;:12::i;:::-;11208:33;;;;;;;;;;;;;;;;:37;;:138;;;;;:::i;:::-;11137:8;:220::i;:::-;11375:4;11368:11;;10933:454;;;;;:::o;32175:36::-;;;;:::o;8986:93::-;9044:5;9069:2;9062:9;;8986:93;:::o;11796:293::-;11909:4;11926:133;11949:12;:10;:12::i;:::-;11976:7;11998:50;12037:10;11998:11;:25;12010:12;:10;:12::i;:::-;11998:25;;;;;;;;;;;;;;;:34;12024:7;11998:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;11926:8;:133::i;:::-;12077:4;12070:11;;11796:293;;;;:::o;31032:38::-;;;:::o;31294:33::-;;;;;;;;;;;;;:::o;40910:126::-;40976:4;41000:19;:28;41020:7;41000:28;;;;;;;;;;;;;;;;;;;;;;;;;40993:35;;40910:126;;;:::o;32132:36::-;;;;:::o;31987:28::-;;;;:::o;31374:31::-;;;;;;;;;;;;;:::o;9315:143::-;9405:7;9432:9;:18;9442:7;9432:18;;;;;;;;;;;;;;;;9425:25;;9315:143;;;:::o;23074:148::-;22654:12;:10;:12::i;:::-;22644:22;;:6;;;;;;;;;;;:22;;;22636:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23181:1:::1;23144:40;;23165:6;;;;;;;;;;;23144:40;;;;;;;;;;;;23212:1;23195:6;;:19;;;;;;;;;;;;;;;;;;23074:148::o:0;36558:121::-;36610:4;22654:12;:10;:12::i;:::-;22644:22;;:6;;;;;;;;;;;:22;;;22636:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36644:5:::1;36627:14;;:22;;;;;;;;;;;;;;;;;;36667:4;36660:11;;36558:121:::0;:::o;38095:169::-;22654:12;:10;:12::i;:::-;22644:22;;:6;;;;;;;;;;;:22;;;22636:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38252:4:::1;38210:31;:39;38242:6;38210:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;38095:169:::0;;:::o;31109:30::-;;;;;;;;;;;;;:::o;31880:::-;;;;:::o;38468:332::-;22654:12;:10;:12::i;:::-;22644:22;;:6;;;;;;;;;;;:22;;;22636:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38636:13:::1;38618:15;:31;;;;38678:13;38660:15;:31;;;;38714:7;38702:9;:19;;;;38783:9;;38765:15;;38747;;:33;;;;:::i;:::-;:45;;;;:::i;:::-;38732:12;:60;;;;38468:332:::0;;;:::o;36358:148::-;22654:12;:10;:12::i;:::-;22644:22;;:6;;;;;;;;;;;:22;;;22636:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36429:4:::1;36413:13;;:20;;;;;;;;;;;;;;;;;;36458:4;36444:11;;:18;;;;;;;;;;;;;;;;;;36486:12;36473:10;:25;;;;36358:148::o:0;22432:79::-;22470:7;22497:6;;;;;;;;;;;22490:13;;22432:79;:::o;31146:24::-;;;;;;;;;;;;;:::o;32022:31::-;;;;:::o;38360:100::-;22654:12;:10;:12::i;:::-;22644:22;;:6;;;;;;;;;;;:22;;;22636:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38445:7:::1;38431:11;;:21;;;;;;;;;;;;;;;;;;38360:100:::0;:::o;8243:104::-;8299:13;8332:7;8325:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8243:104;:::o;40003:306::-;22654:12;:10;:12::i;:::-;22644:22;;:6;;;;;;;;;;;:22;;;22636:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;40149:13:::1;40141:21;;:4;:21;;::::0;40119:128:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;40260:41;40289:4;40295:5;40260:28;:41::i;:::-;40003:306:::0;;:::o;31954:24::-;;;;:::o;39662:333::-;22654:12;:10;:12::i;:::-;22644:22;;:6;;;;;;;;;;;:22;;;22636:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;39822:1:::1;39804:8;:15;:19;39796:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;39874:9;39886:1;39874:13;;39869:119;39893:8;:15;39889:1;:19;39869:119;;;39956:20;39930:10;:23;39941:8;39950:1;39941:11;;;;;;;;:::i;:::-;;;;;;;;39930:23;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;39910:3;;;;;;;39869:119;;;;39662:333:::0;;:::o;32298:27::-;;;;:::o;32098:25::-;;;;:::o;36883:101::-;22654:12;:10;:12::i;:::-;22644:22;;:6;;;;;;;;;;;:22;;;22636:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36971:5:::1;36950:18;;:26;;;;;;;;;;;;;;;;;;36883:101:::0;:::o;12592:393::-;12710:4;12727:228;12750:12;:10;:12::i;:::-;12777:7;12799:145;12856:15;12799:145;;;;;;;;;;;;;;;;;:11;:25;12811:12;:10;:12::i;:::-;12799:25;;;;;;;;;;;;;;;:34;12825:7;12799:34;;;;;;;;;;;;;;;;:38;;:145;;;;;:::i;:::-;12727:8;:228::i;:::-;12973:4;12966:11;;12592:393;;;;:::o;31412:37::-;;;;;;;;;;;;;:::o;9671:200::-;9782:4;9799:42;9809:12;:10;:12::i;:::-;9823:9;9834:6;9799:9;:42::i;:::-;9859:4;9852:11;;9671:200;;;;:::o;40513:224::-;22654:12;:10;:12::i;:::-;22644:22;;:6;;;;;;;;;;;:22;;;22636:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;40666:15:::1;;;;;;;;;;;40623:59;;40646:18;40623:59;;;;;;;;;;;;40711:18;40693:15;;:36;;;;;;;;;;;;;;;;;;40513:224:::0;:::o;32761:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;31334:33::-;;;;;;;;;;;;;:::o;39352:182::-;22654:12;:10;:12::i;:::-;22644:22;;:6;;;;;;;;;;;:22;;;22636:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;39468:8:::1;39437:19;:28;39457:7;39437:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;39508:7;39492:34;;;39517:8;39492:34;;;;;;:::i;:::-;;;;;;;;39352:182:::0;;:::o;37828:259::-;22654:12;:10;:12::i;:::-;22644:22;;:6;;;;;;;;;;;:22;;;22636:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37969:4:::1;37961;37955:2;37939:13;:11;:13::i;:::-;:18;;;;:::i;:::-;37938:27;;;;:::i;:::-;37937:36;;;;:::i;:::-;37927:6;:46;;37905:132;;;;;;;;;;;;:::i;:::-;;;;;;;;;38070:8;38060:6;:19;;;;:::i;:::-;38048:9;:31;;;;37828:259:::0;:::o;31798:39::-;;;;;;;;;;;;;:::o;31179:35::-;;;;:::o;37054:481::-;37151:4;22654:12;:10;:12::i;:::-;22644:22;;:6;;;;;;;;;;;:22;;;22636:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37225:6:::1;37220:1;37204:13;:11;:13::i;:::-;:17;;;;:::i;:::-;37203:28;;;;:::i;:::-;37190:9;:41;;37168:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;37380:4;37375:1;37359:13;:11;:13::i;:::-;:17;;;;:::i;:::-;37358:26;;;;:::i;:::-;37345:9;:39;;37323:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;37496:9;37475:18;:30;;;;37523:4;37516:11;;37054:481:::0;;;:::o;31846:27::-;;;;:::o;9934:176::-;10048:7;10075:11;:18;10087:5;10075:18;;;;;;;;;;;;;;;:27;10094:7;10075:27;;;;;;;;;;;;;;;;10068:34;;9934:176;;;;:::o;31221:33::-;;;;:::o;36740:135::-;36800:4;22654:12;:10;:12::i;:::-;22644:22;;:6;;;;;;;;;;;:22;;;22636:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36840:5:::1;36817:20;;:28;;;;;;;;;;;;;;;;;;36863:4;36856:11;;36740:135:::0;:::o;31917:30::-;;;;:::o;23377:281::-;22654:12;:10;:12::i;:::-;22644:22;;:6;;;;;;;;;;;:22;;;22636:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23500:1:::1;23480:22;;:8;:22;;::::0;23458:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;23613:8;23584:38;;23605:6;;;;;;;;;;;23584:38;;;;;;;;;;;;23642:8;23633:6;;:17;;;;;;;;;;;;;;;;;;23377:281:::0;:::o;32060:31::-;;;;:::o;31261:24::-;;;;:::o;39542:112::-;39603:4;39627:10;:19;39638:7;39627:19;;;;;;;;;;;;;;;;;;;;;;;;;39620:26;;39542:112;;;:::o;38808:536::-;22654:12;:10;:12::i;:::-;22644:22;;:6;;;;;;;;;;;:22;;;22636:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;39060:13:::1;39041:16;:32;;;;39103:13;39084:16;:32;;;;39140:7;39127:10;:20;;;;39182:22;39158:21;:46;;;;39239:22;39215:21;:46;;;;39326:10;;39307:16;;39288;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;39272:13;:64;;;;38808:536:::0;;;;;:::o;195:98::-;248:7;275:10;268:17;;195:98;:::o;15976:380::-;16129:1;16112:19;;:5;:19;;;16104:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16210:1;16191:21;;:7;:21;;;16183:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16294:6;16264:11;:18;16276:5;16264:18;;;;;;;;;;;;;;;:27;16283:7;16264:27;;;;;;;;;;;;;;;:36;;;;16332:7;16316:32;;16325:5;16316:32;;;16341:6;16316:32;;;;;;:::i;:::-;;;;;;;;15976:380;;;:::o;41094:5121::-;41242:1;41226:18;;:4;:18;;;41218:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41319:1;41305:16;;:2;:16;;;41297:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;41395:10;:14;41406:2;41395:14;;;;;;;;;;;;;;;;;;;;;;;;;41394:15;:36;;;;;41414:10;:16;41425:4;41414:16;;;;;;;;;;;;;;;;;;;;;;;;;41413:17;41394:36;41372:135;;;;;;;;;;;;:::i;:::-;;;;;;;;;41532:1;41522:6;:11;41518:93;;41550:28;41566:4;41572:2;41576:1;41550:15;:28::i;:::-;41593:7;;41518:93;41627:14;;;;;;;;;;;41623:2487;;;41688:7;:5;:7::i;:::-;41680:15;;:4;:15;;;;:49;;;;;41722:7;:5;:7::i;:::-;41716:13;;:2;:13;;;;41680:49;:86;;;;;41764:1;41750:16;;:2;:16;;;;41680:86;:128;;;;;41801:6;41787:21;;:2;:21;;;;41680:128;:158;;;;;41830:8;;;;;;;;;;;41829:9;41680:158;41658:2441;;;41878:13;;;;;;;;;;;41873:223;;41950:19;:25;41970:4;41950:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;41979:19;:23;41999:2;41979:23;;;;;;;;;;;;;;;;;;;;;;;;;41950:52;41916:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;41873:223;42252:20;;;;;;;;;;;42248:641;;;42333:7;:5;:7::i;:::-;42327:13;;:2;:13;;;;:72;;;;;42383:15;42369:30;;:2;:30;;;;42327:72;:129;;;;;42442:13;42428:28;;:2;:28;;;;42327:129;42297:573;;;42620:12;42545:28;:39;42574:9;42545:39;;;;;;;;;;;;;;;;:87;42507:258;;;;;;;;;;;;:::i;:::-;;;;;;;;;42834:12;42792:28;:39;42821:9;42792:39;;;;;;;;;;;;;;;:54;;;;42297:573;42248:641;42963:25;:31;42989:4;42963:31;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;43020:31;:35;43052:2;43020:35;;;;;;;;;;;;;;;;;;;;;;;;;43019:36;42963:92;42937:1147;;;43142:20;;43132:6;:30;;43098:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;43350:9;;43333:13;43343:2;43333:9;:13::i;:::-;43324:6;:22;;;;:::i;:::-;:35;;43290:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;42937:1147;;;43528:25;:29;43554:2;43528:29;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;43583:31;:37;43615:4;43583:37;;;;;;;;;;;;;;;;;;;;;;;;;43582:38;43528:92;43502:582;;;43707:20;;43697:6;:30;;43663:170;;;;;;;;;;;;:::i;:::-;;;;;;;;;43502:582;;;43864:31;:35;43896:2;43864:35;;;;;;;;;;;;;;;;;;;;;;;;;43859:225;;43984:9;;43967:13;43977:2;43967:9;:13::i;:::-;43958:6;:22;;;;:::i;:::-;:35;;43924:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;43859:225;43502:582;42937:1147;41658:2441;41623:2487;44197:1;44184:10;;:14;;;;:::i;:::-;44167:12;:32;;:68;;;;;44222:13;44216:19;;:2;:19;;;;44167:68;:142;;;;;44266:42;44252:57;;:2;:57;;;;44167:142;44149:221;;;44353:5;44336:10;:14;44347:2;44336:14;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;;;;;;;44149:221;44382:28;44413:24;44431:4;44413:9;:24::i;:::-;44382:55;;44450:12;44489:18;;44465:20;:42;;44450:57;;44538:7;:35;;;;;44562:11;;;;;;;;;;;44538:35;:61;;;;;44591:8;;;;;;;;;;;44590:9;44538:61;:110;;;;;44617:25;:31;44643:4;44617:31;;;;;;;;;;;;;;;;;;;;;;;;;44616:32;44538:110;:153;;;;;44666:19;:25;44686:4;44666:25;;;;;;;;;;;;;;;;;;;;;;;;;44665:26;44538:153;:194;;;;;44709:19;:23;44729:2;44709:23;;;;;;;;;;;;;;;;;;;;;;;;;44708:24;44538:194;44520:326;;;44770:4;44759:8;;:15;;;;;;;;;;;;;;;;;;44791:10;:8;:10::i;:::-;44829:5;44818:8;;:16;;;;;;;;;;;;;;;;;;44520:326;44858:12;44874:8;;;;;;;;;;;44873:9;44858:24;;44984:19;:25;45004:4;44984:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;45013:19;:23;45033:2;45013:23;;;;;;;;;;;;;;;;;;;;;;;;;44984:52;44980:100;;;45063:5;45053:15;;44980:100;45092:12;45107:1;45092:16;;45197:7;45193:969;;;45249:25;:29;45275:2;45249:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;45298:1;45282:13;;:17;45249:50;45245:768;;;45327:34;45357:3;45327:25;45338:13;;45327:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;45320:41;;45430:13;;45410:16;;45403:4;:23;;;;:::i;:::-;45402:41;;;;:::i;:::-;45380:18;;:63;;;;;;;:::i;:::-;;;;;;;;45500:13;;45486:10;;45479:4;:17;;;;:::i;:::-;45478:35;;;;:::i;:::-;45462:12;;:51;;;;;;;:::i;:::-;;;;;;;;45582:13;;45562:16;;45555:4;:23;;;;:::i;:::-;45554:41;;;;:::i;:::-;45532:18;;:63;;;;;;;:::i;:::-;;;;;;;;45245:768;;;45657:25;:31;45683:4;45657:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;45707:1;45692:12;;:16;45657:51;45653:360;;;45736:33;45765:3;45736:24;45747:12;;45736:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;45729:40;;45837:12;;45818:15;;45811:4;:22;;;;:::i;:::-;45810:39;;;;:::i;:::-;45788:18;;:61;;;;;;;:::i;:::-;;;;;;;;45905:12;;45892:9;;45885:4;:16;;;;:::i;:::-;45884:33;;;;:::i;:::-;45868:12;;:49;;;;;;;:::i;:::-;;;;;;;;45985:12;;45966:15;;45959:4;:22;;;;:::i;:::-;45958:39;;;;:::i;:::-;45936:18;;:61;;;;;;;:::i;:::-;;;;;;;;45653:360;45245:768;46040:1;46033:4;:8;46029:91;;;46062:42;46078:4;46092;46099;46062:15;:42::i;:::-;46029:91;46146:4;46136:14;;;;;:::i;:::-;;;45193:969;46174:33;46190:4;46196:2;46200:6;46174:15;:33::i;:::-;41207:5008;;;;41094:5121;;;;:::o;18257:226::-;18377:7;18410:1;18405;:6;;18413:12;18397:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;18437:9;18453:1;18449;:5;;;;:::i;:::-;18437:17;;18474:1;18467:8;;;18257:226;;;;;:::o;17354:181::-;17412:7;17432:9;17448:1;17444;:5;;;;:::i;:::-;17432:17;;17473:1;17468;:6;;17460:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;17526:1;17519:8;;;17354:181;;;;:::o;40317:188::-;40434:5;40400:25;:31;40426:4;40400:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;40491:5;40457:40;;40485:4;40457:40;;;;;;;;;;;;40317:188;;:::o;13475:610::-;13633:1;13615:20;;:6;:20;;;13607:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;13717:1;13696:23;;:9;:23;;;13688:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;13772:47;13793:6;13801:9;13812:6;13772:20;:47::i;:::-;13852:108;13888:6;13852:108;;;;;;;;;;;;;;;;;:9;:17;13862:6;13852:17;;;;;;;;;;;;;;;;:21;;:108;;;;;:::i;:::-;13832:9;:17;13842:6;13832:17;;;;;;;;;;;;;;;:128;;;;13994:32;14019:6;13994:9;:20;14004:9;13994:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;13971:9;:20;13981:9;13971:20;;;;;;;;;;;;;;;:55;;;;14059:9;14042:35;;14051:6;14042:35;;;14070:6;14042:35;;;;;;:::i;:::-;;;;;;;;13475:610;;;:::o;46734:1220::-;46773:23;46799:24;46817:4;46799:9;:24::i;:::-;46773:50;;46834:25;46930:12;;46896:18;;46862;;:52;;;;:::i;:::-;:80;;;;:::i;:::-;46834:108;;46953:12;47001:1;46982:15;:20;:46;;;;47027:1;47006:17;:22;46982:46;46978:85;;;47045:7;;;;;46978:85;47118:2;47097:18;;:23;;;;:::i;:::-;47079:15;:41;47075:115;;;47176:2;47155:18;;:23;;;;:::i;:::-;47137:41;;47075:115;47202:23;47315:1;47282:17;47247:18;;47229:15;:36;;;;:::i;:::-;47228:71;;;;:::i;:::-;:88;;;;:::i;:::-;47202:114;;47327:26;47356:36;47376:15;47356;:19;;:36;;;;:::i;:::-;47327:65;;47405:25;47433:21;47405:49;;47467:36;47484:18;47467:16;:36::i;:::-;47516:18;47537:44;47563:17;47537:21;:25;;:44;;;;:::i;:::-;47516:65;;47594:17;47614:51;47647:17;47614:28;47629:12;;47614:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;47594:71;;47699:1;47678:18;:22;;;;47732:1;47711:18;:22;;;;47759:1;47744:12;:16;;;;47795:9;;;;;;;;;;;47787:23;;47818:9;47787:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47773:59;;;;;47867:15;;;;;;;;;;;47859:29;;47910:21;47859:87;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47845:101;;;;;46762:1192;;;;;;;;46734:1220;:::o;18742:471::-;18800:7;19050:1;19045;:6;19041:47;;19075:1;19068:8;;;;19041:47;19100:9;19116:1;19112;:5;;;;:::i;:::-;19100:17;;19145:1;19140;19136;:5;;;;:::i;:::-;:10;19128:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;19204:1;19197:8;;;18742:471;;;;;:::o;19689:132::-;19747:7;19774:39;19778:1;19781;19774:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;19767:46;;19689:132;;;;:::o;16959:125::-;;;;:::o;17818:136::-;17876:7;17903:43;17907:1;17910;17903:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;17896:50;;17818:136;;;;:::o;46223:503::-;46289:21;46327:1;46313:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46289:40;;46358:4;46340;46345:1;46340:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;46384:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46374:4;46379:1;46374:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;46419:62;46436:4;46451:15;46469:11;46419:8;:62::i;:::-;46494:15;:66;;;46575:11;46601:1;46645:4;46672;46692:15;46494:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46278:448;46223:503;:::o;20317:312::-;20437:7;20469:1;20465;:5;20472:12;20457:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;20496:9;20512:1;20508;:5;;;;:::i;:::-;20496:17;;20620:1;20613:8;;;20317:312;;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:139::-;376:6;371:3;366;360:23;417:1;408:6;403:3;399:16;392:27;287:139;;;:::o;432:102::-;473:6;524:2;520:7;515:2;508:5;504:14;500:28;490:38;;432:102;;;:::o;540:377::-;628:3;656:39;689:5;656:39;:::i;:::-;711:71;775:6;770:3;711:71;:::i;:::-;704:78;;791:65;849:6;844:3;837:4;830:5;826:16;791:65;:::i;:::-;881:29;903:6;881:29;:::i;:::-;876:3;872:39;865:46;;632:285;540:377;;;;:::o;923:313::-;1036:4;1074:2;1063:9;1059:18;1051:26;;1123:9;1117:4;1113:20;1109:1;1098:9;1094:17;1087:47;1151:78;1224:4;1215:6;1151:78;:::i;:::-;1143:86;;923:313;;;;:::o;1242:75::-;1275:6;1308:2;1302:9;1292:19;;1242:75;:::o;1323:117::-;1432:1;1429;1422:12;1446:117;1555:1;1552;1545:12;1569:126;1606:7;1646:42;1639:5;1635:54;1624:65;;1569:126;;;:::o;1701:96::-;1738:7;1767:24;1785:5;1767:24;:::i;:::-;1756:35;;1701:96;;;:::o;1803:122::-;1876:24;1894:5;1876:24;:::i;:::-;1869:5;1866:35;1856:63;;1915:1;1912;1905:12;1856:63;1803:122;:::o;1931:139::-;1977:5;2015:6;2002:20;1993:29;;2031:33;2058:5;2031:33;:::i;:::-;1931:139;;;;:::o;2076:77::-;2113:7;2142:5;2131:16;;2076:77;;;:::o;2159:122::-;2232:24;2250:5;2232:24;:::i;:::-;2225:5;2222:35;2212:63;;2271:1;2268;2261:12;2212:63;2159:122;:::o;2287:139::-;2333:5;2371:6;2358:20;2349:29;;2387:33;2414:5;2387:33;:::i;:::-;2287:139;;;;:::o;2432:474::-;2500:6;2508;2557:2;2545:9;2536:7;2532:23;2528:32;2525:119;;;2563:79;;:::i;:::-;2525:119;2683:1;2708:53;2753:7;2744:6;2733:9;2729:22;2708:53;:::i;:::-;2698:63;;2654:117;2810:2;2836:53;2881:7;2872:6;2861:9;2857:22;2836:53;:::i;:::-;2826:63;;2781:118;2432:474;;;;;:::o;2912:90::-;2946:7;2989:5;2982:13;2975:21;2964:32;;2912:90;;;:::o;3008:109::-;3089:21;3104:5;3089:21;:::i;:::-;3084:3;3077:34;3008:109;;:::o;3123:210::-;3210:4;3248:2;3237:9;3233:18;3225:26;;3261:65;3323:1;3312:9;3308:17;3299:6;3261:65;:::i;:::-;3123:210;;;;:::o;3339:329::-;3398:6;3447:2;3435:9;3426:7;3422:23;3418:32;3415:119;;;3453:79;;:::i;:::-;3415:119;3573:1;3598:53;3643:7;3634:6;3623:9;3619:22;3598:53;:::i;:::-;3588:63;;3544:117;3339:329;;;;:::o;3674:60::-;3702:3;3723:5;3716:12;;3674:60;;;:::o;3740:142::-;3790:9;3823:53;3841:34;3850:24;3868:5;3850:24;:::i;:::-;3841:34;:::i;:::-;3823:53;:::i;:::-;3810:66;;3740:142;;;:::o;3888:126::-;3938:9;3971:37;4002:5;3971:37;:::i;:::-;3958:50;;3888:126;;;:::o;4020:153::-;4097:9;4130:37;4161:5;4130:37;:::i;:::-;4117:50;;4020:153;;;:::o;4179:185::-;4293:64;4351:5;4293:64;:::i;:::-;4288:3;4281:77;4179:185;;:::o;4370:276::-;4490:4;4528:2;4517:9;4513:18;4505:26;;4541:98;4636:1;4625:9;4621:17;4612:6;4541:98;:::i;:::-;4370:276;;;;:::o;4652:118::-;4739:24;4757:5;4739:24;:::i;:::-;4734:3;4727:37;4652:118;;:::o;4776:222::-;4869:4;4907:2;4896:9;4892:18;4884:26;;4920:71;4988:1;4977:9;4973:17;4964:6;4920:71;:::i;:::-;4776:222;;;;:::o;5004:329::-;5063:6;5112:2;5100:9;5091:7;5087:23;5083:32;5080:119;;;5118:79;;:::i;:::-;5080:119;5238:1;5263:53;5308:7;5299:6;5288:9;5284:22;5263:53;:::i;:::-;5253:63;;5209:117;5004:329;;;;:::o;5339:619::-;5416:6;5424;5432;5481:2;5469:9;5460:7;5456:23;5452:32;5449:119;;;5487:79;;:::i;:::-;5449:119;5607:1;5632:53;5677:7;5668:6;5657:9;5653:22;5632:53;:::i;:::-;5622:63;;5578:117;5734:2;5760:53;5805:7;5796:6;5785:9;5781:22;5760:53;:::i;:::-;5750:63;;5705:118;5862:2;5888:53;5933:7;5924:6;5913:9;5909:22;5888:53;:::i;:::-;5878:63;;5833:118;5339:619;;;;;:::o;5964:86::-;5999:7;6039:4;6032:5;6028:16;6017:27;;5964:86;;;:::o;6056:112::-;6139:22;6155:5;6139:22;:::i;:::-;6134:3;6127:35;6056:112;;:::o;6174:214::-;6263:4;6301:2;6290:9;6286:18;6278:26;;6314:67;6378:1;6367:9;6363:17;6354:6;6314:67;:::i;:::-;6174:214;;;;:::o;6394:118::-;6481:24;6499:5;6481:24;:::i;:::-;6476:3;6469:37;6394:118;;:::o;6518:222::-;6611:4;6649:2;6638:9;6634:18;6626:26;;6662:71;6730:1;6719:9;6715:17;6706:6;6662:71;:::i;:::-;6518:222;;;;:::o;6746:116::-;6816:21;6831:5;6816:21;:::i;:::-;6809:5;6806:32;6796:60;;6852:1;6849;6842:12;6796:60;6746:116;:::o;6868:133::-;6911:5;6949:6;6936:20;6927:29;;6965:30;6989:5;6965:30;:::i;:::-;6868:133;;;;:::o;7007:468::-;7072:6;7080;7129:2;7117:9;7108:7;7104:23;7100:32;7097:119;;;7135:79;;:::i;:::-;7097:119;7255:1;7280:53;7325:7;7316:6;7305:9;7301:22;7280:53;:::i;:::-;7270:63;;7226:117;7382:2;7408:50;7450:7;7441:6;7430:9;7426:22;7408:50;:::i;:::-;7398:60;;7353:115;7007:468;;;;;:::o;7481:619::-;7558:6;7566;7574;7623:2;7611:9;7602:7;7598:23;7594:32;7591:119;;;7629:79;;:::i;:::-;7591:119;7749:1;7774:53;7819:7;7810:6;7799:9;7795:22;7774:53;:::i;:::-;7764:63;;7720:117;7876:2;7902:53;7947:7;7938:6;7927:9;7923:22;7902:53;:::i;:::-;7892:63;;7847:118;8004:2;8030:53;8075:7;8066:6;8055:9;8051:22;8030:53;:::i;:::-;8020:63;;7975:118;7481:619;;;;;:::o;8106:323::-;8162:6;8211:2;8199:9;8190:7;8186:23;8182:32;8179:119;;;8217:79;;:::i;:::-;8179:119;8337:1;8362:50;8404:7;8395:6;8384:9;8380:22;8362:50;:::i;:::-;8352:60;;8308:114;8106:323;;;;:::o;8435:117::-;8544:1;8541;8534:12;8558:180;8606:77;8603:1;8596:88;8703:4;8700:1;8693:15;8727:4;8724:1;8717:15;8744:281;8827:27;8849:4;8827:27;:::i;:::-;8819:6;8815:40;8957:6;8945:10;8942:22;8921:18;8909:10;8906:34;8903:62;8900:88;;;8968:18;;:::i;:::-;8900:88;9008:10;9004:2;8997:22;8787:238;8744:281;;:::o;9031:129::-;9065:6;9092:20;;:::i;:::-;9082:30;;9121:33;9149:4;9141:6;9121:33;:::i;:::-;9031:129;;;:::o;9166:311::-;9243:4;9333:18;9325:6;9322:30;9319:56;;;9355:18;;:::i;:::-;9319:56;9405:4;9397:6;9393:17;9385:25;;9465:4;9459;9455:15;9447:23;;9166:311;;;:::o;9483:117::-;9592:1;9589;9582:12;9623:710;9719:5;9744:81;9760:64;9817:6;9760:64;:::i;:::-;9744:81;:::i;:::-;9735:90;;9845:5;9874:6;9867:5;9860:21;9908:4;9901:5;9897:16;9890:23;;9961:4;9953:6;9949:17;9941:6;9937:30;9990:3;9982:6;9979:15;9976:122;;;10009:79;;:::i;:::-;9976:122;10124:6;10107:220;10141:6;10136:3;10133:15;10107:220;;;10216:3;10245:37;10278:3;10266:10;10245:37;:::i;:::-;10240:3;10233:50;10312:4;10307:3;10303:14;10296:21;;10183:144;10167:4;10162:3;10158:14;10151:21;;10107:220;;;10111:21;9725:608;;9623:710;;;;;:::o;10356:370::-;10427:5;10476:3;10469:4;10461:6;10457:17;10453:27;10443:122;;10484:79;;:::i;:::-;10443:122;10601:6;10588:20;10626:94;10716:3;10708:6;10701:4;10693:6;10689:17;10626:94;:::i;:::-;10617:103;;10433:293;10356:370;;;;:::o;10732:678::-;10822:6;10830;10879:2;10867:9;10858:7;10854:23;10850:32;10847:119;;;10885:79;;:::i;:::-;10847:119;11033:1;11022:9;11018:17;11005:31;11063:18;11055:6;11052:30;11049:117;;;11085:79;;:::i;:::-;11049:117;11190:78;11260:7;11251:6;11240:9;11236:22;11190:78;:::i;:::-;11180:88;;10976:302;11317:2;11343:50;11385:7;11376:6;11365:9;11361:22;11343:50;:::i;:::-;11333:60;;11288:115;10732:678;;;;;:::o;11416:474::-;11484:6;11492;11541:2;11529:9;11520:7;11516:23;11512:32;11509:119;;;11547:79;;:::i;:::-;11509:119;11667:1;11692:53;11737:7;11728:6;11717:9;11713:22;11692:53;:::i;:::-;11682:63;;11638:117;11794:2;11820:53;11865:7;11856:6;11845:9;11841:22;11820:53;:::i;:::-;11810:63;;11765:118;11416:474;;;;;:::o;11896:911::-;11991:6;11999;12007;12015;12023;12072:3;12060:9;12051:7;12047:23;12043:33;12040:120;;;12079:79;;:::i;:::-;12040:120;12199:1;12224:53;12269:7;12260:6;12249:9;12245:22;12224:53;:::i;:::-;12214:63;;12170:117;12326:2;12352:53;12397:7;12388:6;12377:9;12373:22;12352:53;:::i;:::-;12342:63;;12297:118;12454:2;12480:53;12525:7;12516:6;12505:9;12501:22;12480:53;:::i;:::-;12470:63;;12425:118;12582:2;12608:53;12653:7;12644:6;12633:9;12629:22;12608:53;:::i;:::-;12598:63;;12553:118;12710:3;12737:53;12782:7;12773:6;12762:9;12758:22;12737:53;:::i;:::-;12727:63;;12681:119;11896:911;;;;;;;;:::o;12813:180::-;12861:77;12858:1;12851:88;12958:4;12955:1;12948:15;12982:4;12979:1;12972:15;12999:320;13043:6;13080:1;13074:4;13070:12;13060:22;;13127:1;13121:4;13117:12;13148:18;13138:81;;13204:4;13196:6;13192:17;13182:27;;13138:81;13266:2;13258:6;13255:14;13235:18;13232:38;13229:84;;13285:18;;:::i;:::-;13229:84;13050:269;12999:320;;;:::o;13325:182::-;13465:34;13461:1;13453:6;13449:14;13442:58;13325:182;:::o;13513:366::-;13655:3;13676:67;13740:2;13735:3;13676:67;:::i;:::-;13669:74;;13752:93;13841:3;13752:93;:::i;:::-;13870:2;13865:3;13861:12;13854:19;;13513:366;;;:::o;13885:419::-;14051:4;14089:2;14078:9;14074:18;14066:26;;14138:9;14132:4;14128:20;14124:1;14113:9;14109:17;14102:47;14166:131;14292:4;14166:131;:::i;:::-;14158:139;;13885:419;;;:::o;14310:180::-;14358:77;14355:1;14348:88;14455:4;14452:1;14445:15;14479:4;14476:1;14469:15;14496:410;14536:7;14559:20;14577:1;14559:20;:::i;:::-;14554:25;;14593:20;14611:1;14593:20;:::i;:::-;14588:25;;14648:1;14645;14641:9;14670:30;14688:11;14670:30;:::i;:::-;14659:41;;14849:1;14840:7;14836:15;14833:1;14830:22;14810:1;14803:9;14783:83;14760:139;;14879:18;;:::i;:::-;14760:139;14544:362;14496:410;;;;:::o;14912:180::-;14960:77;14957:1;14950:88;15057:4;15054:1;15047:15;15081:4;15078:1;15071:15;15098:185;15138:1;15155:20;15173:1;15155:20;:::i;:::-;15150:25;;15189:20;15207:1;15189:20;:::i;:::-;15184:25;;15228:1;15218:35;;15233:18;;:::i;:::-;15218:35;15275:1;15272;15268:9;15263:14;;15098:185;;;;:::o;15289:234::-;15429:34;15425:1;15417:6;15413:14;15406:58;15498:17;15493:2;15485:6;15481:15;15474:42;15289:234;:::o;15529:366::-;15671:3;15692:67;15756:2;15751:3;15692:67;:::i;:::-;15685:74;;15768:93;15857:3;15768:93;:::i;:::-;15886:2;15881:3;15877:12;15870:19;;15529:366;;;:::o;15901:419::-;16067:4;16105:2;16094:9;16090:18;16082:26;;16154:9;16148:4;16144:20;16140:1;16129:9;16125:17;16118:47;16182:131;16308:4;16182:131;:::i;:::-;16174:139;;15901:419;;;:::o;16326:191::-;16366:3;16385:20;16403:1;16385:20;:::i;:::-;16380:25;;16419:20;16437:1;16419:20;:::i;:::-;16414:25;;16462:1;16459;16455:9;16448:16;;16483:3;16480:1;16477:10;16474:36;;;16490:18;;:::i;:::-;16474:36;16326:191;;;;:::o;16523:244::-;16663:34;16659:1;16651:6;16647:14;16640:58;16732:27;16727:2;16719:6;16715:15;16708:52;16523:244;:::o;16773:366::-;16915:3;16936:67;17000:2;16995:3;16936:67;:::i;:::-;16929:74;;17012:93;17101:3;17012:93;:::i;:::-;17130:2;17125:3;17121:12;17114:19;;16773:366;;;:::o;17145:419::-;17311:4;17349:2;17338:9;17334:18;17326:26;;17398:9;17392:4;17388:20;17384:1;17373:9;17369:17;17362:47;17426:131;17552:4;17426:131;:::i;:::-;17418:139;;17145:419;;;:::o;17570:180::-;17710:32;17706:1;17698:6;17694:14;17687:56;17570:180;:::o;17756:366::-;17898:3;17919:67;17983:2;17978:3;17919:67;:::i;:::-;17912:74;;17995:93;18084:3;17995:93;:::i;:::-;18113:2;18108:3;18104:12;18097:19;;17756:366;;;:::o;18128:419::-;18294:4;18332:2;18321:9;18317:18;18309:26;;18381:9;18375:4;18371:20;18367:1;18356:9;18352:17;18345:47;18409:131;18535:4;18409:131;:::i;:::-;18401:139;;18128:419;;;:::o;18553:180::-;18601:77;18598:1;18591:88;18698:4;18695:1;18688:15;18722:4;18719:1;18712:15;18739:223;18879:34;18875:1;18867:6;18863:14;18856:58;18948:6;18943:2;18935:6;18931:15;18924:31;18739:223;:::o;18968:366::-;19110:3;19131:67;19195:2;19190:3;19131:67;:::i;:::-;19124:74;;19207:93;19296:3;19207:93;:::i;:::-;19325:2;19320:3;19316:12;19309:19;;18968:366;;;:::o;19340:419::-;19506:4;19544:2;19533:9;19529:18;19521:26;;19593:9;19587:4;19583:20;19579:1;19568:9;19564:17;19557:47;19621:131;19747:4;19621:131;:::i;:::-;19613:139;;19340:419;;;:::o;19765:240::-;19905:34;19901:1;19893:6;19889:14;19882:58;19974:23;19969:2;19961:6;19957:15;19950:48;19765:240;:::o;20011:366::-;20153:3;20174:67;20238:2;20233:3;20174:67;:::i;:::-;20167:74;;20250:93;20339:3;20250:93;:::i;:::-;20368:2;20363:3;20359:12;20352:19;;20011:366;;;:::o;20383:419::-;20549:4;20587:2;20576:9;20572:18;20564:26;;20636:9;20630:4;20626:20;20622:1;20611:9;20607:17;20600:47;20664:131;20790:4;20664:131;:::i;:::-;20656:139;;20383:419;;;:::o;20808:239::-;20948:34;20944:1;20936:6;20932:14;20925:58;21017:22;21012:2;21004:6;21000:15;20993:47;20808:239;:::o;21053:366::-;21195:3;21216:67;21280:2;21275:3;21216:67;:::i;:::-;21209:74;;21292:93;21381:3;21292:93;:::i;:::-;21410:2;21405:3;21401:12;21394:19;;21053:366;;;:::o;21425:419::-;21591:4;21629:2;21618:9;21614:18;21606:26;;21678:9;21672:4;21668:20;21664:1;21653:9;21649:17;21642:47;21706:131;21832:4;21706:131;:::i;:::-;21698:139;;21425:419;;;:::o;21850:225::-;21990:34;21986:1;21978:6;21974:14;21967:58;22059:8;22054:2;22046:6;22042:15;22035:33;21850:225;:::o;22081:366::-;22223:3;22244:67;22308:2;22303:3;22244:67;:::i;:::-;22237:74;;22320:93;22409:3;22320:93;:::i;:::-;22438:2;22433:3;22429:12;22422:19;;22081:366;;;:::o;22453:419::-;22619:4;22657:2;22646:9;22642:18;22634:26;;22706:9;22700:4;22696:20;22692:1;22681:9;22677:17;22670:47;22734:131;22860:4;22734:131;:::i;:::-;22726:139;;22453:419;;;:::o;22878:223::-;23018:34;23014:1;23006:6;23002:14;22995:58;23087:6;23082:2;23074:6;23070:15;23063:31;22878:223;:::o;23107:366::-;23249:3;23270:67;23334:2;23329:3;23270:67;:::i;:::-;23263:74;;23346:93;23435:3;23346:93;:::i;:::-;23464:2;23459:3;23455:12;23448:19;;23107:366;;;:::o;23479:419::-;23645:4;23683:2;23672:9;23668:18;23660:26;;23732:9;23726:4;23722:20;23718:1;23707:9;23703:17;23696:47;23760:131;23886:4;23760:131;:::i;:::-;23752:139;;23479:419;;;:::o;23904:221::-;24044:34;24040:1;24032:6;24028:14;24021:58;24113:4;24108:2;24100:6;24096:15;24089:29;23904:221;:::o;24131:366::-;24273:3;24294:67;24358:2;24353:3;24294:67;:::i;:::-;24287:74;;24370:93;24459:3;24370:93;:::i;:::-;24488:2;24483:3;24479:12;24472:19;;24131:366;;;:::o;24503:419::-;24669:4;24707:2;24696:9;24692:18;24684:26;;24756:9;24750:4;24746:20;24742:1;24731:9;24727:17;24720:47;24784:131;24910:4;24784:131;:::i;:::-;24776:139;;24503:419;;;:::o;24928:224::-;25068:34;25064:1;25056:6;25052:14;25045:58;25137:7;25132:2;25124:6;25120:15;25113:32;24928:224;:::o;25158:366::-;25300:3;25321:67;25385:2;25380:3;25321:67;:::i;:::-;25314:74;;25397:93;25486:3;25397:93;:::i;:::-;25515:2;25510:3;25506:12;25499:19;;25158:366;;;:::o;25530:419::-;25696:4;25734:2;25723:9;25719:18;25711:26;;25783:9;25777:4;25773:20;25769:1;25758:9;25754:17;25747:47;25811:131;25937:4;25811:131;:::i;:::-;25803:139;;25530:419;;;:::o;25955:222::-;26095:34;26091:1;26083:6;26079:14;26072:58;26164:5;26159:2;26151:6;26147:15;26140:30;25955:222;:::o;26183:366::-;26325:3;26346:67;26410:2;26405:3;26346:67;:::i;:::-;26339:74;;26422:93;26511:3;26422:93;:::i;:::-;26540:2;26535:3;26531:12;26524:19;;26183:366;;;:::o;26555:419::-;26721:4;26759:2;26748:9;26744:18;26736:26;;26808:9;26802:4;26798:20;26794:1;26783:9;26779:17;26772:47;26836:131;26962:4;26836:131;:::i;:::-;26828:139;;26555:419;;;:::o;26980:236::-;27120:34;27116:1;27108:6;27104:14;27097:58;27189:19;27184:2;27176:6;27172:15;27165:44;26980:236;:::o;27222:366::-;27364:3;27385:67;27449:2;27444:3;27385:67;:::i;:::-;27378:74;;27461:93;27550:3;27461:93;:::i;:::-;27579:2;27574:3;27570:12;27563:19;;27222:366;;;:::o;27594:419::-;27760:4;27798:2;27787:9;27783:18;27775:26;;27847:9;27841:4;27837:20;27833:1;27822:9;27818:17;27811:47;27875:131;28001:4;27875:131;:::i;:::-;27867:139;;27594:419;;;:::o;28019:172::-;28159:24;28155:1;28147:6;28143:14;28136:48;28019:172;:::o;28197:366::-;28339:3;28360:67;28424:2;28419:3;28360:67;:::i;:::-;28353:74;;28436:93;28525:3;28436:93;:::i;:::-;28554:2;28549:3;28545:12;28538:19;;28197:366;;;:::o;28569:419::-;28735:4;28773:2;28762:9;28758:18;28750:26;;28822:9;28816:4;28812:20;28808:1;28797:9;28793:17;28786:47;28850:131;28976:4;28850:131;:::i;:::-;28842:139;;28569:419;;;:::o;28994:297::-;29134:34;29130:1;29122:6;29118:14;29111:58;29203:34;29198:2;29190:6;29186:15;29179:59;29272:11;29267:2;29259:6;29255:15;29248:36;28994:297;:::o;29297:366::-;29439:3;29460:67;29524:2;29519:3;29460:67;:::i;:::-;29453:74;;29536:93;29625:3;29536:93;:::i;:::-;29654:2;29649:3;29645:12;29638:19;;29297:366;;;:::o;29669:419::-;29835:4;29873:2;29862:9;29858:18;29850:26;;29922:9;29916:4;29912:20;29908:1;29897:9;29893:17;29886:47;29950:131;30076:4;29950:131;:::i;:::-;29942:139;;29669:419;;;:::o;30094:240::-;30234:34;30230:1;30222:6;30218:14;30211:58;30303:23;30298:2;30290:6;30286:15;30279:48;30094:240;:::o;30340:366::-;30482:3;30503:67;30567:2;30562:3;30503:67;:::i;:::-;30496:74;;30579:93;30668:3;30579:93;:::i;:::-;30697:2;30692:3;30688:12;30681:19;;30340:366;;;:::o;30712:419::-;30878:4;30916:2;30905:9;30901:18;30893:26;;30965:9;30959:4;30955:20;30951:1;30940:9;30936:17;30929:47;30993:131;31119:4;30993:131;:::i;:::-;30985:139;;30712:419;;;:::o;31137:169::-;31277:21;31273:1;31265:6;31261:14;31254:45;31137:169;:::o;31312:366::-;31454:3;31475:67;31539:2;31534:3;31475:67;:::i;:::-;31468:74;;31551:93;31640:3;31551:93;:::i;:::-;31669:2;31664:3;31660:12;31653:19;;31312:366;;;:::o;31684:419::-;31850:4;31888:2;31877:9;31873:18;31865:26;;31937:9;31931:4;31927:20;31923:1;31912:9;31908:17;31901:47;31965:131;32091:4;31965:131;:::i;:::-;31957:139;;31684:419;;;:::o;32109:241::-;32249:34;32245:1;32237:6;32233:14;32226:58;32318:24;32313:2;32305:6;32301:15;32294:49;32109:241;:::o;32356:366::-;32498:3;32519:67;32583:2;32578:3;32519:67;:::i;:::-;32512:74;;32595:93;32684:3;32595:93;:::i;:::-;32713:2;32708:3;32704:12;32697:19;;32356:366;;;:::o;32728:419::-;32894:4;32932:2;32921:9;32917:18;32909:26;;32981:9;32975:4;32971:20;32967:1;32956:9;32952:17;32945:47;33009:131;33135:4;33009:131;:::i;:::-;33001:139;;32728:419;;;:::o;33153:194::-;33193:4;33213:20;33231:1;33213:20;:::i;:::-;33208:25;;33247:20;33265:1;33247:20;:::i;:::-;33242:25;;33291:1;33288;33284:9;33276:17;;33315:1;33309:4;33306:11;33303:37;;;33320:18;;:::i;:::-;33303:37;33153:194;;;;:::o;33353:177::-;33493:29;33489:1;33481:6;33477:14;33470:53;33353:177;:::o;33536:366::-;33678:3;33699:67;33763:2;33758:3;33699:67;:::i;:::-;33692:74;;33775:93;33864:3;33775:93;:::i;:::-;33893:2;33888:3;33884:12;33877:19;;33536:366;;;:::o;33908:419::-;34074:4;34112:2;34101:9;34097:18;34089:26;;34161:9;34155:4;34151:20;34147:1;34136:9;34132:17;34125:47;34189:131;34315:4;34189:131;:::i;:::-;34181:139;;33908:419;;;:::o;34333:147::-;34434:11;34471:3;34456:18;;34333:147;;;;:::o;34486:114::-;;:::o;34606:398::-;34765:3;34786:83;34867:1;34862:3;34786:83;:::i;:::-;34779:90;;34878:93;34967:3;34878:93;:::i;:::-;34996:1;34991:3;34987:11;34980:18;;34606:398;;;:::o;35010:379::-;35194:3;35216:147;35359:3;35216:147;:::i;:::-;35209:154;;35380:3;35373:10;;35010:379;;;:::o;35395:220::-;35535:34;35531:1;35523:6;35519:14;35512:58;35604:3;35599:2;35591:6;35587:15;35580:28;35395:220;:::o;35621:366::-;35763:3;35784:67;35848:2;35843:3;35784:67;:::i;:::-;35777:74;;35860:93;35949:3;35860:93;:::i;:::-;35978:2;35973:3;35969:12;35962:19;;35621:366;;;:::o;35993:419::-;36159:4;36197:2;36186:9;36182:18;36174:26;;36246:9;36240:4;36236:20;36232:1;36221:9;36217:17;36210:47;36274:131;36400:4;36274:131;:::i;:::-;36266:139;;35993:419;;;:::o;36418:143::-;36475:5;36506:6;36500:13;36491:22;;36522:33;36549:5;36522:33;:::i;:::-;36418:143;;;;:::o;36567:351::-;36637:6;36686:2;36674:9;36665:7;36661:23;36657:32;36654:119;;;36692:79;;:::i;:::-;36654:119;36812:1;36837:64;36893:7;36884:6;36873:9;36869:22;36837:64;:::i;:::-;36827:74;;36783:128;36567:351;;;;:::o;36924:85::-;36969:7;36998:5;36987:16;;36924:85;;;:::o;37015:158::-;37073:9;37106:61;37124:42;37133:32;37159:5;37133:32;:::i;:::-;37124:42;:::i;:::-;37106:61;:::i;:::-;37093:74;;37015:158;;;:::o;37179:147::-;37274:45;37313:5;37274:45;:::i;:::-;37269:3;37262:58;37179:147;;:::o;37332:114::-;37399:6;37433:5;37427:12;37417:22;;37332:114;;;:::o;37452:184::-;37551:11;37585:6;37580:3;37573:19;37625:4;37620:3;37616:14;37601:29;;37452:184;;;;:::o;37642:132::-;37709:4;37732:3;37724:11;;37762:4;37757:3;37753:14;37745:22;;37642:132;;;:::o;37780:108::-;37857:24;37875:5;37857:24;:::i;:::-;37852:3;37845:37;37780:108;;:::o;37894:179::-;37963:10;37984:46;38026:3;38018:6;37984:46;:::i;:::-;38062:4;38057:3;38053:14;38039:28;;37894:179;;;;:::o;38079:113::-;38149:4;38181;38176:3;38172:14;38164:22;;38079:113;;;:::o;38228:732::-;38347:3;38376:54;38424:5;38376:54;:::i;:::-;38446:86;38525:6;38520:3;38446:86;:::i;:::-;38439:93;;38556:56;38606:5;38556:56;:::i;:::-;38635:7;38666:1;38651:284;38676:6;38673:1;38670:13;38651:284;;;38752:6;38746:13;38779:63;38838:3;38823:13;38779:63;:::i;:::-;38772:70;;38865:60;38918:6;38865:60;:::i;:::-;38855:70;;38711:224;38698:1;38695;38691:9;38686:14;;38651:284;;;38655:14;38951:3;38944:10;;38352:608;;;38228:732;;;;:::o;38966:831::-;39229:4;39267:3;39256:9;39252:19;39244:27;;39281:71;39349:1;39338:9;39334:17;39325:6;39281:71;:::i;:::-;39362:80;39438:2;39427:9;39423:18;39414:6;39362:80;:::i;:::-;39489:9;39483:4;39479:20;39474:2;39463:9;39459:18;39452:48;39517:108;39620:4;39611:6;39517:108;:::i;:::-;39509:116;;39635:72;39703:2;39692:9;39688:18;39679:6;39635:72;:::i;:::-;39717:73;39785:3;39774:9;39770:19;39761:6;39717:73;:::i;:::-;38966:831;;;;;;;;:::o

Swarm Source

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