ETH Price: $2,588.93 (+7.03%)
 

Overview

Max Total Supply

1,000,000,000 MEBOT

Holders

291

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
0.000000001 MEBOT

Value
$0.00
0x126f961dc708489772ebd86ecf22242879abaefd
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:
MeBot

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-07-20
*/

/*
                                                                    
Website: https://mebot.io/
Documents: https://docs.mebot.io/
Telegram Channel: https://t.me/MeBotNews
Telegram Group: https://t.me/MeBotChat
Twitter: https://twitter.com/MeBotEth

*/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.19;

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

    function allPairsLength() external view returns (uint256);

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

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

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

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

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

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

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

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

    function transferFrom(
        address from,
        address to,
        uint256 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 (uint256);

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    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 (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

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

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

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

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

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

    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    )
        external
        returns (
            uint256 amountA,
            uint256 amountB,
            uint256 liquidity
        );

    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (
            uint256 amountToken,
            uint256 amountETH,
            uint256 liquidity
        );

    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETH(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountToken, uint256 amountETH);

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETHWithPermit(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountToken, uint256 amountETH);

    function swapExactTokensForTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapTokensForExactTokens(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactETHForTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function swapTokensForExactETH(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactTokensForETH(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapETHForExactTokens(
        uint256 amountOut,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function quote(
        uint256 amountA,
        uint256 reserveA,
        uint256 reserveB
    ) external pure returns (uint256 amountB);

    function getAmountOut(
        uint256 amountIn,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountOut);

    function getAmountIn(
        uint256 amountOut,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountIn);

    function getAmountsOut(uint256 amountIn, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);

    function getAmountsIn(uint256 amountOut, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountETH);

    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountETH);

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable;

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
}

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @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
    );

    /**
     * @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 `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, 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 `from` to `to` 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 from,
        address to,
        uint256 amount
    ) external returns (bool);
}

/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

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

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

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }
}

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        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 {
        _transferOwnership(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"
        );
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

    /**
     * @dev See {IERC20-approve}.
     *
     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount)
        external
        virtual
        override
        returns (bool)
    {
        address owner = _msgSender();
        _approve(owner, 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}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) external virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        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)
        external
        virtual
        returns (bool)
    {
        address owner = _msgSender();
        uint256 currentAllowance = allowance(owner, spender);
        require(
            currentAllowance >= subtractedValue,
            "ERC20: decreased allowance below zero"
        );
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        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)
        external
        virtual
        returns (bool)
    {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, spender) + addedValue);
        return true;
    }

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

        _totalSupply += amount;
        unchecked {
            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
            _balances[account] += 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");

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
            // Overflow not possible: amount <= accountBalance <= totalSupply.
            _totalSupply -= 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 Updates `owner` s allowance for `spender` based on spent `amount`.
     *
     * Does not update the allowance amount in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Might emit an {Approval} event.
     */
    function _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(
                currentAllowance >= amount,
                "ERC20: insufficient allowance"
            );
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

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

        uint256 fromBalance = _balances[from];
        require(
            fromBalance >= amount,
            "ERC20: transfer amount exceeds balance"
        );
        unchecked {
            _balances[from] = fromBalance - amount;
            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
            // decrementing then incrementing.
            _balances[to] += amount;
        }

        emit Transfer(from, to, amount);
    }
}

/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract MeBot is ERC20, Ownable {
    uint8 private _decimals = 9;
    uint256 private _supply = 1000000000;
    uint256 public taxForLiquidity = 1;
    uint256 public taxForMarketing = 2;

    address public marketingWallet = 0xb484EC52969dB80a8fA16fffe87fd4dc4cAbaf84;
    address public DEAD = 0x000000000000000000000000000000000000dEaD;
    uint256 public _marketingReserves = 0;
    mapping(address => bool) public _isExcludedFromFee;
    mapping(address => uint256) public maxBuyAmount;
    uint256 public numTokensSellToAddToLiquidity = 300000 * 10**_decimals;
    uint256 public numTokensSellToAddToETH = 150000 * 10**_decimals;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public uniswapV2Pair;

    bool inSwapAndLiquify;

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    event MaxBuyAmount(uint256 amount);
    event NumTokensSellToAddToLiquidityUpdated(
        uint256 tokenToSell,
        uint256 tokenToETH
    );
    event TaxForLiquidityAndMarketingUpdated(
        uint256 liquidity,
        uint256 marketing
    );
    event MarketingWalletUpdated(address wallet);

      modifier lockTheSwap() {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    /**
     * @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() ERC20("MeBot", "MEBOT") {
        _mint(_msgSender(), (_supply * 10**_decimals));

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

        uniswapV2Router = _uniswapV2Router;

        _isExcludedFromFee[address(uniswapV2Router)] = true;
        _isExcludedFromFee[_msgSender()] = true;
        _isExcludedFromFee[marketingWallet] = true;
        marketingWallet = _msgSender();
    }

    /**
     * @dev Moves `amount` of tokens from `from` to `to`.
     *
     * This 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:
     *
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     */
    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(
            balanceOf(from) >= amount,
            "ERC20: transfer amount exceeds balance"
        );
        if (maxBuyAmount[from] > 0) {
            require(
                balanceOf(to) + amount <= maxBuyAmount[from],
                "BALANCE_LIMIT"
            );
        }
        if (
            (from == uniswapV2Pair || to == uniswapV2Pair) && !inSwapAndLiquify
        ) {
            if (from != uniswapV2Pair) {
                uint256 contractLiquidityBalance = balanceOf(address(this)) -
                    _marketingReserves;
                if (contractLiquidityBalance >= numTokensSellToAddToLiquidity) {
                    _swapAndLiquify(numTokensSellToAddToLiquidity);
                }
                if ((_marketingReserves) >= numTokensSellToAddToETH) {
                    _swapTokensForETH(numTokensSellToAddToETH);
                    _marketingReserves -= numTokensSellToAddToETH;
                    payable(marketingWallet).transfer(address(this).balance);
                }
            }

            uint256 transferAmount;
            if (_isExcludedFromFee[from] || _isExcludedFromFee[to]) {
                transferAmount = amount;
            } else {
                uint256 marketingShare = ((amount * taxForMarketing) / 100);
                uint256 liquidityShare = ((amount * taxForLiquidity) / 100);
                transferAmount = amount - (marketingShare + liquidityShare);
                _marketingReserves += marketingShare;

                super._transfer(
                    from,
                    address(this),
                    (marketingShare + liquidityShare)
                );
            }
            super._transfer(from, to, transferAmount);
        } else {
            super._transfer(from, to, amount);
        }
    }

    function excludeFromFee(address _address, bool _status) external onlyOwner {
        _isExcludedFromFee[_address] = _status;
    }

    function _swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
        uint256 half = (contractTokenBalance / 2);
        uint256 otherHalf = (contractTokenBalance - half);

        uint256 initialBalance = address(this).balance;

        _swapTokensForETH(half);

        uint256 newBalance = (address(this).balance - initialBalance);

        _addLiquidity(otherHalf, newBalance);

        emit SwapAndLiquify(half, newBalance, otherHalf);
    }

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

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

        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function _addLiquidity(uint256 tokenAmount, uint256 ethAmount)
        private
        lockTheSwap
    {
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            marketingWallet,
            block.timestamp
        );
    }

    function setMarketingWallet(address newWallet) public onlyOwner {
        require(newWallet != DEAD, "LP Pair cannot be the Dead wallet, or 0!");
        require(
            newWallet != address(0),
            "LP Pair cannot be the Dead wallet, or 0!"
        );
        marketingWallet = newWallet;
        emit MarketingWalletUpdated(newWallet);
    }

    function setTaxForLiquidityAndMarketing(
        uint256 _taxForLiquidity,
        uint256 _taxForMarketing
    ) public onlyOwner {
        require(
            (_taxForLiquidity + _taxForMarketing) <= 10,
            "ERC20: total tax must not be greater than 10%"
        );
        taxForLiquidity = _taxForLiquidity;
        taxForMarketing = _taxForMarketing;

        emit TaxForLiquidityAndMarketingUpdated(
            taxForLiquidity,
            taxForMarketing
        );
    }

    function setNumTokensSellToAddToLiquidity(
        uint256 _numTokensSellToAddToLiquidity,
        uint256 _numTokensSellToAddToETH
    ) public onlyOwner {
        require(
            _numTokensSellToAddToLiquidity < (_supply * 2) / 100,
            "Cannot liquidate more than 2% of the supply at once!"
        );
        require(
            _numTokensSellToAddToETH < (_supply * 2) / 100,
            "Cannot liquidate more than 2% of the supply at once!"
        );
        numTokensSellToAddToLiquidity =
            _numTokensSellToAddToLiquidity *
            10**_decimals;
        numTokensSellToAddToETH = _numTokensSellToAddToETH * 10**_decimals;

        emit NumTokensSellToAddToLiquidityUpdated(
            numTokensSellToAddToLiquidity,
            numTokensSellToAddToETH
        );
    }

    function setMaxBuyAmount(uint256 value) external onlyOwner {
        require(value != maxBuyAmount[uniswapV2Pair], "invalid amount");
        maxBuyAmount[uniswapV2Pair] = value;
        emit MaxBuyAmount(value);
    }

    receive() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"wallet","type":"address"}],"name":"MarketingWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"MaxBuyAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenToSell","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokenToETH","type":"uint256"}],"name":"NumTokensSellToAddToLiquidityUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"liquidity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"marketing","type":"uint256"}],"name":"TaxForLiquidityAndMarketingUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingReserves","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"maxBuyAmount","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":"numTokensSellToAddToETH","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numTokensSellToAddToLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setMaxBuyAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_numTokensSellToAddToLiquidity","type":"uint256"},{"internalType":"uint256","name":"_numTokensSellToAddToETH","type":"uint256"}],"name":"setNumTokensSellToAddToLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_taxForLiquidity","type":"uint256"},{"internalType":"uint256","name":"_taxForMarketing","type":"uint256"}],"name":"setTaxForLiquidityAndMarketing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","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"},{"stateMutability":"payable","type":"receive"}]

