ETH Price: $3,179.64 (+1.47%)
Gas: 5 Gwei

Token

Green Games (BETTED)
 

Overview

Max Total Supply

998,486,797.143220854539915515 BETTED

Holders

326

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0 BETTED

Value
$0.00
0x7586b727b6a6916b05df3175dbba40470b7a9e58
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:
Betted

Compiler Version
v0.8.24+commit.e11b9ed9

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-03-02
*/

// SPDX-License-Identifier: Unlicensed

// File: @uniswap/v2-core/contracts/interfaces/IUniswapV2Factory.sol

pragma solidity >=0.5.0;

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

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

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

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

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

// File: @uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router01.sol

pragma solidity >=0.6.2;

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

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

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

// File: @uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router02.sol

pragma solidity >=0.6.2;


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

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

// File: @openzeppelin/contracts/utils/Context.sol


// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

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

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

// File: @openzeppelin/contracts/access/Ownable.sol


// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;


/**
 * @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 Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

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

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _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);
    }
}

// File: @openzeppelin/contracts/token/ERC20/IERC20.sol


// OpenZeppelin Contracts v4.4.0 (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

// File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.0;


/**
 * @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 symbol of the token.
     */
    function symbol() external view returns (string memory);

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

// File: @openzeppelin/contracts/token/ERC20/ERC20.sol


// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/ERC20.sol)

pragma solidity ^0.8.0;