60a06040526009600560146101000a81548160ff021916908360ff160217905550633b9aca006006556001600755600260085573b484ec52969db80a8fa16fffe87fd4dc4cabaf84600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600b55600560149054906101000a900460ff16600a620000ed91906200096f565b620493e0620000fd9190620009c0565b600e55600560149054906101000a900460ff16600a6200011e91906200096f565b620249f06200012e9190620009c0565b600f553480156200013e57600080fd5b506040518060400160405280600581526020017f4d65426f740000000000000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f4d45424f540000000000000000000000000000000000000000000000000000008152508160039081620001bc919062000c7b565b508060049081620001ce919062000c7b565b505050620001f1620001e5620005c260201b60201c565b620005ca60201b60201c565b6200023e62000205620005c260201b60201c565b600560149054906101000a900460ff16600a6200022391906200096f565b600654620002329190620009c0565b6200069060201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002a3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002c9919062000dcc565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000331573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000357919062000dcc565b6040518363ffffffff1660e01b81526004016200037692919062000e0f565b6020604051808303816000875af115801562000396573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003bc919062000dcc565b601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250506001600c600060805173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c6000620004a0620005c260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506200057b620005c260201b60201c565b600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505062000f28565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000702576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006f99062000e9d565b60405180910390fd5b806002600082825462000716919062000ebf565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620007c9919062000f0b565b60405180910390a35050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000863578086048111156200083b576200083a620007d5565b5b60018516156200084b5780820291505b80810290506200085b8562000804565b94506200081b565b94509492505050565b6000826200087e576001905062000951565b816200088e576000905062000951565b8160018114620008a75760028114620008b257620008e8565b600191505062000951565b60ff841115620008c757620008c6620007d5565b5b8360020a915084821115620008e157620008e0620007d5565b5b5062000951565b5060208310610133831016604e8410600b8410161715620009225782820a9050838111156200091c576200091b620007d5565b5b62000951565b62000931848484600162000811565b925090508184048111156200094b576200094a620007d5565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b60006200097c8262000958565b9150620009898362000962565b9250620009b87fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846200086c565b905092915050565b6000620009cd8262000958565b9150620009da8362000958565b9250828202620009ea8162000958565b9150828204841483151762000a045762000a03620007d5565b5b5092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000a8d57607f821691505b60208210810362000aa35762000aa262000a45565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000b0d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000ace565b62000b19868362000ace565b95508019841693508086168417925050509392505050565b6000819050919050565b600062000b5c62000b5662000b508462000958565b62000b31565b62000958565b9050919050565b6000819050919050565b62000b788362000b3b565b62000b9062000b878262000b63565b84845462000adb565b825550505050565b600090565b62000ba762000b98565b62000bb481848462000b6d565b505050565b5b8181101562000bdc5762000bd060008262000b9d565b60018101905062000bba565b5050565b601f82111562000c2b5762000bf58162000aa9565b62000c008462000abe565b8101602085101562000c10578190505b62000c2862000c1f8562000abe565b83018262000bb9565b50505b505050565b600082821c905092915050565b600062000c506000198460080262000c30565b1980831691505092915050565b600062000c6b838362000c3d565b9150826002028217905092915050565b62000c868262000a0b565b67ffffffffffffffff81111562000ca25762000ca162000a16565b5b62000cae825462000a74565b62000cbb82828562000be0565b600060209050601f83116001811462000cf3576000841562000cde578287015190505b62000cea858262000c5d565b86555062000d5a565b601f19841662000d038662000aa9565b60005b8281101562000d2d5784890151825560018201915060208501945060208101905062000d06565b8683101562000d4d578489015162000d49601f89168262000c3d565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000d948262000d67565b9050919050565b62000da68162000d87565b811462000db257600080fd5b50565b60008151905062000dc68162000d9b565b92915050565b60006020828403121562000de55762000de462000d62565b5b600062000df58482850162000db5565b91505092915050565b62000e098162000d87565b82525050565b600060408201905062000e26600083018562000dfe565b62000e35602083018462000dfe565b9392505050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000e85601f8362000e3c565b915062000e928262000e4d565b602082019050919050565b6000602082019050818103600083015262000eb88162000e76565b9050919050565b600062000ecc8262000958565b915062000ed98362000958565b925082820190508082111562000ef45762000ef3620007d5565b5b92915050565b62000f058162000958565b82525050565b600060208201905062000f22600083018462000efa565b92915050565b60805161334b62000f676000396000818161084601528181611bd401528181611cb501528181611cdc0152818161200e0152612035015261334b6000f3fe6080604052600436106101d15760003560e01c806375f0a874116100f7578063ad16a0cf11610095578063df8408fe11610064578063df8408fe146106c3578063f2fde38b146106ec578063f345bd8514610715578063f34eb0b814610740576101d8565b8063ad16a0cf14610605578063c0fdea5714610630578063d12a76881461065b578063dd62ed3e14610686576101d8565b80638fcc250d116100d15780638fcc250d1461053757806395d89b4114610560578063a457c2d71461058b578063a9059cbb146105c8576101d8565b806375f0a874146104a4578063768dc710146104cf5780638da5cb5b1461050c576101d8565b8063395093511161016f5780635e6abae71161013e5780635e6abae7146103ea5780635f7ce6a71461042757806370a0823114610450578063715018a61461048d576101d8565b8063395093511461032e57806349bd5a5e1461036b578063527ffabd146103965780635d098b38146103c1576101d8565b80631694505e116101ab5780631694505e1461027057806318160ddd1461029b57806323b872dd146102c6578063313ce56714610303576101d8565b806303fd2a45146101dd57806306fdde0314610208578063095ea7b314610233576101d8565b366101d857005b600080fd5b3480156101e957600080fd5b506101f2610769565b6040516101ff9190612160565b60405180910390f35b34801561021457600080fd5b5061021d61078f565b60405161022a919061220b565b60405180910390f35b34801561023f57600080fd5b5061025a60048036038101906102559190612294565b610821565b60405161026791906122ef565b60405180910390f35b34801561027c57600080fd5b50610285610844565b6040516102929190612369565b60405180910390f35b3480156102a757600080fd5b506102b0610868565b6040516102bd9190612393565b60405180910390f35b3480156102d257600080fd5b506102ed60048036038101906102e891906123ae565b610872565b6040516102fa91906122ef565b60405180910390f35b34801561030f57600080fd5b506103186108a1565b604051610325919061241d565b60405180910390f35b34801561033a57600080fd5b5061035560048036038101906103509190612294565b6108aa565b60405161036291906122ef565b60405180910390f35b34801561037757600080fd5b506103806108e1565b60405161038d9190612160565b60405180910390f35b3480156103a257600080fd5b506103ab610907565b6040516103b89190612393565b60405180910390f35b3480156103cd57600080fd5b506103e860048036038101906103e39190612438565b61090d565b005b3480156103f657600080fd5b50610411600480360381019061040c9190612438565b610a8f565b60405161041e9190612393565b60405180910390f35b34801561043357600080fd5b5061044e60048036038101906104499190612465565b610aa7565b005b34801561045c57600080fd5b5061047760048036038101906104729190612438565b610b4d565b6040516104849190612393565b60405180910390f35b34801561049957600080fd5b506104a2610b95565b005b3480156104b057600080fd5b506104b9610ba9565b6040516104c69190612160565b60405180910390f35b3480156104db57600080fd5b506104f660048036038101906104f19190612438565b610bcf565b60405161050391906122ef565b60405180910390f35b34801561051857600080fd5b50610521610bef565b60405161052e9190612160565b60405180910390f35b34801561054357600080fd5b5061055e60048036038101906105599190612465565b610c19565b005b34801561056c57600080fd5b50610575610d74565b604051610582919061220b565b60405180910390f35b34801561059757600080fd5b506105b260048036038101906105ad9190612294565b610e06565b6040516105bf91906122ef565b60405180910390f35b3480156105d457600080fd5b506105ef60048036038101906105ea9190612294565b610e7d565b6040516105fc91906122ef565b60405180910390f35b34801561061157600080fd5b5061061a610ea0565b6040516106279190612393565b60405180910390f35b34801561063c57600080fd5b50610645610ea6565b6040516106529190612393565b60405180910390f35b34801561066757600080fd5b50610670610eac565b60405161067d9190612393565b60405180910390f35b34801561069257600080fd5b506106ad60048036038101906106a891906124a5565b610eb2565b6040516106ba9190612393565b60405180910390f35b3480156106cf57600080fd5b506106ea60048036038101906106e59190612511565b610f39565b005b3480156106f857600080fd5b50610713600480360381019061070e9190612438565b610f9c565b005b34801561072157600080fd5b5061072a61101f565b6040516107379190612393565b60405180910390f35b34801561074c57600080fd5b5061076760048036038101906107629190612551565b611025565b005b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606003805461079e906125ad565b80601f01602080910402602001604051908101604052809291908181526020018280546107ca906125ad565b80156108175780601f106107ec57610100808354040283529160200191610817565b820191906000526020600020905b8154815290600101906020018083116107fa57829003601f168201915b5050505050905090565b60008061082c611170565b9050610839818585611178565b600191505092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b60008061087d611170565b905061088a858285611341565b6108958585856113cd565b60019150509392505050565b60006009905090565b6000806108b5611170565b90506108d68185856108c78589610eb2565b6108d1919061260d565b611178565b600191505092915050565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60085481565b610915611915565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036109a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099c906126b3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610a14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0b906126b3565b60405180910390fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fbf86feedee5b30c30a8243bd21deebb704d141478d39b1be04fe5ee739f214e781604051610a849190612160565b60405180910390a150565b600d6020528060005260406000206000915090505481565b610aaf611915565b600a8183610abd919061260d565b1115610afe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af590612745565b60405180910390fd5b81600781905550806008819055507f34585b0a0deb59d4161943f350690f10ebb31b301d3b62c292e997d164e652dd600754600854604051610b41929190612765565b60405180910390a15050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610b9d611915565b610ba76000611993565b565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c6020528060005260406000206000915054906101000a900460ff1681565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610c21611915565b60646002600654610c32919061278e565b610c3c91906127ff565b8210610c7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c74906128a2565b60405180910390fd5b60646002600654610c8e919061278e565b610c9891906127ff565b8110610cd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd0906128a2565b60405180910390fd5b600560149054906101000a900460ff16600a610cf591906129f5565b82610d00919061278e565b600e81905550600560149054906101000a900460ff16600a610d2291906129f5565b81610d2d919061278e565b600f819055507f8732b9d675d962d04898c9d88f51f901a38cfd0c4ba6847d8c791825998a5a23600e54600f54604051610d68929190612765565b60405180910390a15050565b606060048054610d83906125ad565b80601f0160208091040260200160405190810160405280929190818152602001828054610daf906125ad565b8015610dfc5780601f10610dd157610100808354040283529160200191610dfc565b820191906000526020600020905b815481529060010190602001808311610ddf57829003601f168201915b5050505050905090565b600080610e11611170565b90506000610e1f8286610eb2565b905083811015610e64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5b90612ab2565b60405180910390fd5b610e718286868403611178565b60019250505092915050565b600080610e88611170565b9050610e958185856113cd565b600191505092915050565b600f5481565b600b5481565b600e5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610f41611915565b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b610fa4611915565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611013576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100a90612b44565b60405180910390fd5b61101c81611993565b50565b60075481565b61102d611915565b600d6000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481036110d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c790612bb0565b60405180910390fd5b80600d6000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507f22582f57fbe6a1599b9423df956f74b48ce2e3a014b0f33ccd2ee28ab330454e816040516111659190612393565b60405180910390a150565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036111e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111de90612c42565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611256576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124d90612cd4565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516113349190612393565b60405180910390a3505050565b600061134d8484610eb2565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146113c757818110156113b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b090612d40565b60405180910390fd5b6113c68484848403611178565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361143c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143390612dd2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036114ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a290612e64565b60405180910390fd5b806114b584610b4d565b10156114f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ed90612ef6565b60405180910390fd5b6000600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156115d457600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548161158884610b4d565b611592919061260d565b11156115d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ca90612f62565b60405180910390fd5b5b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061167d5750601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80156116965750601060149054906101000a900460ff16155b1561190457601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146117bc576000600b546116fe30610b4d565b6117089190612f82565b9050600e54811061171f5761171e600e54611a59565b5b600f54600b54106117ba57611735600f54611b1a565b600f54600b60008282546117499190612f82565b92505081905550600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156117b8573d6000803e3d6000fd5b505b505b6000600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061185f5750600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561186c578190506118f3565b600060646008548461187e919061278e565b61188891906127ff565b9050600060646007548561189c919061278e565b6118a691906127ff565b905080826118b4919061260d565b846118bf9190612f82565b925081600b60008282546118d3919061260d565b925050819055506118f0863083856118eb919061260d565b611d8d565b50505b6118fe848483611d8d565b50611910565b61190f838383611d8d565b5b505050565b61191d611170565b73ffffffffffffffffffffffffffffffffffffffff1661193b610bef565b73ffffffffffffffffffffffffffffffffffffffff1614611991576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198890613002565b60405180910390fd5b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001601060146101000a81548160ff0219169083151502179055506000600282611a8391906127ff565b905060008183611a939190612f82565b90506000479050611aa383611b1a565b60008147611ab19190612f82565b9050611abd8382611fed565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561848285604051611af093929190613022565b60405180910390a1505050506000601060146101000a81548160ff02191690831515021790555050565b6001601060146101000a81548160ff0219169083151502179055506000600267ffffffffffffffff811115611b5257611b51613059565b5b604051908082528060200260200182016040528015611b805781602001602082028036833780820191505090505b5090503081600081518110611b9857611b97613088565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c6191906130cc565b81600181518110611c7557611c74613088565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050611cda307f000000000000000000000000000000000000000000000000000000000000000084611178565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401611d3c9594939291906131f2565b600060405180830381600087803b158015611d5657600080fd5b505af1158015611d6a573d6000803e3d6000fd5b50505050506000601060146101000a81548160ff02191690831515021790555050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611dfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df390612dd2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6290612e64565b60405180910390fd5b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611ef1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee890612ef6565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611fdf9190612393565b60405180910390a350505050565b6001601060146101000a81548160ff021916908315150217905550612033307f000000000000000000000000000000000000000000000000000000000000000084611178565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b81526004016120ba9695949392919061324c565b60606040518083038185885af11580156120d8573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906120fd91906132c2565b5050506000601060146101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061214a8261211f565b9050919050565b61215a8161213f565b82525050565b60006020820190506121756000830184612151565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156121b557808201518184015260208101905061219a565b60008484015250505050565b6000601f19601f8301169050919050565b60006121dd8261217b565b6121e78185612186565b93506121f7818560208601612197565b612200816121c1565b840191505092915050565b6000602082019050818103600083015261222581846121d2565b905092915050565b600080fd5b61223b8161213f565b811461224657600080fd5b50565b60008135905061225881612232565b92915050565b6000819050919050565b6122718161225e565b811461227c57600080fd5b50565b60008135905061228e81612268565b92915050565b600080604083850312156122ab576122aa61222d565b5b60006122b985828601612249565b92505060206122ca8582860161227f565b9150509250929050565b60008115159050919050565b6122e9816122d4565b82525050565b600060208201905061230460008301846122e0565b92915050565b6000819050919050565b600061232f61232a6123258461211f565b61230a565b61211f565b9050919050565b600061234182612314565b9050919050565b600061235382612336565b9050919050565b61236381612348565b82525050565b600060208201905061237e600083018461235a565b92915050565b61238d8161225e565b82525050565b60006020820190506123a86000830184612384565b92915050565b6000806000606084860312156123c7576123c661222d565b5b60006123d586828701612249565b93505060206123e686828701612249565b92505060406123f78682870161227f565b9150509250925092565b600060ff82169050919050565b61241781612401565b82525050565b6000602082019050612432600083018461240e565b92915050565b60006020828403121561244e5761244d61222d565b5b600061245c84828501612249565b91505092915050565b6000806040838503121561247c5761247b61222d565b5b600061248a8582860161227f565b925050602061249b8582860161227f565b9150509250929050565b600080604083850312156124bc576124bb61222d565b5b60006124ca85828601612249565b92505060206124db85828601612249565b9150509250929050565b6124ee816122d4565b81146124f957600080fd5b50565b60008135905061250b816124e5565b92915050565b600080604083850312156125285761252761222d565b5b600061253685828601612249565b9250506020612547858286016124fc565b9150509250929050565b6000602082840312156125675761256661222d565b5b60006125758482850161227f565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806125c557607f821691505b6020821081036125d8576125d761257e565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006126188261225e565b91506126238361225e565b925082820190508082111561263b5761263a6125de565b5b92915050565b7f4c5020506169722063616e6e6f742062652074686520446561642077616c6c6560008201527f742c206f72203021000000000000000000000000000000000000000000000000602082015250565b600061269d602883612186565b91506126a882612641565b604082019050919050565b600060208201905081810360008301526126cc81612690565b9050919050565b7f45524332303a20746f74616c20746178206d757374206e6f742062652067726560008201527f61746572207468616e2031302500000000000000000000000000000000000000602082015250565b600061272f602d83612186565b915061273a826126d3565b604082019050919050565b6000602082019050818103600083015261275e81612722565b9050919050565b600060408201905061277a6000830185612384565b6127876020830184612384565b9392505050565b60006127998261225e565b91506127a48361225e565b92508282026127b28161225e565b915082820484148315176127c9576127c86125de565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061280a8261225e565b91506128158361225e565b925082612825576128246127d0565b5b828204905092915050565b7f43616e6e6f74206c6971756964617465206d6f7265207468616e203225206f6660008201527f2074686520737570706c79206174206f6e636521000000000000000000000000602082015250565b600061288c603483612186565b915061289782612830565b604082019050919050565b600060208201905081810360008301526128bb8161287f565b9050919050565b60008160011c9050919050565b6000808291508390505b6001851115612919578086048111156128f5576128f46125de565b5b60018516156129045780820291505b8081029050612912856128c2565b94506128d9565b94509492505050565b60008261293257600190506129ee565b8161294057600090506129ee565b816001811461295657600281146129605761298f565b60019150506129ee565b60ff841115612972576129716125de565b5b8360020a915084821115612989576129886125de565b5b506129ee565b5060208310610133831016604e8410600b84101617156129c45782820a9050838111156129bf576129be6125de565b5b6129ee565b6129d184848460016128cf565b925090508184048111156129e8576129e76125de565b5b81810290505b9392505050565b6000612a008261225e565b9150612a0b83612401565b9250612a387fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484612922565b905092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000612a9c602583612186565b9150612aa782612a40565b604082019050919050565b60006020820190508181036000830152612acb81612a8f565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612b2e602683612186565b9150612b3982612ad2565b604082019050919050565b60006020820190508181036000830152612b5d81612b21565b9050919050565b7f696e76616c696420616d6f756e74000000000000000000000000000000000000600082015250565b6000612b9a600e83612186565b9150612ba582612b64565b602082019050919050565b60006020820190508181036000830152612bc981612b8d565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612c2c602483612186565b9150612c3782612bd0565b604082019050919050565b60006020820190508181036000830152612c5b81612c1f565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000612cbe602283612186565b9150612cc982612c62565b604082019050919050565b60006020820190508181036000830152612ced81612cb1565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000612d2a601d83612186565b9150612d3582612cf4565b602082019050919050565b60006020820190508181036000830152612d5981612d1d565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612dbc602583612186565b9150612dc782612d60565b604082019050919050565b60006020820190508181036000830152612deb81612daf565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000612e4e602383612186565b9150612e5982612df2565b604082019050919050565b60006020820190508181036000830152612e7d81612e41565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000612ee0602683612186565b9150612eeb82612e84565b604082019050919050565b60006020820190508181036000830152612f0f81612ed3565b9050919050565b7f42414c414e43455f4c494d495400000000000000000000000000000000000000600082015250565b6000612f4c600d83612186565b9150612f5782612f16565b602082019050919050565b60006020820190508181036000830152612f7b81612f3f565b9050919050565b6000612f8d8261225e565b9150612f988361225e565b9250828203905081811115612fb057612faf6125de565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612fec602083612186565b9150612ff782612fb6565b602082019050919050565b6000602082019050818103600083015261301b81612fdf565b9050919050565b60006060820190506130376000830186612384565b6130446020830185612384565b6130516040830184612384565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506130c681612232565b92915050565b6000602082840312156130e2576130e161222d565b5b60006130f0848285016130b7565b91505092915050565b6000819050919050565b600061311e613119613114846130f9565b61230a565b61225e565b9050919050565b61312e81613103565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6131698161213f565b82525050565b600061317b8383613160565b60208301905092915050565b6000602082019050919050565b600061319f82613134565b6131a9818561313f565b93506131b483613150565b8060005b838110156131e55781516131cc888261316f565b97506131d783613187565b9250506001810190506131b8565b5085935050505092915050565b600060a0820190506132076000830188612384565b6132146020830187613125565b81810360408301526132268186613194565b90506132356060830185612151565b6132426080830184612384565b9695505050505050565b600060c0820190506132616000830189612151565b61326e6020830188612384565b61327b6040830187613125565b6132886060830186613125565b6132956080830185612151565b6132a260a0830184612384565b979650505050505050565b6000815190506132bc81612268565b92915050565b6000806000606084860312156132db576132da61222d565b5b60006132e9868287016132ad565b93505060206132fa868287016132ad565b925050604061330b868287016132ad565b915050925092509256fea26469706673582212204e171f0ef906fa682d741c4d379ba035c14710cd3b6e2ffa8086d18bf982bb0264736f6c63430008130033

Deployed Bytecode

0x6080604052600436106101d15760003560e01c806375f0a874116100f7578063ad16a0cf11610095578063df8408fe11610064578063df8408fe146106c3578063f2fde38b146106ec578063f345bd8514610715578063f34eb0b814610740576101d8565b8063ad16a0cf14610605578063c0fdea5714610630578063d12a76881461065b578063dd62ed3e14610686576101d8565b80638fcc250d116100d15780638fcc250d1461053757806395d89b4114610560578063a457c2d71461058b578063a9059cbb146105c8576101d8565b806375f0a874146104a4578063768dc710146104cf5780638da5cb5b1461050c576101d8565b8063395093511161016f5780635e6abae71161013e5780635e6abae7146103ea5780635f7ce6a71461042757806370a0823114610450578063715018a61461048d576101d8565b8063395093511461032e57806349bd5a5e1461036b578063527ffabd146103965780635d098b38146103c1576101d8565b80631694505e116101ab5780631694505e1461027057806318160ddd1461029b57806323b872dd146102c6578063313ce56714610303576101d8565b806303fd2a45146101dd57806306fdde0314610208578063095ea7b314610233576101d8565b366101d857005b600080fd5b3480156101e957600080fd5b506101f2610769565b6040516101ff9190612160565b60405180910390f35b34801561021457600080fd5b5061021d61078f565b60405161022a919061220b565b60405180910390f35b34801561023f57600080fd5b5061025a60048036038101906102559190612294565b610821565b60405161026791906122ef565b60405180910390f35b34801561027c57600080fd5b50610285610844565b6040516102929190612369565b60405180910390f35b3480156102a757600080fd5b506102b0610868565b6040516102bd9190612393565b60405180910390f35b3480156102d257600080fd5b506102ed60048036038101906102e891906123ae565b610872565b6040516102fa91906122ef565b60405180910390f35b34801561030f57600080fd5b506103186108a1565b604051610325919061241d565b60405180910390f35b34801561033a57600080fd5b5061035560048036038101906103509190612294565b6108aa565b60405161036291906122ef565b60405180910390f35b34801561037757600080fd5b506103806108e1565b60405161038d9190612160565b60405180910390f35b3480156103a257600080fd5b506103ab610907565b6040516103b89190612393565b60405180910390f35b3480156103cd57600080fd5b506103e860048036038101906103e39190612438565b61090d565b005b3480156103f657600080fd5b50610411600480360381019061040c9190612438565b610a8f565b60405161041e9190612393565b60405180910390f35b34801561043357600080fd5b5061044e60048036038101906104499190612465565b610aa7565b005b34801561045c57600080fd5b5061047760048036038101906104729190612438565b610b4d565b6040516104849190612393565b60405180910390f35b34801561049957600080fd5b506104a2610b95565b005b3480156104b057600080fd5b506104b9610ba9565b6040516104c69190612160565b60405180910390f35b3480156104db57600080fd5b506104f660048036038101906104f19190612438565b610bcf565b60405161050391906122ef565b60405180910390f35b34801561051857600080fd5b50610521610bef565b60405161052e9190612160565b60405180910390f35b34801561054357600080fd5b5061055e60048036038101906105599190612465565b610c19565b005b34801561056c57600080fd5b50610575610d74565b604051610582919061220b565b60405180910390f35b34801561059757600080fd5b506105b260048036038101906105ad9190612294565b610e06565b6040516105bf91906122ef565b60405180910390f35b3480156105d457600080fd5b506105ef60048036038101906105ea9190612294565b610e7d565b6040516105fc91906122ef565b60405180910390f35b34801561061157600080fd5b5061061a610ea0565b6040516106279190612393565b60405180910390f35b34801561063c57600080fd5b50610645610ea6565b6040516106529190612393565b60405180910390f35b34801561066757600080fd5b50610670610eac565b60405161067d9190612393565b60405180910390f35b34801561069257600080fd5b506106ad60048036038101906106a891906124a5565b610eb2565b6040516106ba9190612393565b60405180910390f35b3480156106cf57600080fd5b506106ea60048036038101906106e59190612511565b610f39565b005b3480156106f857600080fd5b50610713600480360381019061070e9190612438565b610f9c565b005b34801561072157600080fd5b5061072a61101f565b6040516107379190612393565b60405180910390f35b34801561074c57600080fd5b5061076760048036038101906107629190612551565b611025565b005b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606003805461079e906125ad565b80601f01602080910402602001604051908101604052809291908181526020018280546107ca906125ad565b80156108175780601f106107ec57610100808354040283529160200191610817565b820191906000526020600020905b8154815290600101906020018083116107fa57829003601f168201915b5050505050905090565b60008061082c611170565b9050610839818585611178565b600191505092915050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b60008061087d611170565b905061088a858285611341565b6108958585856113cd565b60019150509392505050565b60006009905090565b6000806108b5611170565b90506108d68185856108c78589610eb2565b6108d1919061260d565b611178565b600191505092915050565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60085481565b610915611915565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036109a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099c906126b3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610a14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0b906126b3565b60405180910390fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fbf86feedee5b30c30a8243bd21deebb704d141478d39b1be04fe5ee739f214e781604051610a849190612160565b60405180910390a150565b600d6020528060005260406000206000915090505481565b610aaf611915565b600a8183610abd919061260d565b1115610afe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af590612745565b60405180910390fd5b81600781905550806008819055507f34585b0a0deb59d4161943f350690f10ebb31b301d3b62c292e997d164e652dd600754600854604051610b41929190612765565b60405180910390a15050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610b9d611915565b610ba76000611993565b565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c6020528060005260406000206000915054906101000a900460ff1681565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610c21611915565b60646002600654610c32919061278e565b610c3c91906127ff565b8210610c7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c74906128a2565b60405180910390fd5b60646002600654610c8e919061278e565b610c9891906127ff565b8110610cd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd0906128a2565b60405180910390fd5b600560149054906101000a900460ff16600a610cf591906129f5565b82610d00919061278e565b600e81905550600560149054906101000a900460ff16600a610d2291906129f5565b81610d2d919061278e565b600f819055507f8732b9d675d962d04898c9d88f51f901a38cfd0c4ba6847d8c791825998a5a23600e54600f54604051610d68929190612765565b60405180910390a15050565b606060048054610d83906125ad565b80601f0160208091040260200160405190810160405280929190818152602001828054610daf906125ad565b8015610dfc5780601f10610dd157610100808354040283529160200191610dfc565b820191906000526020600020905b815481529060010190602001808311610ddf57829003601f168201915b5050505050905090565b600080610e11611170565b90506000610e1f8286610eb2565b905083811015610e64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5b90612ab2565b60405180910390fd5b610e718286868403611178565b60019250505092915050565b600080610e88611170565b9050610e958185856113cd565b600191505092915050565b600f5481565b600b5481565b600e5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610f41611915565b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b610fa4611915565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611013576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100a90612b44565b60405180910390fd5b61101c81611993565b50565b60075481565b61102d611915565b600d6000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481036110d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c790612bb0565b60405180910390fd5b80600d6000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507f22582f57fbe6a1599b9423df956f74b48ce2e3a014b0f33ccd2ee28ab330454e816040516111659190612393565b60405180910390a150565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036111e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111de90612c42565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611256576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124d90612cd4565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516113349190612393565b60405180910390a3505050565b600061134d8484610eb2565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146113c757818110156113b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b090612d40565b60405180910390fd5b6113c68484848403611178565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361143c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143390612dd2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036114ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a290612e64565b60405180910390fd5b806114b584610b4d565b10156114f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ed90612ef6565b60405180910390fd5b6000600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156115d457600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548161158884610b4d565b611592919061260d565b11156115d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ca90612f62565b60405180910390fd5b5b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061167d5750601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80156116965750601060149054906101000a900460ff16155b1561190457601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146117bc576000600b546116fe30610b4d565b6117089190612f82565b9050600e54811061171f5761171e600e54611a59565b5b600f54600b54106117ba57611735600f54611b1a565b600f54600b60008282546117499190612f82565b92505081905550600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156117b8573d6000803e3d6000fd5b505b505b6000600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061185f5750600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561186c578190506118f3565b600060646008548461187e919061278e565b61188891906127ff565b9050600060646007548561189c919061278e565b6118a691906127ff565b905080826118b4919061260d565b846118bf9190612f82565b925081600b60008282546118d3919061260d565b925050819055506118f0863083856118eb919061260d565b611d8d565b50505b6118fe848483611d8d565b50611910565b61190f838383611d8d565b5b505050565b61191d611170565b73ffffffffffffffffffffffffffffffffffffffff1661193b610bef565b73ffffffffffffffffffffffffffffffffffffffff1614611991576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198890613002565b60405180910390fd5b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001601060146101000a81548160ff0219169083151502179055506000600282611a8391906127ff565b905060008183611a939190612f82565b90506000479050611aa383611b1a565b60008147611ab19190612f82565b9050611abd8382611fed565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561848285604051611af093929190613022565b60405180910390a1505050506000601060146101000a81548160ff02191690831515021790555050565b6001601060146101000a81548160ff0219169083151502179055506000600267ffffffffffffffff811115611b5257611b51613059565b5b604051908082528060200260200182016040528015611b805781602001602082028036833780820191505090505b5090503081600081518110611b9857611b97613088565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c6191906130cc565b81600181518110611c7557611c74613088565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050611cda307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611178565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401611d3c9594939291906131f2565b600060405180830381600087803b158015611d5657600080fd5b505af1158015611d6a573d6000803e3d6000fd5b50505050506000601060146101000a81548160ff02191690831515021790555050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611dfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df390612dd2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6290612e64565b60405180910390fd5b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611ef1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee890612ef6565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611fdf9190612393565b60405180910390a350505050565b6001601060146101000a81548160ff021916908315150217905550612033307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611178565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b81526004016120ba9695949392919061324c565b60606040518083038185885af11580156120d8573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906120fd91906132c2565b5050506000601060146101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061214a8261211f565b9050919050565b61215a8161213f565b82525050565b60006020820190506121756000830184612151565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156121b557808201518184015260208101905061219a565b60008484015250505050565b6000601f19601f8301169050919050565b60006121dd8261217b565b6121e78185612186565b93506121f7818560208601612197565b612200816121c1565b840191505092915050565b6000602082019050818103600083015261222581846121d2565b905092915050565b600080fd5b61223b8161213f565b811461224657600080fd5b50565b60008135905061225881612232565b92915050565b6000819050919050565b6122718161225e565b811461227c57600080fd5b50565b60008135905061228e81612268565b92915050565b600080604083850312156122ab576122aa61222d565b5b60006122b985828601612249565b92505060206122ca8582860161227f565b9150509250929050565b60008115159050919050565b6122e9816122d4565b82525050565b600060208201905061230460008301846122e0565b92915050565b6000819050919050565b600061232f61232a6123258461211f565b61230a565b61211f565b9050919050565b600061234182612314565b9050919050565b600061235382612336565b9050919050565b61236381612348565b82525050565b600060208201905061237e600083018461235a565b92915050565b61238d8161225e565b82525050565b60006020820190506123a86000830184612384565b92915050565b6000806000606084860312156123c7576123c661222d565b5b60006123d586828701612249565b93505060206123e686828701612249565b92505060406123f78682870161227f565b9150509250925092565b600060ff82169050919050565b61241781612401565b82525050565b6000602082019050612432600083018461240e565b92915050565b60006020828403121561244e5761244d61222d565b5b600061245c84828501612249565b91505092915050565b6000806040838503121561247c5761247b61222d565b5b600061248a8582860161227f565b925050602061249b8582860161227f565b9150509250929050565b600080604083850312156124bc576124bb61222d565b5b60006124ca85828601612249565b92505060206124db85828601612249565b9150509250929050565b6124ee816122d4565b81146124f957600080fd5b50565b60008135905061250b816124e5565b92915050565b600080604083850312156125285761252761222d565b5b600061253685828601612249565b9250506020612547858286016124fc565b9150509250929050565b6000602082840312156125675761256661222d565b5b60006125758482850161227f565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806125c557607f821691505b6020821081036125d8576125d761257e565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006126188261225e565b91506126238361225e565b925082820190508082111561263b5761263a6125de565b5b92915050565b7f4c5020506169722063616e6e6f742062652074686520446561642077616c6c6560008201527f742c206f72203021000000000000000000000000000000000000000000000000602082015250565b600061269d602883612186565b91506126a882612641565b604082019050919050565b600060208201905081810360008301526126cc81612690565b9050919050565b7f45524332303a20746f74616c20746178206d757374206e6f742062652067726560008201527f61746572207468616e2031302500000000000000000000000000000000000000602082015250565b600061272f602d83612186565b915061273a826126d3565b604082019050919050565b6000602082019050818103600083015261275e81612722565b9050919050565b600060408201905061277a6000830185612384565b6127876020830184612384565b9392505050565b60006127998261225e565b91506127a48361225e565b92508282026127b28161225e565b915082820484148315176127c9576127c86125de565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061280a8261225e565b91506128158361225e565b925082612825576128246127d0565b5b828204905092915050565b7f43616e6e6f74206c6971756964617465206d6f7265207468616e203225206f6660008201527f2074686520737570706c79206174206f6e636521000000000000000000000000602082015250565b600061288c603483612186565b915061289782612830565b604082019050919050565b600060208201905081810360008301526128bb8161287f565b9050919050565b60008160011c9050919050565b6000808291508390505b6001851115612919578086048111156128f5576128f46125de565b5b60018516156129045780820291505b8081029050612912856128c2565b94506128d9565b94509492505050565b60008261293257600190506129ee565b8161294057600090506129ee565b816001811461295657600281146129605761298f565b60019150506129ee565b60ff841115612972576129716125de565b5b8360020a915084821115612989576129886125de565b5b506129ee565b5060208310610133831016604e8410600b84101617156129c45782820a9050838111156129bf576129be6125de565b5b6129ee565b6129d184848460016128cf565b925090508184048111156129e8576129e76125de565b5b81810290505b9392505050565b6000612a008261225e565b9150612a0b83612401565b9250612a387fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484612922565b905092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000612a9c602583612186565b9150612aa782612a40565b604082019050919050565b60006020820190508181036000830152612acb81612a8f565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612b2e602683612186565b9150612b3982612ad2565b604082019050919050565b60006020820190508181036000830152612b5d81612b21565b9050919050565b7f696e76616c696420616d6f756e74000000000000000000000000000000000000600082015250565b6000612b9a600e83612186565b9150612ba582612b64565b602082019050919050565b60006020820190508181036000830152612bc981612b8d565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612c2c602483612186565b9150612c3782612bd0565b604082019050919050565b60006020820190508181036000830152612c5b81612c1f565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000612cbe602283612186565b9150612cc982612c62565b604082019050919050565b60006020820190508181036000830152612ced81612cb1565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000612d2a601d83612186565b9150612d3582612cf4565b602082019050919050565b60006020820190508181036000830152612d5981612d1d565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612dbc602583612186565b9150612dc782612d60565b604082019050919050565b60006020820190508181036000830152612deb81612daf565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000612e4e602383612186565b9150612e5982612df2565b604082019050919050565b60006020820190508181036000830152612e7d81612e41565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000612ee0602683612186565b9150612eeb82612e84565b604082019050919050565b60006020820190508181036000830152612f0f81612ed3565b9050919050565b7f42414c414e43455f4c494d495400000000000000000000000000000000000000600082015250565b6000612f4c600d83612186565b9150612f5782612f16565b602082019050919050565b60006020820190508181036000830152612f7b81612f3f565b9050919050565b6000612f8d8261225e565b9150612f988361225e565b9250828203905081811115612fb057612faf6125de565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612fec602083612186565b9150612ff782612fb6565b602082019050919050565b6000602082019050818103600083015261301b81612fdf565b9050919050565b60006060820190506130376000830186612384565b6130446020830185612384565b6130516040830184612384565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506130c681612232565b92915050565b6000602082840312156130e2576130e161222d565b5b60006130f0848285016130b7565b91505092915050565b6000819050919050565b600061311e613119613114846130f9565b61230a565b61225e565b9050919050565b61312e81613103565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6131698161213f565b82525050565b600061317b8383613160565b60208301905092915050565b6000602082019050919050565b600061319f82613134565b6131a9818561313f565b93506131b483613150565b8060005b838110156131e55781516131cc888261316f565b97506131d783613187565b9250506001810190506131b8565b5085935050505092915050565b600060a0820190506132076000830188612384565b6132146020830187613125565b81810360408301526132268186613194565b90506132356060830185612151565b6132426080830184612384565b9695505050505050565b600060c0820190506132616000830189612151565b61326e6020830188612384565b61327b6040830187613125565b6132886060830186613125565b6132956080830185612151565b6132a260a0830184612384565b979650505050505050565b6000815190506132bc81612268565b92915050565b6000806000606084860312156132db576132da61222d565b5b60006132e9868287016132ad565b93505060206132fa868287016132ad565b925050604061330b868287016132ad565b915050925092509256fea26469706673582212204e171f0ef906fa682d741c4d379ba035c14710cd3b6e2ffa8086d18bf982bb0264736f6c63430008130033