/**
 * @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.zeppelin.solutions/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;

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

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

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

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

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

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

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

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

    /**
     * @dev See {IERC20-approve}.
     *
     * 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) public 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
    ) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

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

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

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `sender` to `recipient`.
     *
     * 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 virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[from] = fromBalance - amount;
        }
        _balances[to] += amount;

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

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

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

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

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

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

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(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 Spend `amount` form the allowance of `owner` toward `spender`.
     *
     * 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);
            }
        }
    }

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

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

// File: BETS.sol



pragma solidity ^0.8.9;

error InvalidTransfer(address from, address to);
error InvalidConfiguration();

contract Betted is ERC20, Ownable {

    mapping (address => bool) public _isExcludedFromFees;
    mapping (address => bool) public _isBlacklisted;
    mapping (address => bool) public _isExcludedFromBlacklist;
    mapping (address => uint256) public _holderLastTxBlock;
    mapping (address => bool) public _isAMM;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;

    address public marketingWallet;
    address public liquidityWallet;

    bool public swapping;
    bool public swapEnabled = true;
    bool public feesEnabled = true;

    uint256 public burnBuyFee = 100;
    uint256 public liquidityBuyFee = 100;
    uint256 public marketingBuyFee = 300;
    uint256 public totalBuyFees = 500;

    uint256 public burnSellFee = 100;
    uint256 public liquiditySellFee = 100;
    uint256 public marketingSellFee = 300;
    uint256 public totalSellFees = 500;

    uint256 public liquidityTokens;
    uint256 public marketingTokens;

    uint256 public swapTokensAtAmount = 500_000 * 10**18; //0.05% of total supply

    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapEnabledUpdated(bool enabled);
    event FeesEnabledUpdated(bool enabled);
    event SwapAndLiquify(uint256 tokensAutoLiq, uint256 ethAutoLiq);

    constructor(address _marketingWallet, address _liquidityWallet) ERC20("Green Games", "BETTED") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);

        uniswapV2Router = _uniswapV2Router;

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

        _isAMM[uniswapV2Pair] = true;

        marketingWallet = payable(_marketingWallet);
        liquidityWallet = _liquidityWallet;

        _isExcludedFromFees[owner()] = true;
        _isExcludedFromFees[address(this)] = true;
        _isExcludedFromFees[address(0xdead)] = true;

        _isExcludedFromBlacklist[owner()] = true;
        _isExcludedFromBlacklist[uniswapV2Pair] = true;
        _isExcludedFromBlacklist[marketingWallet] = true;
        _isExcludedFromBlacklist[address(0)] = true; //is this needed? should we also do dead address?
        _isExcludedFromBlacklist[address(this)] = true;

        _mint(owner(), 10**9 * 10**18);
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        if (_isBlacklisted[from] || _isBlacklisted[to]) {
            revert InvalidTransfer(from, to);
        }

        if(amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        if (!swapping) {

            if (_isAMM[from] || _isAMM[to]) {
                if (!_isExcludedFromBlacklist[tx.origin] && _holderLastTxBlock[tx.origin] == block.number) {
                    _isBlacklisted[tx.origin] = true;
                }
                _holderLastTxBlock[tx.origin] = block.number;
            }

            if (!_isExcludedFromFees[from] &&
                !_isExcludedFromFees[to]
            ) {

                uint256 total = liquidityTokens + marketingTokens;
                bool canSwap = total >= swapTokensAtAmount;

                if (
                    canSwap &&
                    swapEnabled &&
                    !_isAMM[from]
                    
                ) {
                    swapping = true;
                    processFees(total, swapTokensAtAmount);
                    swapping = false;
                }

                if (feesEnabled) {
                    uint256 fees;
                    uint256 burnTokens;
                    if (_isAMM[to] && totalSellFees != 0) { //sell
                        fees = amount * totalSellFees / 10000;
                        burnTokens += fees * burnSellFee / totalSellFees;
                        liquidityTokens += fees * liquiditySellFee / totalSellFees;
                        marketingTokens += fees * marketingSellFee / totalSellFees;
                    } else if (_isAMM[from] && totalBuyFees != 0) { //buy
                        fees = amount * totalBuyFees / 10000;
                        burnTokens += fees * burnBuyFee / totalBuyFees;
                        liquidityTokens += fees * liquidityBuyFee / totalBuyFees;
                        marketingTokens += fees * marketingBuyFee / totalBuyFees;
                    }
                    if (fees > 0) {
                        amount -= fees;
                        super._transfer(from, address(this), fees);
                        super._burn(address(this), burnTokens);
                    }

                }

            }

        }

        super._transfer(from, to, amount);

    }

    function processFees(uint256 total, uint256 amountToSwap) internal {
        uint256 marTokens = amountToSwap * marketingTokens / total;
        uint256 liqTokens = amountToSwap * liquidityTokens / total;

        uint256 liqToSwap = liqTokens / 2;
        uint256 amountToPair = liqTokens - liqToSwap;

        uint256 totalToSwap = liqToSwap + marTokens;

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

        swapTokensForETH(totalToSwap);

        uint256 ethBalance = address(this).balance;
        uint256 ethToPair = ethBalance * liqToSwap / totalToSwap;

        uint256 amountPaired = addLiquidity(amountToPair, ethToPair);
        emit SwapAndLiquify(amountToPair, ethToPair);

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

        liquidityTokens -= liqTokens - (amountToPair - amountPaired);
        marketingTokens -= marTokens;
    }

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

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

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private returns (uint256) {
        (uint256 amountA,,) = uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            liquidityWallet,
            block.timestamp
        );
        return amountA;
    }

    function setBlacklisted(address account, bool value) external onlyOwner {
        _isBlacklisted[account] = value;
    }

    function setExcludedFromFees(address account, bool value) external onlyOwner {
        _isExcludedFromFees[account] = value;
    }

    function setExcludedFromBlacklist(address account) external onlyOwner {
        _isExcludedFromBlacklist[account] = true;
    }

    function excludeManyFromFees(address[] memory accounts) external onlyOwner {
        uint256 len = accounts.length;
        for (uint256 i = 0; i < len; i++) {
            _isExcludedFromFees[accounts[i]] = true;
        }
    }

    function setSellFees(uint256 burn, uint256 liquidity, uint256 marketing) external onlyOwner {
        uint256 total = burn + liquidity + marketing;
        if (total > 500) {
            revert InvalidConfiguration();
        }
        burnSellFee = burn;
        liquiditySellFee = liquidity;
        marketingSellFee = marketing;
        totalSellFees = total;
    }

    function setBuyFees(uint256 burn, uint256 liquidity, uint256 marketing) external onlyOwner {
        uint256 total = burn + liquidity + marketing;
        if (total > 500) {
            revert InvalidConfiguration();
        }
        burnBuyFee = burn;
        liquidityBuyFee = liquidity;
        marketingBuyFee = marketing;
        totalBuyFees = total;
    }

    function airdrop(address[] memory _user, uint256[] memory _amount) external onlyOwner {
        uint256 len = _user.length;
        if (len != _amount.length) {
            revert InvalidConfiguration();
        }
        for (uint256 i = 0; i < len; i++) {
            super._transfer(_msgSender(), _user[i], _amount[i]);
        }
    }

    function setSwapAtAmount(uint256 amount) external onlyOwner {
        swapTokensAtAmount = amount;
        emit MinTokensBeforeSwapUpdated(amount);
    }

    function setSwapEnabled(bool _enabled) external onlyOwner {
        swapEnabled = _enabled;
        emit SwapEnabledUpdated(_enabled);
    }

    function setFeesEnabled(bool _enabled) external onlyOwner {
        feesEnabled = _enabled;
        emit FeesEnabledUpdated(_enabled);
    }

    function updateMarketingWallet(address newWallet) external onlyOwner {
        marketingWallet = newWallet;
    }

    function updateLiquidityWallet(address newWallet) external onlyOwner {
        liquidityWallet = newWallet;
    }

    function manualSwap() external onlyOwner {
        uint256 total = liquidityTokens + marketingTokens;
        uint256 amountToSwap = total >= swapTokensAtAmount ? swapTokensAtAmount : total;
        swapping = true;
        processFees(total, amountToSwap);
        swapping = false;
    }

    function burn(uint256 amount) external {
        super._burn(msg.sender, amount);
    }

    function transferOwnership(address newOwner) public override onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _isExcludedFromBlacklist[owner()] = false;
        _isExcludedFromFees[owner()] = false;
        _isExcludedFromBlacklist[newOwner] = true;
        _isExcludedFromFees[newOwner] = true;
        _transferOwnership(newOwner);
    }

    function setAMM(address pair, bool value) external onlyOwner {
        if (pair == uniswapV2Pair) {
            revert InvalidConfiguration();
        }
        _isAMM[pair] = value;
    }

    function withdrawStuckTokens() external onlyOwner {
        super._transfer(address(this), _msgSender(), balanceOf(address(this)) - liquidityTokens - marketingTokens);
    }


    receive() external payable {}

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"},{"internalType":"address","name":"_liquidityWallet","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"InvalidConfiguration","type":"error"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"}],"name":"InvalidTransfer","type":"error"},{"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":"bool","name":"enabled","type":"bool"}],"name":"FeesEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensAutoLiq","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethAutoLiq","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_holderLastTxBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isAMM","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedFromBlacklist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_user","type":"address[]"},{"internalType":"uint256[]","name":"_amount","type":"uint256[]"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"burnBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnSellFee","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":"accounts","type":"address[]"}],"name":"excludeManyFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feesEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"liquidityBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquiditySellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingSellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAMM","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setBlacklisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"burn","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"}],"name":"setBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"setExcludedFromBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setExcludedFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setFeesEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"burn","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"}],"name":"setSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setSwapAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapping","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBuyFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSellFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"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"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateLiquidityWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526001600c60156101000a81548160ff0219169083151502179055506001600c60166101000a81548160ff0219169083151502179055506064600d556064600e5561012c600f556101f46010556064601155606460125561012c6013556101f46014556969e10de76676d080000060175534801562000080575f80fd5b506040516200563d3803806200563d8339818101604052810190620000a69190620009fe565b6040518060400160405280600b81526020017f477265656e2047616d65730000000000000000000000000000000000000000008152506040518060400160405280600681526020017f4245545445440000000000000000000000000000000000000000000000000000815250816003908162000123919062000ca7565b50806004908162000135919062000ca7565b505050620001586200014c6200072d60201b60201c565b6200073460201b60201c565b5f737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001ee573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000214919062000d8b565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200027a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002a0919062000d8b565b6040518363ffffffff1660e01b8152600401620002bf92919062000dcc565b6020604051808303815f875af1158015620002dc573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000302919062000d8b565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506001600a5f60a05173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555082600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600c5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160065f62000421620007f760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160065f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160065f61dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160085f62000531620007f760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160085f60a05173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160085f600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160085f8073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160085f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550620007246200070b620007f760201b60201c565b6b033b2e3c9fd0803ce80000006200081f60201b60201c565b50505062000f08565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000890576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008879062000e55565b60405180910390fd5b620008a35f83836200098f60201b60201c565b8060025f828254620008b6919062000ea2565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546200090a919062000ea2565b925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000970919062000eed565b60405180910390a36200098b5f83836200099460201b60201c565b5050565b505050565b505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f620009c8826200099d565b9050919050565b620009da81620009bc565b8114620009e5575f80fd5b50565b5f81519050620009f881620009cf565b92915050565b5f806040838503121562000a175762000a1662000999565b5b5f62000a2685828601620009e8565b925050602062000a3985828601620009e8565b9150509250929050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168062000abf57607f821691505b60208210810362000ad55762000ad462000a7a565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830262000b397fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000afc565b62000b45868362000afc565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f62000b8f62000b8962000b838462000b5d565b62000b66565b62000b5d565b9050919050565b5f819050919050565b62000baa8362000b6f565b62000bc262000bb98262000b96565b84845462000b08565b825550505050565b5f90565b62000bd862000bca565b62000be581848462000b9f565b505050565b5b8181101562000c0c5762000c005f8262000bce565b60018101905062000beb565b5050565b601f82111562000c5b5762000c258162000adb565b62000c308462000aed565b8101602085101562000c40578190505b62000c5862000c4f8562000aed565b83018262000bea565b50505b505050565b5f82821c905092915050565b5f62000c7d5f198460080262000c60565b1980831691505092915050565b5f62000c97838362000c6c565b9150826002028217905092915050565b62000cb28262000a43565b67ffffffffffffffff81111562000cce5762000ccd62000a4d565b5b62000cda825462000aa7565b62000ce782828562000c10565b5f60209050601f83116001811462000d1d575f841562000d08578287015190505b62000d14858262000c8a565b86555062000d83565b601f19841662000d2d8662000adb565b5f5b8281101562000d565784890151825560018201915060208501945060208101905062000d2f565b8683101562000d76578489015162000d72601f89168262000c6c565b8355505b6001600288020188555050505b505050505050565b5f6020828403121562000da35762000da262000999565b5b5f62000db284828501620009e8565b91505092915050565b62000dc681620009bc565b82525050565b5f60408201905062000de15f83018562000dbb565b62000df0602083018462000dbb565b9392505050565b5f82825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f62000e3d601f8362000df7565b915062000e4a8262000e07565b602082019050919050565b5f6020820190508181035f83015262000e6e8162000e2f565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f62000eae8262000b5d565b915062000ebb8362000b5d565b925082820190508082111562000ed65762000ed562000e75565b5b92915050565b62000ee78162000b5d565b82525050565b5f60208201905062000f025f83018462000edc565b92915050565b60805160a0516146f062000f4d5f395f818161114b0152611b0601525f8181610efa01528181612d98015281816132e2015281816133bd015261345101526146f05ff3fe60806040526004361061031d575f3560e01c8063792df503116101aa578063aacebbe3116100f6578063dd62ed3e11610094578063e2f456051161006e578063e2f4560514610bb4578063e37ba8f914610bde578063e7f444b314610c06578063f2fde38b14610c3057610324565b8063dd62ed3e14610b14578063e01af92c14610b50578063e0bf7fd114610b7857610324565b8063ccb61358116100d0578063ccb6135814610a6e578063d01dd6d214610a98578063d0a3981414610ac0578063d469801614610aea57610324565b8063aacebbe3146109e0578063b9e9370014610a08578063bd967b7614610a3257610324565b806392f3693911610163578063a64e4f8a1161013d578063a64e4f8a1461092a578063a901dd9214610954578063a9059cbb1461097c578063a9d3cd8a146109b857610324565b806392f369391461089c57806395d89b41146108c4578063a457c2d7146108ee57610324565b8063792df503146107a25780637ae3ff47146107de5780637e761377146108085780638183b3c8146108325780638b27306d146108485780638da5cb5b1461087257610324565b806342966c68116102695780636402511e116102225780636ddd1713116101fc5780636ddd1713146106fc57806370a0823114610726578063715018a61461076257806375f0a8741461077857610324565b80636402511e1461068257806367243482146106aa57806368078952146106d257610324565b806342966c681461058c57806349bd5a5e146105b45780634b8ce602146105de57806351bc3c8514610608578063576f9a541461061e578063590ffdce1461065a57610324565b80631732cded116102d657806323b872dd116102b057806323b872dd146104c2578063313ce567146104fe578063373bf3b114610528578063395093511461055057610324565b80631732cded1461043257806318160ddd1461045c5780631cdd3be31461048657610324565b806306fdde0314610328578063095ea7b314610352578063099d0d301461038e5780630d075d9c146103b85780630f683e90146103e05780631694505e1461040857610324565b3661032457005b5f80fd5b348015610333575f80fd5b5061033c610c58565b60405161034991906135ad565b60405180910390f35b34801561035d575f80fd5b506103786004803603810190610373919061366b565b610ce8565b60405161038591906136c3565b60405180910390f35b348015610399575f80fd5b506103a2610d0a565b6040516103af91906136eb565b60405180910390f35b3480156103c3575f80fd5b506103de60048036038101906103d99190613704565b610d10565b005b3480156103eb575f80fd5b5061040660048036038101906104019190613704565b610e04565b005b348015610413575f80fd5b5061041c610ef8565b60405161042991906137af565b60405180910390f35b34801561043d575f80fd5b50610446610f1c565b60405161045391906136c3565b60405180910390f35b348015610467575f80fd5b50610470610f2f565b60405161047d91906136eb565b60405180910390f35b348015610491575f80fd5b506104ac60048036038101906104a791906137c8565b610f38565b6040516104b991906136c3565b60405180910390f35b3480156104cd575f80fd5b506104e860048036038101906104e391906137f3565b610f55565b6040516104f591906136c3565b60405180910390f35b348015610509575f80fd5b50610512610f83565b60405161051f919061385e565b60405180910390f35b348015610533575f80fd5b5061054e600480360381019061054991906139b7565b610f8b565b005b34801561055b575f80fd5b506105766004803603810190610571919061366b565b611097565b60405161058391906136c3565b60405180910390f35b348015610597575f80fd5b506105b260048036038101906105ad91906139fe565b61113c565b005b3480156105bf575f80fd5b506105c8611149565b6040516105d59190613a38565b60405180910390f35b3480156105e9575f80fd5b506105f261116d565b6040516105ff91906136eb565b60405180910390f35b348015610613575f80fd5b5061061c611173565b005b348015610629575f80fd5b50610644600480360381019061063f91906137c8565b61125c565b60405161065191906136c3565b60405180910390f35b348015610665575f80fd5b50610680600480360381019061067b9190613a7b565b611279565b005b34801561068d575f80fd5b506106a860048036038101906106a391906139fe565b61134d565b005b3480156106b5575f80fd5b506106d060048036038101906106cb9190613b79565b61140a565b005b3480156106dd575f80fd5b506106e6611528565b6040516106f391906136eb565b60405180910390f35b348015610707575f80fd5b5061071061152e565b60405161071d91906136c3565b60405180910390f35b348015610731575f80fd5b5061074c600480360381019061074791906137c8565b611541565b60405161075991906136eb565b60405180910390f35b34801561076d575f80fd5b50610776611586565b005b348015610783575f80fd5b5061078c61160d565b6040516107999190613a38565b60405180910390f35b3480156107ad575f80fd5b506107c860048036038101906107c391906137c8565b611632565b6040516107d591906136c3565b60405180910390f35b3480156107e9575f80fd5b506107f261164f565b6040516107ff91906136eb565b60405180910390f35b348015610813575f80fd5b5061081c611655565b60405161082991906136eb565b60405180910390f35b34801561083d575f80fd5b5061084661165b565b005b348015610853575f80fd5b5061085c61170d565b60405161086991906136eb565b60405180910390f35b34801561087d575f80fd5b50610886611713565b6040516108939190613a38565b60405180910390f35b3480156108a7575f80fd5b506108c260048036038101906108bd91906137c8565b61173b565b005b3480156108cf575f80fd5b506108d861180f565b6040516108e591906135ad565b60405180910390f35b3480156108f9575f80fd5b50610914600480360381019061090f919061366b565b61189f565b60405161092191906136c3565b60405180910390f35b348015610935575f80fd5b5061093e611983565b60405161094b91906136c3565b60405180910390f35b34801561095f575f80fd5b5061097a60048036038101906109759190613bef565b611996565b005b348015610987575f80fd5b506109a2600480360381019061099d919061366b565b611a66565b6040516109af91906136c3565b60405180910390f35b3480156109c3575f80fd5b506109de60048036038101906109d99190613a7b565b611a88565b005b3480156109eb575f80fd5b50610a066004803603810190610a0191906137c8565b611be1565b005b348015610a13575f80fd5b50610a1c611ca0565b604051610a2991906136eb565b60405180910390f35b348015610a3d575f80fd5b50610a586004803603810190610a5391906137c8565b611ca6565b604051610a6591906136eb565b60405180910390f35b348015610a79575f80fd5b50610a82611cbb565b604051610a8f91906136eb565b60405180910390f35b348015610aa3575f80fd5b50610abe6004803603810190610ab99190613a7b565b611cc1565b005b348015610acb575f80fd5b50610ad4611d95565b604051610ae191906136eb565b60405180910390f35b348015610af5575f80fd5b50610afe611d9b565b604051610b0b9190613a38565b60405180910390f35b348015610b1f575f80fd5b50610b3a6004803603810190610b359190613c1a565b611dc0565b604051610b4791906136eb565b60405180910390f35b348015610b5b575f80fd5b50610b766004803603810190610b719190613bef565b611e42565b005b348015610b83575f80fd5b50610b9e6004803603810190610b9991906137c8565b611f12565b604051610bab91906136c3565b60405180910390f35b348015610bbf575f80fd5b50610bc8611f2f565b604051610bd591906136eb565b60405180910390f35b348015610be9575f80fd5b50610c046004803603810190610bff91906137c8565b611f35565b005b348015610c11575f80fd5b50610c1a611ff4565b604051610c2791906136eb565b60405180910390f35b348015610c3b575f80fd5b50610c566004803603810190610c5191906137c8565b611ffa565b005b606060038054610c6790613c85565b80601f0160208091040260200160405190810160405280929190818152602001828054610c9390613c85565b8015610cde5780601f10610cb557610100808354040283529160200191610cde565b820191905f5260205f20905b815481529060010190602001808311610cc157829003601f168201915b5050505050905090565b5f80610cf2612250565b9050610cff818585612257565b600191505092915050565b60125481565b610d18612250565b73ffffffffffffffffffffffffffffffffffffffff16610d36611713565b73ffffffffffffffffffffffffffffffffffffffff1614610d8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8390613cff565b60405180910390fd5b5f818385610d9a9190613d4a565b610da49190613d4a565b90506101f4811115610de2576040517fc52a9bd300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600d8190555082600e8190555081600f819055508060108190555050505050565b610e0c612250565b73ffffffffffffffffffffffffffffffffffffffff16610e2a611713565b73ffffffffffffffffffffffffffffffffffffffff1614610e80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7790613cff565b60405180910390fd5b5f818385610e8e9190613d4a565b610e989190613d4a565b90506101f4811115610ed6576040517fc52a9bd300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8360118190555082601281905550816013819055508060148190555050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600c60149054906101000a900460ff1681565b5f600254905090565b6007602052805f5260405f205f915054906101000a900460ff1681565b5f80610f5f612250565b9050610f6c85828561241a565b610f778585856124a5565b60019150509392505050565b5f6012905090565b610f93612250565b73ffffffffffffffffffffffffffffffffffffffff16610fb1611713565b73ffffffffffffffffffffffffffffffffffffffff1614611007576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ffe90613cff565b60405180910390fd5b5f815190505f5b8181101561109257600160065f85848151811061102e5761102d613d7d565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550808060010191505061100e565b505050565b5f806110a1612250565b905061113181858560015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461112c9190613d4a565b612257565b600191505092915050565b6111463382612b60565b50565b7f000000000000000000000000000000000000000000000000000000000000000081565b60155481565b61117b612250565b73ffffffffffffffffffffffffffffffffffffffff16611199611713565b73ffffffffffffffffffffffffffffffffffffffff16146111ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e690613cff565b60405180910390fd5b5f6016546015546112009190613d4a565b90505f6017548210156112135781611217565b6017545b90506001600c60146101000a81548160ff02191690831515021790555061123e8282612d2c565b5f600c60146101000a81548160ff0219169083151502179055505050565b600a602052805f5260405f205f915054906101000a900460ff1681565b611281612250565b73ffffffffffffffffffffffffffffffffffffffff1661129f611713565b73ffffffffffffffffffffffffffffffffffffffff16146112f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ec90613cff565b60405180910390fd5b8060065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b611355612250565b73ffffffffffffffffffffffffffffffffffffffff16611373611713565b73ffffffffffffffffffffffffffffffffffffffff16146113c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c090613cff565b60405180910390fd5b806017819055507f5948780118f41f7c4577ae4619d5cbd064057bd8562d9f7b7e60324053375c00816040516113ff91906136eb565b60405180910390a150565b611412612250565b73ffffffffffffffffffffffffffffffffffffffff16611430611713565b73ffffffffffffffffffffffffffffffffffffffff1614611486576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147d90613cff565b60405180910390fd5b5f82519050815181146114c5576040517fc52a9bd300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5b81811015611522576115156114da612250565b8583815181106114ed576114ec613d7d565b5b602002602001015185848151811061150857611507613d7d565b5b6020026020010151612f03565b80806001019150506114c7565b50505050565b600f5481565b600c60159054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b61158e612250565b73ffffffffffffffffffffffffffffffffffffffff166115ac611713565b73ffffffffffffffffffffffffffffffffffffffff1614611602576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f990613cff565b60405180910390fd5b61160b5f613178565b565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6008602052805f5260405f205f915054906101000a900460ff1681565b600d5481565b60115481565b611663612250565b73ffffffffffffffffffffffffffffffffffffffff16611681611713565b73ffffffffffffffffffffffffffffffffffffffff16146116d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ce90613cff565b60405180910390fd5b61170b306116e3612250565b6016546015546116f230611541565b6116fc9190613daa565b6117069190613daa565b612f03565b565b60165481565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611743612250565b73ffffffffffffffffffffffffffffffffffffffff16611761611713565b73ffffffffffffffffffffffffffffffffffffffff16146117b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ae90613cff565b60405180910390fd5b600160085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b60606004805461181e90613c85565b80601f016020809104026020016040519081016040528092919081815260200182805461184a90613c85565b80156118955780601f1061186c57610100808354040283529160200191611895565b820191905f5260205f20905b81548152906001019060200180831161187857829003601f168201915b5050505050905090565b5f806118a9612250565b90505f60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508381101561196a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196190613e4d565b60405180910390fd5b6119778286868403612257565b60019250505092915050565b600c60169054906101000a900460ff1681565b61199e612250565b73ffffffffffffffffffffffffffffffffffffffff166119bc611713565b73ffffffffffffffffffffffffffffffffffffffff1614611a12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0990613cff565b60405180910390fd5b80600c60166101000a81548160ff0219169083151502179055507fba500994dffbabeeb9e430f03a978d7b975359a20c5bde3a6ccb5a0c454680c881604051611a5b91906136c3565b60405180910390a150565b5f80611a70612250565b9050611a7d8185856124a5565b600191505092915050565b611a90612250565b73ffffffffffffffffffffffffffffffffffffffff16611aae611713565b73ffffffffffffffffffffffffffffffffffffffff1614611b04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611afb90613cff565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b89576040517fc52a9bd300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b611be9612250565b73ffffffffffffffffffffffffffffffffffffffff16611c07611713565b73ffffffffffffffffffffffffffffffffffffffff1614611c5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5490613cff565b60405180910390fd5b80600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60105481565b6009602052805f5260405f205f915090505481565b600e5481565b611cc9612250565b73ffffffffffffffffffffffffffffffffffffffff16611ce7611713565b73ffffffffffffffffffffffffffffffffffffffff1614611d3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3490613cff565b60405180910390fd5b8060075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60145481565b600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b611e4a612250565b73ffffffffffffffffffffffffffffffffffffffff16611e68611713565b73ffffffffffffffffffffffffffffffffffffffff1614611ebe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb590613cff565b60405180910390fd5b80600c60156101000a81548160ff0219169083151502179055507f436b6cf978c7b6998fcce43dfe4d37e3a0dc2bb780144a2eb55d7138201e8a1281604051611f0791906136c3565b60405180910390a150565b6006602052805f5260405f205f915054906101000a900460ff1681565b60175481565b611f3d612250565b73ffffffffffffffffffffffffffffffffffffffff16611f5b611713565b73ffffffffffffffffffffffffffffffffffffffff1614611fb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa890613cff565b60405180910390fd5b80600c5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60135481565b612002612250565b73ffffffffffffffffffffffffffffffffffffffff16612020611713565b73ffffffffffffffffffffffffffffffffffffffff1614612076576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206d90613cff565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036120e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120db90613edb565b60405180910390fd5b5f60085f6120f0611713565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505f60065f61214b611713565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555061224d81613178565b50565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036122c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122bc90613f69565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612333576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232a90613ff7565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161240d91906136eb565b60405180910390a3505050565b5f6124258484611dc0565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461249f5781811015612491576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124889061405f565b60405180910390fd5b61249e8484848403612257565b5b50505050565b60075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612540575060075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b156125845782826040517f709ac01700000000000000000000000000000000000000000000000000000000815260040161257b92919061407d565b60405180910390fd5b5f810361259b5761259683835f612f03565b612b5b565b600c60149054906101000a900460ff16612b4f57600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168061264a5750600a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b156127805760085f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161580156126e257504360095f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054145b1561273d57600160075f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505b4360095f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b60065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615801561281e575060065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612b4e575f6016546015546128349190613d4a565b90505f60175482101590508080156128585750600c60159054906101000a900460ff165b80156128ab5750600a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156128f2576001600c60146101000a81548160ff0219169083151502179055506128d782601754612d2c565b5f600c60146101000a81548160ff0219169083151502179055505b600c60169054906101000a900460ff1615612b4b575f80600a5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561296157505f60145414155b15612a14576127106014548661297791906140a4565b6129819190614112565b91506014546011548361299491906140a4565b61299e9190614112565b816129a99190613d4a565b9050601454601254836129bc91906140a4565b6129c69190614112565b60155f8282546129d69190613d4a565b92505081905550601454601354836129ee91906140a4565b6129f89190614112565b60165f828254612a089190613d4a565b92505081905550612b1c565b600a5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612a6c57505f60105414155b15612b1b5761271060105486612a8291906140a4565b612a8c9190614112565b9150601054600d5483612a9f91906140a4565b612aa99190614112565b81612ab49190613d4a565b9050601054600e5483612ac791906140a4565b612ad19190614112565b60155f828254612ae19190613d4a565b92505081905550601054600f5483612af991906140a4565b612b039190614112565b60165f828254612b139190613d4a565b925050819055505b5b5f821115612b48578185612b309190613daa565b9450612b3d873084612f03565b612b473082612b60565b5b50505b50505b5b612b5a838383612f03565b5b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612bce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bc5906141b2565b60405180910390fd5b612bd9825f8361323b565b5f805f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015612c5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c5390614240565b60405180910390fd5b8181035f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508160025f828254612cb09190613daa565b925050819055505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612d1491906136eb565b60405180910390a3612d27835f84613240565b505050565b5f8260165483612d3c91906140a4565b612d469190614112565b90505f8360155484612d5891906140a4565b612d629190614112565b90505f600282612d729190614112565b90505f8183612d819190613daa565b90505f8483612d909190613d4a565b9050612dbd307f000000000000000000000000000000000000000000000000000000000000000088612257565b612dc681613245565b5f4790505f828583612dd891906140a4565b612de29190614112565b90505f612def858361344d565b90507f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f83814868583604051612e2292919061425e565b60405180910390a1600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051612e6f906142b2565b5f6040518083038185875af1925050503d805f8114612ea9576040519150601f19603f3d011682016040523d82523d5f602084013e612eae565b606091505b5050508085612ebd9190613daa565b87612ec89190613daa565b60155f828254612ed89190613daa565b925050819055508760165f828254612ef09190613daa565b9250508190555050505050505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612f71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f6890614336565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612fdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fd6906143c4565b60405180910390fd5b612fea83838361323b565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101561306d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161306490614452565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546130fb9190613d4a565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161315f91906136eb565b60405180910390a3613172848484613240565b50505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b505050565b505050565b5f600267ffffffffffffffff8111156132615761326061387b565b5b60405190808252806020026020018201604052801561328f5781602001602082028036833780820191505090505b50905030815f815181106132a6576132a5613d7d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613349573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061336d9190614484565b8160018151811061338157613380613d7d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b815260040161341c95949392919061459f565b5f604051808303815f87803b158015613433575f80fd5b505af1158015613445573d5f803e3d5ffd5b505050505050565b5f807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d7198430875f80600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b81526004016134d4969594939291906145f7565b60606040518083038185885af11580156134f0573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190613515919061466a565b505090508091505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561355a57808201518184015260208101905061353f565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61357f82613523565b613589818561352d565b935061359981856020860161353d565b6135a281613565565b840191505092915050565b5f6020820190508181035f8301526135c58184613575565b905092915050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613607826135de565b9050919050565b613617816135fd565b8114613621575f80fd5b50565b5f813590506136328161360e565b92915050565b5f819050919050565b61364a81613638565b8114613654575f80fd5b50565b5f8135905061366581613641565b92915050565b5f8060408385031215613681576136806135d6565b5b5f61368e85828601613624565b925050602061369f85828601613657565b9150509250929050565b5f8115159050919050565b6136bd816136a9565b82525050565b5f6020820190506136d65f8301846136b4565b92915050565b6136e581613638565b82525050565b5f6020820190506136fe5f8301846136dc565b92915050565b5f805f6060848603121561371b5761371a6135d6565b5b5f61372886828701613657565b935050602061373986828701613657565b925050604061374a86828701613657565b9150509250925092565b5f819050919050565b5f61377761377261376d846135de565b613754565b6135de565b9050919050565b5f6137888261375d565b9050919050565b5f6137998261377e565b9050919050565b6137a98161378f565b82525050565b5f6020820190506137c25f8301846137a0565b92915050565b5f602082840312156137dd576137dc6135d6565b5b5f6137ea84828501613624565b91505092915050565b5f805f6060848603121561380a576138096135d6565b5b5f61381786828701613624565b935050602061382886828701613624565b925050604061383986828701613657565b9150509250925092565b5f60ff82169050919050565b61385881613843565b82525050565b5f6020820190506138715f83018461384f565b92915050565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6138b182613565565b810181811067ffffffffffffffff821117156138d0576138cf61387b565b5b80604052505050565b5f6138e26135cd565b90506138ee82826138a8565b919050565b5f67ffffffffffffffff82111561390d5761390c61387b565b5b602082029050602081019050919050565b5f80fd5b5f61393461392f846138f3565b6138d9565b905080838252602082019050602084028301858111156139575761395661391e565b5b835b81811015613980578061396c8882613624565b845260208401935050602081019050613959565b5050509392505050565b5f82601f83011261399e5761399d613877565b5b81356139ae848260208601613922565b91505092915050565b5f602082840312156139cc576139cb6135d6565b5b5f82013567ffffffffffffffff8111156139e9576139e86135da565b5b6139f58482850161398a565b91505092915050565b5f60208284031215613a1357613a126135d6565b5b5f613a2084828501613657565b91505092915050565b613a32816135fd565b82525050565b5f602082019050613a4b5f830184613a29565b92915050565b613a5a816136a9565b8114613a64575f80fd5b50565b5f81359050613a7581613a51565b92915050565b5f8060408385031215613a9157613a906135d6565b5b5f613a9e85828601613624565b9250506020613aaf85828601613a67565b9150509250929050565b5f67ffffffffffffffff821115613ad357613ad261387b565b5b602082029050602081019050919050565b5f613af6613af184613ab9565b6138d9565b90508083825260208201905060208402830185811115613b1957613b1861391e565b5b835b81811015613b425780613b2e8882613657565b845260208401935050602081019050613b1b565b5050509392505050565b5f82601f830112613b6057613b5f613877565b5b8135613b70848260208601613ae4565b91505092915050565b5f8060408385031215613b8f57613b8e6135d6565b5b5f83013567ffffffffffffffff811115613bac57613bab6135da565b5b613bb88582860161398a565b925050602083013567ffffffffffffffff811115613bd957613bd86135da565b5b613be585828601613b4c565b9150509250929050565b5f60208284031215613c0457613c036135d6565b5b5f613c1184828501613a67565b91505092915050565b5f8060408385031215613c3057613c2f6135d6565b5b5f613c3d85828601613624565b9250506020613c4e85828601613624565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613c9c57607f821691505b602082108103613caf57613cae613c58565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613ce960208361352d565b9150613cf482613cb5565b602082019050919050565b5f6020820190508181035f830152613d1681613cdd565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613d5482613638565b9150613d5f83613638565b9250828201905080821115613d7757613d76613d1d565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f613db482613638565b9150613dbf83613638565b9250828203905081811115613dd757613dd6613d1d565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f613e3760258361352d565b9150613e4282613ddd565b604082019050919050565b5f6020820190508181035f830152613e6481613e2b565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f613ec560268361352d565b9150613ed082613e6b565b604082019050919050565b5f6020820190508181035f830152613ef281613eb9565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f613f5360248361352d565b9150613f5e82613ef9565b604082019050919050565b5f6020820190508181035f830152613f8081613f47565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f613fe160228361352d565b9150613fec82613f87565b604082019050919050565b5f6020820190508181035f83015261400e81613fd5565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f614049601d8361352d565b915061405482614015565b602082019050919050565b5f6020820190508181035f8301526140768161403d565b9050919050565b5f6040820190506140905f830185613a29565b61409d6020830184613a29565b9392505050565b5f6140ae82613638565b91506140b983613638565b92508282026140c781613638565b915082820484148315176140de576140dd613d1d565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61411c82613638565b915061412783613638565b925082614137576141366140e5565b5b828204905092915050565b7f45524332303a206275726e2066726f6d20746865207a65726f206164647265735f8201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b5f61419c60218361352d565b91506141a782614142565b604082019050919050565b5f6020820190508181035f8301526141c981614190565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e5f8201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b5f61422a60228361352d565b9150614235826141d0565b604082019050919050565b5f6020820190508181035f8301526142578161421e565b9050919050565b5f6040820190506142715f8301856136dc565b61427e60208301846136dc565b9392505050565b5f81905092915050565b50565b5f61429d5f83614285565b91506142a88261428f565b5f82019050919050565b5f6142bc82614292565b9150819050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f61432060258361352d565b915061432b826142c6565b604082019050919050565b5f6020820190508181035f83015261434d81614314565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6143ae60238361352d565b91506143b982614354565b604082019050919050565b5f6020820190508181035f8301526143db816143a2565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f61443c60268361352d565b9150614447826143e2565b604082019050919050565b5f6020820190508181035f83015261446981614430565b9050919050565b5f8151905061447e8161360e565b92915050565b5f60208284031215614499576144986135d6565b5b5f6144a684828501614470565b91505092915050565b5f819050919050565b5f6144d26144cd6144c8846144af565b613754565b613638565b9050919050565b6144e2816144b8565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61451a816135fd565b82525050565b5f61452b8383614511565b60208301905092915050565b5f602082019050919050565b5f61454d826144e8565b61455781856144f2565b935061456283614502565b805f5b838110156145925781516145798882614520565b975061458483614537565b925050600181019050614565565b5085935050505092915050565b5f60a0820190506145b25f8301886136dc565b6145bf60208301876144d9565b81810360408301526145d18186614543565b90506145e06060830185613a29565b6145ed60808301846136dc565b9695505050505050565b5f60c08201905061460a5f830189613a29565b61461760208301886136dc565b61462460408301876144d9565b61463160608301866144d9565b61463e6080830185613a29565b61464b60a08301846136dc565b979650505050505050565b5f8151905061466481613641565b92915050565b5f805f60608486031215614681576146806135d6565b5b5f61468e86828701614656565b935050602061469f86828701614656565b92505060406146b086828701614656565b915050925092509256fea26469706673582212207bef0c575203fb70976a78f4f62cf62b7336d4df1bc38c2759a1c46d0db8dc3364736f6c634300081800330000000000000000000000004b3a988f2137b285169b1a6dc4d137185f70ced00000000000000000000000009ef0427c86f741d7e896e1321184fba388d7d25c

Deployed Bytecode

0x60806040526004361061031d575f3560e01c8063792df503116101aa578063aacebbe3116100f6578063dd62ed3e11610094578063e2f456051161006e578063e2f4560514610bb4578063e37ba8f914610bde578063e7f444b314610c06578063f2fde38b14610c3057610324565b8063dd62ed3e14610b14578063e01af92c14610b50578063e0bf7fd114610b7857610324565b8063ccb61358116100d0578063ccb6135814610a6e578063d01dd6d214610a98578063d0a3981414610ac0578063d469801614610aea57610324565b8063aacebbe3146109e0578063b9e9370014610a08578063bd967b7614610a3257610324565b806392f3693911610163578063a64e4f8a1161013d578063a64e4f8a1461092a578063a901dd9214610954578063a9059cbb1461097c578063a9d3cd8a146109b857610324565b806392f369391461089c57806395d89b41146108c4578063a457c2d7146108ee57610324565b8063792df503146107a25780637ae3ff47146107de5780637e761377146108085780638183b3c8146108325780638b27306d146108485780638da5cb5b1461087257610324565b806342966c68116102695780636402511e116102225780636ddd1713116101fc5780636ddd1713146106fc57806370a0823114610726578063715018a61461076257806375f0a8741461077857610324565b80636402511e1461068257806367243482146106aa57806368078952146106d257610324565b806342966c681461058c57806349bd5a5e146105b45780634b8ce602146105de57806351bc3c8514610608578063576f9a541461061e578063590ffdce1461065a57610324565b80631732cded116102d657806323b872dd116102b057806323b872dd146104c2578063313ce567146104fe578063373bf3b114610528578063395093511461055057610324565b80631732cded1461043257806318160ddd1461045c5780631cdd3be31461048657610324565b806306fdde0314610328578063095ea7b314610352578063099d0d301461038e5780630d075d9c146103b85780630f683e90146103e05780631694505e1461040857610324565b3661032457005b5f80fd5b348015610333575f80fd5b5061033c610c58565b60405161034991906135ad565b60405180910390f35b34801561035d575f80fd5b506103786004803603810190610373919061366b565b610ce8565b60405161038591906136c3565b60405180910390f35b348015610399575f80fd5b506103a2610d0a565b6040516103af91906136eb565b60405180910390f35b3480156103c3575f80fd5b506103de60048036038101906103d99190613704565b610d10565b005b3480156103eb575f80fd5b5061040660048036038101906104019190613704565b610e04565b005b348015610413575f80fd5b5061041c610ef8565b60405161042991906137af565b60405180910390f35b34801561043d575f80fd5b50610446610f1c565b60405161045391906136c3565b60405180910390f35b348015610467575f80fd5b50610470610f2f565b60405161047d91906136eb565b60405180910390f35b348015610491575f80fd5b506104ac60048036038101906104a791906137c8565b610f38565b6040516104b991906136c3565b60405180910390f35b3480156104cd575f80fd5b506104e860048036038101906104e391906137f3565b610f55565b6040516104f591906136c3565b60405180910390f35b348015610509575f80fd5b50610512610f83565b60405161051f919061385e565b60405180910390f35b348015610533575f80fd5b5061054e600480360381019061054991906139b7565b610f8b565b005b34801561055b575f80fd5b506105766004803603810190610571919061366b565b611097565b60405161058391906136c3565b60405180910390f35b348015610597575f80fd5b506105b260048036038101906105ad91906139fe565b61113c565b005b3480156105bf575f80fd5b506105c8611149565b6040516105d59190613a38565b60405180910390f35b3480156105e9575f80fd5b506105f261116d565b6040516105ff91906136eb565b60405180910390f35b348015610613575f80fd5b5061061c611173565b005b348015610629575f80fd5b50610644600480360381019061063f91906137c8565b61125c565b60405161065191906136c3565b60405180910390f35b348015610665575f80fd5b50610680600480360381019061067b9190613a7b565b611279565b005b34801561068d575f80fd5b506106a860048036038101906106a391906139fe565b61134d565b005b3480156106b5575f80fd5b506106d060048036038101906106cb9190613b79565b61140a565b005b3480156106dd575f80fd5b506106e6611528565b6040516106f391906136eb565b60405180910390f35b348015610707575f80fd5b5061071061152e565b60405161071d91906136c3565b60405180910390f35b348015610731575f80fd5b5061074c600480360381019061074791906137c8565b611541565b60405161075991906136eb565b60405180910390f35b34801561076d575f80fd5b50610776611586565b005b348015610783575f80fd5b5061078c61160d565b6040516107999190613a38565b60405180910390f35b3480156107ad575f80fd5b506107c860048036038101906107c391906137c8565b611632565b6040516107d591906136c3565b60405180910390f35b3480156107e9575f80fd5b506107f261164f565b6040516107ff91906136eb565b60405180910390f35b348015610813575f80fd5b5061081c611655565b60405161082991906136eb565b60405180910390f35b34801561083d575f80fd5b5061084661165b565b005b348015610853575f80fd5b5061085c61170d565b60405161086991906136eb565b60405180910390f35b34801561087d575f80fd5b50610886611713565b6040516108939190613a38565b60405180910390f35b3480156108a7575f80fd5b506108c260048036038101906108bd91906137c8565b61173b565b005b3480156108cf575f80fd5b506108d861180f565b6040516108e591906135ad565b60405180910390f35b3480156108f9575f80fd5b50610914600480360381019061090f919061366b565b61189f565b60405161092191906136c3565b60405180910390f35b348015610935575f80fd5b5061093e611983565b60405161094b91906136c3565b60405180910390f35b34801561095f575f80fd5b5061097a60048036038101906109759190613bef565b611996565b005b348015610987575f80fd5b506109a2600480360381019061099d919061366b565b611a66565b6040516109af91906136c3565b60405180910390f35b3480156109c3575f80fd5b506109de60048036038101906109d99190613a7b565b611a88565b005b3480156109eb575f80fd5b50610a066004803603810190610a0191906137c8565b611be1565b005b348015610a13575f80fd5b50610a1c611ca0565b604051610a2991906136eb565b60405180910390f35b348015610a3d575f80fd5b50610a586004803603810190610a5391906137c8565b611ca6565b604051610a6591906136eb565b60405180910390f35b348015610a79575f80fd5b50610a82611cbb565b604051610a8f91906136eb565b60405180910390f35b348015610aa3575f80fd5b50610abe6004803603810190610ab99190613a7b565b611cc1565b005b348015610acb575f80fd5b50610ad4611d95565b604051610ae191906136eb565b60405180910390f35b348015610af5575f80fd5b50610afe611d9b565b604051610b0b9190613a38565b60405180910390f35b348015610b1f575f80fd5b50610b3a6004803603810190610b359190613c1a565b611dc0565b604051610b4791906136eb565b60405180910390f35b348015610b5b575f80fd5b50610b766004803603810190610b719190613bef565b611e42565b005b348015610b83575f80fd5b50610b9e6004803603810190610b9991906137c8565b611f12565b604051610bab91906136c3565b60405180910390f35b348015610bbf575f80fd5b50610bc8611f2f565b604051610bd591906136eb565b60405180910390f35b348015610be9575f80fd5b50610c046004803603810190610bff91906137c8565b611f35565b005b348015610c11575f80fd5b50610c1a611ff4565b604051610c2791906136eb565b60405180910390f35b348015610c3b575f80fd5b50610c566004803603810190610c5191906137c8565b611ffa565b005b606060038054610c6790613c85565b80601f0160208091040260200160405190810160405280929190818152602001828054610c9390613c85565b8015610cde5780601f10610cb557610100808354040283529160200191610cde565b820191905f5260205f20905b815481529060010190602001808311610cc157829003601f168201915b5050505050905090565b5f80610cf2612250565b9050610cff818585612257565b600191505092915050565b60125481565b610d18612250565b73ffffffffffffffffffffffffffffffffffffffff16610d36611713565b73ffffffffffffffffffffffffffffffffffffffff1614610d8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8390613cff565b60405180910390fd5b5f818385610d9a9190613d4a565b610da49190613d4a565b90506101f4811115610de2576040517fc52a9bd300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600d8190555082600e8190555081600f819055508060108190555050505050565b610e0c612250565b73ffffffffffffffffffffffffffffffffffffffff16610e2a611713565b73ffffffffffffffffffffffffffffffffffffffff1614610e80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7790613cff565b60405180910390fd5b5f818385610e8e9190613d4a565b610e989190613d4a565b90506101f4811115610ed6576040517fc52a9bd300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8360118190555082601281905550816013819055508060148190555050505050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b600c60149054906101000a900460ff1681565b5f600254905090565b6007602052805f5260405f205f915054906101000a900460ff1681565b5f80610f5f612250565b9050610f6c85828561241a565b610f778585856124a5565b60019150509392505050565b5f6012905090565b610f93612250565b73ffffffffffffffffffffffffffffffffffffffff16610fb1611713565b73ffffffffffffffffffffffffffffffffffffffff1614611007576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ffe90613cff565b60405180910390fd5b5f815190505f5b8181101561109257600160065f85848151811061102e5761102d613d7d565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550808060010191505061100e565b505050565b5f806110a1612250565b905061113181858560015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461112c9190613d4a565b612257565b600191505092915050565b6111463382612b60565b50565b7f000000000000000000000000098b612edc94baa6bd35aa5d3d6553dbbdc11bb781565b60155481565b61117b612250565b73ffffffffffffffffffffffffffffffffffffffff16611199611713565b73ffffffffffffffffffffffffffffffffffffffff16146111ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e690613cff565b60405180910390fd5b5f6016546015546112009190613d4a565b90505f6017548210156112135781611217565b6017545b90506001600c60146101000a81548160ff02191690831515021790555061123e8282612d2c565b5f600c60146101000a81548160ff0219169083151502179055505050565b600a602052805f5260405f205f915054906101000a900460ff1681565b611281612250565b73ffffffffffffffffffffffffffffffffffffffff1661129f611713565b73ffffffffffffffffffffffffffffffffffffffff16146112f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ec90613cff565b60405180910390fd5b8060065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b611355612250565b73ffffffffffffffffffffffffffffffffffffffff16611373611713565b73ffffffffffffffffffffffffffffffffffffffff16146113c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c090613cff565b60405180910390fd5b806017819055507f5948780118f41f7c4577ae4619d5cbd064057bd8562d9f7b7e60324053375c00816040516113ff91906136eb565b60405180910390a150565b611412612250565b73ffffffffffffffffffffffffffffffffffffffff16611430611713565b73ffffffffffffffffffffffffffffffffffffffff1614611486576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147d90613cff565b60405180910390fd5b5f82519050815181146114c5576040517fc52a9bd300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5b81811015611522576115156114da612250565b8583815181106114ed576114ec613d7d565b5b602002602001015185848151811061150857611507613d7d565b5b6020026020010151612f03565b80806001019150506114c7565b50505050565b600f5481565b600c60159054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b61158e612250565b73ffffffffffffffffffffffffffffffffffffffff166115ac611713565b73ffffffffffffffffffffffffffffffffffffffff1614611602576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f990613cff565b60405180910390fd5b61160b5f613178565b565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6008602052805f5260405f205f915054906101000a900460ff1681565b600d5481565b60115481565b611663612250565b73ffffffffffffffffffffffffffffffffffffffff16611681611713565b73ffffffffffffffffffffffffffffffffffffffff16146116d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ce90613cff565b60405180910390fd5b61170b306116e3612250565b6016546015546116f230611541565b6116fc9190613daa565b6117069190613daa565b612f03565b565b60165481565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611743612250565b73ffffffffffffffffffffffffffffffffffffffff16611761611713565b73ffffffffffffffffffffffffffffffffffffffff16146117b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ae90613cff565b60405180910390fd5b600160085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b60606004805461181e90613c85565b80601f016020809104026020016040519081016040528092919081815260200182805461184a90613c85565b80156118955780601f1061186c57610100808354040283529160200191611895565b820191905f5260205f20905b81548152906001019060200180831161187857829003601f168201915b5050505050905090565b5f806118a9612250565b90505f60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508381101561196a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196190613e4d565b60405180910390fd5b6119778286868403612257565b60019250505092915050565b600c60169054906101000a900460ff1681565b61199e612250565b73ffffffffffffffffffffffffffffffffffffffff166119bc611713565b73ffffffffffffffffffffffffffffffffffffffff1614611a12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0990613cff565b60405180910390fd5b80600c60166101000a81548160ff0219169083151502179055507fba500994dffbabeeb9e430f03a978d7b975359a20c5bde3a6ccb5a0c454680c881604051611a5b91906136c3565b60405180910390a150565b5f80611a70612250565b9050611a7d8185856124a5565b600191505092915050565b611a90612250565b73ffffffffffffffffffffffffffffffffffffffff16611aae611713565b73ffffffffffffffffffffffffffffffffffffffff1614611b04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611afb90613cff565b60405180910390fd5b7f000000000000000000000000098b612edc94baa6bd35aa5d3d6553dbbdc11bb773ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b89576040517fc52a9bd300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b611be9612250565b73ffffffffffffffffffffffffffffffffffffffff16611c07611713565b73ffffffffffffffffffffffffffffffffffffffff1614611c5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5490613cff565b60405180910390fd5b80600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60105481565b6009602052805f5260405f205f915090505481565b600e5481565b611cc9612250565b73ffffffffffffffffffffffffffffffffffffffff16611ce7611713565b73ffffffffffffffffffffffffffffffffffffffff1614611d3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3490613cff565b60405180910390fd5b8060075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60145481565b600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b611e4a612250565b73ffffffffffffffffffffffffffffffffffffffff16611e68611713565b73ffffffffffffffffffffffffffffffffffffffff1614611ebe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb590613cff565b60405180910390fd5b80600c60156101000a81548160ff0219169083151502179055507f436b6cf978c7b6998fcce43dfe4d37e3a0dc2bb780144a2eb55d7138201e8a1281604051611f0791906136c3565b60405180910390a150565b6006602052805f5260405f205f915054906101000a900460ff1681565b60175481565b611f3d612250565b73ffffffffffffffffffffffffffffffffffffffff16611f5b611713565b73ffffffffffffffffffffffffffffffffffffffff1614611fb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa890613cff565b60405180910390fd5b80600c5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60135481565b612002612250565b73ffffffffffffffffffffffffffffffffffffffff16612020611713565b73ffffffffffffffffffffffffffffffffffffffff1614612076576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206d90613cff565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036120e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120db90613edb565b60405180910390fd5b5f60085f6120f0611713565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505f60065f61214b611713565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555061224d81613178565b50565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036122c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122bc90613f69565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612333576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232a90613ff7565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161240d91906136eb565b60405180910390a3505050565b5f6124258484611dc0565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461249f5781811015612491576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124889061405f565b60405180910390fd5b61249e8484848403612257565b5b50505050565b60075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612540575060075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b156125845782826040517f709ac01700000000000000000000000000000000000000000000000000000000815260040161257b92919061407d565b60405180910390fd5b5f810361259b5761259683835f612f03565b612b5b565b600c60149054906101000a900460ff16612b4f57600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168061264a5750600a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b156127805760085f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161580156126e257504360095f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054145b1561273d57600160075f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505b4360095f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b60065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615801561281e575060065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612b4e575f6016546015546128349190613d4a565b90505f60175482101590508080156128585750600c60159054906101000a900460ff165b80156128ab5750600a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156128f2576001600c60146101000a81548160ff0219169083151502179055506128d782601754612d2c565b5f600c60146101000a81548160ff0219169083151502179055505b600c60169054906101000a900460ff1615612b4b575f80600a5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561296157505f60145414155b15612a14576127106014548661297791906140a4565b6129819190614112565b91506014546011548361299491906140a4565b61299e9190614112565b816129a99190613d4a565b9050601454601254836129bc91906140a4565b6129c69190614112565b60155f8282546129d69190613d4a565b92505081905550601454601354836129ee91906140a4565b6129f89190614112565b60165f828254612a089190613d4a565b92505081905550612b1c565b600a5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612a6c57505f60105414155b15612b1b5761271060105486612a8291906140a4565b612a8c9190614112565b9150601054600d5483612a9f91906140a4565b612aa99190614112565b81612ab49190613d4a565b9050601054600e5483612ac791906140a4565b612ad19190614112565b60155f828254612ae19190613d4a565b92505081905550601054600f5483612af991906140a4565b612b039190614112565b60165f828254612b139190613d4a565b925050819055505b5b5f821115612b48578185612b309190613daa565b9450612b3d873084612f03565b612b473082612b60565b5b50505b50505b5b612b5a838383612f03565b5b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612bce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bc5906141b2565b60405180910390fd5b612bd9825f8361323b565b5f805f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015612c5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c5390614240565b60405180910390fd5b8181035f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508160025f828254612cb09190613daa565b925050819055505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612d1491906136eb565b60405180910390a3612d27835f84613240565b505050565b5f8260165483612d3c91906140a4565b612d469190614112565b90505f8360155484612d5891906140a4565b612d629190614112565b90505f600282612d729190614112565b90505f8183612d819190613daa565b90505f8483612d909190613d4a565b9050612dbd307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d88612257565b612dc681613245565b5f4790505f828583612dd891906140a4565b612de29190614112565b90505f612def858361344d565b90507f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f83814868583604051612e2292919061425e565b60405180910390a1600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051612e6f906142b2565b5f6040518083038185875af1925050503d805f8114612ea9576040519150601f19603f3d011682016040523d82523d5f602084013e612eae565b606091505b5050508085612ebd9190613daa565b87612ec89190613daa565b60155f828254612ed89190613daa565b925050819055508760165f828254612ef09190613daa565b9250508190555050505050505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612f71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f6890614336565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612fdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fd6906143c4565b60405180910390fd5b612fea83838361323b565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101561306d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161306490614452565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546130fb9190613d4a565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161315f91906136eb565b60405180910390a3613172848484613240565b50505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b505050565b505050565b5f600267ffffffffffffffff8111156132615761326061387b565b5b60405190808252806020026020018201604052801561328f5781602001602082028036833780820191505090505b50905030815f815181106132a6576132a5613d7d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613349573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061336d9190614484565b8160018151811061338157613380613d7d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b815260040161341c95949392919061459f565b5f604051808303815f87803b158015613433575f80fd5b505af1158015613445573d5f803e3d5ffd5b505050505050565b5f807f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d7198430875f80600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b81526004016134d4969594939291906145f7565b60606040518083038185885af11580156134f0573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190613515919061466a565b505090508091505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561355a57808201518184015260208101905061353f565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61357f82613523565b613589818561352d565b935061359981856020860161353d565b6135a281613565565b840191505092915050565b5f6020820190508181035f8301526135c58184613575565b905092915050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613607826135de565b9050919050565b613617816135fd565b8114613621575f80fd5b50565b5f813590506136328161360e565b92915050565b5f819050919050565b61364a81613638565b8114613654575f80fd5b50565b5f8135905061366581613641565b92915050565b5f8060408385031215613681576136806135d6565b5b5f61368e85828601613624565b925050602061369f85828601613657565b9150509250929050565b5f8115159050919050565b6136bd816136a9565b82525050565b5f6020820190506136d65f8301846136b4565b92915050565b6136e581613638565b82525050565b5f6020820190506136fe5f8301846136dc565b92915050565b5f805f6060848603121561371b5761371a6135d6565b5b5f61372886828701613657565b935050602061373986828701613657565b925050604061374a86828701613657565b9150509250925092565b5f819050919050565b5f61377761377261376d846135de565b613754565b6135de565b9050919050565b5f6137888261375d565b9050919050565b5f6137998261377e565b9050919050565b6137a98161378f565b82525050565b5f6020820190506137c25f8301846137a0565b92915050565b5f602082840312156137dd576137dc6135d6565b5b5f6137ea84828501613624565b91505092915050565b5f805f6060848603121561380a576138096135d6565b5b5f61381786828701613624565b935050602061382886828701613624565b925050604061383986828701613657565b9150509250925092565b5f60ff82169050919050565b61385881613843565b82525050565b5f6020820190506138715f83018461384f565b92915050565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6138b182613565565b810181811067ffffffffffffffff821117156138d0576138cf61387b565b5b80604052505050565b5f6138e26135cd565b90506138ee82826138a8565b919050565b5f67ffffffffffffffff82111561390d5761390c61387b565b5b602082029050602081019050919050565b5f80fd5b5f61393461392f846138f3565b6138d9565b905080838252602082019050602084028301858111156139575761395661391e565b5b835b81811015613980578061396c8882613624565b845260208401935050602081019050613959565b5050509392505050565b5f82601f83011261399e5761399d613877565b5b81356139ae848260208601613922565b91505092915050565b5f602082840312156139cc576139cb6135d6565b5b5f82013567ffffffffffffffff8111156139e9576139e86135da565b5b6139f58482850161398a565b91505092915050565b5f60208284031215613a1357613a126135d6565b5b5f613a2084828501613657565b91505092915050565b613a32816135fd565b82525050565b5f602082019050613a4b5f830184613a29565b92915050565b613a5a816136a9565b8114613a64575f80fd5b50565b5f81359050613a7581613a51565b92915050565b5f8060408385031215613a9157613a906135d6565b5b5f613a9e85828601613624565b9250506020613aaf85828601613a67565b9150509250929050565b5f67ffffffffffffffff821115613ad357613ad261387b565b5b602082029050602081019050919050565b5f613af6613af184613ab9565b6138d9565b90508083825260208201905060208402830185811115613b1957613b1861391e565b5b835b81811015613b425780613b2e8882613657565b845260208401935050602081019050613b1b565b5050509392505050565b5f82601f830112613b6057613b5f613877565b5b8135613b70848260208601613ae4565b91505092915050565b5f8060408385031215613b8f57613b8e6135d6565b5b5f83013567ffffffffffffffff811115613bac57613bab6135da565b5b613bb88582860161398a565b925050602083013567ffffffffffffffff811115613bd957613bd86135da565b5b613be585828601613b4c565b9150509250929050565b5f60208284031215613c0457613c036135d6565b5b5f613c1184828501613a67565b91505092915050565b5f8060408385031215613c3057613c2f6135d6565b5b5f613c3d85828601613624565b9250506020613c4e85828601613624565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613c9c57607f821691505b602082108103613caf57613cae613c58565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613ce960208361352d565b9150613cf482613cb5565b602082019050919050565b5f6020820190508181035f830152613d1681613cdd565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613d5482613638565b9150613d5f83613638565b9250828201905080821115613d7757613d76613d1d565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f613db482613638565b9150613dbf83613638565b9250828203905081811115613dd757613dd6613d1d565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f613e3760258361352d565b9150613e4282613ddd565b604082019050919050565b5f6020820190508181035f830152613e6481613e2b565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f613ec560268361352d565b9150613ed082613e6b565b604082019050919050565b5f6020820190508181035f830152613ef281613eb9565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f613f5360248361352d565b9150613f5e82613ef9565b604082019050919050565b5f6020820190508181035f830152613f8081613f47565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f613fe160228361352d565b9150613fec82613f87565b604082019050919050565b5f6020820190508181035f83015261400e81613fd5565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f614049601d8361352d565b915061405482614015565b602082019050919050565b5f6020820190508181035f8301526140768161403d565b9050919050565b5f6040820190506140905f830185613a29565b61409d6020830184613a29565b9392505050565b5f6140ae82613638565b91506140b983613638565b92508282026140c781613638565b915082820484148315176140de576140dd613d1d565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61411c82613638565b915061412783613638565b925082614137576141366140e5565b5b828204905092915050565b7f45524332303a206275726e2066726f6d20746865207a65726f206164647265735f8201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b5f61419c60218361352d565b91506141a782614142565b604082019050919050565b5f6020820190508181035f8301526141c981614190565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e5f8201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b5f61422a60228361352d565b9150614235826141d0565b604082019050919050565b5f6020820190508181035f8301526142578161421e565b9050919050565b5f6040820190506142715f8301856136dc565b61427e60208301846136dc565b9392505050565b5f81905092915050565b50565b5f61429d5f83614285565b91506142a88261428f565b5f82019050919050565b5f6142bc82614292565b9150819050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f61432060258361352d565b915061432b826142c6565b604082019050919050565b5f6020820190508181035f83015261434d81614314565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6143ae60238361352d565b91506143b982614354565b604082019050919050565b5f6020820190508181035f8301526143db816143a2565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f61443c60268361352d565b9150614447826143e2565b604082019050919050565b5f6020820190508181035f83015261446981614430565b9050919050565b5f8151905061447e8161360e565b92915050565b5f60208284031215614499576144986135d6565b5b5f6144a684828501614470565b91505092915050565b5f819050919050565b5f6144d26144cd6144c8846144af565b613754565b613638565b9050919050565b6144e2816144b8565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61451a816135fd565b82525050565b5f61452b8383614511565b60208301905092915050565b5f602082019050919050565b5f61454d826144e8565b61455781856144f2565b935061456283614502565b805f5b838110156145925781516145798882614520565b975061458483614537565b925050600181019050614565565b5085935050505092915050565b5f60a0820190506145b25f8301886136dc565b6145bf60208301876144d9565b81810360408301526145d18186614543565b90506145e06060830185613a29565b6145ed60808301846136dc565b9695505050505050565b5f60c08201905061460a5f830189613a29565b61461760208301886136dc565b61462460408301876144d9565b61463160608301866144d9565b61463e6080830185613a29565b61464b60a08301846136dc565b979650505050505050565b5f8151905061466481613641565b92915050565b5f805f60608486031215614681576146806135d6565b5b5f61468e86828701614656565b935050602061469f86828701614656565b92505060406146b086828701614656565b915050925092509256fea26469706673582212207bef0c575203fb70976a78f4f62cf62b7336d4df1bc38c2759a1c46d0db8dc3364736f6c63430008180033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000004b3a988f2137b285169b1a6dc4d137185f70ced00000000000000000000000009ef0427c86f741d7e896e1321184fba388d7d25c

-----Decoded View---------------
Arg [0] : _marketingWallet (address): 0x4b3A988F2137b285169B1A6dC4D137185f70ced0
Arg [1] : _liquidityWallet (address): 0x9EF0427c86f741d7e896e1321184fba388d7d25c

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000004b3a988f2137b285169b1a6dc4d137185f70ced0
Arg [1] : 0000000000000000000000009ef0427c86f741d7e896e1321184fba388d7d25c


Deployed Bytecode Sourcemap

25999:10396:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15069:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17420:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26817:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33721:372;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33336:377;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26328:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26509:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16189:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26101:47;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18201:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16031:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33095:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18905:240;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35470:89;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26386:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26948:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35167:295;;;;;;;;;;;;;:::i;:::-;;26280:39;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32818:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34455:156;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34101:346;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26693:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26536:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16360:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8475:103;;;;;;;;;;;;;:::i;:::-;;26433:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26155:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26612:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26778:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36176:175;;;;;;;;;;;;;:::i;:::-;;26985:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7824:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32958:129;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15288:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19648:438;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26573:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34770:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16693:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35975;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34921:115;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26736:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26219:54;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26650:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32688:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26905:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26470:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16949:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34619:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26042:52;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27024;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35044:115;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26861:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35567:400;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15069:100;15123:13;15156:5;15149:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15069:100;:::o;17420:201::-;17503:4;17520:13;17536:12;:10;:12::i;:::-;17520:28;;17559:32;17568:5;17575:7;17584:6;17559:8;:32::i;:::-;17609:4;17602:11;;;17420:201;;;;:::o;26817:37::-;;;;:::o;33721:372::-;8055:12;:10;:12::i;:::-;8044:23;;:7;:5;:7::i;:::-;:23;;;8036:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33823:13:::1;33858:9;33846;33839:4;:16;;;;:::i;:::-;:28;;;;:::i;:::-;33823:44;;33890:3;33882:5;:11;33878:73;;;33917:22;;;;;;;;;;;;;;33878:73;33974:4;33961:10;:17;;;;34007:9;33989:15;:27;;;;34045:9;34027:15;:27;;;;34080:5;34065:12;:20;;;;33812:281;33721:372:::0;;;:::o;33336:377::-;8055:12;:10;:12::i;:::-;8044:23;;:7;:5;:7::i;:::-;:23;;;8036:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33439:13:::1;33474:9;33462;33455:4;:16;;;;:::i;:::-;:28;;;;:::i;:::-;33439:44;;33506:3;33498:5;:11;33494:73;;;33533:22;;;;;;;;;;;;;;33494:73;33591:4;33577:11;:18;;;;33625:9;33606:16;:28;;;;33664:9;33645:16;:28;;;;33700:5;33684:13;:21;;;;33428:285;33336:377:::0;;;:::o;26328:51::-;;;:::o;26509:20::-;;;;;;;;;;;;;:::o;16189:108::-;16250:7;16277:12;;16270:19;;16189:108;:::o;26101:47::-;;;;;;;;;;;;;;;;;;;;;;:::o;18201:295::-;18332:4;18349:15;18367:12;:10;:12::i;:::-;18349:30;;18390:38;18406:4;18412:7;18421:6;18390:15;:38::i;:::-;18439:27;18449:4;18455:2;18459:6;18439:9;:27::i;:::-;18484:4;18477:11;;;18201:295;;;;;:::o;16031:93::-;16089:5;16114:2;16107:9;;16031:93;:::o;33095:233::-;8055:12;:10;:12::i;:::-;8044:23;;:7;:5;:7::i;:::-;:23;;;8036:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33181:11:::1;33195:8;:15;33181:29;;33226:9;33221:100;33245:3;33241:1;:7;33221:100;;;33305:4;33270:19;:32;33290:8;33299:1;33290:11;;;;;;;;:::i;:::-;;;;;;;;33270:32;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;33250:3;;;;;;;33221:100;;;;33170:158;33095:233:::0;:::o;18905:240::-;18993:4;19010:13;19026:12;:10;:12::i;:::-;19010:28;;19049:66;19058:5;19065:7;19104:10;19074:11;:18;19086:5;19074:18;;;;;;;;;;;;;;;:27;19093:7;19074:27;;;;;;;;;;;;;;;;:40;;;;:::i;:::-;19049:8;:66::i;:::-;19133:4;19126:11;;;18905:240;;;;:::o;35470:89::-;35520:31;35532:10;35544:6;35520:11;:31::i;:::-;35470:89;:::o;26386:38::-;;;:::o;26948:30::-;;;;:::o;35167:295::-;8055:12;:10;:12::i;:::-;8044:23;;:7;:5;:7::i;:::-;:23;;;8036:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35219:13:::1;35253:15;;35235;;:33;;;;:::i;:::-;35219:49;;35279:20;35311:18;;35302:5;:27;;:56;;35353:5;35302:56;;;35332:18;;35302:56;35279:79;;35380:4;35369:8;;:15;;;;;;;;;;;;;;;;;;35395:32;35407:5;35414:12;35395:11;:32::i;:::-;35449:5;35438:8;;:16;;;;;;;;;;;;;;;;;;35208:254;;35167:295::o:0;26280:39::-;;;;;;;;;;;;;;;;;;;;;;:::o;32818:132::-;8055:12;:10;:12::i;:::-;8044:23;;:7;:5;:7::i;:::-;:23;;;8036:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32937:5:::1;32906:19;:28;32926:7;32906:28;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;32818:132:::0;;:::o;34455:156::-;8055:12;:10;:12::i;:::-;8044:23;;:7;:5;:7::i;:::-;:23;;;8036:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34547:6:::1;34526:18;:27;;;;34569:34;34596:6;34569:34;;;;;;:::i;:::-;;;;;;;;34455:156:::0;:::o;34101:346::-;8055:12;:10;:12::i;:::-;8044:23;;:7;:5;:7::i;:::-;:23;;;8036:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34198:11:::1;34212:5;:12;34198:26;;34246:7;:14;34239:3;:21;34235:83;;34284:22;;;;;;;;;;;;;;34235:83;34333:9;34328:112;34352:3;34348:1;:7;34328:112;;;34377:51;34393:12;:10;:12::i;:::-;34407:5;34413:1;34407:8;;;;;;;;:::i;:::-;;;;;;;;34417:7;34425:1;34417:10;;;;;;;;:::i;:::-;;;;;;;;34377:15;:51::i;:::-;34357:3;;;;;;;34328:112;;;;34187:260;34101:346:::0;;:::o;26693:36::-;;;;:::o;26536:30::-;;;;;;;;;;;;;:::o;16360:127::-;16434:7;16461:9;:18;16471:7;16461:18;;;;;;;;;;;;;;;;16454:25;;16360:127;;;:::o;8475:103::-;8055:12;:10;:12::i;:::-;8044:23;;:7;:5;:7::i;:::-;:23;;;8036:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8540:30:::1;8567:1;8540:18;:30::i;:::-;8475:103::o:0;26433:30::-;;;;;;;;;;;;;:::o;26155:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;26612:31::-;;;;:::o;26778:32::-;;;;:::o;36176:175::-;8055:12;:10;:12::i;:::-;8044:23;;:7;:5;:7::i;:::-;:23;;;8036:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36237:106:::1;36261:4;36268:12;:10;:12::i;:::-;36327:15;;36309;;36282:24;36300:4;36282:9;:24::i;:::-;:42;;;;:::i;:::-;:60;;;;:::i;:::-;36237:15;:106::i;:::-;36176:175::o:0;26985:30::-;;;;:::o;7824:87::-;7870:7;7897:6;;;;;;;;;;;7890:13;;7824:87;:::o;32958:129::-;8055:12;:10;:12::i;:::-;8044:23;;:7;:5;:7::i;:::-;:23;;;8036:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33075:4:::1;33039:24;:33;33064:7;33039:33;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;32958:129:::0;:::o;15288:104::-;15344:13;15377:7;15370:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15288:104;:::o;19648:438::-;19741:4;19758:13;19774:12;:10;:12::i;:::-;19758:28;;19797:24;19824:11;:18;19836:5;19824:18;;;;;;;;;;;;;;;:27;19843:7;19824:27;;;;;;;;;;;;;;;;19797:54;;19890:15;19870:16;:35;;19862:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;19983:60;19992:5;19999:7;20027:15;20008:16;:34;19983:8;:60::i;:::-;20074:4;20067:11;;;;19648:438;;;;:::o;26573:30::-;;;;;;;;;;;;;:::o;34770:143::-;8055:12;:10;:12::i;:::-;8044:23;;:7;:5;:7::i;:::-;:23;;;8036:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34853:8:::1;34839:11;;:22;;;;;;;;;;;;;;;;;;34877:28;34896:8;34877:28;;;;;;:::i;:::-;;;;;;;;34770:143:::0;:::o;16693:193::-;16772:4;16789:13;16805:12;:10;:12::i;:::-;16789:28;;16828;16838:5;16845:2;16849:6;16828:9;:28::i;:::-;16874:4;16867:11;;;16693:193;;;;:::o;35975:::-;8055:12;:10;:12::i;:::-;8044:23;;:7;:5;:7::i;:::-;:23;;;8036:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36059:13:::1;36051:21;;:4;:21;;::::0;36047:83:::1;;36096:22;;;;;;;;;;;;;;36047:83;36155:5;36140:6;:12;36147:4;36140:12;;;;;;;;;;;;;;;;:20;;;;;;;;;;;;;;;;;;35975:193:::0;;:::o;34921:115::-;8055:12;:10;:12::i;:::-;8044:23;;:7;:5;:7::i;:::-;:23;;;8036:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35019:9:::1;35001:15;;:27;;;;;;;;;;;;;;;;;;34921:115:::0;:::o;26736:33::-;;;;:::o;26219:54::-;;;;;;;;;;;;;;;;;:::o;26650:36::-;;;;:::o;32688:122::-;8055:12;:10;:12::i;:::-;8044:23;;:7;:5;:7::i;:::-;:23;;;8036:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32797:5:::1;32771:14;:23;32786:7;32771:23;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;32688:122:::0;;:::o;26905:34::-;;;;:::o;26470:30::-;;;;;;;;;;;;;:::o;16949:151::-;17038:7;17065:11;:18;17077:5;17065:18;;;;;;;;;;;;;;;:27;17084:7;17065:27;;;;;;;;;;;;;;;;17058:34;;16949:151;;;;:::o;34619:143::-;8055:12;:10;:12::i;:::-;8044:23;;:7;:5;:7::i;:::-;:23;;;8036:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34702:8:::1;34688:11;;:22;;;;;;;;;;;;;;;;;;34726:28;34745:8;34726:28;;;;;;:::i;:::-;;;;;;;;34619:143:::0;:::o;26042:52::-;;;;;;;;;;;;;;;;;;;;;;:::o;27024:::-;;;;:::o;35044:115::-;8055:12;:10;:12::i;:::-;8044:23;;:7;:5;:7::i;:::-;:23;;;8036:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35142:9:::1;35124:15;;:27;;;;;;;;;;;;;;;;;;35044:115:::0;:::o;26861:37::-;;;;:::o;35567:400::-;8055:12;:10;:12::i;:::-;8044:23;;:7;:5;:7::i;:::-;:23;;;8036:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35677:1:::1;35657:22;;:8;:22;;::::0;35649:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;35769:5;35733:24;:33;35758:7;:5;:7::i;:::-;35733:33;;;;;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;35816:5;35785:19;:28;35805:7;:5;:7::i;:::-;35785:28;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;35869:4;35832:24;:34;35857:8;35832:34;;;;;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;35916:4;35884:19;:29;35904:8;35884:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;35931:28;35950:8;35931:18;:28::i;:::-;35567:400:::0;:::o;6548:98::-;6601:7;6628:10;6621:17;;6548:98;:::o;23284:380::-;23437:1;23420:19;;:5;:19;;;23412:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23518:1;23499:21;;:7;:21;;;23491:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23602:6;23572:11;:18;23584:5;23572:18;;;;;;;;;;;;;;;:27;23591:7;23572:27;;;;;;;;;;;;;;;:36;;;;23640:7;23624:32;;23633:5;23624:32;;;23649:6;23624:32;;;;;;:::i;:::-;;;;;;;;23284:380;;;:::o;23951:453::-;24086:24;24113:25;24123:5;24130:7;24113:9;:25::i;:::-;24086:52;;24173:17;24153:16;:37;24149:248;;24235:6;24215:16;:26;;24207:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24319:51;24328:5;24335:7;24363:6;24344:16;:25;24319:8;:51::i;:::-;24149:248;24075:329;23951:453;;;:::o;28416:2472::-;28544:14;:20;28559:4;28544:20;;;;;;;;;;;;;;;;;;;;;;;;;:42;;;;28568:14;:18;28583:2;28568:18;;;;;;;;;;;;;;;;;;;;;;;;;28544:42;28540:107;;;28626:4;28632:2;28610:25;;;;;;;;;;;;:::i;:::-;;;;;;;;28540:107;28672:1;28662:6;:11;28659:92;;28690:28;28706:4;28712:2;28716:1;28690:15;:28::i;:::-;28733:7;;28659:92;28768:8;;;;;;;;;;;28763:2070;;28799:6;:12;28806:4;28799:12;;;;;;;;;;;;;;;;;;;;;;;;;:26;;;;28815:6;:10;28822:2;28815:10;;;;;;;;;;;;;;;;;;;;;;;;;28799:26;28795:295;;;28851:24;:35;28876:9;28851:35;;;;;;;;;;;;;;;;;;;;;;;;;28850:36;:85;;;;;28923:12;28890:18;:29;28909:9;28890:29;;;;;;;;;;;;;;;;:45;28850:85;28846:166;;;28988:4;28960:14;:25;28975:9;28960:25;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;28846:166;29062:12;29030:18;:29;29049:9;29030:29;;;;;;;;;;;;;;;:44;;;;28795:295;29111:19;:25;29131:4;29111:25;;;;;;;;;;;;;;;;;;;;;;;;;29110:26;:71;;;;;29158:19;:23;29178:2;29158:23;;;;;;;;;;;;;;;;;;;;;;;;;29157:24;29110:71;29106:1714;;;29218:13;29252:15;;29234;;:33;;;;:::i;:::-;29218:49;;29286:12;29310:18;;29301:5;:27;;29286:42;;29375:7;:43;;;;;29407:11;;;;;;;;;;;29375:43;:81;;;;;29444:6;:12;29451:4;29444:12;;;;;;;;;;;;;;;;;;;;;;;;;29443:13;29375:81;29349:307;;;29532:4;29521:8;;:15;;;;;;;;;;;;;;;;;;29559:38;29571:5;29578:18;;29559:11;:38::i;:::-;29631:5;29620:8;;:16;;;;;;;;;;;;;;;;;;29349:307;29680:11;;;;;;;;;;;29676:1127;;;29716:12;29751:18;29796:6;:10;29803:2;29796:10;;;;;;;;;;;;;;;;;;;;;;;;;:32;;;;;29827:1;29810:13;;:18;;29796:32;29792:755;;;29896:5;29880:13;;29871:6;:22;;;;:::i;:::-;:30;;;;:::i;:::-;29864:37;;29963:13;;29949:11;;29942:4;:18;;;;:::i;:::-;:34;;;;:::i;:::-;29928:48;;;;;:::i;:::-;;;30048:13;;30029:16;;30022:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;30003:15;;:58;;;;;;;:::i;:::-;;;;;;;;30133:13;;30114:16;;30107:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;30088:15;;:58;;;;;;;:::i;:::-;;;;;;;;29792:755;;;30180:6;:12;30187:4;30180:12;;;;;;;;;;;;;;;;;;;;;;;;;:33;;;;;30212:1;30196:12;;:17;;30180:33;30176:371;;;30279:5;30264:12;;30255:6;:21;;;;:::i;:::-;:29;;;;:::i;:::-;30248:36;;30345:12;;30332:10;;30325:4;:17;;;;:::i;:::-;:32;;;;:::i;:::-;30311:46;;;;;:::i;:::-;;;30428:12;;30410:15;;30403:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;30384:15;;:56;;;;;;;:::i;:::-;;;;;;;;30511:12;;30493:15;;30486:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;30467:15;;:56;;;;;;;:::i;:::-;;;;;;;;30176:371;29792:755;30580:1;30573:4;:8;30569:213;;;30620:4;30610:14;;;;;:::i;:::-;;;30651:42;30667:4;30681;30688;30651:15;:42::i;:::-;30720:38;30740:4;30747:10;30720:11;:38::i;:::-;30569:213;29693:1110;;29676:1127;29197:1623;;29106:1714;28763:2070;30845:33;30861:4;30867:2;30871:6;30845:15;:33::i;:::-;28416:2472;;;;:::o;22255:591::-;22358:1;22339:21;;:7;:21;;;22331:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22411:49;22432:7;22449:1;22453:6;22411:20;:49::i;:::-;22473:22;22498:9;:18;22508:7;22498:18;;;;;;;;;;;;;;;;22473:43;;22553:6;22535:14;:24;;22527:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;22672:6;22655:14;:23;22634:9;:18;22644:7;22634:18;;;;;;;;;;;;;;;:44;;;;22716:6;22700:12;;:22;;;;;;;:::i;:::-;;;;;;;;22766:1;22740:37;;22749:7;22740:37;;;22770:6;22740:37;;;;;;:::i;:::-;;;;;;;;22790:48;22810:7;22827:1;22831:6;22790:19;:48::i;:::-;22320:526;22255:591;;:::o;30896:926::-;30974:17;31027:5;31009:15;;30994:12;:30;;;;:::i;:::-;:38;;;;:::i;:::-;30974:58;;31043:17;31096:5;31078:15;;31063:12;:30;;;;:::i;:::-;:38;;;;:::i;:::-;31043:58;;31114:17;31146:1;31134:9;:13;;;;:::i;:::-;31114:33;;31158:20;31193:9;31181;:21;;;;:::i;:::-;31158:44;;31215:19;31249:9;31237;:21;;;;:::i;:::-;31215:43;;31271:63;31288:4;31303:15;31321:12;31271:8;:63::i;:::-;31347:29;31364:11;31347:16;:29::i;:::-;31389:18;31410:21;31389:42;;31442:17;31487:11;31475:9;31462:10;:22;;;;:::i;:::-;:36;;;;:::i;:::-;31442:56;;31511:20;31534:37;31547:12;31561:9;31534:12;:37::i;:::-;31511:60;;31587:39;31602:12;31616:9;31587:39;;;;;;;:::i;:::-;;;;;;;;31647:15;;;;;;;;;;;31639:29;;31676:21;31639:63;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31762:12;31747;:27;;;;:::i;:::-;31734:9;:41;;;;:::i;:::-;31715:15;;:60;;;;;;;:::i;:::-;;;;;;;;31805:9;31786:15;;:28;;;;;;;:::i;:::-;;;;;;;;30963:859;;;;;;;;30896:926;;:::o;20565:671::-;20712:1;20696:18;;:4;:18;;;20688:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20789:1;20775:16;;:2;:16;;;20767:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;20844:38;20865:4;20871:2;20875:6;20844:20;:38::i;:::-;20895:19;20917:9;:15;20927:4;20917:15;;;;;;;;;;;;;;;;20895:37;;20966:6;20951:11;:21;;20943:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;21083:6;21069:11;:20;21051:9;:15;21061:4;21051:15;;;;;;;;;;;;;;;:38;;;;21128:6;21111:9;:13;21121:2;21111:13;;;;;;;;;;;;;;;;:23;;;;;;;:::i;:::-;;;;;;;;21167:2;21152:26;;21161:4;21152:26;;;21171:6;21152:26;;;;;;:::i;:::-;;;;;;;;21191:37;21211:4;21217:2;21221:6;21191:19;:37::i;:::-;20677:559;20565:671;;;:::o;9094:191::-;9168:16;9187:6;;;;;;;;;;;9168:25;;9213:8;9204:6;;:17;;;;;;;;;;;;;;;;;;9268:8;9237:40;;9258:8;9237:40;;;;;;;;;;;;9157:128;9094:191;:::o;25004:125::-;;;;:::o;25733:124::-;;;;:::o;31830:428::-;31896:21;31934:1;31920:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31896:40;;31965:4;31947;31952:1;31947:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;31991:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31981:4;31986:1;31981:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;32026:15;:66;;;32107:11;32133:1;32177:4;32204;32224:15;32026:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31885:373;31830:428;:::o;32266:414::-;32345:7;32366:15;32387;:31;;;32426:9;32459:4;32479:11;32505:1;32548;32591:15;;;;;;;;;;;32621;32387:260;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32365:282;;;;32665:7;32658:14;;;32266:414;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1349:75::-;1382:6;1415:2;1409:9;1399:19;;1349:75;:::o;1430:117::-;1539:1;1536;1529:12;1553:117;1662:1;1659;1652:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:118::-;3533:24;3551:5;3533:24;:::i;:::-;3528:3;3521:37;3446:118;;:::o;3570:222::-;3663:4;3701:2;3690:9;3686:18;3678:26;;3714:71;3782:1;3771:9;3767:17;3758:6;3714:71;:::i;:::-;3570:222;;;;:::o;3798:619::-;3875:6;3883;3891;3940:2;3928:9;3919:7;3915:23;3911:32;3908:119;;;3946:79;;:::i;:::-;3908:119;4066:1;4091:53;4136:7;4127:6;4116:9;4112:22;4091:53;:::i;:::-;4081:63;;4037:117;4193:2;4219:53;4264:7;4255:6;4244:9;4240:22;4219:53;:::i;:::-;4209:63;;4164:118;4321:2;4347:53;4392:7;4383:6;4372:9;4368:22;4347:53;:::i;:::-;4337:63;;4292:118;3798:619;;;;;:::o;4423:60::-;4451:3;4472:5;4465:12;;4423:60;;;:::o;4489:142::-;4539:9;4572:53;4590:34;4599:24;4617:5;4599:24;:::i;:::-;4590:34;:::i;:::-;4572:53;:::i;:::-;4559:66;;4489:142;;;:::o;4637:126::-;4687:9;4720:37;4751:5;4720:37;:::i;:::-;4707:50;;4637:126;;;:::o;4769:152::-;4845:9;4878:37;4909:5;4878:37;:::i;:::-;4865:50;;4769:152;;;:::o;4927:183::-;5040:63;5097:5;5040:63;:::i;:::-;5035:3;5028:76;4927:183;;:::o;5116:274::-;5235:4;5273:2;5262:9;5258:18;5250:26;;5286:97;5380:1;5369:9;5365:17;5356:6;5286:97;:::i;:::-;5116:274;;;;:::o;5396:329::-;5455:6;5504:2;5492:9;5483:7;5479:23;5475:32;5472:119;;;5510:79;;:::i;:::-;5472:119;5630:1;5655:53;5700:7;5691:6;5680:9;5676:22;5655:53;:::i;:::-;5645:63;;5601:117;5396:329;;;;:::o;5731:619::-;5808:6;5816;5824;5873:2;5861:9;5852:7;5848:23;5844:32;5841:119;;;5879:79;;:::i;:::-;5841:119;5999:1;6024:53;6069:7;6060:6;6049:9;6045:22;6024:53;:::i;:::-;6014:63;;5970:117;6126:2;6152:53;6197:7;6188:6;6177:9;6173:22;6152:53;:::i;:::-;6142:63;;6097:118;6254:2;6280:53;6325:7;6316:6;6305:9;6301:22;6280:53;:::i;:::-;6270:63;;6225:118;5731:619;;;;;:::o;6356:86::-;6391:7;6431:4;6424:5;6420:16;6409:27;;6356:86;;;:::o;6448:112::-;6531:22;6547:5;6531:22;:::i;:::-;6526:3;6519:35;6448:112;;:::o;6566:214::-;6655:4;6693:2;6682:9;6678:18;6670:26;;6706:67;6770:1;6759:9;6755:17;6746:6;6706:67;:::i;:::-;6566:214;;;;:::o;6786:117::-;6895:1;6892;6885:12;6909:180;6957:77;6954:1;6947:88;7054:4;7051:1;7044:15;7078:4;7075:1;7068:15;7095:281;7178:27;7200:4;7178:27;:::i;:::-;7170:6;7166:40;7308:6;7296:10;7293:22;7272:18;7260:10;7257:34;7254:62;7251:88;;;7319:18;;:::i;:::-;7251:88;7359:10;7355:2;7348:22;7138:238;7095:281;;:::o;7382:129::-;7416:6;7443:20;;:::i;:::-;7433:30;;7472:33;7500:4;7492:6;7472:33;:::i;:::-;7382:129;;;:::o;7517:311::-;7594:4;7684:18;7676:6;7673:30;7670:56;;;7706:18;;:::i;:::-;7670:56;7756:4;7748:6;7744:17;7736:25;;7816:4;7810;7806:15;7798:23;;7517:311;;;:::o;7834:117::-;7943:1;7940;7933:12;7974:710;8070:5;8095:81;8111:64;8168:6;8111:64;:::i;:::-;8095:81;:::i;:::-;8086:90;;8196:5;8225:6;8218:5;8211:21;8259:4;8252:5;8248:16;8241:23;;8312:4;8304:6;8300:17;8292:6;8288:30;8341:3;8333:6;8330:15;8327:122;;;8360:79;;:::i;:::-;8327:122;8475:6;8458:220;8492:6;8487:3;8484:15;8458:220;;;8567:3;8596:37;8629:3;8617:10;8596:37;:::i;:::-;8591:3;8584:50;8663:4;8658:3;8654:14;8647:21;;8534:144;8518:4;8513:3;8509:14;8502:21;;8458:220;;;8462:21;8076:608;;7974:710;;;;;:::o;8707:370::-;8778:5;8827:3;8820:4;8812:6;8808:17;8804:27;8794:122;;8835:79;;:::i;:::-;8794:122;8952:6;8939:20;8977:94;9067:3;9059:6;9052:4;9044:6;9040:17;8977:94;:::i;:::-;8968:103;;8784:293;8707:370;;;;:::o;9083:539::-;9167:6;9216:2;9204:9;9195:7;9191:23;9187:32;9184:119;;;9222:79;;:::i;:::-;9184:119;9370:1;9359:9;9355:17;9342:31;9400:18;9392:6;9389:30;9386:117;;;9422:79;;:::i;:::-;9386:117;9527:78;9597:7;9588:6;9577:9;9573:22;9527:78;:::i;:::-;9517:88;;9313:302;9083:539;;;;:::o;9628:329::-;9687:6;9736:2;9724:9;9715:7;9711:23;9707:32;9704:119;;;9742:79;;:::i;:::-;9704:119;9862:1;9887:53;9932:7;9923:6;9912:9;9908:22;9887:53;:::i;:::-;9877:63;;9833:117;9628:329;;;;:::o;9963:118::-;10050:24;10068:5;10050:24;:::i;:::-;10045:3;10038:37;9963:118;;:::o;10087:222::-;10180:4;10218:2;10207:9;10203:18;10195:26;;10231:71;10299:1;10288:9;10284:17;10275:6;10231:71;:::i;:::-;10087:222;;;;:::o;10315:116::-;10385:21;10400:5;10385:21;:::i;:::-;10378:5;10375:32;10365:60;;10421:1;10418;10411:12;10365:60;10315:116;:::o;10437:133::-;10480:5;10518:6;10505:20;10496:29;;10534:30;10558:5;10534:30;:::i;:::-;10437:133;;;;:::o;10576:468::-;10641:6;10649;10698:2;10686:9;10677:7;10673:23;10669:32;10666:119;;;10704:79;;:::i;:::-;10666:119;10824:1;10849:53;10894:7;10885:6;10874:9;10870:22;10849:53;:::i;:::-;10839:63;;10795:117;10951:2;10977:50;11019:7;11010:6;10999:9;10995:22;10977:50;:::i;:::-;10967:60;;10922:115;10576:468;;;;;:::o;11050:311::-;11127:4;11217:18;11209:6;11206:30;11203:56;;;11239:18;;:::i;:::-;11203:56;11289:4;11281:6;11277:17;11269:25;;11349:4;11343;11339:15;11331:23;;11050:311;;;:::o;11384:710::-;11480:5;11505:81;11521:64;11578:6;11521:64;:::i;:::-;11505:81;:::i;:::-;11496:90;;11606:5;11635:6;11628:5;11621:21;11669:4;11662:5;11658:16;11651:23;;11722:4;11714:6;11710:17;11702:6;11698:30;11751:3;11743:6;11740:15;11737:122;;;11770:79;;:::i;:::-;11737:122;11885:6;11868:220;11902:6;11897:3;11894:15;11868:220;;;11977:3;12006:37;12039:3;12027:10;12006:37;:::i;:::-;12001:3;11994:50;12073:4;12068:3;12064:14;12057:21;;11944:144;11928:4;11923:3;11919:14;11912:21;;11868:220;;;11872:21;11486:608;;11384:710;;;;;:::o;12117:370::-;12188:5;12237:3;12230:4;12222:6;12218:17;12214:27;12204:122;;12245:79;;:::i;:::-;12204:122;12362:6;12349:20;12387:94;12477:3;12469:6;12462:4;12454:6;12450:17;12387:94;:::i;:::-;12378:103;;12194:293;12117:370;;;;:::o;12493:894::-;12611:6;12619;12668:2;12656:9;12647:7;12643:23;12639:32;12636:119;;;12674:79;;:::i;:::-;12636:119;12822:1;12811:9;12807:17;12794:31;12852:18;12844:6;12841:30;12838:117;;;12874:79;;:::i;:::-;12838:117;12979:78;13049:7;13040:6;13029:9;13025:22;12979:78;:::i;:::-;12969:88;;12765:302;13134:2;13123:9;13119:18;13106:32;13165:18;13157:6;13154:30;13151:117;;;13187:79;;:::i;:::-;13151:117;13292:78;13362:7;13353:6;13342:9;13338:22;13292:78;:::i;:::-;13282:88;;13077:303;12493:894;;;;;:::o;13393:323::-;13449:6;13498:2;13486:9;13477:7;13473:23;13469:32;13466:119;;;13504:79;;:::i;:::-;13466:119;13624:1;13649:50;13691:7;13682:6;13671:9;13667:22;13649:50;:::i;:::-;13639:60;;13595:114;13393:323;;;;:::o;13722:474::-;13790:6;13798;13847:2;13835:9;13826:7;13822:23;13818:32;13815:119;;;13853:79;;:::i;:::-;13815:119;13973:1;13998:53;14043:7;14034:6;14023:9;14019:22;13998:53;:::i;:::-;13988:63;;13944:117;14100:2;14126:53;14171:7;14162:6;14151:9;14147:22;14126:53;:::i;:::-;14116:63;;14071:118;13722:474;;;;;:::o;14202:180::-;14250:77;14247:1;14240:88;14347:4;14344:1;14337:15;14371:4;14368:1;14361:15;14388:320;14432:6;14469:1;14463:4;14459:12;14449:22;;14516:1;14510:4;14506:12;14537:18;14527:81;;14593:4;14585:6;14581:17;14571:27;;14527:81;14655:2;14647:6;14644:14;14624:18;14621:38;14618:84;;14674:18;;:::i;:::-;14618:84;14439:269;14388:320;;;:::o;14714:182::-;14854:34;14850:1;14842:6;14838:14;14831:58;14714:182;:::o;14902:366::-;15044:3;15065:67;15129:2;15124:3;15065:67;:::i;:::-;15058:74;;15141:93;15230:3;15141:93;:::i;:::-;15259:2;15254:3;15250:12;15243:19;;14902:366;;;:::o;15274:419::-;15440:4;15478:2;15467:9;15463:18;15455:26;;15527:9;15521:4;15517:20;15513:1;15502:9;15498:17;15491:47;15555:131;15681:4;15555:131;:::i;:::-;15547:139;;15274:419;;;:::o;15699:180::-;15747:77;15744:1;15737:88;15844:4;15841:1;15834:15;15868:4;15865:1;15858:15;15885:191;15925:3;15944:20;15962:1;15944:20;:::i;:::-;15939:25;;15978:20;15996:1;15978:20;:::i;:::-;15973:25;;16021:1;16018;16014:9;16007:16;;16042:3;16039:1;16036:10;16033:36;;;16049:18;;:::i;:::-;16033:36;15885:191;;;;:::o;16082:180::-;16130:77;16127:1;16120:88;16227:4;16224:1;16217:15;16251:4;16248:1;16241:15;16268:194;16308:4;16328:20;16346:1;16328:20;:::i;:::-;16323:25;;16362:20;16380:1;16362:20;:::i;:::-;16357:25;;16406:1;16403;16399:9;16391:17;;16430:1;16424:4;16421:11;16418:37;;;16435:18;;:::i;:::-;16418:37;16268:194;;;;:::o;16468:224::-;16608:34;16604:1;16596:6;16592:14;16585:58;16677:7;16672:2;16664:6;16660:15;16653:32;16468:224;:::o;16698:366::-;16840:3;16861:67;16925:2;16920:3;16861:67;:::i;:::-;16854:74;;16937:93;17026:3;16937:93;:::i;:::-;17055:2;17050:3;17046:12;17039:19;;16698:366;;;:::o;17070:419::-;17236:4;17274:2;17263:9;17259:18;17251:26;;17323:9;17317:4;17313:20;17309:1;17298:9;17294:17;17287:47;17351:131;17477:4;17351:131;:::i;:::-;17343:139;;17070:419;;;:::o;17495:225::-;17635:34;17631:1;17623:6;17619:14;17612:58;17704:8;17699:2;17691:6;17687:15;17680:33;17495:225;:::o;17726:366::-;17868:3;17889:67;17953:2;17948:3;17889:67;:::i;:::-;17882:74;;17965:93;18054:3;17965:93;:::i;:::-;18083:2;18078:3;18074:12;18067:19;;17726:366;;;:::o;18098:419::-;18264:4;18302:2;18291:9;18287:18;18279:26;;18351:9;18345:4;18341:20;18337:1;18326:9;18322:17;18315:47;18379:131;18505:4;18379:131;:::i;:::-;18371:139;;18098:419;;;:::o;18523:223::-;18663:34;18659:1;18651:6;18647:14;18640:58;18732:6;18727:2;18719:6;18715:15;18708:31;18523:223;:::o;18752:366::-;18894:3;18915:67;18979:2;18974:3;18915:67;:::i;:::-;18908:74;;18991:93;19080:3;18991:93;:::i;:::-;19109:2;19104:3;19100:12;19093:19;;18752:366;;;:::o;19124:419::-;19290:4;19328:2;19317:9;19313:18;19305:26;;19377:9;19371:4;19367:20;19363:1;19352:9;19348:17;19341:47;19405:131;19531:4;19405:131;:::i;:::-;19397:139;;19124:419;;;:::o;19549:221::-;19689:34;19685:1;19677:6;19673:14;19666:58;19758:4;19753:2;19745:6;19741:15;19734:29;19549:221;:::o;19776:366::-;19918:3;19939:67;20003:2;19998:3;19939:67;:::i;:::-;19932:74;;20015:93;20104:3;20015:93;:::i;:::-;20133:2;20128:3;20124:12;20117:19;;19776:366;;;:::o;20148:419::-;20314:4;20352:2;20341:9;20337:18;20329:26;;20401:9;20395:4;20391:20;20387:1;20376:9;20372:17;20365:47;20429:131;20555:4;20429:131;:::i;:::-;20421:139;;20148:419;;;:::o;20573:179::-;20713:31;20709:1;20701:6;20697:14;20690:55;20573:179;:::o;20758:366::-;20900:3;20921:67;20985:2;20980:3;20921:67;:::i;:::-;20914:74;;20997:93;21086:3;20997:93;:::i;:::-;21115:2;21110:3;21106:12;21099:19;;20758:366;;;:::o;21130:419::-;21296:4;21334:2;21323:9;21319:18;21311:26;;21383:9;21377:4;21373:20;21369:1;21358:9;21354:17;21347:47;21411:131;21537:4;21411:131;:::i;:::-;21403:139;;21130:419;;;:::o;21555:332::-;21676:4;21714:2;21703:9;21699:18;21691:26;;21727:71;21795:1;21784:9;21780:17;21771:6;21727:71;:::i;:::-;21808:72;21876:2;21865:9;21861:18;21852:6;21808:72;:::i;:::-;21555:332;;;;;:::o;21893:410::-;21933:7;21956:20;21974:1;21956:20;:::i;:::-;21951:25;;21990:20;22008:1;21990:20;:::i;:::-;21985:25;;22045:1;22042;22038:9;22067:30;22085:11;22067:30;:::i;:::-;22056:41;;22246:1;22237:7;22233:15;22230:1;22227:22;22207:1;22200:9;22180:83;22157:139;;22276:18;;:::i;:::-;22157:139;21941:362;21893:410;;;;:::o;22309:180::-;22357:77;22354:1;22347:88;22454:4;22451:1;22444:15;22478:4;22475:1;22468:15;22495:185;22535:1;22552:20;22570:1;22552:20;:::i;:::-;22547:25;;22586:20;22604:1;22586:20;:::i;:::-;22581:25;;22625:1;22615:35;;22630:18;;:::i;:::-;22615:35;22672:1;22669;22665:9;22660:14;;22495:185;;;;:::o;22686:220::-;22826:34;22822:1;22814:6;22810:14;22803:58;22895:3;22890:2;22882:6;22878:15;22871:28;22686:220;:::o;22912:366::-;23054:3;23075:67;23139:2;23134:3;23075:67;:::i;:::-;23068:74;;23151:93;23240:3;23151:93;:::i;:::-;23269:2;23264:3;23260:12;23253:19;;22912:366;;;:::o;23284:419::-;23450:4;23488:2;23477:9;23473:18;23465:26;;23537:9;23531:4;23527:20;23523:1;23512:9;23508:17;23501:47;23565:131;23691:4;23565:131;:::i;:::-;23557:139;;23284:419;;;:::o;23709:221::-;23849:34;23845:1;23837:6;23833:14;23826:58;23918:4;23913:2;23905:6;23901:15;23894:29;23709:221;:::o;23936:366::-;24078:3;24099:67;24163:2;24158:3;24099:67;:::i;:::-;24092:74;;24175:93;24264:3;24175:93;:::i;:::-;24293:2;24288:3;24284:12;24277:19;;23936:366;;;:::o;24308:419::-;24474:4;24512:2;24501:9;24497:18;24489:26;;24561:9;24555:4;24551:20;24547:1;24536:9;24532:17;24525:47;24589:131;24715:4;24589:131;:::i;:::-;24581:139;;24308:419;;;:::o;24733:332::-;24854:4;24892:2;24881:9;24877:18;24869:26;;24905:71;24973:1;24962:9;24958:17;24949:6;24905:71;:::i;:::-;24986:72;25054:2;25043:9;25039:18;25030:6;24986:72;:::i;:::-;24733:332;;;;;:::o;25071:147::-;25172:11;25209:3;25194:18;;25071:147;;;;:::o;25224:114::-;;:::o;25344:398::-;25503:3;25524:83;25605:1;25600:3;25524:83;:::i;:::-;25517:90;;25616:93;25705:3;25616:93;:::i;:::-;25734:1;25729:3;25725:11;25718:18;;25344:398;;;:::o;25748:379::-;25932:3;25954:147;26097:3;25954:147;:::i;:::-;25947:154;;26118:3;26111:10;;25748:379;;;:::o;26133:224::-;26273:34;26269:1;26261:6;26257:14;26250:58;26342:7;26337:2;26329:6;26325:15;26318:32;26133:224;:::o;26363:366::-;26505:3;26526:67;26590:2;26585:3;26526:67;:::i;:::-;26519:74;;26602:93;26691:3;26602:93;:::i;:::-;26720:2;26715:3;26711:12;26704:19;;26363:366;;;:::o;26735:419::-;26901:4;26939:2;26928:9;26924:18;26916:26;;26988:9;26982:4;26978:20;26974:1;26963:9;26959:17;26952:47;27016:131;27142:4;27016:131;:::i;:::-;27008:139;;26735:419;;;:::o;27160:222::-;27300:34;27296:1;27288:6;27284:14;27277:58;27369:5;27364:2;27356:6;27352:15;27345:30;27160:222;:::o;27388:366::-;27530:3;27551:67;27615:2;27610:3;27551:67;:::i;:::-;27544:74;;27627:93;27716:3;27627:93;:::i;:::-;27745:2;27740:3;27736:12;27729:19;;27388:366;;;:::o;27760:419::-;27926:4;27964:2;27953:9;27949:18;27941:26;;28013:9;28007:4;28003:20;27999:1;27988:9;27984:17;27977:47;28041:131;28167:4;28041:131;:::i;:::-;28033:139;;27760:419;;;:::o;28185:225::-;28325:34;28321:1;28313:6;28309:14;28302:58;28394:8;28389:2;28381:6;28377:15;28370:33;28185:225;:::o;28416:366::-;28558:3;28579:67;28643:2;28638:3;28579:67;:::i;:::-;28572:74;;28655:93;28744:3;28655:93;:::i;:::-;28773:2;28768:3;28764:12;28757:19;;28416:366;;;:::o;28788:419::-;28954:4;28992:2;28981:9;28977:18;28969:26;;29041:9;29035:4;29031:20;29027:1;29016:9;29012:17;29005:47;29069:131;29195:4;29069:131;:::i;:::-;29061:139;;28788:419;;;:::o;29213:143::-;29270:5;29301:6;29295:13;29286:22;;29317:33;29344:5;29317:33;:::i;:::-;29213:143;;;;:::o;29362:351::-;29432:6;29481:2;29469:9;29460:7;29456:23;29452:32;29449:119;;;29487:79;;:::i;:::-;29449:119;29607:1;29632:64;29688:7;29679:6;29668:9;29664:22;29632:64;:::i;:::-;29622:74;;29578:128;29362:351;;;;:::o;29719:85::-;29764:7;29793:5;29782:16;;29719:85;;;:::o;29810:158::-;29868:9;29901:61;29919:42;29928:32;29954:5;29928:32;:::i;:::-;29919:42;:::i;:::-;29901:61;:::i;:::-;29888:74;;29810:158;;;:::o;29974:147::-;30069:45;30108:5;30069:45;:::i;:::-;30064:3;30057:58;29974:147;;:::o;30127:114::-;30194:6;30228:5;30222:12;30212:22;;30127:114;;;:::o;30247:184::-;30346:11;30380:6;30375:3;30368:19;30420:4;30415:3;30411:14;30396:29;;30247:184;;;;:::o;30437:132::-;30504:4;30527:3;30519:11;;30557:4;30552:3;30548:14;30540:22;;30437:132;;;:::o;30575:108::-;30652:24;30670:5;30652:24;:::i;:::-;30647:3;30640:37;30575:108;;:::o;30689:179::-;30758:10;30779:46;30821:3;30813:6;30779:46;:::i;:::-;30857:4;30852:3;30848:14;30834:28;;30689:179;;;;:::o;30874:113::-;30944:4;30976;30971:3;30967:14;30959:22;;30874:113;;;:::o;31023:732::-;31142:3;31171:54;31219:5;31171:54;:::i;:::-;31241:86;31320:6;31315:3;31241:86;:::i;:::-;31234:93;;31351:56;31401:5;31351:56;:::i;:::-;31430:7;31461:1;31446:284;31471:6;31468:1;31465:13;31446:284;;;31547:6;31541:13;31574:63;31633:3;31618:13;31574:63;:::i;:::-;31567:70;;31660:60;31713:6;31660:60;:::i;:::-;31650:70;;31506:224;31493:1;31490;31486:9;31481:14;;31446:284;;;31450:14;31746:3;31739:10;;31147:608;;;31023:732;;;;:::o;31761:831::-;32024:4;32062:3;32051:9;32047:19;32039:27;;32076:71;32144:1;32133:9;32129:17;32120:6;32076:71;:::i;:::-;32157:80;32233:2;32222:9;32218:18;32209:6;32157:80;:::i;:::-;32284:9;32278:4;32274:20;32269:2;32258:9;32254:18;32247:48;32312:108;32415:4;32406:6;32312:108;:::i;:::-;32304:116;;32430:72;32498:2;32487:9;32483:18;32474:6;32430:72;:::i;:::-;32512:73;32580:3;32569:9;32565:19;32556:6;32512:73;:::i;:::-;31761:831;;;;;;;;:::o;32598:807::-;32847:4;32885:3;32874:9;32870:19;32862:27;;32899:71;32967:1;32956:9;32952:17;32943:6;32899:71;:::i;:::-;32980:72;33048:2;33037:9;33033:18;33024:6;32980:72;:::i;:::-;33062:80;33138:2;33127:9;33123:18;33114:6;33062:80;:::i;:::-;33152;33228:2;33217:9;33213:18;33204:6;33152:80;:::i;:::-;33242:73;33310:3;33299:9;33295:19;33286:6;33242:73;:::i;:::-;33325;33393:3;33382:9;33378:19;33369:6;33325:73;:::i;:::-;32598:807;;;;;;;;;:::o;33411:143::-;33468:5;33499:6;33493:13;33484:22;;33515:33;33542:5;33515:33;:::i;:::-;33411:143;;;;:::o;33560:663::-;33648:6;33656;33664;33713:2;33701:9;33692:7;33688:23;33684:32;33681:119;;;33719:79;;:::i;:::-;33681:119;33839:1;33864:64;33920:7;33911:6;33900:9;33896:22;33864:64;:::i;:::-;33854:74;;33810:128;33977:2;34003:64;34059:7;34050:6;34039:9;34035:22;34003:64;:::i;:::-;33993:74;;33948:129;34116:2;34142:64;34198:7;34189:6;34178:9;34174:22;34142:64;:::i;:::-;34132:74;;34087:129;33560:663;;;;;:::o

Swarm Source

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