Deployed Bytecode Sourcemap

28410:8427:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28693:64;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18129:102;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20403:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29067:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19267:110;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21227:297;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19110:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22943:272;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29125:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28568:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34854:364;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28865:47;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35226:504;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18294:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15388:103;;;;;;;;;;;;;:::i;:::-;;28611:75;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28808:50;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14740:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35738:829;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17953:106;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22027:507;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19847:236;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28995:63;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28764:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28919:69;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19440:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33322:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15646:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28527:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36575:222;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28693:64;;;;;;;;;;;;;:::o;18129:102::-;18185:13;18218:5;18211:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18129:102;:::o;20403:244::-;20524:4;20546:13;20562:12;:10;:12::i;:::-;20546:28;;20585:32;20594:5;20601:7;20610:6;20585:8;:32::i;:::-;20635:4;20628:11;;;20403:244;;;;:::o;29067:51::-;;;:::o;19267:110::-;19330:7;19357:12;;19350:19;;19267:110;:::o;21227:297::-;21360:4;21377:15;21395:12;:10;:12::i;:::-;21377:30;;21418:38;21434:4;21440:7;21449:6;21418:15;:38::i;:::-;21467:27;21477:4;21483:2;21487:6;21467:9;:27::i;:::-;21512:4;21505:11;;;21227:297;;;;;:::o;19110:92::-;19168:5;19193:1;19186:8;;19110:92;:::o;22943:272::-;23060:4;23082:13;23098:12;:10;:12::i;:::-;23082:28;;23121:64;23130:5;23137:7;23174:10;23146:25;23156:5;23163:7;23146:9;:25::i;:::-;:38;;;;:::i;:::-;23121:8;:64::i;:::-;23203:4;23196:11;;;22943:272;;;;:::o;29125:28::-;;;;;;;;;;;;;:::o;28568:34::-;;;;:::o;34854:364::-;14626:13;:11;:13::i;:::-;34950:4:::1;;;;;;;;;;;34937:17;;:9;:17;;::::0;34929:70:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;35053:1;35032:23;;:9;:23;;::::0;35010:113:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;35152:9;35134:15;;:27;;;;;;;;;;;;;;;;;;35177:33;35200:9;35177:33;;;;;;:::i;:::-;;;;;;;;34854:364:::0;:::o;28865:47::-;;;;;;;;;;;;;;;;;:::o;35226:504::-;14626:13;:11;:13::i;:::-;35434:2:::1;35413:16;35394;:35;;;;:::i;:::-;35393:43;;35371:138;;;;;;;;;;;;:::i;:::-;;;;;;;;;35538:16;35520:15;:34;;;;35583:16;35565:15;:34;;;;35617:105;35666:15;;35696;;35617:105;;;;;;;:::i;:::-;;;;;;;;35226:504:::0;;:::o;18294:177::-;18413:7;18445:9;:18;18455:7;18445:18;;;;;;;;;;;;;;;;18438:25;;18294:177;;;:::o;15388:103::-;14626:13;:11;:13::i;:::-;15453:30:::1;15480:1;15453:18;:30::i;:::-;15388:103::o:0;28611:75::-;;;;;;;;;;;;;:::o;28808:50::-;;;;;;;;;;;;;;;;;;;;;;:::o;14740:87::-;14786:7;14813:6;;;;;;;;;;;14806:13;;14740:87;:::o;35738:829::-;14626:13;:11;:13::i;:::-;35978:3:::1;35973:1;35963:7;;:11;;;;:::i;:::-;35962:19;;;;:::i;:::-;35929:30;:52;35907:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;36137:3;36132:1;36122:7;;:11;;;;:::i;:::-;36121:19;;;;:::i;:::-;36094:24;:46;36072:148;;;;;;;;;;;;:::i;:::-;;;;;;;;;36326:9;;;;;;;;;;;36322:2;:13;;;;:::i;:::-;36276:30;:59;;;;:::i;:::-;36231:29;:104;;;;36403:9;;;;;;;;;;;36399:2;:13;;;;:::i;:::-;36372:24;:40;;;;:::i;:::-;36346:23;:66;;;;36430:129;36481:29;;36525:23;;36430:129;;;;;;;:::i;:::-;;;;;;;;35738:829:::0;;:::o;17953:106::-;18011:13;18044:7;18037:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17953:106;:::o;22027:507::-;22149:4;22171:13;22187:12;:10;:12::i;:::-;22171:28;;22210:24;22237:25;22247:5;22254:7;22237:9;:25::i;:::-;22210:52;;22315:15;22295:16;:35;;22273:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;22431:60;22440:5;22447:7;22475:15;22456:16;:34;22431:8;:60::i;:::-;22522:4;22515:11;;;;22027:507;;;;:::o;19847:236::-;19964:4;19986:13;20002:12;:10;:12::i;:::-;19986:28;;20025;20035:5;20042:2;20046:6;20025:9;:28::i;:::-;20071:4;20064:11;;;19847:236;;;;:::o;28995:63::-;;;;:::o;28764:37::-;;;;:::o;28919:69::-;;;;:::o;19440:201::-;19574:7;19606:11;:18;19618:5;19606:18;;;;;;;;;;;;;;;:27;19625:7;19606:27;;;;;;;;;;;;;;;;19599:34;;19440:201;;;;:::o;33322:132::-;14626:13;:11;:13::i;:::-;33439:7:::1;33408:18;:28;33427:8;33408:28;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;33322:132:::0;;:::o;15646:238::-;14626:13;:11;:13::i;:::-;15769:1:::1;15749:22;;:8;:22;;::::0;15727:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;15848:28;15867:8;15848:18;:28::i;:::-;15646:238:::0;:::o;28527:34::-;;;;:::o;36575:222::-;14626:13;:11;:13::i;:::-;36662:12:::1;:27;36675:13;;;;;;;;;;;36662:27;;;;;;;;;;;;;;;;36653:5;:36:::0;36645:63:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;36749:5;36719:12;:27;36732:13;;;;;;;;;;;36719:27;;;;;;;;;;;;;;;:35;;;;36770:19;36783:5;36770:19;;;;;;:::i;:::-;;;;;;;;36575:222:::0;:::o;13533:98::-;13586:7;13613:10;13606:17;;13533:98;:::o;25250:380::-;25403:1;25386:19;;:5;:19;;;25378:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25484:1;25465:21;;:7;:21;;;25457:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25568:6;25538:11;:18;25550:5;25538:18;;;;;;;;;;;;;;;:27;25557:7;25538:27;;;;;;;;;;;;;;;:36;;;;25606:7;25590:32;;25599:5;25590:32;;;25615:6;25590:32;;;;;;:::i;:::-;;;;;;;;25250:380;;;:::o;25921:502::-;26056:24;26083:25;26093:5;26100:7;26083:9;:25::i;:::-;26056:52;;26143:17;26123:16;:37;26119:297;;26223:6;26203:16;:26;;26177:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;26338:51;26347:5;26354:7;26382:6;26363:16;:25;26338:8;:51::i;:::-;26119:297;26045:378;25921:502;;;:::o;31188:2126::-;31336:1;31320:18;;:4;:18;;;31312:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31413:1;31399:16;;:2;:16;;;31391:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;31507:6;31488:15;31498:4;31488:9;:15::i;:::-;:25;;31466:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;31615:1;31594:12;:18;31607:4;31594:18;;;;;;;;;;;;;;;;:22;31590:174;;;31685:12;:18;31698:4;31685:18;;;;;;;;;;;;;;;;31675:6;31659:13;31669:2;31659:9;:13::i;:::-;:22;;;;:::i;:::-;:44;;31633:119;;;;;;;;;;;;:::i;:::-;;;;;;;;;31590:174;31801:13;;;;;;;;;;;31793:21;;:4;:21;;;:44;;;;31824:13;;;;;;;;;;;31818:19;;:2;:19;;;31793:44;31792:67;;;;;31843:16;;;;;;;;;;;31842:17;31792:67;31774:1533;;;31898:13;;;;;;;;;;;31890:21;;:4;:21;;;31886:636;;31932:32;32015:18;;31967:24;31985:4;31967:9;:24::i;:::-;:66;;;;:::i;:::-;31932:101;;32084:29;;32056:24;:57;32052:152;;32138:46;32154:29;;32138:15;:46::i;:::-;32052:152;32250:23;;32227:18;;32226:47;32222:285;;32298:42;32316:23;;32298:17;:42::i;:::-;32385:23;;32363:18;;:45;;;;;;;:::i;:::-;;;;;;;;32439:15;;;;;;;;;;;32431:33;;:56;32465:21;32431:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32222:285;31913:609;31886:636;32538:22;32579:18;:24;32598:4;32579:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;32607:18;:22;32626:2;32607:22;;;;;;;;;;;;;;;;;;;;;;;;;32579:50;32575:599;;;32667:6;32650:23;;32575:599;;;32714:22;32769:3;32750:15;;32741:6;:24;;;;:::i;:::-;32740:32;;;;:::i;:::-;32714:59;;32792:22;32847:3;32828:15;;32819:6;:24;;;;:::i;:::-;32818:32;;;;:::i;:::-;32792:59;;32914:14;32897;:31;;;;:::i;:::-;32887:6;:42;;;;:::i;:::-;32870:59;;32970:14;32948:18;;:36;;;;;;;:::i;:::-;;;;;;;;33005:153;33043:4;33078;33124:14;33107;:31;;;;:::i;:::-;33005:15;:153::i;:::-;32695:479;;32575:599;33188:41;33204:4;33210:2;33214:14;33188:15;:41::i;:::-;31871:1370;31774:1533;;;33262:33;33278:4;33284:2;33288:6;33262:15;:33::i;:::-;31774:1533;31188:2126;;;:::o;14905:132::-;14980:12;:10;:12::i;:::-;14969:23;;:7;:5;:7::i;:::-;:23;;;14961:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14905:132::o;16044:191::-;16118:16;16137:6;;;;;;;;;;;16118:25;;16163:8;16154:6;;:17;;;;;;;;;;;;;;;;;;16218:8;16187:40;;16208:8;16187:40;;;;;;;;;;;;16107:128;16044:191;:::o;33462:474::-;29699:4;29680:16;;:23;;;;;;;;;;;;;;;;;;33548:12:::1;33587:1;33564:20;:24;;;;:::i;:::-;33548:41;;33600:17;33644:4;33621:20;:27;;;;:::i;:::-;33600:49;;33662:22;33687:21;33662:46;;33721:23;33739:4;33721:17;:23::i;:::-;33757:18;33803:14;33779:21;:38;;;;:::i;:::-;33757:61;;33831:36;33845:9;33856:10;33831:13;:36::i;:::-;33885:43;33900:4;33906:10;33918:9;33885:43;;;;;;;;:::i;:::-;;;;;;;;33537:399;;;;29745:5:::0;29726:16;;:24;;;;;;;;;;;;;;;;;;33462:474;:::o;33944:488::-;29699:4;29680:16;;:23;;;;;;;;;;;;;;;;;;34023:21:::1;34061:1;34047:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34023:40;;34092:4;34074;34079:1;34074:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;34118:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34108:4;34113:1;34108:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;::::0;::::1;34153:62;34170:4;34185:15;34203:11;34153:8;:62::i;:::-;34228:15;:66;;;34309:11;34335:1;34351:4;34378;34398:15;34228:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;34012:420;29745:5:::0;29726:16;;:24;;;;;;;;;;;;;;;;;;33944:488;:::o;26431:776::-;26578:1;26562:18;;:4;:18;;;26554:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26655:1;26641:16;;:2;:16;;;26633:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;26710:19;26732:9;:15;26742:4;26732:15;;;;;;;;;;;;;;;;26710:37;;26795:6;26780:11;:21;;26758:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;26935:6;26921:11;:20;26903:9;:15;26913:4;26903:15;;;;;;;;;;;;;;;:38;;;;27138:6;27121:9;:13;27131:2;27121:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;27188:2;27173:26;;27182:4;27173:26;;;27192:6;27173:26;;;;;;:::i;:::-;;;;;;;;26543:664;26431:776;;;:::o;34440:406::-;29699:4;29680:16;;:23;;;;;;;;;;;;;;;;;;34557:62:::1;34574:4;34589:15;34607:11;34557:8;:62::i;:::-;34632:15;:31;;;34671:9;34704:4;34724:11;34750:1;34766::::0;34782:15:::1;;;;;;;;;;;34812;34632:206;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;29745:5:::0;29726:16;;:24;;;;;;;;;;;;;;;;;;34440:406;;:::o;7:126:1:-;44:7;84:42;77:5;73:54;62:65;;7:126;;;:::o;139:96::-;176:7;205:24;223:5;205:24;:::i;:::-;194:35;;139:96;;;:::o;241:118::-;328:24;346:5;328:24;:::i;:::-;323:3;316:37;241:118;;:::o;365:222::-;458:4;496:2;485:9;481:18;473:26;;509:71;577:1;566:9;562:17;553:6;509:71;:::i;:::-;365:222;;;;:::o;593:99::-;645:6;679:5;673:12;663:22;;593:99;;;:::o;698:169::-;782:11;816:6;811:3;804:19;856:4;851:3;847:14;832:29;;698:169;;;;:::o;873:246::-;954:1;964:113;978:6;975:1;972:13;964:113;;;1063:1;1058:3;1054:11;1048:18;1044:1;1039:3;1035:11;1028:39;1000:2;997:1;993:10;988:15;;964:113;;;1111:1;1102:6;1097:3;1093:16;1086:27;935:184;873:246;;;:::o;1125:102::-;1166:6;1217:2;1213:7;1208:2;1201:5;1197:14;1193:28;1183:38;;1125:102;;;:::o;1233:377::-;1321:3;1349:39;1382:5;1349:39;:::i;:::-;1404:71;1468:6;1463:3;1404:71;:::i;:::-;1397:78;;1484:65;1542:6;1537:3;1530:4;1523:5;1519:16;1484:65;:::i;:::-;1574:29;1596:6;1574:29;:::i;:::-;1569:3;1565:39;1558:46;;1325:285;1233:377;;;;:::o;1616:313::-;1729:4;1767:2;1756:9;1752:18;1744:26;;1816:9;1810:4;1806:20;1802:1;1791:9;1787:17;1780:47;1844:78;1917:4;1908:6;1844:78;:::i;:::-;1836:86;;1616:313;;;;:::o;2016:117::-;2125:1;2122;2115:12;2262:122;2335:24;2353:5;2335:24;:::i;:::-;2328:5;2325:35;2315:63;;2374:1;2371;2364:12;2315:63;2262:122;:::o;2390:139::-;2436:5;2474:6;2461:20;2452:29;;2490:33;2517:5;2490:33;:::i;:::-;2390:139;;;;:::o;2535:77::-;2572:7;2601:5;2590:16;;2535:77;;;:::o;2618:122::-;2691:24;2709:5;2691:24;:::i;:::-;2684:5;2681:35;2671:63;;2730:1;2727;2720:12;2671:63;2618:122;:::o;2746:139::-;2792:5;2830:6;2817:20;2808:29;;2846:33;2873:5;2846:33;:::i;:::-;2746:139;;;;:::o;2891:474::-;2959:6;2967;3016:2;3004:9;2995:7;2991:23;2987:32;2984:119;;;3022:79;;:::i;:::-;2984:119;3142:1;3167:53;3212:7;3203:6;3192:9;3188:22;3167:53;:::i;:::-;3157:63;;3113:117;3269:2;3295:53;3340:7;3331:6;3320:9;3316:22;3295:53;:::i;:::-;3285:63;;3240:118;2891:474;;;;;:::o;3371:90::-;3405:7;3448:5;3441:13;3434:21;3423:32;;3371:90;;;:::o;3467:109::-;3548:21;3563:5;3548:21;:::i;:::-;3543:3;3536:34;3467:109;;:::o;3582:210::-;3669:4;3707:2;3696:9;3692:18;3684:26;;3720:65;3782:1;3771:9;3767:17;3758:6;3720:65;:::i;:::-;3582:210;;;;:::o;3798:60::-;3826:3;3847:5;3840:12;;3798:60;;;:::o;3864:142::-;3914:9;3947:53;3965:34;3974:24;3992:5;3974:24;:::i;:::-;3965:34;:::i;:::-;3947:53;:::i;:::-;3934:66;;3864:142;;;:::o;4012:126::-;4062:9;4095:37;4126:5;4095:37;:::i;:::-;4082:50;;4012:126;;;:::o;4144:152::-;4220:9;4253:37;4284:5;4253:37;:::i;:::-;4240:50;;4144:152;;;:::o;4302:183::-;4415:63;4472:5;4415:63;:::i;:::-;4410:3;4403:76;4302:183;;:::o;4491:274::-;4610:4;4648:2;4637:9;4633:18;4625:26;;4661:97;4755:1;4744:9;4740:17;4731:6;4661:97;:::i;:::-;4491:274;;;;:::o;4771:118::-;4858:24;4876:5;4858:24;:::i;:::-;4853:3;4846:37;4771:118;;:::o;4895:222::-;4988:4;5026:2;5015:9;5011:18;5003:26;;5039:71;5107:1;5096:9;5092:17;5083:6;5039:71;:::i;:::-;4895:222;;;;:::o;5123:619::-;5200:6;5208;5216;5265:2;5253:9;5244:7;5240:23;5236:32;5233:119;;;5271:79;;:::i;:::-;5233:119;5391:1;5416:53;5461:7;5452:6;5441:9;5437:22;5416:53;:::i;:::-;5406:63;;5362:117;5518:2;5544:53;5589:7;5580:6;5569:9;5565:22;5544:53;:::i;:::-;5534:63;;5489:118;5646:2;5672:53;5717:7;5708:6;5697:9;5693:22;5672:53;:::i;:::-;5662:63;;5617:118;5123:619;;;;;:::o;5748:86::-;5783:7;5823:4;5816:5;5812:16;5801:27;;5748:86;;;:::o;5840:112::-;5923:22;5939:5;5923:22;:::i;:::-;5918:3;5911:35;5840:112;;:::o;5958:214::-;6047:4;6085:2;6074:9;6070:18;6062:26;;6098:67;6162:1;6151:9;6147:17;6138:6;6098:67;:::i;:::-;5958:214;;;;:::o;6178:329::-;6237:6;6286:2;6274:9;6265:7;6261:23;6257:32;6254:119;;;6292:79;;:::i;:::-;6254:119;6412:1;6437:53;6482:7;6473:6;6462:9;6458:22;6437:53;:::i;:::-;6427:63;;6383:117;6178:329;;;;:::o;6513:474::-;6581:6;6589;6638:2;6626:9;6617:7;6613:23;6609:32;6606:119;;;6644:79;;:::i;:::-;6606:119;6764:1;6789:53;6834:7;6825:6;6814:9;6810:22;6789:53;:::i;:::-;6779:63;;6735:117;6891:2;6917:53;6962:7;6953:6;6942:9;6938:22;6917:53;:::i;:::-;6907:63;;6862:118;6513:474;;;;;:::o;6993:::-;7061:6;7069;7118:2;7106:9;7097:7;7093:23;7089:32;7086:119;;;7124:79;;:::i;:::-;7086:119;7244:1;7269:53;7314:7;7305:6;7294:9;7290:22;7269:53;:::i;:::-;7259:63;;7215:117;7371:2;7397:53;7442:7;7433:6;7422:9;7418:22;7397:53;:::i;:::-;7387:63;;7342:118;6993:474;;;;;:::o;7473:116::-;7543:21;7558:5;7543:21;:::i;:::-;7536:5;7533:32;7523:60;;7579:1;7576;7569:12;7523:60;7473:116;:::o;7595:133::-;7638:5;7676:6;7663:20;7654:29;;7692:30;7716:5;7692:30;:::i;:::-;7595:133;;;;:::o;7734:468::-;7799:6;7807;7856:2;7844:9;7835:7;7831:23;7827:32;7824:119;;;7862:79;;:::i;:::-;7824:119;7982:1;8007:53;8052:7;8043:6;8032:9;8028:22;8007:53;:::i;:::-;7997:63;;7953:117;8109:2;8135:50;8177:7;8168:6;8157:9;8153:22;8135:50;:::i;:::-;8125:60;;8080:115;7734:468;;;;;:::o;8208:329::-;8267:6;8316:2;8304:9;8295:7;8291:23;8287:32;8284:119;;;8322:79;;:::i;:::-;8284:119;8442:1;8467:53;8512:7;8503:6;8492:9;8488:22;8467:53;:::i;:::-;8457:63;;8413:117;8208:329;;;;:::o;8543:180::-;8591:77;8588:1;8581:88;8688:4;8685:1;8678:15;8712:4;8709:1;8702:15;8729:320;8773:6;8810:1;8804:4;8800:12;8790:22;;8857:1;8851:4;8847:12;8878:18;8868:81;;8934:4;8926:6;8922:17;8912:27;;8868:81;8996:2;8988:6;8985:14;8965:18;8962:38;8959:84;;9015:18;;:::i;:::-;8959:84;8780:269;8729:320;;;:::o;9055:180::-;9103:77;9100:1;9093:88;9200:4;9197:1;9190:15;9224:4;9221:1;9214:15;9241:191;9281:3;9300:20;9318:1;9300:20;:::i;:::-;9295:25;;9334:20;9352:1;9334:20;:::i;:::-;9329:25;;9377:1;9374;9370:9;9363:16;;9398:3;9395:1;9392:10;9389:36;;;9405:18;;:::i;:::-;9389:36;9241:191;;;;:::o;9438:227::-;9578:34;9574:1;9566:6;9562:14;9555:58;9647:10;9642:2;9634:6;9630:15;9623:35;9438:227;:::o;9671:366::-;9813:3;9834:67;9898:2;9893:3;9834:67;:::i;:::-;9827:74;;9910:93;9999:3;9910:93;:::i;:::-;10028:2;10023:3;10019:12;10012:19;;9671:366;;;:::o;10043:419::-;10209:4;10247:2;10236:9;10232:18;10224:26;;10296:9;10290:4;10286:20;10282:1;10271:9;10267:17;10260:47;10324:131;10450:4;10324:131;:::i;:::-;10316:139;;10043:419;;;:::o;10468:232::-;10608:34;10604:1;10596:6;10592:14;10585:58;10677:15;10672:2;10664:6;10660:15;10653:40;10468:232;:::o;10706:366::-;10848:3;10869:67;10933:2;10928:3;10869:67;:::i;:::-;10862:74;;10945:93;11034:3;10945:93;:::i;:::-;11063:2;11058:3;11054:12;11047:19;;10706:366;;;:::o;11078:419::-;11244:4;11282:2;11271:9;11267:18;11259:26;;11331:9;11325:4;11321:20;11317:1;11306:9;11302:17;11295:47;11359:131;11485:4;11359:131;:::i;:::-;11351:139;;11078:419;;;:::o;11503:332::-;11624:4;11662:2;11651:9;11647:18;11639:26;;11675:71;11743:1;11732:9;11728:17;11719:6;11675:71;:::i;:::-;11756:72;11824:2;11813:9;11809:18;11800:6;11756:72;:::i;:::-;11503:332;;;;;:::o;11841:410::-;11881:7;11904:20;11922:1;11904:20;:::i;:::-;11899:25;;11938:20;11956:1;11938:20;:::i;:::-;11933:25;;11993:1;11990;11986:9;12015:30;12033:11;12015:30;:::i;:::-;12004:41;;12194:1;12185:7;12181:15;12178:1;12175:22;12155:1;12148:9;12128:83;12105:139;;12224:18;;:::i;:::-;12105:139;11889:362;11841:410;;;;:::o;12257:180::-;12305:77;12302:1;12295:88;12402:4;12399:1;12392:15;12426:4;12423:1;12416:15;12443:185;12483:1;12500:20;12518:1;12500:20;:::i;:::-;12495:25;;12534:20;12552:1;12534:20;:::i;:::-;12529:25;;12573:1;12563:35;;12578:18;;:::i;:::-;12563:35;12620:1;12617;12613:9;12608:14;;12443:185;;;;:::o;12634:239::-;12774:34;12770:1;12762:6;12758:14;12751:58;12843:22;12838:2;12830:6;12826:15;12819:47;12634:239;:::o;12879:366::-;13021:3;13042:67;13106:2;13101:3;13042:67;:::i;:::-;13035:74;;13118:93;13207:3;13118:93;:::i;:::-;13236:2;13231:3;13227:12;13220:19;;12879:366;;;:::o;13251:419::-;13417:4;13455:2;13444:9;13440:18;13432:26;;13504:9;13498:4;13494:20;13490:1;13479:9;13475:17;13468:47;13532:131;13658:4;13532:131;:::i;:::-;13524:139;;13251:419;;;:::o;13676:102::-;13718:8;13765:5;13762:1;13758:13;13737:34;;13676:102;;;:::o;13784:848::-;13845:5;13852:4;13876:6;13867:15;;13900:5;13891:14;;13914:712;13935:1;13925:8;13922:15;13914:712;;;14030:4;14025:3;14021:14;14015:4;14012:24;14009:50;;;14039:18;;:::i;:::-;14009:50;14089:1;14079:8;14075:16;14072:451;;;14504:4;14497:5;14493:16;14484:25;;14072:451;14554:4;14548;14544:15;14536:23;;14584:32;14607:8;14584:32;:::i;:::-;14572:44;;13914:712;;;13784:848;;;;;;;:::o;14638:1073::-;14692:5;14883:8;14873:40;;14904:1;14895:10;;14906:5;;14873:40;14932:4;14922:36;;14949:1;14940:10;;14951:5;;14922:36;15018:4;15066:1;15061:27;;;;15102:1;15097:191;;;;15011:277;;15061:27;15079:1;15070:10;;15081:5;;;15097:191;15142:3;15132:8;15129:17;15126:43;;;15149:18;;:::i;:::-;15126:43;15198:8;15195:1;15191:16;15182:25;;15233:3;15226:5;15223:14;15220:40;;;15240:18;;:::i;:::-;15220:40;15273:5;;;15011:277;;15397:2;15387:8;15384:16;15378:3;15372:4;15369:13;15365:36;15347:2;15337:8;15334:16;15329:2;15323:4;15320:12;15316:35;15300:111;15297:246;;;15453:8;15447:4;15443:19;15434:28;;15488:3;15481:5;15478:14;15475:40;;;15495:18;;:::i;:::-;15475:40;15528:5;;15297:246;15568:42;15606:3;15596:8;15590:4;15587:1;15568:42;:::i;:::-;15553:57;;;;15642:4;15637:3;15633:14;15626:5;15623:25;15620:51;;;15651:18;;:::i;:::-;15620:51;15700:4;15693:5;15689:16;15680:25;;14638:1073;;;;;;:::o;15717:281::-;15775:5;15799:23;15817:4;15799:23;:::i;:::-;15791:31;;15843:25;15859:8;15843:25;:::i;:::-;15831:37;;15887:104;15924:66;15914:8;15908:4;15887:104;:::i;:::-;15878:113;;15717:281;;;;:::o;16004:224::-;16144:34;16140:1;16132:6;16128:14;16121:58;16213:7;16208:2;16200:6;16196:15;16189:32;16004:224;:::o;16234:366::-;16376:3;16397:67;16461:2;16456:3;16397:67;:::i;:::-;16390:74;;16473:93;16562:3;16473:93;:::i;:::-;16591:2;16586:3;16582:12;16575:19;;16234:366;;;:::o;16606:419::-;16772:4;16810:2;16799:9;16795:18;16787:26;;16859:9;16853:4;16849:20;16845:1;16834:9;16830:17;16823:47;16887:131;17013:4;16887:131;:::i;:::-;16879:139;;16606:419;;;:::o;17031:225::-;17171:34;17167:1;17159:6;17155:14;17148:58;17240:8;17235:2;17227:6;17223:15;17216:33;17031:225;:::o;17262:366::-;17404:3;17425:67;17489:2;17484:3;17425:67;:::i;:::-;17418:74;;17501:93;17590:3;17501:93;:::i;:::-;17619:2;17614:3;17610:12;17603:19;;17262:366;;;:::o;17634:419::-;17800:4;17838:2;17827:9;17823:18;17815:26;;17887:9;17881:4;17877:20;17873:1;17862:9;17858:17;17851:47;17915:131;18041:4;17915:131;:::i;:::-;17907:139;;17634:419;;;:::o;18059:164::-;18199:16;18195:1;18187:6;18183:14;18176:40;18059:164;:::o;18229:366::-;18371:3;18392:67;18456:2;18451:3;18392:67;:::i;:::-;18385:74;;18468:93;18557:3;18468:93;:::i;:::-;18586:2;18581:3;18577:12;18570:19;;18229:366;;;:::o;18601:419::-;18767:4;18805:2;18794:9;18790:18;18782:26;;18854:9;18848:4;18844:20;18840:1;18829:9;18825:17;18818:47;18882:131;19008:4;18882:131;:::i;:::-;18874:139;;18601:419;;;:::o;19026:223::-;19166:34;19162:1;19154:6;19150:14;19143:58;19235:6;19230:2;19222:6;19218:15;19211:31;19026:223;:::o;19255:366::-;19397:3;19418:67;19482:2;19477:3;19418:67;:::i;:::-;19411:74;;19494:93;19583:3;19494:93;:::i;:::-;19612:2;19607:3;19603:12;19596:19;;19255:366;;;:::o;19627:419::-;19793:4;19831:2;19820:9;19816:18;19808:26;;19880:9;19874:4;19870:20;19866:1;19855:9;19851:17;19844:47;19908:131;20034:4;19908:131;:::i;:::-;19900:139;;19627:419;;;:::o;20052:221::-;20192:34;20188:1;20180:6;20176:14;20169:58;20261:4;20256:2;20248:6;20244:15;20237:29;20052:221;:::o;20279:366::-;20421:3;20442:67;20506:2;20501:3;20442:67;:::i;:::-;20435:74;;20518:93;20607:3;20518:93;:::i;:::-;20636:2;20631:3;20627:12;20620:19;;20279:366;;;:::o;20651:419::-;20817:4;20855:2;20844:9;20840:18;20832:26;;20904:9;20898:4;20894:20;20890:1;20879:9;20875:17;20868:47;20932:131;21058:4;20932:131;:::i;:::-;20924:139;;20651:419;;;:::o;21076:179::-;21216:31;21212:1;21204:6;21200:14;21193:55;21076:179;:::o;21261:366::-;21403:3;21424:67;21488:2;21483:3;21424:67;:::i;:::-;21417:74;;21500:93;21589:3;21500:93;:::i;:::-;21618:2;21613:3;21609:12;21602:19;;21261:366;;;:::o;21633:419::-;21799:4;21837:2;21826:9;21822:18;21814:26;;21886:9;21880:4;21876:20;21872:1;21861:9;21857:17;21850:47;21914:131;22040:4;21914:131;:::i;:::-;21906:139;;21633:419;;;:::o;22058:224::-;22198:34;22194:1;22186:6;22182:14;22175:58;22267:7;22262:2;22254:6;22250:15;22243:32;22058:224;:::o;22288:366::-;22430:3;22451:67;22515:2;22510:3;22451:67;:::i;:::-;22444:74;;22527:93;22616:3;22527:93;:::i;:::-;22645:2;22640:3;22636:12;22629:19;;22288:366;;;:::o;22660:419::-;22826:4;22864:2;22853:9;22849:18;22841:26;;22913:9;22907:4;22903:20;22899:1;22888:9;22884:17;22877:47;22941:131;23067:4;22941:131;:::i;:::-;22933:139;;22660:419;;;:::o;23085:222::-;23225:34;23221:1;23213:6;23209:14;23202:58;23294:5;23289:2;23281:6;23277:15;23270:30;23085:222;:::o;23313:366::-;23455:3;23476:67;23540:2;23535:3;23476:67;:::i;:::-;23469:74;;23552:93;23641:3;23552:93;:::i;:::-;23670:2;23665:3;23661:12;23654:19;;23313:366;;;:::o;23685:419::-;23851:4;23889:2;23878:9;23874:18;23866:26;;23938:9;23932:4;23928:20;23924:1;23913:9;23909:17;23902:47;23966:131;24092:4;23966:131;:::i;:::-;23958:139;;23685:419;;;:::o;24110:225::-;24250:34;24246:1;24238:6;24234:14;24227:58;24319:8;24314:2;24306:6;24302:15;24295:33;24110:225;:::o;24341:366::-;24483:3;24504:67;24568:2;24563:3;24504:67;:::i;:::-;24497:74;;24580:93;24669:3;24580:93;:::i;:::-;24698:2;24693:3;24689:12;24682:19;;24341:366;;;:::o;24713:419::-;24879:4;24917:2;24906:9;24902:18;24894:26;;24966:9;24960:4;24956:20;24952:1;24941:9;24937:17;24930:47;24994:131;25120:4;24994:131;:::i;:::-;24986:139;;24713:419;;;:::o;25138:163::-;25278:15;25274:1;25266:6;25262:14;25255:39;25138:163;:::o;25307:366::-;25449:3;25470:67;25534:2;25529:3;25470:67;:::i;:::-;25463:74;;25546:93;25635:3;25546:93;:::i;:::-;25664:2;25659:3;25655:12;25648:19;;25307:366;;;:::o;25679:419::-;25845:4;25883:2;25872:9;25868:18;25860:26;;25932:9;25926:4;25922:20;25918:1;25907:9;25903:17;25896:47;25960:131;26086:4;25960:131;:::i;:::-;25952:139;;25679:419;;;:::o;26104:194::-;26144:4;26164:20;26182:1;26164:20;:::i;:::-;26159:25;;26198:20;26216:1;26198:20;:::i;:::-;26193:25;;26242:1;26239;26235:9;26227:17;;26266:1;26260:4;26257:11;26254:37;;;26271:18;;:::i;:::-;26254:37;26104:194;;;;:::o;26304:182::-;26444:34;26440:1;26432:6;26428:14;26421:58;26304:182;:::o;26492:366::-;26634:3;26655:67;26719:2;26714:3;26655:67;:::i;:::-;26648:74;;26731:93;26820:3;26731:93;:::i;:::-;26849:2;26844:3;26840:12;26833:19;;26492:366;;;:::o;26864:419::-;27030:4;27068:2;27057:9;27053:18;27045:26;;27117:9;27111:4;27107:20;27103:1;27092:9;27088:17;27081:47;27145:131;27271:4;27145:131;:::i;:::-;27137:139;;26864:419;;;:::o;27289:442::-;27438:4;27476:2;27465:9;27461:18;27453:26;;27489:71;27557:1;27546:9;27542:17;27533:6;27489:71;:::i;:::-;27570:72;27638:2;27627:9;27623:18;27614:6;27570:72;:::i;:::-;27652;27720:2;27709:9;27705:18;27696:6;27652:72;:::i;:::-;27289:442;;;;;;:::o;27737:180::-;27785:77;27782:1;27775:88;27882:4;27879:1;27872:15;27906:4;27903:1;27896:15;27923:180;27971:77;27968:1;27961:88;28068:4;28065:1;28058:15;28092:4;28089:1;28082:15;28109:143;28166:5;28197:6;28191:13;28182:22;;28213:33;28240:5;28213:33;:::i;:::-;28109:143;;;;:::o;28258:351::-;28328:6;28377:2;28365:9;28356:7;28352:23;28348:32;28345:119;;;28383:79;;:::i;:::-;28345:119;28503:1;28528:64;28584:7;28575:6;28564:9;28560:22;28528:64;:::i;:::-;28518:74;;28474:128;28258:351;;;;:::o;28615:85::-;28660:7;28689:5;28678:16;;28615:85;;;:::o;28706:158::-;28764:9;28797:61;28815:42;28824:32;28850:5;28824:32;:::i;:::-;28815:42;:::i;:::-;28797:61;:::i;:::-;28784:74;;28706:158;;;:::o;28870:147::-;28965:45;29004:5;28965:45;:::i;:::-;28960:3;28953:58;28870:147;;:::o;29023:114::-;29090:6;29124:5;29118:12;29108:22;;29023:114;;;:::o;29143:184::-;29242:11;29276:6;29271:3;29264:19;29316:4;29311:3;29307:14;29292:29;;29143:184;;;;:::o;29333:132::-;29400:4;29423:3;29415:11;;29453:4;29448:3;29444:14;29436:22;;29333:132;;;:::o;29471:108::-;29548:24;29566:5;29548:24;:::i;:::-;29543:3;29536:37;29471:108;;:::o;29585:179::-;29654:10;29675:46;29717:3;29709:6;29675:46;:::i;:::-;29753:4;29748:3;29744:14;29730:28;;29585:179;;;;:::o;29770:113::-;29840:4;29872;29867:3;29863:14;29855:22;;29770:113;;;:::o;29919:732::-;30038:3;30067:54;30115:5;30067:54;:::i;:::-;30137:86;30216:6;30211:3;30137:86;:::i;:::-;30130:93;;30247:56;30297:5;30247:56;:::i;:::-;30326:7;30357:1;30342:284;30367:6;30364:1;30361:13;30342:284;;;30443:6;30437:13;30470:63;30529:3;30514:13;30470:63;:::i;:::-;30463:70;;30556:60;30609:6;30556:60;:::i;:::-;30546:70;;30402:224;30389:1;30386;30382:9;30377:14;;30342:284;;;30346:14;30642:3;30635:10;;30043:608;;;29919:732;;;;:::o;30657:831::-;30920:4;30958:3;30947:9;30943:19;30935:27;;30972:71;31040:1;31029:9;31025:17;31016:6;30972:71;:::i;:::-;31053:80;31129:2;31118:9;31114:18;31105:6;31053:80;:::i;:::-;31180:9;31174:4;31170:20;31165:2;31154:9;31150:18;31143:48;31208:108;31311:4;31302:6;31208:108;:::i;:::-;31200:116;;31326:72;31394:2;31383:9;31379:18;31370:6;31326:72;:::i;:::-;31408:73;31476:3;31465:9;31461:19;31452:6;31408:73;:::i;:::-;30657:831;;;;;;;;:::o;31494:807::-;31743:4;31781:3;31770:9;31766:19;31758:27;;31795:71;31863:1;31852:9;31848:17;31839:6;31795:71;:::i;:::-;31876:72;31944:2;31933:9;31929:18;31920:6;31876:72;:::i;:::-;31958:80;32034:2;32023:9;32019:18;32010:6;31958:80;:::i;:::-;32048;32124:2;32113:9;32109:18;32100:6;32048:80;:::i;:::-;32138:73;32206:3;32195:9;32191:19;32182:6;32138:73;:::i;:::-;32221;32289:3;32278:9;32274:19;32265:6;32221:73;:::i;:::-;31494:807;;;;;;;;;:::o;32307:143::-;32364:5;32395:6;32389:13;32380:22;;32411:33;32438:5;32411:33;:::i;:::-;32307:143;;;;:::o;32456:663::-;32544:6;32552;32560;32609:2;32597:9;32588:7;32584:23;32580:32;32577:119;;;32615:79;;:::i;:::-;32577:119;32735:1;32760:64;32816:7;32807:6;32796:9;32792:22;32760:64;:::i;:::-;32750:74;;32706:128;32873:2;32899:64;32955:7;32946:6;32935:9;32931:22;32899:64;:::i;:::-;32889:74;;32844:129;33012:2;33038:64;33094:7;33085:6;33074:9;33070:22;33038:64;:::i;:::-;33028:74;;32983:129;32456:663;;;;;:::o

Swarm Source

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